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 恢复脚本保证最新。