暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

记一次 Oracle 11g ORA-07445 [opiaba] 实例宕机与 Patch 12578873 处理实录

原创 孙莹 6天前
78

记一次 Oracle 11g ORA-07445 [opiaba] 实例宕机与 Patch 12578873 处理实录

最近处理了一起 Oracle 11.2.0.4 单实例连续异常宕机的问题。数据库第一次恢复后只运行了十几分钟,实例再次退出。

最终定位到应用程序 TongYu.Task.Manager.exe 一次拼接了数百条 SCM_PURBILL INSERT,单个匿名 PL/SQL 块的绑定变量超过 65535,触发 Oracle opiaba 相关 Bug。

一、故障现象

数据库版本为 Oracle 11.2.0.4 单实例,SGA 20G、PGA 6G。

SQL> show parameter sga_target NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sga_target big integer 20G SQL> show parameter pga NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ pga_aggregate_target big integer 6G SQL>

opatch lsinventory 显示当时 Oracle Home 没有安装 Interim Patch。

[oracle@gyl-sqsy-db ~]]$ $ORACLE_HOME/OPatch/opatch lsinventory Oracle Interim Patch Installer version 11.2.0.3.4 Copyright (c) 2012, Oracle Corporation. All rights reserved. Oracle Home : /u01/app/oracle/product/11.2.0/db_1 Central Inventory : /u01/app/oraInventory from : /u01/app/oracle/product/11.2.0/db_1/oraInst.loc OPatch version : 11.2.0.3.4 OUI version : 11.2.0.4.0 Log file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2026-09-28_08-46-02AM_1.log Lsinventory Output file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory2026-09-28_08-46-02AM.txt -------------------------------------------------------------------------------- Installed Top-level Products (1): Oracle Database 11g 11.2.0.4.0 There are 1 products installed in this Oracle Home. There are no Interim patches installed in this Oracle Home. -------------------------------------------------------------------------------- OPatch succeeded. [oracle@gyl-sqsy-db ~]]$

当天上午数据库连续异常退出,查看alter文件如下:

Private strand flush not complete Current log# 4 seq# 1095075 mem# 0: /u01/app/oracle/oradata/sqsydb/redo04.log Thread 1 advanced to log sequence 1095076 (LGWR switch) Current log# 5 seq# 1095076 mem# 0: /u01/app/oracle/oradata/sqsydb/redo05.log Mon Sep 21 08:28:40 2026 Archived Log entry 938248 added for thread 1 sequence 1095075 ID 0x5be538fd dest 1: Mon Sep 21 09:11:54 2026 Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0x186016B, opiaba()+639] [flags: 0x0, count: 1] Errors in file /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/trace/sqsydb_ora_29402.trc (incident=101249): ORA-07445: ³öÏÖÒì³£´íÎó: ºËÐÄת´¢ [opiaba()+639] [SIGSEGV] [ADDR:0x0] [PC:0x186016B] [SI_KERNEL(general_protection)] [] Incident details in: /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/incident/incdir_101249/sqsydb_ora_29402_i101249.trc Use ADRCI or Support Workbench to package the incident. See Note 411.1 at My Oracle Support for error and packaging details. Mon Sep 21 09:12:00 2026 Sweep [inc][101249]: completed Mon Sep 21 09:12:47 2026 Dumping diagnostic data in directory=[cdmp_20260921091247], requested by (instance=1, osid=29402), summary=[incident=101249]. Mon Sep 21 09:12:59 2026 Sweep [inc2][101249]: completed Mon Sep 21 09:17:55 2026 Errors in file /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/trace/sqsydb_ora_7794.trc (incident=101313): ORA-00600: ÄÚ²¿´íÎó´úÂë, ²ÎÊý: [17148], [0x51D178618], [], [], [], [], [], [], [], [], [], [] Incident details in: /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/incident/incdir_101313/sqsydb_ora_7794_i101313.trc Use ADRCI or Support Workbench to package the incident. See Note 411.1 at My Oracle Support for error and packaging details. Mon Sep 21 09:18:21 2026 Dumping diagnostic data in directory=[cdmp_20260921091821], requested by (instance=1, osid=7794), summary=[incident=101313]. Mon Sep 21 09:18:21 2026 Sweep [inc][101313]: completed Sweep [inc2][101313]: completed Mon Sep 21 09:19:20 2026 Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x7F937D507348] [PC:0x95C0452, opiexe()+3554] [flags: 0x0, count: 1] Errors in file /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/trace/sqsydb_ora_9027.trc (incident=101145): ORA-07445: ³öÏÖÒì³£´íÎó: ºËÐÄת´¢ [opiexe()+3554] [SIGSEGV] [ADDR:0x7F937D507348] [PC:0x95C0452] [Address not mapped to object] [] Incident details in: /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/incident/incdir_101145/sqsydb_ora_9027_i101145.trc Use ADRCI or Support Workbench to package the incident. See Note 411.1 at My Oracle Support for error and packaging details. Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x7F935F0399B8] [PC:0x14E9229, keswxCurSetupPublish()+449] [flags: 0x0, count: 2] Errors in file /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/trace/sqsydb_ora_9027.trc (incident=101146): ORA-07445: ³öÏÖÒì³£´íÎó: ºËÐÄת´¢ [keswxCurSetupPublish()+449] [SIGSEGV] [ADDR:0x7F935F0399B8] [PC:0x14E9229] [Address not mapped to object] [] ORA-07445: ³öÏÖÒì³£´íÎó: ºËÐÄת´¢ [opiexe()+3554] [SIGSEGV] [ADDR:0x7F937D507348] [PC:0x95C0452] [Address not mapped to object] [] Incident details in: /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/incident/incdir_101146/sqsydb_ora_9027_i101146.trc Use ADRCI or Support Workbench to package the incident. See Note 411.1 at My Oracle Support for error and packaging details. Mon Sep 21 09:19:27 2026 Sweep [inc][101146]: completed Sweep [inc][101145]: completed Sweep [inc2][101146]: completed Mon Sep 21 09:19:51 2026 Errors in file /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/trace/sqsydb_pmon_29637.trc (incident=100905): ORA-00600: internal error code, arguments: [kghfrh:ds], [0x51D1676C0], [], [], [], [], [], [], [], [], [], [] Incident details in: /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/incident/incdir_100905/sqsydb_pmon_29637_i100905.trc Use ADRCI or Support Workbench to package the incident. See Note 411.1 at My Oracle Support for error and packaging details. Errors in file /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/trace/sqsydb_pmon_29637.trc: ORA-00600: internal error code, arguments: [kghfrh:ds], [0x51D1676C0], [], [], [], [], [], [], [], [], [], [] PMON (ospid: 29637): terminating the instance due to error 472 Mon Sep 21 09:19:56 2026 System state dump requested by (instance=1, osid=29637 (PMON)), summary=[abnormal instance termination]. System State dumped to trace file /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/trace/sqsydb_diag_29647_20260921091956.trc Dumping diagnostic data in directory=[cdmp_20260921091956], requested by (instance=1, osid=29637 (PMON)), summary=[abnormal instance termination]. Instance terminated by PMON, pid = 29637 Mon Sep 21 09:27:50 2026 Starting ORACLE instance (normal) ************************ Large Pages Information ******************* Per process system memlock (soft) limit = 128 GB Total Shared Global Region in Large Pages = 20 GB (100%) Large Pages used by this instance: 10241 (20 GB) Large Pages unused system wide = 3 (6144 KB) Large Pages configured system wide = 10244 (20 GB) Large Page size = 2048 KB ******************************************************************** LICENSE_MAX_SESSION = 0 LICENSE_SESSIONS_WARNING = 0 Initial number of CPU is 4 Number of processor cores in the system is 4 Number of processor sockets in the system is 2 CELL communication is configured to use 0 interface(s): CELL IP affinity details: NUMA status: non-NUMA system cellaffinity.ora status: N/A CELL communication will use 1 IP group(s): Grp 0: Picked latch-free SCN scheme 3 Using LOG_ARCHIVE_DEST_1 parameter default value as /u01/app/oracle/product/11.2.0/db_1/dbs/arch Autotune of undo retention is turned on. IMODE=BR ILAT =101 LICENSE_MAX_USERS = 0 SYS auditing is disabled Starting up: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options. ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1 System name: Linux Node name: gyl-sqsy-db Release: 3.8.13-68.3.4.el6uek.x86_64 Version: #2 SMP Tue Jul 14 15:03:36 PDT 2015 Machine: x86_64 VM name: VMWare Version: 6 Using parameter settings in server-side spfile /u01/app/oracle/product/11.2.0/db_1/dbs/spfilesqsydb.ora System parameters with non-default values: processes = 600 sessions = 924 sga_max_size = 20G sga_target = 20G control_files = "/u01/app/oracle/oradata/sqsydb/control01.ctl" control_files = "/u01/app/oracle/oradata/sqsydb/control02.ctl" db_block_size = 8192 compatible = "11.2.0.4.0" undo_tablespace = "UNDOTBS1" sec_case_sensitive_logon = FALSE remote_login_passwordfile= "EXCLUSIVE" db_domain = "" dispatchers = "(PROTOCOL=TCP) (SERVICE=sqsydbXDB)" audit_file_dest = "/u01/app/oracle/admin/sqsydb/adump" audit_trail = "NONE" db_name = "sqsydb" open_cursors = 300 pga_aggregate_target = 6G deferred_segment_creation= FALSE diagnostic_dest = "/u01/app/oracle" Mon Sep 21 09:27:51 2026 PMON started with pid=2, OS id=9392 Mon Sep 21 09:27:51 2026 PSP0 started with pid=3, OS id=9394 Mon Sep 21 09:27:52 2026 VKTM started with pid=4, OS id=9396 at elevated priority Mon Sep 21 09:27:52 2026 GEN0 started with pid=5, OS id=9400 Mon Sep 21 09:27:52 2026 DIAG started with pid=6, OS id=9402 VKTM running at (1)millisec precision with DBRM quantum (100)ms Mon Sep 21 09:27:52 2026 PMON started with pid=2, OS id=9392 Mon Sep 21 09:27:51 2026 PSP0 started with pid=3, OS id=9394 Mon Sep 21 09:27:52 2026 VKTM started with pid=4, OS id=9396 at elevated priority Mon Sep 21 09:27:52 2026 GEN0 started with pid=5, OS id=9400 Mon Sep 21 09:27:52 2026 DIAG started with pid=6, OS id=9402 VKTM running at (1)millisec precision with DBRM quantum (100)ms Mon Sep 21 09:27:52 2026 DBRM started with pid=7, OS id=9404 Mon Sep 21 09:27:52 2026 DIA0 started with pid=8, OS id=9406 Mon Sep 21 09:27:52 2026 MMAN started with pid=9, OS id=9408 Mon Sep 21 09:27:52 2026 DBW0 started with pid=10, OS id=9410 Mon Sep 21 09:27:52 2026 LGWR started with pid=11, OS id=9412 Mon Sep 21 09:27:52 2026 CKPT started with pid=12, OS id=9414 Mon Sep 21 09:27:52 2026 SMON started with pid=13, OS id=9416 Mon Sep 21 09:27:52 2026 RECO started with pid=14, OS id=9418 Mon Sep 21 09:27:52 2026 MMON started with pid=15, OS id=9420 Mon Sep 21 09:27:52 2026 MMNL started with pid=16, OS id=9422 starting up 1 dispatcher(s) for network address '(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))'... starting up 1 shared server(s) ... ORACLE_BASE from environment = /u01/app/oracle Mon Sep 21 09:27:52 2026 ALTER DATABASE MOUNT Mon Sep 21 09:27:55 2026 Sweep [inc][100905]: completed Sweep [inc2][100905]: completed Successful mount of redo thread 1, with mount id 1888874392 Database mounted in Exclusive Mode Lost write protection disabled Completed: ALTER DATABASE MOUNT Mon Sep 21 09:27:57 2026 ALTER DATABASE OPEN Beginning crash recovery of 1 threads parallel recovery started with 3 processes Started redo scan Completed redo scan read 98862 KB redo, 37963 data blocks need recovery Started redo application at Thread 1: logseq 1095076, block 1265381 Recovery of Online Redo Log: Thread 1 Group 5 Seq 1095076 Reading mem 0 Mem# 0: /u01/app/oracle/oradata/sqsydb/redo05.log Completed redo application of 42.65MB Mon Sep 21 09:28:21 2026 Completed crash recovery at Thread 1: logseq 1095076, block 1463105, scn 24559734334930 37963 data blocks read, 37963 data blocks written, 98862 redo k-bytes read Mon Sep 21 09:28:22 2026 LGWR: STARTING ARCH PROCESSES Mon Sep 21 09:28:22 2026 ARC0 started with pid=41, OS id=18294 ARC0: Archival started LGWR: STARTING ARCH PROCESSES COMPLETE ARC0: STARTING ARCH PROCESSES Mon Sep 21 09:28:23 2026 ARC1 started with pid=42, OS id=18700 Mon Sep 21 09:28:23 2026 ARC2 started with pid=23, OS id=18704 Mon Sep 21 09:28:23 2026 ARC3 started with pid=25, OS id=18708 ARC1: Archival started ARC2: Archival started ARC1: Becoming the 'no FAL' ARCH ARC1: Becoming the 'no SRL' ARCH ARC2: Becoming the heartbeat ARCH Thread 1 advanced to log sequence 1095077 (thread open) Thread 1 opened at log sequence 1095077 Current log# 6 seq# 1095077 mem# 0: /u01/app/oracle/oradata/sqsydb/redo06.log Successful open of redo thread 1 MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set Mon Sep 21 09:28:23 2026 SMON: enabling cache recovery [9432] Successfully onlined Undo Tablespace 2. Undo initialization finished serial:0 start:69858820 end:69859100 diff:280 (2 seconds) Verifying file header compatibility for 11g tablespace encryption.. Verifying 11g file header compatibility for tablespace encryption completed SMON: enabling tx recovery ARC3: Archival started ARC0: STARTING ARCH PROCESSES COMPLETE Database Characterset is ZHS16GBK No Resource Manager plan active replication_dependency_tracking turned off (no async multimaster replication found) Archived Log entry 938249 added for thread 1 sequence 1095076 ID 0x5be538fd dest 1: SMON: Parallel transaction recovery tried Starting background process QMNC Mon Sep 21 09:28:26 2026 QMNC started with pid=58, OS id=19578 Completed: ALTER DATABASE OPEN Mon Sep 21 09:28:29 2026 Starting background process CJQ0 Mon Sep 21 09:28:29 2026 CJQ0 started with pid=31, OS id=19789 Mon Sep 21 09:33:34 2026 Starting background process SMCO Mon Sep 21 09:33:34 2026 SMCO started with pid=20, OS id=21066 Mon Sep 21 09:45:54 2026 Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0x186016B, opiaba()+639] [flags: 0x0, count: 1] Errors in file /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/trace/sqsydb_ora_5817.trc (incident=105931): ORA-07445: ³öÏÖÒì³£´íÎó: ºËÐÄת´¢ [opiaba()+639] [SIGSEGV] [ADDR:0x0] [PC:0x186016B] [SI_KERNEL(general_protection)] [] Incident details in: /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/incident/incdir_105931/sqsydb_ora_5817_i105931.trc Use ADRCI or Support Workbench to package the incident. See Note 411.1 at My Oracle Support for error and packaging details. Mon Sep 21 09:46:00 2026 Dumping diagnostic data in directory=[cdmp_20260921094600], requested by (instance=1, osid=5817), summary=[incident=105931]. Mon Sep 21 09:46:02 2026 Sweep [inc][105931]: completed Sweep [inc2][105931]: completed Mon Sep 21 09:46:21 2026 Errors in file /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/trace/sqsydb_pmon_9392.trc (incident=105707): ORA-00600: internal error code, arguments: [17147], [0x53A7772E8], [], [], [], [], [], [], [], [], [], [] Incident details in: /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/incident/incdir_105707/sqsydb_pmon_9392_i105707.trc Use ADRCI or Support Workbench to package the incident. See Note 411.1 at My Oracle Support for error and packaging details. Errors in file /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/trace/sqsydb_pmon_9392.trc: ORA-00600: internal error code, arguments: [17147], [0x53A7772E8], [], [], [], [], [], [], [], [], [], [] PMON (ospid: 9392): terminating the instance due to error 472 Mon Sep 21 09:46:23 2026 System state dump requested by (instance=1, osid=9392 (PMON)), summary=[abnormal instance termination]. System State dumped to trace file /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/trace/sqsydb_diag_9402_20260921094623.trc Dumping diagnostic data in directory=[cdmp_20260921094623], requested by (instance=1, osid=9392 (PMON)), summary=[abnormal instance termination]. Instance terminated by PMON, pid = 9392 Mon Sep 21 09:52:49 2026 Starting ORACLE instance (normal) ************************ Large Pages Information ******************* Per process system memlock (soft) limit = 128 GB Total Shared Global Region in Large Pages = 20 GB (100%) Large Pages used by this instance: 10241 (20 GB) Large Pages unused system wide = 3 (6144 KB) Large Pages configured system wide = 10244 (20 GB) Large Page size = 2048 KB ********************************************************************

