首页 » ORACLE 9i-23ai » oracle snapcf_.f/ SNAPSHOT CONTROLFILE 什么作用?

oracle snapcf_.f/ SNAPSHOT CONTROLFILE 什么作用?

在$ORACLE_HOME/dbs/下有个snapcf_sid.f文件,也就是在rman 中CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘xxxx’ 的文件,据我个人理解,它就是一个控制文件的快照,rman同步catalog或备份控制文件时会自动更新这个文件,在rman 的restore controlfile from autobackup时需要,可以用来恢复控制文件。

在metalink 也有介绍,

2.1 Snapshot Controlfile

When RMAN needs to resynchronize from a read-consistent version of the control file, it creates a temporary snapshot control file. The defaultname for the snapshot control file is port-specific. Use the set snapshot controlfile name command to change the name of the snapshot control file; subsequent snapshot control files that RMAN creates use the name specified in the command.

结论是:
1.SNAPSHOT CONTROLFILE 不能直接copy成control file,如果数据库已经shutdown
2.可以通过rman,将SNAPSHOT CONTROLFILE 恢复成控制文件
3.如果数据库没有shutdown,可以直接copy SNAPSHOT CONTROLFILE 成控制文件,但仍需要恢复(因为他是旧的)

下面是我的测试步骤:
—————————————
查看snapshot controlfile的备份设置:

RMAN> SHOW SNAPSHOT CONTROLFILE NAME;

RMAN configuration parameters are:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/ora9a/product/9.2/dbs/snapcf_tt9a.f'; # default

RMAN>

下面模拟控制文件丢失的恢复

$ ls
control01.ctl cwmlite01.dbf indx01.dbf redo02.log temp01.dbf users01.dbf
control02.ctl drsys01.dbf odm01.dbf redo03.log tools01.dbf xdb01.dbf
control03.ctl example01.dbf redo01.log system01.dbf undotbs01.dbf
$ rm cont* --删除控制文件
$ ls
cwmlite01.dbf example01.dbf odm01.dbf redo02.log system01.dbf tools01.dbf users01.dbf
drsys01.dbf indx01.dbf redo01.log redo03.log temp01.dbf undotbs01.dbf xdb01.dbf
$

在控制文件被删除后,数据库还能正常操作:

SQL> insert into test(no) values(4);

1 row created.

SQL> commit;

Commit complete.

SQL> alter system switch logfile;

System altered.

SQL> alter system checkpoint;

System altered.

SQL> /

System altered.

SQL>
SQL> select no,to_char(vdate,'yyyy-mm-dd hh24:mi:ss') from test;

NO TO_CHAR(VDATE,'YYYY-MM-DDHH24:MI:SS')
---------- ---------------------------------------------------------
1 2009-02-24 10:16:09
2 2009-02-24 10:25:30
3 2009-02-24 10:26:56
4 2009-02-24 10:30:59

SQL>

重新启动数据库:

SQL> connect /as sysdba
Connected.
SQL> shutdown immediate
ORA-00210: cannot open the specified controlfile
ORA-00202: controlfile: '/u01/ora9a/oradata/tt9a/control01.ctl'
ORA-27041: unable to open file
IBM AIX RISC System/6000 Error: 2: No such file or directory
Additional information: 3

没有了控制文件了,shutdown immediate出错

SQL>
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 320569400 bytes
Fixed Size 741432 bytes
Variable Size 285212672 bytes
Database Buffers 33554432 bytes
Redo Buffers 1060864 bytes
ORA-00205: error in identifying controlfile, check alert log for more info

SQL>

没有控制文件,数据库不能mount,现在把SNAPSHOT CONTROLFILE copy到对应目录

$ cp /u01/ora9a/product/9.2/dbs/snapcf_tt9a.f /u01/ora9a/oradata/tt9a/control01.ctl
$ cp /u01/ora9a/oradata/tt9a/control01.ctl /u01/ora9a/oradata/tt9a/control0t.ctl
$ cp /u01/ora9a/oradata/tt9a/control01.ctl /u01/ora9a/oradata/tt9a/control03.ctl
$ ls -lrt /u01/ora9a/oradata/tt9a/contr*
-rw-r----- 1 ora9a dba 1531904 Feb 24 10:36 /u01/ora9a/oradata/tt9a/control01.ctl
-rw-r----- 1 ora9a dba 1531904 Feb 24 10:36 /u01/ora9a/oradata/tt9a/control0t.ctl
-rw-r----- 1 ora9a dba 1531904 Feb 24 10:36 /u01/ora9a/oradata/tt9a/control03.ctl
$
SQL> startup
ORACLE instance started.

