【轉載】Oracle ASM

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

Oracle 7&8 :這個時期的數據庫備份方案已經可使用RMAN 命令,它起源於Oracle 版本8,7的時候還不具有這個功能。能夠把數據存儲在操做系統的文件系統上和裸設備上。一提到裸設備可能剛進入DBA行當的朋友們不是很熟悉,下面隨便簡單介紹一下吧。sql

裸設備:咱們把這三個字分開說吧,設備就是指的物理磁盤,像老一點的IDE磁盤,如今經常使用的SCSI磁盤SAS磁盤等。裸指的是這個磁盤上沒有文件系統,通常磁盤在插入到主板上後必須爲其建立文件系統(windows ext2&3&4)並格式化才能使用,但oracle能夠不經過文件系統直接訪問一塊裸設備(要先建立爲物理卷)這種直接訪問設備的方式給咱們提供了必定的便捷(不須要操做系統層處理可直接與設備進行數據交換,提升了交換速度),但同時帶來的弊端也是顯而易見的,例如很差管理,必須每一個文件單首創建一個裸設備,很是麻煩,複製和備份也不方便。其實裸設備仍是沒有真正的繞過操做系統,由於它須要經過由操做系統驅動的設備接口而訪問設備。Linux中有一種dd命令能夠分配和管理裸設備,仍是沒有文件系統方便。數據庫


Oracle 9i&10g:Oracle9i開始開發出一套本身的文件系統叫ASM,中文叫「自動存儲管理系統」,能夠經過ASMCMD工具來管理,它能夠不受操做系統層參數的影響直接處理磁盤上的數據,效率要比操做系統層處理一遍的高。層次越多開銷越大 層次越少開銷越小,流行於Oracle 10gwindows

ASM是由AU(allocationunit)和條帶來決定數據分佈單元的,如何存儲分配。併發

AU:磁盤分配單元,數據存儲的一個基本單位,默認1M,建議大一點oracle

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

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

條帶寬度:默認8 ,建議條帶寬帶與磁盤數相匹配最好工具

條帶大小:能夠自由指定 1M 512k 256k性能

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

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

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


Oracle 11g:出現了ASM和OCFS(Oracle Cluster File System)並存的局面,OCFS叫作「Oracle 集羣文件系統」用的最多就是RAC模式下,11g中RAC模式下要不使用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畫圖工具完成了一張簡單的工做流程圖,功力淺薄,望海涵


說明

(1)這張圖畫了2個Oracle實例,鏈接1個ASM實例,ASM實例掛載了3個磁盤組

(2)1個ASM實例能夠爲多個Oracle實例提供服務的,同時能夠掛載多個磁盤組,例如Disk Group A 存放數據文件,Disk Group B 存放歸檔日誌文件,Disk Group C 存放CRS文件和Voting disk文件。磁盤組相似於操做系統的邏輯卷,能夠根據用途進行劃分

(3)Oracle實例把數據先傳到ASM實例上就不用管了,ASM再把數據按用途分配到各自的磁盤組上,而且是以打散的狀態平均分散到每一個磁盤上,目的就是分散熱點塊並行讀取提升I/O效率

(4)css集羣同步服務進程就是負責ASM實例與Oracle實例相互通訊的

(5)啓動ASM實例後再啓動數據庫實例,先關閉數據庫實例後再關閉ASM實例

(6)咱們能夠方便的給ASM磁盤組添加一塊磁盤,若是磁盤組損壞咱們還能夠刪除一個磁盤組

(7)ASM數據分爲「元數據」「真正數據」,元數據描述對象的字典信息,就是物理磁盤信息 例如 塊大小 AU大小 條帶寬度 數據分佈狀況 平衡狀況 冗餘狀況等。而且在再平衡時「元數據」和「數據」都會移動

(8)ASM能夠自動條帶化,均衡負載,各個磁盤保持數據的均勻,能夠遊刃有餘管理不一樣大小的磁盤


 

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_SIZE:ASM塊大小默認爲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 <sysasm|sysdba>][-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啓動時間:4月19日13點啓動

狀態: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實例故障

RBLA:DISKGROUP作REBALANCE的後臺進程,該進程一旦有故障,將致使ASM實例宕機

DBWn:與RDBMS的dbwriter相似,將ASM CACHE中髒數據寫回磁盤

MMAN:與自動SGA管理有關,負責自動管理SGA。

SMON:系統監控進程,監控ASM實例的狀態,一個ASM實例只有一個SMON進程

CKPT:檢查點進程,觸發ASM檢查點寫髒數據的

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

DIAG:ASM診斷進程,用於診斷ASM告警

LGRW:寫redolog進程,凡是塊更改就會觸發進程寫redo信息

MMON:ASM緩衝區自動調整進程

VKTM:用於執行online磁盤的臨時任務進程


 

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

相關文章
相關標籤/搜索