全部控制文件丢失后的完全恢复
分类: ORACLE |
如果数据库控制文件做过镜像,比如一个数据库有3个控制文件,丢失一个控制文件的恢复非常的容易,如果所有控制文件的丢失,那么恢复起来就要相对的麻烦一些。
如果注意观察下面的例子你会发现,即使没有控制文件的备份也是可以把数据库恢复的。
当然,最好不要把自己置于某种复杂和未知的环境,对数据库做控制文件的备份是一个很容易的事情。
我们这里通过用户管理的方法来创建控制文件的备份:
1.生成重建控制文件和修复数据库的脚本,脚本会放在$ORACLE_HOME/admin/$ORACLE_SID/udump路径下,其中sid是数据库实例名。
alter database backup controlfile to trace;
2.生成控制文件的镜像拷贝
alter database backup controlfile to '/home/oracle/c.bak' ----引号部分是目录和备份文件名
SQL> create table demo (x number,y number);
表已创建。
SQL> insert into demo values(1,100);
已创建 1 行。
SQL> insert into demo values(2,200);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from demo;
X Y
---------- ----------
1 100
2 200
SQL> conn / as sysdba
SQL> shutdown immediate
在这个时候,删掉所有的控制文件!!
$ oracle@model /oradata/test> ls
control01.ctl control03.ctl redo01.log redo03.log system01.dbf undotbs01.dbf
control02.ctl example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf
$ oracle@model /oradata/test> rm -rf *.ctl
$ oracle@model /oradata/test> ls
example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf
redo01.log redo03.log system01.dbf undotbs01.dbf
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 293601280 bytes
Fixed Size 1248600 bytes
Variable Size 100663976 bytes
Database Buffers 184549376 bytes
Redo Buffers 7139328 bytes
ORA-00205: ?????????, ??????, ???????
SQL> select status from v$instance;
STATUS
---------------------
STARTED
从trace文件中获得以下的SQL语句,并复制创建:
-rw-r----- 1 oracle oinstall 6382 May 18 17:43 test_ora_4912.trc
我们之前备份的文件生成的是:test_ora_4912.trc
SQL> CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oradata/test/redo01.log' SIZE 50M,
GROUP 2 '/oradata/test/redo02.log' SIZE 50M,
GROUP 3 '/oradata/test/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/oradata/test/system01.dbf',
'/oradata/test/undotbs01.dbf',
'/oradata/test/sysaux01.dbf',
'/oradata/test/users01.dbf',
'/oradata/test/example01.dbf',
'/home/oracle/mai_dbf/for_mai01.dbf',
'/home/oracle/mai_dbf/for_mai02.dbf',
'/home/oracle/mai_dbf/ts_test01.dbf'
CHARACTER SET ZHS16GBK;
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> recover database;
ORA-00283: ??????????
ORA-00264: ?????
数据库不需要恢复的操作,所以报了上边的错误。
SQL> alter database open;
由于我们重建了控制文件,所以原来oracle数据库的临时表空间已经不能够被使用了,在这里我们需要对它进行重建:
SQL> select file_name from dba_temp_files;
no rows selected
SQL> alter tablespace temp add tempfile '/oradata/test/temp01.dbf' size 30M reuse;
SQL> select file_name from dba_temp_files;
FILE_NAME
---------------------------
/oradata/test/temp01.dbf
SQL> select * from demo;
X Y
---------- ----------
1 100
2 200
测试完成!!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24570973/viewspace-753762/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24570973/viewspace-753762/