从上面alter文件输出的日志可以确认当天上午数据库连续发生了两次同类型异常宕机

时间 阶段 关键日志 / 异常 结果
09:11:54 第一次故障开始 ORA-07445 [opiaba()+639]、SIGSEGV,PC=0x186016B Oracle Server Process 首先发生异常
09:17:55 ~ 09:19:51 异常扩散 ORA-00600 [17148]、ORA-07445 [opiexe()+3554]、ORA-07445 [keswxCurSetupPublish()+449]、ORA-00600 [kghfrh:ds] Oracle 内部 Heap / 内存状态异常
09:19:56 第一次宕机 PMON terminating the instance due to error 472 Instance terminated by PMON
09:27:50 第一次恢复 Starting ORACLE instance (normal) 数据库重新启动
09:45:54 第二次故障开始 再次出现 ORA-07445 [opiaba()+639],PC=0x186016B 与第一次异常位置完全一致
09:46:21 第二次异常扩散 ORA-00600 [17147] PMON 检测到内部异常
09:46:23 第二次宕机 PMON terminating the instance due to error 472 Instance terminated by PMON
09:52:49 第二次恢复 Starting ORACLE instance (normal) 数据库再次启动

一次故障最早出现:

Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0x186016B, opiaba()+639] ORA-07445: [opiaba()+639] [SIGSEGV]

数据库重启后不到 20 分钟,又再次出现:

ORA-07445 [opiaba()+639] ORA-00600 [17147] PMON (ospid: 9392): terminating the instance due to error 472 Instance terminated by PMON

两次故障有一个非常明显的共同点:

PC = 0x186016B opiaba()+639

也就是说,两次实例 Crash 之前,Oracle 都在同一个内部函数、同一个偏移位置发生 SIGSEGV。

因此排查重点从操作系统资源转向 Oracle Server Process 及其当时正在执行的 SQL。

二、找到触发异常的应用

检查两次最早报 ORA-07445 [opiaba()+639] 的 trace:

[oracle@gyl-sqsy-db trace]$ ls -lh sqsydb_ora_29402.trc -rw-r----- 1 oracle oinstall 1.4K Sep 21 09:12 sqsydb_ora_29402.trc [oracle@gyl-sqsy-db trace]$ ls -lh sqsydb_ora_5817.trc -rw-r----- 1 oracle oinstall 1.4K Sep 21 09:46 sqsydb_ora_5817.trc [oracle@gyl-sqsy-db trace]$ egrep -ni \ > "SESSION ID|MODULE NAME|SERVICE NAME" \ > sqsydb_ora_29402.trc 18:*** SESSION ID:(300.32311) 2026-09-21 09:11:53.980 20:*** SERVICE NAME:(SYS$USERS) 2026-09-21 09:11:53.980 21:*** MODULE NAME:(TongYu.Task.Manager.exe) 2026-09-21 09:11:53.980 [oracle@gyl-sqsy-db trace]$ egrep -ni \ > "SESSION ID|MODULE NAME|SERVICE NAME" \ > sqsydb_ora_5817.trc 18:*** SESSION ID:(474.3519) 2026-09-21 09:45:54.922 20:*** SERVICE NAME:(SYS$USERS) 2026-09-21 09:45:54.922 21:*** MODULE NAME:(TongYu.Task.Manager.exe) 2026-09-21 09:45:54.922 [oracle@gyl-sqsy-db trace]$

两次结果分别为:

SESSION ID:(300.32311) MODULE NAME:(TongYu.Task.Manager.exe)

和:

SESSION ID:(474.3519) MODULE NAME:(TongYu.Task.Manager.exe)

说明两次 opiaba 异常都来自同一个应用模块。

主 trace 中没有 Current SQL Statement,通过 AWR/ASH 按 SID、SERIAL# 和 MODULE 查询也没有保留下当时的记录。实例属于突然 Crash,内存里的 ASH 不一定来得及刷入 AWR,因此继续检查:

[oracle@gyl-sqsy-db incident]$ cd /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/incident/incdir_101249/ [oracle@gyl-sqsy-db incdir_101249]$ ls -lh total 138M -rw-r----- 1 oracle oinstall 137M Sep 21 09:12 sqsydb_ora_29402_i101249.trc -rw-r----- 1 oracle oinstall 247K Sep 21 09:12 sqsydb_ora_29402_i101249.trm [oracle@gyl-sqsy-db incdir_101249]$ cd /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/incident/incdir_105931/ [oracle@gyl-sqsy-db incdir_105931]$ ls -lh total 15M -rw-r----- 1 oracle oinstall 15M Sep 21 09:46 sqsydb_ora_5817_i105931.trc -rw-r----- 1 oracle oinstall 136K Sep 21 09:46 sqsydb_ora_5817_i105931.trm [oracle@gyl-sqsy-db incdir_105931]$

真正的触发 SQL 在 incident trace 中如下:

时间 对应 incident trace
09:12 sqsydb_ora_29402_i101249.trc
09:46 sqsydb_ora_5817_i105931.trc

三、根因定位

第一次 incident trace,查看sqsydb_ora_29402_i101249.trc文件如下:

[oracle@gyl-sqsy-db incdir_101249]$ vi /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/incident/incdir_101249/sqsydb_ora_29402_i101249.trc *** 2026-09-21 09:11:54.685 *** SESSION ID:(300.32311) 2026-09-21 09:11:54.685 *** CLIENT ID:() 2026-09-21 09:11:54.685 *** SERVICE NAME:(SYS$USERS) 2026-09-21 09:11:54.685 *** MODULE NAME:(TongYu.Task.Manager.exe) 2026-09-21 09:11:54.685 *** ACTION NAME:() 2026-09-21 09:11:54.685 Dump continued from file: /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/trace/sqsydb_ora_29402.trc ORA-07445: ³öÏÖÒì³£´íÎó: ºËÐÄת´¢ [opiaba()+639] [SIGSEGV] [ADDR:0x0] [PC:0x186016B] [SI_KERNEL(general_protection)] [] ========= Dump for incident 101249 (ORA 7445 [opiaba()+639]) ======== ----- Beginning of Customized Incident Dump(s) ----- Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0x186016B, opiaba()+639] [flags: 0x0, count: 1] Registers: %rax: 0x00000000776989e8 %rbx: 0x00000004dc56f5e8 %rcx: 0x0000000000004300 %rdx: 0x0000000000000000 %rdi: 0x0000000000000080 %rsi: 0x0000000000000080 %rsp: 0x00007fff6b1d4f50 %rbp: 0x00007fff6b1d4fc0 %r8: 0x0000000518afed98 %r9: 0x0000000000000001 %r10: 0x0000000000000a84 %r11: 0x00000000776989d8 %r12: 0x00000004f2b4a6d8 %r13: 0x0000000000000000 %r14: 0x020000000077698a %r15: 0x0000000000000004 %rip: 0x000000000186016b %efl: 0x0000000000010202 opiaba()+625 (0x186015d) jmp 0x186019a opiaba()+627 (0x186015f) movzbl 0x2c(%rbx),%r15d opiaba()+632 (0x1860164) mov %r14,-0x60(%rbp) opiaba()+636 (0x1860168) mov %rax,%r14 > opiaba()+639 (0x186016b) movswq 0xa(%r14),%rcx opiaba()+644 (0x1860170) cmp %ecx,%r15d opiaba()+647 (0x1860173) jne 0x186018e opiaba()+649 (0x1860175) mov 0x18(%rbx),%rdi opiaba()+653 (0x1860179) lea 0xc(%r14),%rsi *** 2026-09-21 09:11:54.799 dbkedDefDump(): Starting a non-incident diagnostic dump (flags=0x3, level=3, mask=0x0) ----- Current SQL Statement for this session (sql_id=dc57bu1ymdjzx) ----- DECLARE TYPE tec IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; TYPE trmd IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; TYPE tem IS TABLE OF VARCHAR2(256) INDEX BY BINARY_INTEGER; rct NUMBER:=0; rmd NUMBER:=0; aecd tec; armd trmd; aem tem; BEGIN BEGIN rct:=rct+1; INSERT INTO scm_purbill (ID,AREAID,SUBAREAID,BILLNO,BILLSEQ,HOSGOODID,HOSGOODS,DEALGOODS,DEALGOODID,HOSID,HOSCODE,DEALID,DEALCODE,SUPPLIERID,BILLDATE,HOSQTY,HOSPRICE,DEALQTY,DEALPRICE,SUMVALUE,HOSADDRID,HOSDEPTID,HOSDEPTCODE,DEALADDRID,DEALADDRCODE,STATUS,STOPFLAG,EXPFLAG,EXPUSER,IMPDATE,IMPUSER,INPTID,EXPDATE,MESSAGE,INVENTORY,INVFLAG,BOXFLAG,GVFLAG,MEMO1,MEMO2,GVFLAGDATE,WHSPOS,ISMATCH,HOSADDRCODE,WMSQTY,CARDNO,PRESCRIPTNO,PATIENTNAME,IDCARDNO,GENDER,PATIENTADDRESS,PATIENTPHONE,METHODDESC,PATTERN,BATCHORDER,PROCESSSTATUS,YBKH,JGZH,XSZH,JZZH,SBKH,APPMSG,HEADERID,ISPRINT,CHANGEMESS,EXECUTENO,EXECUTEDATE,RELEASEDATE,EXPSEQ,BLSOURCE,ISCHARGE,ISGETPRES,RTLPRC,AREACODE,UPLOADIMG,LOTNO,ENDDATE,ISPOS,SQRUID,SQRDATA,SQRDATE,SQREXPFLAG,SFEXFLAG,JYEXFLAG,SALTYPE,FEETYPE,DTLLINES,SENDACCAMOUNT,SENDPAYMENT,UPDATETIME,UPDATEUSER,SHIPPERID,ALLOCATIONBILL,OTHERSUPPLIERS,PROVINCE,CITY,HOSMSUNITNO,REALNAME,DEPARTMENT,TOTALAMOUNT,DIAGNOSERESULT,AGE,COMMITTEE,DISTRICT,REALPHONE,REALADDRESS,DIGITALTECHFLAG,DIGITALTECHDATE,EXPRESSTRADENO,STORECODE,NEWSUPPLIERID,DELIVERYCOMPANY,STORENAME,STOREADDRESS,CONTRACTNO,CONTRACTROWS,CONTRACTAUROWS,CONTRACTNOAUROWS,SENDPAYMENTFLAG,ORDERTYPE,CARRIERPAYTYPE,GDPAYTYPE,RECEIPTNO,CONTRACTGOODSROWS,DEALMSUNITNO,AUROWS,SETTLEMENT,ISINSURED,CONTRACTAMOUNT,ISSCAN,SCANEXPFLAG,SCANEXPDATE,BOOKTIME,IWMSFLAG,IWMSDATE) VALUES (:C0,:C1,:C2,:C3,:C4,:C5,:C6,:C7,:C8,:C9,:C10,:C11,:C12,:C13,:C14,:C15,:C16,:C17,:C18,:C19,:C20,:C21,:C22,:C23,:C24,:C25,:C26,:C27,:C28,:C29,:C30,:C31,:C32,:C33,:C34,:C35,:C36,:C37,:C38,:C39,:C40,:C41,:C42,:C43,:C44,:C45,:C46,:C47,:C48,:C49,:C50,:C51,:C52,:C53,:C54,:C55,:C56,:C57,:C58,:C59,:C60,:C61,:C62,:C63,:C64,:C65,:C66,:C67,:C68,:C69,:C70,:C71,:C72,:C73,:C74,:C75,:C76,:C77,:C78,:C79,:C80,:C81,:C82,:C83,:C84,:C85,:C86,:C87,:C88,:C89,:C90,:C91,:C92,:C93,:C94,:C95,:C96,:C97,:C98,:C99,:C100,:C101,:C102,:C103,:C104,:C105,:C106,:C107,:C108,:C109,:C110,:C111,:C112,:C113,:C114,:C115,:C116,:C117,:C118,:C119,:C120,:C121,:C122,:C123,:C124,:C125,:C126,:C127,:C128,:C129,:C130,:C131,:C132,:C133,:C134); armd(rct):=SQL%ROWCOUNT; rmd:=rmd+SQL%ROWCOUNT; aecd(rct):=0; EXCEPTION WHEN OTHERS THEN armd(rct):=0; aecd(rct):=SQLCODE; aem(rct):=SQLERRM; end; BEGIN rct:=rct+1; INSERT INTO scm_purbill (ID,AREAID,SUBAREAID,BILLNO,BILLSEQ,HOSGOODID,HOSGOODS,DEALGOODS,DEALGOODID,HOSID,HOSCODE,DEALID,DEALCODE,SUPPLIERID,BILLDATE,HOSQTY,HOSPRICE,DEALQTY,DEALPRICE,SUMVALUE,HOSADDRID,HOSDEPTID,HOSDEPTCODE,DEALADDRID,DEALADDRCODE,STATUS,STOPFLAG,EXPFLAG,EXPUSER,IMPDATE,IMPUSER,INPTID,EXPDATE,MESSAGE,INVENTORY,INVFLAG,BOXFLAG,GVFLAG,MEMO1,MEMO2,GVFLAGDATE,WHSPOS,ISMATCH,HOSADDRCODE,WMSQTY,CARDNO,PRESCRIPTNO,PATIENTNAME,IDCARDNO,GENDER,PATIENTADDRESS,PATIENTPHONE,METHODDESC,PATTERN,BATCHORDER,PROCESSSTATUS,YBKH,JGZH,XSZH,JZZH,SBKH,APPMSG,HEADERID,ISPRINT,CHANGEMESS,EXECUTENO,EXECUTEDATE,RELEASEDATE,EXPSEQ,BLSOURCE,ISCHARGE,ISGETPRES,RTLPRC,AREACODE,UPLOADIMG,LOTNO,ENDDATE,ISPOS,SQRUID,SQRDATA,SQRDATE,SQREXPFLAG,SFEXFLAG,JYEXFLAG,SALTYPE,FEETYPE,DTLLINES,SENDACCAMOUNT,SENDPAYMENT,UPDATETIME,UPDATEUSER,SHIPPERID,ALLOCATIONBILL,OTHERSUPPLIERS,PROVINCE,CITY,HOSMSUNITNO,REALNAME,DEPARTMENT,TOTALAMOUNT,DIAGNOSERESULT,AGE,COMMITTEE,DISTRICT,REALPHONE,REALADDRESS,DIGITALTECHFLAG,DIGITALTECHDATE,EXPRESSTRADENO,STORECODE,NEWSUPPLIERID,DELIVERYCOMPANY,STORENAME,STOREADDRESS,CONTRACTNO,CONTRACTROWS,CONTRACTAUROWS,CONTRACTNOAUROWS,SENDPAYMENTFLAG,ORDERTYPE,CARRIERPAYTYPE,GDPAYTYPE,RECEIPTNO,CONTRACTGOODSROWS,DEALMSUNITNO,AUROWS,SETTLEMENT,ISINSURED,CONTRACTAMOUNT,ISSCAN,SCANEXPFLAG,SCANEXPDATE,BOOKTIME,IWMSFLAG,IWMSDATE) VALUES (:C135,:C136,:C137,:C138,:C139,:C140,:C141,:C142,:C143,:C144,:C145,:C146,:C147,:C148,:C149,:C150,:C151,:C152,:C153,:C154,:C155,:C156,:C157,:C158,:C159,:C160,:C161,:C162,:C163,:C164,:C165,:C166,:C167,:C168,:C169,:C170,:C171,:C172,:C173,:C174,:C175,:C176,:C177,:C178,:C179,:C180,:C181,:C182,:C183,:C184,:C185,:C186,:C187,:C188,:C189,:C190,:C191,:C192,:C193,:C194,:C195,:C196,:C197,:C198,:C199,:C200,:C201,:C202,:C203,:C204,:C205,:C206,:C207,:C208,:C209,:C210,:C211,:C212,:C213,:C214,:C215,:C216,:C217,:C218,:C219,:C220,:C221,:C222,:C223,:C224,:C225,:C226,:C227,:C228,:C229,:C230,:C231,:C232,:C233,:C234,:C235,:C236,:C237,:C238,:C239,:C240,:C241,:C242,:C243,:C244,:C245,:C246,:C247,:C248,:C249,:C250,:C251,:C252,:C253,:C254,:C255,:C256,:C257,:C258,:C259,:C260,:C261,:C262,:C263,:C264,:C265,:C266,:C267,:C268,:C269); armd(rct):=SQL%ROWCOUNT; rmd:=rmd+SQL%ROWCOUNT; aecd(rct):=0; EXCEPTION WHEN OTHERS THEN armd(rct):=0; aecd(rct):=SQLCODE; aem(rct):=SQLERRM; end; 。。。 BEGIN rct:=rct+1; INSERT INTO scm_purbill (ID,AREAID,SUBAREAID,BILLNO,BILLSEQ,HOSGOODID,HOSGOODS,DEALGOODS,DEALGOODID,HOSID,HOSCODE,DEALID,DEALCODE,SUPPLIERID,BILLDATE,HOSQTY,HOSPRICE,DEALQTY,DEALPRICE,SUMVALUE,HOSADDRID,HOSDEPTID,HOSDEPTCODE,DEALADDRID,DEALADDRCODE,STATUS,STOPFLAG,EXPFLAG,EXPUSER,IMPDATE,IMPUSER,INPTID,EXPDATE,MESSAGE,INVENTORY,INVFLAG,BOXFLAG,GVFLAG,MEMO1,MEMO2,GVFLAGDATE,WHSPOS,ISMATCH,HOSADDRCODE,WMSQTY,CARDNO,PRESCRIPTNO,PATIENTNAME,IDCARDNO,GENDER,PATIENTADDRESS,PATIENTPHONE,METHODDESC,PATTERN,BATCHORDER,PROCESSSTATUS,YBKH,JGZH,XSZH,JZZH,SBKH,APPMSG,HEADERID,ISPRINT,CHANGEMESS,EXECUTENO,EXECUTEDATE,RELEASEDATE,EXPSEQ,BLSOURCE,ISCHARGE,ISGETPRES,RTLPRC,AREACODE,UPLOADIMG,LOTNO,ENDDATE,ISPOS,SQRUID,SQRDATA,SQRDATE,SQREXPFLAG,SFEXFLAG,JYEXFLAG,SALTYPE,FEETYPE,DTLLINES,SENDACCAMOUNT,SENDPAYMENT,UPDATETIME,UPDATEUSER,SHIPPERID,ALLOCATIONBILL,OTHERSUPPLIERS,PROVINCE,CITY,HOSMSUNITNO,REALNAME,DEPARTMENT,TOTALAMOUNT,DIAGNOSERESULT,AGE,COMMITTEE,DISTRICT,REALPHONE,REALADDRESS,DIGITALTECHFLAG,DIGITALTECHDATE,EXPRESSTRADENO,STORECODE,NEWSUPPLIERID,DELIVERYCOMPANY,STORENAME,STOREADDRESS,CONTRACTNO,CONTRACTROWS,CONTRACTAUROWS,CONTRACTNOAUROWS,SENDPAYMENTFLAG,ORDERTYPE,CARRIERPAYTYPE,GDPAYTYPE,RECEIPTNO,CONTRACTGOODSROWS,DEALMSUNITNO,AUROWS,SETTLEMENT,ISINSURED,CONTRACTAMOUNT,ISSCAN,SCANEXPFLAG,SCANEXPDATE,BOOKTIME,IWMSFLAG,IWMSDATE) VALUES (:C65340,:C65341,:C65342,:C65343,:C65344,:C65345,:C65346,:C65347,:C65348,:C65349,:C65350,:C65351,:C65352,:C65353,:C65354,:C65355,:C65356,:C65357,:C65358,:C65359,:C65360,:C65361,:C65362,:C65363,:C65364,:C65365,:C65366,:C65367,:C65368,:C65369,:C65370,:C65371,:C65372,:C65373,:C65374,:C65375,:C65376,:C65377,:C65378,:C65379,:C65380,:C65381,:C65382,:C65383,:C65384,:C65385,:C65386,:C65387,:C65388,:C65389,:C65390,:C65391,:C65392,:C65393,:C65394,:C65395,:C65396,:C65397,:C65398,:C65399,:C65400,:C65401,:C65402,:C65403,:C65404,:C65405,:C65406,:C65407,:C65408,:C65409,:C65410,:C65411,:C65412,:C65413,:C65414,:C65415,:C65416,:C65417,:C65418,:C65419,:C65420,:C65421,:C65422,:C65423,:C65424,:C65425,:C65426,:C65427,:C65428,:C65429,:C65430,:C65431,:C65432,:C65433,:C65434,:C65435,:C65436,:C65437,:C65438,:C65439,:C65440,:C65441,:C65442,:C65443,:C65444,:C65445,:C65446,:C65447,:C65448,:C65449,:C65450,:C65451,:C65452,:C65453,:C65454,:C65455,:C65456,:C65457,:C65458,:C65459,:C65460,:C65461,:C65462,:C65463,:C65464,:C65465,:C65466,:C65467,:C65468,:C65469,:C65470,:C65471,:C65472,:C65473,:C65474); armd(rct):=SQL%ROWCOUNT; rmd:=rmd+SQL%ROWCOUNT; aecd(rct):=0; EXCEPTION WHEN OTHERS THEN armd(rct):=0; aecd(rct):=SQLCODE; aem(rct):=SQLERRM; end; BEGIN rct:=rct+1; INSERT INTO scm_purbill (ID,AREAID,SUBAREAID,BILLNO,BILLSEQ,HOSGOODID,HOSGOODS,DEALGOODS,DEALGOODID,HOSID,HOSCODE,DEALID,DEALCODE,SUPPLIERID,BILLDATE,HOSQTY,HOSPRICE,DEALQTY,DEALPRICE,SUMVALUE,HOSADDRID,HOSDEPTID,HOSDEPTCODE,DEALADDRID,DEALADDRCODE,STATUS,STOPFLAG,EXPFLAG,EXPUSER,IMPDATE,IMPUSER,INPTID,EXPDATE,MESSAGE,INVENTORY,INVFLAG,BOXFLAG,GVFLAG,MEMO1,MEMO2,GVFLAGDATE,WHSPOS,ISMATCH,HOSADDRCODE,WMSQTY,CARDNO,PRESCRIPTNO,PATIENTNAME,IDCARDNO,GENDER,PATIENTADDRESS,PATIENTPHONE,METHODDESC,PATTERN,BATCHORDER,PROCESSSTATUS,YBKH,JGZH,XSZH,JZZH,SBKH,APPMSG,HEADERID,ISPRINT,CHANGEMESS,EXECUTENO,EXECUTEDATE,RELEASEDATE,EXPSEQ,BLSOURCE,ISCHARGE,ISGETPRES,RTLPRC,AREACODE,UPLOADIMG,LOTNO,ENDDATE,ISPOS,SQRUID,SQRDATA,SQRDATE,SQREXPFLAG,SFEXFLAG,JYEXFLAG,SALTYPE,FEETYPE,DTLLINES,SENDACCAMOUNT,SENDPAYMENT,UPDATETIME,UPDATEUSER,SHIPPERID,ALLOCATIONBILL,OTHERSUPPLIERS,PROVINCE,CITY,HOSMSUNITNO,REALNAME,DEPARTMENT,TOTALAMOUNT,DIAGNOSERESULT,AGE,COMMITTEE,DISTRICT,REALPHONE,REALADDRESS,DIGITALTECHFLAG,DIGITALTECHDATE,EXPRESSTRADENO,STORECODE,NEWSUPPLIERID,DELIVERYCOMPANY,STORENAME,STOREADDRESS,CONTRACTNO,CONTRACTROWS,CONTRACTAUROWS,CONTRACTNOAUROWS,SENDPAYMENTFLAG,ORDERTYPE,CARRIERPAYTYPE,GDPAYTYPE,RECEIPTNO,CONTRACTGOODSROWS,DEALMSUNITNO,AUROWS,SETTLEMENT,ISINSURED,CONTRACTAMOUNT,ISSCAN,SCANEXPFLAG,SCANEXPDATE,BOOKTIME,IWMSFLAG,IWMSDATE) VALUES (:C65475,:C65476,:C65477,:C65478,:C65479,:C65480,:C65481,:C65482,:C65483,:C65484,:C65485,:C65486,:C65487,:C65488,:C65489,:C65490,:C65491,:C65492,:C65493,:C65494,:C65495,:C65496,:C65497,:C65498,:C65499,:C65500,:C65501,:C65502,:C65503,:C65504,:C65505,:C65506,:C65507,:C65508,:C65509,:C65510,:C65511,:C65512,:C65513,:C65514,:C65515,:C65516,:C65517,:C65518,:C65519,:C65520,:C65521,:C65522,:C65523,:C65524,:C65525,:C65526,:C65527,:C65528,:C65529,:C65530,:C65531,:C65532,:C65533,:C65534,:C65535,:C65536,:C65537,:C65538,:C65539,:C65540,:C65541,:C65542,:C65543,:C65544,:C65545,:C65546,:C65547,:C65548,:C65549,:C65550,:C65551,:C65552,:C65553,:C65554,:C65555,:C65556,:C65557,:C65558,:C65559,:C65560,:C65561,:C65562,:C65563,:C65564,:C65565,:C65566,:C65567,:C65568,:C65569,:C65570,:C65571,:C65572,:C65573,:C65574,:C65575,:C65576,:C65577,:C65578,:C65579,:C65580,:C65581,:C65582,:C65583,:C65584,:C65585,:C65586,:C65587,:C65588,:C65589,:C65590,:C65591,:C65592,:C65593,:C65594,:C65595,:C65596,:C65597,:C65598,:C65599,:C65600,:C65601,:C65602,:C65603,:C65604,:C65605,:C65606,:C65607,:C65608,:C65609); armd(rct):=SQL%ROWCOUNT; rmd:=rmd+SQL%ROWCOUNT; aecd(rct):=0; EXCEPTION WHEN OTHERS THEN armd(rct):=0; aecd(rct):=SQLCODE; aem(rct):=SQLERRM; end; :rmd:=rmd; :aecd:=aecd; :aem:=aem; :armd:=armd; END;

