当我尝试创建这样的同义词时遇到问题:
CREATE SYNONYM B2H.BILLING_USER_ACTIVITY@PACOMNET
FOR B2H.BILLING_USER_ACTIVITY@PACOMNET.US.ORACLE.COM;
为什么会发生这种情况,我该如何纠正?
当我尝试创建这样的同义词时遇到问题:
CREATE SYNONYM B2H.BILLING_USER_ACTIVITY@PACOMNET
FOR B2H.BILLING_USER_ACTIVITY@PACOMNET.US.ORACLE.COM;
为什么会发生这种情况,我该如何纠正?
正如文档暗示的那样,您只能在当前数据库中创建同义词。所以
@PACOMNET
同义词名称中的第一个是不必要的(并导致错误)。您应该改为连接到PACOMNET
数据库并运行在 Oracle 中,不允许对远程数据库进行 DDL。一个可能的原因是无法在远程站点启动分布式事务提交(您不能
COMMIT@remote
),并且由于 DDL 语句包含提交,因此它们是不允许的。你会得到一个
ORA-02021
with 其他 DDL 语句:您可以通过直接连接到远程数据库来创建数据库链接。
正如 askTom 讨论中所建议的,您还可以使用
DBMS_JOB@remote
或DBMS_SCHEDULER@remote
创建可以启动 DDL 语句的不同远程事务。如果在 sqlplus (Oracle10.2, Solaris 5.10) 中输入语句,则会显示以下内容:
在语句之后打印失败行,在失败行下方有一个星号 (*) 标记 sql 解析器发现问题的字符。所以问题出在'@'字符上。'create synonym' 语句的语法图可以在手册中找到
与“FOR”之后的对象规范相反,for 之前的同义词规范不包含“@dblinK”。
对于语法问题,您应该使用适当的工具(例如 sqlplus)来显示语句失败的错误的确切位置。