ITPub博客

首页 > 数据库 > Oracle > 【Oracle】归档日志管理-设置归档日志路径以及归档日志冗余

【Oracle】归档日志管理-设置归档日志路径以及归档日志冗余

原创 Oracle 作者:neverinit 时间:2018-12-18 19:46:59 0 删除 编辑

一般情况下,数据库安装时选择的是默认NOARCHIVELOG模式。如果要开启ARCHIVELOG模式,则需要为归档日志路径设置初始化参数。

归档日志路径可以配置一个也可以配置多个。路径可以是本地路径,如本地文件系统,ASM磁盘组;也可以是远程路径,如备份数据库。设置多个归档日志路径,可以对归档日志做冗余,即使有一个目标盘损坏,也可以保证归档日志是可用的。

在配置参数时,归档日志的路径可以动态修改,在下一次日志切换的时候生效。

这里给出 3种常用的归档路径的设置方案:单一归档路径方案、两路归档路径方案和多路归档路径的方案。

方案 1:单一归档路径

如果只设置单一的归档目录,默认使用 db_recovery_file_dest参数,使用 Fast Recovery Area存放归档数据;也可手工 配置 log_archive_dest初始化参数,可以配置为本地文件系统,ASM磁盘组 。使用 log_archive_dest_n参数的方法在第三种方案进行讨论。

具体操作如下:

--如果使用fast recovery area存放归档日志,需要注意该区域有大小限制,建议将大小调大
SYS@cams> show parameter db_recovery_file_dest
 
NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest       string  /u01/app/oracle/fast_recovery_
 area
db_recovery_file_dest_size      big integer 4182M
SYS@cams> alter system set db_recovery_file_dest_size=10G;             
 
System altered.
 
SYS@cams> show parameter db_recovery_file_dest
 
NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest       string  /u01/app/oracle/fast_recovery_
 area
db_recovery_file_dest_size      big integer 10G
--如果使用本地路径存放归档日志,需要将db_recovery_file_dest参数置空,然后设置log_archive_dest参数。这里给出的是本地文件系统例子,读者可自行测试ASM磁盘组。
SYS@cams> alter system set db_recovery_file_dest='';
 
System altered.
 
SYS@cams> alter system set log_archive_dest='/u01/app/oracle/archive';
 
System altered.

需要将LOG_ARCHIVE_DEST_n和DB_RECOVERY_FILE_DEST参数置空,以免出现如下问题:

SYS@cams> alter system set log_archive_dest='LOCATION=USE_DB_RECOVERY_FILE_DEST';
alter system set log_archive_dest='LOCATION=USE_DB_RECOVERY_FILE_DEST'
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16018: cannot use LOG_ARCHIVE_DEST with LOG_ARCHIVE_DEST_n or
DB_RECOVERY_FILE_DEST

此时,可以看到trace日志的变化,LOG_ARCHIVE_DEST_1的默认值自动调整过程。其中,在使用Fast Recovery Area归档的情况下,LOG_ARCHIVE_DEST_1的默认值为USE_DB_RECOVERY_FILE_DEST。

Tue Dec 18 17:48:24 2018
ALTER SYSTEM SET db_recovery_file_dest_size='10G' SCOPE=BOTH;
Tue Dec 18 17:52:13 2018
Cleared LOG_ARCHIVE_DEST_1 parameter default value
Using LOG_ARCHIVE_DEST_1 parameter default value as /u01/app/oracle/product/11.2.0/db_1/dbs/arch
ALTER SYSTEM SET db_recovery_file_dest='' SCOPE=BOTH;
Tue Dec 18 17:52:28 2018
ALTER SYSTEM SET log_archive_dest='/u01/app/oracle/archive' SCOPE=BOTH;
--首先创建新的归档路径
[oracle@XLJ181 trace]$ mkdir -p /u01/app/oracle/archive
--此时对日志进行切换,触发写归档日志
SYS@cams> alter system switch logfile;
System altered.
--查看新生成的归档日志
[oracle@XLJ181 trace]$ ll /u01/app/oracle/archive
total 11960
-rw-r----- 1 oracle oinstall 12244992 Dec 18 17:57 1_25_994950965.dbf

trace日志中也可以看到LGWR switch操作

Tue Dec 18 17:57:10 2018
Thread 1 cannot allocate new log, sequence 26
Private strand flush not complete
  Current log# 1 seq# 25 mem# 0: /u01/app/oracle/oradata/cams/redo01.log
