切换到宽版
  • 1823阅读
  • 3回复

如何恢复丢失了的控制文件 [复制链接]

上一主题 下一主题
离线凉宫七月
 

只看楼主 倒序阅读 0 发表于: 2014-07-23
— 本帖被 owen 从 电脑问题求助区 移动到本区(2014-07-23) —

 控制文件丢失,分两种情况:

  1. 有备份,但要保证该备份是最后一次resetlogs之后的备份。

  恢复步骤如下:

  SQL> shutdown immediate

  拷贝备份文件到相应目录。(如果控制文件所在的磁盘不能访问,修改初始化文件,更新控制文件路经)

  SQL> STARTUP NOMOUNT

  ORACLE 例程已经启动。

  Total System Global Area  603979776 bytes

  Fixed Size                  1250380 bytes

  Variable Size             171969460 bytes

  Database Buffers          423624704 bytes

  Redo Buffers                7135232 bytes

  SQL> recover database using backup controlfile until cancel

  ORA-00279: 更改 439723 (在 03/24/2010 23:47:36 生成) 对于线程 1 是必需的

  ORA-00289: 建议:

  D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\STUDY\ARCHIVELOG\2010_03_25\O1_MF_1

  _23_%U_.ARC

  ORA-00280: 更改 439723 (用于线程 1) 在序列 #23 中

  指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

  D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG

  ORA-00328: 归档日志在更改 432393 结束, 需要稍后的更改 439723

  ORA-00334: 归档日志: ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG’

  ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误

  ORA-01152: 文件 1 没有从过旧的备份中恢复

  ORA-01110: 数据文件 1: ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF’

  SQL> recover database using backup controlfile until cancel

  ORA-00279: 更改 439723 (在 03/24/2010 23:47:36 生成) 对于线程 1 是必需的

  ORA-00289: 建议:

  D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\STUDY\ARCHIVELOG\2010_03_25\O1_MF_1

  _23_%U_.ARC

  ORA-00280: 更改 439723 (用于线程 1) 在序列 #23 中

  指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

  D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG

  已应用的日志。

  完成介质恢复。

  这里最后输入的是当前在线日志的路经.

  可以通过

  SQL> select * from v$log

  2  /

  GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS      FIRST_CHANGE#  FIRST_TIME

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

  1          1         22   52428800          1 YES INACTIVE     432394         24-3月 -10

  3          1         21   52428800          1 YES INACTIVE     423957         24-3月 -10

  2          1         23   52428800          1 NO  CURRENT      439627         24-3月 -10

  当前日志为第二个

  SQL> select *  from v$logfile

  2  /

  GROUP# STATUS  TYPE   MEMBER

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

  1         ONLINE   D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO01.LOG

  2         ONLINE   D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG

  3         ONLINE    D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG

  路经为:ONLINE   D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG

  SQL> alter database open

  2  /

  alter database open

  *

  第 1 行出现错误:

  ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

  SQL> alter database open noresetlogs

  2  /

  alter database open noresetlogs

  *

  第 1 行出现错误:

  ORA-01588: 要打开数据库则必须使用 RESETLOGS 选项

  SQL> alter database open resetlogs

  2  /

  数据库已更改。

  即完成恢复.

  2. 无备份

  这种情况需要重建控制文件,一般通过

  alter database backup controlfile to trace命令即可。(控制文件都丢失了,怎么执行这个命令,解决方法:

  找个ORACLE实例运行产生脚本,修改下就成)。脚本大体如下:

  STARTUP NOMOUNT

  CREATE CONTROLFILE REUSE DATABASE “STUDY” NORESETLOGS  ARCHIVELOG

  MAXLOGFILES 16

  MAXLOGMEMBERS 3

  MAXDATAFILES 100

  MAXINSTANCES 8

  MAXLOGHISTORY 292

  LOGFILE

  GROUP 1 ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO01.LOG’  SIZE 50M,

  GROUP 2 ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG’  SIZE 50M,

  GROUP 3 ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG’  SIZE 50M

  -- STANDBY LOGFILE

  DATAFILE

  ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF’,

  ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\UNDOTBS01.DBF’,

  ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSAUX01.DBF’,

  ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\USERS01.DBF’,

  ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY.DBF’

  CHARACTER SET ZHS16GBK;

  RECOVER DATABASE

  ALTER DATABASE OPEN;

  ALTER TABLESPACE TEMP ADD TEMPFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\TEMP01.DBF’

  SIZE 20971520  REUSE AUTOEXTEND OFF;

  这里是NORESETLOGS,因为在线日志是完好的。

  恢复步骤如下:

  SQL> shutdown immediate

  ORA-01109:已经卸载数据库。

  ORACLE 例程已经关闭。

  SQL> STARTUP NOMOUNT

  ORACLE 例程已经启动。

  Total System Global Area  603979776 bytes

  Fixed Size                  1250380 bytes

  Variable Size             171969460 bytes

  Database Buffers          423624704 bytes

  Redo Buffers                7135232 bytes

  SQL> CREATE CONTROLFILE REUSE DATABASE “STUDY” NORESETLOGS  ARCHIVELOG

  2      MAXLOGFILES 16

  3      MAXLOGMEMBERS 3

  4      MAXDATAFILES 100

  5      MAXINSTANCES 8

  6      MAXLOGHISTORY 292

  7  LOGFILE

  8    GROUP 1 ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO01.LOG’  SIZE 50M,

  9    GROUP 2 ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG’  SIZE 50M,

  10    GROUP 3 ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG’  SIZE 50M

  11  DATAFILE

  12    ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF’,

  13    ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\UNDOTBS01.DBF’,

  14    ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSAUX01.DBF’,

  15    ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\USERS01.DBF’,

  16    ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY.DBF’

  17  CHARACTER SET ZHS16GBK

  18  ;

  控制文件已创建。

  SQL> RECOVER DATABASE

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

  ORA-00264: ?????

  SQL> ALTER SYSTEM ARCHIVE LOG ALL

  2  /

  ALTER SYSTEM ARCHIVE LOG ALL

  *

  第 1 行出现错误:

  ORA-00271: ?????????

  SQL> ALTER DATABASE OPEN;

  数据库已更改。

  SQL> ALTER TABLESPACE TEMP ADD TEMPFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDYTEMP01.DBF’ REUSE;

  表空间已更改。

  SQL> select * from test

  2  /

  ID NAME

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

  1 afda

  完成恢复.
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水

只看该作者 1 发表于: 2014-07-24
我继续顶你!太好的帖子了 支持

只看该作者 2 发表于: 2014-07-24
受益匪浅啊,很有用的
离线zuzzy

只看该作者 3 发表于: 2014-07-25
谢谢楼主分享,现在什么都离不开电脑学好电脑很有必要。