【原創】Oracle ASM發展與實踐
1.說說你個人理解的儲存解決方案的發展趨勢。
Oracle 7&8 :這個時期的資料庫備份方案已經可以使用RMAN 命令,它起源於Oracle 版本8,7的時候還不具備這個功能。可以把資料儲存在作業系統的檔案系統上和裸裝置上。一提到裸裝置可能剛進入DBA行當的朋友們不是很熟悉,下面隨便簡單介紹一下吧。
裸裝置:我們把這三個字分開說吧,裝置就是指的物理磁碟,像老一點的IDE磁碟,現在常用的SCSI磁碟SAS磁碟等。裸指的是這個磁碟上沒有檔案系統,一般磁碟在插入到主機板上後必須為其建立檔案系統(windows ext2&3&4)並格式化才能使用,但oracle可以不透過檔案系統直接訪問一塊裸裝置(要先建立為物理卷)這種直接訪問裝置的方式給我們提供了一定的便捷(不需要作業系統層處理可直接與裝置進行資料交換,提高了交換速度),但同時帶來的弊端也是顯而易見的,例如不好管理,必須每個檔案單獨建立一個裸裝置,非常麻煩,複製和備份也不方便。其實裸裝置還是沒有真正的繞過作業系統,因為它需要透過由作業系統驅動的裝置介面而訪問裝置。Linux中有一種dd命令可以分配和管理裸裝置,還是沒有檔案系統方便。
Oracle 9i&10g:Oracle9i開始開發出一套自己的檔案系統叫ASM,中文叫“自動儲存管理系統”,可以透過ASMCMD工具來管理,它可以不受作業系統層引數的影響直接處理磁碟上的資料,效率要比作業系統層處理一遍的高。層次越多開銷越大 層次越少開銷越小,流行於Oracle 10g
ASM是由AU(allocationunit)和條帶來決定資料分佈單元的,如何儲存分配。
AU:磁碟分配單元,資料儲存的一個基本單位,預設1M,建議大一點
例如AU=2M 單次I/O=1M,需要2次連續I/O才能讀出一個AU
AU=1M 單次I/O=2M,1次分散IO讀出兩個AU,但是連續的比分散的I/O效率高
條頻寬度:預設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
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 儲存解決方案 監視器 後臺程式
2013.4.21
天津&spring
分享技術~成就夢想
Blog:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29306197/viewspace-1065412/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE ASM發展路線圖OracleASM
- 【原創】ORACLE 分割槽與索引Oracle索引
- Oracle 11gR2 ASM磁碟組管理與新特性實踐[1]OracleASM
- 原創:oracle DML介紹與使用Oracle
- 【原創】Oracle RAC故障分析與處理Oracle
- Oracle資料庫開發指南(原創)Oracle資料庫
- 17條建模實踐與原則
- 【原創】保險公司銀保渠道銷售模式發展模式
- 大力發展原創內容 蘋果要參與爭奪007電影版權蘋果
- 【原創】Oracle 事務探索與例項(二)Oracle
- 【原創】 Oracle 事務探索與例項(一)Oracle
- 【原創】Oracle 並行原理與示例總結Oracle並行
- 敏捷軟體開發:原則、模式與實踐讀書摘要敏捷模式
- 阿里雲李克:邊緣雲技術發展與實踐阿里
- 【原創】使用普通檔案建立ASM例項ASM
- 《JavaScript設計模式與開發實踐》原則篇(2)—— 最少知識原則JavaScript設計模式
- 【原創】關於JAVA複習的最佳敏捷實踐Java敏捷
- 【原創】Kuberneters-ConfigMap的實踐
- [原創]淺談大型網際網路架構發展架構
- 【原創】Oracle execute plan 原理分析與例項分享Oracle
- 《JavaScript設計模式與開發實踐》原則篇(1)—— 單一職責原則JavaScript設計模式
- 《JavaScript設計模式與開發實踐》原則篇(3)—— 開放-封閉原則JavaScript設計模式
- 檔案系統的發展趨勢與JuiceFS的雲上實踐UI
- 【原創】彼得德魯克《管理的實踐》札記(三)
- 【原創】彼得德魯克《管理的實踐》札記(四)
- 【原創】彼得德魯克《管理的實踐》札記(七)
- 【原創】彼得德魯克《管理的實踐》札記(十一)
- 【原創】彼得德魯克《管理的實踐》札記(十)
- 【原創】彼得德魯克《管理的實踐》札記(五)
- 【原創】彼得德魯克《管理的實踐》札記(一)
- 【原創】彼得德魯克《管理的實踐》札記(九)
- 推進創客工程教育運用的實踐原則
- Oracle ASM 的redundancy與failgroupOracleASMAI
- 《敏捷軟體開發 原則、模式與實踐》的讀書筆記敏捷模式筆記
- 眾創空間差異化發展,與企業實現良性互動
- 【原創】資料庫從檔案系統轉移至ASM實驗記錄資料庫ASM
- 敏捷軟體開發:原則,模式,實踐敏捷模式
- OCR技術發展綜述與達觀資料的實踐經驗