我们知道同一台数据库服务器中不同的schema查找某个表或其他对象,只要grant权限给相应的schema就行.但如果不同的数据库服务器之间怎么读取数据呢?
这就需要db link了.创建db link有两种方式.
1.已经配置本地服务的情况:
1.像创建其他数据库对象一样创建database link.
create database linklinknameTest connect touserArwen identified bypswArwenusing 'tnsnameArwen';
里面各个参数的意义:
linknameTest:db link的名字,和数据库表名一样,随便取一个就是.
userArwen:要连接的数据库用户名
pswArwen:要连接的数据库密码.
'tnsnameArwen' :在本地有个叫tnsnames.ora的文件.里面配置好的tns名字.tnsnames.ora里面的内容如下:
tnsnameArwen=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.30.40.50)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = arwen)
)
)
注意:里面的HOST只能用IP地址,不能用机器名.用机器名在其他情况连接数据库不会有问题,但不知道为啥在db link里有会问题.
2.创建好后使用:
比如要查找连接的数据库中的表emp.(注意:如果表中有BLOB这样比较长的字段使用db link查询时报错.不知道为啥啊)
select * from emp@linknameTestwhere empno=7788;
用法和一般查询类似.只要在表名后再@数据库连接名.
使用其他对象也一样,如视图,函数,存储过程.只要加个@后缀就行.
2.没配置本地服务的情况.
其实和第一种方法一样,只是把using后的tns名字换成tnsnames.ora文件里的内容就可以了.
create database link linknameTest connect to userArwen identified by pswArwenusing
'(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.30.40.50)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = arwen)
)
)';
补充:不管是哪种连接方法,如果想建立全局的link db.即创建好后所有的schema都能用.
必须要用system或sys用户登陆.然后像上面一样创建db link.只是要在database前加个public.
例如:create public database link linknameTestconnect touserArwen identified by pswArwen using 'tnsnameArwen';