建立物化視圖詳解(圖解),物化視圖詳解圖解
建立物化視圖詳解
一,什麼是物化視圖
物化視圖是包括一個查詢結果的資料庫物件,它是遠端資料的的本機複本,或者用來產生基於資料表求和的匯總表。物化視圖儲存基於遠端資料表的資料,也可以稱為快照。
二,作用、
在類似統計功能中,查詢操作是無可避免,而這些查詢操作如果很頻繁,對整體資料庫效能是很致命的。而物化視圖實現遠端資料源與本機資料的即時同步,也就是定時重新整理,通過在本地建立物化視圖可以大大提高查詢效率。
三,流程圖:
當使用者要跨本機資料庫,訪問另外一個資料庫表中的資料時,本機資料庫中必須建立了遠端資料庫的dblink,通過dblink本機資料庫可以像訪問本機資料庫一樣訪問遠端資料庫表中的資料。物化視圖是一種特殊的物理表,“物化”(Materialized)視圖是相對普通視圖而言的。普通視圖是虛擬表,應用的局限性大,任何對視圖的查詢,Oracle都實際上轉換為視圖SQL語句的查詢。這樣對整體查詢效能的提高,並沒有實質上的好處。所以需要再在普通視圖(view)上建立物化視圖,程式通過對物化視圖的訪問可以大大提高效率。
四,圖解步驟(使用PL/SQL)
1,用戶端配置網路服務名
2,建立DataBase Links
3,建立物化視圖
修改SQL,添加建立視圖的模式,重新整理的方式和同步時間間隔:
說明:
建立物化視圖的模式的方式有兩種:ON DEMAND 和ON COMMIT:
ON DEMAND指物化視圖在使用者需要的時候進行重新整理,可以手工重新整理,也可以通過JOB定時進行重新整理。
ON COMMIT指物化視圖在對基表的DML操作提交的同時進行重新整理。
重新整理的方法有四種:FAST、COMPLETE、FORCE和NEVER
FAST:採用增量重新整理,只重新整理自上次重新整理以後進行的修改。
COMPLETE:對整個物化視圖進行完全的重新整理
FORCE: Oracle在重新整理時會去判斷是否可以進行快速重新整理,如果可以則採用FAST方式,否則採用COMPLETE的方式。
NEVER指物化視圖不進行任何重新整理。
預設值是FORCE ON DEMAND。
4,在物化視圖上建立視圖(統計)
5,在統計視圖上建立物化視圖
五,使用命令建立步驟:
1,建立DB link
-- Drop existing database link
drop database link ZHUHAI.COM;
-- Create database link
create database link ZHUHAI.COM
connect to ZHUHAI
using 'haikou';
2,建立物化視圖
CREATE MATERIALIZED VIEW MV_DBDIC
REFRESH FORCE ON DEMAND
START WITH SYSDATE
NEXT SYSDATE+(2/(24*3600))
AS
SELECT "DBDIC"."ID" "ID","DBDIC"."DBNUM" "DBNUM","DBDIC"."NAME" "NAME" FROM "DBDIC"@ZHUHAI.COM "DBDIC";
3,建立視圖
create or replace view countview as
select COUNT(*) COUNT
from MV_DBDIC;
4,在步驟3建立的視圖上建立物化視圖
create materialized view MV_COUNTVIEW
refresh force on demand
as
select *
from COUNTVIEW;
六,注意點:
1,需要先在用戶端配置資料來源網路服務名
2,資料來源的源表必須有主鍵
備忘,如果有哪位同志有什麼疑問,隨時可以q我,共同進步
qq :843620202
物化視圖怎建立,這個參數的意義?
1、給你的物化視圖建立一個共有同義字【public synonym】,這樣所有的使用者就可以訪問你的物化視圖了。
2、create public synonym synonym_name for 物化視圖名;
3、以後別的使用者訪問【synonym_name】就相當於訪問你的物化視圖了,而且由於是用的public別名所以不用特殊賦許可權就可以。
說明:但值得注意的是要把建 public synonym 的許可權給使用者,
grant create public synonym to 使用者;
---
以上,希望對你有所協助。
物化視圖建立問題
需要對錶“zjhis”."xx_xx"建立物化視圖日誌,才可以加入物化視圖。
你建立物化視圖時設定的是On demand
所以並不會自動重新整理,需要手動重新整理或者建立job來執行。這個是需要手動建立的。
如果設定為On commit
就會在基表有更新時自動重新整理。就不需要另外建job或者手動重新整理了。