熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

探索ORACLE之ASM概念(完整版)

2022-06-13   來源: Oracle 

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

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

  二     什麼是ASM

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

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

  三     使用ASM的好處

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

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

   內在的支持大文件

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

   維護數據的冗余副本以提高可用性

   支持gg的數據存儲及RAC的共享存儲管理

   支持第三方的多路徑軟件

   使用OMF方式來管理文件

  四     ASM冗余

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

  三種不同的冗余方式如下

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

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

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

  五     ASM進程

  ASM實例除了傳統的DBWRLGWRCKPTSMONPMON等進程還包含如下四個新後台進程

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

  ARBARBn在同一時刻可以存在許多此類進程它們分別名為ARBARB以此類推執行實際的重新平衡分配單元移動進程

  GMON用於ASM磁盤組監控

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

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

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

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

  注意ASM實例必須要先於數據庫實例啟動和數據庫實例同步運行遲於數據庫實例關閉ASM 實例和數據庫實例的關系可以是也可以是n如果是n最好為ASM 安裝單獨的ASM_HOME

     ASM支持datafilelogfilescontrol filesarchivelogsRMAN backup sets等自動的數據庫文件管理

       ASM實例和數據庫實例對應關系

  

  八     Cluster ASM 架構

  

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

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

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

  ASM安裝步驟

  基礎環境准備

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

  Installation in progress (Mon Apr :: CST )

    % Done

    % Done

    % Done

    % Done

                                                       % Done

  Install successful

  Linking in progress (Mon Apr :: CST )

  Link successful

  Setup in progress (Mon Apr :: CST )

                                                    % Done

  Setup successful

  End of install phases(Mon Apr :: CST )

  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/orainstRootsh 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//db_/rootsh

  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 g was successful

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

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

  [oracle@ db_]$ lsb_release a

  LSB Version:    :coreia:corenoarch:graphicsia:graphicsnoarch

  Distributor ID: EnterpriseEnterpriseServer

  Description:    Enterprise Linux Enterprise Linux Server release (Carthage)

  Release:       

  Codename:       Carthage

  [oracle@ db_]$

  [oracle@ db_]$ uname a

  Linux wwl el # SMP Thu Sep :: EDT i i i GNU/Linux

  操作系統版本為 X內核版本為el後面下載ASM包必須要對應

  [oracle@ db_]$ sqlplus / as sysdba

  SQL*Plus: Release Production on Mon Apr ::

  Copyright (c) Oracle  All rights reserved

  Connected to an idle instance

  SQL>

  數據庫版本是

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

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

  l

  找到Intel IA (x) Architecture系列中的這個包下載下來

Drivers for kernel el

  ·         oracleasmelelirpm

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

