【原創】Oracle ASM發展與實踐

ddlovefish發表於2013-12-29

1.說說你個人理解的儲存解決方案的發展趨勢。

Oracle 7&8 :這個時期的資料庫備份方案已經可以使用RMAN 命令,它起源於Oracle 版本87的時候還不具備這個功能。可以把資料儲存在作業系統的檔案系統上和裸裝置上。一提到裸裝置可能剛進入DBA行當的朋友們不是很熟悉,下面隨便簡單介紹一下吧。

裸裝置:我們把這三個字分開說吧,裝置就是指的物理磁碟,像老一點的IDE磁碟,現在常用的SCSI磁碟SAS磁碟等。裸指的是這個磁碟上沒有檔案系統,一般磁碟在插入到主機板上後必須為其建立檔案系統(windows ext2&3&4)並格式化才能使用,但oracle可以不通過檔案系統直接訪問一塊裸裝置(要先建立為物理卷)這種直接訪問裝置的方式給我們提供了一定的便捷(不需要作業系統層處理可直接與裝置進行資料交換,提高了交換速度),但同時帶來的弊端也是顯而易見的,例如不好管理,必須每個檔案單獨建立一個裸裝置,非常麻煩,複製和備份也不方便。其實裸裝置還是沒有真正的繞過作業系統,因為它需要通過由作業系統驅動的裝置介面而訪問裝置。Linux中有一種dd命令可以分配和管理裸裝置,還是沒有檔案系統方便。


Oracle 9i&10gOracle9i開始開發出一套自己的檔案系統叫ASM,中文叫“自動儲存管理系統”,可以通過ASMCMD工具來管理,它可以不受作業系統層引數的影響直接處理磁碟上的資料,效率要比作業系統層處理一遍的高。層次越多開銷越大 層次越少開銷越小,流行於Oracle 10g

ASM是由AUallocationunit)和條帶來決定資料分佈單元的,如何儲存分配。

AU:磁碟分配單元,資料儲存的一個基本單位,預設1M,建議大一點

例如AU=2M  單次I/O=1M,需要2次連續I/O才能讀出一個AU

    AU=1M 單次I/O=2M1次分散IO讀出兩個AU,但是連續的比分散的I/O效率高

條頻寬度:預設8 ,建議條頻寬帶與磁碟數相匹配最好

條帶大小:可以自由指定 1M 512k 256k

條帶總大小=條頻寬度*條帶大小

AU小條帶場景:適合在大併發插入中表現較好,可有助於分散熱點塊,缺點連續性不夠

AU大條帶場景:適合在非大併發插入的情況下都可以使用,適合絕大多數場景


Oracle 11g:出現了ASMOCFSOracle Cluster File System)並存的局面,OCFS叫做“Oracle 叢集檔案系統”用的最多就是RAC模式下,11gRAC模式下要不使用ASM管理儲存要不使用OCFS管理儲存,已經不可以使用裸裝置當共享儲存了,切記切記。

注意:可能有的同學會說用Ext3&4也可以實現2臺機器共享一個儲存裝置啊(NFS就可以),嗯是的你很聰明問到了這個問題,但這是作業系統層面的貢獻,不是儲存層面的貢獻,而且也無法提供Oracle要求的共享訪問模式


ASM 三種redundancy冗餘模式

1)外部冗餘模式

ASM不提供資料冗餘,由外部儲存系統實現,例如 RAID技術

這是當前使用最多的方式,因為有了磁碟級別冗餘,那麼可以使用更多的磁碟空間來存放資料

2)常規冗餘模式

ASM提供2份映象,會損失一半空間用於備份映象,是extent級別冗餘不是磁碟級別冗餘,主備混合存放

3)高冗餘模式

ASM提供3份映象,會損失2/3空間用於備份映象,是extent級別冗餘不是磁碟級別冗餘,主備混合存放

小結:第一種方法使用的最多,後兩種方法使用的最少。

