学无止境
分类: Oracle
2013-08-26 10:00:22
今天在某客户的RAC数据库(10.2.0.5.9,AIX 5308)上遇到一个spfile在裸设备上无法正常启动的问题。
RAC数据库,每个节点上都有一个init$SID.ora的pfile,该pfile中只有1条参数信息:
spfile='裸设备位置'
正常情况下,使用sqlplus "/as sysdba"登录到数据库实例,使用startup命令启动数据库实例。
初次启动数据库实例没有问题,但是修改了关于SGA的参数,比如db_cache_size,shared_pool_size到spfile中,再次启动就会报错。
SQL> alter system set db_cache_size=350m scope=spfile;
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-01078: failure in processing system parameters
ORA-00600: internal error code, arguments: [kspgzp1], [101], [489], [1], [db_cache_size], [], [], []
trace中信息:
Error when reading init.ora parameter
Check syntax in init.ora file
Also your SRV image may need relinking
*** 2013-08-23 12:50:51.147
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [kspgzp1], [101], [489], [1], [db_cache_size], [], [], []
Current SQL information unavailable - no SGA.
去掉spfile中的db_cache_size设置,再次启动报错:
ORA-00600: internal error code, arguments: [ksmcsdxchk_1], [101], [], [], [], [], [], []
在该报错情况下,使用以下2种方式启动数据库实例均正常:
startup pfile='$ORACLE_HOME/dbs/initSID.ora';
srvctl start instance -d xxx -i yyy
如果将spfile建立在本地目录下,使用startup命令启动正常。
怀疑是裸设备存在问题。
更换其他存储建立的vg,再建立lv用于的spfile,问题依旧。
也尝试了使用dd方式,问题依旧。
对sqlplus进程truss跟踪,也未发现有效信息。
怀疑是否PSU补丁安装有异常,将PSU补丁rollback,并且做了relink all
均未解决该问题。
最后怀疑是环境变量设置有误,将系统中非必须的环境变量全部去掉,只保留ORACLE_HOME,LIBPATH等。
使用startup方式启动正常。
逐个检查环境变量,最后发现,当设置NLS_SORT环境变量,启动存在问题。
原本该环境变量设置如下:
export NLS_SORT=SCHINESE_PINYIN_M
检查该数据库字符集为AL32UTF8,国际字符集为AL16UTF16,该字符集支持拼音排序。
select VALUE from V$NLS_VALID_VALUES where PARAMETER ='SORT' and ISDEPRECATED = 'FALSE' order by VALUE
VALUE
----------------------------------------------------------------
SCHINESE_PINYIN_M
最后小结一下:
spfile使用裸设备,设置了NLS_SORT环境变量,修改db_cache_size参数到spfile,再次用startup命令启动存在异常。
在什么都不修改的情况下:
使用srvctl命令启动没问题
startup pfile='$ORACLE_HOME/dbs/initSID.ora'; 也没问题
unset NLS_SORT后,再次用startup启动正常。
目前仍未找到为什么会出现这种现象的具体原因。