--========================css
-- 建立ASM實例及ASM數據庫node
--========================sql
1、ASM相關概念數據庫
1.什麼是ASM(Auto Storage Management)vim
簡稱自動存儲管理,是一種用於管理磁盤的工具服務器
可以在多個物理設備之間實現條帶化、鏡像數據文件、恢復文件等oracle
文件按分配單元AUs(allocation units)平衡分佈在磁盤組的全部磁盤中,ASM使用索引技術來跟蹤每一個AUs的位置異步
支持聯機磁盤的動態增長和減小,當磁盤發生變化後,AUs會自動從新實現動態分佈工具
支持RAC集羣技術,每一節點上運行一個ASM實例,各ASM實例間能實現點對點通信網站
是一個純軟件級別的實現方式,第三方RAID工做在卷層次上,使用統一條帶大小,ASM能夠工做在文件層次級別,不一樣文件可使用
不一樣的條帶大小
2.ASM的優勢
磁盤增長:增長磁盤變得很是容易。無需停機時間,而且文件區域自動從新分配。
I/O 分配:I/O 自動分佈在全部可用的磁盤上,無需人工干預,從而減小了熱點出現的可能性。
帶區寬度:在重作日誌文件中分段能夠細分(K,以得到更快的傳輸速率),對於數據文件,帶區則略大一些(MB,以一次性
傳輸大量的數據塊)。
緩衝:ASM 文件系統不進行緩衝,直接進行輸入/輸出。
鏡像:若是硬件鏡像不可用,則能夠容易地創建軟件鏡像。
核心化的異步I/O :實現核心化的異步I/O 無需特殊的設置,而且無需使用原始或第三方的文件系統(如 Veritas Quick I/O)
3.Oracle 經常使用數據文件的RAID級別
SYSTEM、UNDO表空間一般置於RAID 1捲上
聯機重作日誌一般置於RAID 0捲上
控制文件一般置於RAID 0+1 捲上
數據文件一般置於RAID 5捲上
4.ASM體系結構(主要由ASM實例及ASM磁盤組組成)
ASM的使用須要建立一個ASM實例,用於管理ASM磁盤組
ASM磁盤組由ASM磁盤組成,能夠包含一個或多個ASM磁盤
ASM磁盤能夠是實際的磁盤,也能夠是磁盤的某個分區,或LVM管理的邏輯卷,但必須是未格式化的原始設備
ASM磁盤組的大小爲該組內ASM磁盤大小的總和,可以使用的容量則根據容錯級別而有不一樣的可用大小
5.ASM實例及RDBMS實例
ASM實例相似於普通的數據庫實例(RDBMS),一樣由SGA和一堆後臺進程組成,對大多數系統而言,SGA只需64 MB便可
ASM實例中的LargePool 用於存放Extent Map,能夠根據數據庫的大小來計算LargePool的大小,一般100GB大小須要1MB存放Extent Map
普通的RDBMS實例會定位數據文件並打開其數據文件,而在使用ASM存儲的數據庫中,該工做由ASM實例接管,即ASM實例用於定位和
管理ASM磁盤,磁盤組。
ASM實例擁有相似於普通RDBMS實例的後臺進程,如SMON,PMON,LGWR,DBWR,CKPT等,還增添了兩個新進程,一類是RBAL,一類是ARBn
RBAL:用於協調和管理磁盤組之間的動態平衡
ARBn:能夠爲多個,用於完成AU的移動
ASM實例僅僅是定位管理ASM磁盤,不能加載或打開數據庫,所以也沒法讀取數據字典信息
ASM實例一般有個參數,只能使用口令文件或操做系統身份驗證做爲sysdba或sysoper來啓動或關閉該實例。
關於sysdba或sysoper區別請參考:system sys,sysoper sysdba 的區別
一個ASM實例能夠爲多個RDBMS提供服務,能夠在一臺主機上建立多個ASM實例,但一般一臺主機上使用一個ASM實例
若是一個實例服務於多個RDBMS,建議將ASM的ASM_HOME與DB的ORACLE_HOME分開,便於往後的升級與維護
ASM磁盤組的建立與配置在ASM實例啓動以後
使用ASM磁盤的RDBMS實例與普通的RDBMS實例相同,但多出了兩個後臺進程,RBAL,ASMB。
ASMB藉助某個服務器進程如oracle+ASM1創建普通RDBMS實例到ASM實例的會話,並傳遞磁盤文件的相關信息
RBAL打開經過ASM實例定位的ASM磁盤
注意:ASM 實例並不代替RDBMS實例來讀取或寫入數據文件,數據是直接在ASM磁盤和RDBMS實例傳遞,ASM實例僅用於定位數據文件
所在的asm磁盤,盤區以及所需的相關信息。假定新增長數據文件,則RDBMS告知ASM實例要建立數據文件,ASM實例則分配盤區
(extent),並建立盤區映射地址返回給RDBMS實例,RDBMS則將數據直接寫入到磁盤組。
6.ASM實例中存儲的文件類型
控制文件 參數文件 聯機日誌文件 歸檔日誌文件 數據文件 臨時文件
RMAN備份集、映像副本 控制文件備份集 datapump 轉儲文件、Change Tracing file
2、建立ASM實例(下面基於VMware + RHEL 5.4 + Oracle 10g R2演示)
1.安裝ASM包
使用ASM實例,須要到Oracle官方網站下載所需的ASM包。下載路徑:ASMLib下載
注意下載支持該內核的包,分爲兩部分,一是Library and Tools,二是Drivers for kernel
如本人的Linux的內核爲:
[root@oradb ~]# uname -rm
2.6.18-164.el5 i686
則下載對應的包爲:
Library and Tools
oracleasmlib-2.0.4-1.el5.x86_64.rpm
oracleasm-support-2.1.3-1.el5.i386.rpm
Drivers for kernel 2.6.18-164.el5
oracleasm-2.6.18-164.el5xen-2.0.5-1.el5.i686.rpm
oracleasm-2.6.18-164.el5debug-2.0.5-1.el5.i686.rpm
oracleasm-2.6.18-164.el5PAE-2.0.5-1.el5.i686.rpm
oracleasm-2.6.18-164.el5-debuginfo-2.0.5-1.el5.i686.rpm
oracleasm-2.6.18-164.el5-2.0.5-1.el5.i686.rpm
使用下面相似的方式來安裝這些包,關於RPM 的使用請參考:RPM 使用簡介
[root@oradb asm]# rpm -Uvh oracleasm-support-2.1.3-1.el5.i386.rpm
驗證安裝的包
[root@oradb asm]# rpm -qa | grep asm
oracleasm-support-2.1.3-1.el5
oracleasm-2.6.18-164.el5-debuginfo-2.0.5-1.el5
oracleasm-2.6.18-164.el5-2.0.5-1.el5
2.啓用css服務(Cluster Synchronization Services )
用於同步ASM實例與RDBMS實例
使用root賬戶進行配置,配置程序位於$ORACLE_HOME/bin
[root@oradb ~]# /u01/oracle/10g/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
Adding to inittab
Startup will be queued to init within 90 seconds.
Checking the status of new Oracle init process...
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
oradb
CSS is active on all nodes.
Oracle CSS service is installed and running under init(1M)
3.建立ASM參數文件(使用VI或VIM)
[oracle@oradb dbs]$ cat /u01/oracle/10g/dbs/init+ASM.ora
*.asm_diskstring='' #爲空表示能夠搜索任意的ASM磁盤
*.background_dump_dest='/u01/oracle/admin/+ASM/bdump' #後臺進程存放位置
*.core_dump_dest='/u01/oracle/admin/+ASM/cdump' #核心進程存放位置
*.user_dump_dest='/u01/oracle/admin/+ASM/udump' #用戶進程存放位置
*.instance_type='ASM' #實例類型,普通實例默認則爲RDBMS
*.instance_name='+ASM' #實例名字
*.large_pool_size=12M #爲實例分配large_pool的大小
*.remote_login_passwordfile='SHARED' #登錄認證方式
*.asm_power_limit=1 #控制均衡操做的資源,缺省爲
4.建立ASM後臺進程目錄,參照參數文件中的配置來建立
[oracle@oradb ~]$ echo $ORACLE_BASE
/u01/oracle/10g
[oracle@oradb ~]$ mkdir -p $ORACLE_BASE/admin/+ASM/bdump
[oracle@oradb ~]$ mkdir -p $ORACLE_BASE/admin/+ASM/udump
[oracle@oradb ~]$ mkdir -p $ORACLE_BASE/admin/+ASM/cdump
5.建立密碼文件及spfile參數文件
[oracle@oradb ~]$ orapwd file=$ORACLE_HOME/dbs/orapw+ASM password=redhat entries=8
[oracle@oradb ~]$ export ORACLE_SID=+ASM
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup
ASM instance started
ORA-15110: no diskgroups mounted
SQL> create spfile from pfile;
SQL> select * from v$asm_diskgroup;
no rows selected
7.建立ASM磁盤及配置ASMlib驅動
在Vmware分配幾個空閒的磁盤用於建立ASM磁盤,建議使用不一樣的磁盤控制器
下面使用個磁盤來組建ASM磁盤組,分別爲sdd,sde,sdf,sdg
分別對個磁盤進行分區,列出sdd的分區樣例,其他如法炮製
[root@oradb ~]# fdisk /dev/sdd
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261):
Using default value 261
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
建立ASM磁盤(三種方法)
a.配置裸設備映射,修改/etc/udev/rules.d/60-raw.rules文件
使用root賬戶修改/etc/udev/rules.d/60-raw.rules 按以下方式添加磁盤
[root@oradb ~]# cat /etc/udev/rules.d/60-raw.rules --查看添加的內容
ACTION=="add", KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw1 %M %m"
ACTION=="add", KERNEL=="sde1", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="17", RUN+="/bin/raw /dev/raw/raw2 %M %m"
[root@oradb ~]# start_udev #重啓udev服務
Starting udev: [ OK ]
[root@oradb ~]# ll /dev/raw
total 0
crw------- 1 root root 162, 1 Nov 10 18:50 raw1
crw------- 1 root root 162, 2 Nov 10 18:50 raw2
[root@oradb ~]# chown oracle:dba /dev/raw/raw[1-2] --修改屬主,不然建立磁盤組時提示權限不夠
b.也能夠採用下面的方式來增長磁盤,即直接修改/etc/sysconfig/rawdevices (root賬戶)
[root@oradb ~]# vim /etc/sysconfig/rawdevices
[root@oradb ~]# cat /etc/sysconfig/rawdevices --查看增長的內容爲raw3,raw4
/dev/raw/raw3 /dev/sdf1
/dev/raw/raw4 /dev/sdg1
[root@oradb ~]# chown oracle:dba /dev/raw/raw[3-4] --修改屬主,不然建立磁盤組時提示權限不夠
[root@oradb ~]# ll /dev/raw/
total 0
crw------- 1 oracle dba 162, 1 Nov 10 20:12 raw1
crw------- 1 oracle dba 162, 2 Nov 10 20:12 raw2
crw------- 1 oracle dba 162, 3 Nov 10 20:12 raw3
crw------- 1 oracle dba 162, 4 Nov 10 20:12 raw4
重啓裸設備服務
[root@oradb ~]# /sbin/service rawdevices restart
Assigning devices:
/dev/raw/raw3 --> /dev/sdf1
/dev/raw/raw3: bound to major 8, minor 81
/dev/raw/raw4 --> /dev/sdg1
/dev/raw/raw4: bound to major 8, minor 97
done
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
+ASM STARTED
SQL> create diskgroup DG1 normal redundancy disk '/dev/raw/raw1','/dev/raw/raw2'; --建立磁盤組DG1
SQL> select * from v$fixed_table where name like '%ASM%'; --查看和asm相關的視圖
SQL> select name,allocation_unit_size,state,type,
2 free_mb,required_mirror_free_mb req_mi_fr_mb,usable_file_mb
3 from v$asm_diskgroup;
NAME ALLOCATION_UNIT_SIZE STATE TYPE FREE_MB REQ_MI_FR_MB USABLE_FILE_MB
--------------- -------------------- ----------- ------ ---------- ------------ --------------
DG1 1048576 MOUNTED NORMAL 296 0 148
SQL> create diskgroup DG2 normal redundancy disk '/dev/raw/raw3','/dev/raw/raw4'; --建立磁盤組DG2
SQL> select name,state,free_mb,required_mirror_free_mb,usable_file_mb --查看磁盤組的狀態及信息
2 from v$asm_diskgroup;
NAME STATE FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
--------------- ----------- ---------- ----------------------- --------------
DG1 MOUNTED 296 0 148
DG2 MOUNTED 296 0 148
SQL> select disk_number,total_mb,free_mb from v$asm_disk;
DISK_NUMBER TOTAL_MB FREE_MB
----------- ---------- ----------
1 199 148
0 199 148
1 199 148
0 199 148
從新啓動Linux 主機後
SQL> startup --從新啓動ASM實例,收到了磁盤組insufficient信息
ASM instance started
ORA-15032: not all alterations performed
ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DG2"
ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DG1"
SQL> ho ls -hlt /dev/raw # LINUX主機從新啓動以後屬主性質已發生變化
total 0
crw------- 1 root root 162, 4 Nov 10 20:28 raw4
crw------- 1 root root 162, 3 Nov 10 20:28 raw3
crw------- 1 root root 162, 2 Nov 10 20:28 raw2
crw------- 1 root root 162, 1 Nov 10 20:28 raw1
緣由:原始設備在引導時會從新映射。默認狀況下,在引導時原始設備的擁有者將更改成root 用戶
將下面的內容增長到/etc/rc.local文件(root賬戶),從新啓動主機,使得屬主變爲oracle,則再也不出現相似的提示
chown oracle:dba /dev/raw/raw1
chown oracle:dba /dev/raw/raw2
chown oracle:dba /dev/raw/raw3
chown oracle:dba /dev/raw/raw4
chmod 660 /dev/raw/raw1
chmod 660 /dev/raw/raw2
chmod 660 /dev/raw/raw3
chmod 660 /dev/raw/raw4
SQL> drop diskgroup dg1; --將剛纔建立的兩個磁盤組刪除
SQL> drop diskgroup dg2;
使用root賬戶清除/etc/udev/rules.d/60-raw.rules /etc/sysconfig/rawdevices 以及/etc/rc.local剛剛增長的記錄
便於下面使用asmlib來建立asm磁盤
c.使用root賬戶配置ASMLib驅動及建立ASM磁盤,Oracle建議使用ASMLIB驅動來配置ASM磁盤
[root@oradb ~]# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.
This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting <ENTER> without typing an
answer will keep that current value. Ctrl-C will abort.
Default user to own the driver interface []: oracle
Default group to own the driver interface []: dba
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver: [ OK ]
Scanning the system for Oracle ASMLib disks: [ OK ]
--注意下面建立磁盤前本人從新對磁盤分過區
[root@oradb ~]# ls /dev/oracleasm/disks
[root@oradb ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdd1
Marking disk "VOL1" as an ASM disk: [ OK ]
[root@oradb ~]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdd2
Marking disk "VOL2" as an ASM disk: [ OK ]
[root@oradb ~]# /etc/init.d/oracleasm createdisk VOL3 /dev/sde1
Marking disk "VOL3" as an ASM disk: [ OK ]
[root@oradb ~]# /etc/init.d/oracleasm createdisk VOL4 /dev/sde2
Marking disk "VOL4" as an ASM disk: [ OK ]
[root@oradb ~]# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4
[root@oradb ~]# su - oracle
[oracle@oradb ~]$ export ORACLE_SID=+ASM
[oracle@oradb ~]$ sqlplus /nolog
SQL> conn / as sysdba
SQL> startup
ASM instance started
ORA-15110: no diskgroups mounted
SQL> create diskgroup DG1 normal redundancy
2 failgroup FG1 disk '/dev/oracleasm/disks/VOL1' name VOL1
3 failgroup FG2 disk '/dev/oracleasm/disks/VOL2' name VOL2;
create diskgroup DG1 normal redundancy
*
ERROR at line 1:
ORA-15018: diskgroup cannot be created --下面提示磁盤路徑未在discovery set中設置
ORA-15031: disk specification '/dev/oracleasm/disks/VOL2' matches no disks
ORA-15014: location '/dev/oracleasm/disks/VOL2' is not in the discovery set
ORA-15031: disk specification '/dev/oracleasm/disks/VOL1' matches no disks
ORA-15014: location '/dev/oracleasm/disks/VOL1' is not in the discovery set
SQL> show parameter asm_diskstring
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_diskstring string
SQL> alter system set asm_diskstring='/dev/oracleasm/disks/VOL*';
SQL> create diskgroup DG1 normal redundancy --設置asm_diskstring後從新建立磁盤DG1成功
2 failgroup FG1 disk '/dev/oracleasm/disks/VOL1' name VOL1
3 failgroup FG2 disk '/dev/oracleasm/disks/VOL2' name VOL2;
SQL> select name,state,free_mb,required_mirror_free_mb,usable_file_mb
2 from v$asm_diskgroup;
NAME STATE FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
--------------- ----------- ---------- ----------------------- --------------
DG1 MOUNTED 2964 0 1482
8.建立ASM數據庫
使用dbca工具根據提示來建立使用ASM存儲的數據庫
建立使用ASM存儲的數據庫完畢以後,對於ASM數據庫啓動應首先保證ASM實例先被啓動,由於RDBMS是ASM實例服務的一個客戶端
接下來再來啓動RDBMS
--首先啓動asm實例
export ORACLE_SID=+ASM
sqlplus / as sysdba
startup
exit
--接下來啓動rdbms數據庫
export ORACLE_SID=orcl
sqlplus / as sysdba
startup
3、建立ASM實例時的常見故障
1.建立磁盤時出現錯誤能夠查看asm日誌
tail -f /var/log/oracleasm
2.啓動asm實例時出現ORA-29701錯誤
ORA-29701: unable to connect to Cluster Manager
首次須要啓用css服務,使用root賬戶,運行$ORACLE_HOME/bin/localconfig add
若是下次啓動實例的時候仍然碰到以下報錯:
ORA-29701: unable to connect to Cluster Manager
那麼檢查/etc/inittab 文件,看看是否有下面這行
h1:35:respawn:/etc/init.d/init.cssd run >/dev/null 2>&1 </dev/null
若是沒有請添加,若是被註釋了請取消註釋(root賬戶)。
也可使用root賬戶執行/u01/oracle/10g/bin/localconfig reset來解決
3.磁盤搜索路徑問題
SQL> create diskgroup DG1 normal redundancy disk 'ORCL:VOL1','ORCL:VOL2';
create diskgroup DG1 normal redundancy disk 'ORCL:VOL1','ORCL:VOL2'
*
ERROR at line 1:
ORA-15018: diskgroup cannot be created
ORA-15031: disk specification 'ORCL:VOL2' matches no disks
ORA-15031: disk specification 'ORCL:VOL1' matches no disks
使用oraclasm建立磁盤後,缺省會在/dev/oracleasm/disks目錄下添加剛剛建立的磁盤映射
修改asm_diskstring修改路徑以後再次建立便可
alter system set asm_diskstring='/dev/oracleasm/disks/VOL*'原文:https://blog.csdn.net/leshami/article/details/6080659