暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 控制文件的多路复用

oracleEDU 2017-08-27
909

如果控制文件出现了意外的损坏,那么此时Oracle数据库系统很可能无法正常启动。为此作为Oracle数据库管理员,务必要保证控制文件的安全。数据库管理员可以通过备份控制文件来提高控制文件的安全性。但当出现问题后使用备份来恢复的话,会出现数据库在一段时间内停机,所以建议使用控制文件的多路复用来保障控制文件的安全,当某个控制文件出现损坏时,系统会自动启用另外一个没有问题的控制文件来启动数据库,不会造成停机。

例如,在操作系统上的/u01/app/oracle/下多路复用一份控制文件 control03.ctl

操作步骤如下:

  1. 查出当前数据库控制文件

  2. 修改参数control_files

  3. 关闭数据库,拷贝控制文件(修改拷贝后文件权限)

  4. 启动数据库

  5. 检查修改结果

  6. 模拟损坏并恢复

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'; 





最后修改时间:2021-04-28 19:54:52
文章转载自oracleEDU,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论