一、归档日志[archive log]

对日志组中的一个日志文件进行归档,如果该组其中一个损坏,则另一个可用的日志将会被归档

对于归档模式的日志切换,当日志归档完成后,下一个日志才能被覆盖或重新使用

自动归档功能如开启,则后台进程arcn 在日志切换时自动完成归档,否则需要手动归档

归档日志用途:恢复数据库,更新备用数据库,使用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)

演示非归档到归档模式:

SQL> ARCHIVE LOG LIST    — 查看数据库是否处于归档模式[No Archive Mode:表示在非归档模式;Archive Mode:表示在归档模式]

或 使用下面的的语句查询

SQL> SELECT log_mode FROM v$database;  — 查看数据库是否处于归档模式[参数同上]

SQL> SHUTDOWN IMMEDIATE;   — 一致性关闭数据库

SQL> STARTUP MOUNT;        — 启动到 mount 状态

SQL> ALTER DATABASE ARCHIVELOG;  — 切换到自动归档模式

SQL> ALTER DATABASE OPEN;    — 切换到 open状态

SQL> ARCHIVE LOG LIST;   — 再次查看数据库的归档状态

Database log modeArchive Mode# 归档模式

Automatic archival         Enabled     # 自动归档

SQL> show parameter archive;  # 归档日志存放位置

2.归档模式切换到非归档模式(步骤同非归档到归档模式仅仅是 c 步骤使用 alter database noarchivelog)

a.一致性关闭数据库(shutdown [immediate | transactional |normal])

b.启动到 mount 阶段(startup mount)

c.切换到归档模式(alter database noarchivelog )

d.切换到 open 阶段(alter database open)

3.手动归档[不建议使用,只做介绍]

手动归档时需要将日志模式切换为 alter database archivelog manual

再使用 alter system archive log current | all 实现归档

# 注意: 手动归档模式下不支持 stanby 数据库

4.归档进程的调整

通过设置 LOG_ARCHIVE_MAX_PROCESSES 参数,可以指定数据库规定所需初始化的进程数,缺省的归档进程数为2

一般情况下不需要修改该参数,Oracle 会根据归档情况自动启动额外的归档进程,也可以动态的增加或减少归档进程数,比如有些业务在月底需要进行大量归档,平时则归档较少,对此可以动态修改

修改方法

SQL> ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;

5.配置归档(两种归档位置配置方法)

a.归档到本机且少于等于两个归档位置[重启生效]

设置 LOG_ARCHIVE_DEST 和 LOG_ARCHIVE_DUPLEX_DEST 参数

SQL> alter system set log_archive_dest = ‘/u01/app/oracle/archivelog1’ scope = spfile;

SQL> alter system set log_archive_duplex_dest =’/u01/app/oracle/archivelog2′ scope = spfile;

b.归档到本机或远程主机

设置 LOG_ARCHIVE_DEST_n 参数,[location:表示本地; service:表示远程服务器]

SQL> alter system set log_archive_dest_1 =’LOCATION=/u01/app/oracle/archivelog3′;

SQL> alter system set log_archive_dest_2 =’SERVICE=远程网络服务名’;

# 注:对于远程归档位置,SERVICE 选项需要指定远程数据库的网络服务名(在tnsnames.ora 文件中配置)

LOG_ARCHIVE_DEST_n 的两个常用选项MANADATORY | OPTIONAL:

MANADATORY:表示归档必须成功复制到目的路径之后,联机重做日志才能被复用,OPTIONAL 正好相反

REOPEN:指定归档失败后指定间隔多少时间重试归案,缺省的为300秒

示例:

SQL> alter system set log_archive_dest_1 = 'LOCATION=/u01/app/oracle/archivelog3 manadatory reopen = 600'

SQL> alter system set log_archive_dest_2 = 'SERVICE=orcl manadatory reopen'

c.两种归档方法异同(前者 log_archive_dest、log_archive_duplex_dest ,后者log_archive_dest_n)

两者都可以归档到本机,后者可以归档到远程主机,前者不支持该功能

前者最多配置两个归档位置,后者可以配置多个归档位置

两者互不兼容,要么使用前者,要么使用后者

使用后者归档到本地时需要增加 LOCATION 选项,备份到远程主机需要使用SERVICE 选项

但上述两种方式未指定路径时,归档日志位于 db_recovery_file_dest 缺省为$ORACLE_BASE/flash_recovey_area[闪回区]

SQL> show parameter recover; # 可以查看闪回区的信息,查看大小,路径

视图:

V$RECOVERY_FILE_DEST : 闪回区存放位置

v$flash_recovery_area_usage : 闪回去使用情况

d.归档日志命名格式

设置 LOG_ARCHIVE_FORMAT 参数,Unix 下的缺省设置为LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf

%s: 日志序列号:

%S: 日志序列号(带有前导)

%t: 重做线程编号.

%T: 重做线程编号(带有前导)

%a: 活动 ID 号

%d: 数据库 ID 号

%r:RESETLOGS 的 ID 值.

SQL> 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)

SQL> alter system set log_archive_min_succeed_dest = 2; –缺省为1

联机重做日志组能够被覆盖的前提:

所有强制路径归档位置成功实现归档

归档目的地的成功归档的个数大于或等于上述参数设定的值

当强制个数大于该参数设定的个数,则以强制个数为准

当强制个数小于该参数设定的个数,则可选的成功归档路径加上强制的归档路径个数至少等于该参数设定值

g.控制归档的可用性(使用参数 log_archive_dest_state_n)

SQL> alter system set log_archive_dest_state_1 = enable | defer

# enable –>缺省状态,可以在该归档位置进行归档

defer –>禁用该归档位置

h.演示归档路径配置及查看归档进程,归档位置状态

SQL> ARCHIVE LOG LIST;# 查看日志是否处于归档状态

SQL> ho ps -ef | grep ora_arc  # 查看归档进程是否已启动

SQL> SHOW PARAMETER ARCHIVE  # 查看归档路径是否已设置,为空值表示未设置[show parameter log_archive]

SQL> alter system set log_archive_dest = ‘/u01/app/oracle/archivelog1’ scope = spfile;

SQL> alter system set log_archive_duplex_dest=’/u01/app/oracle/archivelog2′ scope=spfile;

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;   # 手动进行归档

SQL> ho ls -l /u01/app/oracle/archivelog1  # 在指定的文件夹archivelog1已产生归档日志

SQL> ho ls -l /u01/app/oracle/archivelog2  # 在指定的文件夹archivelog2已产生归档日志

#下面演示设置log_archive_dest_n等参数,需要将上面两个路径值置空,删除原目录下的归档日志

# 删除下面两条路径的值:

SQL> alter system set log_archive_dest = ” scope = spfile;

SQL> alter system set log_archive_duplex_dest = ” scope = spfile;

# 或者 使用如下方法,重置参数:

SQL> alter system reset log_archive_dest scope=spfile sid=’*’;

SQL> alter system reset log_archive_duplex_dest scope=spfile sid=’*’;

SQL> alter system set log_archive_dest_1 = ‘LOCATION=/u01/app/oracle/archivelog1’

SQL> alter system set log_archive_dest_2 = ‘LOCATION=/u01/app/oracle/archivelog2’

SQL> alter system set log_archive_dest_state_2 = defer;   # 停用

SQL> show parameter log_archive_dest_state

SQL> alter system archive log current;  # 手动归档

SQL> ho ls -l /u01/app/oracle/archivelog1; # 可以看出archivelog1下的文件比2多

SQL> ho ls -l /u01/app/oracle/archivelog2;

SQL> alter system set log_archive_dest_state_2 = enable; # 启用

SQL> alter system archive log current;  # 手动归档

SQL> ho ls -l /u01/app/oracle/archivelog1; # 再查看,两边日志都有了

SQL> ho ls -l /u01/app/oracle/archivelog2;

四、归档日志相关视图

v$archived_log --> 从控制文件中获得归档的相关信息

v$archive_dest --> 归档路径及状态

v$log_history --> 控制文件中日志的历史信息

v$database --> 查看数据库是否处于归档状态

v$archive_processes --> 归档相关的后台进程信息

v$bgprocess --> 所有后台进程信息


Author: Michael