1. DBLINK的介绍
Oracle在进行跨库访问时,可以创建DBLINK实现,比如要将UAT的表数据灌入开发环境,则可以使用UAT库为数据源,通过DBLINK实现将查出的数据灌入开发库。简而言之就是在当前数据库中访问另一个数据库中的表中的数据
2. DBLINK的使用简介
2.1 权限问题
要想创建DBLINK,首先要检查当前用户是否具备权限。
1 | SELECT * FROM user_sys_privs WHERE PRIVILEGE LIKE UPPER ( '%DATABASE LINK%' ); |
CREATE PUBLIC DATABASE LINK:表示所创建的dblink所有用户都可以使用
CREATE DATABASE LINK:表示所创建的dblink只能是创建者能使用,别的用户不可以使用
DROP PUBLIC DATABASE LINK : 表示所创建的dblink所用用户都可以删除
如果没有以上权限,但是有UNLIMITED TABLESPACE权限,也可以实现DBLINK的创建和删除(实测)。
1 | SELECT * FROM user_sys_privs WHERE PRIVILEGE LIKE UPPER ( '%UNLIMITED TABLESPACE%' ); |
如果指定用户没有上面的几个权限,需要通过sys用户(这个充当管理员角色,有很大权限)赋予权限,你需要登陆sys用户,并在sys用户下执行以下语句:
1 | GRANT CREATE PUBLIC DATABASE LINK , DROP PUBLIC DATABASE LINK TO hxapp; |
用来登录到远程数据库的帐号必须有CREATE SESSION权限
2.2 创建DBLINK
创建时加不加PUBLIC关键字,会影响DBLINK的使用范围,加上PUBLIC关键字则所有用户都可以使用,否则只有当前用户或者更高权限的用户可以使用。
- 通过pl/sql developer图形化界面创建
等价于
123CREATE
DATABASE
LINK DBLINK_TEST_TO230
CONNECT
TO
hxapp IDENTIFIED
BY
hxapp
USING
'3.1.11.230/cbsznckdb'
;
- 如果网络配置文件tnsnames.ora配置了连接信息,则可以使用如下语句实现:
123
CREATE
DATABASE
LINK &dblink_name
CONNECT
TO
&db_name IDENTIFIED
BY
&db_passwd
USING
'&db_sid'
;
- 如果网络配置文件tnsnames.ora未配置连接信息,则可以使用如下语句实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | CREATE DATABASE LINK &dblink_name CONNECT TO &db_name IDENTIFIED BY &db_passwd USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = &ip) (PORT = 1521) ) ) (CONNECT_DATA = (SERVICE_NAME = &sid) ) )' ; --例: CREATE DATABASE LINK &dblink_name CONNECT TO &db_name IDENTIFIED BY &db_password USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = 3.1.11.230) (PORT = 1521) ) ) (CONNECT_DATA = (SERVICE_NAME = cbsznckdb) ) )' ; --简写 CREATE DATABASE LINK DBLINK_TEST_01 CONNECT TO hxapp IDENTIFIED BY hxapp USING '3.1.11.230/cbsznckdb' ; |
创建以后查询结果:
2.3 查询DBLINK
- 查询当前实例下所有的DBLINK
1 | SELECT * FROM dba_db_links t; |
- 查询当前用户下所有的DBLINK
1 | SELECT * FROM user_db_links t; |
2.4 删除DBLINK
- 如果创建的是一个public的DBLINK,删除时需要用
1 | DROP PUBLIC DATABASE LINK &dblink_name; |
- 如果创建的是一个private的DBLINK,删除时需要用
1 | DROP DATABASE LINK &dblink_name; |
3. DBLINK实际应用语句举例
1 2 3 4 5 6 7 8 9 10 11 | --插入语句 INSERT INTO test_01@DBLINK_TEST_01 t SELECT 'UntifA' FROM dual; --查询语句 SELECT * FROM test_01@DBLINK_TEST_01 t WHERE t. name = 'UntifA' ; --删除语句 DELETE FROM test_01@DBLINK_TEST_01 t WHERE t. name = 'UntifA' ; --更新语句 UPDATE test_01@DBLINK_TEST_01 t SET t. name = 'mengkiD~lufy' WHERE t. name = 'UntifA' ; |
总结
到此这篇关于Oracle跨库访问DBLINK使用以及实际应用的文章就介绍到这了,更多相关Oracle跨库访问DBLINK内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!