• 物化视图(materialized view) 实现数据迁移、数据定时同步


    近日公司有一个9i 的Oracle数据库,运行效率低下。想要将其升级到11G. 但是升级之前 要将数据进行同步,好在表不是很多。只有三张表。业务压力也不大,就想到了使用物 化视图的方式将数据同步过来。

    1.1 环境

    数据库主机IP地址TNSDB_LINKORACLE 版本
    db210.100.99.114 to_118
    11G
    db110.100.99.118  9iG

    上面是本次操作测试的环境。说明: 将9i 数据库中的表实时同步到11G.

    1.2 在db2配置指向db1的tns

    配置tns 方便创建dblink。当然不配置也可以创建。此步完全依赖于个人爱好。 我习惯配置,在创建dblink时,会更简洁一些。TNS如下:

    t118 =
       (DESCRIPTION =
         (ADDRESS_LIST =
           (ADDRESS = (PROTOCOL = TCP)(HOST = 10.100.99.114)(PORT = 1521))
         )
         (CONNECT_DATA =
           (SERVICE_NAME = ktdb)
         )
       )   
    

    1.3 在db2的数据库中创建dblink

    create public database link to_118 connect to test identified by test123 using 't118';
    

    1.4 给db1中相应的表上添加物化视图日志

    1.4.1 有主键表

    create table test(id number,name varchar2(20));
    alter table test add constraint pk_testid primary key(id);
    create materialized view log on test  with primary key;  
    

    对于有主键的表,日志依赖于主键。

    create materialized view log on test  with primary key; 
    

    1.4.2 无主键表

    对于无主键的表,依赖于rowid

    create table test_noprimarykey(id number,name varchar2(20));
    create materialized view log on test_noprimarykey  with rowid;
    

    1.5 在db2上创建物化视图

    分布式查询中(也就是使用db_link), 不能以on commit 方式指定刷新方式,创建时会遇到ORA-12054.

    1.5.1 有主键表的物化视图

    CREATE MATERIALIZED VIEW dbmon.test
    (id,name)
    REFRESH force 
    start with sysdate next sysdate+1/1440  # 指定刷新频率为1分钟
    AS
    SELECT id,name FROM dbmon.test@to_118;
    

    1.5.2 无主键表的物化视图

    CREATE MATERIALIZED VIEW test_noprimarykey
    (id,name)
    REFRESH force
    start with sysdate next sysdate+1/1440  # 指定刷新频率为1分钟
    WITH rowid
    AS
    SELECT id,name FROM dbmon.test_noprimarykey@to_118;
    

    1.6 测试数据同步

     在db1数据库插入数据后,稍等 1分钟,然后连到db2数据库查看结果。

    1.6.1 有主键表

    在db1 上向表中插入一行数据:

    insert into test values(1,'aaa');
    commit;
    

    1.6.2 无主键表

    insert into test values(1,'bbb');
    commit;
  • 相关阅读:
    28、列举常见的内置函数(各个函数的示例,一大半没写全,慢慢更新,会全的)
    Django之前端插件定制之表头
    26、Python的可变类型和不可变类型?
    25、Python垃圾回收机制?
    24、简述Python的深浅拷贝以及应用场景
    基础题(五)
    使用OpenCV和Python进行人脸识别
    Codeforces Round #253 (Div. 2)B(暴力枚举)
    uva11609(组合数学,快速幂)
    uva10892(暴力枚举)
  • 原文地址:https://www.cnblogs.com/halberd-lee/p/10757376.html
Copyright © 2020-2023  润新知