2.畫一張說明ASM例項同資料庫例項協同工作的原理圖,並給出語言描述。

直接使用word畫圖工具完成了一張簡單的工作流程圖,功力淺薄,望海涵

【原創】Oracle ASM發展與實踐

說明

1)這張圖畫了2Oracle例項,連線1ASM例項,ASM例項掛載了3個磁碟組

21ASM例項可以為多個Oracle例項提供服務的,同時可以掛載多個磁碟組,例如Disk Group A 存放資料檔案,Disk Group B 存放歸檔日誌檔案,Disk Group C 存放CRS檔案和Voting disk檔案。磁碟組類似於作業系統的邏輯卷,可以根據用途進行劃分

3Oracle例項把資料先傳到ASM例項上就不用管了,ASM再把資料按用途分配到各自的磁碟組上,並且是以打散的狀態平均分散到每個磁碟上,目的就是分散熱點塊並行讀取提高I/O效率

4css叢集同步服務程式就是負責ASM例項與Oracle例項相互通訊的

5)啟動ASM例項後再啟動資料庫例項,先關閉資料庫例項後再關閉ASM例項

6)我們可以方便的給ASM磁碟組新增一塊磁碟,如果磁碟組損壞我們還可以刪除一個磁碟組

7ASM資料分為“後設資料”“真正資料”,後設資料描述物件的字典資訊,就是物理磁碟資訊 例如 塊大小 AU大小 條頻寬度 資料分佈情況 平衡情況 冗餘情況等。並且在再平衡時“後設資料”和“資料”都會移動

8ASM可以自動條帶化,均衡負載,各個磁碟保持資料的均勻,可以遊刃有餘管理不同大小的磁碟


 

3.分別用檢視方式和asmcmd方式,分別計算出你所用ASM管理的儲存大小,使用空間和剩餘空間數,寫出計算過程。

檔案系統作為儲存模式:我們可以使用dba_tablespace來檢視錶空間的使用情況

ASM作為儲存模式:我們可以使用v$asm_diskgroup檢視資料檔案的使用情況,因為檔案塊在ASM上都是平衡打散狀態,你可以設定為資料檔案自動擴充套件,然後只需觀察磁碟組的增長情況即可

通過v$asm_diskgroup動態效能檢視我們可以查詢ASM磁碟組的狀態

SQL> selectgroup_number,name,state,block_size,allocation_unit_size,total_mb,free_mb fromv$asm_diskgroup;

GROUP_NUMBER  NAME  STATE    BLOCK_SIZE ALLOCATION_UNIT_SIZE   TOTAL_MB   FREE_MB

-------------------------------- -------------------- ---------- ----------

1               ARCH   MOUNTED 4096    1048576                10228      10174

2               CRS     MOUNTED  4096     1048576               5114      5055

3               DATA1   MOUNTED  4096    1048576               10228     10174

NAME:我們建立了三個磁碟組ARCH  CRS  DATA1

STATE:全部掛載

BLOCK_SIZEASM塊大小預設為4k

ALLOCATION_UNIT_SIZE:磁碟分配單元預設為1M

TOTAL_MB:可用空間10G  5G  10G

FREE_MB:空閒空間10174  5055  10174

通過ASMCMD工具管理磁碟,因為ASM管理的是裸裝置,在作業系統下是看不見的

ASMCMD> ls –lrt                             羅列已建立磁碟組

WARNING:option 'r'is deprecated for 'ls'

please use 'reverse'

State    Type   Rebal  Name           

MOUNTED  EXTERN N      DATA1/

MOUNTED  EXTERN N      CRS/

MOUNTED  EXTERN N      ARCH/

狀態已掛載,採用外部冗餘,磁碟組名

ASMCMD> pwd                              顯示當前路徑

+

ASMCMD> cddata1                          進入data1磁碟組

ASMCMD> pwd                              顯示當前路徑

+data1

ASMCMD> mkdirasm_leo1              data1下建立一個asm_leo1目錄

ASMCMD> ls

asm_leo1/

ASMCMD> rmasm_leo1                刪除目錄

ASMCMD> ls

ASMCMD> help                       顯示幫助資訊

        asmcmd [-vV] [-a ][-p] [command]

ASMCMD> lsct                        顯示有多少例項連線到ASM

ASMCMD> lsdg                       顯示當前有多少個磁碟組及空間大小

State    Type   Rebal  Sector  Block      AU  Total_MB  Free_MB Req_mir_free_MB Usable_file_MB  Offline_disks  Voting_files Name

MOUNTED  EXTERN N         512   4096 1048576     10228    10174                0           10174              0             N ARCH/

MOUNTED  EXTERN N         512   4096 1048576      5114     5055                0            5055              0             N CRS/

MOUNTED  EXTERN N         512   4096 1048576     10228    10174                0           10174              0             N DATA1/

Sector:磁碟扇區大小512

Usable_file_MB:可用檔案大小10174  5055  10174

Offline_disks:離線磁碟沒有

Voting_files:表決檔案

我們從v$asm_disk這個檢視中可以檢視到ASM磁碟屬性資訊

v$asm_disk_stat 檢視磁碟狀態資訊

v$asm_diskgroup 檢視磁碟組屬性資訊

v$asm_diskgroup_stat檢視磁碟組狀態資訊

v$asm_client 檢視磁碟組管理ASM例項的DB例項的資料行

v$_asm_file 檢視磁碟組中資料檔案屬性資訊

v$_asm_operation 檢視磁碟組操作資訊

v$_asm_alias 檢視安裝的磁碟組別名資訊

SQL> descv$asm_disk

Name                                     Null?    Type

------------------------------------------------- ----------------------------

GROUP_NUMBER                                       NUMBER

DISK_NUMBER                                        NUMBER

COMPOUND_INDEX                                     NUMBER

INCARNATION                                        NUMBER

MOUNT_STATUS                                       VARCHAR2(7)

HEADER_STATUS                                     VARCHAR2(12)

MODE_STATUS                                       VARCHAR2(7)

STATE                                             VARCHAR2(8)

小結:在Oracle例項中我們可以利用select table_name from dictionary wheretable_name like '%ASM%';

資料字典來檢索ASM相關的所有檢視。


 

4.查詢asm例項正常情況下的執行狀態(nomount,mount或者open),說一說為什麼?ASM例項有控制檔案嗎?為什麼?

ASM例項和DB例項的作用是一樣的,也是由若干記憶體區和一組後臺程式組成的,ASM例項啟動後也是先分配記憶體區(asm_buffer_cache)載入後臺程式。下面我們就來演示一下ASM例項啟動過程

[grid@leonarding1bin]$ echo $ORACLE_SID               檢查SID環境變數

+ASM

[grid@leonarding1bin]$ export ORACLE_SID=+ASM         如果沒有設定我們可以這樣設定一下

[grid@leonarding1bin]$ sqlplus / as sysasm

SQL*Plus: Release11.2.0.1.0 Production on Sun Apr 21 10:33:34 2013

Copyright (c)1982, 2009, Oracle.  All rights reserved.

Connected to:

Oracle Database11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the AutomaticStorage Management option

SQL> select *from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

PL/SQL Release11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux:Version 11.2.0.1.0 - Production

NLSRTL Version11.2.0.1.0 - Production

SQL> selectinstance_name,host_name,startup_time,status,archiver,database_status,loginsfrom v$instance;

INSTANCE_NAME   HOST_NAME  STARTUP_TIME   STATUS   ARCHIVER  DATABASE_STATUS

LOGINS

--------------------------------------------------------------------------------------------------------------------------------------------

+ASM     leonarding1.oracle.com  19-APR-13     STARTED  STOPPED   ACTIVE

ALLOWED

例項名:ASM        這裡可以判斷我們連線的是Oracle例項 還是ASM例項

主機名:leonarding1.oracle.com

ASM啟動時間:41913點啟動

狀態:nomount,分配記憶體區和載入後臺程式

歸檔狀態:沒有開

資料庫狀態:啟用

關閉ASM例項順序:先關閉Oracle例項->再關閉ASM例項->先啟動ASM例項->再啟動Oracle例項

SQL> shutdownimmediate

ASM diskgroupsdismounted       解除安裝磁碟組

ASM instanceshutdown           關閉例項

[grid@leonarding1bin]$ ps -ef | grep asm | grep -v grep        後臺程式已經沒有了

[grid@leonarding1bin]$

[grid@leonarding1bin]$ sqlplus / as sysasm

SQL*Plus: Release11.2.0.1.0 Production on Sun Apr 21 11:11:31 2013

Copyright (c) 1982,2009, Oracle.  All rights reserved.

Connectedto an idle instance.      一個空例項,我們來啟動它

SQL>

SQL> startup

ASM instancestarted                          例項啟動,分配記憶體,磁碟掛載

Total SystemGlobal Area  283930624 bytes

Fixed Size              2212656 bytes

Variable Size             256552144 bytes

ASM Cache              25165824 bytes

ASM diskgroupsmounted

如果是Oracle例項那麼後續肯定會有訪問控制檔案,開啟資料檔案的動作,而ASM例項啟動沒有這些動作,因為ASM只是管理磁碟組分配與平衡,不關注資料的一致性和資料庫結構(也不存在例項一致性和檢查點問題),邏輯上只做資料查詢和抽取工作。所以ASM不需要控制檔案和資料檔案,只需分配記憶體區和啟動後臺程式ASM就可以工作了。

ASM需要引數檔案

引數檔案目錄:/u02/app/11.2.0/grid/dbs

[grid@leonarding1bin]$ ps -ef | grep asm | grep -v grep

grid     14920    1  0 11:12 ?        00:00:00 asm_pmon_+ASM

grid     14924    1  0 11:12 ?        00:00:03 asm_vktm_+ASM

grid     14930    1  0 11:12 ?        00:00:00 asm_gen0_+ASM

grid     14934    1  0 11:12 ?        00:00:00 asm_diag_+ASM

grid     14938    1  0 11:12 ?        00:00:00 asm_psp0_+ASM

grid     14942    1  0 11:12 ?        00:00:00 asm_dia0_+ASM

grid     14946    1  0 11:12 ?        00:00:00 asm_mman_+ASM

grid     14950    1  0 11:12 ?        00:00:00 asm_dbw0_+ASM

grid     14954    1  0 11:12 ?        00:00:00 asm_lgwr_+ASM

grid     14958    1  0 11:12 ?        00:00:00 asm_ckpt_+ASM

grid     14962    1  0 11:12 ?        00:00:00 asm_smon_+ASM

grid     14966    1  0 11:12 ?        00:00:00 asm_rbal_+ASM

grid     14970    1  0 11:12 ?        00:00:00 asm_gmon_+ASM

grid     14974    1  0 11:12 ?        00:00:00 asm_mmon_+ASM

grid     14978    1  0 11:12 ?        00:00:00 asm_mmnl_+ASM


 

5.比較ASM例項和資料庫例項在監聽器中註冊的狀態,並說明原因。

ASM監聽

[grid@leonarding1dbs]$ lsnrctl status

LSNRCTL for Linux:Version 11.2.0.1.0 - Production on 21-APR-2013 11:40:01

Copyright (c)1991, 2009, Oracle.  All rights reserved.

Connecting to(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1522)))

STATUS of theLISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version11.2.0.1.0 - Production

Start Date                19-APR-2013 07:25:17

Uptime                    2 days 4 hr. 14 min. 43 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener ParameterFile  /u02/app/11.2.0/grid/network/admin/listener.ora

Listener LogFile         /u02/app/grid/diag/tnslsnr/leonarding1/listener/alert/log.xml

ListeningEndpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1522)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=leonarding1)(PORT=1522)))