Thread 1 advanced to log sequence 26 (LGWR switch)
  Current log# 2 seq# 26 mem# 0: /u01/app/oracle/oradata/cams/redo02.log
Tue Dec 18 17:57:10 2018
Archived Log entry 20 added for thread 1 sequence 25 ID 0x9e3b45f3 dest 1:

方案 2:两路归档路径

如果要设置两路归档路径,常用的方案是配置 log_archive_dest和log_archive_duplex_dest参数。 log_archive_dest_n参数的方法在第三种方案进行讨论。

具体操作如下:

--创建新的归档路径
[oracle@XLJ181 trace]$ mkdir -p /u01/app/oracle/archive1
--设置log_archive_duplex_dest参数路径并切换日志触发写归档日志
SYS@cams> alter system set log_archive_duplex_dest='/u01/app/oracle/archive1';
 
System altered.
 
SYS@cams> alter system switch logfile;
 
System altered.
--查看新生成的归档日志文件,显然新生成的归档大小和文件名一致。两份归档日志互为冗余。
[oracle@XLJ181 trace]$ ll /u01/app/oracle/archive
total 15704
-rw-r----- 1 oracle oinstall 12244992 Dec 18 17:57 1_25_994950965.dbf
-rw-r----- 1 oracle oinstall  3830272 Dec 18 18:30 1_26_994950965.dbf
[oracle@XLJ181 trace]$ ll /u01/app/oracle/archive1
total 3744
-rw-r----- 1 oracle oinstall 3830272 Dec 18 18:30 1_26_994950965.dbf

查看trace日志,可以看到LGWR switch操作,然后分别在两个目录下写归档。

Tue Dec 18 18:30:01 2018
Thread 1 cannot allocate new log, sequence 27
Private strand flush not complete
  Current log# 2 seq# 26 mem# 0: /u01/app/oracle/oradata/cams/redo02.log
Thread 1 advanced to log sequence 27 (LGWR switch)
  Current log# 3 seq# 27 mem# 0: /u01/app/oracle/oradata/cams/redo03.log
Tue Dec 18 18:30:02 2018
Archived Log entry 21 added for thread 1 sequence 26 ID 0x9e3b45f3 dest 1:
Archived Log entry 22 added for thread 1 sequence 26 ID 0x9e3b45f3 dest 2:

方案 3:多路归档路径

如果要设置多路归档路径,需要使用log_archive_dest_n参数,其中,n的取值为1到31的整数,也就是说,可以指定1到31个独立的路径作为归档日志的路径。

  log_archive_dest_n参数的取值可以选择LOCATION或SERVIDE关键字。如果使用LOCATION关键字,可以选择本地文件系统、ASM磁盘组或USE_DB_RECOVERY_FILE_DEST代表的闪回恢复区;如果使用SERVICE关键字,可以选择备库的网络连接标识符连接备份数据库。

具体操作如下:

--创建本地归档目录
[oracle@XLJ181 admin]$ mkdir -p /u01/app/oracle/archive2
[oracle@XLJ181 admin]$ mkdir -p /u01/app/oracle/archive3
--配置log_archive_dest_n参数
SYS@cams> alter system set log_archive_duplex_dest='';
 
System altered.
 
SYS@cams> alter system set log_archive_dest='';
 
System altered.
 
SYS@cams> alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST';
 
System altered.
 
SYS@cams> alter system set log_archive_dest_2='LOCATION=/u01/app/oracle/archive2';
 
System altered.
 
SYS@cams> alter system set log_archive_dest_3='LOCATION=/u01/app/oracle/archive3';
 
System altered.

需要注意置空的顺序,以免出现如下错误

SYS@cams> alter system set log_archive_dest='';
alter system set log_archive_dest=''
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16022: LOG_ARCHIVE_DEST cannot be NULL because LOG_ARCHIVE_DUPLEX_DEST is
non-NULL

需要将LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST参数置空,以免出现如下问题:

SYS@cams> alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST';
alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST'
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16019: cannot use LOG_ARCHIVE_DEST_1 with LOG_ARCHIVE_DEST or
LOG_ARCHIVE_DUPLEX_DEST
--切换日志,触发写归档日志
SYS@cams> alter system switch logfile;
 
System altered.

查看新生成的归档日志文件,显然新生成的归档大小和文件名一致。两份归档日志互为冗余。

