Oracle物化视图创建全过程

合集下载

oracle物化视图及创建索引

oracle物化视图及创建索引

oracle物化视图及创建索引物化视图是⼀种特殊的物理表,“物化”(Materialized)视图是相对普通视图⽽⾔的。

普通视图是虚拟表,应⽤的局限性⼤,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。

这样对整体查询性能的提⾼,并没有实质上的好处。

1、物化视图的类型:ON DEMAND、ON COMMIT⼆者的区别在于刷新⽅法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进⾏刷新(REFRESH),即更新物化视图,以保证和基表数据的⼀致性;⽽ON COMMIT是说,⼀旦基表有了COMMIT,即事务提交,则⽴刻刷新,⽴刻更新物化视图,使得数据和基表⼀致。

2、ON DEMAND物化视图物化视图的创建本⾝是很复杂和需要优化参数设置的,特别是针对⼤型⽣产数据库系统⽽⾔。

但Oracle允许以这种最简单的,类似于普通视图的⽅式来做,所以不可避免的会涉及到默认值问题。

也就是说Oracle给物化视图的重要定义参数的默认值处理是我们需要特别注意的。

物化视图的特点:(1) 物化视图在某种意义上说就是⼀个物理表(⽽且不仅仅是⼀个物理表),这通过其可以被user_tables查询出来,⽽得到佐证;(2) 物化视图也是⼀种段(segment),所以其有⾃⼰的物理存储属性;(3) 物化视图会占⽤数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证;创建语句:create materialized view mv_name as select * from table_name 默认情况下,如果没指定刷新⽅法和刷新模式,则Oracle默认为FORCE和DEMAND。

物化视图的数据怎么随着基表⽽更新? Oracle提供了两种⽅式,⼿⼯刷新和⾃动刷新,默认为⼿⼯刷新。

也就是说,通过我们⼿⼯的执⾏某个Oracle提供的系统级存储过程或包,来保证物化视图与基表数据⼀致性。

这是最基本的刷新办法了。

物化视图的创建和快速刷新

物化视图的创建和快速刷新

物化视图的创建和快速刷新1.物化视图简介物化视图,它是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,从而快速的得到结果。

物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL 语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

其中物化视图有三种:聚集物化视图、包含连接物化视图、嵌套物化视图。

但三种物化视图的快速刷新的限制条件有很大区别,而其他方面则区别不大。

2.物化视图的创建和参数说明2.1 物化视图实例南昌营运数据为5000万条左右,每日新增20w条左右。

根据报表的实际需求,在物化视图中按照车牌,车队,天汇总统计后的数据为80万条。

这样大大提高了查询的效率。

创建物化视图的语句如下:create materialized view BUSINESS_DATA_CAR_MVBUILD DEFERRED –在创建时不刷新,按照用户设定的时间刷新refresh force –如果可以快速刷新则进行快速刷新,否则进行完全刷新on demand –按照指定的方式刷新start with to_date('14-07-2011 13:41:16', 'dd-mm-yyyy hh24:mi:ss') --第一次刷新时间next TRUNC(SYSDA TE+1)+ 2/24 --刷新时间间隔asselectto_char(date_up,'yyyy-MM-dd') as day,taxi_group,taxi_company,dispatch_car_no,service_no,sum(decode(sign(OYSTER_CARD_ORIGIN_SUM-OYSTER_CARD_LEFT_SUM),1,1,-1,0)) as cardTime,count(*) as times,sum(decode(sign(OYSTER_CARD_ORIGIN_SUM-OYSTER_CARD_LEFT_SUM),1,OYSTER_ CARD_ORIGIN_SUM-OYSTER_CARD_LEFT_SUM,-1,0)) as cardSum,sum(sum) as sum,sum(distance+free_distance)as total_distance,sum(decode(sign(distance),1,distance,-1,0,distance)) as distance,sum(free_distance) as free_distance,sum(decode(sign(date_down-date_up),1,(date_down-date_up)*24,-1,0)) as workTime,sum(waiting_hour*60+waiting_second)as waiting_time,sum(decode(to_char(date_up,'HH24'),'02',1,'03',1,'04',1,0))as overTimeTimes,from SINGLE_BUSINESS_DA TA_BS buswhere date_up <= date_down and(date_down -date_up ) <0.5 and distance>=0 and distance<100 and free_distance<500group by service_no,dispatch_car_no,to_char(date_up,'yyyy-MM-dd'),taxi_group,taxi_company;, 2.2参数介绍2.2.1 BUILDBUILD IMMEDIATE :是在创建物化视图的时候就生成数据,。

Oracle物化视图详解

Oracle物化视图详解

物化视图详解物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。

物化视图存储基于远程表的数据,也可以称为快照。

对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。

如果你想修改本地副本,必须用高级复制的功能。

当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

物化视图可以查询表,视图和其它的物化视图。

一、关于物化视图日志:查询物化视图日志文件格式:desc mlog$_lzwmvtest;创建物化视图时默认指定物化视图中存在主键,如果不指定,那么创建的物化视图日志文件的基表必须存在主键,否则会报错Demo:对一个表test创建日志:create materialized view log on test;那么会报:表'LZWMVTEST'不包含主键约束条件这种情况下,就必须指定日志文件结构比如:create materialized view log on test with rowid(具体的针对日志内容方面的在另外一个专题里说明,这里就简述到此)二、关于生成数据和刷新:1>生成数据两大选项:build immediate build deferredBuild immediate:在创建物化视图的同时根据主表生成数据Bulid deferred:在创建物化视图的同时,在物化视图内不生成数据,如果此时没有生成数据,以后可以采取:EXEC DBMS_MVIEW.Refresh(‘MV_name’,’C’),注意必须使用全量刷新,默认是增量刷新,所以这里参数必须是C,因为之前都没有生成数据,所以必须全量。