ServicesSummary...

Service"+ASM" has 1 instance(s).

  Instance "+ASM", status READY, has1 handler(s) for this service...

The commandcompleted successfully

這是ASM監聽,ASM例項會自動註冊到監聽器中

Oracle監聽

[oracle@leonarding1 ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 17-APR-2013 21:28:00
Copyright (c) 1991, 2009, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                14-APR-2013 18:38:00
Uptime                    3 days 2 hr. 50 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0.1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/leonarding1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=leonarding1)(PORT=1521)))
Services Summary...
Service "LEO1" has 1 instance(s).
  Instance "LEO1", status READY, has 1 handler(s) for this service...
Service "LEO1XDB" has 1 instance(s).
  Instance "LEO1", status READY, has 1 handler(s) for this service...

The command completed successfully

Oracle監聽也會自動註冊到監聽器中,它們分別使用不同的引數檔案和日誌檔案

小結:一個監聽器可以為多個例項服務(ASM例項和Oracle例項)

      一個ASM例項也可以為多個資料庫例項服務

      一個CRS(叢集註冊服務)可以為幾個資料庫例項服務


 

6.看一下你的ASM的後臺程式包含哪些,分別說說它們的用途。

檢視ASM程式

[grid@leonarding1bin]$ ps -ef | grep asm | grep -v grep         

grid      4039    1  0 19:43 ?        00:00:03 asm_pmon_+ASM

grid      4043    1  0 19:43 ?        00:01:13 asm_vktm_+ASM

grid      4049    1  0 19:43 ?        00:00:01 asm_gen0_+ASM

grid      4053    1  0 19:43 ?        00:00:01 asm_diag_+ASM

grid      4057    1  0 19:43 ?        00:00:01 asm_psp0_+ASM

grid      4061    1  0 19:43 ?        00:00:05 asm_dia0_+ASM

grid      4065    1  0 19:43 ?        00:00:01 asm_mman_+ASM

grid      4069    1  0 19:43 ?        00:00:02 asm_dbw0_+ASM

grid      4073    1  0 19:43 ?        00:00:01 asm_lgwr_+ASM

grid      4077    1  0 19:43 ?        00:00:02 asm_ckpt_+ASM

grid      4081    1  0 19:43 ?        00:00:00 asm_smon_+ASM

grid      4085    1  0 19:43 ?        00:00:03 asm_rbal_+ASM

grid      4089    1  0 19:43 ?        00:00:05 asm_gmon_+ASM

grid      4093    1  0 19:43 ?        00:00:02 asm_mmon_+ASM

grid      4097    1  0 19:43 ?        00:00:04 asm_mmnl_+ASM

解釋:

PMON:程式監控程式,用於監控ASM例項程式,對異常程式進行報警保護
PSPn: 啟動其他ASM例項程式,一旦有問題將導致ASM例項故障

RBLADISKGROUPREBALANCE的後臺程式,該程式一旦有故障,將導致ASM例項當機

DBWn:與RDBMSdbwriter類似,將ASM CACHE中髒資料寫回磁碟
MMAN:與自動SGA管理有關,負責自動管理SGA

SMON:系統監控程式,監控ASM例項的狀態,一個ASM例項只有一個SMON程式
CKPT:檢查點程式,觸發ASM檢查點寫髒資料的

GMON:磁碟組監控程式,用於磁碟組狀態監控和狀態表維護。

DIAGASM診斷程式,用於診斷ASM告警

LGRW:寫redolog程式,凡是塊更改就會觸發程式寫redo資訊

MMONASM緩衝區自動調整程式

VKTM:用於執行online磁碟的臨時任務程式


 

ASM  磁碟組 ASMCMD  儲存解決方案  監視器  後臺程式  


Leonarding
2013.4.21
天津&spring
分享技術~成就夢想
Blogwww.leonarding.com


 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26686207/viewspace-758993/,如需轉載,請註明出處,否則將追究法律責任。

相關文章