探索ORACLE之ASM維護完整版

ASM是Oracle 10g R2中爲了簡化Oracle數據庫的管理而推出來的一項新功能,這是Oracle自己提供的卷管理器,主要用於替代操作系統所提供的LVM,它不僅支持單實例,同時對RAC的支持也是非常好.

一、     ASM(自動存儲管理)的來由:

ASM是Oracle 10g R2中爲了簡化Oracle數據庫的管理而推出來的一項新功能,這是Oracle自己提供的卷管理器,主要用於替代操作系統所提供的LVM,它不僅支持單實例,同時對RAC的支持也是非常好。ASM可以自動管理磁盤組並提供有效的數據冗餘功能。使用ASM(自動存儲管理)後,數據庫管理員不再需要對ORACLE中成千上萬的數據文件進行管理和分類,從而簡化了DBA的工作量,可以使得工作效率大大提高。

二、     什麼是ASM

ASM它提供了以平臺無關的文件系統、邏輯卷管理以及軟RAID服務。ASM可以支持條帶化和磁盤鏡像,從而實現了在數據庫被加載的情況下添加或移除磁盤以及自動平衡I/O以刪除“熱點”。它還支持直接和異步的I/O並使用Oracle9i中引入的Oracle數據管理器API(簡化的I/O系統調用接口)。

ASM是做爲單獨的Oracle實例實施和部署,並且它只需要有參數文件,不需要其它的任何物理文件,就可以啓動ASM實例,只有它在運行的時候,才能被其它數據訪問。在Linux平臺上,只有運行了OCSSD服務(Oracle安裝程序默認安裝)了才能和訪問ASM。

三、     使用ASM的好處:

1、 將I/O平均分部到所有可用磁盤驅動器上以防止產生熱點,並且最大化性能。

2、 配置更簡單,並且最大化推動數據庫合併的存儲資源利用。

3、 內在的支持大文件

4、 在增量增加或刪除存儲容量後執行自動聯繫重分配

5、 維護數據的冗餘副本以提高可用性。

6、 支持10g,11g的數據存儲及RAC的共享存儲管理

7、 支持第三方的多路徑軟件

8、 使用OMF方式來管理文件

四、     ASM冗餘:

ASM使用獨特的鏡像算法:不鏡像磁盤,而是鏡像盤區。作爲結果,爲了在產生故障時提供連續的保護,只需要磁盤組中的空間容量,而不需要預備一個熱備(hot spare)磁盤。不建議用戶創建不同尺寸的故障組,因爲這將會導致在分配輔助盤區時產生問題。ASM將文件的主盤區分配給磁盤組中的一個磁盤時,它會將該盤區的鏡像副本分配給磁盤組中的另一個磁盤。給定磁盤上的主盤區將在磁盤組中的某個夥伴磁盤上具有各自的鏡像盤區。ASM確保主盤區和其鏡像副本不會駐留在相同的故障組中。磁盤組的冗餘可以有如下的形式:雙向鏡像文件(至少需要兩個故障組)的普通冗餘(默認冗餘)和使用三向鏡像(至少需要3個故障組)提供較高保護程度的高冗餘。一旦創建磁盤組,就不可以改變它的冗餘級別。爲了改變磁盤組的冗餘,必須創建具有適當冗餘的另一個磁盤組,然後必須使用RMAN還原或DBMS_FILE_TRANSFER將數據文件移動到這個新創建的磁盤組。

三種不同的冗餘方式如下:

1、 外部冗餘(external redundancy):表示Oracle不幫你管理鏡像,功能由外部存儲系統實現,比如通過RAID技術;有效磁盤空間是所有磁盤設備空間的大小之和。

2、 默認冗餘(normal redundancy):表示Oracle提供2份鏡像來保護數據,有效磁盤空間是所有磁盤設備大小之和的1/2 (使用最多)

3、 高度冗餘(high redundancy):表示Oracle提供3份鏡像來保護數據,以提高性能和數據的安全,最少需要三塊磁盤(三個failure group);有效磁盤空間是所有磁盤設備大小之和的1/3,雖然冗餘級別高了,但是硬件的代價也最高。

五、     ASM進程

ASM實例除了傳統的DBWR,LGWR,CKPT,SMON,PMON等進程還包含如下四個新後臺進程:

RBAL:負責協調磁盤組的重新平衡活動(負責磁盤組均衡)

ARB0-ARBn:在同一時刻可以存在許多此類進程,它們分別名爲ARB0、ARB1,以此類推,執行實際的重新平衡分配單元移動進程。

GMON:用於ASM磁盤組監控

O0nn 01-10:這組進程建立到ASM實例的連接,某些長時間操作比如創建數據文件,RDBMS會通過這些進程向ASM發送信息

ASMB與ASM 實例的前臺進程連接,週期性的檢查兩個instance的健康狀況。每個數據庫實例同時只能與一個ASM實例連接,因此數據庫只會有一個ASMB後臺進程。如一個節點上有多個數據庫實例,它們只能共享一個ASM實例。

RBAL用來進行全局調用,以打開某個磁盤組內的磁盤。ASMB進程與該節點的CSS守護進程進行通信,並接收來自ASM實例的文件區間映射信息。ASMB還負責爲ASM實例提供I/O統計數據

CSS集羣同步服務。要使用ASM,必須確保已經運行了CSS集羣同步服務,CSS負責ASM實例和數據庫實例之間的同步。

注意:ASM實例必須要先於數據庫實例啓動,和數據庫實例同步運行,遲於數據庫實例關閉。ASM 實例和數據庫實例的關係可以是1:1,也可以是1:n。如果是1:n,最好爲ASM 安裝單獨的ASM_HOME。

六、   ASM支持datafile,logfiles,control files,archivelogs,RMAN backup sets等自動的數據庫文件管理

七、     ASM實例和數據庫實例對應關係


八、     Cluster ASM 架構

 

如需瞭解更詳細信息請參見Oracle數據庫管理員指南(Oracle首次放出)

http://docs.oracle.com/cd/B28359_01/server.111/b31107/toc.htm

好了,現在開始談談有關於ASM安裝的相關內容,ASM的安裝必須建立在操作系統和數據庫軟件已經安裝完成的及實例未創建之前來進行安裝,之後再進行選擇ASM方式建庫。ASM不僅可以應用於單實例的數據庫,同時更適用於RAC集羣方式的數據庫,並且ASM只被Oracle所認,同時也是ORACLE最佳的存儲解決方案,可以有效的替代RAID技術和卷管理技術,比裸設備的管理更加方便;所以現在大部分企業都在迅速的向ASM技術遷移。

在上面我們已經探討過了ASM的三種模式,及其的一些應用,在這裏我們就不對其進行過多的累述。正式進入這篇的主題,如何安裝ASM軟件,安裝ASM需要具備哪些條件。

ASM安裝步驟:

一、基礎環境準備

1、  檢查操作系統和數據庫軟件是否安裝完成:

Installation in progress (Mon Apr 09 19:12:44 CST 2012)

...............................................................  18% Done.

...............................................................  36% Done.

...............................................................  54% Done.

...............................................................  73% Done.

............                                                     76% Done.

Install successful

Linking in progress (Mon Apr 09 19:19:34 CST 2012)

Link successful

Setup in progress (Mon Apr 09 19:23:13 CST 2012)

..............                                                  100% Done.

Setup successful

End of install phases.(Mon Apr 09 19:23:26 CST 2012)

WARNING:A new inventory has been created in this session. However, it has not yet been registered as the central inventory of this system.

To register the new inventory please run the script '/oracle/oraInventory/orainstRoot.sh' with root privileges.

If you do not register the inventory, you may not be able to update or patch the products you installed.

The following configuration scripts

/oracle/orahome/10.2.0/db_1/root.sh

need to be executed as root for configuring the system. If you skip the execution of the configuration tools, the configuration will not be complete and the product wont function properly. In order to get the product to function properly, you will be required to execute the scripts and the configuration tools after exiting the OUI.

The installation of Oracle Database 10g was successful.


從如上信息我們可以看到數據庫已經安裝完成,操作系統肯定也是沒有問題的。

2、  檢查數據庫和操作系統版本:

[oracle@ jb51.net db_1]$ lsb_release -a

LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch

Distributor ID: EnterpriseEnterpriseServer

Description:    Enterprise Linux Enterprise Linux Server release 5.4 (Carthage)

Release:        5.4

Codename:       Carthage

[oracle@ jb51.net db_1]$


[oracle@ jb51.net db_1]$ uname -a

Linux wwl 2.6.18-164.el5 #1 SMP Thu Sep 3 02:16:47 EDT 2009 i686 i686 i386 GNU/Linux


操作系統版本爲5.4 X86,內核版本爲2.6.18-164.el5,後面下載ASM包必須要對應


[oracle@ jb51.net db_1]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Apr 9 19:41:54 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

SQL>

數據庫版本是10.2.0.1.

3、  我們已經知道了這些信息後,我們就可以有針對性的下載ASM了:

ASM下載地址,版本不一樣,用的ASM包也不一樣:

http://www.oracle.com/technetwork/server-storage/linux/downloads/rhel5-084877.html

找到Intel IA32 (x86) Architecture系列中的這個包下載下來:

Drivers for kernel 2.6.18-164.el5

·         oracleasm-2.6.18-164.el5-2.0.5-1.el5.i686.rpm

·         以及如下兩個包下載下來就可以了:

Library and Tools

·         oracleasm-support-2.1.7-1.el5.i386.rpm

·         oracleasmlib-2.0.4-1.el5.i386.rpm

·          

4、  下載完了之後開始安裝asm的rpm包,用root用戶安裝,注意安裝順序,如下:


[root@wwl asmpark]# ls

oracleasm-2.6.18-164.el5-2.0.5-1.el5.i686.rpm

oracleasmlib-2.0.4-1.el5.i386.rpm

oracleasm-support-2.1.7-1.el5.i386.rpm

[root@wwl asmpark]# rpm -ivh oracleasm-support-2.1.7-1.el5.i386.rpm

warning: oracleasm-support-2.1.7-1.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159

