Oracle RAC系列之:ASM基本操作維護(經典)

dbhelper發表於2015-03-01

     ASM(自動儲存管理)是一個專門為Oracle資料庫服務的資料檔案儲存機制,通過ASM管理資料檔案,DBA不用再擔心I/O效能問題,也不需要知道檔案的名稱,同時ASM也提供了檔案系統到卷管理器的整合,下面依次介紹。
一、 ASM的特點
(1)自動調整I/O負載
ASM可以在所有可用的磁碟中自動調整I/O負載,不但避免了人工調整I/O的難度,而且也優化了效能,同時,利用ASM可以線上增加資料庫的大小,而無需關閉資料庫。
(2)條帶化儲存
ASM將檔案分為多個分配單元(Allocation Units, AU)進行儲存,並在所有磁碟間平均分配每個檔案的AU。
(3)線上自動負載均衡
當共享儲存裝置有變化時,ASM中的資料會自動均勻分配到現有儲存裝置中。同時,還可以調節資料的負載均衡速度。
(4)自動管理資料庫檔案
在ASM儲存管理中,Oracle資料檔案是ASM自動管理的。ASM建立的任何檔案一旦不再需要,就會被自動刪除。但是,ASM不管理二進位制檔案、跟蹤檔案、預警日誌和口令檔案。
(5)資料冗餘
ASM通過磁碟組映象可以實現資料冗餘,不需要第三方工具。
(6)支援各種Oracle資料檔案
ASM儲存支援Oracle資料檔案、日誌檔案、控制檔案、歸檔日誌、RMAN備份集等。

二、ASM的體系結構與後臺程式

圖1顯示了ASM的物理構成。

 

         從圖1可以看出,在頂層是ASM磁碟組,ASM例項和資料庫例項可以直接訪問這些磁碟組;然後是ASM檔案,每個ASM檔案只能包含在一個磁碟組中,不 過,一個磁碟組中可以包含屬於多個資料庫的多個ASM檔案,並且單個資料庫可以使用來自多個磁碟組的儲存空間;第三部分是ASM磁碟,多個ASM磁碟組成 了ASM磁碟組,但每個ASM磁碟只能屬於一個磁碟組;接著是AU(分配單元),AU是ASM磁碟組分配的最小連續磁碟空間,ASM磁碟按照AU進行分 區,每個AU的大小為1MB;這個結構的底層是Oracle資料塊,由於AU是ASM分配的最小連續磁碟空間,因此,ASM是不允許跨分配單元拆分一個 Oracle資料塊的。
          要使用ASM,需要在啟動資料庫例項之前,先啟動一個名為“+ASM”的例項,ASM例項不會裝載資料庫,啟動它的目的是為了管理磁碟組和保護其中的數 據。同時,ASM例項還可以向資料庫例項傳遞有關檔案佈局的資訊。通過這種方式,資料庫例項就可以直接訪問磁碟組中儲存的檔案。圖2顯示了ASM的一般體 繫結構。
 

 

         從圖2可以看出,ASM例項與資料庫例項進行通訊的橋樑是ASMB程式,此程式執行在每個資料庫例項上,是兩個例項間資訊交換的通道。ASMB程式先利用 磁碟組名稱通過CSS獲得管理該磁碟組的ASM例項連線串,然後建立一個到ASM的持久連線,這樣兩個例項之間就可以通過這條連線定期交換資訊,同時這也 是一種心跳監控機制。
         另外,在ASM例項中還存在另外一個新的程式,即RBAL,此程式負責規劃和協調磁碟組的重新平衡活動。除此之外,ASM例項還有一些與資料庫例項中的程式相同的後臺程式,例如LGWR、SMON、PMON、DBWR 、CKPT等。
如果一個資料庫例項使用ASM作為儲存,那麼它將多出兩個後臺程式,即RBAL和ASMB。RBAL 負責開啟磁碟組中所有磁碟和資料,而ASMB負責和ASM例項程式通訊。