2>关于刷新²刷新方式:complete fast forceComplete :完全刷新整个物化视图,相当于重新生成物化视图,此时即时增量刷新可用也全量刷新ØFast:当有数据更新时依照相应的规则对物化视图进行更新(此时必须创建物化视图日志(物化视图日志记录了数据更新的日志),关于日志的说明,参照“物化视图日志文件介绍”)ØForce:当增量刷新可用则增量刷新,当增量刷新不可用,则全量刷新(此项为默认选项)不过从实际情况出发,应该尽量不使用默认选项,可以考虑使用增量刷新,对大表特别有效,大表全量更新速度是非常慢的,特别是在存在索引的情况下(在创建物化视图语句中,可能某些限制查询的条件,导致了增量刷新无法使用,这个是需要注意的,具体是哪类语句导致fast刷新不可用,有待总结…..)²刷新时间:on demand on commit start with/ nextOn demand:在需要刷新时进行刷新(人工判断)On commit:在基表上有提交操作时,进行更新Start with:指定首次刷新的时间(一般指定的是当前时间,不过也可以在创建物化视图时不生成数据,则可以考虑在指定的时间刷新,从而生成数据)Next:刷新的周期时间三、基于主键的物化视图和ROWID的物化视图的说明创建物化视图日志时,指定了记录更新的原则即with 后面的primary 或者rowid 或者object id等等,后面,默认是以primary key为记录更新,在物化视图内也是以此为更新的原则。

Oracle第6章视图和索引操作

Oracle第6章视图和索引操作


量(g_Number)信息,可以创建一个“热点”商品的视

图。


CREATE OR REPLACE VIEW SCOTT.vw_HotGoods

AS

SELECT g_ID AS 商品号, g_Name AS 商品名称, t_ID
AS 类别号, g_Price AS 价格, g_Discount
案例完成步骤
(6)强制创建视图
正常情况下,如果基表不存在,创建视图就会失败。但是可
以使用FORCE选项强制创建视图(前提是创建视图的语句
没有语法错误),但此时该视图处于失效状态。

【例2-6】创建并验证基于Test表的强制视图
师 演
(a)在Test表不存在的情况下,创建基于该表的强制视图

vw_TestForce。

重定义时没有使用该选项,则以前的此选项将自动删除。

2.使用PL/SQL修改视图

(1)重命名视图
【例2-7】重命名用户方案SCOTT的视图
vw_MaxPriceGoods为vw_MaxPrice。
rename vw_MaxPriceGoods TO vw_MaxPrice;
Oracle数据库管理与应用实例教程


图。

CREATE OR REPLACE VIEW


SCOTT.vw_MaxPriceGoods
AS
SELECT t_ID, Max(g_Price) AS MaxPrice
FROM SCOTT.Goods
GROUP BY t_ID
Oracle数据库管理与应用实例教程

ORACLE物化视图 全攻略

ORACLE物化视图 全攻略

ORACLE物化视图全攻略一、------------------------------------------------------------------------------------------物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。

物化视图存储基于远程表的数据,也可以称为快照。

物化视图可以查询表,视图和其它的物化视图。

通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。

对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。

如果你想修改本地副本,必须用高级复制的功能。

当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

本篇我们将会看到怎样创建物化视图并且讨论它的刷新选项。

在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。

1.主键物化视图:下面的语法在远程数据库表emp上创建主键物化视图SQL> CREATE MATERIALIZED VIEW mv_emp_pkREFRESH FAST START WITH SYSDATENEXT SYSDATE + 1/48WITH PRIMARY KEYAS SELECT * FROM emp@remote_db;Materialized view created.注意:当用FAST选项创建物化视图,必须创建基于主表的视图日志,如下:SQL> CREATE MATERIALIZED VIEW LOG ON emp;Materialized view log created.2.Rowid物化视图下面的语法在远程数据库表emp上创建Rowid物化视图SQL> CREATE MATERIALIZED VIEW mv_emp_rowid REFRESH WITH ROWIDAS SELECT * FROM emp@remote_db;Materialized view log created.3.子查询物化视图下面的语法在远程数据库表emp上创建基于emp和dept表的子查询物化视图SQL> CREATE MATERIALIZED VIEW mv_empdeptAS SELECT * FROM emp@remote_db eWHERE EXISTS(SELECT * FROM dept@remote_db dWHERE e.dept_no = d.dept_no)Materialized view log created.REFRESH 子句[refresh [fast|complete|force][on demand | commit][start with date] [next date][with {primary key|rowid}]]Refresh选项说明:a.oracle用刷新方法在物化视图中刷新数据.b.是基于主键还是基于rowid的物化视图c.物化视图的刷新时间和间隔刷新时间Refresh方法-FAST子句增量刷新用物化视图日志(参照上面所述)来发送主表已经修改的数据行到物化视图中.如果指定REFRESH FAST子句,那么应该对主表创建物化视图日志SQL> CREATE MATERIALIZED VIEW LOG ON emp; Materialized view log created.对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。

物化视图解释和刷新

物化视图解释和刷新

Oracle 物化视图刷新物化视图对于前台数据库使用者来说如同一个实际的表,具有和一般表相同的如select等操作,而其实际上是一个视图,一个由系统实现定期刷新其数据的视图(具体刷新时间在定义物化视图的时候已有定义),使用物化视图更可以实现视图的所有功能,而物化视图却不是在使用时才读取,大大提高了读取速度,特别适用抽取大数据量表某些信息以及数据链连接表使用,但是物化视图占用数据库磁盘空间。

具体语法如下:create materialized view [view_name]refresh [fast|complete|force][on [commit|demand] |start with (start_time) next (next_time)]as{创建物化视图用的查询语句}具体实例如下:CREATE MATERIALIZED VIEW an_user_base_file_no_chargeREFRESH COMPLETE START WITH SYSDATENEXT TRUNC(SYSDATE+29)+5.5/24 --红色部分表示从指定的时间开始,每隔一段时间(由next指定)就刷新一次ASselect distinct user_nofrom cw_arrearage twhere (t.mon = dbms_tianjin.getLastMonth ort.mon = add_months(dbms_tianjin.getLastMonth, -1))删除物化视图:drop materialized view an_user_base_file_no_charge;以上是Oracle创建物化视图(Materialized View,以下简称MV)时的常用语法,各参数的含义如下:1.refresh [fast|complete|force] 视图刷新的方式:fast: 增量刷新.假设前一次刷新的时间为t1,那么使用fast模式刷新物化视图时,只向视图中添加t1到当前时间段内,主表变化过的数据.为了记录这种变化,建立增量刷新物化视图还需要一个物化视图日志表。

Oracle物化视图创建全过程

Oracle物化视图创建全过程

Oracle物化视图增量刷新创建全过程物化视图,从名字上面来开,它应该是属于视图,但是确实物化,下文将为您介绍Oracle物化视图创建的全过程,供您参考学习。

我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可以选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库用户下没有任何对象,只是有查询所有表的权限,因此无法做数据反向。

于是决定使用物化视图,把对方数据库中的数据拿过来,虽然数据量比较大,但是每月只拿一次,而且如果设置成增量更新,也不会太慢。

现在记录下物化视图的创建过程(以一张表为例)。

一、准备条件以及备注假设双方数据库都是ORACLE10g,需要同步过来的表名叫:GG_ZLX_ZHU,对方数据库用户名:username,密码:password,SID:CPEES。

