Oracle 归档日志

[复制链接]
查看11 | 回复4 | 2013-2-25 14:51:24 | 显示全部楼层 |阅读模式
--====================-- Oracle 归档日志--==================== Oracle可以将联机日志文件保存到多个不同的位置,将联机日志转换为归档日志的过程称之为归档。相应的日志被称为归档日志。 一、归档日志是联机重做日志组文件的一个副本包含redo记录以及一个唯一的log sequence number对日志组中的一个日志文件进行归档,如果该组其中一个损坏,则另一个可用的日志将会被归档对于归档模式的日志切换,当日志归档完成后,下一个日志才能被覆盖或重新使用自动归档功能如开启,则后台进程arcn在日志切换时自动完成归档,否则需要手动归档归档日志用途恢复数据库更新standby数据库使用LogMiner 提取历史日志的相关信息二、日志的两种模式1.非归档模式不适用与生产数据库创建数据库时,缺省的日志管理模式为非归档模式当日志切换,检查点产生后,联机重做日志文件即可被重新使用联机日志被覆盖后,介质恢复仅仅支持到最近的完整备份不支持联机备份表空间,一个表空间损坏将导致整个数据库不可用,需要删除掉损坏的表空间或从备份恢复对于操作系统级别的数据库备份需要将数据库一致性关闭应当备份所有的数据文件、控制文件(单个)、参数文件、密码文件、联机日志文件(可选) 2.归档模式能够对联机日志文件进行归档,生产数据库强烈建议归档在日志切换时,下一个即将被写入日志组必须归档完成之后,日志组才可以使用归档日志的Log sequence number信息会记录到控制文件之中必须有足够的磁盘空间用于存放归档日志Oracle 9i 需要设置参数log_archive_start=true 才能够进行自动归档备份与恢复
支持热备份,且当某个非系统表空间损坏,数据库仍然处于可用状态,且支持在线恢复
使用归档日志能够实现联机或脱机时点恢复(即可以恢复到指定的时间点、指定的归档日志或指定的SCN) 三、两种模式的切换设置及手动归档1.非归档到归档模式a.一致性关闭数据库(shutdown [immediate | transactional |normal])b.启动到mount阶段(startup mount)c.切换到归档模式(alter database archivelog[manual])d.切换到open阶段(alter database open)e.对数据做一个完整备份(full backup)--演示非归档到归档模式
SQL> ARCHIVE LOG LIST--查看数据库是否处于归档模式
Database log mode
No Archive Mode
Automatic archival
Disabled
Archive destination
USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 14
Current log sequence 16
SQL> SELECT log_mode FROM v$database;--查看数据库是否处于归档模式
LOG_MODE
------------
NOARCHIVELOG
SQL> SHUTDOWN IMMEDIATE; --一致性关闭数据库
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP MOUNT; --启动到mount状态
ORACLE instance started.
Total System Global Area251658240 bytes
Fixed Size
1218796 bytes
Variable Size
75499284 bytes
Database Buffers
171966464 bytes
Redo Buffers
2973696 bytes
Database mounted.
SQL> ALTER DATABASE ARCHIVELOG;--切换到自动归档模式
Database altered.
SQL> ALTER DATABASE OPEN;--切换到open状态
Database altered.
SQL> ARCHIVE LOG LIST; --查看数据库的归档状态
Database log mode
Archive Mode--已置为归档模式
Automatic archival
Enabled --对日志进行自动归档
Archive destination
USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 14
Next log sequence to archive 16
Current log sequence 16
--备份数据库步骤省略 2.归档模式切换到非归档模式(步骤同非归档到归档模式仅仅是c步骤使用alter database noarchivelog,演示省略)a.一致性关闭数据库(shutdown [immediate | transactional |normal])b.启动到mount阶段(startup mount)c.切换到归档模式(alter database noarchivelog)d.切换到open阶段(alter database open)e.对数据做一个完整备份(full backup)
3.手动归档手动归档时需要将日志模式切换为alter database archivelog manual再使用alter system archive log current | all 实现归档 更多手动归档命令:ALTER SYSTEM archive_log_clause注意:
手动归档模式下不支持stanby数据库
在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 are no logs that need archiving--没有需要归档的日志 4.归档进程的调整通过设置LOG_ARCHIVE_MAX_PROCESSES 参数,可以指定数据库规定所需初始化的进程数,缺省的归档进程数为2一般情况下不需要修改该参数,Oracle会根据归档情况自动启动额外的归档进程也可以动态的增加或减少归档进程数,比如有些业务在月底需要进行大量归档,平时则归档较少,对此可以动态修改修改方法
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;
5.配置归档(两种归档位置配置方法)a.归档到本机且少于等于两个归档位置
设置LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST参数
alter system set log_archive_dest = '/u01/app/oracle/archivelog1' scope = spfile;
alter system set log_archive_duplex_dest = '/u01/app/oracle/archivelog2' scope = spfile;
b.归档到本机或远程主机
设置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'
c.两种归档方法异同(前者log_archive_dest、log_archive_duplex_dest ,后者log_archive_dest_n)
两者都可以归档到本机,后者可以归档到远程主机,前者不支持该功能
前者最多配置两个归档位置,后者可以配置10个归档位置
两者互不兼容,要么使用前者,要么使用后者
使用后者归档到本地时需要增加LOCATION选项,备份到远程主机需要使用SERVICE选项
但上述两种方式未指定路径时,归档日志位于db_recovery_file_dest 缺省为$ORACLE_BASE/flash_recovey_area
d.归档日志命名格式
设置LOG_ARCHIVE_FORMAT参数,Unix下的缺省设置为LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf
%s: 日志序列号:
%S: 日志序列号(带有前导)
%t: 重做线程编号.
%T: 重做线程编号(带有前导)
%a: 活动ID号
%d: 数据库ID号
%r RESETLOGS的ID值.
alter system set log_archive_format = 'arch_%t_%s_%r.arc';
e.归档位置状态
Valid/Invalid--磁盘位置及服务名等是否有效
Enabled/Disabled --磁盘位置的可用状态及数据库能否使用该归档位置
Active/Inactive--访问归档目的地是否有异常
f.归档成功的最小个数(使用参数log_archive_min_succeed_dest = n)
alter system set log_archive_min_succeed_dest = 2; --缺省为1
联机重做日志组能够被覆盖的前提
所有强制路径归档位置成功实现归档
归档目的地的成功归档的个数大于或等于上述参数设定的值
当强制个数大于该参数设定的个数,则以强制个数为准
当强制个数小于该参数设定的个数,则可选的成功归档路径加上强制的归档路径个数至少等于该参数设定值
g.控制归档的可用性(使用参数log_archive_dest_state_n)
alter system set log_archive_dest_state_1 = enable | defer
enable-->缺省状态,可以在该归档位置进行归档
defer -->禁用该归档位置
h.演示归档路径配置及查看归档进程,归档位置状态
SQL> ARCHIVE LOG LIST; --查看日志是否处于归档状态
Database log mode
Archive Mode
Automatic archival
Enabled
Archive destination
USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 24
Next log sequence to archive 26
Current log sequence 26
SQL> ho ps -ef | grep ora_arc--查看归档进程是否已启动
oracle4062 10 11:43 ?00:00:00 ora_arc0_orcl
oracle4064 10 11:43 ?00:00:00 ora_arc1_orcl
SQL> SHOW PARAMETER ARCHIVE--查看归档路径是否已设置,为空值表示未设置
NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
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
TYPEVALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_8
string
log_archive_dest_9
string
log_archive_dest_state_1
stringenable
log_archive_dest_state_10
stringenable
log_archive_dest_state_2
stringenable
log_archive_dest_state_3
stringenable
log_archive_dest_state_4
stringenable
log_archive_dest_state_5
stringenable
log_archive_dest_state_6
stringenable
log_archive_dest_state_7
stringenable
log_archive_dest_state_8
stringenable
NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_9
stringenable
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
stringtrue
standby_archive_dest
string?/dbs/arch
SQL> alter system set log_archive_dest = '/u01/app/oracle/archivelog1' scope = spfile;
System altered.
SQL> alter system set log_archive_duplex_dest= '/u01/app/oracle/archivelog2' 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 /u01/app/oracle/archivelog1 --在指定的文件夹archivelog1已产生归档日志
total 18224
-rw------- 1 oracle oinstall 18636800 Jul 28 20:39 arch_1_26_724852763.arc
SQL> ho ls -l /u01/app/oracle/archivelog2 --在指定的文件夹archivelog2已产生归档日志
total 18224
-rw------- 1 oracle oinstall 18636800 Jul 28 20:39 arch_1_26_724852763.arc
SQL> ho mkdir /u01/app/oracle/archivelog3 --创建新的归档路径
SQL> ho mkdir /u01/app/oracle/archivelog4 --创建新的归档路径
SQL> alter system set log_archive_dest_1 = 'location=/u01/app/oracle/archivelog3'
2 scope = spfile;
System altered.
SQL>alter system set log_archive_dest_2 = 'location=/u01/app/oracle/archivelog4'
2 scope = spfile;
System altered.
SQL> shutdown immediate; --关闭实例
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
--启动实例后,收到错误提示表明两种归档方式不兼容
ORA-16019: cannot use LOG_ARCHIVE_DEST_1 with LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST
--关于上述设置导致的错误处理请参照:又一例SPFILE设置错误导致数据库无法启动
SPFILE错误导致数据库无法启动
--下面是正确的处理办法,应当先将一种归档方式路径置空,此处是将log_archive_dest置空
SQL> alter system set log_archive_dest = '' scope = spfile;
System altered.
--此处是将log_archive_duplex_dest置空
SQL> alter system set log_archive_duplex_dest = '' scope = spfile;
System altered.
--接下来再设定log_archive_dest_1,log_archive_dest_2
SQL> alter system set log_archive_dest_1 = 'location=/u01/app/oracle/archivelog3'
2 scope = spfile;
System altered.
SQL> alter system set log_archive_dest_2 = 'location=/u01/app/oracle/archivelog4'
2scope = spfile;
System altered.
--由于没有配置standby服务器,所以省略配置到远程主机
--设定完毕后需要重新启动实例,此时系统能正常启动,在此省略关闭启动信息
SQL> alter system archive log current;--进行手动归档
System altered.
SQL> ho ls -l /u01/app/oracle/archivelog3/ --查看归档日志
total 27752
-rw------- 1 oracle oinstall 28382208 Aug2 13:46 arc_1_38_724852763.arc
SQL> ho ls -l /u01/app/oracle/archivelog4/ --查看归档日志
total 27752
-rw------- 1 oracle oinstall 28382208 Aug2 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,2log_sequence,reopen_secs,transmit_mode,process3from v$archive_dest;--查看归档目的地的相关状态信息 DEST_NAME
STATUSARCHIVER DESTINATION
LOG_SEQUENCE REOPEN_SECS TRANSMIT_MOD PROCESS-------------------- --------- ---------- ------------------------------ ------------ ----------- ------------ -------LOG_ARCHIVE_DEST_1 VALID ARCH /u01/app/oracle/archivelog3/
38 300 SYNCHRONOUSARCHLOG_ARCHIVE_DEST_2 VALID ARCH /u01/app/oracle/archivelog4/
38 300 SYNCHRONOUSARCHLOG_ARCHIVE_DEST_3 INACTIVEARCH
0 0 SYNCHRONOUSARCH-----------------------------------------------------------------------------------------------------------------------
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
TYPEVALUE------------------------------------ ----------- ---------------log_archive_dest_state_1
stringenablelog_archive_dest_state_10
stringenablelog_archive_dest_state_2
stringDEFER --该路径显示为deferlog_archive_dest_state_3
stringenablelog_archive_dest_state_4
stringenablelog_archive_dest_state_5
stringenablelog_archive_dest_state_6
stringenablelog_archive_dest_state_7
stringenablelog_archive_dest_state_8
stringenablelog_archive_dest_state_9
stringenable
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 Aug2 13:46 arc_1_38_724852763.arc-rw------- 1 oracle oinstall1788416 Aug2 20:41 arc_1_39_724852763.arc-rw------- 1 oracle oinstall 30257664 Aug2 22:21 arc_1_40_724852763.arc-rw------- 1 oracle oinstall 30257664 Aug2 22:22 arc_1_41_724852763.arc-rw------- 1 oracle oinstall 30257664 Aug2 22:22 arc_1_42_724852763.arc-rw------- 1 oracle oinstall6647296 Aug2 22:23 arc_1_43_724852763.arc SQL> ho ls -l /u01/app/oracle/archivelog4;total 29504-rw------- 1 oracle oinstall 28382208 Aug2 13:45 arc_1_38_724852763.arc-rw------- 1 oracle oinstall1788416 Aug2 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 Aug2 13:46 arc_1_38_724852763.arc-rw------- 1 oracle oinstall1788416 Aug2 20:41 arc_1_39_724852763.arc-rw------- 1 oracle oinstall 30257664 Aug2 22:21 arc_1_40_724852763.arc-rw------- 1 oracle oinstall 30257664 Aug2 22:22 arc_1_41_724852763.arc-rw------- 1 oracle oinstall 30257664 Aug2 22:22 arc_1_42_724852763.arc-rw------- 1 oracle oinstall6647296 Aug2 22:23 arc_1_43_724852763.arc-rw------- 1 oracle oinstall81408 Aug2 22:25 arc_1_44_724852763.arc SQL> ho ls -l /u01/app/oracle/archivelog4;total 29588-rw------- 1 oracle oinstall 28382208 Aug2 13:45 arc_1_38_724852763.arc-rw------- 1 oracle oinstall1788416 Aug2 20:41 arc_1_39_724852763.arc-rw------- 1 oracle oinstall81408 Aug2 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> selectname,sequence#,registrar,standby_dest,archived,status
2from v$archived_log;
NAME
SEQUENCE# REGISTR STA ARC S------------------------------------------------------- ---------- ------- --- --- -/u01/app/oracle/archivelog4/arc_1_38_724852763.arc
38 FGRDNOYES A/u01/app/oracle/archivelog3/arc_1_39_724852763.arc
39 ARCHNOYES A/u01/app/oracle/archivelog4/arc_1_39_724852763.arc
39 ARCHNOYES A/u01/app/oracle/archivelog3/arc_1_40_724852763.arc
40 ARCHNOYES A/u01/app/oracle/archivelog3/arc_1_41_724852763.arc
41 ARCHNOYES A/u01/app/oracle/archivelog3/arc_1_42_724852763.arc
42 ARCHNOYES A/u01/app/oracle/archivelog3/arc_1_43_724852763.arc
43 ARCHNOYES A/u01/app/oracle/archivelog3/arc_1_44_724852763.arc
44 FGRDNOYES A/u01/app/oracle/archivelog4/arc_1_44_724852763.arc
44 FGRDNOYES A

回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
请问如何设定归档日志的大小?
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
W开怀Q 发表于 2013-9-24 10:34
请问如何设定归档日志的大小?

通常archive 是跟随redo 的大小, 不能说一样但自动生产的archive log 大小约差不多是redo 的大小
手动生产的archive 的大小就视当时switch redo log file 当下的size为定
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
s7eqs7eq 发表于 2013-9-24 10:53
通常archive 是跟随redo 的大小, 不能说一样但自动生产的archive log 大小约差不多是redo 的大小
手动 ...

谢谢。
回复

使用道具 举报

千问 | 2013-2-25 14:51:24 | 显示全部楼层
支持下!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行