您的位置:首页 > 数据库 > Oracle

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

2015-02-03 20:36 1111 查看
技术需求:

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



数据库(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

新增(修改、删除)数据库服务器B的T_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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: