在Oracle 数据库的实际应用中,开启archivelog模式是必不可少的,但是在设置archivelog的过程中,可能因为不小心出现错误,导致数据库无法启动,本案例就是一种情况。
误操作现象:
设置archivelog name格式时,将archivelog的命名格式设置为archive_%s_%t.arc,修改系统配置文件成功,重启数据库使设置生效。但是异常发生了,数据库无法启动。
出错原因:
设置archivelog name格式时,匹配符%s,%t,%r是必须的。
%s 日志序列号。
%t 重做线程编号。
%r RESETLOGS的ID值。
因为在设置的时候没有符合匹配符%s,%t,%r都存在的要求,所以在数据库启动,加载参数文件时,这条设置无法验证通过,导致数据库无法启动。

1 SQL> alter system set log_archive_format="archive_%s_%t.arc" scope=spfile; 2 3 System altered. 4 5 SQL> shutdown immediate 6 Database closed. 7 Database dismounted. 8 ORACLE instance shut down. 9 SQL> startup mount 10 ORA-19905: log_archive_format must contain %s, %t and %r 11 SQL> alter system set log_archive_format="robt_%s_%t_%r.arc" scope=spfile; 12 alter system set log_archive_format="robt_%s_%t_%r.arc" scope=spfile 13 * 14 ERROR at line 1: 15 ORA-01034: ORACLE not available 16 Process ID: 0 17 Session ID: 153 Serial number: 7663
解决方案:
1.在spfile的同目录下,创建文件inite<instance name>.ora, 内容如下
根据spfile文件生成的。

1 *.audit_file_dest='D:pporacleadminepicdbadump' 2 *.audit_trail='db' 3 *.compatible='11.2.0.0.0' 4 *.control_files='F:*********CONTROL01.CTL','D:PPORACLEFAST_RECOVERY_AREA<instance name>CONTROL02.CTL' 5 *.db_block_size=8192 6 *.db_domain='' 7 *.db_name='epicdb' 8 *.db_recovery_file_dest_size=2147483648 9 *.db_recovery_file_dest='d:<instance name>FRA' 10 *.diagnostic_dest='D:pporacle' 11 *.dispatchers='(PROTOCOL=TCP) (SERVICE=epicdbXDB)' 12 *.job_queue_processes=1000 13 *.log_archive_dest_1='location=E:<instance name>archivelog' 14 *.log_archive_dest_10='location=use_db_recovery_file_dest' 15 *.log_archive_format='archive_%s_%t_%r.arc'在设置pfile的过程中修复archivelog设置 16 *.memory_target=854589440 17 *.open_cursors=300 18 *.processes=150 19 *.remote_login_passwordfile='EXCLUSIVE' 20 *.undo_tablespace='UNDOTBS3' 21 *.utl_file_dir='c:logminer'
2. PL/SQL中执行

1 SQL>startup nomount pfile=‘<pfile所在的路径>init<instance name>.ora’; 2 这里应该提示 3 ORACLE instance started.
3.通过pfile启动了数据库,通过pfile生成spfile

1 SQL> create spfile from pfile; 2 File created.
4.重启数据库

1 SQL> shutdown immediate 2 ORA-01507: database not mounted 3 ORACLE instance shut down. 4 SQL> startup 5 ORACLE instance started. 6 .... 7 Database mounted. 8 Database opened.
总结:
找到问题出现的根本原因,是解决问题的要点。本案例的现象就是数据库无法加载spfile文件,导致无法正常启动,archivelog的设置错误是问题的导火索。先要让数据库启动才能重新设置archivelog,根据这个思路,重建pfile,在重建的过程中将archivelog的设置修改正确,启动数据库,根据pfile生成spfile,之后重启数据库。