Oracle10g New Feature -- 9. ASM (Automatic Storage Management)

zhyuh發表於2004-09-23

Oracle10g裡,使用者能在資料庫級別直接管理磁碟。

目前沒有環境測試,就摘抄kamus的一份step by step文章,留著供下次察看。

[@more@]

Automatic Storage Management (ASM)

1.     Advantages of ASM

·         Disk Addition -- No downtime is required, file extents are redistributed automatically

·         Stripe Width -- Striping can be fine grained as in Redo Log Files and coarse for datafiles

·         Buffering --The ASM filesystem is not buffered, making it direct I/O capable by design.

·         Kernelized Asynch I/O -- There is no special setup necessary to enable kernelized asynchronous I/O

·         Mirroring -- Software mirroring can be set up easily, if hardware mirroring is not available

2.     Creating an ASM-enabled Database, Step by Step

1.     建立ASM instance

1.   建立初始化檔案

$ su – oracle

$ cd $ORACLE_HOME/dbs

$ vi init+ASM.ora

建立asm 例項的初始化指令碼,指令碼內容如下所示:

# ******Below is init script for asm instance******

*.asm_diskstring='ORCL:VOL*'

*.background_dump_dest='/oracle/admin/+ASM/bdump'

*.core_dump_dest='/oracle/admin/+ASM/cdump'

*.instance_type='asm'

*.large_pool_size=12M

*.remote_login_passwordfile='SHARED'

*.user_dump_dest='/oracle/admin/+ASM/udump'

# ******Above is init script for asm instance******

說明:

1dump 目錄指向$ORACLE_BASE/,本文中ASM 例項的SID +ASM。最好

不要修改這個例項名,否則在下一步用dbca 建立資料庫的時候,dbca 將找不到可用的磁

盤組,我想這應該是dbca 的一個bug,手工建立ASM 型別的資料庫就應該沒有這個限制

了。

2asm_diskstring 用於例項啟動的時候檢查可用的ASM 磁碟,由於我們前面建立ASM

磁碟的名稱是VOL1 VOL4,所以我們此處使用*萬用字元,前面的’ORCL:’不可以省略,

否則ASM 例項將無法檢查到磁碟。

2.   建立密碼檔案

$ su – oracle

$ cd $ORACLE_HOME/dbs

$ orapwd file=orapw+ASM password=dba

3.   建立目錄結構

$ su – oracle

$ cd $ORACLE_HOME/dbs

$ mkdir –p $ORALCE_BASE/admin/+ASM/udump

$ mkdir –p $ORALCE_BASE/admin/+ASM/bdump

$ mkdir –p $ORALCE_BASE/admin/+ASM/cdump

4.   啟動例項

$ export ORACLE_SID=+ASM

$ sqlplus / as sysdba

SQL> startup

ASM instance started

Total System Global Area 100663296 bytes

Fixed Size 777616 bytes

Variable Size 99885680 bytes

Database Buffers 0 bytes

Redo Buffers 0 bytes

ORA-15110: no diskgroups mounted

因為我們是首次啟動asm 例項,還沒有建立diskgroup,所以顯示15110 錯誤是正常的。

5.   建立spfile,重新啟動

SQL> create spfile from pfile;

SQL> shutdown immediate;

SQL> startup;

6.   建立diskgroup

SQL> create diskgroup dgroup1 normal redundancy

2 failgroup fgroup1 disk 'ORCL:VOL1','ORCL:VOL2'

3 failgroup fgroup2 disk 'ORCL:VOL3','ORCL:VOL4';

Diskgroup created.

SQL> col name for a10

SQL> select name,state from v$asm_diskgroup;

NAME STATE

---------- ----------------------

DGROUP1 MOUNTED

如果上述命令返回的state DISMOUNTED,那麼我們需要手工將掛載diskgroup

SQL> ALTER DISKGROUP dgroup1 MOUNT;

Diskgroup altered.

此時檢查資料庫初始化引數,發現asm_diskgroups 引數值已經自動設定為DGROUP1

這表明在下次啟動asm 例項的時候,這個diskgroup 會被自動掛載。

SQL> col name for a10

SQL> col type for a10

SQL> col value for a20

SQL> show parameter asm_diskgroups

NAME TYPE VALUE

------------------------------------ ---------- ------------------------------

asm_diskgroups string DGROUP1

如果要解除安裝diskgroup,使用下面的命令:

ALTER DISKGROUP ALL DISMOUNT;

2.     建立ASM 資料庫

3.     啟動ASM 資料庫的步驟

由於啟動ASM 資料庫必須要先啟動ASM 例項,所以基本上啟動步驟如下。

1. 以oracle 使用者進入作業系統

2$ export ORACLE_SID=+ASM

3SQL> sqlplus / as sysdba

4SQL> startup

5SQL> exit

6$ export ORACLE_SID=

7SQL> sqlplus / as sysdba

8SQL> startup

4.     ASM 資料庫的簡單測試

測試ASM 資料庫的automatic rebalance 功能

新增兩個虛擬硬碟,分別是sdf sdg,大小500M

啟動系統,啟動ASM 例項,啟動資料庫例項

建立ASM 磁碟

#/etc/init.d/oracleasm createdisk VOL5 /dev/sdf

#/etc/init.d/oracleasm createdisk VOL6 /dev/sdg

登入ASM 例項檢查v$asm_disk 檢視,發現這兩個新加的硬碟已經找到了

將硬碟新增到磁碟組中

SQL> ALTER DISKGROUP DGROUP1 ADD FAILGROUP FGROUP1 DISK

'ORCL:VOL5' FAILGROUP FGROUP2 DISK 'ORCL:VOL6';

Diskgroup altered.

檢查資料庫的auto rebalance 工作進度,資料庫正在將原來分佈在兩個磁碟上的資料平均

分配到三個磁碟上

SQL> SELECT group_number, operation, state, est_work, sofar, est_rate,

est_minutes FROM v$asm_operation;

GROUP_NUMBER OPERATION STATE EST_WORK SOFAR

EST_RATE EST_MINUTES

------------ ---------- -------- ---------- ---------- ---------- -----------

1 REBAL RUN 416 0 0

0

SQL> /

GROUP_NUMBER OPERATION STATE EST_WORK SOFAR

EST_RATE EST_MINUTES

------------ ---------- -------- ---------- ---------- ---------- -----------

1 REBAL RUN 275 39 148

1

SQL> /

以上表示資料重新分配的工作已經成功完成

SQL> select name,allocation_unit_size,total_mb from v$asm_diskgroup;

NAME ALLOCATION_UNIT_SIZE TOTAL_MB

------------------------------ -------------------- ----------

DGROUP1 1048576 5120

現在磁碟組空間總共是5120M

登入資料庫例項

建立一個自己的表空間,建立一個使用者,建立一個表

SQL> create tablespace ts_test datafile '+DGROUP1' size 200M;

Tablespace created.

SQL> create user kamus identified by pass default tablespace ts_test;

User created.

SQL> grant dba to kamus;

Grant succeeded.

SQL> conn kamus/pass

Connected.

SQL> create table t_test as select * from dba_objects;

Table created.

SQL> select count(*) from t_test;

COUNT(*)

----------

10319

登入ASM 例項,將磁碟從磁碟組中刪除

SQL> alter diskgroup dgroup1 drop disk VOL4;

Diskgroup altered.

SQL> SELECT group_number, operation, state, est_work, sofar, est_rate,

est_minutes FROM v$asm_operation;

GROUP_NUMBER OPERATION STATE EST_WORK SOFAR

EST_RATE EST_MINUTES

------------ ---------- -------- ---------- ---------- ---------- -----------

1 REBAL RUN 566 46 151

3

SQL> select name,allocation_unit_size,total_mb from v$asm_diskgroup;

NAME ALLOCATION_UNIT_SIZE TOTAL_MB

------------------------------ -------------------- ----------

DGROUP1 1048576 4096

Executed in 0.13 seconds

SQL> select label,failgroup from v$asm_disk;

LABEL FAILGROUP

------------------------------- ------------------------------

VOL1 FGROUP1

VOL2 FGROUP1

VOL3 FGROUP2

VOL5 FGROUP1

VOL6 FGROUP2

可以看到磁碟組的總容量已經減少了,磁碟數目也減少了

有些文件上說刪除了磁碟之後要執行:ALTER DISKGROUP REBALANCE

但是發現不需要手動執行,整個REBALANCE 的工作確實是自動的,當刪除磁碟以後,數

據庫自動開始作REBALANCE

為了兩個FAILGROUP 的大小相同,再刪除一個磁碟

SQL> alter diskgroup dgroup1 drop disk VOL2;

Diskgroup altered.

我們可以從下面的SQL 知道在ASM 例項中可以查詢到所有可以用的磁碟,而在資料庫實

例中只可以查詢到讓自己使用的磁碟

ASM 例項:

SQL> SELECT disk_number, label FROM V$asm_disk;

DISK_NUMBER LABEL

----------- --------------------------------------------------------------

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/207/viewspace-778809/,如需轉載,請註明出處,否則將追究法律責任。

相關文章