`

表同步

阅读更多
--名词说明:源——被同步的数据库
            目的——要同步到的数据库
前6步必须执行,第6以后是一些辅助信息.
--1、在目的数据库上,创建dblink
drop public database link dblink_orc92_182;
Create public DATABASE LINK dblink_orc92_182 CONNECT TO bst114 IDENTIFIED BY password USING ''orc92_192.168.254.111'';
--dblink_orc92_182 是dblink_name
--bst114 是 username
--password 是 password
--''orc92_192.168.254.111'' 是远程数据库名

--2、在源和目的数据库上创建要同步的表(最好有主键约束,快照才可以快速刷新)
drop table test_user;
create table test_user(id number(10) primary key,name varchar2(12),age number(3));
--3、在目的数据库上,测试dblink
select * from test_user@dblink_orc92_182;    //查询的是源数据库的表
select * from test_user;
--4、在源数据库上,创建要同步表的快照日志
Create snapshot log on test_user;
--5、创建快照,在目的数据库上创建快照
Create snapshot sn_test_user as select * from test_user@dblink_orc92_182;
--6、设置快照刷新时间(只能选择一种刷新方式,推荐使用快速刷新,这样才可以用触发器双向同步)
快速刷新
Alter snapshot sn_test_user refresh fast Start with sysdate next sysdate with primary key;
--oracle马上自动快速刷新,以后不停的刷新,只能在测试时使用.真实项目要正确权衡刷新时间.
完全刷新
Alter snapshot sn_test_user refresh complete Start with sysdate+30/24*60*60 next sysdate+30/24*60*60;
--oracle自动在30秒后进行第一次完全刷新,以后每隔30秒完全刷新一次
--7、手动刷新快照,在没有自动刷新的情况下,可以手动刷新快照.
手动刷新方式1
begin
dbms_refresh.refresh(''sn_test_user'');
end;
手动刷新方式2
EXEC DBMS_SNAPSHOT.REFRESH(''sn_test_user'',''F'');  //第一个参数是快照名,第二个参数 F 是快速刷新 C 是完全刷新.
--8.修改会话时间格式
ALTER SESSION SET NLS_DATE_FORMAT = ''YYYY-MM-DD HH24:MI:SS'';
--9.查看快照最后一次刷新时间
SELECT NAME,LAST_REFRESH FROM ALL_SNAPSHOT_REFRESH_TIMES;
--10.查看快照下次执行时间
select last_date,next_date,what from user_jobs order by next_date;
--11.打印调试信息
dbms_output.put_line(''use ''||''plsql'');
--12.如果你只想单向同步,那么在目的数据库创建以下触发器(当源数据库表改变时,目的数据库表跟着改变,但目的数据库表改变时,源数据库表不改变).
create or replace trigger TRI_test_user_AFR
  after  insert or update or delete on sn_test_user
  for each row
begin
  if deleting then
      delete from test_user where id=:old.id;
  end if;
  if inserting then
      insert into test_user(id,name)
      values(:new.id,:new.name);
  end if;
  if updating then
     update test_user set name=:new.name where id=:old.id;
  end if;
end TRI_test_user_AFR;
--13.如果你想双向同步,请在源数据库中执行前6步,并在双方都创建以下触发器(当源数据库表改变时,目的数据库表跟着改变,目的数据库表改变时,源数据库表也改变)
CREATE OR REPLACE TRIGGER BST114.TRI_TEST_USER_AFR
AFTER DELETE OR INSERT OR UPDATE
ON BST114.SN_TEST_USER
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
declare
    tmp_id number(10):=-1;
begin
  dbms_output.put_line(''begin'');
  if inserting then
      --select id into tmp_id from test_user where id=:new.id;   
      for p in(select id from test_user where id=:new.id)
      loop
        tmp_id:=p.id;
      end loop;
     
      dbms_output.put_line(tmp_id||''===------------'');
      if (tmp_id=-1) then
          insert into test_user(id,name,age)
          values(:new.id,:new.name,:new.age);
      end if;
  end if;
 
  if updating then
     dbms_output.put_line(''updated'');
     for p in(select name,age from test_user where id=:old.id)
     loop
         if (p.name!=:new.name) or (p.age!=:new.age) then
              update test_user set name=:new.name,age=:new.age where id=:old.id;
         end if;
     end loop;
  end if;
 
  if deleting then
      dbms_output.put_line(''deleted'');
      delete from test_user where id=:old.id;
  end if;
  dbms_output.put_line(''end'');
end TRI_test_user_AFR;
--为防止双向同步触发器死循环,所以要在触发器中增加一些判断,阻止死循环.
--以上同步原理
1.首先创建一个dblink,可以访问远程数据库
2.在本地创建一个快照,映射远程数据表,当远程数据表有变化时,会反应到快照中.
3.由于快照类似于视图表,所以在本地为快照创建一个触发器,当快照有变化时,会触发相应事件.
4.在触发器中写同步数据的代码.
--附:快照刷新时间参数说明
一天的秒数=24小时*60分钟*60钞
所以要想在30秒后刷新,参数应该这样写 sysdate+30/(24*60*60)
1分钟==sysdate+60/(24*60*60)
一天的分钟数=24小时*60分钟
一分钟也可以这样写 sysdate+1/(24*60)
30分钟==sysdate+30/(24*60)
60分钟==sysdate+60/(24*60)
以此类推
1小时==sysdate+1/24==sysdate+60/(24*60)
1天==sysdate+1
一个月==sysdate+30
分享到:
评论

相关推荐

    sqlA库某表到B库某表同步

    "sqlA库某表到B库某表同步"这个标题涉及到的就是如何将一个SQL Server数据库(sqlA)中的某个表的数据实时或定时地更新到另一个SQL Server数据库(sqlB)的相应表中。下面我们将深入探讨这个过程,以及相关的SQL ...

    java数据库表同步

    在Java编程领域,数据库表同步是一项关键任务,特别是在分布式系统或者需要实时数据更新的应用中。这个主题涵盖了如何使用Java来实现实时或定时地将一个数据库的表内容更新到另一个数据库,确保数据的一致性和完整性...

    异构表同步

    标题中的“异构表同步”指的是在不同数据库系统之间进行数据表的同步操作,这通常涉及到数据迁移、数据集成或实时数据复制等场景。在IT领域,数据同步是确保多处数据源保持一致性的关键技术,尤其在分布式系统、...

    sqlserver无主键表的同步方案1

    当面临无主键的表同步时,传统的发布订阅方式可能无法满足需求,因为这种方式通常依赖于主键来跟踪和同步数据变化。在这种情况下,我们需要采用其他策略。 在描述的场景中,由于医院服务器和数据库版本的限制,使用...

    kettle同步数据库所有的表数据到其他库.rar

    在这个例子中,我们需要创建一个工作流来调用包含所有表同步的转换。 2. **同步过程**: - **获取源数据库表**:在Kettle中,我们可以使用"数据库表输入"步骤来连接源数据库,并选择要同步的表。如果想要同步特定...

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

    ### 利用Oracle快照dblink解决数据库表同步问题 #### 概述 在数据库管理领域,特别是当涉及跨数据库的表同步时,Oracle提供的多种工具和技术为DBA(数据库管理员)提供了极大的便利。其中,Oracle快照(Snapshot)与...

    GoldenGate oracle向mysql 进行同步 针对表同步.pdf

    根据提供的文件信息,这份文档主要讲述了Oracle数据库向MySQL数据库进行数据同步的过程,特别是针对表同步的情况。GoldenGate作为中间件在其中扮演着重要的角色,它支持异构数据库间的数据同步。文档详细地介绍了...

    binlog数据库自定义表同步附件

    在本附件中,"binlog数据库自定义表同步附件" 提供了一种基于`mysql-binlog-connector-java`库的binlog事件监听和处理机制,它允许用户自定义自己的表同步和加工逻辑,以适应各种特定需求。 首先,`mysql-binlog-...

    HANA数据库操作创建SAP与HANA表同步优质资料.doc

    HANA数据库操作创建SAP与HANA表同步优质资料 HANA数据库操作是指在HANA数据库中进行的各种操作,包括创建SAP与HANA表同步、数据导入、数据处理等。下面是HANA数据库操作创建SAP与HANA表同步的详细知识点: 1. 创建...

    跨数据库表同步程序,支持 Docker 部署,自动同步表结构和数据,数仓建设工具.zip

    【标题】中的“跨数据库表同步程序,支持 Docker 部署,自动同步表结构和数据,数仓建设工具”涉及的知识点主要包括以下几个方面: 1. **跨数据库表同步**:这是一种技术,允许用户在不同的数据库系统之间进行数据...

    使用FEDERATED引擎,实现数据库,用户表同步.docx

    使用FEDERATED引擎实现数据库用户表同步 FEDERATED引擎是MySQL中的一种存储引擎,用于实现分布式数据库系统中的数据同步。下面是使用FEDERATED引擎实现数据库用户表同步的详细知识点: 什么是FEDERATED引擎 ...

    电子政务-三相电能表工件托盘放表同步辅助装置.zip

    本资料包主要关注的是“三相电能表工件托盘放表同步辅助装置”,这是一项应用于电力行业的创新技术,旨在优化电能表的安装与管理过程。三相电能表是电力系统中用于测量三相交流电路电能消耗的重要设备,广泛应用于...

    使用FEDERATED引擎,实现数据库,用户表同步.pdf

    假设有一个服务平台数据库和一个商企论坛数据库,我们想要将商企论坛的`pre_common_member`用户表同步到服务平台。在服务平台数据库中,可以创建一个FEDERATED表结构与商企论坛用户表相同,例如: ```sql CREATE ...

    两台电脑之间oracle数据库表同步.zip

    1、该压缩包包含,创建link的过程,同步库表的sql语句,自动执行的bat脚本。...2、通过link进行连接两台带有oracle11g的数据库之间表同步,包含添加和更新表数据。 3、通过任务计划自动执行bat脚本,定时同步库表。

    元素周期表同步练习.doc

    【元素周期表同步练习】 元素周期表是化学中至关重要的工具,它按照原子序数排列了所有已知的化学元素,并揭示了元素间的周期性规律。这个同步练习旨在帮助学生深入理解和掌握元素周期表的基本概念。 一、选择题 1...

    51单片机串口秒表同步数码管显示

    51单片机串口秒表同步数码管显示,测试通过。

    SQL_两张表同步数据

    ### SQL中实现不同数据库的两张表的同步方法 在企业级应用中,有时我们需要实现在两个不同的数据库之间进行数据同步,比如将一张表中的数据实时地复制到另一张表中,这种需求通常可以通过触发器(Trigger)来实现。...

    kettle全量多表数据同步

    ### Kettle全量多表数据同步 #### 一. 建立资料库 在进行全量多表数据同步之前,首先需要建立一个资源库来存放所有的转换和作业。资源库是Kettle的一个核心概念,它用于存储和管理转换、作业和其他与数据处理相关...

    Kettle 数据库与数据库多表循环同步

    1.可以实现数据库与数据库之间的自动同步; 2.使用前提是来源看与目标库中共同存在的表结构必须一致(因为是简易版,没有添加创建表等); 3.只需更改数据库连接即可,其他参数不必调整;4.目前使用KETTL7.1版本; 5...

Global site tag (gtag.js) - Google Analytics