怎样一条SQL语句,查询两个服务器??
有A,B,C三台机器,能互相ping
C装的是o9i客户端
A装的是oracle10g服务器端 数据库名:AAA
B装的是oracle9i服务器端 数据库名:BBB
想在C机器上,进行查询
想实现,如
select AAA.tab1.id , BBB.tab1.id from AAA.tab1 inner join BBB.tab1
where AAA.tab1.id=BBB.tab1.id
应该如何去配置服务器???
具体步骤详细些
请高手指教
------解决方案--------------------相同服务器下的不同数据库,好像用@dblink...;
但不同服务器的不同数据库,我先前也问过类似的问题,好像没有得到好的答案,
后来被csdn当过期贴给删了。我当初的问题是:如何通过一个服务器的db连接另一个服务器的db?
楼主再查查吧!理论上应该可以的。
------解决方案--------------------楼主的需求实际上需要在服务器上实现配置,再登录服务器进行查询。
具体是通过建立db_link来实现,步骤如下:
1、如果是登录A端服务器查询B端服务器的数据,需要在A端服务器配置tnsname,及在A端服务器建立连接B端服务器的db_link;
2、同理,如果是登录B端服务查询A端服务器的数据,需要在B端服务器配置tnsname,及在B端服务器建立连接B端服务器的db_link;
3、上述都建成功后,登录A端服务器,查询B端服务器数据:
select aaa.tab1.id,bbb.tab1.id from tab1 aaa,tab1@db_link_name bbb
where aaa.id=bbb.id
------解决方案--------------------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.查询系统参数global_name,如果为True,实例名必须同名;如果为False,则可以不同名
SQL> show parameters global_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
global_names boolean FALSE
3、创建数据库链接,
SQL> create public database link link_SID connect to user identified by password using 'SID ';
link_SID:连接名
user:目标数据库用户名
password:目标数据库密码
SID:目标数据库实例名
4.使用Link查询
SQL> select * from emp@beijing;
这样就可以把深圳和北京scott用户的数据做成一个整体来处理。
5、建立同义词,为了使有关分布式操作更透明,ORACLE数据库里有同义词的对象synonym
SQL> create synonym bjscottemp for emp@beijing;
于是就可以用bjscottemp来替代带@符号的分布式链接操作emp@beijing。
6、查看所有的数据库链接,进入系统管理员SQL> 操作符下,运行命令:
SQL> select owner,object_name from dba_objects where object_type= 'DATABASE LINK ';
7、查看数据库连接
sql> select owner, db_link from dba_db_links;
ower db_link
public TEST.US.ORACLE.COM
8、删除数据库连接先从第三步中查看数据库连接,取得其db_link的名称
sql> drop public database link TEST.US.ORACLE.COM
数据库连接巳丢弃
------解决方案--------------------dblink 创建和使用
create public database link AA
connect to USER
identified by PASSWORD
using 'aa_link '
select * from table@aa_link