ITPub博客

首页 > 数据库 > Oracle > 备份与恢复--重建控制文件

备份与恢复--重建控制文件

原创 Oracle 作者:jolly10 时间:2009-01-14 16:01:08 0 删除 编辑

恢复办法适用于:
控制文件全部丢失且没有备份

前提条件:
数据库如果是干净的关闭的,就可以用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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-02-20

  • 博文量
    263
  • 访问量
    826724