1. 程式人生 > >orabbix 啟動報錯 WARNING: Error while registering Oracle JDBC Diagnosability MBean.

orabbix 啟動報錯 WARNING: Error while registering Oracle JDBC Diagnosability MBean.

一. 報錯資訊如下:

[[email protected] conf]# /etc/init.d/orabbix start
Starting Orabbix service:
[[email protected] conf]# Jan 22, 2018 2:37:06 p.m. oracle.jdbc.driver.OracleDriver registerMBeans
WARNING: Error while registering Oracle JDBC Diagnosability MBean.
java.lang.NoSuchMethodError: method javax.management.StandardMBean.<init> with signature (Ljava.lang.Class;Z)V was not found.
   at oracle.jdbc.driver.OracleDiagnosabilityMBean.<init>(OracleDiagnosabilityMBean.java:34)
   at oracle.jdbc.driver.OracleDriver.registerMBeans(OracleDriver.java:360)
   at oracle.jdbc.driver.OracleDriver$1.run(OracleDriver.java:199)
   at java.security.AccessController.doPrivileged(libgcj.so.10)
   at oracle.jdbc.driver.OracleDriver.<clinit>(OracleDriver.java:195)
   at java.lang.Class.initializeClass(libgcj.so.10)
   at java.lang.Class.initializeClass(libgcj.so.10)
   at java.lang.Class.forName(libgcj.so.10)
   at org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS.setDriver(DriverAdapterCPDS.java:500)
   at com.smartmarmot.orabbix.Configurator.getConnection(Configurator.java:454)
   at com.smartmarmot.orabbix.Configurator.getConnections(Configurator.java:581)
   at com.smartmarmot.orabbix.Orabbixmon.run(Orabbixmon.java:91)
   at com.smartmarmot.orabbix.bootstrap.main(bootstrap.java:50)
Exception in thread "main" java.lang.NoClassDefFoundError: oracle.jdbc.driver.PhysicalConnection
   at java.lang.Class.initializeClass(libgcj.so.10)
   at java.lang.Class.initializeClass(libgcj.so.10)
   at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
   at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
   at java.sql.DriverManager.getConnection(libgcj.so.10)
   at java.sql.DriverManager.getConnection(libgcj.so.10)
   at org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS.getPooledConnection(DriverAdapterCPDS.java:205)
   at org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS.getPooledConnection(DriverAdapterCPDS.java:150)
   at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.testCPDS(InstanceKeyDataSource.java:836)
   at org.apache.commons.dbcp.datasources.SharedPoolDataSource.registerPool(SharedPoolDataSource.java:210)
   at org.apache.commons.dbcp.datasources.SharedPoolDataSource.getPooledConnectionAndInfo(SharedPoolDataSource.java:169)
   at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:701)
   at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:676)
   at com.smartmarmot.orabbix.Configurator.getConnection(Configurator.java:534)
   at com.smartmarmot.orabbix.Configurator.getConnections(Configurator.java:581)
   at com.smartmarmot.orabbix.Orabbixmon.run(Orabbixmon.java:91)
   at com.smartmarmot.orabbix.bootstrap.main(bootstrap.java:50)
Caused by: java.lang.ClassNotFoundException: java.sql.NClob not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:lib/commons-codec-1.4.jar,file:lib/commons-dbcp-1.4.jar,file:lib/commons-lang-2.5.jar,file:lib/commons-logging-1.1.1.jar,file:lib/commons-pool-1.5.4.jar,file:lib/hsqldb.jar,file:lib/log4j-1.2.15.jar,file:lib/ojdbc6.jar,file:./,file:./orabbix-1.2.3.jar], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
   at java.net.URLClassLoader.findClass(libgcj.so.10)
   at java.lang.ClassLoader.loadClass(libgcj.so.10)
   at java.lang.ClassLoader.loadClass(libgcj.so.10)
   at java.lang.VMClassLoader.defineClass(libgcj.so.10)
   at java.lang.ClassLoader.defineClass(libgcj.so.10)
   at java.security.SecureClassLoader.defineClass(libgcj.so.10)
   at java.net.URLClassLoader.findClass(libgcj.so.10)
   at java.lang.ClassLoader.loadClass(libgcj.so.10)
   at java.lang.ClassLoader.loadClass(libgcj.so.10)
   at java.lang.Class.forName(libgcj.so.10)
   at java.lang.Class.initializeClass(libgcj.so.10)
   ...16 more
^C
[

[email protected] conf]# 

二. 問題分析:

這個錯看起來是JDK的問題,升級到1.8還是沒作用

但orabbix日誌開起來也挺正常的:

2018-01-22 15:42:11,176 [main] INFO  Orabbix - Starting Orabbix Version 1.2.3 
 2018-01-22 15:42:11,211 [main] INFO  Orabbix - Orabbix started with pid:GNU libgcj 4.4.7 20120313 (Red Hat 4.4.7-17) [147558
 2018-01-22 15:42:11,211 [main] INFO  Orabbix - PidFile -> ./logs/orabbix.pid
 2018-01-22 15:42:11,277 [main] INFO  Orabbix - DB Pool created:

[email protected]e
 2018-01-22 15:42:11,277 [main] INFO  Orabbix - URL=jdbc:oracle:thin:@10.195.xxx.x:1521:odcl
 2018-01-22 15:42:11,277 [main] INFO  Orabbix - maxPoolSize=10
 2018-01-22 15:42:11,277 [main] INFO  Orabbix - maxIdleSize=1
 2018-01-22 15:42:11,277 [main] INFO  Orabbix - maxIdleTime=1800000ms
 2018-01-22 15:42:11,277 [main] INFO  Orabbix - poolTimeout=100
 2018-01-22 15:42:11,277 [main] INFO  Orabbix - timeBetweenEvictionRunsMillis=-1
 2018-01-22 15:42:11,277 [main] INFO  Orabbix - numTestsPerEvictionRun=3
 
三.問題解決:

直接執行run.sh檔案orabbix是可以起來的

sh /opt/orabbix/run.sh 

所以分析 /etc/init.d/orabbix的問題

發現 /etc/init.d/orabbix中有二處初始化:

# Source function library.
. /etc/rc.d/init.d/functions
# Get config.
. /etc/sysconfig/network

當執行了. /etc/rc.d/init.d/functions就會報錯

檢視發現應該是functions裡的

# Set up a default search path.
PATH="/sbin:/usr/sbin:/bin:/usr/bin"
export PATH

影響了JDK的環境變數,這行註釋就可以了