SQL 是一个很大的匿名 PL/SQL 块:

BEGIN BEGIN INSERT INTO SCM_PURBILL (...) VALUES (:C0, :C1, ... , :C134); END; BEGIN INSERT INTO SCM_PURBILL (...) VALUES (:C135, :C136, ... , :C269); END; 。。。 BEGIN INSERT INTO SCM_PURBILL (...) VALUES (:C65340, :C65341, ... , :C65474); END; BEGIN INSERT INTO SCM_PURBILL (...) VALUES (:C65475, :C65476, ... , :C65609); END; END;

每条 SCM_PURBILL INSERT 使用 135 个绑定变量。最后一个绑定变量达到:C65609。编号从 0 开始,因此总数为:65609 + 1 = 65610,486 × 135 = 65610。

第二次 incident trace,查看sqsydb_ora_29402_i101249.trc文件如下:

[oracle@gyl-sqsy-db incdir_105931]$ vi /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/incident/incdir_105931/sqsydb_ora_5817_i105931.trc *** 2026-09-21 09:45:55.092 dbkedDefDump(): Starting a non-incident diagnostic dump (flags=0x3, level=3, mask=0x0) ----- Current SQL Statement for this session (sql_id=58621xsd5yjy8) ----- DECLARE TYPE tec IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; TYPE trmd IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; TYPE tem IS TABLE OF VARCHAR2(256) INDEX BY BINARY_INTEGER; rct NUMBER:=0; rmd NUMBER:=0; aecd tec; armd trmd; aem tem; BEGIN BEGIN rct:=rct+1; INSERT INTO scm_purbill (ID,AREAID,SUBAREAID,BILLNO,BILLSEQ,HOSGOODID,HOSGOODS,DEALGOODS,DEALGOODID,HOSID,HOSCODE,DEALID,DEALCODE,SUPPLIERID,BILLDATE,HOSQTY,HOSPRICE,DEALQTY,DEALPRICE,SUMVALUE,HOSADDRID,HOSDEPTID,HOSDEPTCODE,DEALADDRID,DEALADDRCODE,STATUS,STOPFLAG,EXPFLAG,EXPUSER,IMPDATE,IMPUSER,INPTID,EXPDATE,MESSAGE,INVENTORY,INVFLAG,BOXFLAG,GVFLAG,MEMO1,MEMO2,GVFLAGDATE,WHSPOS,ISMATCH,HOSADDRCODE,WMSQTY,CARDNO,PRESCRIPTNO,PATIENTNAME,IDCARDNO,GENDER,PATIENTADDRESS,PATIENTPHONE,METHODDESC,PATTERN,BATCHORDER,PROCESSSTATUS,YBKH,JGZH,XSZH,JZZH,SBKH,APPMSG,HEADERID,ISPRINT,CHANGEMESS,EXECUTENO,EXECUTEDATE,RELEASEDATE,EXPSEQ,BLSOURCE,ISCHARGE,ISGETPRES,RTLPRC,AREACODE,UPLOADIMG,LOTNO,ENDDATE,ISPOS,SQRUID,SQRDATA,SQRDATE,SQREXPFLAG,SFEXFLAG,JYEXFLAG,SALTYPE,FEETYPE,DTLLINES,SENDACCAMOUNT,SENDPAYMENT,UPDATETIME,UPDATEUSER,SHIPPERID,ALLOCATIONBILL,OTHERSUPPLIERS,PROVINCE,CITY,HOSMSUNITNO,REALNAME,DEPARTMENT,TOTALAMOUNT,DIAGNOSERESULT,AGE,COMMITTEE,DISTRICT,REALPHONE,REALADDRESS,DIGITALTECHFLAG,DIGITALTECHDATE,EXPRESSTRADENO,STORECODE,NEWSUPPLIERID,DELIVERYCOMPANY,STORENAME,STOREADDRESS,CONTRACTNO,CONTRACTROWS,CONTRACTAUROWS,CONTRACTNOAUROWS,SENDPAYMENTFLAG,ORDERTYPE,CARRIERPAYTYPE,GDPAYTYPE,RECEIPTNO,CONTRACTGOODSROWS,DEALMSUNITNO,AUROWS,SETTLEMENT,ISINSURED,CONTRACTAMOUNT,ISSCAN,SCANEXPFLAG,SCANEXPDATE,BOOKTIME,IWMSFLAG,IWMSDATE) VALUES (:C0,:C1,:C2,:C3,:C4,:C5,:C6,:C7,:C8,:C9,:C10,:C11,:C12,:C13,:C14,:C15,:C16,:C17,:C18,:C19,:C20,:C21,:C22,:C23,:C24,:C25,:C26,:C27,:C28,:C29,:C30,:C31,:C32,:C33,:C34,:C35,:C36,:C37,:C38,:C39,:C40,:C41,:C42,:C43,:C44,:C45,:C46,:C47,:C48,:C49,:C50,:C51,:C52,:C53,:C54,:C55,:C56,:C57,:C58,:C59,:C60,:C61,:C62,:C63,:C64,:C65,:C66,:C67,:C68,:C69,:C70,:C71,:C72,:C73,:C74,:C75,:C76,:C77,:C78,:C79,:C80,:C81,:C82,:C83,:C84,:C85,:C86,:C87,:C88,:C89,:C90,:C91,:C92,:C93,:C94,:C95,:C96,:C97,:C98,:C99,:C100,:C101,:C102,:C103,:C104,:C105,:C106,:C107,:C108,:C109,:C110,:C111,:C112,:C113,:C114,:C115,:C116,:C117,:C118,:C119,:C120,:C121,:C122,:C123,:C124,:C125,:C126,:C127,:C128,:C129,:C130,:C131,:C132,:C133,:C134); armd(rct):=SQL%ROWCOUNT; rmd:=rmd+SQL%ROWCOUNT; aecd(rct):=0; EXCEPTION WHEN OTHERS THEN armd(rct):=0; aecd(rct):=SQLCODE; aem(rct):=SQLERRM; end; BEGIN rct:=rct+1; INSERT INTO scm_purbill (ID,AREAID,SUBAREAID,BILLNO,BILLSEQ,HOSGOODID,HOSGOODS,DEALGOODS,DEALGOODID,HOSID,HOSCODE,DEALID,DEALCODE,SUPPLIERID,BILLDATE,HOSQTY,HOSPRICE,DEALQTY,DEALPRICE,SUMVALUE,HOSADDRID,HOSDEPTID,HOSDEPTCODE,DEALADDRID,DEALADDRCODE,STATUS,STOPFLAG,EXPFLAG,EXPUSER,IMPDATE,IMPUSER,INPTID,EXPDATE,MESSAGE,INVENTORY,INVFLAG,BOXFLAG,GVFLAG,MEMO1,MEMO2,GVFLAGDATE,WHSPOS,ISMATCH,HOSADDRCODE,WMSQTY,CARDNO,PRESCRIPTNO,PATIENTNAME,IDCARDNO,GENDER,PATIENTADDRESS,PATIENTPHONE,METHODDESC,PATTERN,BATCHORDER,PROCESSSTATUS,YBKH,JGZH,XSZH,JZZH,SBKH,APPMSG,HEADERID,ISPRINT,CHANGEMESS,EXECUTENO,EXECUTEDATE,RELEASEDATE,EXPSEQ,BLSOURCE,ISCHARGE,ISGETPRES,RTLPRC,AREACODE,UPLOADIMG,LOTNO,ENDDATE,ISPOS,SQRUID,SQRDATA,SQRDATE,SQREXPFLAG,SFEXFLAG,JYEXFLAG,SALTYPE,FEETYPE,DTLLINES,SENDACCAMOUNT,SENDPAYMENT,UPDATETIME,UPDATEUSER,SHIPPERID,ALLOCATIONBILL,OTHERSUPPLIERS,PROVINCE,CITY,HOSMSUNITNO,REALNAME,DEPARTMENT,TOTALAMOUNT,DIAGNOSERESULT,AGE,COMMITTEE,DISTRICT,REALPHONE,REALADDRESS,DIGITALTECHFLAG,DIGITALTECHDATE,EXPRESSTRADENO,STORECODE,NEWSUPPLIERID,DELIVERYCOMPANY,STORENAME,STOREADDRESS,CONTRACTNO,CONTRACTROWS,CONTRACTAUROWS,CONTRACTNOAUROWS,SENDPAYMENTFLAG,ORDERTYPE,CARRIERPAYTYPE,GDPAYTYPE,RECEIPTNO,CONTRACTGOODSROWS,DEALMSUNITNO,AUROWS,SETTLEMENT,ISINSURED,CONTRACTAMOUNT,ISSCAN,SCANEXPFLAG,SCANEXPDATE,BOOKTIME,IWMSFLAG,IWMSDATE) VALUES (:C135,:C136,:C137,:C138,:C139,:C140,:C141,:C142,:C143,:C144,:C145,:C146,:C147,:C148,:C149,:C150,:C151,:C152,:C153,:C154,:C155,:C156,:C157,:C158,:C159,:C160,:C161,:C162,:C163,:C164,:C165,:C166,:C167,:C168,:C169,:C170,:C171,:C172,:C173,:C174,:C175,:C176,:C177,:C178,:C179,:C180,:C181,:C182,:C183,:C184,:C185,:C186,:C187,:C188,:C189,:C190,:C191,:C192,:C193,:C194,:C195,:C196,:C197,:C198,:C199,:C200,:C201,:C202,:C203,:C204,:C205,:C206,:C207,:C208,:C209,:C210,:C211,:C212,:C213,:C214,:C215,:C216,:C217,:C218,:C219,:C220,:C221,:C222,:C223,:C224,:C225,:C226,:C227,:C228,:C229,:C230,:C231,:C232,:C233,:C234,:C235,:C236,:C237,:C238,:C239,:C240,:C241,:C242,:C243,:C244,:C245,:C246,:C247,:C248,:C249,:C250,:C251,:C252,:C253,:C254,:C255,:C256,:C257,:C258,:C259,:C260,:C261,:C262,:C263,:C264,:C265,:C266,:C267,:C268,:C269); armd(rct):=SQL%ROWCOUNT; rmd:=rmd+SQL%ROWCOUNT; aecd(rct):=0; EXCEPTION WHEN OTHERS THEN armd(rct):=0; aecd(rct):=SQLCODE; aem(rct):=SQLERRM; end; 。。。 BEGIN rct:=rct+1; INSERT INTO scm_purbill (ID,AREAID,SUBAREAID,BILLNO,BILLSEQ,HOSGOODID,HOSGOODS,DEALGOODS,DEALGOODID,HOSID,HOSCODE,DEALID,DEALCODE,SUPPLIERID,BILLDATE,HOSQTY,HOSPRICE,DEALQTY,DEALPRICE,SUMVALUE,HOSADDRID,HOSDEPTID,HOSDEPTCODE,DEALADDRID,DEALADDRCODE,STATUS,STOPFLAG,EXPFLAG,EXPUSER,IMPDATE,IMPUSER,INPTID,EXPDATE,MESSAGE,INVENTORY,INVFLAG,BOXFLAG,GVFLAG,MEMO1,MEMO2,GVFLAGDATE,WHSPOS,ISMATCH,HOSADDRCODE,WMSQTY,CARDNO,PRESCRIPTNO,PATIENTNAME,IDCARDNO,GENDER,PATIENTADDRESS,PATIENTPHONE,METHODDESC,PATTERN,BATCHORDER,PROCESSSTATUS,YBKH,JGZH,XSZH,JZZH,SBKH,APPMSG,HEADERID,ISPRINT,CHANGEMESS,EXECUTENO,EXECUTEDATE,RELEASEDATE,EXPSEQ,BLSOURCE,ISCHARGE,ISGETPRES,RTLPRC,AREACODE,UPLOADIMG,LOTNO,ENDDATE,ISPOS,SQRUID,SQRDATA,SQRDATE,SQREXPFLAG,SFEXFLAG,JYEXFLAG,SALTYPE,FEETYPE,DTLLINES,SENDACCAMOUNT,SENDPAYMENT,UPDATETIME,UPDATEUSER,SHIPPERID,ALLOCATIONBILL,OTHERSUPPLIERS,PROVINCE,CITY,HOSMSUNITNO,REALNAME,DEPARTMENT,TOTALAMOUNT,DIAGNOSERESULT,AGE,COMMITTEE,DISTRICT,REALPHONE,REALADDRESS,DIGITALTECHFLAG,DIGITALTECHDATE,EXPRESSTRADENO,STORECODE,NEWSUPPLIERID,DELIVERYCOMPANY,STORENAME,STOREADDRESS,CONTRACTNO,CONTRACTROWS,CONTRACTAUROWS,CONTRACTNOAUROWS,SENDPAYMENTFLAG,ORDERTYPE,CARRIERPAYTYPE,GDPAYTYPE,RECEIPTNO,CONTRACTGOODSROWS,DEALMSUNITNO,AUROWS,SETTLEMENT,ISINSURED,CONTRACTAMOUNT,ISSCAN,SCANEXPFLAG,SCANEXPDATE,BOOKTIME,IWMSFLAG,IWMSDATE) VALUES (:C67230,:C67231,:C67232,:C67233,:C67234,:C67235,:C67236,:C67237,:C67238,:C67239,:C67240,:C67241,:C67242,:C67243,:C67244,:C67245,:C67246,:C67247,:C67248,:C67249,:C67250,:C67251,:C67252,:C67253,:C67254,:C67255,:C67256,:C67257,:C67258,:C67259,:C67260,:C67261,:C67262,:C67263,:C67264,:C67265,:C67266,:C67267,:C67268,:C67269,:C67270,:C67271,:C67272,:C67273,:C67274,:C67275,:C67276,:C67277,:C67278,:C67279,:C67280,:C67281,:C67282,:C67283,:C67284,:C67285,:C67286,:C67287,:C67288,:C67289,:C67290,:C67291,:C67292,:C67293,:C67294,:C67295,:C67296,:C67297,:C67298,:C67299,:C67300,:C67301,:C67302,:C67303,:C67304,:C67305,:C67306,:C67307,:C67308,:C67309,:C67310,:C67311,:C67312,:C67313,:C67314,:C67315,:C67316,:C67317,:C67318,:C67319,:C67320,:C67321,:C67322,:C67323,:C67324,:C67325,:C67326,:C67327,:C67328,:C67329,:C67330,:C67331,:C67332,:C67333,:C67334,:C67335,:C67336,:C67337,:C67338,:C67339,:C67340,:C67341,:C67342,:C67343,:C67344,:C67345,:C67346,:C67347,:C67348,:C67349,:C67350,:C67351,:C67352,:C67353,:C67354,:C67355,:C67356,:C67357,:C67358,:C67359,:C67360,:C67361,:C67362,:C67363,:C67364); armd(rct):=SQL%ROWCOUNT; rmd:=rmd+SQL%ROWCOUNT; aecd(rct):=0; EXCEPTION WHEN OTHERS THEN armd(rct):=0; aecd(rct):=SQLCODE; aem(rct):=SQLERRM; end; BEGIN rct:=rct+1; INSERT INTO scm_purbill (ID,AREAID,SUBAREAID,BILLNO,BILLSEQ,HOSGOODID,HOSGOODS,DEALGOODS,DEALGOODID,HOSID,HOSCODE,DEALID,DEALCODE,SUPPLIERID,BILLDATE,HOSQTY,HOSPRICE,DEALQTY,DEALPRICE,SUMVALUE,HOSADDRID,HOSDEPTID,HOSDEPTCODE,DEALADDRID,DEALADDRCODE,STATUS,STOPFLAG,EXPFLAG,EXPUSER,IMPDATE,IMPUSER,INPTID,EXPDATE,MESSAGE,INVENTORY,INVFLAG,BOXFLAG,GVFLAG,MEMO1,MEMO2,GVFLAGDATE,WHSPOS,ISMATCH,HOSADDRCODE,WMSQTY,CARDNO,PRESCRIPTNO,PATIENTNAME,IDCARDNO,GENDER,PATIENTADDRESS,PATIENTPHONE,METHODDESC,PATTERN,BATCHORDER,PROCESSSTATUS,YBKH,JGZH,XSZH,JZZH,SBKH,APPMSG,HEADERID,ISPRINT,CHANGEMESS,EXECUTENO,EXECUTEDATE,RELEASEDATE,EXPSEQ,BLSOURCE,ISCHARGE,ISGETPRES,RTLPRC,AREACODE,UPLOADIMG,LOTNO,ENDDATE,ISPOS,SQRUID,SQRDATA,SQRDATE,SQREXPFLAG,SFEXFLAG,JYEXFLAG,SALTYPE,FEETYPE,DTLLINES,SENDACCAMOUNT,SENDPAYMENT,UPDATETIME,UPDATEUSER,SHIPPERID,ALLOCATIONBILL,OTHERSUPPLIERS,PROVINCE,CITY,HOSMSUNITNO,REALNAME,DEPARTMENT,TOTALAMOUNT,DIAGNOSERESULT,AGE,COMMITTEE,DISTRICT,REALPHONE,REALADDRESS,DIGITALTECHFLAG,DIGITALTECHDATE,EXPRESSTRADENO,STORECODE,NEWSUPPLIERID,DELIVERYCOMPANY,STORENAME,STOREADDRESS,CONTRACTNO,CONTRACTROWS,CONTRACTAUROWS,CONTRACTNOAUROWS,SENDPAYMENTFLAG,ORDERTYPE,CARRIERPAYTYPE,GDPAYTYPE,RECEIPTNO,CONTRACTGOODSROWS,DEALMSUNITNO,AUROWS,SETTLEMENT,ISINSURED,CONTRACTAMOUNT,ISSCAN,SCANEXPFLAG,SCANEXPDATE,BOOKTIME,IWMSFLAG,IWMSDATE) VALUES (:C67365,:C67366,:C67367,:C67368,:C67369,:C67370,:C67371,:C67372,:C67373,:C67374,:C67375,:C67376,:C67377,:C67378,:C67379,:C67380,:C67381,:C67382,:C67383,:C67384,:C67385,:C67386,:C67387,:C67388,:C67389,:C67390,:C67391,:C67392,:C67393,:C67394,:C67395,:C67396,:C67397,:C67398,:C67399,:C67400,:C67401,:C67402,:C67403,:C67404,:C67405,:C67406,:C67407,:C67408,:C67409,:C67410,:C67411,:C67412,:C67413,:C67414,:C67415,:C67416,:C67417,:C67418,:C67419,:C67420,:C67421,:C67422,:C67423,:C67424,:C67425,:C67426,:C67427,:C67428,:C67429,:C67430,:C67431,:C67432,:C67433,:C67434,:C67435,:C67436,:C67437,:C67438,:C67439,:C67440,:C67441,:C67442,:C67443,:C67444,:C67445,:C67446,:C67447,:C67448,:C67449,:C67450,:C67451,:C67452,:C67453,:C67454,:C67455,:C67456,:C67457,:C67458,:C67459,:C67460,:C67461,:C67462,:C67463,:C67464,:C67465,:C67466,:C67467,:C67468,:C67469,:C67470,:C67471,:C67472,:C67473,:C67474,:C67475,:C67476,:C67477,:C67478,:C67479,:C67480,:C67481,:C67482,:C67483,:C67484,:C67485,:C67486,:C67487,:C67488,:C67489,:C67490,:C67491,:C67492,:C67493,:C67494,:C67495,:C67496,:C67497,:C67498,:C67499); armd(rct):=SQL%ROWCOUNT; rmd:=rmd+SQL%ROWCOUNT; aecd(rct):=0; EXCEPTION WHEN OTHERS THEN armd(rct):=0; aecd(rct):=SQLCODE; aem(rct):=SQLERRM; end; :rmd:=rmd; :aecd:=aecd; :aem:=aem; :armd:=armd; END;

