摘要:該文介紹了ORACLE數據快照技術在數據交換中的應用,并且舉例說明了如何應用數據快照來實現跨庫數據間的同步。
關鍵詞:ORACLE;SNAPSHOT
中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2010)02-262-02
The Snapshot Technology of Oracle in the Data Exchange Application
PAN Cheng-bin
(Touris College of Zhejiang,Hangzhou 311231,China)
Abstract: This paper describe the snapshot technology of oracle in the data exchange application,and illustrate how to apply snapshot to achieve inter-library data synchronization.
Key words: ORACLE; SNAPSHOT
ORACLE數據庫的快照是包括一個查詢結果的數據庫對象,它包含有對一個本地或遠程數據庫上一個或多個表或視圖的查詢的結果。正因為快照是一個主表的查詢子集,使用快照可以加快數據的查詢速度;在保持不同數據庫中的兩個表的同步中,利用快照刷新,數據的更新性能也會有很大的改善。快照允許你在本地維護遠程數據的副本,但這些副本是只讀的。如果你想修改本地副本,必須用高級復制的功能。當你想從一個表或視圖中抽取數據時, 你可以從快照中抽取。
1 快照的具體結構
快照的用途比較廣泛,主要可以用于性能優化,數據抽取等方面,是Oracle數據倉庫處理中的一個重要技術。限于快照技術的復雜性和本人能力的有限,具體內容請查詢相關官方幫助文檔。
快照技術提供給我們三種刷新機制,分別是:
1) Complete 完全刷新機制,即對表的所有數據進行刷新,如果表的數據量十分龐大的,此法會消耗相當的時間;
2) Fast 快速刷新,即只對數據增量進行刷新;
3) Force 強制刷新,首先判斷是否能用快速刷新機制,如不行則用完全刷新機制。
建立快照的基本語法如下:
Create snapshot<具體快照名字>as
建立刷新機制語句如下:
Alter snapshot<具體快照名字>refresh<刷新方式>start with<第一次刷新時間>next<間隔時間表達式>
下面將對Complete和Fast兩種刷新機制分別進行介紹
首先我們假定已創建了一個名testshot的快照,具體語句如下:
Create snapshot testshot as< select查詢語句>
1.1 完全刷新快照
1)完全刷新快照的建立
Alter snapshot testshot refresh complete start with sysdate+1/720 next sysdate+1/2
上述語句的意思在快照建立的后的第2分鐘,將進行第一次刷新,然后每隔12小時,快照自動進行刷新
2)如果想要進行手動刷新,既不受間隔時間的限制,具體語句如下
begin
dbms_refresh.refresh(‘testshot’,’c’)
end
1.2 快速刷新快照即增量刷新快照
如要創建快速快照,則先要的源端數據表上建立快照日志,具體流程如圖1所示。
1)在源端數據表上建立快照日志
Create snapshot log on test
2)設定快照刷新時間
Alter snapshot testshot refresh fast start with sysdate next sydate+1/2
從上面的語句中我們可以到其實完全刷新和快速刷新的基本語句是一樣,只是刷新機制有所不同,需要的注意的如果你想使用快速刷新方式,則源端主表不能是視圖,因為快照日志不能建立在視圖上。
如果在應用過程發現快照不能正常工作,我們可以通過查詢表user_jobs,來獲取相應的信息,其表結構如表1所示。
2 數據快照建立前的準備工作
上面我們基本介紹了快照語句的基本寫法和刷新時間的設置,下面我們將介紹應用數據快照我們所要做的準備工作,首先我們需要在本地Oracle數據上建立一個數據庫賬號,并在其下建立遠程數據庫鏈接。
創建賬號的語句如下:
Create user binbin identified by binbin default tablespace pan temporarytablespace temp;
Grant connect ,resource to binbin;
Grant create synonym to binbin;
Grant create snapshot to binbin;
Grant create database link to binbin;
上述語句的意思是創建賬號binbin,密碼為binbin,并賦予其相應的權限,具體含義請查詢Oracle官方介紹
建立遠程數據庫鏈接,具體語句如下
Create database link <鏈接名>connectto<遠程服務器用戶名>identified by“密碼” using “TNS配置的實例名“
下面我們將用上述基本語句創建一個名為 bintobin的數據庫鏈接
Create database linke bintobin connect to sa identifiede by “sa” using“test”
創建好數據庫鏈接,意味著我們可以訪問遠程數據庫上的數據了,并可以具體到其中的一個具體表,下面就是一個訪問遠程數據庫上user表的一個快照
Create snapshot testshot as select * from user@test
3 數據快照技術的具體應用
由于現在學校各個部門都建立有自己的應用系統,各個應用系統數據庫的建立時間不一,其中的數據結構、數據類型各不相同,所使用的數據庫軟件也不盡相同,如何快速準確的實現這些數據之間的交互同步,是我一直在研究的課題。使用快照技術就可以很方便的解決現有的問題。
下面是我院應用快照技術實現各個子系統間數據讀取的實例。圖2是各個數據庫的分布。
關于快照刷新間隔的方面,由于各應用系統數據的更新要求不一。像一卡通消費數據要求隔天就能查到前一天的數據,而有的數據只需要隔兩天進行一次更新即可,所以各個快照的具體刷新方式需要根據具體要求進行相應的設置。該方案至實施以來,在網絡情況得以保證的前提下,數據的讀取工作基本得以正常進行。
4 結束語
Oracle提供的快照技術為我們提供了一個快速讀取遠程數據的方法。利用快照可以容易的實現不同數據庫間的數據同步和復制問題,特別是在實現數據的增量復制問題。一般都采用增量復制的方法來實現數據的同步,特別是在原數據量很大的情況,可以避免因出錯而難以實現數據同步的問題。
參考文獻:
[1] 王雄,左杰.基于快照日志的oracle數據表delta抽取算法[D].大連理工大學,2008.
[2] 騰永昌.Oracle9i數據庫管理員使用大全[M].北京:機械工業出版社,2005.