SQL> select file#,name,status,to_char(checkpoint_change#) from v$datafile;
FILE# NAME STATUS TO_CHAR(CHECKPOINT_CHANGE#)
---------- ------------------------------ ------- ----------------------------------------
1 /oradata/EMR/system01.dbf SYSTEM 72208371152
2 /oradata/EMR/htcpp01.dbf ONLINE 72208371152
3 /oradata/EMR/sysaux01.dbf ONLINE 72208371152
4 /oradata/EMR/undotbs01.dbf ONLINE 72208371152
SQL> select file#,to_char(checkpoint_change#) from v$datafile_header;
FILE# TO_CHAR(CHECKPOINT_CHANGE#)
---------- ----------------------------------------
1 72208371152
2 72208371152
3 72208371152
生产端做了几个checkpoint后,控制文件的改变了,但是数据文件头中的还是没有变更,奇怪。
SQL> alter system checkpoint;
生产数据文件头的scn看起来像是被锁住了
查看scn对应时间点
SQL> select to_char(scn_to_timestamp(72365504792), 'yyyy-mm-dd hh24:mi:ss') chr,timestamp_to_scn(scn_to_timestamp(72365504792)) dt from dual;
CHR DT
------------------- ----------
2022-10-08 14:46:35 7.2366E+10
SQL> select to_char(scn_to_timestamp(72208371152), 'yyyy-mm-dd hh24:mi:ss') chr,timestamp_to_scn(scn_to_timestamp(72208371152)) dt from dual;
CHR DT
------------------- ----------
2022-10-07 20:58:37 7.2208E+10
控制文件中的scn对应的是当前时间,数据文件头中对应的是前一天晚上的时间。
突然想到昨天这个时间点工程师在做dg恢复,使用了命令
SQL> alter database begin backup;
注意:alter database begin backup只是锁住了数据文件头块的scn号,
但是数据还是会继续写入数据文件,当执行alter database end backup的时候,数据库就会用控制文件中最新的scn去更新每个数据文件头部块的scn。
切记:打开备份模式后,一定要记得关闭,不然数据库重启后将无法打开。