二、开始干活首先要创建若干权限grant drop DATABASE LINK to scottgrant create DATABASE LINK to scott ‘只能创建当前用户使用的database link’grant create public DATABASE LINK to scott‘可以创建所有用户使用的database link’INSERT INTO "SCOTT"."GG_EMP" (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES ('1998', 'liu', 'CLERK', '7566', TO_DATE('10-12月-13', 'DD-MON-RR'), '2000', '300', '40')(测试数据添加),只能修改基表数据直接不能修改物化视图的数据1、首先要创建DB_LINKCREATE DATABASE LINK to_orcl200 CONNECT TO scott identified by tiger using 'orcl200' (单引号双引号不要搞错)其中orcl200为新建的到对方数据库的TNS。

oracle物化视图日志结构

oracle物化视图日志结构

oracle物化视图⽇志结构物化视图的快速刷新要求基本必须建⽴物化视图⽇志,这篇⽂章简单描述⼀下物化视图⽇志中各个字段的含义和⽤途。

物化视图⽇志的名称为MLOG$_后⾯跟基表的名称,如果表名的长度超过20位,则只取前20位,当截短后出现名称重复时,Oracle会⾃动在物化视图⽇志名称后⾯加上数字作为序号。

物化视图⽇志在建⽴时有多种选项:可以指定为ROWID、PRIMARY KEY和OBJECT ID⼏种类型,同时还可以指定SEQUENCE或明确指定列名。

上⾯这些情况产⽣的物化视图⽇志的结构都不相同。

任何物化视图都会包括的4列:SNAPTIME$$:⽤于表⽰刷新时间。

DMLTYPE$$:⽤于表⽰DML操作类型,I表⽰INSERT,D表⽰DELETE,U表⽰UPDATE。

OLD_NEW$$:⽤于表⽰这个值是新值还是旧值。

N(EW)表⽰新值,O(LD)表⽰旧值,U表⽰UPDATE操作。

CHANGE_VECTOR$$:表⽰修改⽮量,⽤来表⽰被修改的是哪个或哪⼏个字段。

如果WITH后⾯跟了ROWID,则物化视图⽇志中会包含:M_ROW$$:⽤来存储发⽣变化的记录的ROWID。

如果WITH后⾯跟了PRIMARY KEY,则物化视图⽇志中会包含主键列。

如果WITH后⾯跟了OBJECT ID,则物化视图⽇志中会包含:SYS_NC_OID$:⽤来记录每个变化对象的对象ID。

如果WITH后⾯跟了SEQUENCE,则物化视图⽇⼦中会包含:SEQUENCE$$:给每个操作⼀个SEQUENCE号,从⽽保证刷新时按照顺序进⾏刷新。

如果WITH后⾯跟了⼀个或多个COLUMN名称,则物化视图⽇志中会包含这些列。

下⾯通过例⼦进⾏详细说明:SQL> create table t_rowid (id number, name varchar2(30), num number);表已创建。

SQL> create materialized view log on t_rowid with rowid, sequence (name, num) including new values;实体化视图⽇志已创建。

活用ORACLE物化视图实现系统容灾方案

活用ORACLE物化视图实现系统容灾方案

E F R RES H F AS T AS s e l e c t f r o m tt a b l e n a me 2

@d b l i n k n a me
CREATE M ATERI ALI ZED VI EW v m 0 3

对像 ,它是远程数 据的的本地副本 ,或者用来 生成基 于数据表 求和的汇总表。物化视图存储 基于远程表 的数据 ,也可以称为快照。物化视
_ _
r DEs c rI p t I ON = S T= ( ADDRES S LI
_
在 主用 数据 库 中中对 关键 表表创 建视 图
日志 :
CREATE M ATERI A LI ZED VI EW LOG
要求J O B — Q U E U E _ P R O C E S S E S不 小 于
TYPE
CREATE M ATERI A LI ZED VI EW LOG ON t t a l e na me 2 TABI ESPACE D ATAW I TH ROW I D
CREATE M I ’ ERI A LI ZED VIO N)
修改方法 :
S QL> a l t e r s y s t e m s e t o p e n — l i n k s = 4
s c o p e = s p il f e ;
OPEN

在 备用 数据 库 中创建 物化 视 图刷新 组和
视图 :
Ex e c d b msr e f r e n a me . ma k e (‘ s y n c g r o u p
1 0:
( ADDRES S= ( P ROT OCOL = t c p )

ORACLE使用物化视图和查询重写功能

ORACLE使用物化视图和查询重写功能

使用物化视图和查询重写功能1引言1.1目的在本教程中,您将了解如何利用强大的物化视图和查询重写功能。

所需时间大约2个小时1.2主题本教程包括下列主题:概述情景前提条件为销售历史模式实施模式更改启用查询重写分析物化视图更新和重写功能Oracle 的查询重写功能带有GROUP BY扩展项的增强的重写功能使用重写或错误来控制语句的执行分区与物化视图使用带有 PMARKER 信息的物化视图使用查询重写和部分陈旧的物化视图使用 TUNE_MVIEW 使物化视图快速刷新重置环境总结查看屏幕截图将鼠标置于此图标上以加载和查看本教程的所有屏幕截图.(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。

)注意:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图.您可以单击单个屏幕截图将其隐藏.2概述通过使用概要管理(Summary Management) 特性,您可以减轻数据库管理员的工作负荷,这是因为您无需再手动创建概要,而且最终用户也不再必须知道已经定义的概要。

一旦您创建了一个或多个物化视图(它们和概要等效),最终用户就可以查询数据库中的表和视图。

Oracle 服务器中的查询重写机制自动重写SQL查询以使用概要表。

这一机制减少了从查询返回结果的响应时间.数据仓库内的物化视图对于最终用户或数据库应用程序来说是透明的。

Oracle 数据库为您提供用于更先进的重写和刷新机制的增强功能,以及全面的顾问与调整框架.这为您的环境带来了更加优化的物化视图,在占用额外空间最小的情况下提升了性能。

注意:本教程不是物化视图的介绍。

它假定读者对物化视图功能有基本了解。

如果您需要更多关于某些主题的背景信息,请参看Oracle 数据仓库指南。

案例您将使用SALES HISTORY (SH) 示例模式创建、修改并分析物化视图和重写功能。

此研讨会依赖于在默认安装上对SH 模式进行的一些小修改。

【IT专家】创建Oracle物化视图,每5分钟刷新一次使用物化视图日志

【IT专家】创建Oracle物化视图,每5分钟刷新一次使用物化视图日志

本文由我司收集整编,推荐下载,如有疑问,请与我司联系创建Oracle物化视图,每5分钟刷新一次使用物化视图日志创建Oracle物化视图,每5分钟刷新一次使用物化视图日志[英]Create Oracle Materialized View to be refreshed every 5 minute Using materialized view log I’m Trying to create Materialized View which will be updated every 5 minute automatically, I need update based on Mview log table. 我正在尝试创建物化视图,它将每5分钟自动更新一次,我需要基于Mview日志表进行更新。

I have created Materialized view log on TABLE1 TABLE1.SQL Script 我在TABLE1 TABLE1.SQL脚本上创建了Materialized视图日志 CREATE MATERIALIZED VIEW LOG ON TABLE1; -- MLOG$_TABLE1 Then I’ve created Materialized View 然后我创建了物化视图 CREATE MATERIALIZED VIEW JIBO_MVIEW REFRESH START WITH SYSDATE NEXT SYSDATE +5/24/60 ENABLE QUERY REWRITE AS SELECT O.ID ,O.DATETIME_CREATED ,O.ORIGINATOR ,O.DETAILS ,O.PAYMENT_REF FROM TABLE1 O WHERE O.ORIGINATOR LIKE ‘53%’; after changing some value In TABLE1, new Record is inserted MLOG$_TABLE1 log table 更改一些值后在TABLE1中,新的Record插入了MLOG $ _TABLE1日志表 but changed value is not updated in Materialized view (JIBO_MVIEW). (even after one day :) ) 但在物化视图(JIBO_MVIEW)中未更新更改的值。

Oracle新建用户、角色,授权,建表空间

Oracle新建用户、角色,授权,建表空间

Oracle新建用户、角色,授权,建表空间oracle数据库的权限系统分为系统权限与对象权限。

系统权限( database systemprivilege )可以让用户执行特定的命令集。

例如,create table权限允许用户创建表,grant any privilege 权限允许用户授予任何系统权限。

对象权限( database object privilege )可以让用户能够对各个对象进行某些操作。

例如delete权限允许用户删除表或视图的行,select权限允许用户通过select从表、视图、序列(sequences)或快照(snapshots)中查询信息。

每个oracle用户都有一个名字和口令,并拥有一些由其创建的表、视图和其他资源。

oracle角色(role)就是一组权限(privilege)(或者是每个用户根据其状态和条件所需的访问类型)。

用户可以给角色授予或赋予指定的权限,然后将角色赋给相应的用户。

一个用户也可以直接给其他用户授权。

一、创建用户oracle内部有两个建好的用户:system和sys。

用户可直接登录到system用户以创建其他用户,因为system具有创建别的用户的权限。

在安装oracle时,用户或系统管理员首先可以为自己建立一个用户。

例如:Sql代码create user user01 identified by u01;该命令还可以用来设置其他权限,详细情况参见自学资料。

要改变一个口令,可以使用alter user命令:<span style="white-space: pre;"> alter user user01 identified by usr01;</span><span style="white-space: pre;"><span style="white-space: normal;"> </span> </span>现在user01的口令已由“u01”改为“usr01”。

oracle 创建 实例

oracle 创建 实例

oracle 创建实例要在Oracle数据库中创建实例,您需要按照以下步骤操作:1. 首先,您需要登录到Oracle数据库服务器的操作系统上。

2. 打开一个命令行窗口,使用sysdba权限运行SQL*Plus工具。

命令如下:sqlplus / as sysdba3. 连接到Oracle数据库实例。

命令如下:connect sys as sysdba4. 创建一个新的实例。

您需要为实例指定名称、数据库名称和密码。

命令如下:create database <数据库名称> user sys identified by <密码> controlfile reuse extent management local datafile '<数据文件路径>' size<数据文件大小> autoextend on next <增长大小> maxsize unlimited extent management local sysaux datafile '<数据文件路径>' size <数据文件大小> autoextend on next <增长大小> maxsize unlimited extent management local;请根据您的需求将`<数据库名称>`、`<密码>`、`<数据文件路径>`、`<数据文件大小>` 和`<增长大小>` 替换为合适的值。

5. 创建完成后,您可能需要进行其他配置和设置操作,例如创建表空间、用户等。

请注意,创建实例是一个需要谨慎处理的操作,建议在事先备份数据库和进行充分测试的情况下进行。

此外,请确保具备足够的权限来执行这些操作。

oracle-----视图物化视图

oracle-----视图物化视图

oracle-----视图物化视图什么是视图视图(view),也称虚表, 不占⽤物理空间,这个也是相对概念,因为视图本⾝的定义语句还是要存储在数据字典⾥的。

视图只有逻辑定义。

每次使⽤的时候,只是重新执⾏SQL。

视图是从⼀个或多个实际表中获得的,这些表的数据存放在数据库中。

那些⽤于产⽣视图的表叫做该视图的基表。

⼀个视图也可以从另⼀个视图中产⽣。

视图的定义存在数据库中,与此定义相关的数据并没有再存⼀份于数据库中。

通过视图看到的数据存放在基表中。

视图看上去⾮常象数据库的物理表,对它的操作同任何其它的表⼀样。

当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会⾃动反映在由基表产⽣的视图中。

由于逻辑上的原因,有些Oracle视图可以修改对应的基表,有些则不能(仅仅能查询)。

还有⼀种视图:物化视图(MATERIALIZED VIEW ),也称实体化视图,快照(8i 以前的说法),它是含有数据的,占⽤存储空间。

视图的作⽤1)提供各种数据表现形式, 可以使⽤各种不同的⽅式将基表的数据展现在⽤户⾯前, 以便符合⽤户的使⽤习惯(主要⼿段: 使⽤别名);2)隐藏数据的逻辑复杂性并简化查询语句, 多表查询语句⼀般是⽐较复杂的, ⽽且⽤户需要了解表之间的关系, 否则容易写错; 如果基于这样的查询语句创建⼀个视图, ⽤户就可以直接对这个视图进⾏"简单查询"⽽获得结果. 这样就隐藏了数据的复杂性并简化了查询语句.这也是oracle提供各种"数据字典视图"的原因之⼀,all_constraints就是⼀个含有2个⼦查询并连接了9个表的视图(在catalog.sql中定义);3)执⾏某些必须使⽤视图的查询. 某些查询必须借助视图的帮助才能完成. ⽐如, 有些查询需要连接⼀个分组统计后的表和另⼀表, 这时就可以先基于分组统计的结果创建⼀个视图, 然后在查询中连接这个视图和另⼀个表就可以了;4)提供某些安全性保证. 视图提供了⼀种可以控制的⽅式, 即可以让不同的⽤户看见不同的列, ⽽不允许访问那些敏感的列, 这样就可以保证敏感数据不被⽤户看见;5)简化⽤户权限的管理. 可以将视图的权限授予⽤户, ⽽不必将基表中某些列的权限授予⽤户, 这样就简化了⽤户权限的定义。

