环境信息
操作系统:redhat linux 5.5
数据库:oracle 11g r2 11.2.0.3
文件系统实例:fsdb
ASM实例:asmdb
文件系统 一个控制文件损坏恢复
文件系统 全部控制文件损坏恢复
ASM 全部控制文件损坏恢复
===========file system controlfile recovery ==========
#sqlplus / as sysdba
--先启动数据库到 mount 或 open 状态
sql>startup mount || sql>startup
--把控制文件备份到Tarce文件中
sql>alter database backup controlfile to trace;
--查看备份的信息 知道backup 到 哪个trace文件去了
#cat $ORACLE_BASE/diag/rdbms/fsdb/fsdb/alert/log.xml
===========================下图为日志信息========================
client_id='' type='UNKNOWN' level='16'
host_id='oracledb' host_addr='192.168.56.101' module='sqlplus@oracledb (TNS V1-V3)'
pid='4123'>
Backup controlfile written to trace file /u01/app/oracle/diag/rdbms/fsdb/fsdb/trace/fsdb_ora_4123.trc
=======================================================================
---查看备份控制文件的有用信息,文件地址在上面标注了
---有了这些 就可以开始破坏控制文件了
#cat $ORACLE_BASE/diag/rdbms/fsdb/fsdb/trace/fsdb_ora_4123.trc
======================下面 控制文件备份到tarce中的有用信息========================================
CREATE CONTROLFILE REUSE DATABASE "FSDB" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oradata/fsdb/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/oradata/fsdb/redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 '/oradata/fsdb/redo03.log' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/oradata/fsdb/system01.dbf',
'/oradata/fsdb/sysaux01.dbf',
'/oradata/fsdb/undotbs01.dbf',
'/oradata/fsdb/users01.dbf',
'/oradata/fsdb/example01.dbf'
CHARACTER SET ZHS16GBK
=======================上面 控制文件备份到tarce中的有用信息============================================
--开始破坏控制文件,首先先查看一下有几个控制文件
----实际使用的控制文件信息
sql>col name format a40
SQL> select * from v$controlfile;
===============================================
STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- ---------------------------------------- --- ---------- --------------
/oradata/fsdb/control01.ctl NO 16384 594
/oradata/fsdb/control02.ctl NO 16384 594
================================================
---下面是查询参数文件中 设置的控制文件位置信息。
SQL> show parameter control_files;
====================================================
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string /oradata/fsdb/control01.ctl, /
oradata/fsdb/control02.ctl
=====================================================
---破坏其中一个控制文件,,,,,走起
----创建一个破坏文件
sql>save '/tmp/pohuai.tx'
-----用破坏文件覆盖控制文件,达到破坏目的
-----注释:为什么不用RM 删除呢?因为RM只删除文件头,
----实际文件并未删除,只有启停数据库才能实现控制文件损坏现象
sql>host cp /tmp/pohuai.txt/oradata/fsdb/control02.ctl
---手工生成一个监测点,结果报错了,这时候数据库就挂了
SQL> alter system checkpoint;
alter system checkpoint
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 3991
Session ID: 191 Serial number: 1
---查看下数据库状态
sql>select status from v$instance;ERROR:
ORA-03114: not connected to ORACLE
--启动下数据库看看,
--内存已经分配了,说明已经nomount了,这说明参数文件没问题
--数据库mount的时候报错了。在不看错误提示的情况下。说明控制文件有问题
---根绝报错,控制文件有问题,让查看下alert log 日志。去看看
sql>startup
Total System Global Area 1670221824 bytes
Fixed Size 2228944 bytes
Variable Size 973081904 bytes
Database Buffers 687865856 bytes
Redo Buffers 7045120 bytes
ORA-00205: error in identifying control file, check alert log for more info
----查看日志文件 获得相关信息
----截取到 数据库mount阶段,查看报错
----说control02.ctl 文件头算坏,说明文件坏了
ALTER DATABASE MOUNT
client_id='' type='UNKNOWN' level='16'
host_id='oracledb' host_addr='192.168.56.101' module=''
pid='5478'>
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/oradata/fsdb/control02.ctl'
ORA-27048: skgfifi: file header information is invalid
Additional information: 18
-----来咱们恢复吧,幸亏之前查看有两个控制文件,复制一个过来不就完了。走说干就干。
-----查看控制文件信息,看看控制文件位置在哪?---启动数据库到nomount状态
sql>startup nomount
--查看控制文件位置
sql>show parameter control_files;
--把好的控制文件,覆盖坏的控制文件,千万别弄错了。要不就麻烦了。
sql>host cp /oradata/fsdb/control01.ctl /oradata/fsdb/control02.ctl
---覆盖完成后。走mount试下。呦呵,真的好了。
SQL> alter database mount;
Database altered.
---OPEN 下试试
SQL> alter database open;
Database altered.
=======文件系统,单控制文件损坏恢复。说到这里,下面介绍,文件系统全部控制文件损坏==================