首页 > 数据库 > Oracle > 备份与恢复--重建控制文件
恢复办法适用于:
控制文件全部丢失且没有备份
前提条件:
数据库如果是干净的关闭的,就可以用noresetlogs方式打开数据库,否则用resetlogs打开。
方法:
如果在最后一次数据库结构修改后使用了ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS命令备份了创建控制文件的脚本,则可以直接用TRACE文件中的脚本进行控制文件的重建。
如果使用ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS命令之后又进行了数据库结构的修改,则需要手工编辑TRACE文件中的脚本,来反映出数据库最后的修改。
如果是使用的ALTER DATABASE BACKUP CONTROLFILE TO FILENAME方式进行的备份(这种情况其实应该算作有备份的情况,不过如果利用备份进行恢复需要使用RESETLOGS方式打开数据库),则可以利用备份的控制文件首先将数据库STARTUP MOUNT,然后再利用ALTER DATABASE BACKUP
CONTROLFILE TO TRACE NORESETLOGS命令备份建立控制文件的脚本,最后将备份控制文件后所有数据库结构的修改,反映到控制文件的脚本上。
如果控制文件没有任何方式的备份,那么只能通过手工方式编写CREATE CONTROLFILE语句,这时候需要了解所有数据文件和联机重做日志文件的位置和大小。
[@more@]SQL> alter database backup controlfile to trace;
Database altered.
SQL> select spid from v$process
2 where addr=
3 (select paddr from v$session
4 where sid=(select sid from v$mystat where rownum=1)
5 );
SPID
------------
23724
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> host mv /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control01.bak
SQL> host mv /u01/app/oracle/oradata/orcl/control02.ctl /u01/app/oracle/oradata/orcl/control02.bak
SQL> host mv /u01/app/oracle/oradata/orcl/control03.ctl /u01/app/oracle/oradata/orcl/control03.bak
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 335544320 bytes
Fixed Size 1219280 bytes
Variable Size 134219056 bytes
Database Buffers 197132288 bytes
Redo Buffers 2973696 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M,
9 GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M,
10 GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M
11 -- STANDBY LOGFILE
12 DATAFILE
13 '/u01/app/oracle/oradata/orcl/system01.dbf',
14 '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
15 '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
16 '/u01/app/oracle/oradata/orcl/users01.dbf',
17 '/u01/app/oracle/oradata/orcl/example01.dbf',
18 '/u01/app/oracle/oradata/orcl/jglu01.dbf',
19 '/u01/app/oracle/oradata/orcl/jglu02.dbf',
20 '/u01/app/oracle/oradata/orcl/test02.dbf'
21 CHARACTER SET WE8ISO8859P1
22 ;
Control file created.
SQL> RECOVER DATABASE
ORA-00283: recovery session canceled due to errors
ORA-00264: no recovery required
SQL> ALTER SYSTEM ARCHIVE LOG ALL;
System altered.
SQL> ALTER DATABASE OPEN;
Database altered.
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'
2 SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
Tablespace altered.
按照trace出来的信息一步步做就行了。
上面RECOVER DATABASE步骤的错误描述信息是数据库不需要恢复。因此,直接忽略这个错误。
需要注意的是,这个方法适用于联机重做日志存在情况下的恢复。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/271283/viewspace-1016108/ ,如需转载,请注明出处,否则将追究法律责任。