归档位置 归档目标位置相关初始化参数
方法
初始化参数
Host
示例
1
LOG_ARCHIVE_DEST_n
n
取值1-31
,1-10
对local or remote locations
可用,11-31
仅用于remote locations
local or remote
LOG_ARCHIVE_DEST_1 = 'LOCATION=/path1/arc'
LOG_ARCHIVE_DEST_2 = 'LOCATION=/path2/arc'
LOG_ARCHIVE_DEST_3 = 'SERVICE=standby1'
2
LOG_ARCHIVE_DEST
andLOG_ARCHIVE_DUPLEX_DEST
local only
LOG_ARCHIVE_DEST = '/path1/arc'
LOG_ARCHIVE_DUPLEX_DEST = '/path2/arc'
归档目标位置优先级 Oracle建议使用==快速恢复区==(db_recovery_file_dest)
作为归档日志文件的存放位置,因为归档日志可由数据库自动管理。
在快速恢复区中的归档日志的文件名为OMF
,不由LOG_ARCHIVE_FORMAT
参数决定。无论使用何种归档方案,始终建议在多个位置保存归档日志的多个副本。
有以下归档重做日志的基本选项,从最推荐到最不推荐列出:
启用归档到快速恢复区,并使用磁盘镜像来保护归档重做日志所需的冗余性。
如果制定了DB_RECOVERY_FILE_DEST
,并且没有指定LOG_ARCHIVE_DEST_n
,则LOG_ARCHIVE_DEST_10
被隐式 设置为恢复区。可通过将LOG_ARCHIVE_DEST_10
设置为空字符串来覆盖此行为。
启用归档到快速恢复区,并将LOG_ARCHIVE_DEST_n
设置为快速恢复区以外的位置。
如果配置了快速恢复区,则可通过将任何LOG_ARCHIVE_DEST_n
参数设置为LOCATION=USE_DB_RECOVERY_FILE_DEST
以便明确 将快速恢复区作为归档目的地。
仅将重做日志归档到LOG_ARCHIVE_DEST_n
指定的,非快速恢复区位置。
如果使用了快速恢复区,则不能使用LOG_ARCHIVE_DEST
和LOG_ARCHIVE_DUPLEX_DEST
参数,使用其中任何一个参数都会阻止实例启动。只有LOG_ARCHIVE_DEST_n
参数可以和快速恢复区同时使用。
注意,如果启用归档,但并没有为LOG_ARCHIVE_DEST
,LOG_ARCHIVE_DEST_n
或DB_RECOVERY_FILE_DEST
设置任何值,则重做日志将归档到特定于平台的默认位置。对于Linux为?/dbs
,对于Windows为?/database
仅归档到一个目标位置:
使用LOG_ARCHIVE_DEST
参数指定归档的目标位置
归档到多个目标位置:
使用 LOG_ARCHIVE_DEST_n
初始化参数选择存档到两个或更多位置,或者使用 LOG_ARCHIVE_DEST
和 LOG_ARCHIVE_DUPLEX_DEST
初始化参数仅归档到主要和次要目的地。
对于==本地目标==,除了本地文件系统或 Oracle ASM 磁盘组之外,您还可以归档到快速恢复区。 数据库使用Fast Recovery Area
来存储和自动管理与备份和恢复相关的各种文件的磁盘空间。
通常,您在数据库规划期间确定归档日志目的地,并在数据库安装期间设置归档目的地的初始化参数。 但是,您可以在数据库运行后使用 ALTER SYSTEM
命令动态添加或更改归档目标。 您==所做的任何目标更改都会在下一次日志切换(自动或手动)时生效==。
必须成功归档的最少位置 可选的初始化参数 LOG_ARCHIVE_MIN_SUCCEED_DEST=n
决定了数据库在重用联机日志文件之前必须成功将重做日志组归档到的最小目的地数。 默认值为 1。如果使用双工,则 n 的有效值为 1 到 2;如果使用多路复用,n 的有效值为 1 到 31。
自定义归档位置 1 2 3 4 5 6 7 mkdir - p / u01/ app/ oracle/ arc shutdown immediate startup mount alter database archivelog;alter system set log_archive_dest_1= 'location=/u01/app/oracle/arc' ;alter database open ;
归档模式查询 1 2 3 4 5 6 7 SQL > archive log list;Database log mode No Archive Mode Automatic archival Disabled Archive destination / u01/ app/ oracle/ product/ 19.3 .0 / dbhome_1/ dbs/ arch Oldest online log sequence 289 Current log sequence 291 SQL >
快速恢复区域空间使用情况查询 1 2 3 4 5 6 7 8 9 10 11 SQL > select file_type,percent_space_used from v$flash_recovery_area_usage;FILE_TYPE PERCENT_SPACE_USED CONTROL FILE 0 REDO LOG 0 ARCHIVED LOG 99.99 BACKUP PIECE 0 IMAGE COPY 0 FLASHBACK LOG 0 FOREIGN ARCHIVED LOG 0
查询归档日志 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 SQL > SELECT NAME,SEQUENCE#,DELETED FROM V$ARCHIVED_LOG WHERE SEQUENCE# = 90041 ;NAME SEQUENCE# DEL 90041 YES > SELECT name,sequence# seq#,status,completion_time FROM v$archived_log;> SELECT name,sequence# seq#,status,completion_time FROM v$archived_log where sequence#>= 28 ;> ho strings / u02/ DB/ oradb/ arch/ 2013 _07_05/ o1_mf_1_29_8xdbnqx9_.arc | grep "Robinson"Robinson
dg备库中的归档日志 实时应用模式,是将主库中的REDOLOG
传送到备库中的Stdlog
中,然后备库从Stdlog
中应用数据。其他情况则是将主库中的归档日志复制到备库中的归档日志,然后备库从备库中的归档日志中应用数据。
关于归档日志的自动删除策略的详细信息,参见[[归档日志自动删除策略.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 SQL > col DEST_NAME for a20SQL > col DESTINATION for a30SQL > select DEST_NAME,DESTINATION from v$archive_dest where dest_id= 1 ;DEST_NAME DESTINATION LOG_ARCHIVE_DEST_1 USE_DB_RECOVERY_FILE_DEST SQL > select DEST_NAME,DESTINATION from v$archive_dest where dest_id= 2 ;DEST_NAME DESTINATION LOG_ARCHIVE_DEST_2 orcl_primary SQL > select count (1 ) from v$archived_log where dest_id= 1 and deleted= 'NO' ; COUNT (1 ) 486 SQL > select max (sequence#) from v$archived_log where dest_id= 1 and applied= 'YES' ;MAX (SEQUENCE#) 118383 SQL > archive log list;Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 118380 Next log sequence to archive 0 Current log sequence 118385 SQL > select max (sequence#) from v$archived_log where dest_id= 1 ;MAX (SEQUENCE#) 118384 SQL > V$ARCHIVED_LOG.APPLIED SELECT PROCESS,CLIENT_PROCESS,SEQUENCE#,STATUS FROM V$MANAGED_STANDBY;
查询哪些归档日志已经应用 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 SELECT THREAD#, NAME, SEQUENCE#, ARCHIVED, APPLIED, A.NEXT_CHANGE#, A.COMPLETION_TIME, 'delete archivelog sequence ' || A.SEQUENCE# || ' thread ' || A.THREAD# || ';' EXEC_SQL FROM V$ARCHIVED_LOG AWHERE (A.THREAD#, A.SEQUENCE#, a.RESETLOGS_CHANGE#) IN (SELECT b.THREAD#, b.SEQUENCE#, b.RESETLOGS_CHANGE# FROM V$ARCHIVED_LOG B WHERE B.APPLIED = 'YES' AND b.COMPLETION_TIME <= SYSDATE - 3 ) AND a.NAME NOT IN (SELECT b.DESTINATION FROM v$archive_dest b WHERE b.DESTINATION IS NOT NULL ) AND A.COMPLETION_TIME <= SYSDATE - 3 ORDER BY A.THREAD#, A.SEQUENCE#; COL NAME FOR A100 SET LINESIZE 9999 PAGESIZE 9999 COL NEXT_CHANGE# FOR 999999999999999 SELECT THREAD#, NAME, SEQUENCE#, ARCHIVED, APPLIED, A.NEXT_CHANGE# FROM V$ARCHIVED_LOG A WHERE A.SEQUENCE# >= (SELECT MAX (B.SEQUENCE#) - 3 FROM V$ARCHIVED_LOG B WHERE B.THREAD# = A.THREAD# AND B.RESETLOGS_CHANGE# = A.RESETLOGS_CHANGE# AND B.RESETLOGS_CHANGE# = (SELECT D.RESETLOGS_CHANGE# FROM V$DATABASE D) AND B.APPLIED = 'YES' GROUP BY B.THREAD#) ORDER BY A.THREAD#, A.SEQUENCE#; THREAD# NAME SEQUENCE# ARC APPLIED NEXT_CHANGE# 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199063_m6wjmz9l_.arc 199063 YES YES 52002672778 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199064_m6wjn18d_.arc 199064 YES YES 52002704492 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199065_m6wjn18p_.arc 199065 YES YES 52002716500 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199066_m6wjn69n_.arc 199066 YES YES 52002726288 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199067_m6wjndh3_.arc 199067 YES IN - MEMORY 52002764556 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199068_m6wjnh8w_.arc 199068 YES NO 52002765047 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199069_m6wjnsjk_.arc 199069 YES NO 52002804503 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199070_m6wjnsx8_.arc 199070 YES NO 52002826462 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199071_m6wjny1l_.arc 199071 YES NO 52002837499 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199072_m6wjnyyt_.arc 199072 YES NO 52002895560 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199073_m6wjnyz3_.arc 199073 YES NO 52002896093 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199074_m6wjobcc_.arc 199074 YES NO 52002921653 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199075_m6wjpndy_.arc 199075 YES NO 52002954282 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199076_m6wjpnpo_.arc 199076 YES NO 52002954880 1 / u01/ app/ oracle/ fast_recovery_area/ ORCL_STANDBY/ archivelog/ 2024 _06_16/ o1_mf_1_199077_m6wjpnq4_.arc 199077 YES NO 52002996212
RMAN中查询归档日志 1 2 3 4 5 alter system switch logfile; list archivelog all ;
启用禁用归档模式 启用归档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 show parameter db_recovery_dest;alter system set db_recovery_dest= '' ;alter system set log_archive_dest= '/path/arch1' ;alter system set log_archive_format= '%t_%s_%r.arc' scope = spfile;shutdown immediate; startup mount; alter database archivelog;alter database open ;
禁用归档
1 2 3 4 shutdown immediate; startup mount; alter database noarchivelog;alter database open ;
手动归档 使用以下语句手动归档已填充的重做日志文件。例如,以下语句归档所有尚未归档的重做日志文件:
1 ALTER SYSTEM ARCHIVE LOG ALL ;
当您使用手动归档模式时,您不能在归档目标中指定任何备用数据库。
即使启用了自动归档,您也可以使用手动归档来执行诸如将已填充的重做日志成员的非活动组重新归档到另一个位置等操作。 在这种情况下,实例有可能在您完成手动归档之前重用重做日志组,从而覆盖文件。 如果发生这种情况,数据库会将错误消息写入警报日志。
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 SQL > select group #,sequence#,archived,status from v$log; GROUP # SEQUENCE# ARCHIVED STATUS 1 74062 YES INACTIVE 2 74063 NO CURRENT 3 74061 YES INACTIVE SQL > alter system archive log all ;alter system archive log all ORA-00271 : there are no logs that need archiving SQL > alter system archive log all ;alter system archive log all ORA-00271 : there are no logs that need archiving SQL > select group #,sequence#,archived,status from v$log; GROUP # SEQUENCE# ARCHIVED STATUS 1 74062 YES INACTIVE 2 74063 NO CURRENT 3 74061 YES INACTIVE
删除归档日志 删除归档日志的备份 1 2 3 4 delete noprompt backup of archivelog all ; delete noprompt expired backup of archivelog all ;delete noprompt backup of archivelog all completed befor 'sysdate -14' ;
删除归档日志 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 SYSDATE-7 before 关键字表示在7 天前的归档日志,如果使用了闪回功能,也会删除闪回的数据。 list archivelog all ; CROSSCHECK ARCHIVELOG ALL ; DELETE NOPROMPT EXPIRED ARCHIVELOG ALL ; delete noprompt archivelog all ;delete noprompt archivelog all completed before 'sysdate' ; delete noprompt force archivelog all ; report obsolete; delete obsolete; delete noprompt archivelog all [until time 'sysdate - 0.3' ] backed up 1 times to {disk| sbt};CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY; delete noprompt archivelog all ;DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE -7' ; DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE -1' ; delete noprompt archivelog all completed before 'sysdate' ; delete noprompt archivelog until time 'SYSDATE-7' ;DELETE ARCHIVELOG ALL FROM TIME 'SYSDATE-7' ; delete archivelog from time 'sysdate-20' until time 'sysdate-2' ; DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE 200 ;
备份归档日志
备份归档日志时仅仅备份归档过的日志文件(不备份联机重做日志文件)
备份归档日志时总是对归档日志做完整备份
RMAN对归档日志进行备份前,会自动做一次日志切换,且从一组归档日志中备份未损坏的归档日志
RMAN会自动判断哪些归档日志需要进行备份
归档日志的备份集不能包含其它类型的文件
单独备份归档日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 RMAN> backup 2 > format '/u01/app/oracle/rmanbak/lf_%d_%U' 3 > archivelog all delete input; RMAN> backup 2 > archivelog all delete input3 > format '/u01/app/oracle/rmanbak/lf_%d_%U' ;backup archivelog all ; delete noprompt archivelog all completed before 'sysdate-2' ; backup archivelog all not backed up 1 times; backup archivelog all not backed up 2 times;
plus archivelog 使用plus archivelog
时备份数据库完成的动作(backup database plus archivelog)
首先执行alter system archive log current
命令(对当前日志归档)
执行backup archivelog all
命令(对所有归档日志进行备份)
执行backup database
命令中指定的数据文件、表空间等
再次执行alter system archive log current
备份在备份操作期间产生的新的归档日志
执行下面的命令,并观察备份列出的信息,可以看到使用plus archivelog时使用了上面描述的步骤来进行备份
1 2 RMAN> backup database plus archivelog 2 > format '/u01/app/oracle/rmanbak/lg_%d_%U' delete input;