log_archive_dest_n 和log_archive_dest和 log_archive_duplex_dest

本文详细解析了Oracle数据库中归档日志配置参数LOG_ARCHIVE_DEST_n、log_archive_dest和log_archive_duplex_dest的区别及使用注意事项。通过实验演示如何正确配置这些参数,并解决了参数冲突等问题。

转自:http://blog.chinaunix.net/uid-11570547-id-59115.html

log_archive_dest_n 和log_archive_dest和 log_archive_duplex_dest

1、
LOG_ARCHIVE_DEST_n这个参数应该是在9i之后引入的一个参数,Oracle之所以引入这个参数我认为是有以下几点:

1、为了多引入一些归档日志的存放位置。其中n为1-10(10g)

For Enterprise Edition users, this parameter has been deprecated in favor of the LOG_ARCHIVE_DEST_n parameters. 
If Oracle Enterprise Edition is not installed or it is installed, 
but you have not specified any LOG_ARCHIVE_DEST_n parameters, this parameter is valid.

2、
从上面可以看到log_archive_dest和 log_archive_duplex_dest是被LOG_ARCHIVE_DEST_n参数替代的。两者有区别:

其中log_archive_dest和 log_archive_duplex_dest只能指定本地的主机位置,而LOG_ARCHIVE_DEST_n参数可以是本地也可一是远端。

所以这里只是指定归档日志存放位置的参数而已,不是两种备份方法。

你上面遇见的问题是:
因为这两个参数是互斥的,Oracle之所以保留log_archive_dest和 log_archive_duplex_dest是为了保证向后的兼容。
而你是将LOG_ARCHIVE_DEST_n 参数设置为一个NULL,这个也是Oracle不允许的
见下面的官方文档:

LOG_ARCHIVE_DEST is applicable only if you are running the database in ARCHIVELOG mode or are recovering a database from archived redo logs. LOG_ARCHIVE_DEST is incompatible with the LOG_ARCHIVE_DEST_n parameters, and must be defined as the null string ("") or (' ') when any LOG_ARCHIVE_DEST_n parameter has a value other than a null string. Use a text string to specify the default location and root of the disk file or tape device when archiving redo log files. (Archiving to tape is not supported on all operating systems.) The value cannot be a raw partition.

其中:
and must be defined as the null string ("") or (' ') when any LOG_ARCHIVE_DEST_n parameter has a value other than a null string.
就是这个意思:


这是以下我做的试验:
SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for 32-bit Windows: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production

SQL> show parameter LOG_ARCHIVE_DEST_1

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string
log_archive_dest_10 string


SQL> show parameter log_archive_dest_1

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string LOCATION=c:appkb
log_archive_dest_10 string

--安装你的要求设置为NULL

SQL> alter system set LOG_ARCHIVE_DEST_1='';

系统已更改。


SQL> show parameter log_archive_dest_1

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string
log_archive_dest_10 string


SQL> show parameter log_archive_dest_1

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string
log_archive_dest_10 string
SQL> alter system set LOG_ARCHIVE_DEST='c:app';
alter system set LOG_ARCHIVE_DEST='c:app'
*
第 1 行出现错误:
ORA-02097: 无法修改参数, 因为指定的值无效
ORA-16018: 无法将 LOG_ARCHIVE_DEST 与 LOG_ARCHIVE_DEST_n 或
DB_RECOVERY_FILE_DEST 一起使用

也会出现错误;

解决的方式:

SQL> alter system reset log_archive_dest_1 sid='orcl';

系统已更改。
这样就可以将这个参数清除,重启就可以修改 了

SQL> alter system reset DB_RECOVERY_FILE_DEST;

系统已更改。

SQL> alter system set log_archive_dest='c:app';
alter system set log_archive_dest='c:app'
*
第 1 行出现错误:
ORA-02097: 无法修改参数, 因为指定的值无效
ORA-16018: 无法将 LOG_ARCHIVE_DEST 与 LOG_ARCHIVE_DEST_n 或
DB_RECOVERY_FILE_DEST 一起使用


SQL> alter system set log_archive_dest='c:app' scope=spfile;

系统已更改。

SQL> create pfile from spfile;

文件已创建。


这时候就可以使用log_archive_dest参数了,不过不建议使用。

SQL> show parameter log_archive_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest string c:app
log_archive_dest_1 string


ps

ORA-16018: cannot use string with LOG_ARCHIVE_DEST_n or DB_RECOVERY_FILE_DEST 
Cause: One of the following events caused an incompatibility: 1) Parameter LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST was in use when a LOG_ARCHIVE_DEST_n (n = 1...10) parameter was encountered while fetching initialization parameters. 2) An ALTER SYSTEM ARCHIVE LOG START TO command was in effect when a LOG_ARCHIVE_DEST_n parameter was encountered while fetching initialization parameters. 3) A LOG_ARCHIVE_DEST_n parameter was in use when an ALTER SYSTEM command was used to define a value for either the LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST parameter. 4) Parameter DB_RECOVERY_FILE_DEST was in use when an attempt was made to use an ALTER SYSTEM or ALTER SESSION command to define a value for LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST.
Action: Eliminate any incompatible parameter definitions.

<think>我们正在处理关于Oracle数据库参数修改的问题。用户询问修改LOG_ARCHIVE_DEST_2参数后是否需要重启数据库。 根据Oracle官方文档常见实践,修改LOG_ARCHIVE_DEST_n参数(包括LOG_ARCHIVE_DEST_2)的行为取决于修改的方式当前数据库的状态。 关键点: 1. 使用`ALTER SYSTEM`命令修改参数时,可以通过`SCOPE`子句指定修改的生效范围。 2. `SCOPE`有三个可选值:MEMORY(仅内存)、SPFILE(仅修改spfile)、BOTH(同时修改内存spfile)。 具体到LOG_ARCHIVE_DEST_2参数: - 该参数是一个动态参数,意味着在数据库运行期间可以修改而不需要重启数据库。 - 但是,修改该参数后,归档进程(ARCn)会立即根据新的设置进行归档操作,所以修改后立即生效。 然而,需要注意以下几点: a) 如果使用`SCOPE=MEMORY`,则修改仅对当前实例有效,数据库重启后将丢失。 b) 如果使用`SCOPE=SPFILE`,则修改只写入spfile,下次重启生效,当前不生效。 c) 如果使用`SCOPE=BOTH`,则修改同时写入spfile并立即生效,这是最常用的方式。 因此,通常情况下,我们使用以下命令修改LOG_ARCHIVE_DEST_2参数,无需重启数据库: ```sql ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='LOCATION=/path/to/archive' SCOPE=BOTH; ``` 但是,根据引用[2]中的错误信息,我们注意到一个相关的问题:当同时设置了LOG_ARCHIVE_DEST(或LOG_ARCHIVE_DUPLEX_DESTLOG_ARCHIVE_DEST_n时,会产生冲突(ORA-16019)。这是因为这些参数是互斥的。在设置LOG_ARCHIVE_DEST_n之前,必须确保LOG_ARCHIVE_DESTLOG_ARCHIVE_DUPLEX_DEST为空。 因此,在修改LOG_ARCHIVE_DEST_2之前,需要检查并清空冲突的参数: 1. 检查当前是否有冲突参数设置: ```sql SHOW PARAMETER LOG_ARCHIVE_DEST; SHOW PARAMETER LOG_ARCHIVE_DUPLEX_DEST; ``` 2. 如果这些参数有值,需要先将它们清空(同样使用ALTER SYSTEM命令): ```sql ALTER SYSTEM SET LOG_ARCHIVE_DEST='' SCOPE=BOTH; ALTER SYSTEM SET LOG_ARCHIVE_DUPLEX_DEST='' SCOPE=BOTH; ``` 3. 然后再设置LOG_ARCHIVE_DEST_2。 另外,引用[3]提到:db_recovery_file_destlog_archive_dest_n是兼容的,并且当未指定log_archive_dest_n时,归档默认指向db_recovery_file_dest(快速恢复区)。但是,如果设置了log_archive_dest_n,则归档目录将指向log_archive_dest_n指定的目录。 结论: 修改LOG_ARCHIVE_DEST_2参数不需要重启数据库,但需要注意: - 使用`SCOPE=BOTH`使其立即生效并永久保存。 - 确保没有设置冲突的参数(LOG_ARCHIVE_DESTLOG_ARCHIVE_DUPLEX_DEST)。 如果遇到ORA-16019错误,则需要先清除冲突参数。 操作步骤示例: 1. 检查冲突参数并清除(如果有): ```sql -- 检查 SELECT name, value FROM v$parameter WHERE name IN ('log_archive_dest','log_archive_duplex_dest'); -- 清除(如果非空) ALTER SYSTEM SET log_archive_dest='' SCOPE=BOTH; ALTER SYSTEM SET log_archive_duplex_dest='' SCOPE=BOTH; ``` 2. 设置LOG_ARCHIVE_DEST_2: ```sql ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='LOCATION=/new/archive/path' SCOPE=BOTH; ``` 3. 验证修改: ```sql SHOW PARAMETER LOG_ARCHIVE_DEST_2; ``` 注意:在清除冲突参数之前,确保数据库的归档设置不会因此中断。通常,我们使用LOG_ARCHIVE_DEST_n(n=1到31)来替代旧的参数。 最后,如果数据库因为参数问题无法启动(如引用[1]的情况),则需要通过pfile修改,然后重新创建spfile。但本问题中用户只是修改参数,且数据库处于运行状态,所以按照上述步骤操作即可。 因此,回答用户的问题:修改LOG_ARCHIVE_DEST_2参数不需要重启数据库,通过ALTER SYSTEM SET ... SCOPE=BOTH即可立即生效并永久保存。</think>### 修改 Oracle LOG_ARCHIVE_DEST_2 参数是否需要重启数据库? **不需要重启数据库**,但需要满足特定条件。以下是详细说明: #### ✅ 无需重启的条件(推荐方式) ```sql -- 正确修改方式(SCOPE=BOTH) ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='LOCATION=/new/path' SCOPE=BOTH; ``` 1. **动态参数**:`LOG_ARCHIVE_DEST_2` 是动态参数 2. **立即生效**:使用 `SCOPE=BOTH` 会同时: - 修改内存中的参数值(立即生效) - 更新服务器参数文件(SPFILE)永久保存 3. **验证命令**: ```sql SHOW PARAMETER LOG_ARCHIVE_DEST_2; ``` #### ⚠️ 需要重启的情况(应避免) ```sql -- 错误修改方式(SCOPE=SPFILE) ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='...' SCOPE=SPFILE; ``` 1. **仅修改SPFILE**:参数不会立即生效 2. **必须重启**:需执行 `SHUTDOWN IMMEDIATE` + `STARTUP` #### 🔧 关键配置冲突解决(引用[1][2]) 当出现 **ORA-16019** 错误时: ```sql -- 步骤1:清空冲突参数 ALTER SYSTEM SET LOG_ARCHIVE_DEST='' SCOPE=BOTH; ALTER SYSTEM SET LOG_ARCHIVE_DUPLEX_DEST='' SCOPE=BOTH; -- 步骤2:设置新路径 ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='LOCATION=/arch/new_path' SCOPE=BOTH; ``` > 📌 原因:Oracle 不允许同时使用新旧归档参数(引用[3]) #### 🌐 与 FRA 的关系(引用[3]) ```sql -- 当未指定LOG_ARCHIVE_DEST_n时 ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/fra_path' SCOPE=BOTH; ``` 1. 兼容性:`LOG_ARCHIVE_DEST_n` 与 `DB_RECOVERY_FILE_DEST` 可共存 2. 优先级:设置 `LOG_ARCHIVE_DEST_n` 会覆盖 FRA 的归档路径 #### 📊 参数修改类型对比 | 参数类型 | SCOPE=BOTH | SCOPE=SPFILE | 是否需要重启 | |---------|------------|--------------|-------------| | 动态参数 | ✅ 立即生效 | ❌ 不生效 | 否 | | 静态参数 | ❌ 禁止操作 | ✅ 可修改 | 是 | > 💡 **最佳实践**: > 1. 始终使用 `SCOPE=BOTH` 修改归档参数 > 2. 修改后执行日志切换验证: > ```sql > ALTER SYSTEM SWITCH LOGFILE; > ``` > 3. 检查归档状态: > ```sql > SELECT dest_id, destination, status FROM v$archive_dest WHERE dest_id=2; > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值