利用物化视图和Excel数据透视表.

利用物化视图和Excel数据透视表.

利用物化视图和Excel数据透视表实现一卡通数据查询师职门诊一卡通试用以来,院领导常需要有关体系外师职干部门诊就诊情况的有关信息,进而需要体系内的军人就诊情况,甚至包括同比和环比相关就诊信息情况。

这些需求,需要的数据是固定的,但展现的形式是不定的。

因此,不适合在下发的程序中固定,其实更确切地讲,这是一个初步的BI要求。

下文中,主要介绍如何结合ORACLE的物化视图和Excel的数据透视表(图)功能,实现上述要求并提供扩展空间。

一.物化视图ORACLE的物化视图(Materialed View)可用于预先计算保存连接或聚集等耗时较多的操作的结果。

这和军卫一号中医务统计中的统计中间表功能类似,但更灵活。

关于军人门诊就诊和门诊费用的统计,我们也可以将有关统计生成为物化视图,方面查询使用。

下面脚本以ORACLE10G为例,其它版本可自行调整。

为不影响HIS系统,我选择单建用户和表空间以方便今后的删除。

以DBA 用户执行:--- 建立存储表空间CREATE TABLESPACE TSP_INSURANCE_SUM DATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATAFILE\O1_MF_TSP_INSU_75H7Z9 VT_.DBF' SIZE 100M AUTOEXTEND ON NEXT5M MAXSIZE UNLIMITEDNOLOGGINGDEFAULT COMPRESSONLINEPERMANENTEXTENT MANAGEMENT LOCAL UNIFORM SIZE10MBLOCKSIZE8KSEGMENT SPACE MANAGEMENT MANUALFLASHBACK OFF;--- 建立用户CREATE USER "CARDSUM" IDENTIFIED BY "CARDSUM"DEFAULT TABLESPACE TSP_INSURANCE_SUMTEMPORARY TABLESPACE TEMPGRANT CREATE MATERIALIZED VIEW TO CARDSUM;GRANT CREATE PROCEDURE TO CARDSUM WITH ADMIN OPTION;GRANT SELECT ANY TABLE TO CARDSUM;GRANT UNLIMITED TABLESPACE TO CARDSUM;GRANT "CONNECT" TO "CARDSUM";ALTER USER "CARDSUM" DEFAULT ROLE "CONNECT";ALTER USER CARDSUM QUOTA UNLIMITED ON TSP_INSURANCE_SUM;以cardsum用户执行:--- 判断是否是体系内外,通过判断帐号的体系医院和本院代码/* Formatted on 2011/08/27 20:27 (Formatter Plus v4.8.6) */CREATE OR REPLACE FUNCTION getserviceclass (a_visit_date DATE,a_insurance_no VARCHAR2)RETURN VARCHAR2ISv_serviceclass VARCHAR2(30);v_hospital_code hospital_config.unit_code%TYPE;--±¾Ôº´úÂëv_inservicelist VARCHAR2(1);v_service_class VARCHAR2(29);/******************************************************************** **********NAME: GetServiceClassPURPOSE: 获取指定帐号的身份信息参数: a_visit_date 就诊时间a_insurance_no 帐号返回值:第一字符标明是体系内(0)还是体系外(1) ,第二个字符标明身份REVISIONS:Ver Date Author Description--------- ---------- ---------------------------------------------------1.0 2011-8-14 1. Created this function.NOTES:Automatically available Auto Replace Keywords:Object Name: GetServiceClassSysdate: 2011-8-14Date and Time: 2011-8-14, 10:52:27, and 2011-8-14 10:52:27Username:Table Name: (set in the "New PL/SQL Object" dialog)********************************************************************* *********/BEGINSELECT unit_codeINTO v_hospital_codeFROM hospital_config;SELECT DECODE (designated_hospital, v_hospital_code,0,1), identity_classINTO v_inservicelist, v_service_classFROM insurance_accountsWHERE insurance_no = a_insurance_no;IF v_inservicelist =1THEN--外体系BEGINSELECT service_classINTO v_service_classFROM outp_card_bill_itemsWHERE visit_date = a_visit_dateAND insurance_no = a_insurance_noAND ROWNUM=1;EXCEPTIONWHEN NO_DATA_FOUNDTHENNULL;END;END IF;v_serviceclass := v_inservicelist || v_service_class;RETURN v_serviceclass;EXCEPTIONWHEN NO_DATA_FOUNDTHENRETURN'1其它';WHEN OTHERSTHEN-- Consider logging the error and then re-raiseRETURN'1其它';END getserviceclass;/--- 创建门诊就诊的物化视图CREATE MATERIALIZED VIEW cardsum.mv_card_clinicTABLESPACE tsp_insurance_sumSTORAGE (INITIAL 10 mNEXT 5 m)NOCACHENOLOGGINGCOMPRESSNOPARALLELBUILD DEFERREDREFRESH FORCE ON DEMANDSTART WITH TO_DATE('20110828 23:00:00','yyyymmdd hh24:mi:ss')NEXT TRUNC(SYSDATE) - TO_NUMBER(TO_CHAR(SYSDATE - 1, 'd')) + 7ASSELECT DECODE (SUBSTR (service_class, 1, 1),'0', '体系内','体系外') "体系内外",SUBSTR (service_class, 2, LENGTH (service_class) - 1) "身份",trunc(visit_date ,'MM')"时间", COUNT (visit_no) "人次"FROM (SELECT visit_date, visit_no, patient_id, insurance_no, insurance_type,getserviceclass (visit_date, insurance_no) service_classFROM clinic_masterWHERE visit_date > TO_DATE ('20110601', 'YYYYMMDD')AND charge_type = '军队医改' AND insurance_no IS NOT NULL )GROUP BY trunc(visit_date ,'MM'), service_class;需要说明的是:BUILD DEFERRED 表示该物化视图不是立即更新数据,因为更新数据需要消耗较多系统资源,因此建议到数据库闲时操作。

