`
accpxudajian
  • 浏览: 458099 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用dblink快照功能,实现远程数据库的同步

阅读更多

-------------- 检查两台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

 

 

 

0
0
分享到:
评论

相关推荐

    oracle 使用dblink方式 连接远程数据库,内有详细描述,亲测可以

    在Oracle数据库中,DBLink(Database Link)是一种非常实用的功能,它允许用户在一个数据库(本地数据库)中访问另一个数据库(远程数据库)的数据。这通常用于实现跨数据库查询、分布式事务处理等场景。 #### 二、...

    利用oracle快照dblink解决数据库表同步问

    其中,Oracle快照(Snapshot)与dblink结合使用是一种常见的解决方案,用于实现两个不同数据库之间表数据的同步。本文将详细介绍如何通过创建Oracle的dblink以及利用快照技术来实现这一目标。 #### 创建dblink 为了...

    Oracle利用job和dblink高级数据库同步技术

    本文将深入探讨如何利用Oracle的Job和DBLink功能进行高级数据库同步技术,以确保数据的一致性和实时性。 首先,让我们了解Oracle Job。Job是Oracle的一个调度工具,它允许用户在特定时间或按固定频率执行数据库操作...

    oracle通过ODBC建立dblink访问SqlServer数据库配置.docx

    oracle通过ODBC建立dblink访问SqlServer数据库配置

    Oracle数据库 Synonym和DBLink

    Oracle 数据库 Synonym 和 DBLink Oracle 数据库中有两个重要的概念:同义词(Synonym)和...通过使用同义词和 DBLink,可以实现不同数据库用户之间的无缝交互,扩展数据库的使用范围,并提高数据库的安全性和可靠性。

    oracle数据库之间同步数据 dbLink +job方式

    ### Oracle数据库之间同步数据:...综上所述,dbLink和Job结合使用可以非常高效地实现Oracle数据库之间的数据同步及定时任务的自动化执行。这种方式不仅简化了数据库管理的工作流程,也提高了系统的稳定性和可靠性。

    Oracle DATABASE LINK(DBLINK)创建与删除方法

    Oracle DATABASE LINK,简称DBLINK,是一种在不同的Oracle数据库实例间建立连接的方式,允许用户在本地数据库上执行查询和操作远程数据库的数据。DBLINK为跨数据库的通信提供了简单且高效的解决方案。 创建DBLINK的...

    Oracle DBLink建立连接

    通过以上内容的学习,我们可以了解到Oracle DBLink是一种非常实用的功能,它不仅能够简化多数据库环境下的数据集成工作,还能有效提升数据管理和应用开发的灵活性。同时,在实际应用中需要注意权限管理和安全性问题...

    Oracle-不同数据库DBLINK导数据使用说明

    数据库链接(DBLINK)允许一个Oracle数据库实例连接到另一个远程数据库实例,从而实现数据的透明访问。创建DBLINK的基本语法如下: ```sql CREATE DATABASE LINK db_link_name CONNECT TO remote_user IDENTIFIED ...

    DBLINK实现两个数据库间表数据同步---张金总结版.docx

    DBLink是Oracle数据库提供的一种功能,它允许在不同的数据库实例之间建立连接,从而实现数据的交互和同步。本文档主要介绍了如何使用DBLink在两个Oracle数据库之间同步表数据,具体步骤如下: 首先,在目标数据库...

    巧用dblink结合oracle快照实现两台服务器的数据同步

    巧用dblink结合oracle快照实现两台服务器的数据同步

    DBLINK实现两个数据库间表数据同步---张金总结版.pdf

    DBLink是Oracle数据库提供的一种功能,它允许用户在不同的数据库之间建立连接,从而实现数据的交互和同步。本文主要介绍了如何使用DBLink在两个Oracle数据库之间实现表数据的同步,具体步骤如下: 首先,需要在目标...

    oracle dblink 创建过程

    Oracle快照(Snapshot)是一种存储表的静态副本的方法,常用于实现本地数据库与远程数据库之间的数据同步。 ##### 1. 创建快照日志 首先,在本地数据库中创建一个用于记录变化的快照日志: ```sql CREATE TABLE ...

    dblink创建与数据同步

    该存储过程实现源数据库按照时间同步更新计算库的过程 实现表的同步以及动态表某期间的数据同步。 该存储过程主要演示了: 1.dblink创建和dblink的使用; 2.如何使用字典表和游标实现选择性数据同步。

    oracle10g或11g通过dblink访问sql server数据库

    本文档详细介绍了如何在Oracle 10g或11g环境中使用DBLink来访问SQL Server数据库的方法。这种方法对于那些习惯于使用Oracle进行数据库操作的开发人员来说尤其有用,因为它提供了一种在不同类型的数据库之间无缝切换...

    数据库dblink.pdf

    删除DBLink使用`DROP PUBLIC DATABASE LINK`语句,例如`DROP PUBLIC DATABASE LINK linkfwq;`。如果是全局DBLink,需要使用`SYSTEM`或`SYS`用户,并在`DATABASE`前加上`PUBLIC`。 7. **全局名称和`GLOBAL_NAME`...

    oracle通过DBlink连接mysql搭建过程

    使用 DBlink,可以实现数据的实时同步、数据的远程访问和数据的复制等功能。DBlink 的使用可以提高数据的可用性和可靠性,提高业务的效率和效果。 使用 DBlink 连接 Oracle 和 MySQL 数据库需要逐步进行配置和测试...

    建立oracle 数据库的dblink

    在Oracle中,DBLINK是实现跨数据库交互的重要工具,尤其在分布式数据库环境中,它提供了高效且方便的数据访问方式。 在建立DBLINK之前,有一些前提条件需要满足: 1. **TNSNAME.ORA配置**:TNSNAME.ORA是Oracle...

    Pgsql跨网络数据库增量同步

    1、 跨网络进行增量同步数据,即隔着网闸,网络不能直连,使用dblink、主从库等方案解决不了; 2、 源表跟目标表字段名称可以不一致,但表名称要一致(表名称不一致也可以实现); 3、 自定义增量的控制字段,可以是...

    创建dblink连接两台服务器上的数据库

    两台数据库服务器之间通过创建dblink进行数据库连接,并且数据库之间可以相互进行数据查询读取操作,操作简单易懂

Global site tag (gtag.js) - Google Analytics