V$parameter 视图
SQL> select * from v$parameter where name='control_files';
能够查看到controlfile的状态和位置
SQL> select * from v$controlfile_record_section; 能够查看到关于controlfile的记录信息
SQL> show parameter control_files; 能够查看到名字、状态、位置
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
control_files string
/opt/oracle/oradata/orcl/contr
ol01.ctl, /opt/oracle/flash_re
covery_area/orcl/control02.ctl
3. Controlfile 的备份方式
控制文件备份的几种方法及简单说明:
1. 镜像备份:多数系统通过control_files参数(*.control_files 在PFILE或者SPFILE中)指定多路控制文件,在某种意义上也是起到了备份的效果
2. RMAN自动备份: 可以设置configure controlfile autobackup on 来开启自动备份的功能,另外,即使不开启此功能,oracle 每当备份数据文件(system表空间)的时候也会把控制文件备份(这个和备份策略有关)
3. RMAN 手动备份:可通过RMAN备份集或者镜像复制(copy)方式会controlfile进行备份
4. SQL * PLUS 手工备份,有二进制文件备份方法和脚本导出方法
5. 控制文件快照,此文件是在第一次RMAN备份控制文件时自动创建,并且以后随着控制文件备份或者CATALOG恢复目录发生同步更新
第一种备份方式不在说明了,也就是执行alter system set control_files='FILE1','FILE2' scope=spfile; 这个SQL语句,多文件控制,这个也是控制文件多元化的体现
第二种备份: RMAN 自动备份(选择这种方式较好)
[oracle@test1 ~]$ rman target /
RMAN> show controlfile autobackup;
##controlfile autobackup 默认是关闭的
using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name ORCL are:
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
RMAN> configure controlfile autobackup on; ###开启autobackup备份
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored
开启自动备份功能后,当RMAN进行备份命令的时候,控制文件就会自动备份一个,列如:
RMAN> backup tablespace users format '/opt/oracle/rman/backup/test_%U.bak'; 表空间users
再结尾的时候会发现:Starting Control File and SPFILE Autobackup 这个就是autobackup的相关信息
Starting Control File and SPFILE Autobackup at 29-OCT-13
piece handle=/opt/oracle/flash_recovery_area/ORCL/autobackup/2013_10_29/o1_mf_s_830098881_96yqb3h2_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 29-OCT-13
自动备份是放在了:/opt/oracle/flash_recovery_area/ORCL/autobackup/2013_10_29/ 路径下
这个路径也可以通过RMAN配置来更改:
RMAN> configure controlfile autobackup format for device type disk to '/opt/oracle/rman/backup/control_%F'; 更改配置命令
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/opt/oracle/rman/backup/control_%F';
new RMAN configuration parameters are successfully stored
重新执行上面的backup语句之后,发现autobackup 备份的路径已经变更了:
Starting Control File and SPFILE Autobackup at 29-OCT-13
piece handle=/opt/oracle/rman/backup/control_c-1357021989-20131029-01 comment=NONE
Finished Control File and SPFILE Autobackup at 29-OCT-13
需要注意的是:控制文件自动备份在数据库物理结构发生变化时也会进行,比如创建删除表空间,表空间ONLINE或OFFLINE,表空间READ ONLY 或者 READ WRITE、表空间删除数据文件等
SQL> DROP TABLESPACE test INCLUDING CONTENTS AND DATAFILES;
SQL>> 这时,如果去更改数据的物理结构,autobackup 会立即执行,而在跟踪文件中,MM0N没有日志反应,这时因为:oracle 11G R2使用新特性之后也就不在将数据库物理结构改变记录到告警日志里面,替代MMON的是TRACE进程
[oracle@test1 trace]$ ll -lth | more
total 5.7M
-rw-r----- 1 oracle oinstall 120K Oct 29 15:23 alert_orcl.log
-rw-r----- 1 oracle oinstall 921 Oct 29 15:23 orcl_ora_15689.trc
[oracle@test1 trace]$ cat orcl_ora_15689.trc | more
Starting control autobackup
*** 2013-10-29 15:23:45.391
Control autobackup written to DISK device
这个starting autobackup的时间和通过RMAN 查看到autobackup file的时间相吻合
RMAN> connect target /;
RMAN> list backup of controlfile;
6 Full 9.36M DISK 00:00:00 29-OCT-13
BP Key: 6 Status: AVAILABLE Compressed: NO Tag: TAG20131029T152344
Piece Name: /opt/oracle/rman/backup/control_c-1357021989-20131029-03
Control File Included: Ckp SCN: 1254967 Ckp time: 29-OCT-13
关闭controlfile autobackup 功能,通过备份system 表空间备份controlfile
RMAN> configure controlfile autobackup off;
RMAN> backup datafile 1 format '/opt/oracle/rman/sys_%U.bak';
会从备份日志中看到:
including current control file in backup set
including current SPFILE in backup set
说明是包含了控制文件和服务器参数文件SPFILE
Datafile 1 就是system 表空间的datafile 的FILE_ID
SQL 语句等同于: backup tablespace system format '/opt/oracle/rman/sys_%U.bak';
SQL 语句:
select a.tablespace_name,a.status,b.file_name,b.file_id from dba_tablespaces a , dba_data_files b where a.tablespace_name=b.tablespace_name;
可以查看到表空间和FILE_NAME,FILE_ID的对应关系
第三种备份: RMAN 手动备份
备份的命令和其他备份命令很类似:
RMAN> backup current controlfile format '/opt/oracle/rman/backup/control_%U.bak';
日志中会有提示:
including current control file in backup set
查看备份:
RMAN> list backup of controlfile;
9 Full 9.33M DISK 00:00:01 29-OCT-13
BP Key: 9 Status: AVAILABLE Compressed: NO Tag: TAG20131029T162955
Piece Name: /opt/oracle/rman/backup/control_0eonkok3_1_1.bak
Control File Included: Ckp SCN: 1257390 Ckp time: 29-OCT-13
手动备份之 镜像COPY 备份
RMAN> backup as copy current controlfile format '/opt/oracle/rman/backup/control_%U.bak';
日志中包含了:
copying current control file
查看备份(COPY) 文件:
RMAN> list copy of controlfile;
List of Control File Copies
===========================
Key S Completion Time Ckp SCN Ckp Time
------- - --------------- ---------- ---------------
1 A 29-OCT-13 1257533 29-OCT-13
Name: /opt/oracle/rman/backup/control_cf_D-ORCL_id-1357021989_0fonkoq4.bak
Tag: TAG20131029T163308
两种方法是类似的
第四种备份: SQL * PLUS 手工备份
SQL>> 因为SQL*PLUS备份也是镜像备份,所用RMAN下通过list copy 是可以查出相关的信息
RMAN> list copy of controlfile;
List of Control File Copies
===========================
Key S Completion Time Ckp SCN Ckp Time
------- - --------------- ---------- ---------------
2 A 29-OCT-13 1257605 29-OCT-13
Name: /home/oracle/control_bak.ctl
Tag: TAG20131029T163645
再RMAN下,也可以通过脚本导出controlfile 内容
RMAN> sql '> 这个命令和我们前文讲的是一样的,可以用来进行controlfile 重构
当然,DBA 也是可以指定文件导出的路径,后面加上一个 AS 关键字 和 路径即可
第五种:控制文件快照
控制文件快照在第一次RMAN备份控制文件(上面几种方法任意一种)时,会自动创建;
生成的路径在:/opt/oracle/product/11.2.0/dbhome_1/dbs
[oracle@test1 dbs]$ ll -lth snapcf_orcl.f
-rw-r----- 1 oracle oinstall 9.3M 10-29 16:33 snapcf_orcl.f
注意:如果当前数据库从来没有备份过时,是不会产生这个快照文件的,此文件随控制文件备份或者CATALOG恢复目录发生同步一起更新,在找不到有效备份的情况下使用此快照也可以进行控制文件的恢复
列如:
[oracle@test1 dbs]$ ll -lth snapcf_orcl.f
-rw-r----- 1 oracle oinstall 9.3M 10-29 16:33 snapcf_orcl.f 当前最后更新时间是16:33
使用rman 进行备份(上述方法中的任意一种)
RMAN> backup datafile 1 format '/opt/oracle/rman/backup/1.bak';
including current control file in backup set
including current SPFILE in backup set
[oracle@test1 dbs]$ ll -lth snapcf_orcl.f
-rw-r----- 1 oracle oinstall 9.3M 10-29 17:14 snapcf_orcl.f
再看快照文件,发现其已更新
三:控制文件恢复
前文第二步讲了许多关于控制文件的备份方法,目的只有一个,就是当数据库出现和控制文件相关故障的时候能够及时的恢复
通过上面介绍的备份方法总结出3中备份文件类型:
1.镜像备份,也就是当前数据库正在使用的控制文件,即是control_files参数指定的文件之一,这个是采用备份方式1进行备份的
2.结构备份; 采用非方式1进行备份的,最重要的一点是该备份里的结构信息和当前系统物理结构是一致的
3.历史备份:也是采用非方式1进行备份的,该备份里的结构信息和当前系统物理架构不保持一致
针对这三种方式讨论下恢复方法:
1.通过镜像备份恢复,往往需要做这种操作的时候是因为当前控制文件部分文件损坏,恢复也比较简单,拿正常的控制文件替换一下就可以了
2.通过结构备份恢复:这种技术较多发生在没有使用多路技术的系统上,恢复方法:从备份中还原备份文件或者通过脚本重构控制文件,然后利用归档和在线REDO 文件,NORESETLOGS或者RESETLOG打开
3.通过历史备份恢复,方法如通过结构备份恢复
通过一些示列,描述下如果遇到控制文件损坏时,应如何处理
如果是control_files 参数指定的某一个文件损坏,造成的数据库无法启动,只需要拿正常的controlfile文件去覆盖即可,操作比较简单
如果遇到以下几种情况时,我们应该怎样去思考呢:
示列一:控制文件全部损坏,如果有controlfile的备份文件(快照文件也可以)
SQL> show parameter control_files;
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
control_files string /opt/oracle/oradata/orcl/contr
ol01.ctl, /opt/oracle/flash_re covery_area/orcl/control02.ctl
两个controlfile路径
模拟损坏的情况:
oracle@test1 ~]$ echo "123123" > /opt/oracle/oradata/orcl/control01.ctl
[oracle@test1 ~]$ echo "123123" > /opt/oracle/flash_recovery_area/orcl/control02.ctl
此时,正常关闭数据库时,会提示error
SQL> shutdown immediate;
ORA-00227: corrupt block detected in control file: (block 1, # blocks 1)
ORA-00202: control file: '/opt/oracle/oradata/orcl/control01.ctl'
SQL> shutdown abort; ##关闭数据库
ORACLE instance shut down.
在启动数据库的时候,就会提示: