时间:2021-07-01 10:21:17 帮助过:25人阅读
11gR2 官方文档参考
在创建数据库链接之后,可以通过在表,视图 或 PL / SQL 对象名称后加上 @dblink
,来访问其他数据库中的表、视图 或 PL / SQL对象;可以使用 SELECT 语句查询其他数据库中的表或视图,也可以使用 INSERT,UPDATE,DELETE 或 LOCK TABLE 语句操作远程表和视图
Oracle Net 必须安装在本地和远程 Oracle 数据库上
CONNECT TO user IDENTIFIED BY password
,则 dblink 使用指定的用户和密码连接CONNECT TO CURRENT_USER
,那么 dblink 将根据链接的使用范围与有效的用户连接如果省略这两个子句,则 dblink 将以本地连接的用户连接到远程数据库
在共享数据库链接中,源库的多个会话共享目标库上的同一个连接。一旦在目标库上建立了一个会话,该会话将从连接中解除关联,从而使该连接可用于源库上的另一个会话。为防止未经授权的会话试图通过 dblink 进行连接,在指定 SHARED 时还必须为授权使用数据库链接的用户指定 dblink_authentication
子句
dblink 的名字中可以使用句点 .
,所以 Oracle 数据库将整个字符串(比如 ralph.linktosales
)解释为数据库链接的名字,而不是 ralph 用户有一个数据库链接 linktosales
CONNECT TO 子句允许您指定要用于连接到远程数据库的用户和凭证(如果有)
但是,如果存储对象是调用者权限的函数,过程或包,则调用者的授权 ID 被用作远程用户的连接。例如,如果 dblink 出现在过程 scott.p(scott 创建的一个调用者权限过程),并且用户 Jane 调用过程 scott.p,然后 CURRENT_USER 是 jane,使用 Jane 的权限执行存储过程
使用固定用户数据库链接(fixed user database link)指定用于连接到远程数据库的用户名和密码。如果省略此子句,则 dblink 将使用连接到数据库的用户的用户名和密码,这称为连接用户数据库链接(connected user database link)
指定目标实例上的用户名和密码。此子句将用户认证远到程服务器上,并且是安全所需的。指定的用户名和密码必须是远程实例上的有效用户名和密码。用户名和密码仅用于身份验证,不为该用户执行其他操作
remote 数据库中的 hr 用户定义了一个名为 local 的固定用户数据库链接,使用 local 数据库的 hr 用户连接
CREATE DATABASE LINK local
CONNECT TO hr IDENTIFIED BY password
USING ‘local‘;
在创建这个数据库链接之后,hr 可以查询 local 数据库中 hr 的表:
SELECT * FROM employees @ local;
用户 hr 还可以使用 DML 语句来修改 local 数据库上 hr 用户的表数据:
INSERT INTO employees@local
(employee_id, last_name, email, hire_date, job_id)
VALUES (999, ‘Claus‘, ‘sclaus@example.com‘, SYSDATE, ‘SH_CLERK‘);
UPDATE jobs@local SET min_salary = 3000
WHERE job_id = ‘SH_CLERK‘;
DELETE FROM employees@local
WHERE employee_id = 999;
使用此固定数据库链接,remote 数据库上的 hr 用户还可以访问 local 数据库上其他用户的表。这条语句假定 hr 用户拥有 oe.customers 的 SELECT权限。该语句连接到 local 数据库的 hr 用户,然后查询 oe.customers 表:
SELECT * FROM oe.customers@local;
该语句仅适用于固定用户数据库链接,不适用于连接用户或当前用户数据库链接
要更改公共数据库链接,必须具有 ALTER PUBLIC DATABASE LINK 系统权限
示例
ALTER DATABASE LINK private_link
CONNECT TO hr IDENTIFIED BY hr_new_password;
ALTER PUBLIC DATABASE LINK public_link
CONNECT TO scott IDENTIFIED BY scott_new_password;
ALTER SHARED PUBLIC DATABASE LINK shared_pub_link
CONNECT TO scott IDENTIFIED BY scott_new_password
AUTHENTICATED BY hr IDENTIFIED BY hr_new_password;
使用 DROP DATABASE LINK 语句从数据库中删除数据库链接
删除公共数据库链接,必须具有 DROP PUBLIC DATABASE LINK 系统权限
dblink 指定要删除的数据库链接的名称
DROP [ PUBLIC ] DATABASE LINK dblink ;
ralph.linktosales
)解释为数据库链接的名字,,而不是 ralph 用户有一个数据库链接 linktosales删除公共数据库链接 remote
DROP PUBLIC DATABASE LINK remote;
查询数据库中所有的 DBLINK
set linesize 200
COL OWNER FOR A15
COL DB_LINK FOR A25
COL HOST FOR A25
COL USERNAME FOR A15
SELECT * FROM DBA_DB_LINKS;
原因:db link 的名字与数据库的名字相同
[oracle@hbdw2:/oratmp2]$ oerr ora 2082
02082, 00000, "a loopback database link must have a connection qualifier"
// *Cause: An attempt was made to create a database link with the same name
// as the current database.
// *Action: a loopback database link needs a trailing qualifier, for example
// MYDB.EXAMPLE.COM@INST1 - the ‘@INST1‘ is the qualifier
Oracle dblink
标签:cat 部分 附加 先决条件 date dba 密码连接 passwd 多字节