oracle物化视图实现数据同步

oracle物化视图实现数据同步

ORACLE物化视图实现数据同步简介NC56新增双引擎查询功能,以下报表支持此功能:财务:总账—辅助余额表总账—辅助明细账总账—辅助属性余额表总账—多维分析表应收—余额表应收—应收账龄分析应付—余额表应付—应付账龄分析供应链:采购管理—供应商暂估余额表销售管理—综合日报库存管理—收发存汇总表库存管理—出入库流水账存货核算—收发存汇总表存货核算—入库汇总表存货核算—出库汇总表本功能只支持oracle数据库。

要使用此功能,需要在oracle 数据库上按以下步骤进行配置。

一、按照NC标准创建一个oracle空用户,假设为nc56des(以下称为目标用户)二、使用该空用户创建到NC数据库的数据库链接,假设NC数据库用户为nc56(以下称为源用户)Create database link dblink connect to nc56 identified by密码using ora10g_127.0.0.1;需要注意:如果源用户和目标用户未在同一台数据库服务器上,则在目标数据库服务器上的tnsnames.ora中已经配置了源用户所在数据库服务器,本例假设源用户和目标用户在同一台服务器上。

三、在源用户上执行以下sql:1、对于已定义主键的表,分别执行以下sql:create materialized view log on 表名with primary key;2、对于未定义主键的表,分别执行以下sql:create materialized view log on 表名with rowid;四、在目标用户上执行以下sql:1、对于已定义主键的表,分别执行以下sql:create materialized view 表名refresh fast start with sysdate next sysdate+10/1440 as select * from 表名@dblink;以上假设为10分钟同步一次,可以根据需要进行修改同步的频率,单位为“分钟”2、对于未定义主键的表,分别执行以下sql:create materialized view 表名refresh fast with rowid start with sysdate next sysdate+10/1440 as select * from表名@dblink;以上假设为10分钟同步一次,可以根据需要进行修改同步的频率,单位为“分钟”需要特别注意,不要将同步时间间隔设置的太短,最短不要低于10分钟,否则对数据库服务器压力太大。

