DevYudh Asked: 2012-11-13 01:26:15 +0800 CST2012-11-13 01:26:15 +0800 CST 2012-11-13 01:26:15 +0800 CST ORA-00905: 尝试创建同义词时缺少关键字 772 当我尝试创建这样的同义词时遇到问题: CREATE SYNONYM B2H.BILLING_USER_ACTIVITY@PACOMNET FOR [email protected]; 为什么会发生这种情况,我该如何纠正? oracle oracle-sql-developer 3 个回答 Voted Best Answer dezso 2012-11-13T06:02:49+08:002012-11-13T06:02:49+08:00 正如文档暗示的那样,您只能在当前数据库中创建同义词。所以@PACOMNET同义词名称中的第一个是不必要的(并导致错误)。您应该改为连接到PACOMNET数据库并运行 CREATE SYNONYM B2H.BILLING_USER_ACTIVITY FOR [email protected]; Vincent Malgrat 2012-11-13T04:31:57+08:002012-11-13T04:31:57+08:00 在 Oracle 中,不允许对远程数据库进行 DDL。一个可能的原因是无法在远程站点启动分布式事务提交(您不能COMMIT@remote),并且由于 DDL 语句包含提交,因此它们是不允许的。 你会得到一个ORA-02021with 其他 DDL 语句: 远程数据库上不允许 DDL 操作 您可以通过直接连接到远程数据库来创建数据库链接。 正如 askTom 讨论中所建议的,您还可以使用DBMS_JOB@remote或DBMS_SCHEDULER@remote创建可以启动 DDL 语句的不同远程事务。 miracle173 2012-11-13T09:52:52+08:002012-11-13T09:52:52+08:00 如果在 sqlplus (Oracle10.2, Solaris 5.10) 中输入语句,则会显示以下内容: SQL> 创建同义词 BILLING_USER_ACTIVITY@PACOMNET 2 FOR [email protected]; 创建 SYNONYM BILLING_USER_ACTIVITY@PACOMNET * 第 1 行的错误: ORA-00905: 缺少关键字 在语句之后打印失败行,在失败行下方有一个星号 (*) 标记 sql 解析器发现问题的字符。所以问题出在'@'字符上。'create synonym' 语句的语法图可以在手册中找到 创建[或替换][公共]同义词 [架构。] 同义词 FOR [ 模式。] 对象 [@dblink] ; 与“FOR”之后的对象规范相反,for 之前的同义词规范不包含“@dblinK”。 对于语法问题,您应该使用适当的工具(例如 sqlplus)来显示语句失败的错误的确切位置。
正如文档暗示的那样,您只能在当前数据库中创建同义词。所以
@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)来显示语句失败的错误的确切位置。