oracle 可以将联机日志文件保存到多个不同的位置,将联机日志转换为归档日志的过程称之为归档。相应的日志被称为归档日志。
一、归档日志
是联机重做日志组文件的一个副本
包含redo记录以及一个唯一的log sequence number
对日志组中的一个日志文件进行归档,如果该组其中一个损坏,则另一个可用的日志将会被归档
对于归档模式的日志切换,当日志归档完成后,下一个日志才能被覆盖或重新使用
自动归档功能如开启,则后台进程arcn在日志切换时自动完成归档,否则需要手动归档
归档日志用途:<1>恢复数据库<2>更新standby数据库<3>使用LogMiner 提取历史日志的相关信息
二、日志的两种模式
1.非归档模式
不适用与生产数据库
创建数据库时,缺省的日志管理模式为非归档模式
当日志切换,检查点产生后,联机重做日志文件即可被重新使用
联机日志被 覆盖后,介质恢复仅仅支持到最近的完整备份
不支持联机备份表空间,一个空间损坏交导致 整个数据库不可用,需要删除掉损坏的表空间或从备份恢复
对于操作系统级别的数据库备份需要将数据库一致性关闭
应当备份所有的数据文件、控制文件(单个)、参数文件、密码文件、联机日志文件(可选)
2.归档模式
能够对联机日志文件乾归档,生产数据库强烈建议归档
在日志切换时,下一个即将被定稿日志组必须归档完成后,日志组才使用
归档日志的Log sequence number 信息会记录到控制文件之中
必须有足够的磁盘空间用于存放归档日志
oracle9i需要设置参数log_archive_start=true才能够进行自动归档
备份与恢复
支持热备份,且当某个非系统表空间损坏,数据库仍然处于可用状态,且支持在线恢复
使用归档日志能够实现联机或脱机时点恢复(即可以恢复到指定的时间点、指定的归档日志或指定的SCN)
三、两种模式的切换设置及手机归档
1.非归档到归档模式
1>一致性关闭数据库(shutdown [immediate | transactional | normal]
2>启动到mount阶段(startup mount)
3>切换到归档模式(alter database archivelog [manual])
4>切换到open阶段(alter database open)
5>对数据做一个完整备份(full backup)
---演示非归档到归档模式
sql>archive log list; --查看数据库是否处于归档模式
Data log mode no archive mode
automatice archive disabled
archive destination USE_DB_RECOVERY_FILE_DEST
oldest onlive log sequence 14
current log sequence 16
sql>select log_mode from v$databse;--查看数据库是否牌归档模式
log_mode
---------------
noarchivelog
sql>shutdown immediate;---一致性关闭数据库
database closed.
database dismounted.
oracle instance shut down.
sql>startup mount; --启动到mount状态
oracle instance started.
total system global area 289406976bytes
fixed size 1248600 bytes
variable size 9646972 bytes
database buffers 188743680 bytes
redo byffers 2945024 bytes
database mounted.
sql>alter database archivelog;--切换到自动归档模式
database altered.
sql>archive log list;--查看数据库的归档状态
database log mode archive mode --已置为归档模式
automoatic archive enabled --对日志进行自动归档
archive destination USE_DB_RECOVERY_FILE_DEST
oldest online log sequence 14
next log sequence to arcive 16
currenct lg sequence 16
---备份数据库步骤省略
2.归档模式切换到非归档模式(步骤同非归档到归档模式仅仅是c步使用alter database noarchivelog,)
1>一致性关闭数据库(shutdown [immediate | transactional | normal])
2>启动到mount阶段(startup mount)
3>切换到归档模式(alter database noarchivelog)
4>切换到open阶段(alter database open)
5>对数据做一个完整备份(full backup)
3.手动归档
手动归档时需要将日志模式切换为alter database archivelog manual
再使用alter system archive log current | all 实现归档
更多手动归档命令:ALTER SYSTEM ARCHIVE_LOG_CLAUSE
注意:<1>手动归档模式下不支持stanby数据库
<2>在alter database archivelog模式下也可以实现对日志的归档
sql>alter database archivelog manual;--将日志模式切换为手工归档模式
database altered.
sql>alter database open;--打开数据库
database altered ;
sql> alter system archive log current;--对当前日志进行归档(建议在mount阶段完成)
system altered.
sql>alter system archive log all;--对所有的日志进行归档
alter system archive log all
*
ERROR at line 1;
ORA-00271:there ar no logs tht need archiving --没有需要 归档的日志
4.归档里程的调整
通过设置LOG_ARCHIVE_MAX_PROCESSES 参数,可以指定数据库规定所需初始化的进程数,缺省的归档进程数为2
一般情况下一需要修改该参数,oracle会根据归档情况自动启动额外的归档进程
也可以动态的增加或减少归档进程数据,比如有些业务在月底需要进行大量归档,平时则归档较少,对些可能动态修改方法 : alter system set log_archive_max_processes=3;
5.配置归档(两种归档位置配置方法)
<1>归档到本机且少于等于两个归档位置
设置LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST参数
alter system set log_archive_dest = '/u01app/oracle/archivelogl' scope = spfile;
alter system set log_archve_duplex_dest = '/u01/app/oracle/archivelog2' scope = spfile;
<2>归档到本机或远程主机
设置LOG_ARCHIVE_DEST_n 参数 ,n最在值为10
alter system set log_archive _dest_1 = ' location=/u01/app/oracle/archivelog3' ;
alter system set log_archive_dest_2 = 'service=standby1';
对于远程归档位置,service选项需要指定远程数据库的网络服务(在tnsnames.ora文件中配置)
log_archive_dest_n的两个常用选项
manadatory | optional
manadatory表示归档必须成功人间如梦到目的路径之后,联机重做日志才能被复用,optional正好相反
reopen:指定归档失败后指定间隔多少时间重试归案,缺省的为300秒
示例:
log_archive_dest_1= 'LOCATION=/u01/app/oracle/archivelog3 manadatory reopen = 600'
log_archive_dest_2 = 'SERVICE=standby1 manadatory reopen'>
<3>两种归档方法异同(前者log_archive_dest、log_archive_duplex_dest,后者log_archive_dest_n)
两者都可以归档到本机,后者要以归档到远程主机,前者不支持该功能
前者最多配置两个归档位置,后者可能配置10个归档位置
两者互不兼容,要么使用前者,要么使用后者
使用后者归档到本地时需要增加Location选项,备份到远程主机需要使用service选项
但上述两种方式未指定路径,归档日志位于db_recovery_file_dest缺省为$oracle_base/flash_recovery_area
<4>归档日志命名格式
设置LOG_ARCHIVE_FORMAT参数,unix下的缺省设置为LOG_ARCHIVE_FROMAT=%T_%S_%R.DBF
%s:日志序列号
%S:日志序列号(带有前导)
%t:重做线程编号
%T:重做线程编号(带有前导)
%a:活动ID号
%d:数据库ID号
%r:RESELOGS的ID值
alter system set log_archive_format = 'arch_%t_%s_%r.arc';
<5>归档位置状态
valid/invalid ---磁盘位置及服务名等是否有效
enabled/disabled --磁盘位置的可用状态及数据库能否使用该归位置
active/inactive --访问归档目的地是否有异常
<6>归档成功的最小数(使用参数log_archive_min_shcceed_dest = n)
alter systemset log_archive_min_succeed_dest = 2;--缺省为1
联机重做日志组能够被覆盖的前提
a.所有强制路径归档位置成功实现归档
b.归档目的地的成功归档的个数大于或等于上述参数设定的值
c.当强制个数大于该参数设定的个数,则以强制个数为准
d.当强制个数大于该参数设定的个数,则可先的成功归档路径加上强制的归档路径个数至少等于该参数设定值
<7>.控制归档可用性(使用参数log_archive_dest_state_n)
alter syste set log_archive_dest_state_1 = enable | defer
enable --->缺省状态,可以在该归档位置进行归档
defer --->禁用该归档位置
<8>演示归档路径配置及查看归档进程,归档位置状态
sql>archive log list;----查看日志是否牌归档状态
database log mode archive mode
automatic archival enable
archive destination use_db_recovery_file_dest
oldest online log sequence 24
next log squence to archive 26
sql>show parameter archive --查看归档路径是否己设置,为空值表示未设置
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
log_archive_config string
log_archive_dest string
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_2 string
log_archive_dest_3 string
log_archive_dest_4 string
log_archive_dest_5 string
log_archive_dest_6 string
log_archive_dest_7 string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_8 string
log_archive_dest_9 string
log_archive_dest_state_1 string enable
log_archive_dest_state_10 string enable
log_archive_dest_state_2 string enable
log_archive_dest_state_3 string enable
log_archive_dest_state_4 string enable
log_archive_dest_state_5 string enable
log_archive_dest_state_6 string enable
log_archive_dest_state_7 string enable
log_archive_dest_state_8 string enable
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_9 string enable
log_archive_duplex_dest string
log_archive_format string %t_%s_%r.dbf
log_archive_local_first boolean TRUE
log_archive_max_processes integer 2
log_archive_min_succeed_dest integer 1
log_archive_start boolean FALSE --该参数在9i中使用
log_archive_trace integer 0
remote_archive_enable string true
standby_archive_dest string ?/dbs/arch
sql>alter sstem set log_archive_dest = '/u01/app/oracle/archivelog1' scope = spfile
system altered;
sql>alter system set log_archive_format = 'arch_%t_%s_%r.arc' scope = spfile;
--设定完毕后需要重新启动实例,在此省略关闭启动信息
sql>ho ls /u01/app/oracle/archivelog1 --查看归档路径下是否在在文件或文件夹
sql>ho ls /u01/app/oracle/archivelog2 --查看归档路径下是否在此文件或文件夹
sql>alter system archive log current;--手动霆归档
system altered.
sql>ho ls -l /u01app/oracle/archivelog1 -在指定夹archivlog1己产生归档日志
total 27752
-rw------- 1 oracle oinstall 28382208 Aug 2 13:46 arc_1_38_724852763.arc
SQL> ho ls -l /u01/app/oracle/archivelog4/ --查看归档日志
total 27752
-rw------- 1 oracle oinstall 28382208 Aug 2 13:45 arc_1_38_724852763.arc
SQL> col dest_name format a20;
SQL> col destination format a30;
SQL> select dest_name,status,archiver,destination,
2 log_sequence,reopen_secs,transmit_mode,process
3 from v$archive_dest; --查看归档目的地的相关状态信息
DEST_NAME STATUS ARCHIVER DESTINATION LOG_SEQUENCE REOPEN_SECS TRANSMIT_MOD PROCESS
-------------------- --------- ---------- ------------------------------ ------------ ----------- ------------ -------
LOG_ARCHIVE_DEST_1 VALID ARCH /u01/app/oracle/archivelog3/ 38 300 SYNCHRONOUS ARCH
LOG_ARCHIVE_DEST_2 VALID ARCH /u01/app/oracle/archivelog4/ 38 300 SYNCHRONOUS ARCH
LOG_ARCHIVE_DEST_3 INACTIVE ARCH 0 0 SYNCHRONOUS ARCH
-----------------------------------------------------------------------------------------------------------------------
SQL> alter system set log_archive_dest_state_2 = defer; --停用log_archive_dest_state_2
System altered.
SQL> show parameter log_archive_dest_state
NAME TYPE VALUE
------------------------------------ ----------- ---------------
log_archive_dest_state_1 string enable
log_archive_dest_state_10 string enable
log_archive_dest_state_2 string DEFER --该路径显示为defer
log_archive_dest_state_3 string enable
log_archive_dest_state_4 string enable
log_archive_dest_state_5 string enable
log_archive_dest_state_6 string enable
log_archive_dest_state_7 string enable
log_archive_dest_state_8 string enable
log_archive_dest_state_9 string enable
SQL> alter system archive log current; --手动归档
System altered.
SQL> ho ls -l /u01/app/oracle/archivelog3; --可以看出archivelog3比archivelog4多出几个归档文件
total 124772 --建议将多出文件件的使用系统命令复制到archivelog4
-rw------- 1 oracle oinstall 28382208 Aug 2 13:46 arc_1_38_724852763.arc
-rw------- 1 oracle oinstall 1788416 Aug 2 20:41 arc_1_39_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug 2 22:21 arc_1_40_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug 2 22:22 arc_1_41_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug 2 22:22 arc_1_42_724852763.arc
-rw------- 1 oracle oinstall 6647296 Aug 2 22:23 arc_1_43_724852763.arc
SQL> ho ls -l /u01/app/oracle/archivelog4;
total 29504
-rw------- 1 oracle oinstall 28382208 Aug 2 13:45 arc_1_38_724852763.arc
-rw------- 1 oracle oinstall 1788416 Aug 2 20:41 arc_1_39_724852763.arc
SQL> alter system set log_archive_dest_state_2 = enable; --启用log_archive_dest_state_2
System altered.
SQL> alter system archive log current; --手动归档
System altered.
SQL> ho ls -l /u01/app/oracle/archivelog3; --启用后出现了相同的arc_1_44_724852763.arc文件
total 124856
-rw------- 1 oracle oinstall 28382208 Aug 2 13:46 arc_1_38_724852763.arc
-rw------- 1 oracle oinstall 1788416 Aug 2 20:41 arc_1_39_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug 2 22:21 arc_1_40_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug 2 22:22 arc_1_41_724852763.arc
-rw------- 1 oracle oinstall 30257664 Aug 2 22:22 arc_1_42_724852763.arc
-rw------- 1 oracle oinstall 6647296 Aug 2 22:23 arc_1_43_724852763.arc
-rw------- 1 oracle oinstall 81408 Aug 2 22:25 arc_1_44_724852763.arc
SQL> ho ls -l /u01/app/oracle/archivelog4;
total 29588
-rw------- 1 oracle oinstall 28382208 Aug 2 13:45 arc_1_38_724852763.arc
-rw------- 1 oracle oinstall 1788416 Aug 2 20:41 arc_1_39_724852763.arc
-rw------- 1 oracle oinstall 81408 Aug 2 22:25 arc_1_44_724852763.arc
四、归档日志相关视图
v$archived_log -->从控制文件中获得归档的相关信息
v$archive_dest -->归档路径及状态
v$log_history -->控制文件中日志的历史信息
v$database -->查看数据库是否处于归档状态
v$archive_processes -->归档相关的后台进程信息
命令:archive log list
SQL> select name,sequence#,registrar,standby_dest,archived,status
2 from v$archived_log;
NAME SEQUENCE# REGISTR STA ARC S
------------------------------------------------------- ---------- ------- --- --- -
/u01/app/oracle/archivelog4/arc_1_38_724852763.arc 38 FGRD NO YES A
/u01/app/oracle/archivelog3/arc_1_39_724852763.arc 39 ARCH NO YES A
/u01/app/oracle/archivelog4/arc_1_39_724852763.arc 39 ARCH NO YES A
/u01/app/oracle/archivelog3/arc_1_40_724852763.arc 40 ARCH NO YES A
/u01/app/oracle/archivelog3/arc_1_41_724852763.arc 41 ARCH NO YES A
/u01/app/oracle/archivelog3/arc_1_42_724852763.arc 42 ARCH NO YES A
/u01/app/oracle/archivelog3/arc_1_43_724852763.arc 43 ARCH NO YES A
/u01/app/oracle/archivelog3/arc_1_44_724852763.arc 44 FGRD NO YES A
/u01/app/oracle/archivelog4/arc_1_44_724852763.arc 44 FGRD NO YES A