Oracle控制文件多路复用时要注意的问题

由于控制文件对于数据库的重要性很高,所以通常在dbca建库以后,都会对控制文件多路复用。如,在Oracle10g中,默认控制文件有3份,内容完全一致,通常位于$ORACLE_BASE/oradata/SID/下面,名字为control01.ctl,control02.ctl,control03.ctl,而到了11g,默认只有2个份,一个位于$ORACLE_BASE/oradata/SID/下面,名字为control01.ctl,另一份位于$ORACLE_BASE/fast_recovery_area/SID/下面,名字为control02.ctl。

当然了,我说的都是默认安装的情况下,完全可以通过在pfile中自定义不同的路径。

有时候,可能会碰到某些库只有1个控制文件,没有镜像,即没有对控制文件多路复用,显然这是不太好的,需要为数据库增加控制文件的镜像文件,下面来做个测试

----------------------------华丽丽的分割线----------------------------

Oracle控制文件的多路复用

Oracle 单实例 从32位 迁移到 64位 方法 

CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

Oracle导入导出expdp IMPDP详解

Oracle 10g expdp导出报错ORA-4031的解决方法

----------------------------华丽丽的分割线----------------------------

 

--启动数据库,查看当前控制文件信息

SQL> startup

ORACLE instance started.

 

Total System Global Area  835104768 bytes

Fixed Size                  2232960 bytes

Variable Size             507514240 bytes

Database Buffers          322961408 bytes

Redo Buffers                2396160 bytes

Database mounted.

Database opened.

SQL> show parameter control_file

 

NAME                                 TYPE        VALUE

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

control_file_record_keep_time        integer     7

control_files                        string      /u01/app/oracle/oradata/zlm11g

                                                 /control01.ctl, /u01/app/oracl

                                                 e/fast_recovery_area/zlm11g/co

                                                 ntrol02.ctl

 

默认装完库以后,已经有2个控制文件,其中,control02.ctl是镜像

 

--查看control_file参数是否可以在线修改

SQL> col name for a20

SQL> select name,issys_modifiable from v$parameter where;

 

NAME                 ISSYS_MOD

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

control_files        FALSE

 

显然,FALSE表示无法在线修改该参数,那么多路复用控制文件就意味着要重启数据库了

 

--创建pfile

SQL> create pfile from spfile;

 

File created.

 

--关闭数据库并修改pfile,增加控制文件镜像(在control_files参数后面添加镜像的位置、文件名

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> !

 

zlm11g.__db_cache_size=322961408

zlm11g.__java_pool_size=4194304

zlm11g.__large_pool_size=4194304

zlm11g.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

zlm11g.__pga_aggregate_target=335544320

zlm11g.__sga_target=503316480

zlm11g.__shared_io_pool_size=0

zlm11g.__shared_pool_size=163577856

zlm11g.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/zlm11g/adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'

*.control_files='/u01/app/oracle/oradata/zlm11g/control01.ctl','/u01/app/oracle/fast_recovery_area/zlm11g/control02.ctl',

'/u01/control03.ctl'--红色部分为新增的控制文件镜像

*.db_block_size=8192

zlm11g.db_create_file_dest='/u01/app/oracle/oradata/zlm11g/'

*.db_domain=''

*.db_name='zlm11g'

*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'

*.db_recovery_file_dest_size=4322230272

*.diagnostic_dest='/u01/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=zlm11gXDB)'

*.log_archive_format='%t_%s_%r.dbf'

*.memory_target=838860800

*.memory_target=838860800

*.open_cursors=300

"/u01/app/oracle/product/11.2.0/db_1/dbs/initzlm11g.ora" 27L, 1048C written

 

--在OS级别复制一份控制文件镜像

[oracle@zlm ~]$ cp $ORACLE_BASE/oradata/zlm11g/control01.ctl /u01/control03.ctl

[oracle@zlm ~]$ cd /u01

[oracle@zlm u01]$ ls

app  bak  control03.ctl  dave.trc  expdp  rman.log  rman.trc

[oracle@zlm u01]$ exit

exit

 

--用pfile启动数据库

SQL> startup pfile=$ORACLE_HOME/dbs/initzlm11g.ora

ORACLE instance started.

 

Total System Global Area  835104768 bytes

Fixed Size                  2232960 bytes

Variable Size             507514240 bytes

Database Buffers          322961408 bytes

Redo Buffers                2396160 bytes

Database mounted.

Database opened.

SQL> show parameter control_files

 

NAME                                 TYPE        VALUE

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

control_files                        string      /u01/app/oracle/oradata/zlm11g

                                                 /control01.ctl, /u01/app/oracl

                                                 e/fast_recovery_area/zlm11g/co

                                                 ntrol02.ctl, /u01/control03.ct

 

新增的镜像控制文件已经生效,现在有3个控制文件了,一个原始文件,2路复用

 

--创建新的spfile                                                 l

SQL> create spfile from pfile;

 

File created.

 

--关库并用spfile重新启动

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

 

Total System Global Area  835104768 bytes

Fixed Size                  2232960 bytes

Variable Size             507514240 bytes

Database Buffers          322961408 bytes

Redo Buffers                2396160 bytes

Database mounted.

Database opened.

SQL> show parameter control_files

 

NAME                                 TYPE        VALUE

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

control_files                        string      /u01/app/oracle/oradata/zlm11g

                                                 /control01.ctl, /u01/app/oracl

                                                 e/fast_recovery_area/zlm11g/co

                                                 ntrol02.ctl, /u01/control03.ct

 

至此,已经完成了对控制文件的复用,从2份增加到了3份,注意,是必须停库的。

下面尝试用另一种方式来增加控制文件镜像,采用spfile动态修改+备份控制文件的方式,看是否可行                                      

 

--修改spfile,添加第4个控制文件

SQL> alter system set control_files='/u01/app/oracle/oradata/zlm11g/control01.ctl,/u01/oracle/fast_recovery_area/zlm11g/control02.ctl,/u01/control03.ctl,/u01/control04.ctl' scope=spfile;

 

System altered.

 

--备份当前控制文件并生成镜像文件

SQL> alter database backup controlfile to '/u01/control04.ctl';

 

Database altered.

 

SQL> alter database backup controlfile to trace as '/u01/control.bak';

 

Database altered.

 

注意这两条命令的区别,前面的语句生成的是binary的控制文件,而后面的语句是生成可读的trace文件(通常用于重建控制文件)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1b6986f1338157149bd019e91d540962.html