dblink(Database Link)数据库链接顾名思义就是数据库的链接,当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。简而言之就是在当前数据库中访问另一个数据库中的表中的数据。
① 通过pl/sql developer图形化创建
② 通过sql语句创建
create database link link名称
connect to 对方数据库用户名 identified by 对方数据库用户密码
using 'ORCL'
备注:ORCL是数据库的名称,一般在C:\DevSuiteHome1\network\ADMIN下的tnsnames.ora中进行配置
③ 通过sql语句创建(和②的方式差不多,但是这种方法比较好,避免了本地配置)
create database link link名称
connect to 对方数据库用户名 identified by 对方数据库用户密码
using '(DESCRIPTION =(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)(HOST = 要连接的数据库所在服务器的IP地址)(PORT = 1521)))
(CONNECT_DATA =
(SERVICE_NAME = 要连接的数据库的在本地的服务名(即要连接的数据库的SID))))';
备注:using后面的内容就是C:\DevSuiteHome1\network\ADMIN下tnsnames.ora中的内容,取得是里面的具体内容,而不是用的别名,这种方式比上面一种好,不需在本地的tnsnames.ora文件中进行配置,直接将数据库放入,灵活性较强。
① 先确定用户是否有创建dblink的权限:
select * from user_sys_privs where privilege like upper('%DATABASE LINK%');
我的apps用户下的权限:
解释一下:
CREATE PUBLIC DATABASE LINK:表示所创建的dblink所有用户都可以使用
CREATE DATABASE LINK:表示所创建的dblink只能是创建者能使用,别的用户不可以使用
DROP PUBLIC DATABASE LINK : 表示所创建的dblink所用用户都可以删除
② 如果指定用户没有上面的几个权限,需要通过sys用户(这个充当管理员角色,有很大权限)赋予权限,你需要登陆sys用户,并在sys用户下执行以下语句:
grant CREATE PUBLIC DATABASE LINK , DROP PUBLIC DATABASE LINK to apps;
1. 连接成功后从所连接的数据库中取数的方法
select * from table_name(表名)@dblink(dblink名);
备注:只需在表名的后面加上"@DBLINK名字"即可。
2. 在当前数据库下查看所有的DBLINK的方法
select * from dba_db_links;
3. 删除当前数据库下的一个指定的DBLINK的方法
① 如果创建的是一个public的DBLINK,删除时需要用
drop public database link dblink(dblink名)
② 如果创建的是一个private的DBLINK,删除时需要用
drop database link dblink(dblink名)
4. 注意点
创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限;
用来登录到远程数据库的帐号必须有CREATE SESSION权限
1.要求两个账户
apps用户,密码:apps
core用户,密码:1234
2.用户apps(已有用户),创建core(需在sys用户中创建)用户
create user core identified by 1234
3.赋予core登陆权限(需在sys用户中赋权限)
grant create session to core
4. apps用户中查看是否有创建dblink的权限
select * from user_sys_privs where privilege like upper('%DATABASE LINK%') ;
得到如下权限:
5. 先在core表中创建一个表,并插入数据
创建student表:
create table student
( STUDENT_NO VARCHAR2(10) not null,
STUDENT_NAME VARCHAR2(20),
STUDENT_AGE NUMBER(2),
STUDENT_GENDER VARCHAR2(5));
student表中插入数据:
insert into student values ('s001','张三',23,'男');
insert into student NT values ('s002','李四',23,'男');
insert into student values ('s003','吴鹏',25,'男');
insert into student values ('s004','琴沁',20,'女');
6. 查看core用户中的student表
7. 在apps中创建dblink并执行
create public database link link2
connect to core identified by "1234"
using '(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=xxx.xxx.com)(PORT=1541))
(CONNECT_DATA=
(SERVICE_NAME=dedicated)
(INSTANCE_NAME=UAT)))'
8.在apps用户中查看core用户中的student表
Select * from student@LINK2
可以看到core中student的表
至此dblink就建立完成了,如有错误之处还请指出,谢谢各位!!!