温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

oracle后台进程LGWR,DBWR,SMON,CKPT的工作机制

发布时间:2020-08-19 11:39:02 来源:ITPUB博客 阅读:241 作者:家有ORACLE老公 栏目:关系型数据库

oracle后台进程LGWR,DBWR,SMON,CKPT的工作机制

控制文件:记载了数据文件名称和路径。重做日志名称和位置,日志序列号,检查点和日志历史信息,以及RMAN备份信息。当oracle服务器出现实例失败或介质失败时,通过控制文件所记载的日志和检查点信息,oracle可以确定执行恢复所需要的日志文件。

数据文件:是用于存储数据库数据的物理文件,它由若干个操作系统系统文件组成,在数据文件中中存储着用户数据(表,索引等),数据字典以及回滚段数据等。数据文件和表空间有着密切的关系,oracle数据库至少要包含一个数据文件,并且数据文件是表空间的物理组成元素,一个表空间可以包含多个数据文件,并且每个数据文件只能唯一的属于某个表空间。

联机重做日志文件:重做日志文件是用于记录数据库变化的物理文件,其作用是在发生意外时恢复oracle数据库。
日志文件以日志文件组的形式存在。
我们知道重做日志缓冲区是循环使用的:当重做日志缓冲区的重做项被写入联机重做日志文件后,重做日志缓冲去的内容被覆盖,但是这种循环以组的方式循环。


LGWR日志写入进程:LGWR日志写入进程负责将重做日志缓存区的日志条目写入磁盘上的联机日志文件。当运行DML或DDL语句时,服务器进程首先要将事物的变化记载道重做日志缓存区,然后才会写入数据高速缓冲区,并且重做日志缓冲区的内容将会被写入连接日志文件,以避免系统出现意外带来的数据损失(如果操作系统断电,内存中的重做日志缓冲区的内容会丢失,而存在磁盘上的联机日志文件则不会丢失),这项任务由LGWR来完成。
重做日志缓存区是一个循环结构,LGWR将重做日志缓冲区中的重做记录写入联机重做日志文件后,相应的缓冲区内容将被清空,保证orale有空闲的重做日志缓冲区可以写入。

在出现以下情况时LGWR会开始工作:

--在DBWR进程将脏缓冲区写入数据文件之前。
--在重做日志记录达到缓冲区的三分之一。
--日志缓冲区记录的日志多余1m。
--每隔3秒钟。//重做日子缓冲区是循环使用的,要腾出足够的空间给新的记录使用
--提交事务(执行commit)//提交事务相当于确定保存修改,不存入日志文件有丢失的可能。


另外。oracle采用了快速提交机制,当执行commit操作时,并不是将’脏缓冲区‘’数据写入到数据文件中,而是将重做日志缓冲区的内容写入到重做日志文件中,以确保数据库完整性。此时即使系统出现意外情况(掉电,系统崩溃),因为被提交事务已经记载到了存放在磁盘上的联机重做日志文件中,将来在重新启动时会自动进行实例恢复,
并将被提交事务所修改数据写入到数据文件中,从而避免了数据丢失。

DBWn数据库写入进程:
数据库写入进程负责将数据库高速缓冲区(脏缓冲区)的类容写入到数据文件。尽管有一个数据库写进程 (DBW0)适用于大多数系统,但数据库管理员可以配置额外的进程(DBW0-DBW9,最多10个进程),以提高写入性能,通过初始化参数DB_WRITER_PROCESSES来完成。当数据库高速缓冲区的快被修改, 它被标记为脏缓冲区并添加到以SCN为循序的LRUW列表,同时,这个顺序与重做日志缓冲区的顺序一致。
在出现一下情况时DBWn进程会开始工作
--系统发出检查点指令。//同步数据,详见检查点进程(CKPT)
--脏缓冲区个数达到指定阈值。
--服务进程搜索一定数目的数据块后,不能找到自由缓冲区。
--数据写入计时时间到。
--表空间脱机或进入只读状态。
--执行删除或截断表操作
--执行alter  tablespace.....begin  backup命令。//需要同步数据,原理同检查点。
.

数据修改到发生检查点整个流程
1   当数据被修改时,第一次读取,需要将数据从数据文件读入数据库高速缓冲区。
2   数据读入数据库高速缓冲区后。我们修改数据的条目先记录入重做日志缓冲区;
3   接着新数据被写入数据库高速缓冲区.
4    提交,LGWR进程将条目从重做日志缓冲区写入联机重做日志文件,
5    执行检察点CKPT,同步数据库,发现联机日志文件为最新,同步更新数据文件,控制文件,触发了DBWn进程。

SMON系统监控进程
SMON系统监控进程主要作用是强制对数据库进行恢复操作。在实例启动时,如果上一次数据库是非正常关闭,并且重做日志文件和控制文件的SCN值是不同的,oracle将自动在重新打开数据库之前,通过执行重做日志文件的记录,来同步所有数据文件,控制文件和重做日志文件,确保所有数据库文件的一致性,然后才打开数据库。
如果检查点进程一列中,第四步完成后发生系统掉电,崩溃,那么数据会不会丢失了?当然不会。我们知道,系统掉电,导致内存中的数据丢失。那么自然上列中的第五步无法完成(无法从数据库告诉缓冲区写入数据文件),但是由于此时已写入联机日志文件。因此,此时数据将从链接日志文件中更新,而更新的数据量是多少,自然是由SCN决定。这一过程我们称为''实例恢复''。该过程不需要数据库管理员手工干预,由SMON进程自动完成。

SMON进程的工作归纳如下:

--进行实例恢复
--合并数据文件的自由空间
--释放数据文件的临时段

CKPT检查点进程

CKPT检查点进程的作用是执行一个检查点,同步数据库的所有数据文件,控制文件和重做日志文件。当执行检察点时,系统促使DBWn将数据缓存区中数据的变化写入数据文件,同时完成对数据文件和控制文件的更新,记录下当前数据库的结构和状态。在执行一个检查点之后,数据库处于一个完整状态。在数据库发生崩溃后,可以将数据库恢复到上一个检查点。oracle数据库在执行数据变化的语句时,会针对任何修改生成一个顺序递增SCN值,并且会将SCN值连同事物的变化一起记载到重做日志缓存区。在数据文件。控制文件头部以及重做日志文件中都记载有该值。oracle通过比较各种文件的SCN值,确定文件是否损坏,系统是否异常,最终确定系统是需要进行实例恢复还是介质恢复。在发出检查点时,数据文件。控制文件和重做日志的SCN值完全一致。

分类:全局检查点(关闭数据库时)、局部检查点(表空间)、增量检查点(切日志组)

进程CKPT在以下情况下会开始工作

--发生日志切换    alter system switch logfile;

--关闭实例   
--手工执行检查点操作   alter system checkpoint;
--有初始化参数log_checkpoint_interval和log_checkpoint_timeout强制发出

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI