Control File (二)重建CONTROLFILE --- NORESETLOG

(二) create controlfile  --- noresetlog

由于丢失control01.ctl 

alter_karl.log 中显示:

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

 

ORA-00202: controlfile: '/home/ora_test/oradata/karl/control01.ctl'

ORA-27037: unable to obtain file status

SVR4 Error: 2: No such file or directory

Additional information: 3

ARC1: Thread not mounted

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

现在假设所有的备份都丢失了。则手动创建control.ctl file.(最麻烦,也是很危险的事情,因此要小心谨慎)

//1.首先关闭数据库。 SQL> shutdown immediate; ORA-01507: database not mounted ORACLE instance shut down. //2.在操作系统级别备份所有数据文件和联机重做日志文件。(以防万一,不要怕麻烦,万一万一了,你就死定了!) //3.借助之前备份在trace文件中的脚本创建ctl file。 /home/ora_test/admin/karl/udump/karl_ora_5037.trc SQL> STARTUP NOMOUNT ORACLE instance started. Total System Global Area 320309728 bytes Fixed Size 731616 bytes Variable Size 285212672 bytes Database Buffers 33554432 bytes Redo Buffers 811008 bytes //如果联机重做日志没有一同和CONTROL FILE 丢失,需要用NORESETLOG,即保留重做日志中的内容。 //这样就可以对数据库进行完全恢复。 //并且使用alter database open;打开DB。 //如果在控制文件中修改了数据库名称,还需要修改DB_NAME参数值为新的数据库名。 //注:仅仅在初始化参数文件中修改DB_NAME参数值并不能修改DB的名称,因为DB_NAME同样被记录在control file中。 CREATE CONTROLFILE REUSE DATABASE "KARL" NORESETLOGS ARCHIVELOG -- SET STANDBY TO MAXIMIZE PERFORMANCE MAXLOGFILES 50 MAXLOGMEMBERS 5 MAXDATAFILES 100 MAXINSTANCES 1 MAXLOGHISTORY 226 LOGFILE GROUP 1 '/home/ora_test/oradata/karl/redo01.log' SIZE 100M, GROUP 2 '/home/ora_test/oradata/karl/redo02.log' SIZE 100M, GROUP 3 '/home/ora_test/oradata/karl/redo03.log' SIZE 100M -- STANDBY LOGFILE DATAFILE '/home/ora_test/oradata/karl/system01.dbf', '/home/ora_test/oradata/karl/undotbs01.dbf', '/home/ora_test/oradata/karl/cwmlite01.dbf', '/home/ora_test/oradata/karl/drsys01.dbf', '/home/ora_test/oradata/karl/example01.dbf', '/home/ora_test/oradata/karl/indx01.dbf', '/home/ora_test/oradata/karl/odm01.dbf', '/home/ora_test/oradata/karl/tools01.dbf', '/home/ora_test/oradata/karl/users01.dbf', '/home/ora_test/oradata/karl/xdb01.dbf' CHARACTER SET UTF8 ; Control file created. //此时创建成功。 //注意:该脚本应当是最新的。是通过alter database backup controlfile to trace ;命令最后一次反初始化生成的。 //在使用create controlfile 语句创建CTL FILE 时,如果操作不当,可能会损坏数据文件或日志文件。 $ ls -l control01.ctl //查看新创建的control file -rw-r----- 1 ora_test dba 2285568 Apr 12 16:03 control01.ctl //4. 在操作系统级别对控制文件进行备份。 //5. 统一初始化参数文件中的control_files 参数为最新状态。 //6. 用alter database open;打开数据库 SQL> select status from v$instance; STATUS ------------ MOUNTED SQL> alter database open; alter database open * ERROR at line 1: ORA-01113: file 1 needs media recovery ORA-01110: data file 1: '/home/ora_test/oradata/karl/system01.dbf' //需介质恢复,好吧既然报这个错,我会专门写一章来描述有关 控制文件和数据字典的冲突 问题。 SQL> recover datafile '/home/ora_test/oradata/karl/system01.dbf' Media recovery complete. SQL> recover database; Media recovery complete. SQL> alter database open; Database altered. OK!到此数据库成功恢复control file.

 



警告:CREATE CONTROLFILE 语句有可能会导致数据文件与重做日志的损坏!

例如:如果在指定数据文件的名称和位置时漏掉某个数据文件,则会使数据库彻底失去该数据文件,甚至导致DB无法使用。

因此,在设置数据文件和重做日志的列表时务必确保正确无误!! 

trace 恢复脚本保证最新。


我将与另一篇帖子来讲解 网上某位仁兄因 CONTROL FILE 列表缺失而导致的datafile丢失,及解决方案。

下班了,闪人!


 


 

你可能感兴趣的:(Oralce基础)