天天看點

AIX用裸裝置擴資料庫表空間+裸裝置基礎知識

AIX用裸裝置擴資料庫表空間專題

AIXCLUB大哥的經典文章,看這個AIX裸裝置這塊基本差不多了!AIX的裸裝置跟LINUX有些不一樣,建立完LV會在/dev/下生成跟LV名稱前加R的檔案,它就是LV的裸裝置檔案。

硬體環境:小型機 IBM P670,存儲:IBM SHARK F-20

軟體環境:作業系統 AIX5.1 資料庫oracle9i

主題思想:實體卷PV->卷組VG->邏輯卷LV(類型:raw)->添加表空間

操作過程:

一、 首先

#lsvg – o //檢視所有可用卷組

datavg03

datavg02

datavg01

datavg00

rootvg

二、 然後對用來專為資料庫準備的卷組進行如下操作:

#lsvg –l datavg03

datavg09:

LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT

lvdata0316 raw 64 64 1 open/syncd N/A

lvdata0317 raw 64 64 1 open/syncd N/A

lvdata0318 raw 64 64 1 closed/syncd N/A

lvdata0319 raw 64 64 1 closed/syncd N/A

lvdata0320 raw 64 64 1 closed/syncd N/A

lvdata0321 raw 64 64 1 closed/syncd N/A

lvdata0322 raw 64 64 1 closed/syncd N/A

lvdata0323 raw 64 64 1 closed/syncd N/A

lvdata0324 raw 64 64 1 closed/syncd N/A

lvdata0325 raw 64 64 1 closed/syncd N/A

lvdata0326 raw 64 64 1 closed/syncd N/A

lvdata0327 raw 64 64 1 closed/syncd N/A

lvdata0328 raw 64 64 1 closed/syncd N/A

lvdata0329 raw 64 64 1 closed/syncd N/A

lvdata0330 raw 64 64 1 closed/syncd N/A

由顯示可知:該卷組還有13個邏輯卷(裸裝置)未被使用(如果在顯示結果中沒有closed/syncd狀态的邏輯卷,可進入第3步)但如何知道這13個邏輯卷有多大容量呢,可以機使用如下指令:

#lslv lvdata0315

LOGICAL VOLUME: lvdata0309 VOLUME GROUP: datavg09

LV IDENTIFIER: 0037de1d00004c0000000105cd3b6816.11 PERMISSION: read/write

VG STATE: active/complete LV STATE: opened/syncd

TYPE: raw WRITE VERIFY: off

MAX LPs: 512 PP SIZE: 64 megabyte(s)

COPIES: 1 SCHED POLICY: parallel

LPs: 64 PPs: 64

STALE PPs: 0 BB POLICY: relocatable

INTER-POLICY: minimum RELOCATABLE: yes

INTRA-POLICY: middle UPPER BOUND: 32

MOUNT POINT: N/A LABEL: None

MIRROR WRITE CONSISTENCY: on/ACTIVE

EACH LP COPY ON A SEPARATE PV ?: yes

可看到實體分區大小為64M,由于在同一卷組當中,是以可以知道所有實體分區大小都是64M,從lsvg - l datavg09的顯示結果可看到,PPs:LPs=1:1是以,每個邏輯卷的大小是:LPs×PPSIZE=64*64M=4096M=4G,進而可知還有13個4G的邏輯卷,未被使用。

但到此還不能完全保證就可以使用這13個邏輯卷對資料庫的表空間進行擴充,因為我們還不知到這些裸裝置的屬主,是以還需要如下步驟:

#cd /dev

# ls –l rlvdata03* //顯示以rlvdata03開頭的檔案屬性

crw-rw---- 1 oracle dba 58, 20 Aug 22 11:33 rlvdata0318

crw-rw---- 1 oracle dba 58, 21 Aug 22 11:35 rlvdata0319

crw-rw---- 1 oracle dba 58, 22 Aug 22 11:37 rlvdata0320

crw-rw---- 1 oracle dba 58, 23 Aug 22 12:35 rlvdata0321

crw-rw---- 1 oracle dba 58, 24 Aug 22 12:37 rlvdata0322

crw-rw---- 1 oracle dba 58, 25 Aug 22 12:39 rlvdata0323

crw-rw---- 1 oracle dba 58, 26 Aug 22 12:39 rlvdata0324

crw-rw---- 1 oracle dba 58, 27 Aug 19 16:14 rlvdata0325

從查詢結果可知,裸裝置的屬主已經是oracle了,oracle可以添加這些裸裝置了,但如果裸裝置的屬主不是oracle而是其他使用者,那麼需要

#chown oracle:dba rlvdata03* //要根據實際情況修改,千萬小心

三、添加表空間 我們可以登入資料庫了,使用有建立或修改表空間權限的使用者登入資料庫(有多種方法),我們以sqlplus為例:

#su - oracle

$ sqlplus /nolog

SQL*Plus: Release 9.2.0.5.0 - Production on Mon Aug 22 12:49:55 2005

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL>conn /as sysdba

Connected.

