数据库(oracle)数据同步之物化视图(实战入门)

技术需求:

数据库服务器A同步数据库服务器B中的T_JBPM_DBSY(待办事项)表数据,在数据库服务器B中数据发生变化时,A数据库的数据同时也跟着变化,并且记录下变化的数据。

数据库(oracle)数据同步之物化视图(实战入门)_第1张图片

数据库(oracle)数据同步之物化视图

数据库连接 (Database links)

概念:当我们跨本地数据库,访问另外一个数据库表的数据时,本地数据库就必须创建远程数据库的DBLINK

物化视图 ( Materialized views)

概念:物化视图是包括一个查询结果的数据库对象,它是远程数据的本地副本,或者用来生成基于数据表求和的汇总表,物化视图日志则是记录物化视图在执行时的记录

同义词 (Synonyms)

概念:是表、索引、视图等模式对象的一个别名,是数据库对象的一个代名词

触发器( Triggers
概念:触发器是在事件发生时隐式地自动运行的 PL/SQL 程序块,不能接受参数,不能被调用
任务( Jobs
概念: DBMS_JOB 系统包是 Oracle “任务队列”子系统的 API 编程接口。 DBMS_JOB 包对于任务队列提供了下面这些功能:提交并且执行一次任务、改变任务的执行参数以及删除或者临时挂起任务

0、在数据服务器中创建用户1或者用户2,可以模拟两个数据库实例 ,创建用户的脚本这里就不写了哈

1、连接数据库服务器B,创建测试表002_T_JBPM_DBSY.sql

2、连接数据库服务器A,创建数据库A和数据库B的连接

createdatabase link DBLINK_A2B

connectto zuo2 identified by "123" using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.3.65 )(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME =ltxxxt) ))';

3、连接数据库服务器A,测试是否连接通常

      SELECT *FROM  T_JBPM_DBSY@DBLINK_A2B

4、连接数据库服务器A,创建同义词(非必须)

    create synonym  T_JBPM_DBSY for T_JBPM_DBSY@DBLINK_A2B

5、连接数据库服务器B,创建物化视图日志,用于记录该表同步日志

   create materialized view log on T_JBPM_DBSY

6、连接数据库服务器A,创建物化视图

CREATEMATERIALIZED VIEW T_JBPM_DBSY_A

REFRESHFAST ON DEMAND

STARTWITH TO_DATE('01-01-2014 10:17:18', 'DD-MM-YYYY HH24:MI:SS') NEXTSYSDATE+1/(24*60)

AS

SELECT  * FROM"T_JBPM_DBSY"@"DBLINK_A2B" "T_JBPM_DBSY";

7、在数据库服务器B中插入一条数据,等待一分钟….然后查看数据库服务器A中对应的数据

      SELECT*FROM T_JBPM_DBSY_A

      我们也可以自己通过任务管理系统来同步数据数据

      1、在数据库服务器A中创建可执行的刷新数据存储过程

create or replace procedure auto_refresh_materialized_job

as

begin

        DBMS_MVIEW.refresh('T_JBPM_DBSY_A',‘C');

end;

2、在数据库服务器A中创建Oracle Job定时执行刷新任务 1分钟秒执行一次

variable jobnonumber;

begin

dbms_job.submit(:jobno,'auto_refresh_materialized_job;', SYSDATE,'SYSDATE+1/(24*60) ');

commit;

end;

    3、可以使用给物化视图上加上触发器来获取同步时改变的数据

    Create or replace trigger  TR_T_JBPM_DBSY_A

after insert or delete or update onT_JBPM_DBSY_A

declare

BEGIN

 CASE

   WHERE INSERTING THEN

   insert intoXXXXX();

    WHERE DELETEING THEN

    NULL;

    WHERE UPDATEING THEN

    NULL;

   END CASE;

  END TR_T_JBPM_DBSY_A_IN

新增(修改、删除)数据库服务器BT_JBPM_DBSY的数据

在数据库B中查看物化视图日志

select*from mlog$_t_jbpm_dbsy

在数据库服务器中A命令行中手动执行刷新F表示增量C表示全量

execDBMS_MVIEW.refresh('T_JBPM_DBSY_A',‘C');

在需要时候,也可以直接用物化视图中的自动刷新功能

查看数据库正在执行的Job

SELECT*FROM USER_JOBS;

create materialized  view log on T_JBPM_DBSY WITH PRIMARY KEY

删除物化视图日志

DROP materialized VIEW  log on  T_JBPM_DBSY

你可能感兴趣的:(数据库)