oracle归档路径剖析及ORA-02097、ORA-16018的解决办法

在默认情况下,数据库日志模式切换到归档模式后,归档日志的存储路径并没有配置,oracle默认使用一个“快速恢复区”的存储位置,可以通过archive log list查看
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   18
Current log sequence           18

首先,oracle可以通过下列一组初始化参数指定两个归档路径
log_archive_dest
log_archive_duplex_dest
例如:
sql>alter system set log_archive_dest='/u01/arch';
sql>alter system set log_archive_duplex_dest='/u01/arch2';
除此之外,oracle还提供了另外一组初始化参数设置log_archive_dest_n(n=1~31),数据库归档时,可以最多产生31个相同的归档日志文件,保证这些归档日志文件的安全,不同的是,这组参数与上组不能同时使用,log_archive_dest_n指定的存储位置既可以是本地目录,也可以是一个ASM磁盘组,还可以是另一个数据库服务器,本地目录的格式为"location=本地目录",ASM磁盘组的指定格式为location=+磁盘组名称",例如location=+DATA(DATA是ASM磁盘组的名称),另外一个数据库服务器的指定格式为"service="服务名称"例如:
log_archive_dest_1="location=/u01/arch"
log_archive_dest_2="location=/u01/arch2"
log_archive_dest_3="service=backup"
另外oracle提供31个对应的初始化参数log_archive_dest_state_n 用于分别指定31个归档路径的状态,如果这些参数的值为enable,表明管理员希望数据库使用其位置,如果参数值为defer,则表明暂时不使用对应的归档位置。归档日志文件的名字不能重复,在命名中必须同时使用三个变量,即%S,%T,%R(%S代表重做日志组的sqluence的编号,总共10位,从左边补零;%T,代表重做日志组的thread编号,总共4位,%R代表数据库最近一次以resetlogs方式打开的时间戳,总共10位,左边补0,如果是小写则不补0)
例如:

sql>alter system set log_archive_format='ARC%S_%R.%T' SCOPE=SPFILE;

下面是更改log_archive_dest时报ORA-02097 ORA-16018错误的过程及解决办法:

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   18
Current log sequence           18

SQL> show parameter log_archive

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
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
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
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
log_archive_trace                    integer     0
SQL> alter system set log_archive_dest="/u01oracle/arch";
alter system set log_archive_dest="/u01oracle/arch"
*
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


SQL> show parameter pfile


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/oracle/app/oracle/product
                                                 /10.2.0/dbhome_1/dbs/spfilepro
                                                 d.ora
SQL> create pfile='/u01/init.ora' from spfile;
File created.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
[oracle@XXXX u01]$ vi /u01/init.ora
[oracle@XXXX u01]$ cat /u01/init.ora
prod.__db_cache_size=188743680
prod.__java_pool_size=4194304
prod.__large_pool_size=4194304
prod.__shared_pool_size=79691776
prod.__streams_pool_size=0
*.audit_file_dest='/u01/oracle/app/oracle/admin/prod/adump'
*.background_dump_dest='/u01/oracle/app/oracle/admin/prod/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/u01/oracle/app/oracle/oradata/prod/control01.ctl','/u01/oracle/app/oracle/oradata/prod/control02.ctl','/u01/oracle/app/oracle/oradata/prod/control03.ctl'
*.core_dump_dest='/u01/oracle/app/oracle/admin/prod/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='prod'
#*.db_recovery_file_dest='/u01/oracle/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=prodXDB)'
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=93323264
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=279969792
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/oracle/app/oracle/admin/prod/udump'
[oracle@XXXX u01]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Thu May 25 08:19:16 2017

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> create spfile from pfile='/u01/init.ora';

File created.

SQL> startup
ORACLE instance started.

Total System Global Area  281018368 bytes
Fixed Size                  2020192 bytes
Variable Size              88083616 bytes
Database Buffers          188743680 bytes
Redo Buffers                2170880 bytes
Database mounted.
Database opened.

SQL> alter system set log_archive_dest='/u01/arch';

System altered.

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/arch
Oldest online log sequence     14
Next log sequence to archive   18
Current log sequence           18
SQL> show parameter log_archive

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_config                   string
log_archive_dest                     string      /u01/arch
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
log_archive_dest_8                   string

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
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
log_archive_dest_state_9             string      enable


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
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
log_archive_trace                    integer     0
SQL>
请使用浏览器的分享功能分享到微信等