Preparing...                ########################################### [100%]

   1:oracleasm-support      ########################################### [100%]

[root@wwl asmpark]# rpm -ivh oracleasm-2.6.18-164.el5-2.0.5-1.el5.i686.rpm

warning: oracleasm-2.6.18-164.el5-2.0.5-1.el5.i686.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159

Preparing...                ########################################### [100%]

   1:oracleasm-2.6.18-164.el########################################### [100%]

[root@wwl asmpark]# rpm -ivh oracleasmlib-2.0.4-1.el5.i386.rpm

warning: oracleasmlib-2.0.4-1.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159

Preparing...                ########################################### [100%]

   1:oracleasmlib           ########################################### [100%]

[root@wwl asmpark]#

5、  好了,現在ASM相關包已經安裝完成,現在來開始創建用於ASM的磁盤分區(不是一定要做,裸盤也可以做ASM)


[root@wwl asmpark]# fdisk -l

Disk /dev/sda: 16.1 GB, 16106127360 bytes

255 heads, 63 sectors/track, 1958 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14        1958    15623212+  8e  Linux LVM

Disk /dev/sdb: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/sdc: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdc doesn't contain a valid partition table

[root@wwl asmpark]#

我們從上圖可以看出系統中有兩塊空閒的磁盤沒有使用,我們首先需要對磁盤創建分區,但不能格式化,命令如下:

fdisk /dev/sdb /n/p/1/回車/回車/w

fdisk /dev/sdc /n/p/1/回車/回車/w

如下就已經創建好了分區:


[root@wwl asmpark]# fdisk -l

Disk /dev/sda: 16.1 GB, 16106127360 bytes

255 heads, 63 sectors/track, 1958 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14        1958    15623212+  8e  Linux LVM

Disk /dev/sdb: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        1305    10482381   83  Linux

Disk /dev/sdc: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sdc1               1        1305    10482381   83  Linux

二、ASM配置

以上已將準備環境準備好,下一步驟就是開始配置了,這裏面配置包括如下幾個步驟

開始創建ASM實例,創建ASM實例的方式有兩種,一種是通過命令行,還有一種是通過圖形界面,執行DBCA後有一步是創建ASM實例,圖形界面實在太簡單了,跟創建DB是一樣的,在這裏就不累贅了。

在使用ASM之前首先要配置ASMLib驅動程序,如下:

我們首先可以看下asm的配置工具 oracleasm的語法和功能,如下:

 [root@wwl asmpark]# /etc/init.d/oracleasm --help

Usage: /etc/init.d/oracleasm {start|stop|restart|enable|disable|configure|createdisk|deletedisk|querydisk|listdisks|scandisks|status}

[root@wwl asmpark]#

1、開始配置ASMLib:

 [root@wwl asmpark]# /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  ]

2、啓用ASMLib驅動程序:

[root@wwl asmpark]# /etc/init.d/oracleasm enable

Writing Oracle ASM library driver configuration: done

Initializing the Oracle ASMLib driver: [  OK  ]

Scanning the system for Oracle ASMLib disks: [  OK  ]

3、通過以root用戶身份運行以下命令來標記由 ASMLib 使用的磁盤:


[root@wwl asmpark]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdb1

Marking disk "VOL1" as an ASM disk: [  OK  ]

[root@wwl asmpark]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdc1

Marking disk "VOL2" as an ASM disk: [  OK  ]

[root@wwl asmpark]#

4、通過如下命令查看ASM所能使用的磁盤及狀態,一切顯示都是正常的。

[root@wwl asmpark]# oracleasm querydisk VOL1

Disk "VOL1" is a valid ASM disk

[root@wwl asmpark]# oracleasm querydisk /dev/sdb1

Device "/dev/sdb1" is marked an ASM disk with the label "VOL1"

[root@wwl asmpark]# oracleasm querydisk VOL2

Disk "VOL2" is a valid ASM disk

[root@wwl ~]# oracleasm querydisk /dev/sdc1

Device "/dev/sdc1" is marked an ASM disk with the label "VOL2"

[root@wwl asmpark]# oracleasm listdisks

VOL1

VOL2

[root@wwl asmpark]# ls -l /dev/oracleasm/disks/*

brw-rw---- 1 oracle dba 8, 17 Apr 10 00:25 /dev/oracleasm/disks/VOL1

brw-rw---- 1 oracle dba 8, 33 Apr 10 00:25 /dev/oracleasm/disks/VOL2

[root@wwl asmpark]# oracleasm status

Checking if ASM is loaded: yes

Checking if /dev/oracleasm is mounted: yes

5、如上ASMLib已經安裝完成,並且也將磁盤標記爲可用,接下來要做的就是創建ASM實例,並構建一個使用ASM磁盤來存儲數據的數據庫,可以使用DBCA,當然也可以使用手工的方式來創,在這裏,我就採用手工方式創建ASM實例,步驟如下:

6、創建初始化參數文件,信息如下:

[oracle@ jb51.net dbs]$ vi $ORACLE_HOME/dbs/init$ORACLE_SID.ora

asm_diskstring='WWL:VOL*'

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

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

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

instance_type='asm'

large_pool_size=12M

remote_login_passwordfile='SHARED'

7、增加實例信息到/etc/oratab

$ vi /etc/oratab

+ASM:/u01/app/oracle/product/10.2.0/db_1:Y

8、創建ASM實例密碼文件:

[oracle@ jb51.net dbs]$ $ORACLE_HOME/bin/orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password='oracle' force=y;

[oracle@ jb51.net dbs]$

9、創建ASM實例相應的目錄:

[oracle@ jb51.net dbs]$  mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/bdump

[oracle@ jb51.net dbs]$ mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/cdump

[oracle@ jb51.net dbs]$ mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/udump

[oracle@ jb51.net dbs]$

10、開啓CSS服務

$ su - root

[root@wwl ~]# /oracle/orahome/10.2.0/db_1/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.

        wwl

CSS is active on all nodes.

Oracle CSS service is installed and running under init(1M)

11、啓動ASM實例,並創建ASM磁盤組:

[oracle@ jb51.net dbs]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Apr 10 01:23:44 2012

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, OLAP and Data Mining options

SQL> startup nomount;

ASM instance started

Total System Global Area   83886080 bytes

Fixed Size                  1217836 bytes

Variable Size              57502420 bytes

ASM Cache                  25165824 bytes

SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS

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

+ASM             STARTED

SQL>

現在實例我已經將其啓動到nomount狀態,下一步開始創建ASM磁盤組。

12、創建ASM組並將其啓動到MOUNT狀態,

SQL> create diskgroup ASMGROUP1 normal redundancy disk '/dev/oracleasm/disks/VOL1','/dev/oracleasm/disks/VOL2';

Diskgroup created.

好了,磁盤組已經創建好了,並且也已經掛載了

SQL> select name,state from v$asm_diskgroup;

NAME                           STATE

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

ASMGROUP1                      MOUNTED

SQL>

可以看到如下,參數文件也隨着更新了:

SQL> show parameter asm_diskgroups;

NAME                                 TYPE        VALUE

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

asm_diskgroups                       string      ASMGROUP1

13、檢查ASM進程是否都正常啓動了,我們之前提到的幾個進程名稱,這裏面都有了,說明現在ASM已經是正常運行狀態。

[oracle@ jb51.net ~]$ ps -ef | grep asm

oracle    3887     1  0 02:58 ?        00:00:00 asm_pmon_+ASM

oracle    3889     1  0 02:58 ?        00:00:00 asm_psp0_+ASM

oracle    3891     1  0 02:58 ?        00:00:00 asm_mman_+ASM

oracle    3893     1  0 02:58 ?        00:00:00 asm_dbw0_+ASM

oracle    3895     1  0 02:58 ?        00:00:00 asm_lgwr_+ASM

oracle    3897     1  0 02:58 ?        00:00:00 asm_ckpt_+ASM

oracle    3899     1  0 02:58 ?        00:00:00 asm_smon_+ASM

oracle    3901     1  0 02:58 ?        00:00:00 asm_rbal_+ASM

oracle    3903     1  0 02:58 ?        00:00:00 asm_gmon_+ASM

linux

一、通過ASM方式建立單實例庫

 

二、檢查通過ASM建庫後,文件存儲的狀態:

SQL>select file_name,tablespace_name from dba_data_files;

FILE_NAME                                         TABLESPACE_NAME

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

+ASMGROUP1/wwl/datafile/users.259.780215953        USERS

+ASMGROUP1/wwl/datafile/sysaux.257.780215951       SYSAUX

+ASMGROUP1/wwl/datafile/undotbs1.258.780215953     UNDOTBS1

+ASMGROUP1/wwl/datafile/system.256.780215951       SYSTEM

SQL>

我們由如上可以看出,現在數據都是存儲在ASM新建的+ASMGROUP1的組裏面,並且文件名後面跟了一大串的數字,這是因爲我們在新建表空間的時候直接採用就是Oracle OMF規範來進行創建的(OMF實際上是9i裏面就已經推出來的功能了),在ASM中創建表空間和添加數據文件我們就沒有必要指定數據文件的存放路徑了,當然他跟db_create_file_dest這個參數是相關聯的。

如下通過OMF方式創建表空間和添加數據文件的方式,可以看到很方便,默認大小就是100M,會自動擴展:

1、我們通過查看db_create_file_dest參數,發現了數據文件默認創建路徑是在+ASMGROUP1

SQL> show parameter db_create_file_dest

NAME                                 TYPE        VALUE

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

db_create_file_dest                  string      +ASMGROUP1

2、使用OMF特性來進行表空間的創建

SQL> create tablespace asm;

Tablespace created.

SQL> alter tablespace asm add datafile;

Tablespace altered.

3、檢查表空間是否已創建好

通過如下,我們可以看到,表空間已經創建成功,並且已經開啓了數據文件自動擴展功能。

SQL> selectFILE_NAME,tablespace_name,bytes/1024/1024,AUTOEXTENSIBLE,MAXBYTES/1024/1024from dba_data_files where TABLESPACE_NAME='ASM';

FILE_NAME                                          TABLESPACE_NAMEBYTES/1024/1024 AUT MAXBYTES/1024/1024

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

+ASMGROUP1/wwl/datafile/asm.270.780300769          ASM                         100 YES         32767.9844

+ASMGROUP1/wwl/datafile/asm.271.780300809          ASM                         100 YES         32767.9844

4、可以動態的修改數據庫創建文件的位置

SQL> alter system set db_create_file_dest='/oracle/oradata/wwl';

System altered.

linux

一、  ASM實例相關操作:

ASM實例的管理,啓動,關閉

ASM實例的啓動和數據庫實例的啓動有嚴格的先後關係,ASM啓動一定早於數據庫實例,關閉一定晚於ASM實例,因爲它是數據庫數據文件存儲位置。如果ASM沒有起來,起數據庫將會報ORA-17503;ORA-15077的錯誤,錯誤信息如下:

SQL>startup

ORA-01078:failure in processing system parameters

ORA-01565:error in identifying file '+ASMGROUP1/WWL/spfileWWL.ora'

ORA-17503:ksfdopn:2 Failed to open file +ASMGROUP1/WWL/spfileWWL.ora

ORA-15077:could not locate ASM instance serving a required diskgroup

SQL>

1.1  ASM啓動的方法:

SQL>startup

ASMinstance started

TotalSystem Global Area   83886080 bytes

FixedSize                  1217836 bytes

VariableSize              57502420 bytes

ASMCache                  25165824 bytes

ASMdiskgroups mounted

SQL>select instance_name,status from v$instance;

INSTANCE_NAME    STATUS

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

+ASM             STARTED

SQL>

1.2  ASM關閉的方法  (必須先關閉數據庫)

沒有關閉RDBMS實例關閉ASM將報錯ORA-15097,提示已連接RDBMS實例,無法關閉ASM實例

$ export Oracle_SID=+ASM

$ sqlplus / as sysdba

SQL> shutdown immediate

ORA-15097: cannot SHUTDOWNASM instance with connected RDBMS instance

關閉RDBMS實例狀態ASM是可以正常關閉的。

$export ORACLE_SID=WWL    ---先關閉在ASM上運行的RDBMS實例

$sqlplus / as sysdba

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL>

$export ORACLE_SID=+ASM   ---再關閉ASM實例

$ sqlplus / as sysdba

SQL> shutdown immediate

ASM diskgroups dismounted

ASM instance shutdown

SQL>

 

二、  ASM三種磁盤組及磁盤的添加和維護

1、ASM磁盤的添加及刪除

1.1   添加這個步驟所需的磁盤(/dev/sdd -- /dev/sdm  共10塊10G的盤)

1.2   通過root用戶查看下當前有幾個ASM磁盤,磁盤狀態,實例狀態

# oracleasm listdisks

VOL1

VOL2

# oracleasm querydisk VOL1

Disk"VOL1" is a valid ASM disk

# oracleasm querydisk VOL2

Disk"VOL2" is a valid ASM disk

# ls -l /dev/oracleasm/disks/*

brw-rw---- 1oracle dba 8, 17 Apr 12 05:30 /dev/oracleasm/disks/VOL1

brw-rw---- 1oracle dba 8, 33 Apr 12 05:30 /dev/oracleasm/disks/VOL2

# oracleasm status

Checking if ASMis loaded: yes

Checking if /dev/oracleasm is mounted: yes

     我們已知數據庫當有兩塊通過ASMLiB已經標記了的磁盤,並且狀態是正常的

1.3   開始通過ASMLib來標記新的磁盤,用於後面的實驗:

l  報錯了,很經典,是由於沒有創建分區導致:

# /etc/init.d/oracleasm createdisk VOL3 /dev/sdd

Marking disk"VOL3" as an ASM disk: [FAILED]

l  先創建分區方法:fdisk /dev/sdd /n/p/1/回車/回車/w,將所有磁盤都創建分區。

# /etc/init.d/oracleasmcreatedisk VOL3 /dev/sdd1

Marking disk "VOL3" as anASM disk: [  OK  ]   ---可以看到,能正常創建

           # sh oracleasm   通過執行腳本命令,新建10個磁盤已全部完成標記

Marking disk "VOL4" as an ASM disk: [  OK  ]

Marking disk "VOL5" as an ASM disk: [  OK  ]

Marking disk "VOL6" as an ASM disk: [  OK  ]

Marking disk "VOL7" as an ASM disk: [  OK  ]

Marking disk "VOL8" as an ASM disk: [  OK  ]

Marking disk "VOL9" as an ASM disk: [  OK  ]

Marking disk "VOL10" as an ASM disk: [  OK  ]

Marking disk "VOL11" as an ASM disk: [  OK  ]

Marking disk "VOL12" as an ASM disk: [  OK  ]

1.4   爲ASMGROUP1磁盤組添加刪除磁盤

l  查看磁盤組的狀態

SQL> selectGROUP_NUMBER,NAME,STATE,TYPE from v$asm_diskgroup;

GROUP_NUMBER   NAME      STATE       TYPE

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

1  ASMGROUP1  CONNECTED  NORMAL

           SQL> SELECT a.name GRPNAME,b.group_number GR_NUMBER,b.disk_numberDK_NUMBER,b.name ASMFILE,b.path,b.mount_status,b.state FROM v$asm_diskgroupa,v$asm_disk b;

GRPNAME    GR_NUMBER  DK_NUMBER ASMFILE                        PATH                      MOUNT_S STATE

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

ASMGROUP1  1    0ASMGROUP1_0000    /dev/oracleasm/disks/VOL1OPENED  NORMAL

ASMGROUP1 1   1ASMGROUP1_0001     /dev/oracleasm/disks/VOL2 OPENED  NORMAL

l  查看磁盤組ASMGROUP1中的成員

SQL> selectgroup_number,disk_number, failgroup,name,path from v$asm_disk where FAILGROUPlike 'ASMGROUP1%';

GROUP_NUMBERDISK_NUMBER FAILGROUP                     NAME                          PATH

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

          2           1 ASMGROUP1_0001                 ASMGROUP1_0001                 /dev/oracleasm/disks/VOL2

           2           0 ASMGROUP1_0000                 ASMGROUP1_0000                 /dev/oracleasm/disks/VOL1

SQL>


l  添加爲ASMGROUP1添加磁盤

SQL> alterdiskgroup ASMGROUP1 add disk '/dev/oracleasm/disks/VOL10';

Diskgroupaltered.


l  我們可以看到已經添加成功了

SQL>  select group_number,disk_number,failgroup,name,path from v$asm_disk where FAILGROUP like 'ASMGROUP1%';

GROUP_NUMBERDISK_NUMBER FAILGROUP                      NAME                           PATH

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

           2           2 ASMGROUP1_0002                 ASMGROUP1_0002                 /dev/oracleasm/disks/VOL10

           2           1 ASMGROUP1_0001                 ASMGROUP1_0001                 /dev/oracleasm/disks/VOL2

           2           0 ASMGROUP1_0000                 ASMGROUP1_0000                 /dev/oracleasm/disks/VOL1


2、ASM三種磁盤組的創建及刪除(High  Normal Extermal

2.1  創建High級別的ASM磁盤組,最少需要三塊磁盤來創建。

SQL> create diskgroup asmhigh high redundancy disk'/dev/oracleasm/disks/VOL3','/dev/oracleasm/disks/VOL4','/dev/oracleasm/disks/VOL5';

Diskgroupcreated.


2.2  創建Normal級別的ASM磁盤,最少需要兩個磁盤來創建。

SQL> creatediskgroup asmnormal normal redundancy disk'/dev/oracleasm/disks/VOL6','/dev/oracleasm/disks/VOL7';

Diskgroupcreated.


2.3  創建Extermal級別的ASM磁盤,最少需要一個磁盤來創建。

SQL> creatediskgroup asmexternal external redundancy disk '/dev/oracleasm/disks/VOL8';

Diskgroupcreated.

                                                                       


2.4  查看剛纔創建的磁盤狀態

SQL> select name,state,type fromv$asm_diskgroup;

NAME            STATE       TYPE

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

ASMGROUP1       MOUNTED    NORMAL

ASMHIGH         MOUNTED     HIGH

ASMNORMAL      MOUNTED    NORMAL

ASMEXTERNAL     MOUNTED    EXTERN


2.5         爲ASM磁盤組添加成員,在這裏我們就以Normal磁盤組來進行成員添加的例子:

SQL> alter diskgroup ASMNORMAL add disk'/dev/oracleasm/disks/VOL9';

Diskgroup altered.

SQL> select group_number,disk_number,failgroup,name,path from v$asm_disk where FAILGROUP like 'ASMNORMAL%';

GROUP_NUMBER DISK_NUMBER FAILGROUP                      NAME                           PATH

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

          4           2 ASMNORMAL_0002                 ASMNORMAL_0002                 /dev/oracleasm/disks/VOL9

          4           1 ASMNORMAL_0001                 ASMNORMAL_0001                 /dev/oracleasm/disks/VOL7

           4           0 ASMNORMAL_0000                 ASMNORMAL_0000                 /dev/oracleasm/disks/VOL6


SQL>

2.6         刪除磁盤組成員,在這裏我們同樣以NORMAL磁盤組來進行成員刪除的例子:

SQL> alter diskgroup ASMNORMAL drop disk ASMNORMAL_0002;

Diskgroup altered.

SQL> select group_number,disk_number, failgroup,name,path fromv$asm_disk where FAILGROUP like 'ASMNORMAL%';

GROUP_NUMBER DISK_NUMBER FAILGROUP                      NAME                           PATH

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

           4           1 ASMNORMAL_0001                 ASMNORMAL_0001                 /dev/oracleasm/disks/VOL7

           4           0 ASMNORMAL_0000                 ASMNORMAL_0000                 /dev/oracleasm/disks/VOL6

SQL>


三、  模擬磁盤故障

3.1      在AMSGROUP1(NORMAL類型)磁盤組中寫數據


SQL> selecttablespace_name,file_name,bytes/1024/1024 M from dba_data_files;

TABLESPACE_NAMEFILE_NAME                                              M

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

USERS          +ASMGROUP1/wwl/datafile/users.259.780215953            5

SYSAUX         +ASMGROUP1/wwl/datafile/sysaux.257.780215951         230

UNDOTBS1        +ASMGROUP1/wwl/datafile/undotbs1.258.78021595         25

                3

SYSTEM         +ASMGROUP1/wwl/datafile/system.256.780215951         480

ASM            +ASMGROUP1/wwl/datafile/asm.270.780300769            100

ASM             +ASMGROUP1/wwl/datafile/asm.271.780300809            100

6 rowsselected.

如上我們可以看到,我們所有的表空間均是放在ASMGROUP1中的,一會兒我們將對錶空間寫如數據,並刪除一磁盤。

3.2     我們查看下該表空間的默認用戶

SQL> selectusername,default_tablespace from dba_users where DEFAULT_TABLESPACE='ASM';

USERNAME                       DEFAULT_TABLESPACE

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

WWL                            ASM


3.3     在ASM表空間寫入數據。

通過WWL用戶登錄到系統創建一張表,用來測試.

SQL> connwwl/wwl

Connected.

SQL> createtable wwl (id varchar(5),name varchar(10));

Table created.

SQL>  begin

  2  fori in 1..1000 loop

  3 insert into wwl values (15,'wwl15');

  4  endloop;

  5  end;

  6  /

PL/SQLprocedure successfully completed.


我們創建了一張wwl的表,並且插入了1000行數據

SQL> selectcount(*) from wwl;

  COUNT(*)

----------

      1000

3.4     模擬磁盤突然損壞

[root@wwl ~]#oracleasm deletedisk VOL2;

Clearing diskheader: done

Dropping disk:done

[root@wwl ~]#

仔細看下面,我們通過如上的命令刪除了VOL2後,現在只認到一個磁盤了。

SQL> selectgroup_number,disk_number, failgroup,name,path from v$asm_disk where FAILGROUPlike 'ASMGROUP%';

GROUP_NUMBERDISK_NUMBER FAILGROUP                     NAME                          PATH

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

           2           0 ASMGROUP1_0000                 ASMGROUP1_0000                 /dev/oracleasm/disks/VOL1

SQL>


但是我們的實例和我們剛纔創建的表數據都沒有丟失,這就是冗餘的好處,NORMAL模式它是用犧牲一塊磁盤的空間來保障數據的安全性的,hight模式是至少犧牲一塊硬盤來保障數據的安全性。

SQL> selectcount(*) from wwl;

  COUNT(*)

----------

      1000

3.5      而且業務是不會中斷的,但是在日誌和硬盤指示燈上會有告警:

ASM日誌信息如下:

WARNING:offlining disk 2.3916240783 (ASMGROUP1_0002) with mask 0x1

NOTE: PSTupdate: grp = 2, dsk = 2, mode = 0x6

NOTE: cacheclosing disk 2 of grp 2: ASMGROUP1_0002

NOTE: PSTupdate: grp = 2

NOTE: erasingheader on grp 2 disk ASMGROUP1_0002

3.6     這個時候我們需要儘快更換新的硬盤,因爲發生這問題之後如果另外一個磁盤再損壞的話那將是不可彌補的數據丟失,更換新硬盤後,數據將會再次進行同步。

3.7      

四、  ASM別名管理

別名就是外號,比如說當系統自動產生的名稱太過複雜不怎麼好記,DBA可以通過別名,爲它創建一個簡單化的名稱,而又不會對其現有名稱造成任何影響。ASM中創建別名是通過alter diskgroup的alias子句實現,支持增加/修改/刪除等多項操作。V$ASM_ALIAS視圖中可以查詢到當前實例中創建的別名。

4.1    添加別名

SQL> alter diskgroup ASMGROUP1 add alias'+ASMGROUP1/wwl/datafile/asm01.dbf' for'+ASMGROUP1/wwl/datafile/asm.270.780300769';

Diskgroup altered.

4.2    修改別名

SQL> alter diskgroup ASMGROUP1 renamealias '+ASMGROUP1/wwl/datafile/asm01.dbf' for'+ASMGROUP1/wwl/datafile/asm.270.780300769';

Diskgroup altered.

4.3    刪除別名

SQL> alter diskgroup ASMGROUP1 dropalias '+ASMGROUP1/wwl/datafile/asm01.dbf' for'+ASMGROUP1/wwl/datafile/asm.270.780300769';

Diskgroup altered.

   無論是添加、刪除或是修改別名,對原文件路徑均不會有影響。


五、  目錄及目錄文件管理

5.1   創建目錄

SQL> alter diskgroup ASMGROUP1 add directory '+ASMGROUP1/WWL1';

Diskgroupaltered.

5.2   修改目錄

SQL> alterdiskgroup ASMGROUP1 rename directory '+ASMGROUP1/WWL1' to '+ASMGROUP1/WWL2';

Diskgroupaltered.

5.3   刪除目錄

SQL> alter diskgroup ASMGROUP1 drop directory '+ASMGROUP1/WWL2';

Diskgroupaltered.

六、  手動平衡磁盤組

一般情況下ASM都會自動對其下的磁盤組進行平衡,不過ORACLE也提供了手動平衡磁盤組的方式,通過alter diskgroup ... power 語句。前面提到過磁盤組的平衡度有0到11多個級別,默認是按照ASM_POWER_LIMIT初始化參數中設置的值,手動平衡的話,設置的平衡度可以與初始化參數中並不相同,例如,設置磁盤組平衡度爲5,語句如下:

     SQL>alter diskgroup asmgroup1 rebalance power 5;

Diskgroup altered.

七、  通過ASMCMD工具管理ASM

[oracle@wwl ~]$ which asmcmd

/oracle/orahome/10.2.0/db_1/bin/asmcmd

[oracle@wwl ~]$ cd/oracle/orahome/10.2.0/db_1/bin/

ASMCMD> ls 

ASMEXTERNAL/

ASMGROUP1/

ASMHIGH/

ASMNORMAL/

ASMCMD>

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 memberof 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 ASMCMDcommand.

       commands:

       --------

cd:------------------------------------------進入下級目錄或進入所需要的目錄

du:------------------------------------------顯示指定的ASM目錄下ASM文件佔用的所有磁盤空間

find:-----------------------------------------查找所需的文件

help:-----------------------------------------顯示幫助信息

ls:---------------------------------------------列出ASM目錄下的內容及其屬性

lsct:-------------------------------------------列出當前ASM客戶端的信息

lsdg:-------------------------------------------列出所有磁盤組及其屬性

mkalias:--------------------------------------爲系統生成的文件名創建別名

mkdir:----------------------------------------創建新目錄

pwd:------------------------------------------顯示當前目錄路徑

rm:--------------------------------------------刪除ASM目錄下的某個文件或文件夾

rmalias:--------------------------------------刪除別名

ASMCMD>

要查看某個命令的相信通過在命令前添加help來查看,如下:

ASMCMD> help cd

       cd <dir>

       Change the current directory to <dir>.

ASMCMD> help du

       du [-H] [dir]

       Display total space used for files located recursively under [dir],

       similar to "du -s" under UNIX; default is the currentdirectory.  Two

       values are returned, both in units of megabytes.  The first value does

       not take into account mirroring of the diskgroup while the second does.

       For instance, if a file occupies 100 MB of space, then it actually

       takes up 200 MB of space on a normal redundancy diskgroup and 300 MB

       of space on a high redundancy diskgroup. 

       [dir] can also contain wildcards.

       The -H flag suppresses the column headers from the output.

ASMCMD> help find

       find [-t <type>] <dir> <pattern>

       Find the absolute paths of all occurrences of <pattern> under<dir>.

       <pattern> can be a directory and may include wildcards.  <dir> may also

       include wildcards.  Note thatdirectory names in the results have the

       "/" suffix to clarify their identity.

       The -t option allows searching by file type.  For instance, one can

       search for all the control files at once.  <type> must be one of the

       valid values in V$ASM_FILE.TYPE.

ASMCMD>

 

八、  oracleasm工具的使用和語法介紹

[root@wwl ~]# oracleasm --help

Usage: oracleasm[--exec-path=<exec_path>] <command> [ <args> ]

      oracleasm --exec-path

      oracleasm -h

      oracleasm -V

The basic oracleasm commands are:

   configure        Configure the OracleLinux ASMLib driver

   init             Load andinitialize the ASMLib driver

   exit             Stop the ASMLibdriver

   scandisks        Scan the systemfor Oracle ASMLib disks

   status           Display thestatus of the Oracle ASMLib driver

   listdisks        List known OracleASMLib disks

   querydisk        Determine if adisk belongs to Oracle ASMlib

   createdisk       Allocate a devicefor Oracle ASMLib use

   deletedisk       Return a deviceto the operating system

   renamedisk       Change the labelof an Oracle ASMlib disk

   update-driver    Download thelatest ASMLib driver

[root@wwl ~]#

九、   ASM常見的錯誤處理

錯誤一、

ORA-15097:cannotSHUTDOWN ASM instance with connected RDBMS instance

解決辦法:

發生這個問題,唯一的一個原因就是Oracle實例沒有關閉,或ORACLE實例正在關閉或處於掛起狀態,導致ASM實例無法關閉,解決辦法,關閉RDBMS實例後再關閉ASM實例。

錯誤二、

[root@wwl ~]# /etc/init.d/oracleasm createdisk VOL3 /dev/sdd

Marking disk "VOL3" as an ASM disk: [FAILED]

   報這個錯的原因在於磁盤爲分區導致。在創建ASM的之前必須線將磁盤分區,但不能格式化,後執行創建就不會有問題了。

十、       ASM 擴展性

最多支持63個磁盤組;     最多支持10000個磁盤;     最大支持4pb/磁盤;     最大支持40     exabyte/ASM存儲; 最大支持1百W個文件/磁盤組; 外部冗餘時單個文件最大35tb,標準冗餘時單個文件最大5.8tb,高冗餘度時單個文件最大3.9tb

十一、       ASM其它信息請參考如下連接:

http://docs.oracle.com/cd/E11882_01/server.112/e16102/asmfiles.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章