centos7创建asm磁盘_Oracle ASM 磁盘组基础知识整理(收藏版)
為什么要寫這么一篇基礎知識呢?還是有那么一點點原因的,不是胡編亂造還真是有真實存在的事件的,前兩周里因一套生產環境數據庫磁盤不足無法對其進行表空間擴容,需要向存儲崗申請存儲資源,當存儲崗劃好資源加完存儲時,操作系統崗對其進行掃盤以及權限處理時忘記對 RAC2 節點的磁盤進行屬主的設置。
當到我們數據庫崗對其磁盤組添加磁盤時,我們的小伙伴沒有對其權限及屬主進行檢查,直接使用 alter diskgroup XXX add disk ‘XXX’添加磁盤,當然此命名是沒有任何問題的,添加成功,進行重新平衡。便興高采烈的下班了,但隨后而來的悲劇便上演了,由于節點2權限不對新添加的磁盤 ASM 實例無法訪問,導致數據庫宕機。使其業務系統不能正常訪問導致事故發生。
添加磁盤組磁盤,應使用類似如下的操作命令,可誰想盡沒有檢查權限導致悲劇發生。所以本次才對 ASM 磁盤組的基礎操作命令做了一個整理及簡化操作,希望對正在閱讀中的你有所幫助。
root:chown grid:asmadmin /dev/rhdisk10chmod 660 /dev/rhdisk10ls -la /dev/rhdisk10su - gridsqlplus / as sysasmalter diskgroup DATA add disk '/dev/rhdisk10','/dev/rhdisk11';alter diskgroup DATA rebalance power 10;ASM:Automatic Storage Management(自動存儲管理)。?ASM 是 Oracle 內置的邏輯卷管理器,它進一步簡化了數據庫管理工作,是 Oracle 墻裂推薦使用的存儲管理機制。先說一嘴 OMF,Oracle 11g 的一個新的特點就是文件和存儲的自動管理,簡稱為 OMF,這么說吧,就是在 11g 單實例的數據庫你創建一個數據文件需要寫全路徑,而在 ASM 里可以簡寫,不需要全部寫完,例如:這么寫:
create tablespace test datafile '+DATA' size 200M;
而不用
create tablespace test datafile '+DATA/testdb/datafile/test01.dbf' size 200M;注意:'+DATA'?前面的+號不能丟,?ASM?文件名字的格式是固定的:+group/dbname/file type/tag.file.incarnation
但這個功能需要以下初始化參數指定:
db_recovery_file_destdb_create_file_destdb_create_online_log_dest_n這里就不在細說了,今天主要說的是 ASM 磁盤組命令行的相關操作。
ASM 命令行工具 ASMCMD
當安裝完 grid 的時候,可使用命令行 asmca 來創建磁盤組,如下圖:
那也可以使用圖形化來管理磁盤組了,不過出現這個圖形化不是很方便,各種申請,故放棄,對于 DBA 來說,使用命令行是很方便的,那么就從 ASM 實例說起吧。
一、ASM 實例的啟動與關閉
ASMCMD 工具是一個強大的管理工具,可以對實例、磁盤組、文件進行管理??梢杂薪换ナ胶头墙换ナ降膬煞N方式,非交互式的直接就是 asmcmd 加一條 asmcmd 內部的命令,如 asmcmd lsdg;交互式的即先輸入asmcmd 進入命令提示符界面后在執行 lsdg。
啟動實例沒啥說的,和數據庫實例是一樣的,直接 startup 就行,關閉也就是 shutdown;那么 ASM 實例也是后臺進程加 SGA 內存組成,除了數據庫實例所具有的進程外,還有 RBAL 和 ABRn; RBAL 這個進程也叫 Rebalancer 進程,負責規劃 ASM 磁盤組的 Rebalance 活動;ABRn 是 RBAL 進程的子進程,這個進程在數量上可以有多個, n 從 1-9,這組進程負責真正完成 Reblance 活動。
ASM 隨著 SGA 的分配和后臺進程的啟動而啟動,從 nomount 啟動到最終的 mount 狀態。期間,也是需要參數文件的,也是可以啟動到 nomount,如
ASMCMD> startup --nomount --pfile init.oraASM?實例用戶
在 ASM 實例創建時,默認會創建兩個特權用戶:SYS 和 ASMSNMP,類似數據庫里的 SYS 和 SYSTEM 賬號。我們可以通過命令行命令 lspwusr 查看 ASM 實例中的特權用戶,也可以通過 orapwusr 命令創建、刪除、修改特權用戶,而特權用戶的口令文件則放在 ASM 實例的口令文件中。
SYS@ ydjttest2>select USERNAME,ACCOUNT_STATUS, EXPIRY_DATE from dba_users where username in('SYS','DBSNMP');USERNAME ACCOUNT_STATUS EXPIRY_DA------------------------------ -------------------------------- ---------SYS OPEN 24-FEB-19DBSNMP?????????????????????????EXPIRED?&?LOCKED?????????????????13-AUG-09[grid@JiekeXu1 ~]$ asmcmdASMCMD>ASMCMD> lspwusrUsername sysdba sysoper sysasm SYS TRUE TRUE TRUEASMSNMP TRUE FALSE FALSEASMCMD>下面通過命令行創建特權用戶 jiekexu, 密碼同名具有 SYSASM 權限,也可登錄 ASM 實例,通過動態性能視圖 V$PWFILE_USERS 也可查看到特權用戶。
orapwusr --add --privilege sysasm jiekexusqlplus jiekexu/jiekexu as sysasmselect?*?from?v$pwfile_users;二、命令行修改和刪除特權用戶
su - grid asmcmd orapwusr --modify --password jiekexuorapwusr --delete jiekexulspwusr三、ASMCMD 命令管理磁盤組
ASMCMD 工具命令行中的 lsdg 可以查看磁盤組的詳細信息,如狀態、冗余級別、是否正在進行重新平衡、總大小、剩余空間等。這個命令的信息則是來自動態性能視圖 V$ASM_DISKGROUP 的,如下所示:
當然,我們一般都是使用如下語句查看磁盤組使用率,發現了吧,上面的語句多簡單那!!!
set lin 1000 pagesize 999col NAME for a15SYS@ ydjttest1>select group_number,name,total_mb/1024 total_gb,free_mb/1024 free_gb,TYPE from v$asm_diskgroup;GROUP_NUMBER NAME TOTAL_GB FREE_GB TYPE------------ --------------- ---------- ---------- ------ 1 DATA 9.33007813 5.52929688 NORMAL 2 FRA 7.4609375 4.484375 NORMAL 3 OCR_VOTE 2.82421875 1.91992188 NORMALlsdsk?命令
lsdsk 可查看磁盤組中的磁盤或者系統中可用的磁盤。這個命令也有 -k、-p、-t、--statistics 等幾個參數可以獲得不同的信息,選項 -k 可以看到總大小以及剩余大小,磁盤名以及磁盤對應操作系統路徑等。?選項 -p 可以看到磁盤組序號,磁盤狀態以及磁盤冗余度和路徑等等信息。選項 -t 則是查看磁盤創建時間以及掛載時間和路徑等信息。選項?--statistics 則是查看磁盤組中讀寫 IO 信息,包括在每個磁盤上的讀和寫的次數、所用時間和數據量以及磁盤路徑等信息。而這些信息主要來自于動態性能視圖 V$ASM_DISK 和 V$ASM_DISK_STAT。部分舉例如下圖所示。
lsdsk --candidate -p 還可以獲取 系統中的“候選磁盤”,所謂候選磁盤就是那些可以作為磁盤組中的成員,但是目前還不屬于任何磁盤組的磁盤。如果沒有則會如上圖所示一樣只顯示了表頭。
ASMCMD> lsdsk --candidate -pGroup_Num Disk_Num Mount_Stat Header_Stat Mode_Stat State Path0 1 CLOSED FORMER ONLINE NORMAL /dev/rhdisk40 0 CLOSED FORMER ONLINE NORMAL /dev/rhdisk5lsop 和 lsattr 命令
lsop 用于查看磁盤組中被打開的磁盤??捎么嗣畈榭磾祿旌笈_有哪些進程訪問磁盤組中的磁盤。 lsattr 命令可用于查看磁盤組的屬性信息,這些屬性是在磁盤組創建時自動指定的,而且有些屬性是可以修改的。setattr 命令可用于修改磁盤組的屬性值。
ASMCMD> lsop -G data --process LGWRGroup_Name Dsk_Num State Power ASMCMD>ASMCMD> lsop -G dataGroup_Name Dsk_Num State Power ASMCMD>ASMCMD> lsattr -l -G dataName Value access_control.enabled FALSE access_control.umask 066 au_size 1048576 cell.smart_scan_capable FALSE compatible.asm 11.2.0.0.0 compatible.rdbms 10.1.0.0.0 disk_repair_time 3.6h sector_size 512 ASMCMD> setattr -G data compatible.rdbms 11.2.0.0.0ASMCMD> lsattr -l -G dataName Value access_control.enabled FALSE access_control.umask 066 au_size 1048576 cell.smart_scan_capable FALSE compatible.asm 11.2.0.0.0 compatible.rdbms 11.2.0.0.0 disk_repair_time 3.6h sector_size 512當然,通過 SQL 命令也可以修改這些參數,如下所示修改 compatible.rdbms 參數,Oracle 11g 中,asm 同時支持 10g 和 11g 數據庫。但是 asm 的版本不能低于數據庫的版本。該屬性用來指定 disk group 最小能夠兼容的數據庫實例,在修改這個參數之前,必須先確保所有的數據庫實例的 COMPATIBLE 參數大于等于該參數的值。在 Oracle 11g 數據庫中,Oracle ASM disk group 的 COMPATIBLE.RDBMS 屬性值默認是: 10.1。
SYS@ +ASM2>col value for a30SYS@ +ASM2>col name for a30SYS@ +ASM2>set lin 120SYS@ +ASM2>select name,value from v$asm_attribute where group_number=1 and name like 'compatible%';NAME VALUE------------------------------ ------------------------------compatible.asm 11.2.0.0.0compatible.rdbms 11.2.0.0.0SYS@ +ASM2>ALTER DISKGROUP DATA SET ATTRIBUTE 'compatible.rdbms' = '11.2.0.0.0';Diskgroup altered.SYS@ +ASM2>四、磁盤組的創建與刪除
利用 asmcmd 工具中的 mkdg 命令,可以創建 ASM 磁盤組,而磁盤組的結構是通過一個 XML 文件來指定,在這個文件中需要指定磁盤組的名稱、冗余級別、包含磁盤及相關屬性。ORACLE ASM 提供的三種冗余方式有 external、normal、high 即外部、正常、高。一般情況下三種模式需要的磁盤組:external 1塊,normal,3塊,high,5塊。
1、 外部冗余(external redundancy):表示 Oracle 不幫你管理鏡像,功能由外部存儲系統實現,比如通過 RAID 技術;有效磁盤空間是所有磁盤設備空間的大小之和。
2、 默認冗余(normal redundancy):表示 Oracle 提供 2 份鏡像來保護數據(鏡像數據一次),有效磁盤空間是所有磁盤設備大小之和的 1/2 (使用最多)。
3、 高度冗余(high redundancy):表示 Oracle 提供3份鏡像來保護數據(鏡像數據兩次),以提高性能和數據的安全,最少需要三塊磁盤(三個 failure group);有效磁盤空間是所有磁盤設備大小之和的 1/3,雖然冗余級別高了,但是硬件的代價也最高。
如下的 XML 文件:
<dg name="data" redundancy="external"><dsk string="/dev/hdisk3"/><dsk string="/dev/hdisk4"/><a name="compatible.asm" value="11.2"/><a name="compatible.rdbms" value="11.2"/><a name="compatible.advm" value="11.2"/>dg>mkdg 和 dropdg 命令
在創建磁盤組之前,首先需要在操作系統中創建一個 XML 文件,定義磁盤組的結構,然后在 ASMCMD 工具中將這個 XML 文件作為 mkdg 命令的參數,即可創建磁盤組。
ASMCMD > mkdg /u01/app/data.xml通過 dropdg 命令可以刪除一個磁盤組。如磁盤組總包含文件,磁盤組是不能被直接刪除的,需要添加參數 -r 刪除,當磁盤組出現故障無法掛載時需要強制刪除,則需要添加參數 -f 強制刪除。
ASMCMD >dropdg -r dataASMCMD >dropdg -r -f dataSQL 創建磁盤組
su - gridsqlplus / as sysasmcreate diskgroup data normal redunancy failgroup DA1 disk '/dev/rhdisk2','/dev/rhdisk3' failgroup DA2 disk '/dev/rhdisk4','/dev/rhdisk5';SQL 刪除磁盤組
su - gridsqlplus / as sysasmalter drop diskgroup data dismount;drop diskgroup data;drop diskgroup data including contents;磁盤組的掛載與卸載
Oracle 11g RAC 一般數據文件都是存放于共享盤之上,要訪問數據文件磁盤組必須得 mount ;當 ASM 實例啟動后磁盤組自動被掛載, ASM 實例關閉后自動卸載。當在任意節點上新建的磁盤組時默認已經 mount 了,不過對于其他的節點需要手動掛載此磁盤組才行。
alter diskgroup data mount;alter diakgroup data dismount;--需要掛載卸載所有磁盤時ALTER DISKGROUP ALL MOUNT;ALTER DISKGROUP ALL DISMOUNT;而在命令行下對于磁盤組的掛載需要在每個節點上進行,掛載磁盤組的命令是 mount,卸載則是 umount.
ASMCMD>?mount?-aASMCMD> mount dataASMCMD>?umount?-aASMCMD> umount data在不影響整個磁盤組的情況下,可以通過 offline 命令使其中的一個磁盤脫機,這時這個磁盤中的數據將無法訪問,此命令會立即生效,如想延后生效可通過 -t 參數指定一段時間,以小時(h)或分鐘(m)為單位使其在指定的時間段里脫機。當然相反的則是 online 重新聯機。
ASMCMD> offline -G data -D data_0001 -t 6h ASMCMD>?online?-G?data?-aASMCMD> online -G data -D data_0001磁盤組重新平衡
當磁盤組中的磁盤數量發生變化時,磁盤組就會出現一次重新平衡,平衡的參數由 asm_power_limit 控制,一般默認為 1 ;最大為 11 最小為 0,共有 12 級,當為 0?時表示停止平衡,當為 11 時表示最快平衡速度,當然參數越大消耗資源越多。
在命令行下通過 rebal?對其進行重新平衡,通過 --power?來指定平衡級別,當使用 -w?參數時等待平衡完成才會返回結果,當不使用 -w?時則可以使用 lsop?來查磁盤進行的平衡操作。
ASMCMD> rebal --power 6 data -wASMCMD> lsopGroup_Name Dsk_Num State Power ASMCMD> rebal --power 4 dataASMCMD> lsopGroup_Name Dsk_Num State Power DATA REBAL WAIT 4當然可可以通過 SQL 語句來進行操作,不過就是有點麻煩,如下所示。
SYS@ ydjttest1>show parameter powerNAME TYPE VALUE------------------------------------ ----------- ------------------------------asm_power_limit integer 1設置磁盤組重新平衡參數為 11,查看平衡時間,當?v$asm_operation 視圖無任何輸出則表示平衡完成。
su - grid sqlplus / as sysasm alter diskgroup data rebalance power 11;select * from v$asm_operation;SYS@ +ASM1>alter diskgroup data rebalance power 11;Diskgroup altered.SYS@ +ASM1>select * from v$asm_operation;GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ERROR_CODE------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- -------------------------------------------- 2 REBAL RUN 11 11 4 16 990 0SYS@ +ASM1>select * from v$asm_operation;GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ERROR_CODE------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- -------------------------------------------- 2 REBAL WAIT 11SYS@ +ASM1>/no rows selected五、磁盤組的讀寫信息
磁盤組中的數據是均衡分布在各個磁盤上的,但用戶對于數據的訪問卻不一定是均衡分布在各個磁盤上的。通過 iostat 命令可以查看磁盤組中各個磁盤 IO 情況,便可以掌握數據庫的基礎性能,也可以對數據庫調優提供依據。通過這條命令可以獲取磁盤上的讀和寫的次數、數據量、所用時間、發生錯誤次數等信息。
iostat -G data
iostat -t -G data
iostat -e -G data
iostat --io -G data
ASMCMD> iostat -G dataGroup_Name Dsk_Name Reads Writes DATA DATA1 11420595712 2816842240 DATA DATA2 3462283776 2816842240 ASMCMD> iostat -t -G dataGroup_Name Dsk_Name Reads Writes Read_Time Write_Time DATA DATA1 11421136384 2816944640 9042.907064 5224.873 DATA DATA2 3462382080 2816944640 3240.906 5950.302256 ASMCMD>ASMCMD> iostat -e -G dataGroup_Name Dsk_Name Reads Writes Read_Err Write_Err DATA DATA1 11421775360 2817051136 0 0 DATA DATA2 3462480384 2817051136 0 0 ASMCMD>ASMCMD> iostat --io -G dataGroup_Name Dsk_Name Reads Writes DATA DATA1 682740 229155 DATA DATA2 197993 229155 ASMCMD>以下是幾個使用頻率較高的 SQL:
SQL 添加磁盤組磁盤
root:chown grid:asmadmin /dev/rhdisk10chmod 660 /dev/rhdisk10su - gridsqlplus / as sysasmalter diskgroup DATA add disk '/dev/rhdisk10','/dev/rhdisk11';alter diskgroup DATA rebalance power 10;可指定名字--alter diskgroup DATA add disk '/dev/rhdisk10' NAME disk10,'/dev/rhdisk11' NAME disk11;SQL 強制添加磁盤組
su - gridsqlplus / as sysasmcreate diskgroup ARCH external redundancy disk '/dev/asm2' force;col name for a20set line 200select group_number,name,state,total_mb/1024 total_gb,free_mb/1024 free_gb,type from v$asm_diskgroup;SQL 刪除磁盤組磁盤
su - gridsqlplus / as sysasmalter diskgroup DATA drop disk disk11; ---此處為前面指定的名字或默認生成的名字,并不是磁盤路徑alter diskgroup DATA undrop disk disk11; --取消刪除磁盤的操作alter diskgroup DATA rebalance power 10;SQL 查看磁盤組使用率
su - oraclesqlplus / as sysdbaselect name,state,type,total_mb,free_mb from v$asm_diskgroup;SYS@ ydjttest2>select name,state,type,total_mb,free_mb from v$asm_diskgroup;NAME STATE TYPE TOTAL_MB FREE_MB------------------------------ ----------- ------ ---------- ----------OCR_VOTE MOUNTED NORMAL 2892 1966DATA CONNECTED NORMAL 9554 5594FRA CONNECTED NORMAL 7640 3532SQL 查看磁盤組對應磁盤路徑
su - oraclesqlplus / as sysdbacol path for a30select group_number,path,state,total_mb,free_mb from v$asm_disk;SYS@ ydjttest2>col path for a30SYS@ ydjttest2>select group_number,path,state,total_mb,free_mb from v$asm_disk;GROUP_NUMBER PATH STATE TOTAL_MB FREE_MB------------ ------------------------------ -------- ---------- ---------- 2 ORCL:DATA1 NORMAL 4777 2797 2 ORCL:DATA2 NORMAL 4777 2797 3 ORCL:FRA1 NORMAL 3820 1766 3 ORCL:FRA2 NORMAL 3820 1766 1 ORCL:OCR_VOTE1 NORMAL 964 655 1 ORCL:OCR_VOTE2 NORMAL 964 655 1 ORCL:OCR_VOTE3 NORMAL 964 6567 rows selected.SQL?查看磁盤組訪問情況
su - oraclesqlplus / as sysdbaselect group_number,instance_name,db_name,status from v$asm_client;SYS@ ydjttest1>select group_number,instance_name,db_name,status from v$asm_client;GROUP_NUMBER INSTANCE_NAME DB_NAME STATUS------------ ---------------------------------------------------------------- -------- ------------ 2 +ASM1 ydjt_tes CONNECTED 3 +ASM1 ydjt_tes CONNECTEDSYS@ ydjttest2>select group_number,instance_name,db_name,status from v$asm_client;GROUP_NUMBER INSTANCE_NAME DB_NAME STATUS------------ ---------------------------------------------------------------- -------- ------------ 2 +ASM2 ydjt_tes CONNECTED 3 +ASM2 ydjt_tes CONNECTED六、磁盤組中的目錄管理
ASM 里面有一整套完整的目錄層次,此目錄由 ASM 實例或者數據庫實例自動創建。而磁盤組中的文件則是由實例自動產生,他們實際上只是一些“系統別名”,相當于操作系統中的符號鏈接文件或者快捷方式。下面是一個簡單的列舉方便查看,更多的信息可自行查看這里不做介紹,本次就到這里了,花費巨大時間希望對你有所幫助。
ASMCMD> lsDATA/FRA/OCR_VOTE/ASMCMD> cd OCR_VOTE/ASMCMD> lsJiekeXu-cluster/ASMCMD> cd JiekeXu-cluster/ASMCMD> lsASMPARAMETERFILE/OCRFILE/ASMCMD> cd OCRFILE ASMCMD> lsREGISTRY.255.985299565ASMCMD> cd ../ASMPARAMETERFILEASMCMD> lsREGISTRY.253.985299561ASMCMD> cd ../../../DATAASMCMD> lsYDJT_TEST/ASMCMD> cd YDJT_TEST/ASMCMD> lsCONTROLFILE/DATAFILE/ONLINELOG/PARAMETERFILE/TEMPFILE/spfileydjt_test.oraASMCMD> cd PARAMETERFILE/80%推薦閱讀:
Linux Oracle 11.2.0.4 單機數據庫升級至最新補丁安裝指北
萬字詳解Oracle架構、原理、進程,學會世間再無復雜架構
模擬真實環境下超簡單超詳細的 MySQL 5.7 安裝
Oracle 11GR2 RAC 最新補丁 190416 安裝指導
Oracle 11gR2 RAC 集群服務啟動與關閉總結
CentOS6.7安裝PostgreSQL10.9詳細教程
Oracle RAC11gR2 ADG搭建實施與應用
史上最全的 OGG 基礎知識整理
(長按添加微信公眾號,更多精彩內容不錯過!)
碼字不易,點贊、轉發是一種對作者的鼓勵!??
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的centos7创建asm磁盘_Oracle ASM 磁盘组基础知识整理(收藏版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 下内存检查工具 valgri
- 下一篇: SCOM中的通配符