溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle中怎么解決Exception in thread main問題

發(fā)布時間:2021-11-09 10:24:15 來源:億速云 閱讀:866 作者:iii 欄目:關系型數(shù)據(jù)庫

本篇內(nèi)容介紹了“Oracle中怎么解決Exception in thread main問題”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

此文章是在AIX操作系統(tǒng)正確安裝了CDE前提下進行進行說明的。

在安裝了Oracle的服務器上運行dbca 命令,報錯:

[oracle@stone_db ~]$ dbca

Exception in thread "main" 

[oracle@stone_db ~]$ 

[oracle@stone_db ~]$ export DISPLAY=1921.68.1.210:0.0

[oracle@stone_db ~]$ dbca

Exception in thread "main"  

其實不止是執(zhí)行dbca會報錯,只要執(zhí)行需要彈出圖形窗口的命令都會有這樣的問題。

大部分情況下我們會認為是DISPLAY變量的問題,但是也不盡然,我們查看一下dbca的log 日志: 

[oracle@stone_db scripts]$ cd $ORACLE_HOME/cfgtoollogs/dbca   

[oracle@stone_db dbca]$ ls

trace.log

[oracle@stone_db dbca]$ cat trace.log 

java.lang.UnsatisfiedLinkError:/home/Oracle_app_10204/jdk/jre/lib/i386/libawt.so: 

libXp.so.6: cannot openshared object file: No such file or directory

       at java.lang.ClassLoader$NativeLibrary.load(Native Method)

       at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1586)

       at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1503)

       at java.lang.Runtime.loadLibrary0(Runtime.java:788)

       at java.lang.System.loadLibrary(System.java:834)

       at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:50)

       at java.security.AccessController.doPrivileged(Native Method)

       at sun.awt.NativeLibLoader.loadLibraries(NativeLibLoader.java:38)

        atsun.awt.DebugHelper.<clinit>(DebugHelper.java:29)

       at java.awt.Component.<clinit>(Component.java:506)

       at oracle.sysman.assistants.util.wizard.WizardObject.<init>(WizardObject.java:64)

       at oracle.sysman.assistants.dbca.ui.DBCAWizard.<init>(DBCAWizard.java:425)

       at oracle.sysman.assistants.dbca.ui.UIHost.<init>(UIHost.java:214)

       at oracle.sysman.assistants.dbca.ui.InteractiveHost.<init>(InteractiveHost.java:54)

       at oracle.sysman.assistants.dbca.Dbca.getHost(Dbca.java:160)

       at oracle.sysman.assistants.dbca.Dbca.execute(Dbca.java:94)

       at oracle.sysman.assistants.dbca.Dbca.main(Dbca.java:180)

原因很明顯缺包:

libXp.so.6: cannot open shared object file:No such file or directory

驗證一下包:

[oracle@stone_db dbca]$ rpm -qa|grep libXp

libXpm-devel-3.5.5-3

libXpm-3.5.5-3

安裝libXp :

[root@stone_db Server]# ll

-rwxrwSrwx 1 root root 22996 2007-07-26libXp-1.0.0-8.1.el5.i386.rpm

-rwxrwSrwx 1 root root 15262 2007-07-26libXp-devel-1.0.0-8.1.el5.i386.rpm

[root@stone_db Server]# rpm -ivh libXp*.rpm

warning: libXp-1.0.0-8.1.el5.i386.rpm:Header V3 DSA signature: NOKEY, key ID 37017186

Preparing...               ########################################### [100%]

  1:libXp                  ########################################### [ 50%]

  2:libXp-devel            ########################################### [100%]

[root@stone_db Server]# rpm -qa|grep libXp

libXpm-devel-3.5.5-3

libXp-1.0.0-8.1.el5

libXpm-3.5.5-3

libXp-devel-1.0.0-8.1.el5

再次執(zhí)行dbca成功:

[root@stone_db ~]# xhost +

access control disabled, clients canconnect from any host

[root@stone_db ~]# su - oracle

[oracle@stone_db ~]$ export DISPLAY=192.168.1.210:0.0

[oracle@stone_db ~]$ dbca

另外一種情況就是不缺包,用oracle用戶直接登錄可以執(zhí)行dbca順利打開圖形窗口。用root登錄xshell然后執(zhí)行xhost +,

再切換su - oracle 改變用戶身份,結果執(zhí)行dbca不能打開圖形窗口。

用root登錄CDE,

bash-3.2# xhost + 

access control disabled, clients can connect from any host

bash-3.2# su - oracle

[oracle@aix275 ~]# dbca

DISPLAY not set.

Set DISPLAY environment variable, then re-run.

[oracle@aix275 ~]# who

root        tty0        Jul 08 06:32                     

