MY SOFTHOUSE
BOOKMARK
SOFTWARE
FRIEND
EMAIL
EDIT
SIGN OUT
HELP
 
  首页   资讯   网摘   软件下载   问知   动漫娱乐   软件供求   软件商城   论坛   
 资讯
 资讯 >> 数据库 >> 其他
email给朋友】 浏览字号:【 】 【打印】 【关闭窗口
相关资讯  
相关文摘  
相关软件  
 



专家建议如何建立包含数据库链的同义词

建立包含数据库链的同义词时需要额外的注意,否则很可能会出现问题。如果同义词指向当前用户的对象,那么不会存在任何问题:

SQL> CONN YANGTK/YANGTK@YTK已连接。
SQL> CREATE DATABASE LINK TEST2 CONNECT TO TEST IDENTIFIED BY TEST USING ’TEST2’;
数据库链接已创建。
SQL> SELECT COUNT(*) FROM TEST@TEST2;
COUNT(*)

----------

SQL> CREATE SYNONYM TEST FOR TEST@TEST2;
同义词已创建。
SQL> SELECT COUNT(*) FROM TEST;
COUNT(*)

----------

如果是其他用户建立同义词指向TEST@TEST2,则会出现问题:

SQL> CREATE USER ABC IDENTIFIED BY ABC;
用户已创建。
SQL> GRANT DBA TO ABC;
授权成功。
SQL> CONN ABC/ABC@YTK已连接。
SQL> CREATE SYNONYM TEST FOR YANGTK.TEST;
同义词已创建。
SQL> SELECT COUNT(*) FROM TEST;
SELECT COUNT(*) FROM TEST
*第 1 行出现错误:
ORA-02019: 未找到远程数据库的连接说明

导致这个问题的最根本原因是数据库链,由于数据库链格式的特殊性,决定了其无法通过SCHEMA.DBLINK_NAME的方式访问。所以,用户只能访问当前用户下的数据库链或PUBLIC数据库链。

而对于同义词而言,只是一个别名而已,实际执行的时候,仍然会替换成原本的名称,所以实际上执行的是:SELECT COUNT(*)FROM TEST@TEST2。

而当前用户并不包含数据库链,所以出现了上面的错误。这个时候需要在当前用户下建立同样的数据库链:

SQL> CREATE DATABASE LINK TEST2 CONNECT TO TEST IDENTIFIED BY TEST USING ’TEST2’;

数据库链接已创建。

SQL> SELECT COUNT(*) FROM TEST;

COUNT(*)

如果同义词指向的是全局数据库链则不会出现这个问题。

还有一点需要注意,如果当前用户已经存在一个同名的指向其他数据库的数据库链,或者用户人为的创建了一个这样的数据库链,就会造成错误的结果。

SQL> CREATE DATABASE LINK TEST2 CONNECT TO TEST IDENTIFIED BY TEST USING ’TESTDATA’;
数据库链接已创建。
SQL> SELECT COUNT(*) FROM TEST;
COUNT(*)

----------

SQL> SELECT COUNT(*) FROM YANGTK.TEST;
COUNT(*)

----------

SQL> CONN YANGTK/YANGTK@YTK已连接。
SQL> SELECT COUNT(*) FROM TEST;
COUNT(*)

表面上两个用户访问的是同一个对象,但是两个用户时间上访问的是不同的数据库,这里一定要小心。


出处: 赛迪网 日期: 2007-6-22 好: 一般: 差:
 
评论
  发表评论 投票: 一般
 
通知管理员(希望管理员根据你的评论修改软件信息)
  TrackBack
 
返回主页 | 关于我们 | 免责声明 | 联系广告| 读者投稿 | 友情链接 | 诚聘英才
  Copyright © 2004-2008 Forlink Technologies All Rights Reserved 
版权所有 时力科技 联系:客户服务中心 京ICP证030637号