发表于: 2006.01.13 23:34
分类: ORACLE
出处: http://yangtingkun.itpub.net/post/468/50611
---------------------------------------------------------------
一般情况下,不会有这种需求的产生,但是有时候可能确实会用到这种方式,比如在分布式系统中,访问所有对象都通过数据库链访问,从而屏蔽用户当前的位置。
如果直接建立和GLOBAL_NAME具有相同名称的数据库链会报错。
SQL> CONN YANGTK/YANGTK@DICSYS
已连接。
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
----------------------------------------------------
DICSYS.YANGTINGKUN
SQL> SELECT * FROM DBA_DB_LINKS;
未选定行
SQL> CREATE DATABASE LINK DICSYS.YANGTINGKUN CONNECT TO YANGTK IDENTIFIED BY YANGTK USING 'DICSYS';
CREATE DATABASE LINK DICSYS.YANGTINGKUN CONNECT TO YANGTK IDENTIFIED BY YANGTK USING 'DICSYS'
*
ERROR 位于第 1 行:
ORA-02082: 回送数据库链接必须具有连结限定词
必须在数据库链后面添加连结限定词,如下:
SQL> CREATE DATABASE LINK DICSYS.YANGTINGKUN@DICSYS
2 CONNECT TO YANGTK IDENTIFIED BY YANGTK USING 'DICSYS';
数据库链接已创建。
SQL> SELECT COUNT(*) FROM EMP;
COUNT(*)
----------
12
SQL> SELECT COUNT(*) FROM EMP@DICSYS.YANGTINGKUN@DICSYS;
COUNT(*)
----------
12
在测试过程中,发现一个奇怪的现象,就是在表名的后面直接跟当前数据库的全局名也是可以的,即使系统中没有创建任何数据库链。
SQL> SELECT COUNT(*) FROM EMP@DICSYS.YANGTINGKUN;
COUNT(*)
----------
12
虽然从道理上很容易理解,但是这种写法我以前还真没有碰到过,在我的印象中,文档上似乎也没有相应的记载。











