如果数据库控制文件做过镜像,比如一个数据库有3个控制文件,丢失一个控制文件的恢复非常的容易,如果所有控制文件的丢失,那么恢复起来就要相对的麻烦一些。


如果注意观察我下面的例子你会发现,即使没有控制文件的备份也是可以把数据库恢复的。


当然了,一个优秀的DBA最好不要把自己置于复杂和未知的环境,对数据库做控制文件的备份是一个很容易的事情。


我们这里通过用户管理的方法来创建控制文件的备份:


1.生成重建控制文件和修复数据库的脚本,脚本会放在$ORACLE_BASE/admin/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> shutdown immediate


数据库已经关闭。


已经卸载数据库。


ORACLE 例程已经关闭。


删掉所有的控制文件!!


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


SQL> CREATE CONTROLFILE REUSE DATABASE "DB01" NORESETLOGS  ARCHIVELOG


 2      MAXLOGFILES 16


 3      MAXLOGMEMBERS 3


 4      MAXDATAFILES 100


 5      MAXINSTANCES 8


 6      MAXLOGHISTORY 292


 7  LOGFILE


 8    GROUP 1 'E:\ORACLE\PRODUCT\ORADATA\DB01\REDO01.LOG'  SIZE 50M,


 9    GROUP 2 'E:\ORACLE\PRODUCT\ORADATA\DB01\REDO02.LOG'  SIZE 50M,


10    GROUP 3 'E:\ORACLE\PRODUCT\ORADATA\DB01\REDO03.LOG'  SIZE 50M


11  -- STANDBY LOGFILE


12  DATAFILE


13    'E:\ORACLE\PRODUCT\ORADATA\DB01\SYSTEM01.DBF',


14    'E:\ORACLE\PRODUCT\ORADATA\DB01\UNDOTBS01.DBF',


15    'E:\ORACLE\PRODUCT\ORADATA\DB01\SYSAUX01.DBF',


16    'E:\ORACLE\PRODUCT\ORADATA\DB01\USERS01.DBF',


17    'E:\ORACLE\PRODUCT\ORADATA\DB01\EXAMPLE01.DBF'


18  CHARACTER SET ZHS16GBK


19  ;


控制文件已创建。


SQL> select status from v$instance;


STATUS


------------


MOUNTED


SQL> recover database;


ORA-00283: ??????????


ORA-00264: ?????


数据库不需要恢复的操作,所以报了上边的错误。


SQL> alter database open;


数据库已更改。


SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'E:\ORACLE\PRODUCT\ORADATA\DB01\TEMP01.DBF'


 2  SIZE 20971520  REUSE;


表空间已更改。


SQL> select * from demo;


        X          Y


---------- ----------


        1        100


        2        200


SQL>


oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html