ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle实验记录 (恢复-关于控制文件(4))

oracle实验记录 (恢复-关于控制文件(4))

原创 Linux操作系统 作者:fufuh2o 时间:2009-09-11 10:19:04 0 删除 编辑


有一个问题,使用旧备份控制文件时候恢复到最新, 总是要using  backup controlfile
经过pub  朋友  SUNBLAZE  (端着AK的猫 ),给了思路~~也许是需要instance recover
特此实验记录下

SQL> @d:\backup\backupctl.txt
已复制         1 个文件。

已复制         1 个文件。

已复制         1 个文件。

SQL> alter system switch logfile;~~~~~~~~~~~~~~~因为是实验~需要执行一次,若备份和current controlfile中间~没有2次checkpoint,那么备份controlfile可以直接使用
                                                 对比的是 controlfile中 Checkpoint cnt,与file header 中 ctl cnt(这个就是防止更新controlfile时候abort)  

系统已更改。

SQL> alter system checkpoint;

系统已更改。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             226495364 bytes
Database Buffers          377487360 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
SQL>
SQL> select sequence#,group#,status from v$log;

 SEQUENCE#     GROUP# STATUS
---------- ---------- ----------------
        11          1 CURRENT
         9          3 INACTIVE
        10          2 INACTIVE

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
           1435071      1435071~~~~~~~~~~~~~~datafile scn ,stop scn
           1435071      1435071
           1435071      1435071
           1435071      1435071
           1435071      1435071
           1435071      1435071
           1435071      1435071
           1435071      1435071

已选择8行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           1435071~~~~~~~~~~~~~~~~~~~~~~~~~START SCN
           1435071
           1435071
           1435071
           1435071
           1435071
           1435071
           1435071

已选择8行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1435071~~~~~~~~~~~~~~~~~~~~~~~~~SYSTEM SCN

 

以上信息是 当前控制文件中信息

SQL> shutdown immediate;
ORA-01109: 数据库未打开

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~restore controlfile
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             226495364 bytes
Database Buffers          377487360 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
ORA-01122: 数据库文件 1 验证失败
ORA-01110: 数据文件 1: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'
ORA-01207: 文件比控制文件更新 - 旧的控制文件

 

SQL> select sequence#,group#,status from v$log;

 SEQUENCE#     GROUP# STATUS
---------- ---------- ----------------
         8          1 INACTIVE
         9          3 INACTIVE
        10          2 CURRENT

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
           1432437
           1432437
           1432437         ~~~~~~没有 stop scn(其实应该有值,我备份时候是 online 没关闭database 所以controlfile中没记录stop scn ,为无穷大)
           1432437
           1432437
           1432437
           1432437
           1432437

已选择8行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           1435071
           1435071
           1435071           START SCN 不等于stop scn,   需要 instance recover 应用current redo log
           1435071
           1435071
           1435071
           1435071
           1435071

已选择8行。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1432437

SQL>

SQL> recover database using backup controlfile;
ORA-00279: 更改 1434879 (在 09/11/2009 09:35:13 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ARCHIVELOG\ARC00011_0697045088.001.ARC
ORA-00280: 更改 1434879 (用于线程 1) 在序列 #11 中


指定日志: {=suggested | filename | AUTO | CANCEL}
E:\oracle\product\10.2.0\oradata\orcl\redo01.log
已应用的日志。
完成介质恢复。
SQL> select sequence#,group#,status from v$log;

 SEQUENCE#     GROUP# STATUS
---------- ---------- ----------------
         8          1 INACTIVE
         9          3 INACTIVE
        10          2 CURRENT

SQL> select checkpoint_change#,last_change# from v$datafile;

CHECKPOINT_CHANGE# LAST_CHANGE#
------------------ ------------
           1432437      1435071
           1432437      1435071~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~stop SCN
           1432437      1435071
           1432437      1435071
           1432437      1435071
           1432437      1435071
           1432437      1435071
           1432437      1435071

已选择8行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           1435071
           1435071
           1435071~~~~~~~~~~~~~~~~~~~~~~~~~~~START SCN
           1435071
           1435071
           1435071
           1435071
           1435071

已选择8行。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~STOP SCN=START SCN 不需要instance recover
SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1432437


~~~~~~~~~~~~~~~~~~~~controlfile其它信息没变 但是多了STOP SCN(同步了)
SQL> alter session set events 'immediate trace name controlf level 8';

会话已更改。

SQL> alter system dump logfile 'E:\oracle\product\10.2.0\oradata\orcl\redo01.log';

系统已更改。


DUMP CONTROLFILE

DATA FILE #2:
  (name #9) E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
creation size=0 block size=8192 status=0xe head=9 tail=9 dup=1
 tablespace 1, index=2 krfil=2 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:255 scn: 0x0000.0015db75 09/11/2009 09:00:58
 Stop scn: 0x0000.0015e5bf 09/11/2009 09:35:49~~~~STOP SCN
 Creation Checkpointed at scn:  0x0000.00081f74 08/30/2005 17:25:44
 thread:0 rba:(0x0.0.0)

SQL> select to_number('15e5bf','xxxxxxxx') from dual;

TO_NUMBER('15E5BF','XXXXXXXX')
------------------------------
                       1435071

 

DUMP OF REDO FROM FILE 'E:\oracle\product\10.2.0\oradata\orcl\redo01.log'
 Opcodes *.*
 RBAs: 0x000000.00000000.0000 thru 0xffffffff.ffffffff.ffff
 SCNs: scn: 0x0000.00000000 thru scn: 0xffff.ffffffff
 Times: creation thru eternity
 FILE HEADER:
 Low  scn: 0x0000.0015e4ff (1434879) 09/11/2009 09:35:13~~~~v$log FIRST_CHANGE#
 Next scn: 0xffff.ffffffff 01/01/1988 00:00:00~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这是current  logfile
Thread closed scn: 0x0000.0015e5bf (1435071) 09/11/2009 09:35:49~~~~~~~~~~~~从redo获得了STOP SCN

SQL> alter database open resetlogs;

数据库已更改。

小结:使用备份控制文件恢复到最新的时候 oracle 发现控制文件中stop scn比 datafile 中start scn要小所以需要instance reocver ,instanc recover 就是用current redo

log

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12020513/viewspace-614421/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-06-26

  • 博文量
    182
  • 访问量
    471647