和第一次SQL 结构相同,最后一个绑定变量达到::C67499,因此总数为:67499 + 1 = 67500,500 × 135 = 67500。

两次都超过 65535。

故障 SQL_ID INSERT 数量 每条 Bind Bind 总数
第一次 dc57bu1ymdjzx 486 135 65610
第二次 58621xsd5yjy8 500 135 67500

这个现象与 Oracle Bug 12578873 的描述一致:单个 PL/SQL 执行单元使用超过 65535 个绑定变量时,可能在 opiaba 路径发生异常,并进一步引发 ORA-07445、ORA-00600 甚至实例 Crash。

故障链路如下:

TongYu.Task.Manager.exe | | 批量写入 SCM_PURBILL v 单个 BEGIN...END 拼接 486/500 条 INSERT | | 135 bind / row v 65610 / 67500 个 bind | v ORA-07445 [opiaba()+639] | v ORA-00600 [17147]/[17148]/[kghfrh:ds] | v PMON terminating instance

四、Patch 12578873 实施

MOS 文档 1466343.1 对应的 One-off Patch 为:p12578873_112040_Linux-x86-64.zip

补丁 README 明确写明:

Oracle Database 11g Release 11.2.0.4.0 PLSQL Patch for Bug# 12578873 for Linux-x86-64 Platforms 12578873: INSTANCE CRASH WITH ORA-7445 [OPIABA()+784] WHEN USING MORE THAN 65535 BINDS

