-- 創建ASM實例及ASM資料庫 一、ASM相關概念 1.什麼是ASM(Auto Storage Management) 簡稱自動存儲管理,是一種用於管理磁碟的工具 能夠在多個物理設備之間實現條帶化、鏡像數據文件、恢覆文件等 文件按分配單元AUs(allocation units)平衡分佈在磁碟組 ...
--========================
-- 創建ASM實例及ASM資料庫
--========================
一、ASM相關概念
1.什麼是ASM(Auto Storage Management)
簡稱自動存儲管理,是一種用於管理磁碟的工具
能夠在多個物理設備之間實現條帶化、鏡像數據文件、恢覆文件等
文件按分配單元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
二、創建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
三、創建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