[Oracle工程师手记] ORA-12850 错误的分析
查看 alert log, 确实看到了 ORA-12850 错误的信息。
NI cryptographic checksum mismatch error: 12599. VERSION INFORMATION: TNS for Linux: Version 12.1.0.2.0 - Production Oracle Bequeath NT Protocol Adapter for Linux: Version 12.1.0.2.0 - Production TCP/IP NT Protocol Adapter for Linux: Version 12.1.0.2.0 - Production Time: 29-MAR-2021 18:41:18 Tracing not turned on. Tns error struct: ns main err code: 12599 TNS-12599: TNS:cryptographic checksum mismatch ns secondary err code: 2526 nt main err code: 0 nt secondary err code: 0 nt OS err code: 0 Mon Mar 27 18:41:36 2021 Errors in file /opt/app/oracle/myorcl/trace/myorcl_m001_34933.trc: ORA-12850: cannot assign slaves to all specified instances: 2 required, 1 allocated Mon Mar 27 18:42:26 2021 *********************************************************************** NI cryptographic checksum mismatch error: 12599. *** VERSION INFORMATION: TNS for Linux: Version 12.1.0.2.0 - Production Oracle Bequeath NT Protocol Adapter for Linux: Version 12.1.0.2.0 - Production TCP/IP NT Protocol Adapter for Linux: Version 12.1.0.2.0 - Production Time: 29-MAR-2021 18:42:26 Tracing not turned on. Tns error struct: ns main err code: 12599 TNS-12599: TNS:cryptographic checksum mismatch ns secondary err code: 2526 nt main err code: 0 nt secondary err code: 0 nt OS err code: 0 Mon Mar 27 18:43:01 2021
看 trace 文件当时的输出内容,可以看到出现问题时,正在访问 GV$SQL_MONITOR 表。
<myorcl_m001_34933.trc> *** 2021-03-27 18:41:36.167 *** SESSION ID:(159.44654) 2021-03-27 18:41:36.167 *** CLIENT ID:() 2021-03-27 18:41:36.167 *** SERVICE NAME:(SYS$BACKGROUND) 2021-03-27 18:41:36.167 *** MODULE NAME:(MMON_SLAVE) 2021-03-27 18:41:36.167 *** CLIENT DRIVER:() 2021-03-27 18:41:36.167 *** ACTION NAME:(Automatic Report Flush) 2021-03-27 18:41:36.167 ORA-12850: cannot assign slaves to all specified instances: 2 required, 1 allocated Dump of memory from 0x0000000122533648 to 0x000000011568D38C 122533640 48544957 4E4F4D20 [WITH MON] 122533650 524F5449 5441445F 53412041 45532820 [ITOR_DATA AS (SE] 122533660 5443454C 534E4920 44495F54 454B202C [LECT INST_ID, KE] 122533670 4E202C59 28324C56 515F5850 44495343 [Y, NVL2(PX_QCSID] ...... 122533F50 44495F4E 4F524620 5647204D 4C515324 [N_ID FROM GV$SQL] 122533F60 4E4F4D5F 524F5449 314F4D20 45485720 [_MONITOR MO1 WHE] 122533F70 4D204552 492E314F 5F54534E 42204449 [RE MO1.INST_ID B]
但凡涉及到 GV$ 表,oracle 数据库都是要访问 RAC 各个节点上的内容。而在当时,DB 的 alert log 中,已经同时出现了多次的 TNS 错误,可以认为,此节点与其他节点或客户端无法通信,推测RAC的节点间通信可能是有问题的。因为这个原因,oracle 数据库无法访问所有的节点,所以 ORA-12850 错误就产生了。