
如果控制文件出现了意外的损坏,那么此时Oracle数据库系统很可能无法正常启动。为此作为Oracle数据库管理员,务必要保证控制文件的安全。数据库管理员可以通过备份控制文件来提高控制文件的安全性。但当出现问题后使用备份来恢复的话,会出现数据库在一段时间内停机,所以建议使用控制文件的多路复用来保障控制文件的安全,当某个控制文件出现损坏时,系统会自动启用另外一个没有问题的控制文件来启动数据库,不会造成停机。
例如,在操作系统上的/u01/app/oracle/下多路复用一份控制文件 control03.ctl
操作步骤如下:
查出当前数据库控制文件
修改参数control_files
关闭数据库,拷贝控制文件(修改拷贝后文件权限)
启动数据库
检查修改结果
模拟损坏并恢复
1查出原来有几份控制文件
SQL> select name from v$controlfile ;
NAME
--------------------------------------------------------------------------------
+DATA/orcl/controlfile/current.260.853023315
+FRA/orcl/controlfile/current.256.853023315
2修改参数control_files
alter system set control_files='+DATA/orcl/controlfile/current.260.853023315','+FRA/orcl/controlfile/current.256.853023315','/u01/app/oracle/control03.ctl' scope=spfile;
3关闭数据库,拷贝控制文件
# shutdown immediate;
# su - grid
$ asmcmd
asmcmd> cp +DATA/orcl/controlfile/current.260.853023315 /u01/app/oracle/control03.ctl
4启动数据库
SQL> startup
ORACLE instance started.
Total System Global Area 534462464 bytes
Fixed Size 2215064 bytes
Variable Size 411042664 bytes
Database Buffers 117440512 bytes
Redo Buffers 3764224 bytes
ORA-00221: error on write to control file
ORA-00206: error in writing (block 1, # blocks 1) of control file
ORA-00202: control file: '/u01/app/oracle/control03.ctl'
ORA-27041: unable to open file
Linux-x86_64 Error: 13: Permission denied #权限问题
Additional information: 3
[oracle@oracleEDU oracle]$ ll
total 9556
drwxr-x--- 3 oracle oinstall 4096 Aug 17 03:06 admin
drwxr-x--- 4 oracle oinstall 4096 Aug 17 03:05 cfgtoollogs
drwxr-xr-x 2 oracle oinstall 4096 Aug 17 02:39 checkpoints
-rw-r----- 1 grid oinstall 9748480 Aug 17 08:21 control03.ctl
要把文件拥有者修改为oracle
su - root
chown oracle:oinstall u01/app/oracle/control03.ctl
chmod 775 u01/app/oracle/control03.ctl
# ll u01/app/oracle/
total 9556
drwxr-x--- 3 oracle oinstall 4096 Aug 17 03:06 admin
drwxr-x--- 4 oracle oinstall 4096 Aug 17 03:05 cfgtoollogs
drwxr-xr-x 2 oracle oinstall 4096 Aug 17 02:39 checkpoints
-rwxrwxr-x 1 oracle oinstall 9748480 Aug 17 08:21 control03.ctl
SQL> alter database mount;
Database altered.
SQL> alter database open ;
Database altered.
5检查修改结果
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
+DATA/orcl/controlfile/current.260.853023315
+FRA/orcl/controlfile/current.256.853023315
/u01/app/oracle/control03.ctl
#这里有三份,启动数据库保证3份必须存在且一致。
6模拟损毁并恢复
SQL> shutdown immediate;
# su - grid
$ asmcmd
asmcmd> rm +DATA/orcl/controlfile/current.260.853023315
asmcmd> rm +FRA/orcl/controlfile/current.256.853023315
asmcmd> exit
# su -oracle
$ sqlplus nolog
SQL> startup
ORACLE instance started.
Total System Global Area 534462464 bytes
Fixed Size 2215064 bytes
Variable Size 369099624 bytes
Database Buffers 159383552 bytes
Redo Buffers 3764224 bytes
ORA-00205: error in identifying control file, check alert log for more inf
#查看警告日志文件:
$ cd u01/app/oracle/diag/rdbms/orcl/orcl/trace
vim alert_orcl.log
ORA-00210: cannot open the specified control file
ORA-00202: control file: '+FRA/orcl/controlfile/current.256.853023315'
ORA-17503: ksfdopn:2 Failed to open file +FRA/orcl/controlfile/current.256.853023315
ORA-15012: ASM file '+FRA/orcl/controlfile/current.256.853023315' does not exist
ORA-00210: cannot open the specified control file
ORA-00202: control file: '+DATA/orcl/controlfile/current.260.853023315'
ORA-17503: ksfdopn:2 Failed to open file +DATA/orcl/controlfile/current.260.853023315
ORA-15012: ASM file '+DATA/orcl/controlfile/current.260.853023315' does not exist
ORA-205 signalled during: ALTER DATABASE MOUNT...
损坏了2个控制文件,实际上还有一个,查看:
QL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string +DATA/orcl/controlfile/current
.260.822001535, +FRA/orcl/cont
rolfile/current.256.822001537,
u01/app/oracle/control03.ctl
通过好的恢复坏的
i. 文件系统:直接把文件拷贝过去,和以前的同样名字。
方法:cp
ii. ASM存储:ASM名字是自动重命名,用户指定名字是别名。
方法:restore controlfile from 好的控制文件的路径
Tips:不能再恢复到原来的目录。
$ export ORACLE_SID=orcl
$ rman target
RMAN> restore controlfile from '/u01/app/oracle/control03.ctl';
Starting restore at 28-Aug-17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=24 device type=DISK
channel ORA_DISK_1: copied control file copy
output file name=+DATA/orcl/controlfile/current.260.842344229
output file name=+FRA/orcl/controlfile/current.256.842344233
output file name=/u01/app/oracle/control03.ctl
Finished restore at 28-Aug-17
alter database mount ;
alter database open ;
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
+DATA/orcl/controlfile/current.260.842344229
+FRA/orcl/controlfile/current.256.842344233
/u01/app/oracle/control03.ctl
另外如果磁盘组恢复不了
如果+DATA +FRA磁盘组无法使用
可以启动(使用一个好的控制文件启动数据库)
SQL> alter system set control_files='/u01/app/oracle/control03.ctl' scope=spfile ;
SQL> startup ;
启动之后还需要多路复用
SQL> alter system set control_files='+data/orcl/controlfile/control01.ctl','+fra','/u01/app/oracle/control03.ctl' scope=spfile ;
SQL> restore controlfile from '/u01/app/oracle/control03.ctl';