Library and Tools

  ·         oracleasmsupportelirpm

  ·         oracleasmlibelirpm

  ·          

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

  [root@wwl asmpark]# ls

  oracleasmelelirpm

  oracleasmlibelirpm

  oracleasmsupportelirpm

  [root@wwl asmpark]# rpm ivh oracleasmsupportelirpm

  warning: oracleasmsupportelirpm: Header V DSA signature: NOKEY key ID ee

  Preparing                ########################################### [%]

  :oracleasmsupport      ########################################### [%]

  [root@wwl asmpark]# rpm ivh oracleasmelelirpm

  warning: oracleasmelelirpm: Header V DSA signature: NOKEY key ID ee

  Preparing                ########################################### [%]

  :oracleasmel########################################### [%]

  [root@wwl asmpark]# rpm ivh oracleasmlibelirpm

  warning: oracleasmlibelirpm: Header V DSA signature: NOKEY key ID ee

  Preparing                ########################################### [%]

  :oracleasmlib           ########################################### [%]

  [root@wwl asmpark]#

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

  [root@wwl asmpark]# fdisk l

  Disk /dev/sda: GB bytes

   heads sectors/track cylinders

  Units = cylinders of * = bytes

  Device Boot      Start         End      Blocks   Id  System

  /dev/sda   *                                Linux

  /dev/sda                          e  Linux LVM

  Disk /dev/sdb: GB bytes

   heads sectors/track cylinders

  Units = cylinders of * = bytes

  Disk /dev/sdb doesnt contain a valid partition table

  Disk /dev/sdc: GB bytes

   heads sectors/track cylinders

  Units = cylinders of * = bytes

  Disk /dev/sdc doesnt contain a valid partition table

  [root@wwl asmpark]#

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

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

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

  如下就已經創建好了分區

  [root@wwl asmpark]# fdisk l

  Disk /dev/sda: GB bytes

   heads sectors/track cylinders

  Units = cylinders of * = bytes

  Device Boot      Start         End      Blocks   Id  System

  /dev/sda   *                                Linux

  /dev/sda                          e  Linux LVM

  Disk /dev/sdb: GB bytes

   heads sectors/track cylinders

  Units = cylinders of * = bytes

  Device Boot      Start         End      Blocks   Id  System

  /dev/sdb                                Linux

  Disk /dev/sdc: GB bytes

   heads sectors/track cylinders

  Units = cylinders of * = bytes

  Device Boot      Start         End      Blocks   Id  System

  /dev/sdc                                Linux

  ASM配置

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

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

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

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

  [root@wwl asmpark]# /etc/initd/oracleasm help

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

  [root@wwl asmpark]#

  開始配置ASMLib

  [root@wwl asmpark]# /etc/initd/oracleasm configure

  Configuring the Oracle ASM library driver

  This will configure the onboot 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  CtrlC 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  ]

  啟用ASMLib驅動程序

  [root@wwl asmpark]# /etc/initd/oracleasm enable

  Writing Oracle ASM library driver configuration: done

  Initializing the Oracle ASMLib driver: [  OK  ]

  Scanning the system for Oracle ASMLib disks: [  OK  ]

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

  [root@wwl asmpark]# /etc/initd/oracleasm createdisk VOL /dev/sdb

  Marking disk VOL as an ASM disk: [  OK  ]

  [root@wwl asmpark]# /etc/initd/oracleasm createdisk VOL /dev/sdc

  Marking disk VOL as an ASM disk: [  OK  ]

  [root@wwl asmpark]#

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

  [root@wwl asmpark]# oracleasm querydisk VOL

  Disk VOL is a valid ASM disk

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

  Device /dev/sdb is marked an ASM disk with the label VOL

  [root@wwl asmpark]# oracleasm querydisk VOL

  Disk VOL is a valid ASM disk

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

  Device /dev/sdc is marked an ASM disk with the label VOL

  [root@wwl asmpark]# oracleasm listdisks

  VOL

  VOL

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

  brwrw oracle dba Apr : /dev/oracleasm/disks/VOL

  brwrw oracle dba Apr : /dev/oracleasm/disks/VOL

  [root@wwl asmpark]# oracleasm status

  Checking if ASM is loaded: yes

  Checking if /dev/oracleasm is mounted: yes

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

  創建初始化參數文件信息如下

  [oracle@ dbs]$ vi $ORACLE_HOME/dbs/init$ORACLE_SIDora

  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=M

  remote_login_passwordfile=SHARED

  增加實例信息到/etc/oratab

  $ vi /etc/oratab

  +ASM:/u/app/oracle/product//db_:Y

  創建ASM實例密碼文件

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

  [oracle@ dbs]$

  創建ASM實例相應的目錄:

  [oracle@ dbs]$  mkdir p $ORACLE_BASE/admin/$ORACLE_SID/bdump

  [oracle@ dbs]$ mkdir p $ORACLE_BASE/admin/$ORACLE_SID/cdump

  [oracle@ dbs]$ mkdir p $ORACLE_BASE/admin/$ORACLE_SID/udump

  [oracle@ dbs]$

  開啟CSS服務

  $ su root

  [root@wwl ~]# /oracle/orahome//db_/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 seconds

  Checking the status of new Oracle init process

  Expecting the CRS daemons to be up within seconds

  CSS is active on these nodes

  wwl

  CSS is active on all nodes

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

  啟動ASM實例並創建ASM磁盤組

  [oracle@ dbs]$ sqlplus / as sysdba

  SQL*Plus: Release Production on Tue Apr ::

  Copyright (c) Oracle  All rights reserved

  Connected to:

  Oracle Database g Enterprise Edition Release Production

  With the Partitioning OLAP and Data Mining options

  SQL> startup nomount;

  ASM instance started

  Total System Global Area   bytes

  Fixed Size                  bytes

  Variable Size              bytes

  ASM Cache                  bytes

  SQL> select instance_namestatus from v$instance;

  INSTANCE_NAME    STATUS

  

  +ASM             STARTED

  SQL>

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

  創建ASM組並將其啟動到MOUNT狀態

  SQL> create diskgroup ASMGROUP normal redundancy disk /dev/oracleasm/disks/VOL/dev/oracleasm/disks/VOL;

  Diskgroup created

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

  SQL> select namestate from v$asm_diskgroup;

  NAME                           STATE

  

  ASMGROUP                      MOUNTED

  SQL>

  可以看到如下參數文件也隨著更新了

  SQL> show parameter asm_diskgroups;

  NAME                                 TYPE        VALUE

  

  asm_diskgroups                       string      ASMGROUP

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

  [oracle@ ~]$ ps ef | grep asm

  oracle           : ?        :: asm_pmon_+ASM

  oracle           : ?        :: asm_psp_+ASM

  oracle           : ?        :: asm_mman_+ASM

  oracle           : ?        :: asm_dbw_+ASM

  oracle           : ?        :: asm_lgwr_+ASM

  oracle           : ?        :: asm_ckpt_+ASM

  oracle           : ?        :: asm_smon_+ASM

  oracle           : ?        :: asm_rbal_+ASM

  oracle           : ?        :: asm_gmon_+ASM

linux

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

  

  

  

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

  SQL>select file_nametablespace_name from dba_data_files;

  FILE_NAME                                         TABLESPACE_NAME

  

  +ASMGROUP/wwl/datafile/users        USERS

  +ASMGROUP/wwl/datafile/sysaux       SYSAUX

  +ASMGROUP/wwl/datafile/undotbs     UNDOTBS

  +ASMGROUP/wwl/datafile/system       SYSTEM

  SQL>

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

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

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

  SQL> show parameter db_create_file_dest

  NAME                                 TYPE        VALUE

  

  db_create_file_dest                  string      +ASMGROUP

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

  SQL> create tablespace asm;

  Tablespace created

  SQL> alter tablespace asm add datafile;

  Tablespace altered

  檢查表空間是否已創建好

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

  SQL> selectFILE_NAMEtablespace_namebytes//AUTOEXTENSIBLEMAXBYTES//from dba_data_files where TABLESPACE_NAME=ASM;

  FILE_NAME                                          TABLESPACE_NAMEBYTES// AUT MAXBYTES//

  

  +ASMGROUP/wwl/datafile/asm          ASM                          YES        

  +ASMGROUP/wwl/datafile/asm          ASM                         YES        

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

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

  System altered

linux

    ASM實例相關操作

  ASM實例的管理啟動關閉

  ASM實例的啟動和數據庫實例的啟動有嚴格的先後關系ASM啟動一定早於數據庫實例關閉一定晚於ASM實例因為它是數據庫數據文件存儲位置如果ASM沒有起來起數據庫將會報ORAORA的錯誤錯誤信息如下:

  SQL>startup

  ORA:failure in processing system parameters

  ORA:error in identifying file +ASMGROUP/WWL/spfileWWLora

  ORA:ksfdopn: Failed to open file +ASMGROUP/WWL/spfileWWLora

  ORA:could not locate ASM instance serving a required diskgroup

  SQL>

    ASM啟動的方法:

  SQL>startup

  ASMinstance started

  TotalSystem Global Area   bytes

  FixedSize                  bytes

  VariableSize              bytes

  ASMCache                  bytes

  ASMdiskgroups mounted

  SQL>select instance_namestatus from v$instance;

  INSTANCE_NAME    STATUS

  

  +ASM             STARTED

  SQL>

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

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

  $ export Oracle_SID=+ASM

  $ sqlplus / as sysdba

  SQL> shutdown immediate

  ORA: 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三種磁盤組及磁盤的添加和維護

  ASM磁盤的添加及刪除

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

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

  # oracleasm listdisks

  VOL

  VOL

  # oracleasm querydisk VOL

  DiskVOL is a valid ASM disk

  # oracleasm querydisk VOL

  DiskVOL is a valid ASM disk

  # ls l /dev/oracleasm/disks/*

  brwrw oracle dba Apr : /dev/oracleasm/disks/VOL

  brwrw oracle dba Apr : /dev/oracleasm/disks/VOL

  # oracleasm status

  Checking if ASMis loaded: yes

  Checking if /dev/oracleasm is mounted: yes

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

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

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

  # /etc/initd/oracleasm createdisk VOL /dev/sdd

  Marking diskVOL as an ASM disk: [FAILED]

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

  # /etc/initd/oracleasmcreatedisk VOL /dev/sdd

  Marking disk VOL as anASM disk: [  OK  ]   可以看到能正常創建

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

  Marking disk VOL as an ASM disk: [  OK  ]

  Marking disk VOL as an ASM disk: [  OK  ]

  Marking disk VOL as an ASM disk: [  OK  ]

  Marking disk VOL as an ASM disk: [  OK  ]

  Marking disk VOL as an ASM disk: [  OK  ]

  Marking disk VOL as an ASM disk: [  OK  ]

  Marking disk VOL as an ASM disk: [  OK  ]

  Marking disk VOL as an ASM disk: [  OK  ]

  Marking disk VOL as an ASM disk: [  OK  ]

     為ASMGROUP磁盤組添加刪除磁盤

  l  查看磁盤組的狀態

  SQL> selectGROUP_NUMBERNAMESTATETYPE from v$asm_diskgroup;

  GROUP_NUMBER   NAME      STATE       TYPE

        

    ASMGROUP  CONNECTED  NORMAL

  SQL> SELECT aname GRPNAMEbgroup_number GR_NUMBERbdisk_numberDK_NUMBERbname ASMFILEbpathbmount_statusbstate FROM v$asm_diskgroupav$asm_disk b;

  GRPNAME    GR_NUMBER  DK_NUMBER ASMFILE                        PATH                      MOUNT_S STATE

  

  ASMGROUP      ASMGROUP_    /dev/oracleasm/disks/VOLOPENED  NORMAL

  ASMGROUP    ASMGROUP_     /dev/oracleasm/disks/VOL OPENED  NORMAL

  l  查看磁盤組ASMGROUP中的成員

  SQL> selectgroup_numberdisk_number failgroupnamepath from v$asm_disk where FAILGROUPlike ASMGROUP%;

  GROUP_NUMBERDISK_NUMBER FAILGROUP                     NAME                          PATH

  

             ASMGROUP_                 ASMGROUP_                 /dev/oracleasm/disks/VOL

             ASMGROUP_                 ASMGROUP_                 /dev/oracleasm/disks/VOL

  SQL>

  l  添加為ASMGROUP添加磁盤

  SQL> alterdiskgroup ASMGROUP add disk /dev/oracleasm/disks/VOL;

  Diskgroupaltered

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

  SQL>  select group_numberdisk_numberfailgroupnamepath from v$asm_disk where FAILGROUP like ASMGROUP%;

  GROUP_NUMBERDISK_NUMBER FAILGROUP                      NAME                           PATH

  

             ASMGROUP_                 ASMGROUP_                 /dev/oracleasm/disks/VOL

             ASMGROUP_                 ASMGROUP_                 /dev/oracleasm/disks/VOL

             ASMGROUP_                 ASMGROUP_                 /dev/oracleasm/disks/VOL

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

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

  SQL> create diskgroup asmhigh high redundancy disk/dev/oracleasm/disks/VOL/dev/oracleasm/disks/VOL/dev/oracleasm/disks/VOL;

  Diskgroupcreated

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

  SQL> creatediskgroup asmnormal normal redundancy disk/dev/oracleasm/disks/VOL/dev/oracleasm/disks/VOL;

  Diskgroupcreated

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

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

  Diskgroupcreated

  

    查看剛才創建的磁盤狀態

  SQL> select namestatetype fromv$asm_diskgroup;

  NAME            STATE       TYPE

  

  ASMGROUP       MOUNTED    NORMAL

  ASMHIGH         MOUNTED     HIGH

  ASMNORMAL      MOUNTED    NORMAL

  ASMEXTERNAL     MOUNTED    EXTERN

           為ASM磁盤組添加成員在這裡我們就以Normal磁盤組來進行成員添加的例子

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

  Diskgroup altered

  SQL> select group_numberdisk_numberfailgroupnamepath from v$asm_disk where FAILGROUP like ASMNORMAL%;

  GROUP_NUMBER DISK_NUMBER FAILGROUP                      NAME                           PATH

  

             ASMNORMAL_                 ASMNORMAL_                 /dev/oracleasm/disks/VOL

             ASMNORMAL_                 ASMNORMAL_                 /dev/oracleasm/disks/VOL

             ASMNORMAL_                 ASMNORMAL_                 /dev/oracleasm/disks/VOL

  SQL>

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

  SQL> alter diskgroup ASMNORMAL drop disk ASMNORMAL_;

  Diskgroup altered

  SQL> select group_numberdisk_number failgroupnamepath fromv$asm_disk where FAILGROUP like ASMNORMAL%;

  GROUP_NUMBER DISK_NUMBER FAILGROUP                      NAME                           PATH

  

             ASMNORMAL_                 ASMNORMAL_                 /dev/oracleasm/disks/VOL

             ASMNORMAL_                 ASMNORMAL_                 /dev/oracleasm/disks/VOL

  SQL>

    模擬磁盤故障

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

  SQL> selecttablespace_namefile_namebytes// M from dba_data_files;

  TABLESPACE_NAMEFILE_NAME                                              M

  

  USERS          +ASMGROUP/wwl/datafile/users           

  SYSAUX         +ASMGROUP/wwl/datafile/sysaux        

  UNDOTBS        +ASMGROUP/wwl/datafile/undotbs        

  

  SYSTEM         +ASMGROUP/wwl/datafile/system        

  ASM            +ASMGROUP/wwl/datafile/asm           

  ASM             +ASMGROUP/wwl/datafile/asm           

   rowsselected

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

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

  SQL> selectusernamedefault_tablespace from dba_users where DEFAULT_TABLESPACE=ASM;

  USERNAME                       DEFAULT_TABLESPACE

  

  WWL                            ASM

       在ASM表空間寫入數據

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

  SQL> connwwl/wwl

  Connected

  SQL> createtable wwl (id varchar()name varchar());

  Table created

  SQL>  begin

    fori in loop

   insert into wwl values (wwl);

    endloop;

    end;

    /

  PL/SQLprocedure successfully completed

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

  SQL> selectcount(*) from wwl;

  COUNT(*)

  

  

       模擬磁盤突然損壞

  [root@wwl ~]#oracleasm deletedisk VOL;

  Clearing diskheader: done

  Dropping disk:done

  [root@wwl ~]#

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

  SQL> selectgroup_numberdisk_number failgroupnamepath from v$asm_disk where FAILGROUPlike ASMGROUP%;

  GROUP_NUMBERDISK_NUMBER FAILGROUP                     NAME                          PATH

  

             ASMGROUP_                 ASMGROUP_                 /dev/oracleasm/disks/VOL

  SQL>

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

  SQL> selectcount(*) from wwl;

  COUNT(*)

  

  

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

  ASM日志信息如下

  WARNING:offlining disk (ASMGROUP_) with mask x

  NOTE: PSTupdate: grp = dsk = mode = x

  NOTE: cacheclosing disk of grp : ASMGROUP_

  NOTE: PSTupdate: grp =

  NOTE: erasingheader on grp disk ASMGROUP_

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

       

    ASM別名管理

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

      添加別名

  SQL> alter diskgroup ASMGROUP add alias+ASMGROUP/wwl/datafile/asmdbf for+ASMGROUP/wwl/datafile/asm;

  Diskgroup altered

      修改別名

  SQL> alter diskgroup ASMGROUP renamealias +ASMGROUP/wwl/datafile/asmdbf for+ASMGROUP/wwl/datafile/asm;

  Diskgroup altered

      刪除別名

  SQL> alter diskgroup ASMGROUP dropalias +ASMGROUP/wwl/datafile/asmdbf for+ASMGROUP/wwl/datafile/asm;

  Diskgroup altered

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

    目錄及目錄文件管理

     創建目錄

  SQL> alter diskgroup ASMGROUP add directory +ASMGROUP/WWL;

  Diskgroupaltered

     修改目錄

  SQL> alterdiskgroup ASMGROUP rename directory +ASMGROUP/WWL to +ASMGROUP/WWL;

  Diskgroupaltered

     刪除目錄

  SQL> alter diskgroup ASMGROUP drop directory +ASMGROUP/WWL;

  Diskgroupaltered

    手動平衡磁盤組

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

  SQL>alter diskgroup asmgroup rebalance power ;

  Diskgroup altered

    通過ASMCMD工具管理ASM

  [oracle@wwl ~]$ which asmcmd

  /oracle/orahome//db_/bin/asmcmd

  [oracle@wwl ~]$ cd/oracle/orahome//db_/bin/

  ASMCMD> ls 

  ASMEXTERNAL/

  ASMGROUP/

  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 MB of space then it actually

  takes up MB of space on a normal redundancy diskgroup and 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_FILETYPE

  ASMCMD>

   

    oracleasm工具的使用和語法介紹

  [root@wwl ~]# oracleasm help

  Usage: oracleasm[execpath=<exec_path>] <command> [ <args> ]

  oracleasm execpath

  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

  updatedriver    Download thelatest ASMLib driver

  [root@wwl ~]#

    ASM相關視圖(V$)和數據字典(X$)

  ASM由於其高度的封裝性使得我們很難知道窺探其內部的原理可以通過一下視圖和數據字典來來查看ASM 的信息

  相關視圖和數據字典

  View Name

  X$ Table name

  Description

  V$ASM_DISKGROUP

  X$KFGRP

  performs  disk discovery and lists diskgroups

  V$ASM_DISKGROUP_STAT

  X$KFGRP_STAT

  diskgroup  stats without disk discovery

  V$ASM_DISK

  X$KFDSK  X$KFKID

  performs  disk discovery lists disks and their usage metrics

  V$ASM_DISK_STAT

  X$KFDSK_STAT  X$KFKID

  lists  disks and their usage metrics

  V$ASM_FILE

  X$KFFIL

  lists  ASM files including metadata/asmdisk files

  V$ASM_ALIAS

  X$KFALS

  lists  ASM aliases files and directories

  V$ASM_TEMPLATE

  X$KFTMTA

  lists  the available templates and their properties

  V$ASM_CLIENT

  X$KFNCL

  lists  DB instances connected to ASM

  V$ASM_OPERATION

  X$KFGMG

  lists  rebalancing operations

  NA

  X$KFKLIB

  available  libraries includes asmlib path

  NA

  X$KFDPARTNER

  lists  disktopartner relationships

  NA

  X$KFFXP

  extent  map table for all ASM files

  NA

  X$KFDAT

  extent  list for all ASM disks

  NA

  X$KFBH

  describes  the ASM cache (buffer cache of ASM in blocks of K (_asm_blksize)

  NA

  X$KFCCE

  a  linked list of ASM blocks to be further investigated

  This list isobtained querying v$fixed_view_definitionwhere view_name like %ASM% whichexposes all the v$ and gv$ views with theirdefinition Fixed tables are exposedby querying v$fixed_table where name likex$kf% (ASM fixed tables use theX$KF prefix)

  SQL>select* fromv$fixed_view_definition whereview_name like %ASM%;

  SQL>select* from sysv$fixed_tablewhere name like X$KF% ;

    ASM常見的錯誤處理

  錯誤一

  ORAcannotSHUTDOWN ASM instance with connected RDBMS instance

  解決辦法

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

  錯誤二

  [root@wwl ~]# /etc/initd/oracleasm createdisk VOL /dev/sdd

  Marking disk VOL as an ASM disk: [FAILED]

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

  十一       ASM 擴展性

  最多支持個磁盤組     最多支持個磁盤     最大支持pb/磁盤     最大支持     exabyte/ASM存儲 最大支持百W個文件/磁盤組 外部冗余時單個文件最大tb標准冗余時單個文件最大tb高冗余度時單個文件最大tb

  十二       ASM其它信息請參考如下連接


From:http://tw.wingwit.com/Article/program/Oracle/201405/30855.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.