本篇内容介绍了“Oracle中怎么解决Exception in thread main问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
站在用户的角度思考问题,与客户深入沟通,找到银州网站设计与银州网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、成都网站建设、外贸网站建设、企业官网、英文网站、手机端网站、网站推广、域名申请、虚拟空间、企业邮箱。业务覆盖银州地区。
此文章是在AIX操作系统正确安装了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"
其实不止是执行dbca会报错,只要执行需要弹出图形窗口的命令都会有这样的问题。
大部分情况下我们会认为是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.
at java.awt.Component.
at oracle.sysman.assistants.util.wizard.WizardObject.
at oracle.sysman.assistants.dbca.ui.DBCAWizard.
at oracle.sysman.assistants.dbca.ui.UIHost.
at oracle.sysman.assistants.dbca.ui.InteractiveHost.
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
再次执行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用户直接登录可以执行dbca顺利打开图形窗口。用root登录xshell然后执行xhost +,
再切换su - oracle 改变用户身份,结果执行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下,执行同样步骤却不能打开图形窗口。
查看trace.log文件发现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.
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.
at oracle.ewt.lwAWT.LWComponent.
at oracle.sysman.assistants.util.wizard.WizardObject.
at oracle.sysman.assistants.dbca.ui.DBCAWizard.
at oracle.sysman.assistants.dbca.ui.UIHost.
at oracle.sysman.assistants.dbca.ui.InteractiveHost.
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)
通过观察不难发现一个规律,也就是第一个打开的图形终端为IP:0,在里面执行dbca弹出的图形窗口为IP:0.0。
第二个打开的图形窗口占用的终端序号为IP:1,在其内部执行dbca命令弹出窗口则为IP:1.0。后面打开的终端以此类推序号。
那么我们打开的Xshell其实也是一个终端,只不过平时占用的是字符终端,当我们执行dbca的时候会弹出图形窗口,
因此这个时候也会占用一个图形终端序号,经上述推理,也就很容易在Xshell终端设置正确的DISPLAY参数了,
也就是看一下我们要打开的是占用第几个图形终端,假定为n,那么我们设置
DISPLAY参数值就为“打开终端所在计算机的IP:n-1.0”。
那么回过头来再想一下,为什么用oracle用户直接登录就不存在任何题呢,而用root用户登录再su到oracle用户身份就出
现这个报错呢。其实很简单,我们不论用哪个用户身份登录到一个终端的时候执行echo DISPLAY发现默认设置好了一个值就
是localhost:n.0,当我们切换用户身份以后再执行echo DISPLAY发现这个值不见了,此时就需要我们认为设定这个值了,指定
在哪个终端打开图形窗口。
回想一下网上的帖子设置的DISPLAY参数都是IP:0.0,也就是在打开的第一个图形终端里设置的,或者是在没有打开图形
终端时在命令行终端里设置的情况。
“Oracle中怎么解决Exception in thread main问题”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!