oracle 表同步

来源:互联网 发布:淘宝嘉年华有什么用 编辑:程序博客网 时间:2024/06/11 17:24

数据同步概述

利用oracle的dblink和materialized view功能实现表的数据同步,目的是为应急系统提供数据,备库同步后数据只用做查询。

此方案有以下优缺点:

1.      可按照要求设置同步的间隔时间,不能时时同步。

2.      数据同步为增量同步,只同步增删改数据,不适合变化频繁的表。

3.      此方案为表数据同步,同步设置需要表有主键。

4.      此同步设置简单易维护,不支持DDL操作。

5.      此方案为单向同步。

环境说明

同步环境如下表:

Item

primary

standby

database

Oracle 10G

Oracle 10G

Character set

zhs16gbk

zh16gbk

ip

192.168.98.238

192.168.98.104

sid

orcl

esp

Listener port

1521

1521

username

iam20130420

iam20130529

password

iam20130420

iam20130529

配置过程

创建数据库链路

在备库上修改tnsname.ora文件增加主库tnsname

ORCL =

(DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.98.238)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = orcl)

   )

)

在备库sql输入如下命令创建dblink

SQL>create database link dblink_to_orcl connect to iam20130420 identified by iam20130420 using 'orcl';

创建同步LOG

在主库内输入如下命令:

SQL> create materialized view log on ast_asset with primary key,sequence;

Materialized view log created

创建同步任务

在备库上创建物化视图:

SQL> CREATE MATERIALIZED VIEW ast_asset ON PREBUILTTABLE REFRESH FASTas select * from ast_asset@dblink_to_orcl;

Materialized view created

在备库手动做次完全更新:

SQL> EXEC DBMS_MVIEW.REFRESH('ast_asset', 'C');

PL/SQL procedure successfully completed

在备库创建更新组:

SQL> exec dbms_refresh.make('mv_group1', 'ast_asset', sysdate, 'sysdate+1/1440',FALSE,TRUE);

PL/SQL procedure successfully completed

SQL> commit;

Commit complete

有多个表需要同步加到一个组里,用逗号隔开,同步时间依照要求设置本次设置的是1分钟:

dbms_refresh.make('mv_group1', 'a,b,c,d', sysdate, 'sysdate+1/1440',FALSE,TRUE);

管理与维护

创建好的LOG表可以查到表结构:

SQL> desc mlog$_ast_asset

名称是否为空?类型

----------------------------------------- -------- -------------

AST_ID                                            NUMBER(20)

SEQUENCE$$                                        NUMBER

SNAPTIME$$                                        DATE

DMLTYPE$$                                         VARCHAR2(1)

OLD_NEW$$                                         VARCHAR2(1)

CHANGE_VECTOR$$                                   RAW(255)

此表记录需要同步的数据,同步完成后自动删除同步完成数据,实现表数据的增量更新。

输入dbms_refresh.make命令创建完更新组,在数据库里可查出对应的job,通过这个可查询到更新的间隔是否出现了错误。如出现错误首先检查dblink链路,是否能远程登录。

select JOB ,SCHEMA_USER,LAST_DATE,NEXT_DATE,FAILURES from user_jobs;

同步删除过程,先删除更新组:

EXECUTE DBMS_REFRESH.DESTROY(NAME=>'mv_group1');

删除创建的LOG表:

drop materialized view log on R_RESGROUP_RES;

删除物化视图:

drop MATERIALIZED VIEW R_RESGROUP_RES;

注意删除前确认dblink是好的,删除物化视图过程包含删除主备库信息,如果dblink不通会出现删除的信息不完全有残留信息。

原创粉丝点击