SQL>alter tablespace ts_index add datafile

2 ‘/dev/rlvdata0318’ size 4090; //size 是4090而不是4096,如果4096全部使用的話,容易出錯

SQL> Tablespace altered

可以反複以上操作,完成其它裸裝置的添加,進而達到表空間擴充的目的。

但是如果以上13個邏輯卷還不能滿足擴充需求,那麼可以繼續以下步驟

四、#lsvg datavg09 //檢視卷組資訊和使用情況,看是否還有足夠的空間

VOLUME GROUP: datavg09 VG IDENTIFIER: 0037de1d00004c000000010

5cd3b6816

VG STATE: active PP SIZE: 64 megabyte(s)

VG PERMISSION: read/write TOTAL PPs: 2605 (166720 megabytes)

MAX LVs: 256 FREE PPs: 557 (35648 megabytes)

LVs: 32 USED PPs: 2048 (131072 megabytes)

OPEN LVs: 16 QUORUM: 3

TOTAL PVs: 5 VG DESCRIPTORS: 5

STALE PVs: 0 STALE PPs: 0

ACTIVE PVs: 5 AUTO ON: no

MAX PPs per PV: 1016 MAX PVs: 32

LTG size: 128 kilobyte(s) AUTO SYNC: no

HOT SPARE: no

顯示資訊可以看到,該卷組目前還有35648M空間供使用,則可以進行如下操作:

#mklv -y ‘lvdata0331’ - t ‘raw’ datavg09 64

說明:在卷組datavg09上建立邏輯卷lvdata0331,邏輯卷的類型是raw,邏輯卷的lps是64

邏輯卷大小太大對會影響資料庫性能,是以不宜建立過大的裸裝置。

然後進行前面的‘三’節

但是如果目前所有的卷組都已使用完,沒有可以用來添加裸裝置的卷組,那麼還要,建立卷組。

五、建立卷組 在建立之前,我們首先看一下有沒有可用的實體卷

#lspv

vpath53 000b273dbe31ff50 datavg03

vpath54 000b273dbe320138 datavg03

vpath55 000b273dbe320303 datavg03

vpath56 000b273dbe320795 None

vpath57 000b273dbe320a46 None

vpath58 000b273dbe320c29 None

可以看到vpath56、vpath57、vpath58、還沒有備卷組使用。由于目前環境的存儲提供是磁盤陣列,是以vpath 是在陣列上指定了大小的,在小型機系統認到的所謂的“實體卷”(其實真正的實體卷,應該是

hdisk)。

# mkvg -f -y'datavg04' -s'64' '-n' vpath56 vpath57 vpath58

說明:用 vpath56 vpath57 vpath58 建立卷組datavg04,并且實體分區大小是64M

卷組建立好後,重複前面的步驟即可完成。

參考:

裸裝置,也叫裸分區(原始分區),是一種沒有經過格式化,不被Unix通過檔案系統來讀取的特殊字元裝置。本文收集裸裝置和Oracle問答20例。  

1.什麼叫做裸裝置?

  裸裝置,也叫裸分區(原始分區),是一種沒有經過格式化,不被Unix通過檔案系統來讀取的特殊字元裝置。它由應用程式負責對它進行讀寫操作。不經過檔案系統的緩沖。  

2.如何辨識裸裝置?

  在Unix的/dev目錄下,有許多檔案,其中有兩個大類:字元裝置檔案和塊裝置檔案。  字元裝置特殊檔案進行I/O操作不經過作業系統的緩沖區,而塊裝置特殊檔案用來同外設進行定長的包傳輸。字元特殊檔案與外設進行I/o操作時每次隻傳輸一個字元。而對于塊裝置特殊檔案來說,它用了cache機制,在外設和記憶體之間一次可以傳送一整塊資料。裸裝置使用字元特殊檔案。在/dev 目錄下,你可以看到許多這樣的檔案。  

3.使用裸裝置的好處  

因為使用裸裝置避免了再經過Unix作業系統這一層,資料直接從Disk到Oracle進行傳輸,是以使用裸裝置對于讀寫頻繁的資料庫應用來說,可以極大地提高資料庫系統的性能。當然,這是以磁盤的 I/O非常大,磁盤I/O已經稱為系統瓶頸的情況下才成立。如果磁盤讀寫确實非常頻繁,以至于磁盤讀寫成為系統瓶頸的情況成立,那麼采用裸裝置确實可以大大提高性能,最大甚至可以提高至40%,非常明顯。  而且,由于使用的是原始分區,沒有采用檔案系統的管理方式,對于Unix維護檔案系統的開銷也都沒有了,比如不用再維護I-node,空閑塊等,這也能夠導緻性能的提高。  

4.如何決定是否應該使用裸裝置?  

判斷是否使用裸裝置要從以下方面進行考慮:首先,資料庫系統本身需要已經被比較好的經過了優化。優化是一門很有些技術的話題,很難簡單地講述。其次,使用Unix指令來辨識是否存在磁盤讀寫瓶頸。比如Unix的vmstat, sar等指令都可以較好的進行鑒别。如果決定采用裸裝置,需要磁盤上還有空閑的分區。否則,就要新添磁盤,或者對原有系統重新規劃。  