三、管理ASM例項
 在使用ASM作為資料儲存時,ASM例項管理顯得非常重要,Oracle提供了豐富的管理功能,對ASM例項進行管理需要具備SYSDBA許可權,在Oracle 11g中可以使用一個新角色 ,即SYSASM,此角色只用於管理ASM例項。
1.建立ASM例項
建立ASM例項有兩種方法,第一種是利用dbca建立,這種方法只需執行Database Configuration Assistant(DBCA),然後根據提示即可建立一個ASM例項,此種方式在前面已有講述,這裡不再多說。第二中方法是用命令列方式建立ASM實 例,下面進行簡單介紹。
(1)建立ASM磁碟
可以使用RAID劃分的LUN、分割槽和裸裝置等來建立ASM磁碟,但是在使用LUN、分割槽或裸裝置時,要注意將屬主和屬組改為Oracle使用者及其對應的 組,這個在前面節已經講述過,另外一種簡單的方法就是使用Oracle提供的ASMLib來完成ASM磁碟的建立,下面將講述這種方法。
在建立ASM例項之前,首先應該確保節點上已經安裝了ASMlib包,同時確認ASMLib是否已經自動載入:
[root@node1 ~]# lsmod | grep oracleasm
oracleasm              46356  1
然後,通過ASMlib提供的oracleasm將已經劃分好的磁碟分割槽轉化為ASM磁碟,例如:
[root@node1 ~]#/etc/init.d/oracleasm createdisk ASMDISK1 /dev/sdc5
Marking disk "/dev/sdc5" as an ASM disk [  OK  ]
[root@node1 ~]#/etc/init.d/oracleasm createdisk ASMDISK2 /dev/sdc6
Marking disk "/dev/sdc6" as an ASM disk [  OK  ]
[root@node1 ~]#/etc/init.d/oracleasm createdisk ASMDISK3 /dev/sdc7
Marking disk "/dev/sdc7" as an ASM disk [  OK  ]
[root@node1 ~]#/etc/init.d/oracleasm createdisk ASMDISK4 /dev/sdc8
Marking disk "/dev/sdc8" as an ASM disk [  OK  ]
[root@node1 ~]#/etc/init.d/oracleasm createdisk ASMdisk5 /dev/sdc9
Marking disk "/dev/sdc9" as an ASM disk [  OK  ]
建立完ASM磁碟後,可以檢視系統的/dev/oracleasm/disks/目錄下是否已經生成磁碟裝置,可以採用的命令如如下:
[root@node1 ~]# ll /dev/oracleasm/disks/ASMDISK*
brw-rw---- 1 oracle oinstall 8, 21 Sep 10 23:40 /dev/oracleasm/disks/ASMDISK1
brw-rw---- 1 oracle oinstall 8, 22 Sep 10 23:40 /dev/oracleasm/disks/ASMDISK2
brw-rw---- 1 oracle oinstall 8, 23 Sep 10 23:36 /dev/oracleasm/disks/ASMDISK3
brw-rw---- 1 oracle oinstall 8, 24 Sep 10 23:40 /dev/oracleasm/disks/ASMDISK4
brw-rw---- 1 oracle oinstall 8, 25 Sep 10 23:40 /dev/oracleasm/disks/ASMDISK5
也可以通過如下方式檢視:
[root@node1 ~]#service oracleasm listdisks
ASMDISK1
ASMDISK2
ASMDISK3
ASMDISK4
ASMDISK5
如果要刪除 ASM磁碟可通過以下命令:
[root@node1 ~]#/etc/init.d/oracleasm deletedisk ASMDISK5
Removing ASM disk "ASMdisk5" [  OK  ]
在RAC環境中,要注意另外一個節點是否能夠發現對應的ASM磁碟,執行如下命令,讓另外一個節點來獲取這種變化。
[root@node2 ~]#/etc/init.d/oracleasm scandisks
到此位置,ASM磁碟已經建立完畢了。
(2)初始化引數
啟動ASM例項只需要如下幾個引數即可,利用這些引數可以實現ASM例項的記憶體的自動分配和自動管理。
下面介紹ASM例項初始化引數:
instance_type=asm
cluster_database=true
DB_UNIQUE_NAME=+ASM
ASM_POWER_LIMIT=1
large_pool_size=60M
asm_diskgroups='FLASH_DISK','ARCH_DISK','DATA_DISK'
asm_diskstring='/dev/oracleasm/disks/*'
每個引數的含義如下:
? instance_type,指定例項的型別,對於ASM例項,應設定為ASM
? cluster_database,指定是否是資料庫叢集,true表示是ASM叢集
? DB_UNIQUE_NAME,指定ASM例項的名稱,預設是+ASM
? ASM_POWER_LIMIT,該引數用來控制ASM中資料的負載均衡速度
? large_pool_size,設定大池的大小,由於ASM檔案的分配單元對映是從large_pool分配的,因此large_pool_size至少要8MB,建議越大越好
? asm_diskgroups,指定例項啟動時可用的ASM磁碟組,ASM例項將在啟動時自動掛載這些磁碟組
? asm_diskstring,用於限制ASM例項可用於建立磁碟組的磁碟裝置。如果該值為NULL,則ASM例項可見的所有磁碟都可以成為建立磁碟組的可選磁碟
(3)建立密碼檔案
[oracle@node1 ~]$su - oracle
[oracle@node1 ~]$ cd $ORACLE_HOME/dbs
[oracle@node1 ~]$orapwd file=orapw+ASM password=oracle
(4)建立目錄結構
[oracle@node 1~]$su – oracle
[oracle@node1 ~]$cd $ORACLE_HOME/dbs
[oracle@node1 ~]$mkdir –p $ORALCE_BASE/admin/+ASM/udump
[oracle@node1 ~]$ mkdir –p $ORALCE_BASE/admin/+ASM/bdump
[oracle@node1 ~]$mkdir –p $ORALCE_BASE/admin/+ASM/adump
[oracle@node1~]$ mkdir –p $ORALCE_BASE/admin/+ASM/cdump
2.啟動ASM例項
 無論在RAC環境中還是單例項環境,ASM例項都需要用到CSS程式,在RAC環境中,啟動CRS後CSS已經執行,而在單例項環境下,需要以root使用者執行指令碼,初始化CSS服務,否則,在啟動ASM例項時會報如下錯誤:
