Oracle―用户管理的完全恢复(三)(二)
1/oradata/wilson/app1_01.dbf'
CHARACTER SET AL32UTF8
;
..................................
(4)执行脚本来恢复,所有控制文件既可以全部还原了。
SQL> @/u01/backupcf/c1.sql
ORACLE instance started.
Total System Global Area 146472960 bytes
Fixed Size 1335080 bytes
Variable Size 92274904 bytes
Database Buffers 50331648 bytes
Redo Buffers 2531328 bytes
Control file created.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
Media recovery complete.
System altered.
Database altered.
Tablespace altered.
Tablespace altered.
三.实验
来操作一个复杂点的例子,先备份控制文件,然后增加表空间(这样数据库的结构就会发生变化,同样的控制文件也会发生变化),再删除现在所有的控制文件,最后用备份的控制文件进行恢复。
1.备份控制文件,这里不是上面的备份控制文件的脚本,而是备份二进制控制文件。
SQL> alter database backup controlfile to '/tmp/w1.bin';
Database altered.
2.创建表空间和数据文件,
SQL> create tablespace app3 datafile '/u01/oradata/wilson/app3_01.dbf' size 100m;
Tablespace created.
在Dave用户下,
SQL> create table t4 (id int,name char(10)) tablespace app3;
Table created.
SQL> insert into t4 values (0,'jack');
1 row created.
3.现在把控制文件都删除了,模拟控制文件损坏,然后关闭数据库。
[oracle@oracle11g wilson]$ rm -f control0*
关闭数据库,
SQL> shutdown abort;
ORACLE instance shut down.
4.还原控制文件,然后打开数据库进入mount状态,这时还不能打开数据库,
[racle@oracle11g wilson]$ cp /tmp/w1.bin /u01/oradata/wilson/control01.ctl
[oracle@oracle11g wilson]$ cp /tmp/w1.bin /u01/oradata/wilson/control02.ctl
[oracle@oracle11g wilson]$ cp /tmp/w1.bin /u01/oradata/wilson/control03.ctl
进入mount 状态,
SQL> startup mount;
5.恢复控制文件,命令如下,
(1)开始输入恢复命令,会发现出现问题,
SQL> recover database using backup controlfile;
ORA-00279: change 3105228 generated at 09/01/2013 01:22:03 needed for thread 1
ORA-00289: suggestion : /u01/oradata/wilson/arch/sun_1_0000000014_824777760.arc
ORA-00280: change 3105228 for thread 1 is in sequence #14
Specify log: {=suggested | filename | AUTO | CANCEL}
可以看到它需要归档文件sun_1_0000000014_824777760.arc,通过查看归档文件发现最大的是13,
[oracle@oracle11g arch]$ ll
total 228556
-rw-r----- 1 oracle oinstall 6060544 Sep 1 01:21 sun_1_0000000011_824777760.arc
-rw-r----- 1 oracle oinstall 522240 Sep 1 01:21 sun_1_0000000012_824777760.arc
-rw-r----- 1 oracle oinstall 65536 Sep 1 01:21 sun_1_0000000013_824777760.arc
那么14号归档文件即在联机重做日志文件中,那么是哪个重做日志文件,可以通过查看视图v$log,或者把每个重做日志都试一次即可。
SQL> select group#,status,members from v$log;
GROUP# STATUS MEMBERS
---------- ---------------- ----------
1 INACTIVE 1
3 INACTIVE 1
2 CURRENT 1
所以把redo02.log输入进去,
Specify log: {=suggested | filename | AUTO | CANCEL}
/u01/oradata/wilson/redo02.log
ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to control file by media recovery
ORA-01110: data file 7: '/u01/oradata/wilson/app3_01.dbf'
可以看到有一个数据文件没有办法识别,因为这个控制文件是旧的。
(2)查看视图来找到要修改的数据文件,查看视图v$recover_file和v$datafile,
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ------------------ ---------- ---------
7 ONLINE ONLINE FILE MISSING 0
S