Total System Global Area 320569400 bytes
Fixed Size 741432 bytes
Variable Size 285212672 bytes
Database Buffers 33554432 bytes
Redo Buffers 1060864 bytes
ORA-00205: error in identifying controlfile, check alert log for more info

照样不能mount数据库
—————————————-
尝试用rman恢复控制文件:

$ rman target /

Recovery Manager: Release 9.2.0.1.0 - 64bit Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

connected to target database (not started)

RMAN> startup nomount;

Oracle instance started

Total System Global Area 320569400 bytes

Fixed Size 741432 bytes
Variable Size 285212672 bytes
Database Buffers 33554432 bytes
Redo Buffers 1060864 bytes

RMAN> restore controlfile from '/u01/ora9a/product/9.2/dbs/snapcf_tt9a.f';

Starting restore at 24-FEB-09

using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=13 devtype=DISK
channel ORA_DISK_1: copied controlfile copy
replicating controlfile
input filename=/u01/ora9a/oradata/tt9a/control01.ctl
output filename=/u01/ora9a/oradata/tt9a/control02.ctl
output filename=/u01/ora9a/oradata/tt9a/control03.ctl
Finished restore at 24-FEB-09

RMAN> alter database mount;

database mounted

RMAN>

ok,用rman可以进行恢复,让数据mount起来
恢复数据库

RMAN> recover database;

Starting recover at 24-FEB-09
using channel ORA_DISK_1

starting media recovery

archive log thread 1 sequence 1 is already on disk as file /u01/ora9a/oradata/tt9a/redo01.log
archive log thread 1 sequence 2 is already on disk as file /u01/ora9a/oradata/tt9a/redo02.log
archive log thread 1 sequence 3 is already on disk as file /u01/ora9a/oradata/tt9a/redo03.log
archive log filename=/u01/ora9a/oradata/tt9a/redo01.log thread=1 sequence=0
archive log filename=/u01/ora9a/oradata/tt9a/redo02.log thread=1 sequence=2
archive log filename=/u01/ora9a/oradata/tt9a/redo03.log thread=1 sequence=3
media recovery complete
Finished recover at 24-FEB-09

RMAN> alter database open;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 02/24/2009 10:47:36
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

RMAN> alter database open resetlogs;

database opened

RMAN>

查看先前insert的数据:

SQL> select no,to_char(vdate,'yyyy-mm-dd hh24:mi:ss') from test;

NO TO_CHAR(VDATE,'YYYY-MM-DDHH24:MI:SS')
---------- ---------------------------------------------------------
1 2009-02-24 10:16:09
2 2009-02-24 10:25:30
3 2009-02-24 10:26:56
4 2009-02-24 10:30:59

SQL>

数据仍在,恢复成功!

=============================
下面仍是在数据库正常运行情况下,将控制文件删除,仍测试直接copy SNAPSHOT CONTROLFILE 的恢复方式:

SQL> insert into test(no) values(5);
1 row created.

SQL> commit;
Commit complete.

SQL>
SQL> !
$ pwd
/u01/ora9a/oradata/tt9a
$ ls
control01.ctl control0t.ctl example01.dbf redo01.log system01.dbf undotbs01.dbf
control02.ctl cwmlite01.dbf indx01.dbf redo02.log temp01.dbf users01.dbf
control03.ctl drsys01.dbf odm01.dbf redo03.log tools01.dbf xdb01.dbf
$ rm contr*
$ ls
cwmlite01.dbf example01.dbf odm01.dbf redo02.log system01.dbf tools01.dbf users01.dbf
drsys01.dbf indx01.dbf redo01.log redo03.log temp01.dbf undotbs01.dbf xdb01.dbf
$
$ exit

SQL> select * from v$controlfile;

STATUS
---------------------
NAME
--------------------------------------------------------------------------------

/u01/ora9a/oradata/tt9a/control01.ctl
/u01/ora9a/oradata/tt9a/control02.ctl
/u01/ora9a/oradata/tt9a/control03.ctl
SQL> select dbid from v$database;
select dbid from v$database
*
ERROR at line 1:
ORA-00210: cannot open the specified controlfile
ORA-00202: controlfile: '/u01/ora9a/oradata/tt9a/control01.ctl'
ORA-27041: unable to open file
IBM AIX RISC System/6000 Error: 2: No such file or directory
Additional information: 3

