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 存儲解決方案 監視器 後臺進程