程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> Oracle 10g R2特性之數據倉庫和集成特性

Oracle 10g R2特性之數據倉庫和集成特性

編輯:關於Oracle數據庫

  分區更改跟蹤:不需要 MV 日志

  要了解此增強功能,首先必須了解物化視圖 (MV) 刷新過程中的分區修整概念。

  假設基於列 ACC_MGR_ID 對表 ACCOUNTS 進行了分區,每個 ACC_MGR_ID 值一個分區。您根據 ACCOUNTS 創建了一個名為 ACC_VIEW 的 MV,該 MV 也根據列 ACC_MGR_ID 進行了分區,每個 ACC_MGR_ID 一個分區,如下圖所示:

  

  假設已經更新了表 ACCOUNTS 中的記錄,但只在分區 P1 中進行了此更新。要快速刷新此 MV,您只需刷新分區 P1 而非整個表,這裡正是與 ACC_MGR_ID 相關的數據所在的分區。Oracle 自動執行此任務,通過一個名為分區更改跟蹤 (PCT) 的特性跟蹤對分區的更改。但有一個問題需稍加注意:要在快速刷新的過程中啟用 PCT,必須創建 MV 日志,當表中的行發生變化會填充這些日志。發出刷新命令後,刷新進程將讀取 MV 日志以識別這些更改。

  不用說,該要求增加了操作的總執行時間。此外,附加的插入操作將消耗 CPU 周期和 I/O 帶寬。

  幸好,在 Oracle 數據庫 10g 第 2 版中,PCT 不需要 MV 日志即可工作。讓我們看一看它的作用方式。首先,確認表 ACCOUNTS 中沒有 MV 日志。

SQL> select *
2 from dba_mview_logs
3 where master = 'ACCOUNTS';
no rows selected

  現在,更新該表中的某個記錄。

update accounts set last_name = '...'
where acc_mgr_id = 3;

  該記錄位於分區 P3 中。

  現在,您就可以刷新此 MV 了。但首先記錄表 ACCOUNTS 所有段的段級統計信息。稍後,您將使用這些統計信息了解使用了哪些段。

select SUBOBJECT_NAME, value from v$segment_statistics
where owner = 'ARUP'
and OBJECT_NAME = 'ACCOUNTS'
and STATISTIC_NAME = 'logical reads'
order by SUBOBJECT_NAME
/
SUBOBJECT_NAME           VALUE
------------------------------ ----------
P1                  8320
P10                 8624
P2                 12112
P3                 11856
P4                  8800
P5                  7904
P6                  8256
P7                  8016
P8                  8272
P9                  7840
PMAX                 256
11 rows selected. 

  使用快速刷新刷新物化視圖 ACC_VIEW。

execute dbms_mview.refresh('ACC_VIEW','F')

  'F' 參數指示快速刷新。但如果表沒有 MV 日志,它是否可以起作用?

  刷新完成後,再次檢查表 ACCOUNTS 的段統計信息。結果如下所示:

SUBOBJECT_NAME           VALUE
------------------------------ ----------
P1                  8320
P10                 8624
P2                 12112
P3                 14656
P4                  8800
P5                  7904
P6                  8256
P7                  8016
P8                  8272
P9                  7840
PMAX                 256

  這些段統計信息顯示了在一個邏輯讀取過程中選擇的段。由於這些統計信息是累積的,因此您必須查看值(而非絕對值)中的更改。如果仔細查看以上值,您便會發現只有分區 P3 的值發生了變化。因此,在刷新過程中只選擇了分區 P3 而非整個表,確認 PCT 能否在表即使沒有 MV 日志的情況下工作。

  即使在基表沒有 MV 日志的情況下也可以快速刷新 MV 的能力是一個強大而有用的特性,從而允許您可以在已分區的 MV 中執行快速刷新而不會增加性能開銷。我認為,該特性是 Oracle 數據庫 10g 第 2 版中最有用的數據倉庫增強功能。

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 4
  • 下一頁
  • 尾頁
  • 共4頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved