1. DBLINK的介绍

Oracle在进行跨库访问时,可以创建DBLINK实现,比如要将UAT的表数据灌入开发环境,则可以使用UAT库为数据源,通过DBLINK实现将查出的数据灌入开发库。 简而言之就是在当前数据库中访问另一个数据库中的表中的数据

2. DBLINK的使用简介

2.1 权限问题

要想创建DBLINK,首先要检查当前用户是否具备权限。

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的创建和删除(实测)。

SELECT * FROM user_sys_privs WHERE PRIVILEGE LIKE UPPER('%UNLIMITED TABLESPACE%');

如果指定用户没有上面的几个权限,需要通过sys用户(这个充当管理员角色,有很大权限)赋予权限,你需要登陆sys用户,并在sys用户下执行以下语句:

GRANT CREATE PUBLIC DATABASE LINK , DROP PUBLIC DATABASE LINK TO hxapp;

用来登录到远程数据库的帐号必须有CREATE SESSION权限

2.2 创建DBLINK

创建时加不加PUBLIC关键字,会影响DBLINK的使用范围,加上PUBLIC关键字则所有用户都可以使用,否则只有当前用户或者更高权限的用户可以使用。

通过pl/sql developer图形化界面创建 等价于CREATE DATABASE LINK DBLINK_TEST_TO230

CONNECT TO hxapp IDENTIFIED BY hxapp

USING '3.1.11.230/cbsznckdb';

如果网络配置文件tnsnames.ora配置了连接信息,则可以使用如下语句实现:CREATE DATABASE LINK &dblink_name

CONNECT TO &db_name IDENTIFIED BY &db_passwd

USING '&db_sid';

如果网络配置文件tnsnames.ora未配置连接信息,则可以使用如下语句实现:

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

SELECT * FROM dba_db_links t;

查询当前用户下所有的DBLINK

SELECT * FROM user_db_links t;

2.4 删除DBLINK

如果创建的是一个public的DBLINK,删除时需要用

DROP PUBLIC DATABASE LINK &dblink_name;

如果创建的是一个private的DBLINK,删除时需要用

DROP DATABASE LINK &dblink_name;

3. DBLINK实际应用语句举例

--插入语句

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';

精彩内容

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。