ORA-29701: unable to connect to Cluster Manager
執行初始化指令碼的過程如下:
[root@node1 ~]#$ORACLE_HOME/bin/localconfig add
/etc/oracle does not exist. Creating it now.
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Configuration for local CSS has been initialized

Cleaning up Network socket directories
Setting up Network socket directories
 Adding to inittab
Startup will be queued to init within 30 seconds.
Checking the status of new Oracle init process...
Expecting the CRS daemons to be up within 600 seconds.
 Cluster Synchronization Services is active on these nodes.
        node1
Cluster Synchronization Services is active on all the nodes.
Oracle CSS service is installed and running under init(1M)
然後啟動ASM例項:
[oracle@node1 ~]$export ORACLE_SID=+ASM
[oracle@node1 ~]$sqlplus / as sysdba
SQL> startup
ASM instance started
Total System Global Area    134217728 bytes
Fixed Size                   1218124 bytes
Variable Size               107833780 bytes
ASM Cache                   25165824 bytes
ORA-15110: no diskgroups mounted
因為首次啟動ASM例項並沒有建立ASM磁碟組,所以顯示 15110錯誤是正常的。
3.管理ASM磁碟組
 ASM磁碟組是作為邏輯單元進行統一管理的一組磁碟,在ASM例項中,可以建立和新增新的磁碟組,可以修改現有的磁碟組,在其中新增一個磁碟或者刪除一個磁碟,也可以刪除現有的磁碟組。
