在生产数据库中,控制文件一般多路复用的。每个控制文件的内容是一模一样的,只要其中有一个没有丢失,那么就可以复制一下,改一下名字就可以用了。
首先在数据库中备份执行一个二进制的控制文件,也可以使用操作系统的命令直接复制控制文件来备份。
- 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 例程已经关闭。
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
[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