aix5.3系統安裝oracle 10g使用裸設備--4k偏移量問題

今天朋友在aix 5.3系統上安裝oracle 10g 建庫是用裸設備時候,dbca建庫到2%報錯退出,觀察alert日誌發現是temp表空間空間不足導致。查看該表空間數據文件所在的裸設備容量爲512M,建庫時候給出的數據文件大小也是512M。也許是因爲aix系統以1000進制計算,而oracle數據庫計算容量是以1024進制導致差距,隨即將oracle數據文件大小改爲500M,則正常通過。

但是,在alert日誌中不斷爆出warning提示:WARNING: You are creating datafile /dev/temp01. 
WARNING: Oracle recommends creating new datafiles on devices with zero offset. The command "/usr/sbin/mklv -y LVname -T O -w n -s n -r n VGname NumPPs" can be used. Please contact Oracle customer support for more details。通過查詢資料以及朋友的幫助,終於找到了問題原因並得到解決方法。

AIX在創建vg時有3中vg類型可選,分別是 Original Volume Group,Big Volume Group和Scalable Volume Group 
對於普通的VG(Original Volume Group),不管你使用什麼命令創建lv,都是普通的DS_LV類型的LV。 
對於Big VG,是唯一允許同時存在這兩種LV類型的VG,如果我們指定-T O(注意,這裏是大寫的字母O),則創建DS_LVZ類型的LV,否則,創建普通類型的LV。如 
/usr/sbin/mklv -y LVname -T O -w n -s n -r n VGname NumPPs。 
對於Scalable-type VG類型的VG,不管你使用什麼方式的命令創建lv,都是擴展的DS_LVZ類型的LV。 
由Oracle的警告日誌可以看出,Oracle 使用raw設備時,建議設置不帶4k的lv。

AIX將這4k偏移量稱之爲lvcb(logical volume control block),它將佔用4k的前512個字節,它類似於Oracle數據文件頭,保留有lv的創建時間,鏡像拷貝信息,文件系統掛載點等。

從2個方面可以查看lv是否有4k偏移量 
1、主機層面 
沒有4k偏移量: 

引用

#lslv jfkdb_2G_044 
LOGICAL VOLUME: jfkdb_2G_044 VOLUME GROUP: jfk_dbvg_01 
LV IDENTIFIER: 00c3dff400004c00000001217a9d839e.84 PERMISSION: read/write 
VG STATE: active/complete LV STATE: closed/syncd 
TYPE: raw WRITE VERIFY: off 
MAX LPs: 1024 PP SIZE: 32 megabyte(s) 
COPIES: 1 SCHED POLICY: parallel 
LPs: 64 PPs: 64 
STALE PPs: 0 BB POLICY: relocatable 
INTER-POLICY: maximum RELOCATABLE: yes 
INTRA-POLICY: middle UPPER BOUND: 1024 
MOUNT POINT: N/A LABEL: None 
MIRROR WRITE CONSISTENCY: on/ACTIVE 
EACH LP COPY ON A SEPARATE PV ?: yes 
Serialize IO ?: NO 
DEVICESUBTYPE : DS_LVZ


有4k偏移量: 

引用

[root@jfk_p560q /]# lslv jfkdb_2G_044 
LOGICAL VOLUME: jfkdb_2G_044 VOLUME GROUP: jfk_db_vg01 
LV IDENTIFIER: 00ce76de00004c00000001134ee6bc51.84 PERMISSION: read/write 
VG STATE: active/complete LV STATE: opened/syncd 
TYPE: raw WRITE VERIFY: off 
MAX LPs: 1024 PP SIZE: 32 megabyte(s) 
COPIES: 1 SCHED POLICY: parallel 
LPs: 64 PPs: 64 
STALE PPs: 0 BB POLICY: relocatable 
INTER-POLICY: maximum RELOCATABLE: yes 
INTRA-POLICY: middle UPPER BOUND: 16 
MOUNT POINT: N/A LABEL: None 
MIRROR WRITE CONSISTENCY: on/ACTIVE 
EACH LP COPY ON A SEPARATE PV ?: yes 
Serialize IO ?: NO


(2)Oracle層面: 
Oracle提供了一小工具dbfsize(在$ORACLE_HOME/bin下)用於觀察lv是否有4k偏移量 
無4k偏移量: 

引用

$ dbfsize /dev/rlvsysaux_1g 

Database file: /dev/rlvsysaux_1g 
Database file type: raw device without 4K starting offset 
Database file size: 40960 8192 byte blocks


有4k偏移量: 

引用

[oracle@jfk_p560q /dev]$ dbfsize /dev/rjfkdb_2G_054 

Database file: /dev/rjfkdb_2G_054 
Database file type: raw device 
Database file size: 262016 8192 byte blocks



如果數據庫使用block size爲16k,創建跨pv帶有4k偏移的lv,條帶塊大小爲64k。這樣將導致第4個block橫跨2個pv(條帶化操作,把lvcb也計算進條帶塊中)。這樣會導致 
條帶塊的第4個Oracle block跨磁盤,撇開性能方面考慮,如果系統異常宕機,或者存儲異常宕機,極易引起數據庫塊損壞,引起ora-01578錯誤。(metalink ID 261460.1) 

引用

$ oerr ora 01578 
01578, 00000, "ORACLE data block corrupted (file # %s, block # %s)" 
// *Cause: The data block indicated was corrupted, mostly due to software 
// errors. 
// *Action: Try to restore the segment containing the block indicated. This 
// may involve dropping the segment and recreating it. If there 
// is a trace file, report the errors in it to your ORACLE 
// representative.

 

也就是說,使用Original Volume Group時候無法通過參數來取消4k offerset,唯一的辦法就是將oracle數據庫db_block_size設置爲4k。(不推薦使用)

而使用big VG的時候,可以通過創建LV加入-T -O參數來實現創建DS_LVZ類型的LV,從而取消前面4K的偏移量。(但傳說big vg有已知的bug,顧不推薦使用)。

而Scalable-type VG類型的VG,無論如何創建LV都是不帶4K偏移量的,且支持的pp更多,支持單個文件容量最大。(強烈推薦使用)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章