(1)新增磁碟組
SQL> create diskgroup FLASH_DISK external redundancy disk '/dev/oracleasm/disks/ASMDISK1' name flashdisk;
Diskgroup created.
SQL> create diskgroup ARCH_DISK external redundancy disk '/dev/oracleasm/disks/ASMDISK2' name archdisk1;
Diskgroup created.
SQL> create diskgroup DATA_DISK normal redundancy disk '/dev/oracleasm/disks/ASMDISK4' name datadisk1, '/dev/oracleasm/disks/ASMDISK5' name datadisk2;
Diskgroup created.
(2)檢視磁碟組狀態
SQL> select name,state from v$asm_diskgroup;
NAME                           STATE
-------------------       --------------
FLASH_DISK                   MOUNTED
ARCH_DISK                   MOUNTED
DATA_DISK               MOUNTED
(3)解除安裝FLASH_DISK磁碟組
SQL> alter diskgroup FLASH_DISK dismount;
Diskgroup altered.
SQL> select name,state from v$asm_diskgroup;
NAME               STATE
---------------------------  -----------
FLASH_DISK         DISMOUNTED
ARCH_DISK          MOUNTED
DATA_DISK          MOUNTED
(4)掛載FLASH_DISK磁碟組
SQL> alter diskgroup  FLASH_DISK mount;
Diskgroup altered.
SQL> select name,state from v$asm_diskgroup;
NAME                STATE
------------------------------  -----------
FLASH_DISK      MOUNTED
ARCH_DISK        MOUNTED
DATA_DISK     MOUNTED
(5)檢視磁碟名與裸裝置對應關係
SQL>  select name,path from v$asm_disk_stat;
NAME                             PATH
-------------------         --------------------------------------
                               /dev/oracleasm/disks/ASMDISK3
DATADISK2                      /dev/oracleasm/disks/ASMDISK5
DATADISK1                      /dev/oracleasm/disks/ASMDISK4
ARCHDISK1                      /dev/oracleasm/disks/ASMDISK2
FLASHDISK                      /dev/oracleasm/disks/ASMDISK1
(6)檢視每個磁碟組的可用大小
SQL> select name,allocation_unit_size,total_mb from v$asm_diskgroup;
NAME      ALLOCATION_UNIT_SIZE      TOTAL_MB
------------------ --------------------------------    ----------
FLASH_DISK  1048576          3815
ARCH_DISK  1048576          3815
DATA_DISK   1048576           954
(7)向磁碟組中增加一個磁碟
SQL> ALTER DISKGROUP ARCH_DISK ADD DISK '/dev/oracleasm/disks/ASMDISK3' name ARCHDISK2;
Diskgroup altered.
檢視每個磁碟組的可用大小
SQL> select name,allocation_unit_size,total_mb from v$asm_diskgroup;
NAME       ALLOCATION_UNIT_SIZE   TOTAL_MB
------------------- -------------------------------   ----------
FLASH_DISK  1048576         3815
ARCH_DISK  1048576         4292
DATA_DISK  1048576          954
SQL> select name,path from v$asm_disk_stat;
NAME                            PATH
-------------------       ----------------------------------------
DATADISK2                       /dev/oracleasm/disks/ASMDISK5
DATADISK1                       /dev/oracleasm/disks/ASMDISK4
ARCHDISK2                       /dev/oracleasm/disks/ASMDISK3
ARCHDISK1                       /dev/oracleasm/disks/ASMDISK2
FLASHDISK                       /dev/oracleasm/disks/ASMDISK1
可以看出,磁碟組ARCH_DISK的大小發生變化了,表明新增磁碟成功。
(8)從磁碟組中刪除一個磁碟:
SQL> ALTER DISKGROUP ARCH_DISK DROP DISK ARCHDISK2;
Diskgroup altered.
(9)刪除一個磁碟組:
SQL> drop diskgroup  FLASH_DISK;
Diskgroup dropped.
當有資料庫使用ASM的磁碟組時,是無法解除安裝和刪除這個磁碟組的。ASM例項如果宕掉,那麼使用ASM的資料庫例項也會宕掉。在RAC環境中,在刪除一個磁碟組之前,其他節點的ASM例項必須將這個要刪除的磁碟組解除安裝。
4.關閉ASM例項
關閉ASM例項的命令和關閉資料庫例項的命令相同,但只有在沒有任何資料庫例項連線到該ASM例項的情況下,才能正常關閉ASM例項,如果至少有一個資料庫例項與之連線,會提示以下錯誤:
ORA-15097: cannot SHUTDOWN ASM instance with connected RDBMS instance
此時,如果對該ASM例項強制執行SHUTDOWN ABORT命令,那麼ASM例項將被關閉,任何與之連線的資料庫例項最終也將自動關閉,同時報以下錯誤:
ORA-15064: communication failure with ASM instance
ASM例項被強制關閉後,在下次啟動時,會要求進行恢復。
5.  ASMCMD命令
Oracle在10g版本中提供了ASMCMD命令,通過這個命令可以管理儲存在ASM磁碟中的資料。下面簡單介紹ASMCMD命令的使用方法。
在使用ASMCMD命令時必須啟動ASM例項,然後指定ORACLE_HOME和ORACLE_SID,例如:
[oracle@node-rac1 ~]$ export ORACLE_SID=+ASM1
[oracle@node-rac1 ~]$ asmcmd
ASMCMD>
還可以使用“asmcmd -p”,加上“-p”引數可以顯示當前路徑。
下面是ASMCMD提供的一些可用命令,其中oracle 11g新增的命令有cp、md_backup、md_restore。
ASMCMD> ?
        commands:
        --------
        help

        cd
        cp
        du
        find
        ls
        lsct
        lsdg
        mkalias
        mkdir
        pwd
        rm
        rmalias

        md_backup
        md_restore

        lsdsk
        remap