root        pts/0       Jul 08 05:49     (192.168.1.210) 

oracle      pts/1       Jul 08 05:56     (192.168.1.210) 

root        pts/2       Jul 08 05:58     (192.168.1.210) 

root        dtremote    Jul 08 06:34     (192.168.1.210:0)

root        pts/3       Jul 08 06:34     (192.168.1.210:0.0)

root        pts/4       Jul 08 00:53     (192.168.1.210) 

[oracle@aix275 ~]# export DISPLAY=192.168.1.210:0.0

[oracle@aix275 ~]# dbca

正常打開圖形窗口。

但是在xshell下,執(zhí)行同樣步驟卻不能打開圖形窗口。

查看trace.log文件發(fā)現(xiàn)DISPLAY變量設置的不正確,不能使用192.168.1.210:0.0

[oracle@aix ~]# cat /database/product/10.2.0/db_1/cfgtoollogs/dbca/trace.log 

java.lang.InternalError: Can't connect to X11 window server using '192.168.1.210:0.0' as the 

value of the DISPLAY variable.

        at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)

        at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:175)

        at java.lang.Class.forName1(Native Method)

        at java.lang.Class.forName(Class.java:180)

        at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment

(GraphicsEnvironment.java:91)

        at java.awt.Font.initializeFont(Font.java:333)

        at java.awt.Font.<init>(Font.java:368)

        at oracle.ewt.lwAWT.LWComponent.<clinit>(Unknown Source)

        at oracle.sysman.assistants.util.wizard.WizardObject.<init>(WizardObject.java:64)

        at oracle.sysman.assistants.dbca.ui.DBCAWizard.<init>(DBCAWizard.java:425)

        at oracle.sysman.assistants.dbca.ui.UIHost.<init>(UIHost.java:214)

        at oracle.sysman.assistants.dbca.ui.InteractiveHost.<init>(InteractiveHost.java:54)

        at oracle.sysman.assistants.dbca.Dbca.getHost(Dbca.java:160)

        at oracle.sysman.assistants.dbca.Dbca.execute(Dbca.java:94)

        at oracle.sysman.assistants.dbca.Dbca.main(Dbca.java:180)

后來打開多個圖形終端,然后用who命令查看。

[root@aix /]# who

root        tty0        Jul 08 06:32                     

root        pts/0       Jul 08 05:49     (192.168.1.210) 

oracle      pts/1       Jul 08 05:56     (192.168.1.210) 

root        pts/2       Jul 08 05:58     (192.168.1.210) 

root        dtremote    Jul 08 06:34     (192.168.1.210:0)

root        pts/3       Jul 08 06:34     (192.168.1.210:0.0)

root        dtremote    Jul 08 00:53     (192.168.1.210:1) 

oracle      dtremote    Jul 08 06:44     (192.168.1.210:2) 

oracle      dtremote    Jul 08 06:51     (192.168.1.210:3)

      通過觀察不難發(fā)現(xiàn)一個規(guī)律,也就是第一個打開的圖形終端為IP:0,在里面執(zhí)行dbca彈出的圖形窗口為IP:0.0。

第二個打開的圖形窗口占用的終端序號為IP:1,在其內(nèi)部執(zhí)行dbca命令彈出窗口則為IP:1.0。后面打開的終端以此類推序號。

      那么我們打開的Xshell其實也是一個終端,只不過平時占用的是字符終端,當我們執(zhí)行dbca的時候會彈出圖形窗口,

因此這個時候也會占用一個圖形終端序號,經(jīng)上述推理,也就很容易在Xshell終端設置正確的DISPLAY參數(shù)了,

也就是看一下我們要打開的是占用第幾個圖形終端,假定為n,那么我們設置

DISPLAY參數(shù)值就為“打開終端所在計算機的IP:n-1.0”。

      那么回過頭來再想一下,為什么用oracle用戶直接登錄就不存在任何題呢,而用root用戶登錄再su到oracle用戶身份就出

現(xiàn)這個報錯呢。其實很簡單,我們不論用哪個用戶身份登錄到一個終端的時候執(zhí)行echo DISPLAY發(fā)現(xiàn)默認設置好了一個值就

是localhost:n.0,當我們切換用戶身份以后再執(zhí)行echo DISPLAY發(fā)現(xiàn)這個值不見了,此時就需要我們認為設定這個值了,指定

在哪個終端打開圖形窗口。

      回想一下網(wǎng)上的帖子設置的DISPLAY參數(shù)都是IP:0.0,也就是在打開的第一個圖形終端里設置的,或者是在沒有打開圖形

終端時在命令行終端里設置的情況。

“Oracle中怎么解決Exception in thread main問題”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI