Oracle ASM 詳解
ASM:Automatic Storage Management, 是Oracle 主推的一種面向Oracle的儲存解決方案, ASM 和 RDBMS 非常相似,ASM 也是由例項和檔案組成, 也可以透過sqlplus 工具來維護。
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
該頁面有下載地址,注意選擇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
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>
----- 2010年9月23日補充--------
裡面有刪除別名的語法, 現在已經不支援了。 之前沒有測試,寫文章不嚴禁。 在google上搜這個問題的時候,發現有人轉載了我的文章,但是這個錯誤還是沒有發現。
剛查閱了一下Oracle 的聯機文件, 刪除別名用的也是drop。
Example 7-5 Dropping an alias name for an Oracle ASM filename
ALTER DISKGROUP data DROP ALIAS '+data/payroll/compensation.dbf';
地址:
這裡面有對ASM 有詳細的說明。 可以參考。
順便補充一點知識:
C:/Users/Administrator.DavidDai>sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期四 9月
Copyright (c) 1982, 2010, Oracle. All rights reserved
SQL> conn sys/oracle@rac2 as sysdba;
已連線。
SQL> select file_name from dba_data_files;
FILE_NAME
------------------------------------------------------
+DATA/orcl/datafile/users.279.730181053
+DATA/orcl/datafile/sysaux.277.730181053
+DATA/orcl/datafile/undotbs1.278.730181053
+DATA/orcl/datafile/system.276.730181051
+DATA/orcl/datafile/undotbs2.284.730181347
ASM檔名字的格式是固定的:+group/dbname/file type/tag.file.incarnation
在建立db時系統自動建立的幾個表空間(system,undotbs,sysaux,users)對應的都是真實的資料檔案,即ASM 檔案預設的命名格式。而且這個資訊都寫到了控制檔案裡。 如果我們使用別名的話,會方便很多。 對於這些建立資料庫時自動建立的表空間,我們要他們使用別名,除了手工建立對應別名外,還需要重建控制檔案,並且在重建時,datafile 裡寫別名的資訊。 這樣資料庫也就使用別名了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23490154/viewspace-1062338/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 資料庫ASM功能詳解Oracle資料庫ASM
- ASM 知識詳解ASM
- oracle ASM引數ASM_POWER_LIMIT以及其它一些引數詳解OracleASMMIT
- Using Automatic Storage Management -ASM 詳解ASM
- oracle asmOracleASM
- 深入瞭解Oracle ASM(一):基礎概念OracleASM
- oracle之 Oracle LOB 詳解Oracle
- oracle dump詳解Oracle
- oracle INVENTORY 詳解Oracle
- oracle recyclebin詳解Oracle
- ORACLE -詳解SCNOracle
- Oracle SCN詳解Oracle
- Oracle checkpoint詳解Oracle
- Oracle Hints詳解Oracle
- oracle 序列 詳解Oracle
- oracle statspack詳解Oracle
- oracle 序列詳解Oracle
- oracle statspack 詳解Oracle
- Oracle bootstrap$ 詳解Oracleboot
- Oracle PGA詳解Oracle
- oracle Dataguard 詳解Oracle
- Oracle Hint 詳解Oracle
- 安裝oracle 11g 使用ASM儲存 詳細OracleASM
- 【ORACLE ASM】ASM 支援工具簡介OracleASM
- oracle asm命令OracleASM
- Oracle ASM 管理OracleASM
- Oracle ASM 限制OracleASM
- oracle asm asmcmdOracleASM
- Oracle ASM故障資料恢復解決方案OracleASM資料恢復
- 【BUILD_ORACLE】Oracle RAC配置ASM Filter Driver(ASMFD)(二)詳細配置步驟UIOracleASMFilter
- ORACLE的HINT詳解Oracle
- oracle rowid詳解Oracle
- Oracle dblink詳解Oracle
- ORACLE DBTime詳解Oracle
- oracle v$lock詳解Oracle
- Oracle練習詳解Oracle
- oracle alter table詳解Oracle
- Oracle dual表 詳解Oracle