专栏首页运维ABCOracle基于物化视图实现远程数据复制

Oracle基于物化视图实现远程数据复制

物化视图简介:

远程表复制功能:可以借助数据库链接(dblink),在远程数据库中建立一个本地表的副本,用该方式实现表的定时同步。物化视图存储基于远程表的数据,也可以称为快照。

加速查询功能:物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,在执行查询时,可以直接查询物化视图,或者通过查询重写定位到物化视图,来加快速度。

本文使用物化视图的远程表复制功能。

源端配置:

ip

172.27.9.55

Oracle version

11.2.0.4

sid

whbkdb

user

user_mv

tablespace

TS_MV_TEST

table

tt

MATERIALIZED VIEW LOG

MLOG$_×××

目标端配置:

ip

172.27.9.56

Oracle version

11.2.0.4

sid

whbkdb

user

user_bk

tablespace

TS_BK

dblink

mv

MATERIALIZED VIEW

mv_bk

流程图:

源端搭建

1.创建表空间

SQL> conn / as sysdba
Connected.
SQL> CREATE TABLESPACE "TS_MV_TEST" LOGGING DATAFILE '/orasvr/whbkdb/ts_mv_test/TS_MV_TEST01.dbf ' SIZE 512M AUTOEXTEND ON NEXT  128M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT  AUTO;
Tablespace created.

表空间名为TS_MV_TEST

2.创建用户

CREATE USER USER_MV
IDENTIFIED BY USER_MV
DEFAULT TABLESPACE TS_MV_TEST
PROFILE DEFAULT
ACCOUNT UNLOCK;
GRANT CONNECT TO USER_MV;
GRANT RESOURCE TO USER_MV;
GRANT CREATE DATABASE LINK TO USER_MV;
GRANT CREATE MATERIALIZED VIEW TO USER_MV;
ALTER USER USER_MV QUOTA UNLIMITED ON TS_MV_TEST;

创建用户USER_MV

3.创建表

SQL> conn user_mv/user_mv;
Connected.
SQL> create table tt(id int,name varchar2(30));
Table created.

使用user_mv用户登陆,创建表tt

4.新建索引和约束

create unique index PK_tt on tt (id) tablespace TS_MV_TEST;
ALTER TABLE tt ADD (  CONSTRAINT PK_tt  PRIMARY KEY  (ID)  USING INDEX PK_tt  ENABLE VALIDATE);

新建唯一索引pk_tt和约束pk_tt

5.创建物化视图日志

SQL> CREATE MATERIALIZED VIEW LOG ON tt with primary key;
Materialized view log created.

创建物化视图日志

创建物化视图日志的同时会生成表MLOG$_TT,当使用primary key时,oracle创建临时表 RUPD$_基础表。

目标端搭建

1.创建表空间

SQL> CREATE TABLESPACE "TS_BK" LOGGING DATAFILE '/orasvr/whbkdb/ts_bk/TS_BK01.dbf ' SIZE 512M AUTOEXTEND ON NEXT  128M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT  AUTO;
Tablespace created.

创建表空间TS_BK

2.创建用户

CREATE USER USER_BK
IDENTIFIED BY USER_BK
DEFAULT TABLESPACE TS_BK
PROFILE DEFAULT
ACCOUNT UNLOCK;
GRANT CONNECT TO USER_BK;
GRANT RESOURCE TO USER_BK;
GRANT CREATE DATABASE LINK TO USER_BK;
GRANT CREATE MATERIALIZED VIEW TO USER_BK;
ALTER USER USER_BK QUOTA UNLIMITED ON TS_BK;

创建用户user_bk

3.创建dblink

SQL> conn  user_bk/user_bk;
Connected.
SQL> create database link mv connect to user_mv identified by user_mv using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.27.9.55 )(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = whbkdb) ) )';
Database link created.

使用user_bk登陆,创建dblink mv

4.创建物化视图

CREATE MATERIALIZED VIEW mv_bk
BUILD IMMEDIATE
REFRESH FORCE
ON DEMAND
next sysdate+1/2880
with primary key
AS
SELECT * from user_mv.tt@mv;

创建物化视图mv_bk,手工方式刷新,sysdate+1/2880表示每半分钟刷新一次

可以看到在创建物化视图的同时会新建同名表mv_bk

测试

源端插入测试数据

SQL> insert into tt values(1,'A');
1 row created.

查看目标端物化视图mv_bk

SQL> select * from mv_bk;        
ID NAME
---------- ------------------------------         
1 A

源端清空表数据

SQL> delete from tt;

查看目标端物化视图

SQL> select * from mv_bk;
no rows selected

至此oracle基于物化视图的远程数据复制搭建测试完成,本文搭建脚本已上传github,下载链接:https://github.com/loong576/Oracle-MATERIALIZED-VIEW/archive/master.zip

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • There is no more space for virtual disk .vmdk.

    一般来讲文件系统撑爆会导致应用程序出问题,但不会影响和主机的连接,所以怀疑是机器本身的磁盘满了导致虚机运行故障。

    loong576
  • 生产环境Oracle RAC扩表空间全记录

    发现BMSBAK表空间数据文件有8个,全部为自动扩展,大小由5120M——16384M不等,自动扩展的值由1——16384不等(这两处显得很不专业,数据文件大小...

    loong576
  • k8s实践(十):监控工具Weave Scope详解

    Weave Scope自动生成应用程序的映射,使您能够直观地理解、监视和控制基于容器化微服务的应用程序。

    loong576
  • python 3.x 爬虫基础---正则表达式(案例:爬取猫眼信息,写入txt,csv,下载图片)

      正则表达式是对字符串的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则的字符串”,此字符串用来表示对字符串的一种“过滤”逻辑。...

    kmonkey
  • python运维开发笔记4

    ['mysql','-u','root','-p123','-e','show processlist']

    用户2398817
  • 这或许是我见过的最简单的正则表达式教程(三)

    五一劳动节来啦,小小挖掘机们小编们首先祝大家劳动节快乐! 作为中国放假大学的一员,除了趁着长达8天的五一春假好好休整之外,当然还要忙中偷闲补习一下python的...

    石晓文
  • Python 正则表达

    pattern 就是正则表达式字符串,flags是选项。正则表达需要被编译,为了提高提高效率,这些编译后的结果被保存,下次使用同样的pattern 的时候,就不...

    江小白
  • python笔记:正则表达式

    超级大猪
  • 5分钟速览python正则表达式常用函数

    导读:正则表达式是处理字符串类型的"核武器",不仅速度快,而且功能强大。本文不过多展开正则表达式相关语法,仅简要介绍python中正则表达式常用函数及其使用方法...

    luanhz
  • python教程

    re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

    Jinni

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动