使用DBLINK时Oracle出现错误

6

我正在使用jboss5.1.x,EJB3.0,JPA3。

我试图从连接到另一个数据库的视图中执行“select”查询,该视图通过dblink连接。

源数据库是Oracle 9,目标数据库是Oracle 8

我遇到了以下错误:

15:27:06,625 WARN [JDBCExceptionReporter] SQL Error: 24777, SQLState: 99999

15:27:06,625 ERROR [JDBCExceptionReporter] ORA-24777: use of non-migratable database link not allowed

在理解了我不能在使用XA时使用dblink后,我找到了解决此错误的方法。因此,我通过将dblink脚本更改为create shared database link来解决问题,具体如下:

 CREATE SHARED DATABASE LINK CONNECT TO IDENTIFIED BY AUTHENTICATED BY IDENTIFIED BY USING 

在测试环境中一切正常。

现在我将应用程序迁移到生产环境,在该环境中源数据库为Oracle 11,而目标数据库仍为Oracle 8

这次我使用的技巧不起作用了,我找不到解决方法。这是我现在遇到的新异常:

    Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
    at ....Caused by: java.sql.SQLException: ORA-01012: not logged on
    ORA-02063: preceding line from TO_VANTIVE

感谢您的帮助,Ray。
4个回答

4
ORA-01012: not logged on

看起来您没有正确配置新链接,由于数据库现在是11g,可能有区分大小写的密码,这应该是首要检查的事项。

如果远程模式具有区分大小写的密码,请在CREATE LINK中加引号。如下:

CREATE SHARED DATABASE LINK
CONNECT TO bob IDENTIFIED  BY "MyNewPasswd1"
AUTHENTICATED BY jim IDENTIFIED BY "JimsPass23" USING 'DB01';

告诉我Bob和"MyNewPasswd1"是指源数据库还是目标数据库?同样的问题也适用于"JimsPass23",'DB01'和cardinentals吗?谢谢。 - rayman
1
两个用户的密码和用户名都指的是远程数据库,而不是你创建链接的数据库,而是通过链接访问的数据库。 - user672739
您能直接登录远程数据库的两个用户吗?如果您无法登录,则其他错误很可能是由于此原因,因为您无法真正做任何事情。要么链接不起作用(例如,您是否为与数据库链接匹配的TNS条目)或存在某种权限问题(密码错误、帐户锁定、不允许连接或缺少用户)。 - user672739
如果我没有提到,我很抱歉,但是他们之间的常规dblink正常工作,只有当我尝试“CREATE SHARED DATABASE”时才会出现这个问题。 - rayman
好的,那么最有可能引起问题的是用户认证(或者实际上是您能够登录到生产环境)。您应该检查是否可以在SQL*Plus中连接并使用链接进行简单选择。 - user672739

1
我们在Weblogic上也遇到了同样的问题,解决方案是使用非 XA Oracle JDBC 驱动程序。

0
请确保您使用的DB链接是公共和共享的,如果DB链接不是公共和共享的,则会抛出异常ORA-24777:不允许使用非可迁移数据库链接。但是,如果您尝试直接在DB上运行相同的查询而不使用任何Java或XA事务,则可以正常工作。

0

我在这里遇到了与Oracle 11g (ORA-24777)相同的问题。我在我的模式中执行了一个单表和一个视图(由数据库链接创建)之间的连接。我在XA模式下通过JBoss数据源执行了所有操作。

为了使它正常工作,我不得不更改我的dblink视图的模式。在这种情况下,有一个精确的AUTHENTICATED BY子句非常重要,以避免出现"ORA-01012:未登录"的情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接