?概念:DBMS_JOB系统包是Oracle“任务队列”子系统的API编程接口。DBMS_JOB包对于任务队列提供了下面这些功能:提交并且执行一次任务、改变任务的执行参数以及删除或者临时挂起任务
0、在数据服务器中创建用户1或者用户2,可以模拟两个数据库实例,创建用户的脚本这里就不写了哈
1、连接数据库服务器B,创建测试表002_T_JBPM_DBSY.sql
2、连接数据库服务器A,创建数据库A和数据库B的连接
createdatabaselinkDBLINK_A2B
connecttozuo2identifiedby"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,创建同义词(非必须)
?createsynonym?T_JBPM_DBSYforT_JBPM_DBSY@DBLINK_A2B
5、连接数据库服务器B,创建物化视图日志,用于记录该表同步日志
creatematerializedviewlogonT_JBPM_DBSY
6、连接数据库服务器A,创建物化视图
CREATEMATERIALIZEDVIEWT_JBPM_DBSY_A
REFRESHFASTONDEMAND
STARTWITHTO_DATE(‘01-01-201410:17:18‘,‘DD-MM-YYYYHH24:MI:SS‘)NEXTSYSDATE+1/(24*60)
AS
SELECT?*FROM"T_JBPM_DBSY"@"DBLINK_A2B""T_JBPM_DBSY";
7、在数据库服务器B中插入一条数据,等待一分钟….然后查看数据库服务器A中对应的数据
?SELECT*FROMT_JBPM_DBSY_A
?我们也可以自己通过任务管理系统来同步数据数据
?1、在数据库服务器A中创建可执行的刷新数据存储过程
createorreplaceprocedureauto_refresh_materialized_job
as
begin
?DBMS_MVIEW.refresh(‘T_JBPM_DBSY_A‘,‘C‘);
end;
2、在数据库服务器A中创建OracleJob定时执行刷新任务?1分钟秒执行一次
variablejobnonumber;
begin
dbms_job.submit(:jobno,‘auto_refresh_materialized_job;‘,SYSDATE,‘SYSDATE+1/(24*60)
‘);
commit;
end;
?3、可以使用给物化视图上加上触发器来获取同步时改变的数据
?Createorreplacetrigger?TR_T_JBPM_DBSY_A
afterinsertordeleteorupdateonT_JBPM_DBSY_A
declare
BEGIN
?CASE
?WHEREINSERTINGTHEN
?insertintoXXXXX();
WHEREDELETEINGTHEN
NULL;
WHEREUPDATEINGTHEN
NULL;
?ENDCASE;
ENDTR_T_JBPM_DBSY_A_IN
新增(修改、删除)数据库服务器B的T_JBPM_DBSY的数据
在数据库B中查看物化视图日志
select*frommlog$_t_jbpm_dbsy
在数据库服务器中A命令行中手动执行刷新F表示增量C表示全量
execDBMS_MVIEW.refresh(‘T_JBPM_DBSY_A‘,‘C‘);
在需要时候,也可以直接用物化视图中的自动刷新功能
查看数据库正在执行的Job
SELECT*FROMUSER_JOBS;
creatematerialized?viewlogonT_JBPM_DBSYWITHPRIMARYKEY
删除物化视图日志
DROPmaterializedVIEW?logon?T_JBPM_DBSY