前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle基于物化视图实现远程数据复制

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

作者头像
loong576
修改2019-10-23 11:17:53
1.1K0
修改2019-10-23 11:17:53
举报
文章被收录于专栏:运维ABC

物化视图简介:

远程表复制功能:可以借助数据库链接(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.创建表空间

代码语言:txt
复制
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.创建用户

代码语言:txt
复制
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.创建表

代码语言:txt
复制
SQL> conn user_mv/user_mv;
Connected.
SQL> create table tt(id int,name varchar2(30));
Table created.

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

4.新建索引和约束

代码语言:txt
复制
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.创建物化视图日志

代码语言:txt
复制
SQL> CREATE MATERIALIZED VIEW LOG ON tt with primary key;
Materialized view log created.

创建物化视图日志

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

目标端搭建

1.创建表空间

代码语言:txt
复制
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.创建用户

代码语言:txt
复制
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

代码语言:txt
复制
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.创建物化视图

代码语言:txt
复制
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

测试

源端插入测试数据

代码语言:txt
复制
SQL> insert into tt values(1,'A');
1 row created.

查看目标端物化视图mv_bk

代码语言:txt
复制
SQL> select * from mv_bk;        
ID NAME
---------- ------------------------------         
1 A

源端清空表数据

代码语言:txt
复制
SQL> delete from tt;

查看目标端物化视图

代码语言:txt
复制
SQL> select * from mv_bk;
no rows selected

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/09/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档