SCN与恢复

1.SCN

system change number(SCN)记录了数据库的数据库commit的版本信息。当所有数据文件中的SCN号与控制文件中的SCN相同的时候,表明数据库是一致的,数据库不需要恢复。

控制文件中记录的SCN号

sys@WISON>select file#,checkpoint_change# from v$datafile;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            1745302
         2            1745302
         3            1745302
         4            1745302
         5            1745302
         6            1745302
         7            1745302

7 rows selected.

sys@WISON>

数据文件中的SCN号

sys@WISON>select file#,checkpoint_change# from v$datafile_header;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            1745302
         2            1745302
         3            1745302
         4            1745302
         5            1745302
         6            1745302
         7            1745302

7 rows selected.
当控制文件中的SCN号与数据文件中的SCN号一致的时候,不需要恢复。

s1.删除一个数据文件

[oracle@oracle11gdemo ~]$ cd /u01/oradata/wison/
[oracle@oracle11gdemo wison]$ ls -l
total 2437324
-rw-r-----  1 oracle oinstall   9977856 Oct 18 13:53 control01.ctl
-rw-r-----  1 oracle oinstall 104865792 Oct 18 13:48 example01.dbf
-rw-r-----  1 oracle oinstall  52429312 Oct 18 13:48 redo01.log
-rw-r-----  1 oracle oinstall  52429312 Oct 18 13:48 redo02.log
-rw-r-----  1 oracle oinstall  52429312 Oct 18 13:52 redo03.log
-rw-r-----  1 oracle oinstall 576724992 Oct 18 13:48 sysaux01.dbf
-rw-r-----  1 oracle oinstall 734011392 Oct 18 13:48 system01.dbf
-rw-r-----  1 oracle oinstall  30416896 Oct 18 12:52 temp01.dbf
-rw-r-----  1 oracle oinstall   5259264 Oct 18 13:48 ts_16k.dbf
-rw-r-----  1 oracle oinstall  10493952 Oct 18 13:48 undo_small.dbf
-rw-r-----  1 oracle oinstall 723525632 Oct 18 13:48 undotbs01.dbf
-rw-r-----  1 oracle oinstall 148119552 Oct 18 13:48 users01.dbf
[oracle@oracle11gdemo wison]$ cp example01.dbf /tmp/
[oracle@oracle11gdemo wison]$ rm example01.dbf 
[oracle@oracle11gdemo wison]$ ls -l
total 2334812
-rw-r-----  1 oracle oinstall   9977856 Oct 18 13:53 control01.ctl
-rw-r-----  1 oracle oinstall  52429312 Oct 18 13:48 redo01.log
-rw-r-----  1 oracle oinstall  52429312 Oct 18 13:48 redo02.log
-rw-r-----  1 oracle oinstall  52429312 Oct 18 13:53 redo03.log
-rw-r-----  1 oracle oinstall 576724992 Oct 18 13:53 sysaux01.dbf
-rw-r-----  1 oracle oinstall 734011392 Oct 18 13:53 system01.dbf
-rw-r-----  1 oracle oinstall  30416896 Oct 18 12:52 temp01.dbf
-rw-r-----  1 oracle oinstall   5259264 Oct 18 13:48 ts_16k.dbf
-rw-r-----  1 oracle oinstall  10493952 Oct 18 13:48 undo_small.dbf
-rw-r-----  1 oracle oinstall 723525632 Oct 18 13:53 undotbs01.dbf
-rw-r-----  1 oracle oinstall 148119552 Oct 18 13:48 users01.dbf
[oracle@oracle11gdemo wison]$ 


s2.关闭数据库

shutdown abort

s3.重新把数据库mount,从v$recover_file中查需要恢复的数据文件。

sys@WISON>startup mount
ORACLE instance started.

Total System Global Area  640286720 bytes
Fixed Size                  1338420 bytes
Variable Size             457180108 bytes
Database Buffers          176160768 bytes
Redo Buffers                5607424 bytes
Database mounted.
sys@WISON>col error for a10
sys@WISON>select * from v$recover_file;

     FILE# ONLINE  ONLINE_ ERROR         CHANGE# TIME
---------- ------- ------- ---------- ---------- ---------
         5 ONLINE  ONLINE  FILE NOT            0
                           FOUND


sys@WISON>
发现5号文件需要恢复,5号文件正是刚刚删除的文件

s4.比较5号文件与控制文件中的SCN是不是一致(相同)

控制文件中SCN信息,如下

sys@WISON>select file#,checkpoint_change# from v$datafile;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            1745302
         2            1745302
         3            1745302
         4            1745302
         5            1745302
         6            1745302
         7            1745302

7 rows selected.

sys@WISON>
数据文件中的中的SCN号

sys@WISON>select file#,checkpoint_change# from v$datafile_header;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            1745302
         2            1745302
         3            1745302
         4            1745302
         5                  0
         6            1745302
         7            1745302

7 rows selected.

sys@WISON>



发现5号文件中的SCN号与控制文件中记录的SCN号不同,所以5号文件需要恢复

s5.恢复5号数据文件,恢复分两步

  • 还原5号数据文件(从备份copy到磁盘)
  • 恢复(使用recover命令)

还原数据文件

[oracle@oracle11gdemo ~]$ cd /u01/oradata/wison/
[oracle@oracle11gdemo wison]$ ls -l
total 2334812
-rw-r-----  1 oracle oinstall   9977856 Oct 18 14:03 control01.ctl
-rw-r-----  1 oracle oinstall  52429312 Oct 18 13:48 redo01.log
-rw-r-----  1 oracle oinstall  52429312 Oct 18 13:48 redo02.log
-rw-r-----  1 oracle oinstall  52429312 Oct 18 13:54 redo03.log
-rw-r-----  1 oracle oinstall 576724992 Oct 18 13:53 sysaux01.dbf
-rw-r-----  1 oracle oinstall 734011392 Oct 18 13:53 system01.dbf
-rw-r-----  1 oracle oinstall  30416896 Oct 18 12:52 temp01.dbf
-rw-r-----  1 oracle oinstall   5259264 Oct 18 13:48 ts_16k.dbf
-rw-r-----  1 oracle oinstall  10493952 Oct 18 13:48 undo_small.dbf
-rw-r-----  1 oracle oinstall 723525632 Oct 18 13:53 undotbs01.dbf
-rw-r-----  1 oracle oinstall 148119552 Oct 18 13:48 users01.dbf
[oracle@oracle11gdemo wison]$ cp /tmp/example01.dbf .
[oracle@oracle11gdemo wison]$ ls -l
total 2437324
-rw-r-----  1 oracle oinstall   9977856 Oct 18 14:03 control01.ctl
-rw-r-----  1 oracle oinstall 104865792 Oct 18 14:03 example01.dbf
-rw-r-----  1 oracle oinstall  52429312 Oct 18 13:48 redo01.log
-rw-r-----  1 oracle oinstall  52429312 Oct 18 13:48 redo02.log
-rw-r-----  1 oracle oinstall  52429312 Oct 18 13:54 redo03.log
-rw-r-----  1 oracle oinstall 576724992 Oct 18 13:53 sysaux01.dbf
-rw-r-----  1 oracle oinstall 734011392 Oct 18 13:53 system01.dbf
-rw-r-----  1 oracle oinstall  30416896 Oct 18 12:52 temp01.dbf
-rw-r-----  1 oracle oinstall   5259264 Oct 18 13:48 ts_16k.dbf
-rw-r-----  1 oracle oinstall  10493952 Oct 18 13:48 undo_small.dbf
-rw-r-----  1 oracle oinstall 723525632 Oct 18 13:53 undotbs01.dbf
-rw-r-----  1 oracle oinstall 148119552 Oct 18 13:48 users01.dbf
[oracle@oracle11gdemo wison]$ 





恢复(恢复是指:应用日志文件恢复事务)

sys@WISON>recover datafile 5;
Media recovery complete.
sys@WISON>alter database open;

Database altered.

sys@WISON>

3.checkpoint和SCN

  • checkpoint 进程会通知DBWN把数据库缓存中的信息写入数据文件
  • checkpoint 进程会更新所有数据文件的header,写入checkpoint信息(也就是SCN),使得所有数据文件一致
  • checkpoint 进程会更新控制文件中的信息。

没checkpoint的时候控制文件,数据文件中SCN

sys@WISON>select file#,checkpoint_change# from v$datafile_header;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            1765977
         2            1765977
         3            1765977
         4            1765977
         5            1765977
         6            1765977
         7            1765977

7 rows selected.

sys@WISON>select file#,checkpoint_change# from v$datafile;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            1765977
         2            1765977
         3            1765977
         4            1765977
         5            1765977
         6            1765977
         7            1765977

7 rows selected.

sys@WISON>




checkpoint后,控制文件,数据文件中SCN

sys@WISON>alter system checkpoint;

System altered.

sys@WISON>select file#,checkpoint_change# from v$datafile;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            1766028
         2            1766028
         3            1766028
         4            1766028
         5            1766028
         6            1766028
         7            1766028

7 rows selected.

sys@WISON>select file#,checkpoint_change# from v$datafile_header;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            1766028
         2            1766028
         3            1766028
         4            1766028
         5            1766028
         6            1766028
         7            1766028

7 rows selected.

sys@WISON>


那什么时候会导致checkpoint呢?

  • 手动checkpoint
  • 日志切换的时候,也会发生checkpoint






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值