Oracle远程数据建物化视图(materialized)创建简单记录,以及DBLINK的创建
目的:实现远程数据库访问及其相应表的定时同步
一、远程数据库dblink的创建
select * from dba_db_links;
select * from user_sys_privs;--查询用户权限
1、查看scott用户是否具备创建database link 权限
select * from user_sys_privs where privilege like upper('%DATABASE LINK%') AND USERNAME='SCOTT';
2、授权dblink
grant create public database link to scott;
3、创建dblink
create public database link DBLINK名 connect to 远程用户名 identified by "密码" USING '远程数据库IP地址/库名';--如果在create之后不加public,则创建的dblink就不是公共的,就只有创建者可以使用
4、删除dblink
drop public database link link_movebi;
二、物化视图(materialized)简介
首先创建一个测试用表,如下图:

物化视图也是种视图。Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。
物化视图存储基于远程表的数据,也可以称为快照。物化视图可以查询表,视图和其它的物化视图。
1、本地库(创建物化视图需要的权限)
grant create materialized view to scott;-----切换sys用户授权
2、源系统库(如果需要进行快速刷新,则需要建立物化视图日志。-->在源表库建立物化视图日志)
物化视图日志在建立时有多种选项:可以指定为 rowid、primary key 和 object id 几种类型,同时还可以指定 sequence 或明确指定列名。
不过上面这些情况产生的物化视图日志的结构都不相同。
--第一种主键类型
create materialized view log on dept_tmp_test
tablespace movebi_data -- 日志空间
with primary key; -- 指定为主键类型
--第二种rowid类型
--new values 从句来决定oracle是否在物化视图日志中保持新的和旧的值。including 保存新的和旧的值,如果表上有一个单表物化聚合视图,你想物化视图适合快速刷新,你就要指定including
create materialized view log on dept_tmp_test
tablespace movebi_data -- 日志空间
with rowid, sequence (dept_dmid, new_virtual_type_name6) including new values;-- 指定为rowid类型
查看物化视图日志:
select * from mlog$_dept_tmp_test;
SQL> desc mlog$_dept_tmp_test;
Name Type Nullable Default Comments
---------------------- ------------- -------- ------- --------
DEPT_DMID NUMBER(22) Y --记录每次DML操作对应的DEPT_DMID值
NEW_VIRTUAL_TYPE_NAME6 VARCHAR2(200) Y --记录每次DML操作对应的NEW_VIRTUAL_TYPE_NAME6值
M_ROW$$ VARCHAR2(255) Y --保存基表的ROWID信息,根据M_ROW$$中的信息可以定位到发生DML操作的记录。
SEQUENCE$$ NUMBER Y --根据DML操作发生的顺序记录序列的编号,当刷新时,根据SEQUENCE中的顺序就可以和基表中的执行顺序保持一致。
SNAPTIME$$ DATE Y --记录了刷新操作的时间。
DMLTYPE$$ VARCHAR2(1) Y --记录值I、U和D,表示操作是INSERT、UPDATE还是DELETE。
OLD_NEW$$ VARCHAR2(1) Y --用于表示这个值是新值还是旧值。N(EW)表示新值,O(LD)表示旧值,U表示UPDATE操作。
CHANGE_VECTOR$$ RAW(255) Y --DML操作发生在那个或那几个字段上
XID$$ NUMBER Y --xid$$(事务id)唯一标识对行进行更改的事务。
删除日志:
drop materialized view log on dept_tmp_test;
3、本地库创建物化视图
(1)创建方式(BuildMethods):包括 build immediate 和 build deferred 两种。
build immediate 是在创建物化视图的时候就生成数据。
build deferred 则在创建时不生成数据,以后根据需要在生成数据。默认为 build immediate。
(2)查询重写(QueryRewrite):包括 enable query rewrite 和 disable query rewrite 两种。
分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,
如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为 disable query rewrite。
(3)物化视图有二种刷新模式
on demand 顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;
on commit 提交触发,一旦基表有了commit,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。一般用这种方法在操作基表时速度会比较慢。
(4)三种刷新方法
完全刷新(COMPLETE): 会删除表中所有的记录(如果是单表刷新,可能会采用TRUNCATE的方式),然后根据物化视图中查询语句的定义重新生成物化视图。
快速刷新(FAST): 采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操作刷新到物化视图中去。FAST必须创建基于主表的视图日志。对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。
FORCE 方式:这是默认的数据刷新方式。Oracle会自动判断是否满足快速刷新的条件,如果满足则进行快速刷新,否则进行完全刷新。
关于快速刷新:Oracle物化视图的快速刷新机制是通过物化视图日志完成的。Oracle通过一个物化视图日志还可以支持多个物化视图的快速刷新。
物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。
create materialized view mv_dept_tmp_test
refresh fast with rowid
on demand
start with sysdate next sysdate+5/24/60
disable query rewrite
as
select * from dept_tmp_test@link_movebi; --refresh fast with rowid 快速刷新
--on demand 在用户需要时由用户刷新
--start with sysdate next sysdate+5/24/60 这个物化视图每5min进行刷新
--disable query rewrite 不可重写(默认)
这里要注意,当发生DML 操作时,内部的触发器会把变化记录到物化视图日志里,也就是说物化视图不支持DDL的同步,
所以在物化视图的编写过程中尽量不要使用 select * from 的形式,因为这样当基表发生变化时,物化视图就会失效。
物化视图日志的名称为MLOG$_后面跟基表的名称,如果表名的长度超过20位,则只取前20位,当截短后出现名称重复时,
Oracle会自动在物化视图日志名称后面加上数字作为序号。
4、目标物化视图创建索引
create index pk_id on mv_dept_tmp_test(dept_dmid);
5、物化视图刷新
使用dbms_mview.refresh 手工刷新
--完全刷新
EXEC DBMS_MVIEW.REFRESH(LIST => 'mv_table_name',METHOD => 'c');
EXEC DBMS_MVIEW.REFRESH('mv_table_name','C');
--快速刷新
EXEC DBMS_MVIEW.REFRESH(LIST => 'table_name',METHOD => 'f');
EXEC DBMS_MVIEW.REFRESH('mv_table_name','F');
--过程调用
begin
DBMS_MVIEW.REFRESH(LIST => 'mv_dept_tmp_test',METHOD => 'f');
end;
查看物化视图刷新状态信息
select mview_name, last_refresh_date, staleness from user_mviews;
select name, last_refresh from user_mview_refresh_times;
物化视图具体操作汇总(方便自己快速查找)
--1、给本地库授权
grant create materialized view to scott;
--2、源系统库目标表建日志
create materialized view log on dept_tmp_test
tablespace movebi_data -- 日志空间
with primary key; -- 指定为主键类型无主键可指定rowid,但注意要和后面创建物化视图时保持一致
--查看日志
select * from mlog$_dept_tmp_test;
--3、本地库创建物化视图
create materialized view mv_dept_tmp_test
refresh force
on demand
start with sysdate next sysdate+5/24/60
as
select * from dept_tmp_test@link_movebi;
--force(默认)自动判断是否满足快速刷新的条件,如果满足则进行快速刷新,否则进行完全刷新。
--4、修改刷新时间
alter materialized view mv_dept_tmp_test refresh force on demand start with sysdate next sysdate+10/24/60
--5、手动快速刷新
begin
DBMS_MVIEW.REFRESH(LIST => 'v_union_target_bak',METHOD => 'f');
end;
--6、目标库删除物化视图日志
drop materialized view log on dept_tmp_test;
--7、本地库删除物化视图
drop materialized view mv_dept_tmp_test;
查看物化视图状态备注
select * from user_mviews;
staleness:
1、fresh 最新状态:当前物化视图的内容出于最新的状态
2、stale 陈旧状态:物化视图引用的主表已经更新,但是物化视图没有刷新,所以内容相对主表来说是旧的
3、needs_compile 需要编译:物化视图引用的主表比如视图,进行了重建后相应的物化视图就需要编译,当处于这种状态的时候dba_objects
视图显示的STATUS为INVALID需要运行语句:alter materialized view mv_name compile;
4、unusable 物化视图引用的主表状态不确定
5、unknown 未知:通过prebuilt创建的表
6、undefined 物化视图引用的表来自其他的数据库,一般通过dblink链接过来的
(注:此为学习记录笔记,仅供参考若有问题请指正,后续补充......)
参考:https://www.cnblogs.com/xiaohuilong/p/5995596.html
参考:https://blog.csdn.net/qq_26941173/article/details/78529041
参考:https://www.cnblogs.com/linjiqin/archive/2012/05/22/2513551.html
Oracle远程数据建物化视图(materialized)创建简单记录,以及DBLINK的创建的更多相关文章
- [terry笔记]物化视图 materialized view基础学习
一.物化视图定义摘录: 物化视图是包括一个查询结果的数据库对像(由系统实现定期刷新数据),物化视图不是在使用时才读取,而是预先计算并保存表连接或聚集等耗时较多的操作结果,这样在查询时大大提高了 ...
- DB2物化视图(Materialized Query Tables, MQT)
DB2的物化视图MQT是基于查询结果定义的一个表,MQT中包括的数据来自MQT定义所基于的一个或多个表, 使用MQT能够显著提高查询的操作性能. 数据库的视图和MQT都是基于一个查询来定义的.每当视图 ...
- 物化视图(materialized view) 实现数据迁移、数据定时同步
近日公司有一个9i 的Oracle数据库,运行效率低下.想要将其升级到11G. 但是升级之前 要将数据进行同步,好在表不是很多.只有三张表.业务压力也不大,就想到了使用物 化视图的方式将数据同步过来. ...
- SSIS教程:创建简单的ETL包 -- 1. 创建项目和基本包
在本课中,将创建一个简单 ETL 包,该包可以从单个平面文件(Flat File)源中提取数据,使用两个查找转换组件转换该数据,然后将该数据写入AdventureWorksDW2012 的 FactC ...
- Oracle物化视图的创建及使用
oracle物化视图 一.oracle物化视图基本概念 物化视图首先需要创建物化视图日志, oracle依据用户创建的物化视图日志来创建物化视图日志表, 物化视图日志表的名称为mlog$_后面跟 ...
- Oracle物化视图的创建及使用(一
Oracle物化视图的创建及使用 http://blog.csdn.net/tegwy/article/details/8935058 先看简单创建语句: create materialized ...
- oracle 物化视图及创建索引
物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体 ...
- 详解Oracle数据货场中三种优化:分区、维度和物化视图
转 xiewmang 新浪博客 本文主要介绍了Oracle数据货场中的三种优化:对分区的优化.维度优化和物化视图的优化,并给出了详细的优化代码,希望对您有所帮助. 我们在做数据库的项目时,对数据货场的 ...
- ORACLE物化视图(物理视图)
百度文库 http://wenku.baidu.com/view/f78f55c68bd63186bcebbc4b.html ORACLE物化视图 一.------------------------ ...
随机推荐
- datatable:dt.page(dt.page()).draw(false)
dt.page(dt.page()).draw(false);该方法可以直接返回到当前页,不用重新绘制table 描述 分页是DataTables的一个核心功能,并且该方法提供对表格显示页面的外部控制 ...
- jenkins持续集成之Global Tool Configuration的配置
Global Tool Configuration的配置过程: 1.点击系统管理2.点击 Global Tool Configuration3.必须配置: jdk git ant maven 1.点击 ...
- kalilinux-信息搜集
dns扫描: dnsenum --enum www.baidu.com --threads [number] 一次运行的线程数量 -r 递归查找 -d 允许你设置在WHOIS请求之间的时间延迟,单位为 ...
- CKEditor4.x整合教程-Xproer.WordPaster
版权所有 2009-2017 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webplug/wordpa ...
- 深入理解java虚拟机(二)HotSpot Java对象创建,内存布局以及访问方式
内存中对象的创建.对象的结构以及访问方式. 一.对象的创建 在语言层面上,对象的创建只不过是一个new关键字而已,那么在虚拟机中又是一个怎样的过程呢? (一)判断类是否加载.虚拟机遇到一条new指令的 ...
- 用layer-list做一个卡片背景
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android=" ...
- alpha七天冲刺计划-第一天
alpha七天冲刺计划-第一天 一.团队会议: 内容:具体分配任务到个人,预估项目时间,确定UI样式. 合照: 二.团队成员任务认领: 李尤:界面UI设计. 彭迪彬:HTML+CSS部分实现. 任路乾 ...
- java动态代理类
很有意思的一个东西,在java.lang.reflect包下 示例代码 package com.guangshan.test.proxy; import java.lang.reflect.Invoc ...
- [Postgres]Postgres单用户模式执行VACUUM
# su - postgres $ /usr/local/pgsql/bin/postgres --single -D /usr/local/pgsql/data [不能VACUUM的数据库] Pos ...
- PHP开发实用-阿里短信服务(Short Message Service)
步骤 1 使用阿里云短信服务正常发短信需要 短信签名 短信模板 1申请短信签名 根据用户属性来创建符合自身属性的签名信息.企业用户需要上传相关企业资质证明,个人用户需要上传证明个人身份的证明. ...