2016-11-13 186 views
1

我正在学习关于Oracle数据库架构的一些基本知识,并且有两个示例。DBwn何时将数据库缓冲区缓冲区中的缓冲区更新为数据库磁盘?

  1. 执行数据操纵语言(DML)语句所涉及的步骤。
  2. 执行COMMIT命令所涉及的步骤。

Executing DML steps

的步骤如下:

  1. 服务器进程接收的发言,并检查包含一个类似的SQL语句的任何共享SQL区库缓存。 如果找到共享SQL区域,则服务器进程检查用户对所请求数据的访问权限 ,并使用现有的共享SQL 区域处理该语句。如果不是,则为该语句分配新的共享SQL区域 ,以便可以解析并处理 。
  2. 如果数据段和还原段数据块尚未存在于缓冲区高速缓存中,则服务器进程会将它们从数据文件读取到缓冲区高速缓存中。服务器进程锁定将被修改的行数为 。
  3. 服务器进程记录要对数据缓冲区所做的更改以及撤消更改。在内存数据和撤消缓冲区修改为 之前,这些更改将写入 重做日志缓冲区。这被称为预写日志。
  4. 撤销段缓冲区包含数据修改前的值。撤消缓冲区用于存储 数据的以前图像,以便必要时可以回滚DML语句。数据缓冲区记录数据的新值。
  5. 用户从DML操作获得反馈(例如操作影响了多少行)。

COMMIT Process steps

的步骤如下:

  1. 服务器进程放置一个提交记录,该系统改变号(SCN)沿,在重做日志缓冲器。 SCN是单调递增的,在数据​​库中是唯一的 。
  2. LGWR后台进程将所有重做日志缓冲区条目连续写入到并包括提交记录到 重做日志文件。
  3. 如果修改的块仍在SGA中,并且没有其他会话正在修改它们,则数据库将从块中删除锁定相关事务 信息。
  4. 服务器进程向用户进程提供关于事务完成的反馈。

第一个问题:你的服务器进程或后台进程终于移动或迁移重做日志文件的数据文件?如果是的话,如何做这个过程?

感谢尼古拉斯克拉斯诺夫& JSapkota评论。不存在这种“迁移”过程,因为它们有不同的用途。数据文件是数据库的数据,重做日志文件用于恢复数据库。 DBWn负责将数据写入数据文件,而LGWR将重做日志缓冲区写入磁盘上的活动重做日志文件。

我的第二个问题:DBwn(数据库写入进程)何时将缓存中的缓冲区修改为数据库磁盘?在COMMIT之前或COMMIT之后更新数据库磁盘。

+1

不是,LGWR(Log Writer后台进程)将重做日志(仅更改向量)写入重做日志缓冲区中的红色日志文件。 DBWR(数据库写入器进程)将脏缓冲区(缓冲区缓存上的修改块,实际数据)写入数据文件。 – JSapkota

+1

'将重做日志文件移动或迁移到数据文件?'数据文件和重做日志文件吃了两种完全不同类型的文件。一个人从不“向”另一个“迁移”。他们在那里服务于不同的目的 –

回答

0

DBwn由于发出commit声明将不会写入数据库文件。 Commit只是意味着这是交易的结束。释放表或行上的锁,SCN递增,并且LGWR写入SCN并更改为在线重做文件。

数据库高速缓存有两个列表

1) Write list 
2) least-recently-used (LRU) list 

最近最少使用(LRU)列表中有脏缓冲区。脏缓冲区是被修改的那些缓冲区。 Commit会间接地使缓冲区变脏。它将在最近访问过的缓冲区中。

DBwn在提交之前或之后都不写入数据文件。它有自己的情景,如当检查点发生或脏缓冲区达到阈值或没有自由缓冲区等。

我希望我回答你的问题。谢谢。

+1

谢谢,根据你的回答,我发现这个网站的更详细的信息:https://docs.oracle.com/cd/B28359_01/server.111/b28318/memory.htm#i10221 – shawn

+0

很高兴帮助你。如果你对答案感到满意,那么接受它作为答案。谢谢。 – Faz13able