Oracle 原理: 物化视图,快照,实体化视图。
8i和8i前,oracle 提供了 快照 snapshot ,9i中把其改名為物化視圖,也叫實體化視圖 materialized View。
在海量數據中,如果只想查詢特定的數據,通常會select 基表或者視圖,而查詢視圖是通過基表進行查詢的。如果基表數據的數量級非常之大,那么對于只想查詢特定的數據時效率就會很不盡人意。傳統的視圖是邏輯上的。而物化視圖是存在磁盤空間里的。他是遠端數據庫在本地上的一個副本,或者用來生成數據庫表求和的匯總表。物化視圖存儲基于遠程表的數據,也可以移位快照。物化視圖可以在 基表,視圖,其他物化視圖中來建立。通常在物化視圖被稱為主表(在復制期間)或明細表(在數據倉庫中)。
想提高查詢速度,數據庫性能調整重點
1.調整SGA 和PGA
2.調整SQL語句,使用綁定變量
3.使用物化視圖
4.系統結構上要讀寫分離。用兩個數據庫讀庫和寫庫,讀庫和寫庫數據時時同步,讀庫專門用來查詢,寫庫專門用來寫入。
?
對于普通復制,本地數據庫的物化視圖只可讀.
如果要創建基于主鍵的物化視圖,則必須具有訪問主表和訪問主表的日志 和? Create Materialized View 這三個權限。
如果是創建基于Rowid的物化視圖,則需要訪問主表和? Create Materialized View 這兩個權限
查詢重寫,Enable Query Rewrite,允許對基表進行查詢時,可以直接查詢物化視圖。
物化視圖日志,如果需要快速刷新,則需要建立物化視圖日志,物化視圖日志根據不同物化視圖的快速刷新的需要,可以建立Rowid和Primary Key類型的
刷新,當基表發生了DML操作時,物化視圖采用哪種方式和基表進行同步,模式有兩種On Demand(用戶需要時刷新,缺省值)和On Commit(DML提交時刷新) , 方法有四種? Fast ,Complete,Force ,Never。可以通過Job定時刷新,還可以手工刷新
例如
在遠端數據庫中創建一個有主鍵的表
-- 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);創建物化視圖日志
create materialized view log on student;給用戶賦予權限
grant select on student to voapd; ---允許訪問基表 grant create materialized view to voapd; ----允許創建物化視圖 grant select on MLOG$_STUDENT to voapd; ----允許訪問物化視圖日志之后再本地數據庫voapd中創建物化視圖 (注:不要在右側添加注釋):
-- fast 的刷新方式 --- 從現在開始 --- 每隔 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';?
此時在遠端數據庫插入一條記錄,過1分鐘后可以在本地數據庫中查看到信息
刪除物化視圖;
drop materialized view mv_student ;重新創建,用任務的方式創建:
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 的物化視圖
還需要權限:
GRANT ON COMMIT REFRESH to voapd; create materialized view mv_allstudent refresh fast on commit as select * from system.student;?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Oracle 原理: 物化视图,快照,实体化视图。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle 原理: 闪回 flash
- 下一篇: 内部排序选择、冒泡、插入、希尔、快速、归