-------------- 检查两台oracle服务器可以建立dblink的条件。------------------
--1.命令行远程登陆:sqlplus db_qb/pw123456@172.16.16.15:1521/orcl;
--2.查看Global_name参数是true还是False,该参数为true时,你在本地Oracle建立的DBLINK的名称必须和远程的Global_name一致才行
sql> show parameter global_name;
--3.如何返回数据库的GLOBAL_NAME?
SELECT * FROM GLOBAL_NAME;
--4.查看远程数据徊是否支持高级复制功能,通过查看v$option视图的中Advanced replication属性,如果为True,那么就是支持,否则就是不支持。在两个数据库中都是检查是否支持才行。
select * from v$option where PARAMETER='Advanced replication';-- PARAMETER like 'Ad%'就可以;
-------------- 检查两台oracle服务器可以建立dblink的条件。------------------END
-----------------创建DBLINK--------------------------------
--select * from test
--1.在本地数据库上,创建dblink
--drop public database link mydblink;
Create public DATABASE LINK mydblink CONNECT TO zddxgltest IDENTIFIED BY PW123456 USING '172.16.17.7:1521/orcl';
--2.在本地数据库上,测试dblink
select * from test_175@mydblink
--3.在远程数据库上,创建要同步表的快照日志
--drop snapshot log on test_175;
Create snapshot log on test_175;
--4.在本地数据库创建目的数据库上目标表(test_175)的快照
--drop snapshot test_175_log
Create snapshot test_175_log as select * from test_175@mydblink
-- 4.2最好能按照rowid来建立快照:(有问题,提示)
-- create snapshot test_175_log refresh fast with rowid start with sysdate next sysdate+30/(24*60*60) as select * from test_175@mydblink;
--5.在本地数据库设置快照刷新时间(只能选择一种刷新方式,推荐使用快速刷新,这样才可以用触发器双向同步)快速刷新
--5.1 每隔三十秒刷新一次 立即执行
--Alter snapshot test_175_log refresh fast Start with sysdate next sysdate+30/(24*60*60) with primary key;
--5.2 5秒后首次执行,每隔5秒刷新一次
Alter snapshot test_175_log refresh complete Start with sysdate+5/(24*60*60) next sysdate+5/(24*60*60);--设置5秒重新扫描原始表(实际是10秒)
--说明:快照每隔10秒将所有数据全部删除delete然后在全部添加inset,所以间隔时间越小系统消耗会越大。
/*
手动启动:
begin
dbms_refresh.refresh('test_175_log');
end;
*/
--7.测试同步结果
select * from test_175_log
-----------------创建DBLINK--------------------------------END
-----------------触发器最终实现数据同步--------------------------------
select * from user_triggers
--时间累加。
--select sysdate,sysdate+30/(24*60*60) from dual
--ORACLE查出表所有的触发器,表明必须全是大写
select t.trigger_name,t.* from all_triggers t where table_name='TEST_175_LOG';
--6.触发器实现数据同步。
--6.1 插入触发器。
--drop trigger TEST_BACK_TRIGGER
--3.建立快照的触发器(快照每隔10秒将所有数据全部删除delete然后在全部添加inset,所以日志会很多很大,可以考虑不记录日志。)
------------------------------------------------------------------
--开启屏幕监听:
--sql>set serveroutput on;
CREATE OR REPLACE TRIGGER test_log_trigger
AFTER DELETE OR INSERT OR UPDATE ON test_175_log for each row -- for each row是为了使用:new和old
DECLARE
v_type VARCHAR2(15);
BEGIN
IF INSERTING THEN
v_type := 'INSERT '||:new.T_ID;--oracle添加链接字符串使用||
DBMS_OUTPUT.PUT_LINE('记录'||:new.T_ID||'已经成功插入,并已记录到日志');--添加 只有new
INSERT INTO TEST_BACK VALUES(:new.T_ID,:new.T_NAME,:new.T_AGE,:new.T_SEX);--同步表。
ELSIF UPDATING THEN
v_type := 'UPDATE '||:old.T_ID;
DBMS_OUTPUT.PUT_LINE('记录'||:old.T_ID||'已经成功更新,并已记录到日志');--更新有new和old
UPDATE TEST_BACK T SET T.T_NAME = :new.T_NAME,T.T_AGE = :new.T_AGE,T.T_SEX =:new.T_SEX where T.T_ID = :old.T_ID;--注意末尾的;号
ELSIF DELETING THEN
v_type := 'DELETE '||:old.T_ID;
DBMS_OUTPUT.PUT_LINE('记录'||:old.T_ID||'已经成功删除,并已记录到日志');--删除只有old
DELETE FROM TEST_BACK T where T.T_ID = :old.T_ID;--注意末尾的;号
END IF;
-- my_pro(v_type);--记录日志。
END;
------------------------------------------------------------------
----------------------------------------------------------------
--2.建存储过程(注意一定要加上PRAGMA AUTONOMOUS_TRANSACTION;让这个存储过程有自治的事务控制,不然会影响A的事务控制)
----------------------------------------------------------------
create or replace procedure my_pro(v_type varchar2)
as
PRAGMA AUTONOMOUS_TRANSACTION;
begin
INSERT INTO LOG_TEST VALUES(user,v_type,TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss'));--操作日志。
commit;
end;
---------------------------------------------------------------
--最后我们在远程数据库中输入以下测试语句:
INSERT INTO test_175 VALUES(34,'zhao',22,'M');
UPDATE test_175 SET t_name = '3ddd0' WHERE t_id = 34;
DELETE test_175 WHERE t_id = 34;
select * from Test_Back ;
select * from LOG_TEST t order by t.l_date desc;
-----------------触发器最终实现数据同步--------------------------------END
分享到:
相关推荐
在Oracle数据库中,DBLink(Database Link)是一种非常实用的功能,它允许用户在一个数据库(本地数据库)中访问另一个数据库(远程数据库)的数据。这通常用于实现跨数据库查询、分布式事务处理等场景。 #### 二、...
其中,Oracle快照(Snapshot)与dblink结合使用是一种常见的解决方案,用于实现两个不同数据库之间表数据的同步。本文将详细介绍如何通过创建Oracle的dblink以及利用快照技术来实现这一目标。 #### 创建dblink 为了...
本文将深入探讨如何利用Oracle的Job和DBLink功能进行高级数据库同步技术,以确保数据的一致性和实时性。 首先,让我们了解Oracle Job。Job是Oracle的一个调度工具,它允许用户在特定时间或按固定频率执行数据库操作...
oracle通过ODBC建立dblink访问SqlServer数据库配置
Oracle 数据库 Synonym 和 DBLink Oracle 数据库中有两个重要的概念:同义词(Synonym)和...通过使用同义词和 DBLink,可以实现不同数据库用户之间的无缝交互,扩展数据库的使用范围,并提高数据库的安全性和可靠性。
### Oracle数据库之间同步数据:...综上所述,dbLink和Job结合使用可以非常高效地实现Oracle数据库之间的数据同步及定时任务的自动化执行。这种方式不仅简化了数据库管理的工作流程,也提高了系统的稳定性和可靠性。
Oracle DATABASE LINK,简称DBLINK,是一种在不同的Oracle数据库实例间建立连接的方式,允许用户在本地数据库上执行查询和操作远程数据库的数据。DBLINK为跨数据库的通信提供了简单且高效的解决方案。 创建DBLINK的...
通过以上内容的学习,我们可以了解到Oracle DBLink是一种非常实用的功能,它不仅能够简化多数据库环境下的数据集成工作,还能有效提升数据管理和应用开发的灵活性。同时,在实际应用中需要注意权限管理和安全性问题...
数据库链接(DBLINK)允许一个Oracle数据库实例连接到另一个远程数据库实例,从而实现数据的透明访问。创建DBLINK的基本语法如下: ```sql CREATE DATABASE LINK db_link_name CONNECT TO remote_user IDENTIFIED ...
DBLink是Oracle数据库提供的一种功能,它允许在不同的数据库实例之间建立连接,从而实现数据的交互和同步。本文档主要介绍了如何使用DBLink在两个Oracle数据库之间同步表数据,具体步骤如下: 首先,在目标数据库...
巧用dblink结合oracle快照实现两台服务器的数据同步
DBLink是Oracle数据库提供的一种功能,它允许用户在不同的数据库之间建立连接,从而实现数据的交互和同步。本文主要介绍了如何使用DBLink在两个Oracle数据库之间实现表数据的同步,具体步骤如下: 首先,需要在目标...
Oracle快照(Snapshot)是一种存储表的静态副本的方法,常用于实现本地数据库与远程数据库之间的数据同步。 ##### 1. 创建快照日志 首先,在本地数据库中创建一个用于记录变化的快照日志: ```sql CREATE TABLE ...
该存储过程实现源数据库按照时间同步更新计算库的过程 实现表的同步以及动态表某期间的数据同步。 该存储过程主要演示了: 1.dblink创建和dblink的使用; 2.如何使用字典表和游标实现选择性数据同步。
本文档详细介绍了如何在Oracle 10g或11g环境中使用DBLink来访问SQL Server数据库的方法。这种方法对于那些习惯于使用Oracle进行数据库操作的开发人员来说尤其有用,因为它提供了一种在不同类型的数据库之间无缝切换...
删除DBLink使用`DROP PUBLIC DATABASE LINK`语句,例如`DROP PUBLIC DATABASE LINK linkfwq;`。如果是全局DBLink,需要使用`SYSTEM`或`SYS`用户,并在`DATABASE`前加上`PUBLIC`。 7. **全局名称和`GLOBAL_NAME`...
使用 DBlink,可以实现数据的实时同步、数据的远程访问和数据的复制等功能。DBlink 的使用可以提高数据的可用性和可靠性,提高业务的效率和效果。 使用 DBlink 连接 Oracle 和 MySQL 数据库需要逐步进行配置和测试...
在Oracle中,DBLINK是实现跨数据库交互的重要工具,尤其在分布式数据库环境中,它提供了高效且方便的数据访问方式。 在建立DBLINK之前,有一些前提条件需要满足: 1. **TNSNAME.ORA配置**:TNSNAME.ORA是Oracle...
1、 跨网络进行增量同步数据,即隔着网闸,网络不能直连,使用dblink、主从库等方案解决不了; 2、 源表跟目标表字段名称可以不一致,但表名称要一致(表名称不一致也可以实现); 3、 自定义增量的控制字段,可以是...
两台数据库服务器之间通过创建dblink进行数据库连接,并且数据库之间可以相互进行数据查询读取操作,操作简单易懂