数据库:oracle 19.3
环境:linux系统+ 2个单实例
问题描述:在操作开启实例归档后,发现第二个实例在重启时报如下异常.
2022-04-28 17:01:32.867000 +08:00
Undo initialization recovery: err:0 start: 1478949185 end: 1478949351 diff: 166 ms (0.2 seconds)
[2853] Successfully onlined Undo Tablespace 2.
Undo initialization online undo segments: err:0 start: 1478949351 end: 1478949786 diff: 435 ms (0.4 seconds)
Undo initialization finished serial:0 start:1478949185 end:1478949802 diff:617 ms (0.6 seconds)
Verifying minimum file header compatibility for tablespace encryption..
Verifying file header compatibility for tablespace encryption completed for pdb 0
Database Characterset is ZHS16GBK
No Resource Manager plan active
2022-04-28 17:01:34.161000 +08:00
joxcsys_required_dirobj_exists: directory object exists with required path /u01/app/oracle/product/19.0.0/db_1/javavm/admin/, pid 2853 cid 0
replication_dependency_tracking turned off (no async multimaster replication found)
2022-04-28 17:01:35.519000 +08:00
Starting background process AQPC
TT00 (PID:2864): Error 12154 received logging on to the standby
Errors in file /u01/app/oracle/diag/rdbms/risdg/ris/trace/ris_tt00_2864.trc:
ORA-12154: TNS: 无法解析指定的连接标识符
TT00 (PID:2864): krsg_check_connection: Error 12154 connecting to standby 'RIS'
AQPC started with pid=46, OS id=2879
Starting background process CJQ0
CJQ0 started with pid=47, OS id=2881
Completed: ALTER DATABASE OPEN
2022-04-28 17:01:40.097000 +08:00
QPI: opatch file present, opatch
QPI: qopiprep.bat file present
2022-04-28 17:01:57.642000 +08:00
Unable to obtain current patch information due to error: 6502, ORA-06502: PL/SQL: 数字或值错误 字符串缓冲区太小
ORA-06512: 在
ORA-06512: 在
ORA-06512: 在
ORA-29913: 执行 ODCIEXTTABLEFETCH 调出时出错
ORA-29400: 数据插件错误KUP-04095: 预处理程序命令 /u01/app/oracle/product/19.0.0/db_1/QOpatch/qopiprep.bat 遇到错误
"
ORA-06512: 在
ORA-06512: 在
ORA-06512: 在
ORA-06512: 在
===========================================================
Dumping current patch information
===========================================================
Unable to obtain current patch information due to error: 6502
===========================================================
2022-04-28 17:02:03.804000 +08:00
System state dump requested by (instance=1, osid=2769 (PMON)), summary=[abnormal instance termination].
System State dumped to trace file /u01/app/oracle/diag/rdbms/risdg/ris/trace/ris_diag_2789.trc
PMON (ospid: ): terminating the instance due to ORA error
Cause - 'Instance is being terminated due to fatal process death (pid: 8, ospid: 2784, SA00)'
2022-04-28 17:02:06.277000 +08:00
Dumping diagnostic data in directory=[cdmp_20220428170203], requested by (instance=1, osid=2769 (PMON)), summary=[abnormal instance termination].
2022-04-28 17:02:07.417000 +08:00
Instance terminated by PMON, pid = 2769
如上所示,oracle打开后因不能获得当前补丁信息又自动关闭,再次尝试打开,问题依旧,瞬间压迫感涌上来.
场景回忆,当时只是执行一个简单的开启归档操作,第一个实例都能够正常开启数据库,为什么在开启第二个时却会出现异常?这里感觉非常奇怪,容不得多想,马上找各种相关资料,咨询其它人有没有遇到类似问题,得到的回复众说纷纭,不过也谢谢他们.
数据库确实只是shutdown immediate,然后启动到mount,开启归档,在然后open.整个过程确实没问题,实在不应该,后来想到自己在系统层面上设置过字符集,马上翻看系统命令历史记录,心里一嘀咕,会不会跟这个字符集的设置有关系.不管那么多,先立即重新开启一个session,在新的session中居然成功打开第二个数据库,这里终于松了口气.20多分钟的troubleshooting,真的害我冒了一身冷汗.
以下附上当时的字符集情况:
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
[oracle@his ~]$ echo $NLS_LANG
无显示
说明:成功打开数据库的session中$NLS_LANG无显示.
以下为遇到异常的session字符集情况:
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
[oracle@his ~]$ echo $NLS_LANG
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
结论:此次无法获得opatch information,判断跟字符集的设置有关系.