Oracle 原理: 物化视图,快照,实体化视图。
8i和8i前,oracle 提供了 快照 snapshot ,9i中把其改名為物化視圖,也叫實(shí)體化視圖 materialized View。
在海量數(shù)據(jù)中,如果只想查詢特定的數(shù)據(jù),通常會(huì)select 基表或者視圖,而查詢視圖是通過基表進(jìn)行查詢的。如果基表數(shù)據(jù)的數(shù)量級(jí)非常之大,那么對(duì)于只想查詢特定的數(shù)據(jù)時(shí)效率就會(huì)很不盡人意。傳統(tǒng)的視圖是邏輯上的。而物化視圖是存在磁盤空間里的。他是遠(yuǎn)端數(shù)據(jù)庫在本地上的一個(gè)副本,或者用來生成數(shù)據(jù)庫表求和的匯總表。物化視圖存儲(chǔ)基于遠(yuǎn)程表的數(shù)據(jù),也可以移位快照。物化視圖可以在 基表,視圖,其他物化視圖中來建立。通常在物化視圖被稱為主表(在復(fù)制期間)或明細(xì)表(在數(shù)據(jù)倉庫中)。
想提高查詢速度,數(shù)據(jù)庫性能調(diào)整重點(diǎn)
1.調(diào)整SGA 和PGA
2.調(diào)整SQL語句,使用綁定變量
3.使用物化視圖
4.系統(tǒng)結(jié)構(gòu)上要讀寫分離。用兩個(gè)數(shù)據(jù)庫讀庫和寫庫,讀庫和寫庫數(shù)據(jù)時(shí)時(shí)同步,讀庫專門用來查詢,寫庫專門用來寫入。
?
對(duì)于普通復(fù)制,本地?cái)?shù)據(jù)庫的物化視圖只可讀.
如果要?jiǎng)?chuàng)建基于主鍵的物化視圖,則必須具有訪問主表和訪問主表的日志 和? Create Materialized View 這三個(gè)權(quán)限。
如果是創(chuàng)建基于Rowid的物化視圖,則需要訪問主表和? Create Materialized View 這兩個(gè)權(quán)限
查詢重寫,Enable Query Rewrite,允許對(duì)基表進(jìn)行查詢時(shí),可以直接查詢物化視圖。
物化視圖日志,如果需要快速刷新,則需要建立物化視圖日志,物化視圖日志根據(jù)不同物化視圖的快速刷新的需要,可以建立Rowid和Primary Key類型的
刷新,當(dāng)基表發(fā)生了DML操作時(shí),物化視圖采用哪種方式和基表進(jìn)行同步,模式有兩種On Demand(用戶需要時(shí)刷新,缺省值)和On Commit(DML提交時(shí)刷新) , 方法有四種? Fast ,Complete,Force ,Never。可以通過Job定時(shí)刷新,還可以手工刷新
例如
在遠(yuǎn)端數(shù)據(jù)庫中創(chuàng)建一個(gè)有主鍵的表
-- Create table create table STUDENT (sno NUMBER(6) not null,sname VARCHAR2(10),deptno CHAR(3) ) tablespace SYSTEMpctfree 10pctused 40initrans 1maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlimited); -- Create/Recreate primary, unique and foreign key constraints alter table STUDENTadd primary key (SNO)using index tablespace SYSTEMpctfree 10initrans 2maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlimited); alter table STUDENTadd constraint DEP_DEPARTMENT foreign key (DEPTNO)references DEPARTMENT (DEPTNO);創(chuàng)建物化視圖日志
create materialized view log on student;給用戶賦予權(quán)限
grant select on student to voapd; ---允許訪問基表 grant create materialized view to voapd; ----允許創(chuàng)建物化視圖 grant select on MLOG$_STUDENT to voapd; ----允許訪問物化視圖日志之后再本地?cái)?shù)據(jù)庫voapd中創(chuàng)建物化視圖 (注:不要在右側(cè)添加注釋):
-- fast 的刷新方式 --- 從現(xiàn)在開始 --- 每隔 1/1440天即1分鐘以后 刷新 create materialized view mv_student refresh fast start with sysdate next sysdate + 1/1440 with primary key asselect * from system.student where deptno = '001';?
此時(shí)在遠(yuǎn)端數(shù)據(jù)庫插入一條記錄,過1分鐘后可以在本地?cái)?shù)據(jù)庫中查看到信息
刪除物化視圖;
drop materialized view mv_student ;重新創(chuàng)建,用任務(wù)的方式創(chuàng)建:
create materialized view mv_student asselect * from system.student where deptno = '001';create or replace procedure test Authid Current_User is begindbms_mview.refresh('mv_student'); end; /variable job1 number; begin dbms_job.submit(:job1,'test;',sysdate,'sysdate+1'); end; /begindbms_job.run(:job1); end; /--------------------------
刪除表,重新建立?on commit 的物化視圖
還需要權(quán)限:
GRANT ON COMMIT REFRESH to voapd; create materialized view mv_allstudent refresh fast on commit as select * from system.student;?
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Oracle 原理: 物化视图,快照,实体化视图。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle 原理: 闪回 flash
- 下一篇: C++ : KMP 字符串匹配算法