博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

创建DBlink 详解及尚存疑问(DB LINK 连接正常后建立同义词后多个同义词不能正常查询)
===========================================================
创建DBlink 详解及尚存疑问(DB LINK 连接正常后建立同义词后多个同义词不能正常查询)
作者: moonsoft(http://moonsoft.itpub.net)
发表于: 2006.06.23 15:55
分类: Oracle基础/数据仓库/BI
出处: http://moonsoft.itpub.net/post/15182/125559
---------------------------------------------------------------

数据库之间的链接建立在DATABASE LINK上。要创建一个DB LINK,必须先在每个数据库服务器上设置链接字符串。


DB LINK 连接正常后建立同义词(多个)不能正常查询出记录

1、 链接字符串即服务名,首先在本地配置一个服务名,地址指向远程的数据库地址,服务名取为将来你要使用的数据库链名.

需要在创建dblink 的DB上配置好tnsname.ora , 把那个被连接的db信息加入进去:

TEST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.36.183)(PORT = 1524))

)

(CONNECT_DATA =

(SERVICE_NAME = test)

)

)

  


  

  2、创建数据库链接,

  进入系统管理员SQL>操作符下,运行命令:

  

  SQL>create public database link beijing connect to scott identified by tiger using 'tobeijing';

  格式:

create public database link erp_danzheng_test connect to user identified by password using 'SID';

  则创建了一个以scott用户和北京数据库的链接beijing,我们查询北京的scott数据:

  

  SQL>select * from emp@beijing;

  

  这样就可以把深圳和北京scott用户的数据做成一个整体来处理。

  为了建立之后经常删除的需要:

 

DROP PUBLIC DATABASE LINK erp_danzheng_test;

  3、建立同义词,为了使有关分布式操作更透明,ORACLE数据库里有同义词的对象synonym

  

  SQL>create synonym bjscottemp for emp@beijing;

  

  于是就可以用bjscottemp来替代带@符号的分布式链接操作emp@beijing。

  

create public synonym poh for po_headers_all@erp_danzheng_test;

create public synonym papf for per_all_people@erp_danzheng_test;

create public synonym pv for po_vendors@erp_danzheng_test;

  4、查看所有的数据库链接,进入系统管理员SQL>操作符下,运行命令:

  

  SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';

 

参考资料:

http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14231/ds_admin.htm#i1008271

 

DB LINK 连接正常后建立同义词不能正常查询出记录


STEP 1: 建立 db link

create public database link erp_danzheng_test connect to USER identified by PASSWORD using 'txcprod';

STEP2 查询:
SELECT poh.creation_date , papf.full_name, pv.vendor_name
FROM po_headers_all@erp_danzheng_test poh,
per_all_people_f@erp_danzheng_test papf ,
po_vendors@erp_danzheng_test pv
WHERE poh.segment1 = '20600041'
and pv.vendor_id=poh.vendor_id
and poh.agent_id=papf.person_id

查询出来一条记录,查询成功

STEP3 建立同义词

create synonym poh for po_headers_all@erp_danzheng_test;
create synonym papf for per_all_people@erp_danzheng_test;
create synonym pv for po_vendors@erp_danzheng_test;


STEP4: 用同义词的表名进行查询:

SELECT poh.creation_date , papf.full_name, pv.vendor_name
FROM poh,
papf ,
pv
WHERE poh.segment1 = '20600041'
and pv.vendor_id=poh.vendor_id
and poh.agent_id=papf.person_id


没有查出来那条记录!!!!

 

试试 public synonym --不行

加上用户名:

create synonym poh for user.po_headers_all@erp_danzheng_test;

再看看 --还是不行


但是,单独查询一条记录是可以的

select *
from poh
where poh.segment1='20600041'