5.什麼系統必須使用裸裝置?  

如果使用了Oracle并行伺服器選項,則必須采用裸裝置來存放所有的資料檔案,控制檔案,重做日志檔案。隻有把這些檔案放到裸裝置上,才能保證所有Oracle執行個體都可以讀取這個資料庫的檔案。這是由Unix作業系統的特性決定的。  還有一種情況是,如果你想使用異步I/O,那麼在有些Unix上也必須采用裸裝置。這個需要參考具體Unix的相關文檔。

6.能夠使用一個磁盤的第一個分區作為裸裝置嗎?  

可以,但是不推薦。在Unix的比較舊的版本是銀行,磁盤的第一個分區常常包含這個磁盤的一些資訊,以及邏輯卷的一些控制資訊。若這些部分被裸裝置覆寫的話,磁盤就會變得不可識别,導緻系統崩潰。  較新的Unix版本不會發生這樣的情況,因為它們采用了更複雜的技術來管理磁盤,邏輯卷的一些資訊。  但是,除非很确信不要使用磁盤的第一個分區來作為裸裝置。

7.我可以把整個裸裝置都作為Oracle的資料檔案嗎?  

不行。必須讓資料檔案的大小稍微小于該裸裝置的實際大小。至少要空出兩個oracle塊的大小來。 

8.裸裝置應該屬于那個使用者?  

應該由root來建立裸裝置,然後再配置設定給Oracle使用者以供使用。同時還要把它歸入Oracle使用者所在的那個組裡邊(通常都是DBA)。  

9.在建立資料檔案時如何指定裸裝置?  

和普通檔案沒有什麼太大的差別,一樣都是在單引号裡邊寫上裸裝置的詳細路徑就可以了。舉一個例子:要在建立一個表空間,使用兩個裸裝置,每個分别為30M的大小,Oracle塊的大小為4K,可以用下面的指令:  CREATE TABLESPACE RAW_TS  DATAFILE'/dev/raw1' size 30712k  DATAFILE '/dev/raw2' size 30712k;

10.Oracle塊的大小和裸裝置有什麼關系嗎?  

Oracle會必須是裸裝置上實體塊大小的倍數。  

11.如何在裸裝置上進行備份?  

在裸裝置上,不能使用Unix實用程式來進行備份,唯一的辦法是使用最基本的Unix指令:DD來進行備份。比如:dd if=/dev/raw1of=/dev/rmt0bs=16k。dd的具體文法可以參考unix手冊,或者聯機幫助。你也可以先用dd把裸裝置上的資料檔案備份到磁盤上,然後再利用Unix實用程式進一步處理。行伺服器選項,

12。我可以在資料庫上讓一部分資料檔案使用檔案系統,另一部分使用裸裝置嗎?  

可以。但是這樣的話,會使備份過程更加複雜。

13.我應該把聯機重做日志檔案放到裸裝置上嗎?  

這是一個極好的選擇。聯機重做日志檔案是寫操作非常頻繁的檔案,放到裸裝置上非常合适。如果你使用了并行伺服器選項,那麼聯機重做日志檔案必須放到裸裝置上面。  

14.可以把歸檔日志檔案放到裸裝置上嗎?  

不行。歸檔日志檔案必須放到正常的Unix檔案系統上面,或者直接放到錄音帶上面去。  

15.我可以在裸裝置上邊放置多個資料檔案嗎?  

不行。是以你必須在設定裸裝置時非常小心。太小的話,會導緻空間很快用完,太大的話,空間就白白浪費了。  

16.因應該把幾個裸裝置放到同一個實體磁盤上嗎?  

這樣做不好。因為使用裸裝置就是為了提高磁盤讀寫速度。而把多個裸裝置放到同一個實體磁盤上會導緻讀寫競争,這樣對于提高I/O速度是不利的。應該盡量分散裸裝置到不同的實體磁盤上,最好是分散到不同的磁盤控制器上。這是最佳選擇。  

17.需要把所有裸裝置都定義成同樣的大小嗎?  

這不是必須得,但是劃分成同樣的大小對于管理資料庫比較有利。  

18.為了在Unix上使用裸裝置,我需要改變Unix核心參數嗎?   不需要。但可以選擇減小緩沖區的大小,如果沒有别的應用也在同一台Unix機器上運作。因為運用了裸裝置以後,不再使用Unix的系統緩沖區。  

19.為了提高讀寫速度,在作業系統級别上,還有什麼辦法可以采取嗎?  

使用RAID(廉價備援磁盤陣列)也是非常有效的辦法,尤其實那種讀寫非常頻繁的系統。  

20.在考慮了以上所有方面後,還能有什麼辦法可以提高性能的嗎?  

這就需要對Oracle 進行優化,并且購買更多的磁盤和磁盤控制器,來分散I/O

出處:http://www.cppblog.com/prayer/archive/2009/08/13/93209.html