(1)切換目錄
ASMCMD> cd +DATA_DISK/RACDB
(2)列出目錄資訊
ASMCMD> ls
CONTROLFILE/
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
spfileracdb.ora
(3)檢視磁碟空間資訊
執行ASMCMD的 “du DATAFILE”命令檢視磁碟空間資訊,如圖3所示

 

(4)顯示ASM和資料庫例項連線情況
執行ASMCMD的“lsct”命令顯示ASM和資料庫例項連線情況,如圖4所示

 

(5)建立一個目錄
ASMCMD> mkdir test
ASMCMD> ls
CONTROLFILE/
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
spfileracdb.ora
test/
(6)複製磁碟檔案
將ASM磁碟檔案spfileracdb.or複製到test目錄下:
ASMCMD> cp spfileracdb.ora test
source +DATA_DISK/RACDB/spfileracdb.ora
target +DATA_DISK/RACDB/test/spfileracdb.ora
copying file(s)...
file, +DATA_DISK/racdb/test/spfileracdb.ora, copy committed.
ASMCMD> cd test
ASMCMD> ls
spfileracdb.ora
將ASM磁碟檔案UNDOTBS1.258.728340289檔案複製到作業系統某目錄下:
ASMCMD> cp UNDOTBS1.258.728340289 UNDOTBS1.dbf           
source +DATA_DISK/RACDB/DATAFILE/UNDOTBS1.258.728340289
target UNDOTBS1.dbf
copying file(s)...
copying file(s)...
copying file(s)...
copying file(s)...
copying file(s)...
copying file(s)...
file, /u01/oracle/product/11.0.6/rac_db/dbs/UNDOTBS1.dbf, copy committed.
(7)備份ASM的metadata
ASMCMD> md_backup -b /u01/oracle/datadisk.bak -g data_disk
Disk group to be backed up: DATA_DISK
這樣就把ASM的metadata備份到了檔案系統上,通過檢視datadisk.bak檔案可以得知metadata的組織資訊。
(8)為ASM磁碟檔案設定別名
執行如圖5所示的命令為ASM磁碟檔案設定別名。


(9)在磁碟組查詢檔案
ASMCMD> find +DATA_DISK sys*
+DATA_DISK/RACDB/DATAFILE/SYSAUX.257.728340287
+DATA_DISK/RACDB/DATAFILE/SYSAUX.dbf
+DATA_DISK/RACDB/DATAFILE/SYSTEM.256.728340285
+DATA_DISK/RACDB/DATAFILE/SYSTEM.dbf
(10)在磁碟組刪除檔案
ASMCMD> rm -rf test

------&gt>轉載於:http://ixdba.blog.51cto.com/2895551/970801

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

相關文章