合 Oracle中如何备份控制文件?备份控制文件的方式有哪几种?
如何备份控制文件?备份控制文件的方式有哪几种?
答案:备份控制文件的方式有多种。
① 备份控制文件可以在线进行:
1 2 3 4 5 | SQL> ALTER DATABASE BACKUP CONTROLFILE TO '/tmp/control.ctl';--热备份控制文件 SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/home/bk/a.ctl';--得到建立控制文件的脚本,备份为文本文件格式 SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE [RESETLOGS|NORESETLOGS]; |
② RMAN手动备份控制文件:
1 2 3 4 5 6 7 | BACKUP CURRENT CONTROLFILE; BACKUP CURRENT CONTROLFILE FORMAT '/home/oracle/oracle_bk/orclasm/ctl_%d_%T_%s_%p.bak'; BACKUP AS COPY CURRENT CONTROLFILE FORMAT '/home/oracle/ctl.bak'; BACKUP DATABASE INCLUDE CURRENT CONTROLFILE; |
③ 设置RMAN自动备份控制文件:
1 2 3 | RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON; RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/home/oracle/ctl_%f.bak'; |
然后再通过rman做任何备份操作的同时,都会自动对控制文件做备份。
当数据库处于归档模式且设置了“CONFIGURE CONTROLFILE AUTOBACKUP ON;”时,若数据库的结构发生了变化(例如添加或删除表空间),则也会自动对控制文件进行备份。需要注意的是,从Oracle 11g开始,rman对控制文件自动备份做了延迟处理。在Oracle 10g中,引入了控制文件的自动备份特性。如果数据库的结构发生了变化,那么Oracle会自动将控制文件备份到指定目录中,并且在告警日志中记录相关的信息。前提是数据库处于归档模式,并且CONTROLFILE AUTOBACKUP设置为ON。但是,从Oracle 11gR2开始,引入了控制文件自动备份延迟创建的特性。即使设置了控制文件的自动备份,在数据库结构发现变化的时候也不会立即看到控制文件的备份,而是在300秒(由隐含参数“_controlfile_autobackup_delay
”来控制,默认是300秒)后才会看到控制文件被自动做了备份(经过实验测试,发现实际上是10分钟之后)。而且,在告警日志中也只能看到数据库结构发生变化的信息,而看不到控制文件自动备份的信息了,这是Oracle为了改变性能而引入的,防止用户在一个脚本中多次对数据库结构的变化而创建多个控制文件备份。例如CREATE TABLEPACE、DROP LOGFILE、ADD LOGEILE等,那么Oracle 11g只会备份一个控制文件,而不是多个;对于Oracle 10g只要数据库结构改变,就会自动备份一个。MOS文档[ID 1068182.1]对这个问题做了说明。在Oracle 11g中,备份控制文件的后台进程为MMON的奴隶进程,默认会生成一个trace文件,名称为SID__m000_<OS_PID>.trc
,该trace文件中记录了控制文件自动备份的位置和时间:
1 2 3 4 5 | Starting control autobackup *** 2018-03-22 13:46:39.836 Control autobackup written to DISK device handle '/u05/app/oracle/flash_recovery_area/ORA11G/autobackup/2018_03_22/o1_mf_s_971444798_fc6jszc5_.bkp' |
④ 只要是对编号为1的数据文件,即SYSTEM表空间的数据文件做备份时,RMAN也会自动对控制文件做备份。
⑤ 快照控制文件。快照控制文件是由RMAN在系统指定位置生成的当前控制文件的一个副本。当RMAN开始备份时,Oracle会检查系统控制文件与快照控制文件是否一致(如果不存在,那么会从控制文件提取信息创建),若不一致则刷新快照控制文件。RMAN在以下情况中需要快照控制文件:1.同步恢复目录时2.对当前控制文件进行备份时。在RAC环境下,仅仅在实施RMAN备份的节点上需要快照控制文件。
查看快照控制文件的位置:
1 2 3 | RMAN> show snapshot controlfile name; RMAN configuration parameters for database with db_unique_name USBO are: CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/db_1/dbs/snapcf_lhrdb.f'; # default |
Linux/Unix平台为:$ORACLE_HOME/dbs/snapcf_$ORACLE_SID.f
Windows平台为:%ORACLE_HOME%\database\snapcf_%$ORACLE_SID%.f
如果要查看备份的控制文件,那么可以通过:
1 | RMAN> LIST BACKUP OF CONTROLFILE; |
生成standby controlfile 备库控制文件
1 2 3 4 | rman:backup device type disk format '/arch/standby_new_lhr_%U.ctl' current controlfile for standby; sql:alter database create standby controlfile as '/arch/standby_new_lhr_contol.ctl' |
控制文件其它SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | RMAN> catalog controlfilecopy '/home/oracle/rman_back/ctl_orastrac.ctl_bk'; RMAN> backup as copy controlfilecopy '/home/oracle/rman_back/ctl_orastrac.ctl_bk' format '+DATA'; RMAN> restore controlfile to '+DATA' FROM '+DATA/orastrac/controlfile/backup.331.881248305'; ---控制文件 --alter system set control_files='/u01/app/oracle/oradata/control01.ctl', '/u01/app/oracle/oradata/control02.ctl','/u01/app/oracle/oradata/control03.ctl' scope=spfile; alter database backup controlfile to trace as '/home/oracle/oracle_bk/coolbak/ctl.sql'; select * from v$controlfile_record_section; --转储控制文件 alter system set events 'immediate trace name controlf level 12'; ---文件路径 SELECT d.value || '/' || lower(rtrim(i.instance, chr(0))) || 'ora' || p.spid || '.trc' trace_file_name FROM (SELECT p.spid FROM v$mystat m, v$session s, v$process p WHERE m.statistic# = '1' AND s.sid = m.sid AND p.addr = s.paddr) p, (SELECT t.instance FROM v$thread t, v$parameter v WHERE v.name = 'thread' AND (v.value = '0' OR to_char(t.thread#) = v.VALUE)) i, (SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') d; oradebug setmypid SELECT a.SID, b.SERIAL# , c.SPID ospid, c.pid orapid FROM v$mystat a, v$session b , v$process c WHERE a.SID = b.SID and b.PADDR=c.ADDR AND rownum = 1; oradebug dump controlf 12; 16:09:17 SQL> oradebug setmypid 已处理的语句 16:09:55 SQL> oradebug tracefile_name /u01/app/oracle/diag/rdbms/orclasm/orclasm/trace/orclasm_ora_21437.trc oradebug event 1555 trace name errorstack level 3 热备: alter database backup controlfile to '<dir>'; --热备份控制文件 alter database backup controlfile to '/home/oracle/ora_bk/control.bk'; alter database backup controlfile to trace as '<dir>' ;--得到建立控制文件的脚本 RMAN: backup current controlfile format '/home/oracle/oracle_bk/orclasm/ctl%d%T%s%p.bak'; backup database include current controlfile; -- 或者设置RMAN 为自动备份 RMAN > configure controlfile autobackup on; ---------- 重建控制文件 CREATE CONTROLFILE REUSE DATABASE "ORA11G" RESETLOGS DATAFILE '/u01/app/oracle/oradata/orcltest/system01.dbf'; STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "ORA11G" RESETLOGS ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u02/app/oracle/oradata/orcltest/redo01.log' SIZE 50M BLOCKSIZE 512, GROUP 2 '/u02/app/oracle/oradata/orcltest/redo02.log' SIZE 50M BLOCKSIZE 512, GROUP 3 '/u02/app/oracle/oradata/orcltest/redo03.log' SIZE 50M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/u02/app/oracle/oradata/orcltest/system01.dbf', '/u02/app/oracle/oradata/orcltest/sysaux01.dbf', '/u02/app/oracle/oradata/orcltest/undotbs01.dbf', '/u02/app/oracle/oradata/orcltest/users01.dbf', '/u02/app/oracle/oradata/orcltest/example01.dbf' CHARACTER SET ZHS16GBK ; |
11G新特性-控制文件延迟自动备份
在10G中,ORACLE引入了控制文件的自动备份,如果数据库的结构发生了变化,那么ORACLE会自动将控制文件备份到指定目录中。
前提是数据库处于归档模式,并且CONTROLFILE AUTOBACKUP设置为ON。
首先看一下10G的情况:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | SQL> select * from v$version; BANNER \-------------------------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi PL/SQL Release 10.2.0.5.0 - Production CORE 10.2.0.5.0 Production TNS for Linux: Version 10.2.0.5.0 - Production NLSRTL Version 10.2.0.5.0 - Production SQL> conn / as sysdba Connected. SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 121 Next log sequence to archive 124 Current log sequence 124 [oracle@dbserver ~]$ rman target / Recovery Manager: Release 10.2.0.5.0 - Production on Fri Sep 14 11:00:13 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved. connected to target database: REPORTDB (DBID=3119636991) RMAN> show controlfile autobackup; using target database control file instead of recovery catalog RMAN configuration parameters are: CONFIGURE CONTROLFILE AUTOBACKUP ON; RMAN> |