oracle-使用物化视图完成数据同步

最近在做一个项目,涉及到数据库同步的相关知识,后来通过向单位的dba学习,最终选择了oracle的自身同步:使用物化视图完成数据的同步,具体步骤如下:

需求:要求从源数据库用户向目标数据库用户同步数据。

第一步:创建源数据库(schema)--source用户

SQL> create user source identified by "password";
SQL> grant connect,resource to source;
SQL> GRANT CREATE MATERIALIZED VIEW TO source;
SQL> grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to source;

第二步:创建目标数据库(schema)--target用户

SQL> create user target identified by "password";
SQL> grant connect,resource to target ;
SQL> GRANT CREATE MATERIALIZED VIEW TO target ;
SQL> grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to target ;

 第三步:登录源数据库用户--source用户,执行所有sql语句。

SQL> conn  source/password;(此语句为linux,登录用户命令)
SQL> @/home/dengqs/all.sql;
(注意:假设你所有表的all.sql文件在/home/dengqs/目录下)

 第四步:登录目标数据库用户--target用户,创建目标用户下的dblink。

SQL>conn  target/password;(此语句为linux,登录用户命令)
SQL> CREATE PUBLIC DATABASE LINK 名称
 CONNECT TO 用户名(原库)
 IDENTIFIED BY "密码"
 USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(Host = 源库ip)(PORT = 源库端口))) (CONNECT_DATA = (SERVER = DEDICATED) (SID= 源库sid)))';

例子如下:
CREATE PUBLIC DATABASE LINK link_target CONNECT TO source IDENTIFIED BY "password"  USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(Host = 192.168.1.1)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SID= dengqsxxx)))';

 第五步:登录源数据库--source用户,创建物化视图log

SQL> conn  source/password;
SQL> create materialized view log on 	要同步的表名称;
注意:如果需要同步的表有多个要同步到目标数据,就执行多次,假设要同步t_users,t_message.则执行:如下:
SQL> create materialized view log on  t_users;
SQL> create materialized view log on  t_message;

第六步:登录目标数据用户--target用户,创建物化视图

SQL> conn  source/password;
CREATE MATERIALIZED VIEW 	物化视图名称(就是同步数据的表名称)	refresh force on demand  start with sysdate next sysdate + 1/1440 AS SELECT * FROM 	要同步的表的名称(跟物化视图名称一样)@第四步创建的dblink的名称;

例如:CREATE MATERIALIZED VIEW 	t_office 	refresh force on demand  start with sysdate next sysdate + 1/1440 AS SELECT * FROM 	t_office@link_target;

第七步骤:登录目标数据库用户--target用户,创建不同步表的数据结构

SQL> conn  source/password;
SQL> @/home/dengqs/butongbu.sql;
(注意:假设你不同步的表的butongbu.sql文件在/home/dengqs/目录下)

以上 步骤完成之后,元数据库就会向目标数据库同步要同步的表的数据。

猜你喜欢

转载自dengqsintyt.iteye.com/blog/2018198