ARCHIVELOG模式下用户管理恢复控制文件(1)——使用二进制控制文件恢复!

 在生产数据库中,控制文件一般多路复用的。每个控制文件的内容是一模一样的,只要其中有一个没有丢失,那么就可以复制一下,改一下名字就可以用了。

 

首先在数据库中备份执行一个二进制的控制文件,也可以使用操作系统的命令直接复制控制文件来备份。

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1266392 bytes
Variable Size              62917928 bytes
Database Buffers          100663296 bytes
Redo Buffers                2924544 bytes
数据库装载完毕。
数据库已经打开。

SQL> create tablespace tb1 datafile '/u01/app/oracle/oradata/orcl/tb1.dbf' size 10m; 

表空间已创建。

SQL> create user u1 identified by u1 default tablespace tb1;

用户已创建。

SQL> grant connect,resource to u1;

授权成功。

SQL> conn u1/u1
已连接。

SQL> create table t (id int,value varchar2(10));

表已创建。

SQL> insert into t values(1,'a');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from t;

        ID VALUE
---------- ----------
         1 a

SQL> conn /as sysdba
已连接。
SQL> alter system checkpoint;

系统已更改。

SQL> alter system archive log current;

系统已更改。

SQL> alter system switch logfile;

系统已更改。

SQL> /

系统已更改。

SQL> /

系统已更改。

SQL> /

系统已更改。
SQL> alter database backup controlfile to '/u01/app/oracle/controlfile/control.ctl';

数据库已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。


现在关闭数据库后,所有的控制文件丢失了,然后把备份的控制文件复制过去,该一下名字。

[oracle@linux orcl]$ rm -rf control0*
[oracle@linux orcl]$ cp /u01/app/oracle/controlfile/control.ctl .
[oracle@linux orcl]$ mv control.ctl control01.ctl 
[oracle@linux orcl]$ cp control01.ctl control02.ctl 
[oracle@linux orcl]$ cp control01.ctl control03.ctl 


下面记录恢复操作

SQL> startup 
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1266392 bytes
Variable Size              62917928 bytes
Database Buffers          100663296 bytes
Redo Buffers                2924544 bytes
数据库装载完毕。
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> select status from v$instance;

STATUS
------------
MOUNTED

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
         1          1         13   52428800          1 YES INACTIVE                474583 10-10月-11
         3          1         12   52428800          1 YES INACTIVE                474581 10-10月-11
         2          1         14   52428800          1 NO  CURRENT                 474585 10-10月-11

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/redo03.log
/u01/app/oracle/oradata/orcl/redo02.log
/u01/app/oracle/oradata/orcl/redo01.log

SQL> recover database using backup controlfile;
ORA-00279: 更改 474585 (在 10/10/2011 01:15:57 生成) 对于线程 1 是必需的
ORA-00289: 建议: /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_10/o1_mf_1_14_%u_.arc
ORA-00280: 更改 474585 (用于线程 1) 在序列 #14 中


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/orcl/redo02.log
已应用的日志。
完成介质恢复。

SQL> alter database open resetlogs;

数据库已更改。

SQL> select status from v$instance;

STATUS
------------
OPEN

SQL> conn u1/u1
已连接。
SQL> select * from t;

        ID VALUE
---------- ----------
         1 a

你可能感兴趣的:(ARCHIVELOG模式下用户管理恢复控制文件(1)——使用二进制控制文件恢复!)