我正在进行一个迁移项目,需要将多个 Oracle 数据库模式导入到现有数据库中。这个要求带来了一个有趣的冲突,我现在有两个 dblinks同名:

  • 一个是私有(private) dblink,它使用帐户A 访问Foobar 数据库
  • 另一个是 public dblink 到同一个 Foobar 数据库,它使用帐户 B 进行访问

Global Names 设置为 true,因此我无法更改这些 dblinks 的名称。


我已经通过反复试验发现,当登录到拥有私有(private) dblink 的架构时,会发生以下情况:

SELECT *  
FROM table@foobar; 

将引用私有(private) dblink 而不是公共(public)的。但是对于我需要帐户 B 权限的情况,我不知道如何明确引用公共(public) dblink

有人知道我可以用来引用公共(public) @foobar 的语法吗?

请您参考如下方法:

来自 Oracle 文档。

Oracle first searches for a private database link in your own schema with the same name as the database link in the statement. Then, if necessary, it searches for a public database link with the same name.

我认为这无法以任何方式改变。不是我知道的或在文档中找到的。您可以创建公共(public)同义词,但仅当您需要使用 B 特定对象访问时才有效。无法为整个数据库链接创建同义词。

在 session 级别将 global names 转换为 False 并使用其他无效链接名称创建到 B 的新链接会不会更容易.如果您在 session 级别更改全局名称,则仅允许该 session 使用新链接。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!