大家都知道informix是需要日誌的,但各日誌都做什麼用,各有什麼意義等等,我們在下面做一個探討:

 

首先需要說明的是informix的日誌有兩種:一種是物理日誌,用來存放資料的前映象;另一種是邏輯日誌,用來存放所有事物的操作過程。

 

在初始化的配置中,物理日誌和邏輯日誌的不是存放在根的磁碟空間的。預設的大小物理日誌2M,邏輯日誌6個,每個日誌檔2M。但在實際的生產環境中,這兩個參數一般是需要調整的。

 

從informix的本身的建議來說,要求邏輯日誌的大小一般是要求一天的業務量,邏輯日誌滾一圈,物理日誌/邏輯日誌=1/3。但是有的資料量很大的業務系統,這樣做是不可能的,要做適當的調整。

 

物理日誌檔的個數僅為1,邏輯日誌檔的個數最小為3,最大為32767。關於物理日誌和邏輯日誌的改變,我們可以使用onparams命令來完成。

 

C:\Informix>onparams --
Usage: onparams -a -d [-s ] [-i] |
-d -l [-y] |
-p -s [-d ] [-y]
-a - Add a logical log file
-i - Insert after current log
-d - Drop a logical log file
-p - Change physical log size and location
-y - Automatically responds "yes" to all prompts

 

上面是onparams的説明檔,下面我們首先來改變物理日誌的位置和大小:

 

C:\Informix>onparams -p -s 40000 -d phydbs -y
Shutting down, please wait ...
Initializing, please wait ...
Recovering, please wait ...

 

可以通過onstat –l 中的phybegin來查看物理日誌當前存在了哪個chunk上。Physize來查看當前物理日誌檔大大小,單位是頁。在這之前我們創建了phydbs,並指定了他大小。我們在-s後指定物理日誌檔的大小,在-d後指定物理日誌檔的位置。接著我們來做邏輯日誌位置和大小的改變:

 

C:\Informix>onparams -a -d logdbs -s 30000 -i
Logical log successfully added.
然後用onstat –l來查看新加的邏輯日誌:
C:\Informix>onstat -l
IBM Informix Dynamic Server Version 9.40.TC2E1 -- Quiescent -- Up 00:08:10 -- 25728 Kbytes
Physical Logging
Buffer bufused bufsize numpages numwrits pages/io
P-1 0 8 8 7 1.14
phybegin physize phypos phyused %used
3:53 10000 12 0 0.00
Logical Logging
Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io
L-3 0 8 37 14 14 2.6 1.0
Subsystem numrecs Log Space used
OLDRSAM 37 2628
address number flags uniqid begin size used %used
0CB37CA8 1 U-B---- 1 1:763 500 500 100.00
0CB37CE8 2 U-B---- 2 1:1263 500 500 100.00
0CB37D28 3 U-B---- 3 1:1763 500 500 100.00
0CB37D68 4 U-B---- 4 1:2263 500 500 100.00
0CB37DA8 5 U-B---- 5 1:2763 500 284 56.80
0CB37DE8 6 U---C-L 6 1:3263 500 315 63.00
0CED8B98 12 A------ 0 2:37553 7500 0 0.00
0CED8B58 11 A------ 0 2:30053 7500 0 0.00
0CED8B18 10 A------ 0 2:22553 7500 0 0.00
0CED8AD8 9 A------ 0 2:15053 7500 0 0.00
0CED8A98 8 A------ 0 2:7553 7500 0 0.00
0CED8A58 7 A------ 0 2:53 7500 0 0.00
12 active, 12 total
可以發現新加的邏輯日誌狀態都是A,先做0級備份ontape –s –L 0之後用onstat –l可以發現所有日誌的flag位都變成了F狀態。然後用onmode –l切換邏輯日誌到新加的邏輯日誌,用onmode –c強制做檢查點操作。最後用onparams –d –l log_file_num –y來刪除原來的邏輯日誌檔。這樣就完成了informix日誌的遷移。
 
在onstat –l中,flag位表示了邏輯日誌的狀態,
 
A表示新加了還不能使用的日誌
F表示空閒的可以使用的日誌,一般是在0級備份之後才有這樣的狀態
U表示已經使用的邏輯日誌
L表示當前的日誌檔包含一個檢查點
C表示正在使用當前的日誌檔
B表示已經備份的日誌檔
 
一般在新增或刪除日誌檔之後都要做0級備份。
 
在onconfig檔中,LOGFILES指定了IDS邏輯日誌的個數,LOGSIZE指定了邏輯日誌的大小,PHYSDBS指定了物理日誌的位置,PHYSFILE指定了物理日誌大小。LTAPEDEV指定了邏輯記錄備份的位置,LTAPEBLK指定了每個block塊的大小,LTAPESIZE指定了備份檔案的大小。
 
下面我們討論資料庫的記錄模式:
無日誌
無緩衝日誌
緩衝日誌
ansi模式
 
我們可以通過ontape 來改變日誌的模式
 
採用無日誌的方式時,所有的DML語句都不寫日誌,也就是說此時,資料庫不支援事物。當資料庫恢復系統備份的時候,無日誌的資料庫不能完全恢復。因為在備份中只記錄了備份時的狀態,備份後的資料庫的變化必須從邏輯日誌中恢復,所以這些改變是不可恢復的。
 
緩衝日誌:所有的DML語句都寫入log buffer,當log buffer寫滿的時候,就開始寫入磁片。這樣就可以大大減少磁片的I/O,從而提高資料庫的性能。但是在系統發生問題恢復的時候,緩衝區內的資料將丟失。這些資料是不可能恢復的。
 
無緩衝記錄模式:所有的 DML語句在發生的時候是寫到緩衝裡的,但事物commit之後就立刻寫回磁片,這樣在系統發生問題就保證了資料丟失的最少,但是增加了磁片的I/O,所以資料庫的性能會受到一定的影響。
 
Ansi模式:此模式和無緩衝記錄模式具有相同的日誌緩衝處理方法,但是此模式是不可逆的。
 
另外BLOB日誌的處理也是十分特別的,他不需要物理日誌,不寫前映象。BLOB頁是直接寫磁片的,不經過共用記憶體的處理。任何BLOB空閒映象的改變都將記錄到邏輯日誌中,所有的blob spaces資料刷新到硬碟上是隨邏輯日誌的的備份而寫下去的。
 
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()