Oracle dblink 数据库同步

一 dblink

  • database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。在任何分布式环境里,database都是必要的。另外要注意的是database link是单向的连接。
  • 在创建database link的时候,Oracle再数据字典中保存相关的database link的信息,在使用database link的时候,Oracle通过Oracle Net用用户预先定义好的连接信息访问相应的远程数据库以完成相应的工作。

二 dblink分类

  • Private database link:只有创建语句中标识的用户才可以访问远程数据库
  • Public database link:本地数据的所有用户都可以访问远程数据库
  • Global database link:需要创建global user,在所有分布式数据库中都可以使用global user访问远程数据库

三 认证用户分类

  • Connected user:不固定用户,当用户连接到远程数据库时,用户在远程数据库是哪个的角色仍然是跟当前用户名相同的用户
CREATE PUBLIC DATABASE LINK hq USING 'hq';
  • Current user:使用当前用户创建当前用户的dblink
CREATE PUBLIC DATABASE LINK hq CONNECT TO CURRENT_USER using 'hq';
  • Fixed user:固定用户。在dblink创建语句中定义了远程数据库的连接用户,连接进去的用户是固定的。
CREATE PUBLIC DATABASE LINK hq CONNECT TO jane IDENTIFIED BY password USING 'hq';

四 dblink基本使用

4.1 创建一个dblink

CREATE PUBLIC database link DBLINK_A_REA CONNECT TO 1234 IDENTIFIED BY "123456" using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.104)(PORT = 6000)) ) (CONNECT_DATA =  (SID = ORCL) ) )';
create database  link blink1 connect to dbName identified by dbPassword using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.1.106)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';
 
blink1 : 表示dblink名字
dbName :表示 远程数据库的用户
dbPassword:表示 远程数据库的密码
HOST : 表示远程数据库IP
PORT : 表示远程数据库端口
SERVICE_NAME : 远程数据库的实例名

4.2 查看dblink 信息

SELECT * FROM DBA_DB_LINKS;

image.png

4.3 删除dblink信息

drop database link dblink名称;

4.4 授权信息

GRANT CREATE PUBLIC DATABASE LINK,CREATE DATABASE LINK TO user;

五 dblink同步数据

A(库)、B(库)两个数据库,当 A 中的表 A_AREA 数据发生改变时,B 数据库中的 表 A_AREA 自动更新,两个库在不同网段的服务器上,一台是内网做的穿透代理

  • 授权给需要创建dblink的用户
GRANT CREATE PUBLIC DATABASE LINK,CREATE DATABASE LINK TO 用户名称;
  • 创建dblink
-- 创建DBlink
CREATE PUBLIC database link DBLINK_A_REA CONNECT TO 用户名 IDENTIFIED BY "密码" using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ip)(PORT = 1000)) ) (CONNECT_DATA =  (SID = ORCL) ) )';
  • 查询信息
-- 查询Dblink			
SELECT * FROM DBA_DB_LINKS;

image.png

  • 创建触发器
BEGIN
if inserting then
    insert into A_AREA @DBLINK_A_REA (AID,A_NAME) values(:NEW.AID,:NEW.A_NAME);
elsif updating then 
    update A_AREA @DBLINK_A_REA set AID=:NEW.AID,A_NAME=:NEW.A_NAME where AID=:OLD.AID;
elsif deleting then
    delete from A_AREA @DBLINK_A_REA where AID=:OLD.AID;
end if;
END;

image.png

  • 测试

image.png

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长安不及十里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值