1 A

Books Hotgirlsfilm R %D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%B1%B1%BE%A9%D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%D2%C6%B6%AF%D7%F8%B1%E3%C6%F7 Ca Dev Hot Girls Film oracle snapcf_.f/ SNAPSHOT CONTROLFILE 什么作用? | ANBOB

Books Hotgirlsfilm R %D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%B1%B1%BE%A9%D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%D2%C6%B6%AF%D7%F8%B1%E3%C6%F7 Ca Dev Hot Girls Film

  • searchRsearchC Books E
  • Dev Q %D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%B1%B1%BE%A9%D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%D2%C6%B6%AF%D7%F8%B1%E3%C6%F7 Ssearchisearcho Hotgirlsfilm 7searchb Books rsearche
  • 点滴岁月
  • 精选软件
  • 系统相关
  • 老哥杂谈
  • 首页 » ORACLE » 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: {}
    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: {}
    /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’) uBooks Hotgirlsfilm R %D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%B1%B1%BE%A9%D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%D2%C6%B6%AF%D7%F8%B1%E3%C6%F7 Ca Dev Hot Girls Film oracle snapcf_.f/ SNAPSHOT CONTROLFILE 什么作用? | ANBOBb s 1 1 Hot %CD%FB%D4%C2%A4%CA%A4%CA%20JCup%20%B1%AC%C8%E9%20%CE%DE%C2%EB lBooks Hotgirlsfilm R %D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%B1%B1%BE%A9%D2%C6%B6%AF%C2%ED%CD%B0%A3%AC%D2%C6%B6%AF%D7%F8%B1%E3%C6%F7 Ca Dev Hot Girls Film oracle snapcf_.f/ SNAPSHOT CONTROLFILE 什么作用? | ANBOBa b Japanese+girl+wet Strict+Machine+%2F+DP%E5%BC%BA%E6%A1%A3%E5%94%AF%E7%BE%8E%E6%96%B0%E7%89%87