Oracle 恢复测试-控制文件篇(一)

本文介绍在Oracle数据库控制文件损坏且数据库处于shutdown abort状态下的恢复步骤。通过查询控制文件信息、备份控制文件到trace文件、模拟破坏控制文件、强制检查点等操作,最终实现通过trace文件重建控制文件并恢复数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

控制文件全部损坏,有trace文件,数据库shutdown abort的情况下。(试验前请先备份数据库)

1、查询控制文件相关信息

  1. SQL> col name format a50
  2. SQL> select * from v$controlfile;
  3. STATUS  NAME                                               IS_ BLOCK_SIZE FILE_SIZE_BLKS
  4. ------- -------------------------------------------------- --- ---------- --------------
  5.         C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/CONTROL01.CT NO       16384            450
  6.         C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/CONTROL02.CT NO       16384            450
  7.         C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/CONTROL03:.CT NO       16384            450

2、backup controlfile to trace

  1. SQL> alter session set tracefile_identifier=kipos;
  2. 会话已更改。
  3. SQL> alter database backup controlfile to trace;
  4. 数据库已更改。
  5. SQL> 

3、模拟破坏控制文件,可以用UltraEdit随便建一个文件,然后另存为控制文件

4、强制执行检查点,系统发现控制文件错误,然后shutdown abort

  1. SQL> alter system checkpoint;
  2. alter system checkpoint
  3. *
  4. 第 1 行出现错误:
  5. ORA-00227: 控制文件中检测到损坏的块: (块 , # 块 )
  6. SQL>  select * from v$controlfile;
  7. ERROR:
  8. ORA-03114: 未连接到 ORALCE

5、查看alter_sid.log,也可以查看相关trace文件

  1. alter_sid.log
  2. Mon Oct 13 15:39:13 2008
  3. Errors in file c:/oracle/product/10.2.0/admin/orcl/bdump/orcl_arc0_2204.trc:
  4. ORA-00227: corrupt block detected in control file: (block 1, # blocks 1)
  5. ORA-00202: control file: 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/CONTROL01.CTL'
  6. Master background archival failure: 227
  7. Mon Oct 13 15:39:50 2008
  8. Hex dump of (file 0, block 1) in trace file c:/oracle/product/10.2.0/admin/orcl/bdump/orcl_ckpt_2720.trc
  9. Corrupt block relative dba: 0x00000001 (file 0, block 1)
  10. Completely zero block found during control file header read

6、恢复控制文件-启动到mount状态,然后根据trace文件重建控制文件

  1. SQL> startup nomount;
  2. ORACLE 例程已经启动。
  3. Total System Global Area  167772160 bytes
  4. Fixed Size                  1247900 bytes
  5. Variable Size              75498852 bytes
  6. Database Buffers           88080384 bytes
  7. Redo Buffers                2945024 bytes
  8. SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
  9.   2      MAXLOGFILES 16
  10.   3      MAXLOGMEMBERS 3
  11.   4      MAXDATAFILES 100
  12.   5      MAXINSTANCES 8
  13.   6      MAXLOGHISTORY 292
  14.   7  LOGFILE
  15.   8    GROUP 1 (
  16.   9      'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG'
  17.  10    ) SIZE 50M,
  18.  11    GROUP 2 (
  19.  12      'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG'
  20.  13    ) SIZE 50M,
  21.  14    GROUP 3 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO03.LOG'  SIZE 50M
  22.  15  -- STANDBY LOGFILE
  23.  16  DATAFILE
  24.  17    'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSTEM01.DBF',
  25.  18    'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDOTBS01.DBF',
  26.  19    'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSAUX01.DBF',
  27.  20    'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/USERS01.DBF',
  28.  21    'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/EXAMPLE01.DBF',
  29.  22    'C:/ORACLE/PRODUCT/10.2.0/ORADATA/MIS.DBF',
  30.  23    'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDO_1',
  31.  24    'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/INDEX_TBS.DBF'
  32.  25  CHARACTER SET ZHS16GBK
  33.  26  ;
  34.  控制文件已创建

7、尝试打开数据库,出现ora-01110错误,原因是shutdown abort关闭,需要恢复数据库

 

  1. SQL> alter database open;
  2. alter database open
  3. *
  4. 第 1 行出现错误:
  5. ORA-01113: ?? 1 ??????
  6. ORA-01110: ???? 1: 'C:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSTEM01.DBF'

8、恢复并打开数据库

  1. SQL> recover database;
  2. 完成介质恢复。
  3. SQL> alter database open;
  4. 数据库已更改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值