ITPub博客

首页 > 数据库 > Oracle > Oracle 物化视图同步表-roid

Oracle 物化视图同步表-roid

原创 Oracle 作者:Magic_Chxin 时间:2015-04-03 14:41:59 0 删除 编辑

一、在目标库建立DBLINK

 

目标库操作:

 

主机B中建立TNS(tnsname.ora),也可以使用netca建立TNS

 

[oracle@rac1 ~]$ cd /u01/app/oracle/product/11.2.0/db_1/network/admin/

[oracle@rac1 admin]$ vi tnsnames.ora

 

ORCL =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = ORCL)

    )

  )

 

[oracle@rac1 admin]$ !sql

sqlplus '/ as sysdba'

 

SQL*Plus: Release 11.2.0.1.0 Production on Tue Jan 20 09:17:10 2015

 

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Testing options

 

SQL> grant create public database link,create database link to sguap206;

 

SQL> conn sguap206/sguap206

Connected.

SQL> create public database link sguap_link connect to sguap206 identified by sguap206 using 'ORCL';

                                 link名称            数据库A的用户      数据库A的密码

Database link created.

 

SQL>  select owner,object_name from dba_objects where object_type='DATABASE LINK';

 

OWNER                          OBJECT_NAM

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

PUBLIC                         SGUAP_LINK

 

SQL> SELECT SYSDATE FROM DUAL@SGUAP_LINK;

 

SYSDATE

---------

20-JAN-15

 

至此DBLIKE测试成功。

二、创建物化视图对表进行增量同步

 

1、在源库上建立物化视图日志

 

SQL> CREATE MATERIALIZED VIEW LOG ON PF_ALARM_TYPE WITH SEQUENCE, ROWID (TYPE_ID,TYPE_INFO)  INCLUDING NEW VALUES;                                                                  表的列

Materialized view log created

 

使用rowid,sequence捕获数据变化情况。

 

注意:加上including new values子句,是为了记录数据修改前的值。

 

2、在目标库上创建定时增量更新的物化视图

 

SQL> create materialized view PF_ALARM_TYPE 

  2  refresh fast on demand 

  3  start with sysdate next sysdate+1/288 with rowid 

  4  as 

  5  select * from PF_ALARM_TYPE@SGUAP_LINK;

create materialized view PF_ALARM_TYPE

*

ERROR at line 1:

ORA-00955: name is already used by an existing object

报错原因:说明你创建的物化视图名称和表名相同,可以修改物化视图的名称或者把那个表删除(谨慎)。

我这里使用删除表的操作(谨慎)。

 

 

SQL> create materialized view PF_ALARM_TYPE 

  2  refresh fast on demand 

  3  start with sysdate next sysdate+1/288 with rowid 

  4  as 

  5  select * from PF_ALARM_TYPE@SGUAP_LINK;

 

Materialized view created.

 

 

如果跨库跨平台时,有时必须要使用with primary key,物化视图对应的表上没有主键,如果需要索引可以另行添加。

 

 

SQL> select * from PF_ALARM_TYPE;

                          TYPE_ID TYPE_INFO

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

                                1 无效卡

                                2 门开超时

                                3 强制开门

                                4 反潜回

                                5 胁迫开门

                                6 互锁管制

                                7 火警

                                8 脱机

                                9 控制器拆卸

9 rows selected

发现数据第一次成功同步到目标库。

 

 

测试insert: 在源库插入一条数据,查看目标库。

SQL> INSERT INTO PF_ALARM_TYPE VALUES(10 ,'TEST');

1 row inserted

 

SQL> COMMIT;

Commit complete

 

目标库查看:

    发现还没有同步过来,等待5分钟

SQL> SELECT * FROM PF_ALARM_TYPE;

                          TYPE_ID TYPE_INFO

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

                                1 无效卡

                                2 门开超时

                                3 强制开门

                                4 反潜回

                                5 胁迫开门

                                6 互锁管制

                                7 火警

                                8 脱机

                                9 控制器拆卸

9 rows selected

 

SQL> SELECT * FROM PF_ALARM_TYPE;

                          TYPE_ID TYPE_INFO

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

                                1 无效卡

                                2 门开超时

                                3 强制开门

                                4 反潜回

                                5 胁迫开门

                                6 互锁管制

                                7 火警

                                8 脱机

                                9 控制器拆卸

                               10 TEST

10 rows selected

发现刚刚在源库插入的数据已经同步到目标库上。

 

 

测试update: 在源库更新一条数据,查看目标库。

 

SQL> update PF_ALARM_TYPE set type_info='OK' where type_info='TEST';

1 row updated

 

SQL> commit;

Commit complete

 

 

 

SQL> select * from PF_ALARM_TYPE;

                          TYPE_ID TYPE_INFO

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

                                1 无效卡

                                2 门开超时

                                3 强制开门

                                4 反潜回

                                5 胁迫开门

                                6 互锁管制

                                7 火警

                                8 脱机

                                9 控制器拆卸

                               10 OK

  1. rows selected

 

目标库查看

SQL> SELECT * FROM PF_ALARM_TYPE;

                          TYPE_ID TYPE_INFO

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

                                1 无效卡

                                2 门开超时

                                3 强制开门

                                4 反潜回

                                5 胁迫开门

                                6 互锁管制

                                7 火警

                                8 脱机

                                9 控制器拆卸

                               10 OK

10 rows selected

 

 

 

 

 

测试delete: 在源库删除一条数据,查看目标库。

SQL> DELETE PF_ALARM_TYPE WHERE TYPE_ID=10;

1 row deleted

 

SQL> COMMIT;

Commit complete

 

SQL> SELECT * FROM PF_ALARM_TYPE;

                          TYPE_ID TYPE_INFO

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

                                1 无效卡

                                2 门开超时

                                3 强制开门

                                4 反潜回

                                5 胁迫开门

                                6 互锁管制

                                7 火警

                                8 脱机

                                9 控制器拆卸

9 rows selected

 

 

 

目标库查看同步情况:

SQL> SELECT * FROM PF_ALARM_TYPE;

                          TYPE_ID TYPE_INFO

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

                                1 无效卡

                                2 门开超时

                                3 强制开门

                                4 反潜回

                                5 胁迫开门

                                6 互锁管制

                                7 火警

                                8 脱机

                                9 控制器拆卸

9 rows selected

发现源库删除的数据目标库也删除了。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30114870/viewspace-1485275/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2015-01-23

  • 博文量
    7
  • 访问量
    27349