Oracle 的物化视图

Oracle 的物化视图

ORACLE物化视图一、------------------------------------------------------------------------------------------物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。

物化视图存储基于远程表的数据,也可以称为快照。

物化视图可以查询表,视图和其它的物化视图。

通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。

对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。

如果你想修改本地副本,必须用高级复制的功能。

当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

本篇我们将会看到怎样创建物化视图并且讨论它的刷新选项。

在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。

1.主键物化视图:下面的语法在远程数据库表emp上创建主键物化视图SQL> CREATE MATERIALIZED VIEW mv_emp_pkREFRESH FAST START WITH SYSDATENEXT SYSDATE + 1/48WITH PRIMARY KEYAS SELECT * FROM emp@remote_db;Materialized view created.注意:当用FAST选项创建物化视图,必须创建基于主表的视图日志,如下:SQL> CREATE MATERIALIZED VIEW LOG ON emp;Materialized view log created.2.Rowid物化视图下面的语法在远程数据库表emp上创建Rowid物化视图SQL> CREATE MATERIALIZED VIEW mv_emp_rowidREFRESH WITH ROWIDAS SELECT * FROM emp@remote_db;Materialized view log created.3.子查询物化视图下面的语法在远程数据库表emp上创建基于emp和dept表的子查询物化视图SQL> CREATE MATERIALIZED VIEW mv_empdeptAS SELECT * FROM emp@remote_db eWHERE EXISTS (SELECT * FROM dept@remote_db dWHERE e.dept_no = d.dept_no)Materialized view log created.REFRESH 子句 [refresh [fast|complete|force] [on demand | commit][start with date] [next date] [with {primary key|rowid}]]Refresh选项说明:a. oracle用刷新方法在物化视图中刷新数据.b. 是基于主键还是基于rowid的物化视图c. 物化视图的刷新时间和间隔刷新时间Refresh方法-FAST子句增量刷新用物化视图日志(参照上面所述)来发送主表已经修改的数据行到物化视图中.如果指定REFRESH FAST子句,那么应该对主表创建物化视图日志SQL> CREATE MATERIALIZED VIEW LOG ON emp;Materialized view log created.对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。

Oracle 创建视图

Oracle  创建视图

Oracle 创建视图创建视图是使用CREATE VIEW语句完成的。

为了在当前用户模式中创建视图,要求数据库用户必须具有CREATE VIEW系统权限;如果要在其他用户模工中创建视图,则用户必须具有CREATE ANY VIEW系统权限。

创建视图最基本的语法如下:create [ or replace] view <view_ name> [(alias[,alias]…)]as <subquery>;[with check option [constraint constraint_name]][with read only]如上所示,ALIAS用于指定视图列的别名,SUBQUERY用于指定视图对应的子查询语句;WITH CHECK OPTION子句用于指定在视图上定义CHECK约束;WITH READ ONL Y 子句用于定义只读视图。

在创建视图时,如果不提供视图列别名,Oracle会自动使用子查询的列名或列别名;如果视图子查询包含函数或表达式,则必须定义列别名。

下面通过示列说明建立和使用视图的方法:1.简单视图简单视图是指基于单个表建立的,不包含任何函数、表达式和分组数据的视图。

下面的语句建立了一个用于显示某个部门的员工信息:SQL> create or replace view emp_sales_view as2 select empno,ename,job,sal,deptno3 from scott.emp4 where deptno=30;视图已创建。

上述语句建立一个视图EMP_SALES_VIEW。

因为建立视图时没有提供列别名,所以视图的列名分别为:EMPNO、ENAME、JOB、SAL和DEPTNO。

对于简单视图而言,不仅可以执行SELECT操作,而且还可以执行INSERT、UPDA TE、DELETE等操作。

示例如下:SQL> insert into emp_sales_view2 values(7950,'mary','CLERK',1000,30);已创建 1 行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle物化视图创建全过程我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可疑选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库用户下没有任何对象,只是有查询所有表的权限,因此无法做数据反向。

于是决定使用物化视图,把对方数据库中的数据拿过来,虽然数据量比较大,但是每月只拿一次,而且如果设置成增量更新,也不会太慢。

现在记录下物化视图的创建过程(以一张表为例)。

一、准备条件以及备注假设双方数据库都是ORACLE10g,需要同步过来的表名叫:GG_ZLX_ZHU,对方数据库用户名:username,密码:password,SID:CPEES。

二、开始干活1、首先要创建DB_LINKCREATE DATABASE LINK to_cpeesCONNECT TO "username" identified by "password"using "CPEES";或者create database link to_cpeesconnect to username identified by "password"using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST =IP地址)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = cti)))';其中CPEES为新建的到对方数据库的TNS。

执行,现在我们就已经创建了到对方数据库的DB_LINK TO_CPEES。

2、创建Oracle物化视图快速刷新日志因为上面说过,以后视图的刷新将采用增量刷新的方式,因此,为配合增量刷新,ORACLE要求要在住表上建立物化视图日志。

CREATE MATERIALIZED VIEW LOG ON GG_ZLX_ZHUWITH PRIMARY KEYINCLUDING NEW VALUES;(上面的SQL要在远程数据库上执行,不能在本地执行)3、创建Oracle物化视图Oracle物化视图,从名字上面来开,它应该是属于视图,但是确实物化。

其物化是针对普通视图并没有真正的物理存储而言,其实可以简单的把物化视图看做一个物理表。

CREATE MATERIALIZED VIEW GG_ZLX_ZHU --创建物化视图BUILD IMMEDIATE --在视图编写好后创建REFRESH FAST WITH PRIMARY KEY --根据主表主键增量刷新(FAST,增量)ON DEMAND -- 在用户需要时,由用户刷新ENABLE QUERY REWRITE --可读写ASSELECT * FROM GG_ZLX_ZHU@TO_CPEES; --查询语句4、视图刷新根据业务需要,每月不定时刷新,所以不能是JOB,而且数量多,所以也不能一个一个刷新。

根据以上条件,选择使用ORACLE 自带工具DBMS_MVIEW工具包中REFRESH方法对物化视图进行刷新。

该方法有两个参数,第一个参数是需要刷新的物化视图名称,第二个参数是刷新方式。

我们可以写存储过来,对每个物化视图调用一次REFRESH方法,也可以使用“,”把物化视图连接以来,一次刷新。

如下:CREATE OR REPLACE PROCDURE P_MVIEW_REFRESHASBEGINDBMS_MVIEW.REFRESH('GG_ZLX_ZHU','f');END P_MVIEW_REFRESH;或者使用CREATE OR REPLACE PROCDURE P_MVIEW_REFRESHASBEGINDBMS_MVIEW.REFRESH('GG_ZLX_ZHU,GG_ZLX_FU','ff');END P_MVIEW_REFRESH;注意:1、如果需要同时刷新多个物化视图,必须用逗号把各个物化视图名称连接起来,并对每个视图都要指明刷新方式(f、增量刷新,c、完全刷新,?、强制刷新)。

2、当日志和物化视图创建好后,删除日志,则需要重新创建物化视图,否则无法增量刷新。

3、因为上面写的物化视图时根据主键进行更新,因此,主表必须有主键。

忘了写删除方法了,日志和物化视图要分开删除DROP MATERIALIZED VIEW LOG ON GG_ZLX_ZHU@TOCPEES;DROP MATERIALIZED VIEW GG_ZLX_ZHU;一、------------------------------------------------------------------------------------------物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。

物化视图存储基于远程表的数据,也可以称为快照。

物化视图可以查询表,视图和其它的物化视图。

通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。

对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。

如果你想修改本地副本,必须用高级复制的功能。

当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

本篇我们将会看到怎样创建物化视图并且讨论它的刷新选项。

在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。

1.主键物化视图:下面的语法在远程数据库表emp上创建主键物化视图SQL> CREATE MATERIALIZED VIEW mv_emp_pkREFRESH FAST START WITH SYSDATENEXT SYSDATE + 1/48WITH PRIMARY KEYAS SELECT * FROM emp@remote_db;Materialized view created.注意:当用FAST选项创建物化视图,必须创建基于主表的视图日志,如下:SQL> CREATE MATERIALIZED VIEW LOG ON emp;Materialized view log created.2.Rowid物化视图:下面的语法在远程数据库表emp上创建Rowid物化视图SQL> CREATE MATERIALIZED VIEW mv_emp_rowidREFRESH WITH ROWIDAS SELECT * FROM emp@remote_db;Materialized view log created.3.子查询物化视图:下面的语法在远程数据库表emp上创建基于emp和dept表的子查询物化视图SQL> CREATE MATERIALIZED VIEW mv_empdeptAS SELECT * FROM emp@remote_db eWHERE EXISTS (SELECT * FROM dept@remote_db d WHERE e.dept_no = d.dept_no);Materialized view log created.REFRESH 子句[refresh [fast|complete|force][on demand | commit][start with date] [next date][with {primary key|rowid}]]Refresh选项说明:a. oracle用刷新方法在物化视图中刷新数据.b. 是基于主键还是基于rowid的物化视图c. 物化视图的刷新时间和间隔刷新时间Refresh方法-FAST子句增量刷新用物化视图日志(参照上面所述)来发送主表已经修改的数据行到物化视图中.如果指定REFRESH FAST子句,那么应该对主表创建物化视图日志SQL> CREATE MATERIALIZED VIEW LOG ON emp;对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。

Refresh方法-COMPLETE子句完全刷新重新生成整个视图,如果请求完全刷新,oracle会完成完全刷新,即使增量刷新可用。

Refresh Method – FORCE 子句当指定FORCE子句,如果增量刷新可用Oracle将完成增量刷新,否则将完成完全刷新,如果不指定刷新方法(FAST, COMPLETE, or FORCE),Force选项是默认选项主键和ROWD子句WITH PRIMARY KEY选项生成主键物化视图,也就是说物化视图是基于主表的主键,而不是ROWID(对应于ROWID子句). PRIMARY KEY是默认选项,为了生成PRIMARY KEY子句,应该在主表上定义主键,否则应该用基于ROWID的物化视图.主键物化视图允许识别物化视图主表而不影响物化视图增量刷新的可用性。

Rowid物化视图只有一个单一的主表,不能包括下面任何一项:n Distinct 或者聚合函数.n Group by,子查询,连接和SET操作刷新时间START WITH子句通知数据库完成从主表到本地表第一次复制的时间,应该及时估计下一次运行的时间点, NEXT 子句说明了刷新的间隔时间.SQL> CREATE MATERIALIZED VIEW mv_emp_pkREFRESH FASTSTART WITH SYSDATENEXT SYSDATE + 2WITH PRIMARY KEYAS SELECT * FROM emp@remote_db;Materialized view created.在上面的例子中,物化视图数据的第一个副本在创建时生成,以后每两天刷新一次.二、------------------------------------------------------------------------------------------Oracle的物化视图提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。

物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。

三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。

相关文档
最新文档