[oracle@XLJ181 admin]$ ll /u01/app/oracle/archive2
total 5440
-rw-r----- 1 oracle oinstall 4416512 Dec 18 19:09 1_27_994950965.dbf
-rw-r----- 1 oracle oinstall 1148416 Dec 18 19:23 1_28_994950965.dbf
[oracle@XLJ181 admin]$ ll /u01/app/oracle/archive3
total 5440
-rw-r----- 1 oracle oinstall 4416512 Dec 18 19:09 1_27_994950965.dbf
-rw-r----- 1 oracle oinstall 1148416 Dec 18 19:23 1_28_994950965.dbf

查看trace日志,看到错误提示,提示DB_RECOVERY_FILE_DEST未设置值

Tue Dec 18 19:23:59 2018
Errors in file /u01/app/oracle/diag/rdbms/cams/cams/trace/cams_arc3_29341.trc:
ORA-19801: initialization parameter DB_RECOVERY_FILE_DEST is not set
Errors in file /u01/app/oracle/diag/rdbms/cams/cams/trace/cams_arc3_29341.trc:
ORA-16032: parameter LOG_ARCHIVE_DEST_1 destination string cannot be translated
ORA-19801: initialization parameter DB_RECOVERY_FILE_DEST is not set
Archived Log entry 25 added for thread 1 sequence 28 ID 0x9e3b45f3 dest 2:
Archived Log entry 26 added for thread 1 sequence 28 ID 0x9e3b45f3 dest 3:

为DB_RECOVERY_FILE_DEST参数配置数值,切换日志

SYS@cams> alter system set DB_RECOVERY_FILE_DEST='/u01/app/oracle/fast_recovery_area';              
 
System altered.
 
SYS@cams> alter system switch logfile;
 
System altered.
 
SYS@cams> alter system switch logfile;
 
System altered.

查看trace日志信息,最后可看到同时写入了3个归档路径

Tue Dec 18 19:27:58 2018
**********************************************************
WARNING: Files may exists in db_recovery_file_dest
that are not known to the database. Use the RMAN command
CATALOG RECOVERY AREA to re-catalog any such files.
If files cannot be cataloged, then manually delete them
using OS command.
One of the following events caused this:
1. A backup controlfile was restored.
2. A standby controlfile was restored.
3. The controlfile was re-created.
4. db_recovery_file_dest had previously been enabled and
   then disabled.
**********************************************************
ALTER SYSTEM SET db_recovery_file_dest='/u01/app/oracle/fast_recovery_area' SCOPE=BOTH;
Tue Dec 18 19:27:58 2018
db_recovery_file_dest_size of 10240 MB is 5.63% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
Tue Dec 18 19:28:01 2018
Thread 1 cannot allocate new log, sequence 30
Private strand flush not complete
  Current log# 2 seq# 29 mem# 0: /u01/app/oracle/oradata/cams/redo02.log
Thread 1 advanced to log sequence 30 (LGWR switch)
  Current log# 3 seq# 30 mem# 0: /u01/app/oracle/oradata/cams/redo03.log
Tue Dec 18 19:28:01 2018
Archived Log entry 27 added for thread 1 sequence 29 ID 0x9e3b45f3 dest 2:
Archived Log entry 28 added for thread 1 sequence 29 ID 0x9e3b45f3 dest 3:
Tue Dec 18 19:33:38 2018
Thread 1 cannot allocate new log, sequence 31
Private strand flush not complete
  Current log# 3 seq# 30 mem# 0: /u01/app/oracle/oradata/cams/redo03.log
Thread 1 advanced to log sequence 31 (LGWR switch)
  Current log# 1 seq# 31 mem# 0: /u01/app/oracle/oradata/cams/redo01.log
Tue Dec 18 19:33:39 2018
Expanded controlfile section 11 from 28 to 62 records
Requested to grow by 34 records; added 2 blocks of records
Archived Log entry 29 added for thread 1 sequence 30 ID 0x9e3b45f3 dest 1:
Archived Log entry 30 added for thread 1 sequence 30 ID 0x9e3b45f3 dest 2:
Archived Log entry 31 added for thread 1 sequence 30 ID 0x9e3b45f3 dest 3:


本文尚未对ASM磁盘组以及service网络连接备库的模式进行测试,感兴趣的读者可以自行搭建数据库环境测试。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31394774/viewspace-2285656/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
技术爱好者,自学Oracle并拿下OCM,参与某金融系统的需求、开发、测试、上线、运维全流程,在此学习技术,分享知识。微信公众号“IT技术佳肴”,有干货,有扯皮……

注册时间:2016-09-15

  • 博文量
    68
  • 访问量
    211406