Version database的目:


Version database用來確保OLAP定期Load Data時前台USER所查詢到的資料結果。


 


Load Data,OLAP系統中所常發生的問題:


1.      由於資料庫有reference關係,所以Load Data,所以資歷進入系統是有順序性的,因此會在Load Data時通常會影響查詢的結果。


 


何謂Version log?


Version logInsertUpdateDelete操作及TMU相關的操作發生時用來記錄Data Block變動的狀況, 當你完成Load Data後指定新的資料庫version


 


Version log的結構:


 


第一個Data block名稱為DB0,最後一個Data block名稱為DB4,query發生時,所讀取的Data Block如下:


DB0DB1DB2DB3DB4


 


這時如果有一個transactionDB0 Data Block進行updatecommit,此時Version log會紀錄相關的變更,如下圖。



如果這個時候query發生,則查到的data block如下:


(VL0,1)DB1DB2DB3DB4


 


若此時若有另一個transaction DB0DB2上資料進行UpdateCommit操作,此時的Version log如下圖:



query發生時,則查到的data block如下:


(VL0,2)DB1(VL2,1)DB3DB4


 


所以由上圖我們知道, Version Log主要用來記錄data block變更的版本資料。


 


Version Log用來控制multi query中資料一致性的問題,如下圖所示:


 


Query 112:00對資料庫進行查詢,此時有一個Update指令對資料庫資料進行操作;Query 212:01對資料庫進行查詢,Query 2作業結束後,有另一個Update指令對資料庫進行資料操作; Query 312:03對資料庫進行查詢。



 


Query 1會直接讀取data block,


Query 2會讀取部分的data blockversion log


Query 3會讀取部分的data blockversion log


 


透過alter database Freeze Query Version指令可以將將資料庫設定為Freeze(凍結) mode。如果在11:59前下了 alter database Freeze Query Version指令,Query1Query2Query3所查詢到的結果都會是11:59時的資料結果。


 


Freeze Mode下的資料庫只允許下列的作業執行:


1.      Version Operations, set use latest version on指令。


2.   Current UserInsertUpdatedelete動作。


3.      針對local operation session中所操作的temp table作業。


4.      任何對table的變更(非結構調整),例如註解(Common)


5.      對既有的database object不產生影響的指令,create tablecreate segment等。


 


How to Start Database Freeze Mode?


RISQL>alter database freeze query revision;


 


 


How to Overriding(撤銷) Database Freeze Mode?


RISQL>set use latest revision on;


RISQL>alter database unfreeze query revision;


 


 


How to Control Version log?


   To create and enable a versioned database:




  1. create version log segment
  2. check no user connect the database
  3. create version log
  4. start the version log

 


   下面的步驟可以將session enable version log:



  1. rbw.configOPTION VERSION參數設為ON
  2. RISQL中使用SET VERSION ON將目前Current sessionVersion log設為ON

 


PS:SET VERSION ON,但尚未建立Version log 或尚未將Enable database Version,這時任何嘗試變更資料庫指令的transaction會有錯誤訊息。


 


 


How to Create Version log:


由於最資料庫data的變更操作(insertupdatedelete)都會將相關變更資訊記錄下來,因此performance的瓶頸有可能會發生於Disk I/O,所以建議將version log建在I/O效能較高的的磁碟上。


 


Max Size=(block*8K byte)*120%


 


How to Clean Version log:


時機:


1.      當要進行checkpoint backup時。


2.      Drop Version log 前。


RISQL>Alter database clean version log


 


注意:


1.      當要clean version log ,記住先將database 設為read-lock


2.      當你從backup filerestore你的資料庫系統時,記住在下aletr database clean version log 語句中要加上remove damaged segment 參數。


 


判斷:


透過下面的敘述句,若沒有row回傳則表示Version log已被清除。


RISQL>select dbname FROM dst_databases


where dbname = ’Database_name’


and current_revision <> latest_merged_revision;


 


How to Drop version log and add space?


要增加Version log space的步驟如下:


1.      停用version log


RISQL>alter database stop versioning;


 


2.      clean the version log


RISQL>alter database clean version log;


 


3.      查詢DTS_DATABASES系統表格


RISQL> select current_revision, latest_merged_revision from dst_databases;


CURRENT_REV    LATEST_MERGED_REV


            1                        1


 


4.      Drop version log


RISQL>alter database drop version log;



 


5.      Create another bigger segment


RISQL> create segment versionlog storage ’ version_log_segment’ maxsize 20000;


 

6.      Re-create Version log segment and modify large space


RISQL>alter database create version log in version_log_segment;


 


7.      重新啟動Version log


RISQL>alter database start versioning;


 


How to Maintaining a versioned database ?


   Monitor Version Log


Version log space size可以透過DST_DATABASE系統表來查到相關的資訊。



 

   Backup and Recovery


checkpoint backupfull restorepartial restore前並須將version log setempty.


 


示範與步驟:


1.      connect into database


2.      create the segment


RISQL> create segment versionlog storage version.log maxsize 10000;


 


3.      create the version log in segment


RISQL> alter database create version log in versionlog;


 


4.      start version log


RISQL> alter database start versioning;


 


5.      enable the session to use the version log


RISQL> set versioning on;


 

arrow
arrow
    全站熱搜

    噗噗噗的潛水珽 發表在 痞客邦 留言(0) 人氣()