用jpa 在oracle 数据库中访问另一个oracle数据库 ,如何实现,配置啥的,越详细越好

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用jpa 在oracle 数据库中访问另一个oracle数据库 ,如何实现,配置啥的,越详细越好相关的知识,希望对你有一定的参考价值。

在其中的一个数据库里面建一个DBLINK连到另外一个数据库!
这样最方便了!追问

我用 create public database link
  bylw connect to scott identified by tiger using 'mfana';
这个方法,不是很好使,执行select * from scott.test@bylw; 时 总报错,说是未找到远程数据库的链接说明, 还有,就是远程数据库的Id怎么设置啊

追答

加入有两个库,A库 B库,建一个重A库到B库的DB_LINK

首先要在A库上配置一个TNS连接到B库,
然后再建DB_LINK。

参考技术A 你的意思是你的项目要访问两个数据库吗追问

就是在我的项目里 用oracle数据库,但还要从另一个oracle数据库中 取数据,不知道 怎么搞

追答

我不知道你用的是什么JPA的实现,但是基本的思路是,先在persistence.xml中配置两个, 一个unit代表一个数据库,然后再在应用中根据这两个unit的名字创建两个EntitymanagerFactory, 然后再用这两个factory创建出来的EntityManager去操作数据库实体对象与数据库进行交互。

在 Oracle 存储过程中访问另一个用户的表

【中文标题】在 Oracle 存储过程中访问另一个用户的表【英文标题】:Accessing another user's table within an Oracle Stored Procedure 【发布时间】:2011-05-22 22:06:41 【问题描述】:

我正在编写一个存储过程来将数据从一个用户的表复制到另一个模式。基本上,它是一系列 INSERT .. SELECT 语句,例如:

INSERT INTO GESCHAEFTE
  SELECT *
    FROM TURAT03.GESCHAEFTE
   WHERE kong_nr = 1234;

这在从 sqlplus(或 TOAD 对我来说是 ;-))发出时效果很好,所以我知道我有足够的权限,但是当这是像这样的存储过程的一部分时:

CREATE OR REPLACE FUNCTION COPY_KONG
    (pKongNr IN NUMBER)
    RETURN NUMBER
    AUTHID CURRENT_USER
IS
BEGIN
   INSERT INTO GESCHAEFTE
      SELECT *
       FROM TURAT03.GESCHAEFTE
       WHERE kong_nr = pKongNr;
END;

我收到一个 Oracle 错误:

[Error] ORA-00942 (11: 22): PL/SQL: ORA-00942: table or view does not exist

如您所见,我已经插入了AUTHID,但无济于事。

我还能做什么?我的想法差不多到此为止了。

【问题讨论】:

【参考方案1】:

过程的所有者必须被授予特权以直接访问底层对象not through a role。要获得与您的过程相同的访问级别,请使用以下命令:

SET ROLE NONE;

要从过程中访问另一个表,您需要直接获得 SELECT 权限,而不是通过角色:

GRANT SELECT ON TURAT03.GESCHAEFTE TO <your_user>;

This article by Tom Kyte 包含附加信息。

【讨论】:

谢谢文森特,快速回答!我能够直接将选择授予我的用户,它现在可以工作了。 这是非常奇怪的行为,有没有人可以参考一下为什么会这样。 @reimius:我们只能猜测“为什么”,因为文档通常没有提到进行特定实现的原因。也许 Oracle 选择不维护过程和角色之间的依赖链接,因为它可能导致在修改角色时影响许多模式的大量反编译。 你的解释确实很有道理。

以上是关于用jpa 在oracle 数据库中访问另一个oracle数据库 ,如何实现,配置啥的,越详细越好的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库 ORA

Oracle数据库 ORA

oracle 10g 删除用户时提示ORA-00604 :递归SQL级别 1

mybatisplus oracle怎么查找其他用户表

Oracle中listener.ora配置文件无法修改

ORA_HASH函数使用的算法是什么?