易网时代-编程资源站
Welcome
微信登录
首页
/
数据库
/
MySQL
/
理解redo(6)日志却的流程和直接路径加载的REDO分析
当server process得到redo allocation latch进行redo log buffer分配之前,需要先嗅一下redo log file是否有足够的空间。倘若空间不足,则sp会发送switch log file的请求,然后坐等log file switch completion事件的完成了。日志却请求发出后,CKPT会进行一次增量检查点事件,而LGWR开始进行日志却换工作。具体流程如下:1)LGWR进程会通过控制文件中的双向链表,查找到一个可用的REDO LOG文件,作为新的CURRENT REDO LOG。算法如下:日志文件是inactive,并且已经归档了优先使用unused日志文件组2)将redo log buffer中还未写入的redo entries flush到current online redo log file,并且将最后一条redo entries的SCN作为本日志文件的high SCN记录在redo log header里面,然后关闭current online redo log file。3)进行第二次控制文件事务,将刚刚关闭的REDO LOG标识为ACTIVE(这是个增量检查点事件,之所以标识为active,是因为它所保护的dirty buffer可能还未写到数据文件,如果已经全部写到磁盘了,则可以标识为inactive)将新的当前REDO LOG标识为CURRENT,如果数据库处于归档模式,还要将老的日志组记录到控制文件归档列表记录中,并且通知ARCn对该日志文件进行归档。4)LGWR打开新的日志组的所有成员,在日志文件头记录当前日志sequence#和第一个redo block 的SCN(LOW SCN)5)LGWR修改SGA中的标志位,允许生成新的REDO LOG信息综上所述,日志切换是一种较为昂贵的操作。因为在却换期间,对数据库所有的交易都将被阻塞。但是加大REDO LOG文件大小和丢失数据的多少是无关的。理由:1)redo entries是顺序写入的,写入一个和写入多个,对于恢复而言是一样的2)存储故障,受影响的肯定是所有的REDO LOG文件ARCHIVE模式下,直接路径加载会记录REDO。在非ARCHIVE LOG 模式下,直接路径加载这个动作不会记录REDO,但是Oracle由于系统改动需要维护段、区、表空间等而会产生REDO的。下面将redo log file给dump出来
09:29:36 sys@ORCL (^ω^) conn hr/hr
已连接。
09:34:57 hr@ORCL (^ω^)
create
table
test
as
select
*
from
dba_objects
where
1=2;
表已创建。
09:35:41 hr@ORCL (^ω^)
select
dbms_flashback.get_system_change_number
from
dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
2804230
09:36:06 hr@ORCL (^ω^)
select
group
#,status
from
v$log;
GROUP
# STATUS
---------- --------------------------------
1
CURRENT
2 INACTIVE
3 INACTIVE
09:36:26 hr@ORCL (^ω^) col member
for
a72
09:36:36 hr@ORCL (^ω^)
select
group
#,member
from
v$logfile;
GROUP
# MEMBER
---------- ------------------------------------------------------------------------
3 D:ORACLEPRODUCT10.2.0ORADATAORCLONLINELOGO1_MF_3_7TQZWZOY_.LOG
3 D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLONLINELOGO1_MF_3_7TQZ
X11D_.LOG
2 D:ORACLEPRODUCT10.2.0ORADATAORCLONLINELOGO1_MF_2_7TQZWXO2_.LOG
2 D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLONLINELOGO1_MF_2_7TQZ
WYPH_.LOG
1 D:ORACLEPRODUCT10.2.0ORADATAORCLONLINELOGO1_MF_1_7TQZWVDD_.LOG
1 D:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLONLINELOGO1_MF_1_7TQZ
WWJ8_.LOG
已选择6行。
09:37:24 hr@ORCL (^ω^)
select
dbms_flashback.get_system_change_number
from
dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
2804353
09:37:59 hr@ORCL (^ω^)
insert
/*+append*/
into
test
select
*
from
dba_objects;
已创建50453行。
09:39:15 hr@ORCL (^ω^)
commit
;
提交完成。
09:39:21 hr@ORCL (^ω^)
select
dbms_flashback.get_system_change_number
from
dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
2804521
09:39:29 hr@ORCL (^ω^)
alter
system dump logfile
"D:ORACLEPRODUCT10.2.0ORADATAORCLONLINELOGO1_MF_1_7TQZWVDD_.LOG"
09:40:25 2 scn
min
2804353 scn
max
2804521;
系统已更改。
09:40:57 hr@ORCL (^ω^) conn /
as
sysdba
已连接。
09:41:09 sys@ORCL (^ω^) archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 3
下一个存档日志序列 5
当前日志序列 5
09:41:19 sys@ORCL (^ω^)
alter
system dump logfile
"D:ORACLEPRODUCT10.2.0ORADATAORCLONLINELOGO1_MF_1_7TQZWVDD_.LOG"
09:43:23 2 scn
min
2804230 scn
max
2804521;
系统已更改。
09:44:03 sys@ORCL (^ω^) conn hr/hr
已连接。
09:45:58 hr@ORCL (^ω^)
select
dbms_flashback.get_system_change_number
from
dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
2804801
09:46:07 hr@ORCL (^ω^)
insert
/*+ APPEND */
into
text
select
*
from
dba_objects;
insert
/*+ APPEND */
into
text
select
*
from
dba_objects
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
09:47:42 hr@ORCL (^ω^)
insert
/*+ APPEND */
into
test
select
*
from
dba_objects;
已创建50453行。
09:47:53 hr@ORCL (^ω^)
commit
;
提交完成。
09:47:58 hr@ORCL (^ω^)
select
dbms_flashback.get_system_change_number
from
dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
2805155
09:48:10 hr@ORCL (^ω^)
select
group
#,status
from
v$log;
GROUP
# STATUS
---------- --------------------------------
1
CURRENT
2 INACTIVE
3 INACTIVE
09:48:50 hr@ORCL (^ω^)
alter
system dump logfile
"D:ORACLEPRODUCT10.2.0ORADATAORCLONLINELOGO1_MF_1_7TQZWVDD_.LOG"
09:49:32 2 scn
min
2804801 scn
max
2805155;
1
2
下一页
恢复PL/SQL Developer中删除确认对话框MySQL自动备份脚本及异地定时FTP相关资讯 redo
大量redo生成的问题原因及改进 (09/06/2015 21:44:21)
Oracle 10g Standby Database 实时 (12/22/2014 18:34:35)
普通表与临时表DML操作会产生REDO/ (09/17/2013 20:29:12)
online redo日志文件损坏恢复 (01/11/2015 08:36:34)
Redo丢失的4种情况及处理方法 (11/26/2014 11:12:28)
Oracle redo 日志调整 (06/07/2013 16:13:00)
本文评论 查看全部评论 (0)
表情: 姓名:
匿名
字数
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图