与本次环境和故障现象完全匹配。

4.1 升级 OPatch

原 OPatch 版本为:11.2.0.3.4,而 README 要求至少:11.2.0.3.5

先使用 Patch 6880880 更新 OPatch:

[oracle@gyl-sqsy-db ~]$ unzip -o -q p6880880_112000_Linux-x86-64.zip -d $ORACLE_HOME [oracle@gyl-sqsy-db ~]$ export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH [oracle@gyl-sqsy-db ~]$ opatch version OPatch Version: 11.2.0.3.44 OPatch succeeded. [oracle@gyl-sqsy-db ~]$

同时检查 README 要求的系统工具:

[oracle@gyl-sqsy-db ~]$ which make /usr/bin/make [oracle@gyl-sqsy-db ~]$ which ar /usr/bin/ar [oracle@gyl-sqsy-db ~]$ which ld /usr/bin/ld [oracle@gyl-sqsy-db ~]$ which nm /usr/bin/nm [oracle@gyl-sqsy-db ~]$

均正常存在。

4.2 检查补丁冲突

当前 Oracle Home 原本没有安装其他 Interim Patch。进入补丁目录检查冲突如下:

[oracle@gyl-sqsy-db ~]$ cd /home/oracle/12578873 [oracle@gyl-sqsy-db 12578873]$ opatch prereq CheckConflictAgainstOHWithDetail -ph ./ Oracle Interim Patch Installer version 11.2.0.3.44 Copyright (c) 2026, Oracle Corporation. All rights reserved. PREREQ session Oracle Home : /u01/app/oracle/product/11.2.0/db_1 Central Inventory : /u01/app/oraInventory from : /u01/app/oracle/product/11.2.0/db_1/oraInst.loc OPatch version : 11.2.0.3.44 OUI version : 11.2.0.4.0 Log file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2026-09-28_08-52-03AM_1.log Invoking prereq "checkconflictagainstohwithdetail" Prereq "checkConflictAgainstOHWithDetail" passed. OPatch succeeded. [oracle@gyl-sqsy-db 12578873]$

