標籤:aix oracle
今天朋友在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位移量:
引用
[[email protected]_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位移量:
引用
[[email protected]_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更多,支援單個檔案容量最大。(強烈推薦使用)
本文出自 “文化流氓的DBA生活” 部落格,轉載請與作者聯絡!
aix5.3系統安裝oracle 10g使用裸裝置--4k位移量問題