SQL>

没有控制文件,查询失败
现在将SNAPSHOT CONTROLFILE copy到对应目录,尝试直接恢复成控制文件:

SQL> !
$ pwd
/u01/ora9a/oradata/tt9a
$ cp /u01/ora9a/product/9.2/dbs/snapcf_tt9a.f control01.ctl
$ cp control01.ctl control02.ctl
$ cp control01.ctl control03.ctl
$ ls -lrt cont*
-rw-r----- 1 ora9a dba 1531904 Feb 24 10:55 control01.ctl
-rw-r----- 1 ora9a dba 1531904 Feb 24 10:55 control02.ctl
-rw-r----- 1 ora9a dba 1531904 Feb 24 10:55 control03.ctl
$

注意,此时不要起停数据库,否则这样恢复的控制文件仍不可用
尝试查询control file信息

SQL> select dbid from v$database;

DBID
----------
3459515476

SQL>

ok,成功
查询数据文件头信息

SQL> select CHECKPOINT_CHANGE# from v$datafile_header;
select CHECKPOINT_CHANGE# from v$datafile_header
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [2170], [], [], [], [], [], [], []

SQL>

失败
现在重新启动数据库,看看是否可以到mount状态:

SQL> shutdown immediate
ORA-00600: internal error code, arguments: [kccchb_1], [356], [353], [0], [353], [0], [], []
SQL> shutdown abort;
ORACLE instance shut down.
SQL>
SQL> startup
ORACLE instance started.

Total System Global Area 320569400 bytes
Fixed Size 741432 bytes
Variable Size 285212672 bytes
Database Buffers 33554432 bytes
Redo Buffers 1060864 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL>

ok,此时数据库可以mount起来了

SQL>
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u01/ora9a/oradata/tt9a/system01.dbf'

提示需要恢复

SQL> recover database using backup controlfile;
ORA-00279: change 349227 generated at 02/24/2009 10:49:58 needed for thread 1
ORA-00289: suggestion : /u01/arch/1_1.dbf
ORA-00280: change 349227 for thread 1 is in sequence #1
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00328: archived log ends at change 347581, need later change 349227
ORA-00334: archived log: '/u01/arch/1_1.dbf'
SQL> recover database using backup controlfile;
ORA-00279: change 349227 generated at 02/24/2009 10:49:58 needed for thread 1
ORA-00289: suggestion : /u01/arch/1_1.dbf
ORA-00280: change 349227 for thread 1 is in sequence #1
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/ora9a/oradata/tt9a/redo01.log
Log applied.
Media recovery complete.

SQL> alter database open resetlogs;

Database altered.

SQL>

恢复成功

SQL> select no,to_char(vdate,'yyyy-mm-dd hh24:mi:ss') from test order by vdate;

NO TO_CHAR(VDATE,'YYYY-MM-DDHH24:MI:SS')
---------- ---------------------------------------------------------
1 2009-02-24 10:16:09
2 2009-02-24 10:25:30
3 2009-02-24 10:26:56
4 2009-02-24 10:30:59
5 2009-02-24 10:51:01

SQL>

ok,新插入的数据也在。

打赏

目前这篇文章有3条评论(Rss)评论关闭。

  1. Ugg Outlet | #1
    2011-12-21 at 04:27

    bVfLhPcq, [url=http://www.ugg-outlet-online-shopping.net]Ugg Outlet Store[/url] ,wipTtOPj, Ugg Australia Outlet ,WVOUxoTE, http://www.ugg-outlet-online-shopping.net Ugg Outlet , fVgZmjyv

  2. Faustina Loreg | #2
    2011-12-21 at 02:51

    Hey! Fantastic blog! I happen to be a daily visitor to your site (somewhat more like addict ) of this website. Just wanted to say I appreciate your blogs and am looking forward for more!

  3. DrFoeparrory | #3
    2011-09-22 at 10:05

    I logged on today and it just wasn’t there. It’s not hidden. I’ve tried putting explorer into the task manager and it popped up for a couple seconds then disappeared again. When I rebooted it, It was there for a couple seconds and again, poofed. I scanned my computer for virus’s and nothing came up with that. Can someone tell me what to do? I’ve seen many of these kinds of questions with no answers that worked for me.
    łodzie motorowe na sprzedaż producenci lodzi motorowych łodzie wiosłowo motorowe

    łodzie wędkarskie producent , [url=http://galionboats.pl]łodzie motorowe producent[/url] , łodzie wiosłowe allegro