说明 Patch 12578873 与当前 Oracle Home 没有冲突。

4.3 停止数据库和监听

正式安装前先做 checkpoint,正常停库:

SQL> alter system checkpoint; System altered. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL>

停止监听:

[oracle@gyl-sqsy-db 12578873]$ lsnrctl stop LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 28-SEP-2026 09:41:09 Copyright (c) 1991, 2013, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=gyl-sqsy-db)(PORT=1521))) The command completed successfully [oracle@gyl-sqsy-db 12578873]$

确认数据库和 listener 进程均已退出:

[oracle@gyl-sqsy-db 12578873]$ ps -ef | grep ora_ | grep sqsydb | grep -v grep [oracle@gyl-sqsy-db 12578873]$ ps -ef | grep tnslsnr | grep -v grep [oracle@gyl-sqsy-db 12578873]$

均无输出。

4.4 正式安装补丁

确认当前目录,打补丁如下:

[oracle@gyl-sqsy-db 12578873]$ opatch apply Oracle Interim Patch Installer version 11.2.0.3.44 Copyright (c) 2026, Oracle Corporation. All rights reserved. Oracle Home : /u01/app/oracle/product/11.2.0/db_1 Central Inventory : /u01/app/oraInventory from : /u01/app/oracle/product/11.2.0/db_1/oraInst.loc OPatch version : 11.2.0.3.44 OUI version : 11.2.0.4.0 Log file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2026-09-28_09-41-52AM_1.log Verifying environment and performing prerequisite checks... OPatch continues with these patches: 12578873 Do you want to proceed? [y|n] y User Responded with: Y All checks passed. Please shutdown Oracle instances running out of this ORACLE_HOME on the local system. (Oracle Home = '/u01/app/oracle/product/11.2.0/db_1') Is the local system ready for patching? [y|n] y User Responded with: Y Backing up files... Applying interim patch '12578873' to OH '/u01/app/oracle/product/11.2.0/db_1' Patching component oracle.precomp.common, 11.2.0.4.0... Patching component oracle.rdbms.rsf, 11.2.0.4.0... Patching component oracle.rdbms.rman, 11.2.0.4.0... Patching component oracle.rdbms, 11.2.0.4.0... Patch 12578873 successfully applied. Log file location: /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2026-09-28_09-41-52AM_1.log OPatch succeeded. [oracle@gyl-sqsy-db 12578873]$ opatch lsinventory Oracle Interim Patch Installer version 11.2.0.3.44 Copyright (c) 2026, Oracle Corporation. All rights reserved. Oracle Home : /u01/app/oracle/product/11.2.0/db_1 Central Inventory : /u01/app/oraInventory from : /u01/app/oracle/product/11.2.0/db_1/oraInst.loc OPatch version : 11.2.0.3.44 OUI version : 11.2.0.4.0 Log file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2026-09-28_09-42-28AM_1.log Lsinventory Output file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory2026-09-28_09-42-28AM.txt -------------------------------------------------------------------------------- Local Machine Information:: Hostname: gyl-sqsy-db ARU platform id: 226 ARU platform description:: Linux x86-64 Installed Top-level Products (1): Oracle Database 11g 11.2.0.4.0 There are 1 products installed in this Oracle Home. Interim patches (1) : Patch 12578873 : applied on Mon Sep 28 09:42:07 CST 2026 Unique Patch ID: 17885707 Created on 27 Oct 2014, 05:06:22 hrs PST8PDT Bugs fixed: 12578873 -------------------------------------------------------------------------------- OPatch succeeded. [oracle@gyl-sqsy-db 12578873]$

4.5 验证补丁

执行如下:

[oracle@gyl-sqsy-db 12578873]$ opatch lsinventory -detail \ > | tee /home/oracle/patch_backup_12578873/lsinventory_after.txt Oracle Interim Patch Installer version 11.2.0.3.44 Copyright (c) 2026, Oracle Corporation. All rights reserved. Oracle Home : /u01/app/oracle/product/11.2.0/db_1 Central Inventory : /u01/app/oraInventory from : /u01/app/oracle/product/11.2.0/db_1/oraInst.loc OPatch version : 11.2.0.3.44 OUI version : 11.2.0.4.0 Log file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2026-09-28_09-42-50AM_1.log Lsinventory Output file location : /u01/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory2026-09-28_09-42-50AM.txt -------------------------------------------------------------------------------- Local Machine Information:: Hostname: gyl-sqsy-db ARU platform id: 226 ARU platform description:: Linux x86-64 Installed Top-level Products (1): Oracle Database 11g 11.2.0.4.0 There are 1 products installed in this Oracle Home. Installed Products (136): Agent Required Support Files 10.2.0.4.5 Assistant Common Files 11.2.0.4.0 Bali Share 1.1.18.0.0 Buildtools Common Files 11.2.0.4.0 Character Set Migration Utility 11.2.0.4.0 Cluster Verification Utility Common Files 11.2.0.4.0 Database Configuration and Upgrade Assistants 11.2.0.4.0 Database SQL Scripts 11.2.0.4.0 Database Workspace Manager 11.2.0.4.0 Deinstallation Tool 11.2.0.4.0 Enterprise Edition Options 11.2.0.4.0 Enterprise Manager Agent 10.2.0.4.5 Enterprise Manager Agent Core Files 10.2.0.4.5 Enterprise Manager Common Core Files 10.2.0.4.5 Enterprise Manager Common Files 10.2.0.4.5 Enterprise Manager Database Plugin -- Agent Support 11.2.0.4.0 Enterprise Manager Database Plugin -- Repository Support 11.2.0.4.0 Enterprise Manager Grid Control Core Files 10.2.0.4.5 Enterprise Manager plugin Common Files 11.2.0.4.0 Enterprise Manager Repository Core Files 10.2.0.4.5 Exadata Storage Server 11.2.0.1.0 Expat libraries 2.0.1.0.1 Generic Connectivity Common Files 11.2.0.4.0 HAS Common Files 11.2.0.4.0 HAS Files for DB 11.2.0.4.0 Installation Common Files 11.2.0.4.0 Installation Plugin Files 11.2.0.4.0 Installer SDK Component 11.2.0.4.0 JAccelerator (COMPANION) 11.2.0.4.0 Java Development Kit 1.5.0.51.10 LDAP Required Support Files 11.2.0.4.0 OLAP SQL Scripts 11.2.0.4.0 Oracle 11g Warehouse Builder Required Files 11.2.0.4.0 Oracle Advanced Security 11.2.0.4.0 Oracle Application Express 11.2.0.4.0 Oracle Call Interface (OCI) 11.2.0.4.0 Oracle Clusterware RDBMS Files 11.2.0.4.0 Oracle Code Editor 1.2.1.0.0I Oracle Configuration Manager 10.3.8.1.0 Oracle Configuration Manager Client 10.3.2.1.0 Oracle Configuration Manager Deconfiguration 10.3.1.0.0 Oracle Containers for Java 11.2.0.4.0 Oracle Core Required Support Files 11.2.0.4.0 Oracle Data Mining RDBMS Files 11.2.0.4.0 Oracle Database 11g 11.2.0.4.0 Oracle Database 11g 11.2.0.4.0 Oracle Database 11g Multimedia Files 11.2.0.4.0 Oracle Database Deconfiguration 11.2.0.4.0 Oracle Database Gateway for ODBC 11.2.0.4.0 Oracle Database User Interface 2.2.13.0.0 Oracle Database Utilities 11.2.0.4.0 Oracle Database Vault J2EE Application 11.2.0.4.0 Oracle Database Vault option 11.2.0.4.0 Oracle DBCA Deconfiguration 11.2.0.4.0 Oracle Display Fonts 9.0.2.0.0 Oracle Enterprise Manager Console DB 11.2.0.4.0 Oracle Extended Windowing Toolkit 3.4.47.0.0 Oracle Globalization Support 11.2.0.4.0 Oracle Globalization Support 11.2.0.4.0 Oracle Help For Java 4.2.9.0.0 Oracle Help for the Web 2.0.14.0.0 Oracle Ice Browser 5.2.3.6.0 Oracle Internet Directory Client 11.2.0.4.0 Oracle Java Client 11.2.0.4.0 Oracle JDBC Server Support Package 11.2.0.4.0 Oracle JDBC/OCI Instant Client 11.2.0.4.0 Oracle JDBC/THIN Interfaces 11.2.0.4.0 Oracle JFC Extended Windowing Toolkit 4.2.36.0.0 Oracle JVM 11.2.0.4.0 Oracle Label Security 11.2.0.4.0 Oracle LDAP administration 11.2.0.4.0 Oracle Locale Builder 11.2.0.4.0 Oracle Message Gateway Common Files 11.2.0.4.0 Oracle Multimedia 11.2.0.4.0 Oracle Multimedia Annotator 11.2.0.4.0 Oracle Multimedia Client Option 11.2.0.4.0 Oracle Multimedia Java Advanced Imaging 11.2.0.4.0 Oracle Multimedia Locator 11.2.0.4.0 Oracle Multimedia Locator RDBMS Files 11.2.0.4.0 Oracle Net 11.2.0.4.0 Oracle Net Listener 11.2.0.4.0 Oracle Net Required Support Files 11.2.0.4.0 Oracle Net Services 11.2.0.4.0 Oracle Netca Client 11.2.0.4.0 Oracle Notification Service 11.2.0.3.0 Oracle Notification Service (eONS) 11.2.0.4.0 Oracle ODBC Driver 11.2.0.4.0 Oracle ODBC Driverfor Instant Client 11.2.0.4.0 Oracle OLAP 11.2.0.4.0 Oracle OLAP API 11.2.0.4.0 Oracle OLAP RDBMS Files 11.2.0.4.0 Oracle One-Off Patch Installer 11.2.0.3.4 Oracle Partitioning 11.2.0.4.0 Oracle Programmer 11.2.0.4.0 Oracle Quality of Service Management (Client) 11.2.0.4.0 Oracle RAC Deconfiguration 11.2.0.4.0 Oracle RAC Required Support Files-HAS 11.2.0.4.0 Oracle Real Application Testing 11.2.0.4.0 Oracle Recovery Manager 11.2.0.4.0 Oracle Security Developer Tools 11.2.0.4.0 Oracle Spatial 11.2.0.4.0 Oracle SQL Developer 11.2.0.4.0 Oracle Starter Database 11.2.0.4.0 Oracle Text 11.2.0.4.0 Oracle Text Required Support Files 11.2.0.4.0 Oracle UIX 2.2.24.6.0 Oracle Universal Connection Pool 11.2.0.4.0 Oracle Universal Installer 11.2.0.4.0 Oracle USM Deconfiguration 11.2.0.4.0 Oracle Wallet Manager 11.2.0.4.0 Oracle XML Development Kit 11.2.0.4.0 Oracle XML Query 11.2.0.4.0 Parser Generator Required Support Files 11.2.0.4.0 Perl Interpreter 5.10.0.0.2 Perl Modules 5.10.0.0.1 PL/SQL 11.2.0.4.0 PL/SQL Embedded Gateway 11.2.0.4.0 Platform Required Support Files 11.2.0.4.0 Precompiler Common Files 11.2.0.4.0 Precompiler Required Support Files 11.2.0.4.0 Provisioning Advisor Framework 10.2.0.4.3 RDBMS Required Support Files 11.2.0.4.0 RDBMS Required Support Files for Instant Client 11.2.0.4.0 RDBMS Required Support Files Runtime 11.2.0.4.0 regexp 2.1.9.0.0 Required Support Files 11.2.0.4.0 Sample Schema Data 11.2.0.4.0 Secure Socket Layer 11.2.0.4.0 SQL*Plus 11.2.0.4.0 SQL*Plus Files for Instant Client 11.2.0.4.0 SQL*Plus Required Support Files 11.2.0.4.0 SQLJ Runtime 11.2.0.4.0 SSL Required Support Files for InstantClient 11.2.0.4.0 XDK Required Support Files 11.2.0.4.0 XML Parser for Java 11.2.0.4.0 XML Parser for Oracle JVM 11.2.0.4.0 There are 136 products installed in this Oracle Home. Interim patches (1) : Patch 12578873 : applied on Mon Sep 28 09:42:07 CST 2026 Unique Patch ID: 17885707 Created on 27 Oct 2014, 05:06:22 hrs PST8PDT Bugs fixed: 12578873 Files Touched: ins_precomp.mk --> ORACLE_HOME/precomp/lib/proc /ph1tok.o --> ORACLE_HOME/lib/libpls11.a /ph1tok_pic.o --> ORACLE_HOME/lib/libpls11_pic.a ins_rdbms.mk --> ORACLE_HOME/rdbms/lib/irman ins_rdbms.mk --> ORACLE_HOME/rdbms/lib/ioracle Patch Location in Inventory: /u01/app/oracle/product/11.2.0/db_1/inventory/oneoffs/12578873 Patch Location in Storage area: /u01/app/oracle/product/11.2.0/db_1/.patch_storage/12578873_Oct_27_2014_05_06_22 -------------------------------------------------------------------------------- OPatch succeeded. [oracle@gyl-sqsy-db 12578873]$

该补丁 README 没有要求执行 datapatch、catbundle.sql 或其他 post-install SQL,因此二进制补丁完成后直接启动服务即可。

4.6 启动并验证数据库

先启动 listener:

[oracle@gyl-sqsy-db 12578873]$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 28-SEP-2026 09:42:39

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Starting /u01/app/oracle/product/11.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.4.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/gyl-sqsy-db/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=gyl-sqsy-db)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=gyl-sqsy-db)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                28-SEP-2026 09:42:39
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/gyl-sqsy-db/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=gyl-sqsy-db)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
[oracle@gyl-sqsy-db 12578873]$ 

再启动数据库:

[oracle@gyl-sqsy-db 12578873]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Mon Sep 28 09:42:54 2026

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 2.1379E+10 bytes
Fixed Size                  2262656 bytes
Variable Size            2751465856 bytes
Database Buffers         1.8589E+10 bytes
Redo Buffers               36073472 bytes
Database mounted.
Database opened.
SQL> set lines 200 pages 100

select
    instance_name,
    status,
    database_status,
    startup_time
from v$instance;

select
    name,
    open_mode,
    log_mode
from v$database;SQL> SQL>   2    3    4    5    6
INSTANCE_NAME    STATUS       DATABASE_STATUS   STARTUP_TIME
---------------- ------------ ----------------- -------------------
sqsydb           OPEN         ACTIVE            2026-09-28 09:42:56

SQL> SQL>   2    3    4    5

NAME      OPEN_MODE            LOG_MODE
--------- -------------------- ------------
SQSYDB    READ WRITE           ARCHIVELOG

SQL> 

监听注册正常:

[oracle@gyl-sqsy-db 12578873]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 28-SEP-2026 09:43:44

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=gyl-sqsy-db)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                28-SEP-2026 09:42:39
Uptime                    0 days 0 hr. 1 min. 4 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/gyl-sqsy-db/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=gyl-sqsy-db)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "sqsydb" has 1 instance(s).
  Instance "sqsydb", status READY, has 1 handler(s) for this service...
Service "sqsydbXDB" has 1 instance(s).
  Instance "sqsydb", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@gyl-sqsy-db 12578873]$ 

最后检查补丁实施后的 alert.log:

[oracle@gyl-sqsy-db 12578873]$ sed -n '/Mon Sep 28 09:42:56 2026/,$p' \ > /u01/app/oracle/diag/rdbms/sqsydb/sqsydb/trace/alert_sqsydb.log \ > | egrep "ORA-|terminat|Incident|Exception" [oracle@gyl-sqsy-db 12578873]$

无输出。

说明从补丁安装并重新启动数据库以后,没有新的:ORA-07445,ORA-00600,Incident,Exception,Instance terminated。

Patch 12578873 至此安装完成。

五、应用侧处理

数据库补丁解决的是 Oracle 内核在该场景下发生内存破坏、最终导致实例 Crash 的问题,但应用仍然不应该继续生成包含数万个独立绑定变量的匿名 PL/SQL 块。

当前每条 INSERT 有 135 个 bind,理论边界为:65535 / 135 = 485.44,也就是说,第 486 条已经超过这一范围。

临时处理可以把单批数量降到 400 条以内:400 × 135 = 54000

长期则建议修改批量写入方式。

对于 .NET + ODP.NET,可以使用 OracleCommand.ArrayBindCount;数据库侧也可以使用 PL/SQL FORALL。核心是复用一组绑定变量批量执行,而不是生成:

:C0 :C1 ... :C67499

这样一个包含数万个独立 bind 的匿名块。

六、总结

这次故障表面现象是 PMON 连续两次终止实例,但 PMON 并不是根因,只是 Oracle 检测到内部状态异常后的最终处理者。

真正有价值的排查思路,是从 alert.log 中向前追溯第一个异常,而不是停留在最后的 Instance terminated by PMON。本次通过 ORA-07445 [opiaba()+639] 找到对应 Server Process,再根据 trace 中的 SESSION ID、MODULE NAME 定位到 TongYu.Task.Manager.exe,最后进入 incident trace 获取 Current SQL Statement,确认应用在一个匿名 PL/SQL 块中批量拼接 486~500 条 SCM_PURBILL INSERT,绑定变量数量分别达到 65610 和 67500,超过 65535。

整个故障链路可以概括为:

alert.log 发现 ORA-07445 [opiaba] ↓ 定位异常 Server Process ↓ 通过 MODULE 找到 TongYu.Task.Manager.exe ↓ 检查 incident trace 中的 Current SQL ↓ 确认单个 PL/SQL 块 bind 数超过 65535 ↓ 匹配 Oracle Bug 12578873 ↓ 安装 One-off Patch 12578873 ↓ 应用侧同时降低批量大小并调整批处理方式

这类问题单纯重启数据库只能暂时恢复服务,不能消除触发条件。对于 ORA-07445、ORA-00600 这类内部错误,排查重点应放在最早出现异常的进程、对应 trace、incident trace 以及当时执行的 SQL,再结合 MOS Bug 和补丁信息确认最终处理方案。

本次数据库侧已完成 Patch 12578873 安装,应用侧也应避免继续生成包含数万个独立绑定变量的超大匿名 PL/SQL 块,从数据库和应用两个层面同时消除风险。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论