背景:
数据库A:testa/testa SID=testa
数据库B:testb/testb SID=testb
?
需求:
数据库A想访问数据B的test表
?
分析:
1、在testa数据库中创建dblink
2、在A数据库创建test表同义词,这样A数据库就可以像访问自己的表一样访问B的test表
?
步骤:
1、在A数据库的tnsnames.ora中添加连接B数据库的连接字符串
db_B = --连接字符串
? (DESCRIPTION =
??? (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.10)(PORT = 1521)) -- B数据库IP
??? (CONNECT_DATA =
????? (SERVER = DEDICATED)
????? (SERVICE_NAME = testb) -- B数据库的SID
??? )
? )
2、以sys用户登录A数据库,并赋予testa用户创建dblink的权限
grant resource to testa;
grant creat database link to testa;
?
3、以testa用户登录A数据库,创建dblink
CREATE DATABASE LINK DBLink_B CONNECT TO testb IDENTIFIED BY testb USING 'db_B';
参数解释:
CREATE DATABASE LINK DBLink_B: 创建dblink,名称为DBLink_B
CONNECT TO testb : 连接到testb用户
IDENTIFIED BY testb:testb用户密码为testb
USING 'db_B':使用上面创建的数据库连接字符串
?
创建好以后可以使用下面的方式访问B数据库的test表:
select * form test@DBLink_B;
?
4、创建同义词,更方便
create or replace synonym test
? for test@DBLink_B;
?
现在A数据库可以直接访问test表了。
select * from test;
?
?
?