最近在做一个项目,涉及到数据库同步的相关知识,后来通过向单位的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/目录下)
以上 步骤完成之后,元数据库就会向目标数据库同步要同步的表的数据。