現象:
建庫時忘了指定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.ora(spfile優先於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進行了指定配置
至此,救贖成功。