某些时候,需要关联不同的数据库进行数据查询、操作等。
在Oracle中,关联不同的数据库进行表关联,就要用到了数据库连接(DB link)。
创建DB link有两种方法:通过SQL语句创建,通过可视化界面创建(其实也是执行的SQL语句)。
1.通过PL/SQL Developer 工具建立
Name:此DBLINK的名字,你自己随便起。比如:DEMO
UserName:数据库登陆用户名
Password:数据库登陆密码
Database:(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DEMO)))
以上红色字体内容从以下地方可查询:\product\10.2.0\client_1\network\admin\tnsnames.or
- DEMO =
- (DESCRIPTION =
- (ADDRESS_LIST =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
- )
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = DEMO)
- )
- )
将上面的"DEMO="去掉,其余内容把换行符、空格去掉组成一个字符串即可。
然后点击“Apply”按钮即可。
建立好后,会在Database links菜单下显示。
测试DB link是否有效,执行语句:Select * from student@DEMO
其中,student为远程数据库的表名。
2.通过SQL语句创建
create public databaselink V_SERVICE_NAMEconnect to V_USERNAMEidentified
by V_PASSWORD using
'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.1)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=V_SERVICE_NAME)))';
其中:
V_SERVICE_NAME表示服务名,可通过SQL语句查询:SELECT * FROM GLOBAL_NAME; --查看服务名
V_USERNAME表示登录远程数据库的帐号
V_PASSWORD表示登录远程数据库的密码
PS:经本人测试,当tns字符串中带有换行符时,该DB link无效;当DB link名称不是服务名时,该DB link无效。
下列方案也可以实现:
-- Drop existing database link
drop public database link 名称;
drop public database link TO_TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM;
-- Create database link 密码要加上双引号
CREATE PUBLIC DATABASE LINK 名称 CONNECT TO 用户名 IDENTIFIED BY "密码" USING '192.168.0.1:1521/orcl'
CREATE
PUBLIC DATABASE LINK TO_TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM CONNECT TO
mdsp20 IDENTIFIED BY "mdsp20" USING '192.168.0.1:1521/orcl'
我的项目中用到的到个DBLINK:
当前数据库名为COLLECT_DB_SH,所建立的DBLINK的名称为DBLINKA27,
其中"数据库"这一项中的字符串为:(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.105)(PORT = 1521))
) (CONNECT_DATA =
(SERVICE_NAME = orcl)
))