ORA-16019: cannot use LOG_ARCHIVE_DEST_1在ASM下的救贖

現象:

建庫時忘了指定archivelog的位置,以及LOG_ARCHIVE_DEST,LOG_ARCHIVE_DEST_n,和DB_RECOVERY_FILE_DEST,oracle會自動地指向dbcreate的location,就是+DG1,爲了方便管理,想將其重定向到/u99f,輸入了下列命令:

SQL> alter system set log_archive_dest='/u99f' scope=both;
alter system set log_archive_dest='/u99f' scope=both
*
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

oracle已經提示了錯誤,可還是一根筋地輸入:

SQL> alter system set log_archive_dest='/u99f' scope=spfile;
System altered.

重新啓動實例,失敗了。

原因:

og_archive_dest與log_archive_dest_n這兩個參數是不能夠同時設置值、共存的。

Cause: One of the following events caused an incompatibility: 1) Parameter LOG_
ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST was in use when the
specified LOG_ARCHIVE_DEST_n (n = 1...31) or DB_RECOVERY_FILE_DEST
parameter was encountered while fetching initialization parameters. 2) Parameter
LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST was in use when an
attempt was made to use an ALTER SYSTEM or ALTER SESSION command to
define a value for the specified LOG_ARCHIVE_DEST_n or DB_RECOVERY_
FILE_DEST parameter. 3) An ALTER SYSTEM ARCHIVE LOG START TO
command was in effect when the specified LOG_ARCHIVE_DEST_n parameter
was encountered while fetching initialization parameters. 4) An ALTER SYSTEM
ARCHIVE LOG START TO command was in effect when an attempt was made to
use an ALTER SYSTEM or ALTER SESSION command to define a value for the
specified LOG_ARCHIVE_DEST_n parameter.

解決:

oracle:Action: Eliminate any incompatible parameter definitions.等於沒說。

查看spfile:[ora10g][/u01/app/oracle/product/10.2.0/db_1/dbs]$more initsales.ora
SPFILE='+DG1/sales/spfilesales.ora'

$>sqlplus /nolog

SQL> conn sys/oracle as sysdba
Connected to an idle instance.

注意:在“已連接到空閒例程”的狀態下,是可以create pfile from spfile的,這點以後注意,以idle的方式連進數據庫的時候就已經可以讀到spfile的“內容”了,你可以"create pfile from spfile"給弄出來。

SQL>create pfile='/tmp/pfile' from SPFILE='+DG1/sales/spfilesales.ora';

File created

看一下pfile:

。。。。

*.job_queue_processes=10
*.log_archive_dest_1='LOCATION=+DG1/'
*.log_archive_dest_1='/u99f'
*.log_archive_format='%t_%s_%r.dbf'

。。。。

粗體表示衝突。

改成:

*.job_queue_processes=10
*.log_archive_dest_1='LOCATION=+DG1/'
*.log_archive_dest=''
*.log_archive_format='%t_%s_%r.dbf'


SQL> startup pfile='/tmp/wtpfile';
ORACLE instance started.

Total System Global Area  381681664 bytes
Fixed Size                  1273828 bytes
Variable Size             113246236 bytes
Database Buffers          264241152 bytes
Redo Buffers                2920448 bytes
Database mounted.
Database opened.
現在instance可以啓動了。

將spfile改回原狀:

SQL> create spfile='+DG1/sales/spfilesales.ora' from pfile='/tmp/wtpfile';
File created.

關閉實例
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

注意:現在是以pfile啓動,這時initsales.ora已經不是原來的那一行:

SPFILE='+DG1/sales/spfilesales.ora'

而變成:

[ora10g][/u01/app/oracle/product/10.2.0/db_1/dbs]$more initsales.ora
sales.__db_cache_size=264241152
sales.__java_pool_size=4194304
sales.__large_pool_size=4194304
sales.__shared_pool_size=104857600
sales.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/sales/adump'
*.background_dump_dest='/u01/app/oracle/admin/sales/bdump'
*.compatible='10.2.0.5.0'
*.control_files='+DG1/sales/controlfile/current.273.770052071'
*.core_dump_dest='/u01/app/oracle/admin/sales/cdump'
*.db_block_size=8192
*.db_create_file_dest='+DG1'
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='sales'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=salesXDB)'
*.job_queue_processes=10
*.log_archive_dest_1='LOCATION=+DG1/'
*.log_archive_dest='/u99f'
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=300
*.pga_aggregate_target=126877696
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=381681664
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/sales/udump'
 

如果此時重新啓動實例,還是會有報錯信息:

sql>startup

ORA-16019: cannot use LOG_ARCHIVE_DEST_1 with LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST

 這是因爲上次啓動是用pfile啓動的,那麼本次啓動還是會用pfile,由於startup是沒指定路徑,還是會自動去找上面的initsales.ora。

注意:oracle實例啓動查找文件的順序是 spfileSID.ora-spfile.ora-initSID.ora-init.oraspfile優先於pfile)。

重新更改initsales.ora:

[ora10g][/u01/app/oracle/product/10.2.0/db_1/dbs]$vi initsales.ora

加入:

SPFILE='+DG1/sales/spfilesales.ora',save,重啓instance成功。

查看是否是以spfile啓動:

SQL>  Select isspecified,count(*) from v$spparameter group by isspecified;

ISSPECIFIED    COUNT(*)
------------ ----------
TRUE                 23
FALSE               237

如果isspecified裏有true,表明用spfile進行了指定配置

 

至此,救贖成功。


 

 

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章