ASM 實例的創建和刪除也可以用DBCA 這個命令來操作。在dbca 的第一個界面選擇配置自動存儲管理就可以了。 ASM 實例需要CSS 進程, 如果是非RAC 環境, 在啟動ASM 實例之前會提示用腳本
$Oracle_HOME/bin/localconfig add 啟動CSS。
1. ASM 實例由SGA 和後台進程組成。
1.1 SGA 組成:
ASM 實例的SGA包括Buffer Cache, Share Pool, Large Pool等。 需要注意的是Share Pool, 因為Extent Map 要放在這部分的內存中,需要更具數據量來估計Extent Map 的大小做相應的調整。
Extent Map 的大小可以根據所有文件大小的和來估算,使用下面的語句來計算所有文件和:
Select sum(bytes)/(1024*1024*1024) from v$datafile;
Select sum(bytes)/(1024*1024*1024) from v$logfile a, v$log b where a.Group#=b.Group#;
Select sum(bytes)/(1024*1024*1024) from v$tempfile where status='online';
這3個sum 的總和對應著數據庫存放ASM中所有文件大小總和, 對於使用External Redundancy 的磁盤組, 每100G 需要1MB 的Extent Map, 根據這個比例計算Extent Map 所需要的空間,在加上額外的2MB就可以了。 在實際工作中一般不需要考慮ASM SGA的配置, 使用Oracle 提供的缺省值就可以了。
1.2 後台進程
ASM 實例比RDBMS 實例多2個進程: RBAL 和 ABRn。
RBAL: 這個進程也叫Rebalancer進程, 負責規劃ASM 磁盤組的Reblance活動。
ABRn:是RBAL進程的子進程,這個進程在數量上可以有多個, n從1~9, 這組進程負責真正完成Reblance活動。
使用ASM 作為存儲的RDBMS 實例也會多出2個進程: RBAL 和 ASMB
RBAL: 這個進程的主要功能是打開每個磁盤的所有磁盤和數據的Rebalance。
ASMB: 這個進程作為ASM 實例和數據庫實例之間的信息通道。 這個進程負責與ASM 實例的通信, 它先利用Diskgroup Name 從CSS 獲得管理該Diskgroup 的ASM 實例的連接串, 然後建立到ASM 的持久連接, 兩個實例之間通過這條連接定期交換信息,同時也是一種心跳機制。
RDBMS 實例要想使用ASM 作為存儲, RDBMS 實例必須在啟動時從ASM 實例獲得Extent Map, 以後發生磁盤組的維護操作, ASM 實例還要把Extent Map的更新信息通知給RDBMS 實例, 這2個實例間的信息交換就是他你哦剛過ASMB 進程完成的。 這也就為什麼: ASM 實例必須要先於數據庫實例啟動,和數據庫實例同步運行,遲於數據庫實例關閉。
注意: ASM 實例和數據庫實例的關系可以是1:1, 也可以是1:n。如果是1:n, 最好為ASM 安裝單獨的ASM_HOME。
2. ASM 配置
ASM 可以使用裸設備 或者ASMLib 方式, 因為裸設別的維護比較復雜,在此只講解ASMLib 方式。
對應不同的操作系統, 需要不同的包,下載的時候一定要和操作系統內核一致。 我的操作系統是 Red hat 4 update 7. 內核版本是2.6.9-78.ELSMP。
Oracleasmlib-2.0.4-1.el4.i386.rpm
Oracleasm-support-2.1.3-1.el4.i386.rpm
Oracleasm-2.6.9-78.EL-2.0.5-1.el4.i686.rpm
Linux/asmlib/index.Html">http://www.Oracle.com/technology/tech/Linux/asmlib/index.Html
該頁面有下載地址,注意選擇CPU 類型。 asmlib 和 support,在同一個頁面下載。
安裝包:
#rpm -ivh *.rpm
安裝完之後進行配置:
#/etc/init.d/Oracleasm configure
會有相應的提示, 回答 Oracle , dba, y, y 就可以了
分別對應默認用戶, 默認組,隨系統自啟動, 啟動時設置權限。
/etc/init.d/Oracleasm createdisk VOL1 /dev/sdc1
/etc/init.d/Oracleasm scandisks
/etc/init.d/Oracleasm listdisks
關於Oracleasm 的更多用法參考help:
[root@node1 ~]# /etc/init.d/Oracleasm --help
Usage: /etc/init.d/Oracleasm {start|stop|restart|enable|disable|configure
|createdisk|deletedisk|querydisk|listdisks|scandisks|status}
3. ASM 實例配置3.1 初始化參數
[oracle@node1 bin]$ export Oracle_SID=+ASM1
[Oracle@node1 bin]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Feb 21 19:10:51 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
SQL> create pfile from spfile;
File created.
SQL> show parameter asm
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_diskgroups string Flash_RECOVERY_AREA, DATA
asm_diskstring string
asm_power_limit integer 1
[Oracle@node2 dbs]$ pwd
/u01/app/Oracle/product/10.2.0/db_1/dbs
[Oracle@node2 dbs]$ ls
ab_+ASM2.dat hc_rac2.dat initrac2.ora orapwrac2
hc_+ASM2.dat init+ASM2.ora orapw+ASM2
[Oracle@node2 dbs]$ more init+ASM1.ora
+ASM2.asm_diskgroups='Flash_RECOVERY_AREA'#Manual Dismount
+ASM1.asm_diskgroups='Flash_RECOVERY_AREA','DATA'#Manual Mount
*.asm_diskgroups='Flash_RECOVERY_AREA','DATA'
*.background_dump_dest='/u01/app/Oracle/admin/+ASM/bdump'
*.cluster_database=true
*.core_dump_dest='/u01/app/Oracle/admin/+ASM/cdump'
+ASM2.instance_number=2
+ASM1.instance_number=1
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passWordfile='exclusive'
*.user_dump_dest='/u01/app/Oracle/admin/+ASM/udump'
相關說明:
ASM 實例的SGA 需要的內存很小, 一般默認值即可, 無需修改。 ASM SGA的默認值如下:
SHARED_POOL_SIZE = 48M
LARGE_POOL_SIZE = 12M
SHARED_POOL_RESERVED_SIZE = 24M
SGA_MAX_SIZE = 88M
這些默認值可以在sqlplus 中通過show parameter 查看。
Instance_type: 對於ASM 實例, 這個應該設置成ASM, 如果是數據庫實例,則是RDBMS.
DB_UNIQUE_NAME: 這個參數使用缺省值+ASM即可
SQL> show parameter asm_power_limit
NAME TYPE VALUE
----------------------- --------- ---------------
asm_power_limit integer 1
ASM_POWER_LIMIT: 當在磁盤組中添加刪除磁盤時,磁盤組會自動對數據在新舊磁盤間重新分配, 從而實現分散IO, 這個過程就叫再平衡(Rebalance);
這個動作會在磁盤間移動數據,因此雖然是聯機操作,仍然會影響部分性能,所以要在系統空閒的時候進行。 該參數控制Rebalance速度, 取值范圍0-11. 最小值0 代表不做Rebalance, 最大值11 代表最快的速度,也意味著嚴重影響性能, 1 代表最慢的速度和最小的性能影響。 除了在初始化參數中定義該參數, 也可以在操作時指定。
比如:
SQL> alter diskgroup DATA rebalance power 5;
Disk groups can be rebalanced manually using the REBALANCE clause of the ALTER DISKGROUP statement. If the POWER clause is omitted the ASM_POWER_LIMIT parameter value is used. Rebalancing is only needed when the speed of the automatic rebalancing is not appropriate.
ASM_DISKSTRING: 定義哪些磁盤可以被ASM 使用, ASM 實例啟動時就根據這個參數值掃描發現ASM磁盤,配置了這個參數以後,還必須確認Oracle 用戶對這些磁盤有操作的權限
1. 如果使用裸設備, 用逗號分隔每個設備名:
Asm_diskstring='/dev/raw/raw1','/dev/raw/raw2','/dev/raw/raw3'
2. 如果使用ASMLib時,就需要使用"ORCL:磁盤名"
Asm_diskstring='ORCL:VOL1'
3. 使用ASMLib 時, 也可以使用通配符
Asm_diskstring='ORCL:VOL*'
ASM_DISKGROUPS: 這個參數用於定義ASM 實例啟動後自動掛載的磁盤組, 如果不自動掛載, 也可以使用命令掛載。
注意: ASM 實例啟動即可以通過pfile, 也可以通過spfile,如果使用spfile啟動,那麼如果創建新的磁盤組, 這個參數會被自動修改, 下次啟動時會自動掛載這個新建的磁盤組,如果是使用pfile, 這個參數不會自動更新, 需要手工的更新。
3.2 CSS 進程
無論是否在RAC 環境下, ASM 實例都是需要CSS 進程的, 所以,如果是非RAC 環境, 在啟動ASM 實例之前用腳本
$Oracle_HOME/bin/localconfig add 啟動CSS, 否則ASM 實例啟動時會報ORA-29701: unable to connect to Cluster Manager, 並提示執行該腳本
3.3 ASM 實例的相關操作
ASM 管理 登錄,啟動,關閉:
[oracle@node2 dbs]$ export Oracle_SID=+ASM2
[Oracle@node2 dbs]$ sqlplus / as sysdba
SQL> startup
SQL> shutdown immediate;
檢查disk group信息的SQL:
SQL> col state format a10
SQL> col name format a15
SQL> col failgroup format a20
SQL> set line 200
SQL> select STATE,REDUNDANCY,TOTAL_MB,FREE_MB,NAME,FAILGROUP
from v$asm_disk;
SQL>select GROUP_NUMBER,NAME,STATE,TYPE,TOTAL_MB,FREE_MB,
UNBALANCED from v$asm_diskgroup;
創建新的diskgroup
SQL> create diskgroup dgtest normal redundancy
2 failgroup DATA1 disk '/dev/Oracleasm/VOL5' name DATA1
3 failgroup DATA2 disk '/dev/Oracleasm/VOL6' name DATA2;
刪除diskgroup
SQL> drop diskgroup DATA including contents;
-- 對於多結點的diskgroup, 只能有在一個asm實例上掛載之後才能被dorp, 其他結點必須dismount。
手動mount命令
ALTER DISKGROUP ALL DISMOUNT;
ALTER DISKGROUP ALL MOUNT;
ALTER DISKGROUP DATA DISMOUNT;
ALTER DISKGROUP DATA MOUNT;
為diskgroup增加disk
SQL> alter diskgroup DATA add disk '/dev/Oracleasm/VOL5' name
VOL5,'/dev/Oracleasm/VOL6' name VOL6;
從diskgroup刪除disk
SQL> alter diskgroup DATA drop disk VOL5;
取消刪除disk的命令,只能在上述命令沒執行完成的時候有效
ALTER DISKGROUP DATA UNDROP DISKS;
The UNDROP DISKS clause of the ALTER DISKGROUP statement allows pending disk drops to be undone. It will not revert drops that have completed, or disk drops associated with the
dropping of a disk group.
數據文件的管理
Aliases allow you to reference ASM files using user-frIEndly names, rather than the fully
qualifIEd ASM filenames.
-- Create an alias using the fully qualifIEd filename.
ALTER DISKGROUP disk_group_1 ADD ALIAS '+disk_group_1/my_dir/my_file.dbf'
FOR '+disk_group_1/mydb/datafile/my_ts.342.3';
-- Create an alias using the numeric form filename.
ALTER DISKGROUP disk_group_1 ADD ALIAS '+disk_group_1/my_dir/my_file.dbf'
FOR '+disk_group_1.342.3';
-- Rename an alias.
ALTER DISKGROUP disk_group_1 RENAME ALIAS '+disk_group_1/my_dir/my_file.dbf'
TO '+disk_group_1/my_dir/my_file2.dbf';
-- Delete an alias.
ALTER DISKGROUP disk_group_1 DELETE ALIAS '+disk_group_1/my_dir/my_file.dbf';
-- Drop file using an alias.
ALTER DISKGROUP disk_group_1 DROP FILE '+disk_group_1/my_dir/my_file.dbf';
-- Drop file using a numeric form filename.
ALTER DISKGROUP disk_group_1 DROP FILE '+disk_group_1.342.3';
-- Drop file using a fully qualifIEd filename.
ALTER DISKGROUP disk_group_1 DROP FILE '+disk_group_1/mydb/datafile/my_ts.342.3';
-- create datafile
SQL> create tablespace users2 datafile '+TESTDB_DATA1' size 100m;
注意事項:
1. ASM 實例在配置好並且創建了ASM磁盤組之後,還必須保證已經注冊到Listener中後才能在數據庫實例中使用,否則就需要手工注冊ASM 實例:
SQL>alter system register;
2. 一旦數據庫實例使用ASM 作為存儲, 那麼在數據庫實例運行時是無法關閉ASM實例的。 否則會報 ORA-15097:cannot SHUTDOWN ASM instance with connected RDBMS instance. 錯誤。
4. Oracle 中刪除 ASM 實例
刪除自動存儲管理實例+ASM實例+ASM的刪除是在數據庫被卸載之後完成的,並刪除/Oracle_HOME/dbs目錄下的所有文件(除了與ASM相關的)。因此必須完成下列步驟:
4.1在命令提示符中,設置Oracle_sid環境變量為+ASM實例:
# export Oracle_sid=+ASM
4.2啟動SQL*Plus並以sys用戶連接到自動存儲管理+ASM實例:
# sqlplus / as sysdba
4.3使用下列命令來確定是否有數據庫實例正在使用自動存儲管理實例+ASM:
SQL>select instance_name from v$asm_clIEnt;
該命令結果列出所有正在運行並使用+ASM實例的數據庫實例。只要+ASM包含正在支持的數據庫實例,就不能刪除該+ASM實例。(其實可以先shutdown對應的數據庫實例,然後從asmcmd進入磁盤組所在目錄,刪掉對應的數據庫目錄和文件就可以了)。
4.4 如果沒有與+ASM相關聯的數據庫實例,則刪除與該實例相關聯的磁盤組。
首先,識別與+ASM相關聯的磁盤組:
SQL>select name from v$asm_diskgroup;
其次,用下列命令刪除每個要刪除的磁盤組:
SQL>drop diskgroup<disk_group_name>including contents;
4.5 關閉+ASM實例並退出SQL*Plus:
SQL>shutdown
SQL>exit
4.6 在命令提示符中輸入下列命令,刪除+ASM服務(我沒找到這個命令,所以沒有運行):
oradim -delete -asmsid +ASM
5. ASMCMD 工具
ASM 實例的管理除了sqlplus, Oracle 還提供了asmcmd 命令, 具體參考help。
[Oracle@node1 bin]$ which asmcmd
/u01/app/Oracle/product/10.2.0/db_1/bin/asmcmd
[oracle@node1 bin]$ cd /u01/app/Oracle/product/10.2.0/db_1/bin/
[Oracle@node1 bin]$ ./asmcmd
ASMCMD> ls
DATA/
Flash_RECOVERY_AREA/
ASMCMD> help
asmcmd [-p] [command]
The environment variables ORACLE_HOME and Oracle_SID determine the
instance to which the program connects, and ASMCMD establishes a
bequeath connection to it, in the same manner as a SQLPLUS / AS
SYSDBA. The user must be a member of the SYSDBA group.
Specifying the -p option allows the current directory to be displayed
in the command prompt, like so:
ASMCMD [+DATAFILE/ORCL/CONTROLFILE] >
[command] specifIEs one of the following commands, along with its
parameters.
Type "help [command]" to get help on a specific ASMCMD command.
commands:
--------
cd
du
find
help
ls
lsct
lsdg
mkalias
mkdir
pwd
rm
rmalias
ASMCMD>