11g新特性--自動儲存管理

wzhalal發表於2014-06-15

自動儲存管理

   用於管理 ASM 例項的新的 SYSASM 角色、用於降低共享池使用的可變的區大小,以及例項能夠讀取磁碟
   組的特定磁碟,這些都是 Oracle 資料庫 11g ASM 中引入的一些重要新特性。


1.SYSASM 角色
    自動儲存管理 (ASM) 是在 Oracle 資料庫 10g 中引入的,它在某種程度上打破了 DBA 和系統管理員之間
  在儲存分配功能上的界限。ASM 例項由 DBA 管理,正如常規的 DBA 工作需要以 SYSDBA 角色進行連線
  一樣。但是隨著時間的推移,角色變得更加清楚,我們看到發生了基本的分工。因此,一些 ASM 操作返
  還給系統管理員。在某些情況下,會出現單獨的一類“ASM 管理員”,他們只進行 ASM 管理,並不涉及數
  據庫管理。
    然而,這個新角色的出現引發了一個衝突:需要用 SYSDBA 角色來管理 ASM 例項,但執行在同一臺服務
  器上的生產資料庫的許多 DBA 感覺很難共享該角色。
    Oracle 資料庫 11g 消除了這個衝突。有一個新角色 SYSASM,只用於管理 ASM 例項。這類似於針對 ASM
  例項的 SYSDBA 角色。下面將演示如何連線到 ASM 例項:
  $ sqlplus / as sysasm
  SQL*Plus: Release 11.1.0.6.0 - Production on Fri Sep 28 20:37:39 2007
  Copyright (c) 1982, 2007, Oracle. All rights reserved.
  Connected to:
  Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
  With the Partitioning, Oracle Label Security, OLAP, Data Mining
  and Real Application Testing options
  SQL>
  注意連線子句“as sysasm”。在 Oracle 資料庫 11g 第 1 版中,該 SYSASM 角色被授予具有 SYSDBA 許可權
  的作業系統組(大多數情況下為“dba”)。換言之,Unix 中屬於 dba 組的使用者也可以作為 SYSASM 進行連
  接。(今後的版本會更改這種安排;sysdba 和 sysasm 角色將分成不同的 OS 組。)
  以 sys 使用者身份連線到 ASM 例項後,您可以更新在口令檔案中更新的 SYS 口令:
 
  SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
+ASM

SQL> create user asm_test identified by oracle;

User created.

SQL> grant sysasm to asm_test;

Grant succeeded.

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Automatic Storage Management option
[grid@11gr2asm dev]$ sqlplus asm_test/oracle as sysasm

SQL*Plus: Release 11.2.0.3.0 Production on Thu Jan 23 14:31:32 2014

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Automatic Storage Management option

SQL>
 
  2.可變的區大小
    ASM 儲存中結構最小的元素是分配單元 (AU),與 Oracle 資料庫塊的概念類似。建立表和索引之類的資料
  庫段時,分配的最小單元不是一個塊,而是一個包含多個塊的區。您可以更改段的區大小。
 
    ASM 中有一個非常類似的概念:在 ASM 磁碟組上建立檔案時,最小的可定址單元是區,而不是 AU。在
    Oracle 資料庫 10g 中,AU 和區是可互換的;一個區只包含一個 AU。
    10g 相容的磁碟組需要共享池為每個區提供記憶體。對於大型資料庫,這又需要大量記憶體。因此,如果 AU
  大小為 1MB(預設值),1TB 的資料庫需要在共享池中管理超過一百萬個區。
 
    在 Oracle 資料庫 11g 中,區大小不再等於 AU 大小。建立檔案時,區大小從 1MB 開始。檔案達到某個
  閾值時,區大小增加至 4MB,然後是 16MB,最後當達到某個閾值後,區大小為 64MB。您不必擔心大
  小;ASM 例項會自動分配合適的區大小。由於較少數量的區即可容納大量資料,因此可以大大減少共享池
  中的區總數,從而將效能提高數倍。
    當檔案急劇擴大和縮小時,可變的區大小可能會產生一些碎片。如果需要進行碎片整理,ASM 將自動解決
  該問題。
 
    可變的 AU 大小
    正如我在前面提到的,AU 的預設大小為 1MB。對許多資料庫而言,這可能足夠大了,但請考慮一個大小
  超過 10TB 的大型資料庫。物件可能超過 1MB,因此您可能希望擴大 AU 大小以減少 AU 數量。在 Oracle
  資料庫 10g 中,您可以設定一個底線引數來更改 AU 大小。然而,這會影響這之後建立的所有磁碟組,
  而且還需要一個 ASM 例項週期來設定該引數。
 
    在 Oracle 資料庫 11g 中,只需在建立 DG 期間設定一個磁碟組屬性 au_size 即可輕鬆完成此任務,如下
  所示:
  create diskgroup dg
  external redundancy
  disk
  '/dev/asm_disk1'
  attribute 'au_size' = '2M'
  AU_SIZE 應為 1M、2M、4M、8M、16M、32M 或 64M(M 代表 MB)。您還可以將該值設成一個絕對值
  (單位為位元組):
  attribute 'au_size' = ' 2097152'

  建立磁碟組之後,您可以通過以下查詢來檢視 AU 大小:
  select name, allocation_unit_size
  from v$asm_diskgroup
  /
 
SQL>   select name, allocation_unit_size
  2    from v$asm_diskgroup
  3    /

NAME                           ALLOCATION_UNIT_SIZE
------------------------------ --------------------
DATA                                        1048576
DG                                          2097152

  注意各個磁碟組名稱的 AU 大小。現在,您可以建立具有合適 AU 大小的磁碟組,以滿足每個應用程式的
  需要。
 
  3. 磁碟組屬性
  
    ASM 是一個適用於從 10g 到當前版本的 Oracle 資料庫的儲存平臺。因此,11g 上的 ASM 例項可以儲存
  10g 第 1 版、10g 第 2 版以及 11g 第 1 版(以及更高版本)的資料庫。只要 ASM 版本與 RDBMS 的版
  本相同或者更高,就可以在該 ASM 例項上建立資料庫。如果 ASM 和 RDBMS 例項的版本不同,它們將如
  何通訊呢?很簡單:ASM 將訊息轉換成適合 RDBMS 的版本。
    預設情況下,ASM 例項可以支援 10g 資料庫。但如果您希望在該 ASM 例項上僅放置 11g RDBMS,該怎
  麼辦?無需進行訊息轉換來支援版本差異。但如果可以告訴 ASM 例項唯一支援的資料庫是 11g 第 1 版,
  該怎麼辦?這將消除,至少可以減少訊息轉換。在 Oracle 資料庫 11g 中,可以使用 ASM 相容性和 RDBMS 相容性磁碟組屬性實現。
 
  首先,我們將檢查磁碟組的當前屬性:
SQL>
  1   select compatibility, database_compatibility
  2    from v$asm_diskgroup
  3*   where name = 'DG'
SQL> /

COMPATIBILITY                  DATABASE_COMPATIBILITY
------------------------------ ------------------------------
10.1.0.0.0                     10.1.0.0.0

    如您所見,ASM 相容性(由 COMPATIBILITY 顯示)設定為 10.1.0.0.0,這意味著該磁碟組最高可支援
  10.1 ASM 結構。因此,該磁碟組可以具有任意 RDBMS 結構。另一列 DATABASE_COMPATIBILITY 顯示
  RDBMS 相容性設定為 10.1。這意味著,ASM 磁碟組 DG1 可用於 10.1 版的任何 RDBMS。
 
    由於您只希望建立 11g ASM 和 RDBMS 結構,因此無需擁有 10g 元素。要將該磁碟組的 ASM 相容性屬
  性設定為 11.2,您可以執行以下語句(在 ASM 例項中):
 
  SQL> alter diskgroup dg set attribute 'compatible.asm'='11.2';
 
  現在,如果您檢查磁碟組的屬性: (注意,並未修改DATA DG但也被修改)
 
  INS ASM CMP      DB CMP        NUM NAME       SECTOR    BLK      AU SZ STATE      TYPE       TOT MB FREE MB  MINSPC  USABLE   OFFLN
---- ------------ ------------ ---- ---------- ------ ------ ---------- ---------- ---------- ------ ------- ------- ------- -------
   1 11.2.0.0.0   10.1.0.0.0      1 DATA          512   4096    1048576 MOUNTED    EXTERN      16378   12562       0   12562   0
   1 11.2.0.0.0   10.1.0.0.0      2 DG            512   4096    2097152 MOUNTED    EXTERN        480     420       0     420   0

  ASM 相容性設定為 11.2;但 RDBMS 相容性仍然設定為 10.1。要將它也更改為 11.2,
  請使用:SQL> alter diskgroup dg set attribute 'compatible.rdbms'='11.1';
 
  需要特別注意的是:
    相容性是針對磁碟組設定的,而不是針對整個 ASM 例項。使用該特性,您只需使用
  一個 ASM 例項即可滿足所有資料庫版本型別的需要。根據所使用的版本,您可以相應地設定屬性,從而
  減少版本間通訊。

 4.首選的映象讀取
    在 Oracle RAC 資料庫中,多個節點可能指向同一個 ASM 例項。如果您在一個 ASM 磁碟組中使用正常鏡
  像,訪問磁碟的行為可能並不像您預想的那樣。
 
    假設您有一個名為 DG2 的磁碟組,它包含兩個 failgroup(DG2_0000 和 DG2_0001),每個具有一個單
  獨的磁碟,如下圖所示:
 
    向磁碟組 DG2 寫入某些內容時,會以迴圈方式寫入區中:第一個進入 DG2_0000,副本進入
  DG2_0001,第二個進入 DG2_0001,副本在 DG2_0000 上,第三個進入 DG2_0000,副本在 DG2_0001
  上,依此類推。ASM 以這種方式在一個磁碟上維護另一個磁碟的備份。
 
    但是在讀取這些區時,始終從主 failgroup(在本例中為 DG2_0000)中讀取,而不是從輔助 failgroup
  (DG2_0001) 中讀取。僅當主 failgroup 不可用時才讀取輔助 failgroup。
 
    這在大多數情況下可以正常工作,但有時可能不是所希望的。在 Oracle 資料庫 11g 中,您可以將一個節
  點配置為從特定 failgroup 中讀取。例如,在上面的示例中,如果您希望將例項 1 配置為從 failgroup
  DG2_0000 中讀取,將例項 2 配置為從 DG2_0001 中讀取,您可以設定這些磁碟組的首選讀取組。在實
  例 1 中執行的以下命令導致磁碟組 DG2 和 DG3 中的 failgroup DG2_0000 和 DG3_0000 分別是例項 1 上的首選磁碟:
 
  SQL> alter system set asm_preferred_read_failure_groups = 'DG2.DG2_0000','DG3.DG3_0000'
 
  同樣,在另一個例項上,您可以執行以下命令使其他 failgroup 成為首選磁碟:
  SQL> alter system set asm_preferred_read_failure_groups = 'DG2.DG2_0001','DG3.DG3_0001'
 
    執行這些語句後,當來自例項 1 的某個會話希望從磁碟組 DG2 中讀取時,將讀取磁碟 DG2_0000。如果
  該磁碟不可用,則讀取另一個磁碟 DG2_0001。同樣,當某個連線到例項 2 的會話讀取資料時,將讀取磁
  盤 DG2_0001。
 
    如果您要檢查磁碟組中不同磁碟的使用情況,可以參考一個新的字典檢視 V$ASM_DISK_IOSTAT,它模擬
  了 UNIX 系統中的 IOSTAT 實用程式:

  select
  instname,
  dbname,
  group_number,
  failgroup,
  disk_number,
  reads,
  writes
  from v$asm_disk_iostat
  order by 1,2,3,4,5,6
  /
  示例輸出如下:
  INSTNAM DBNAME GROUP_NUMBER FAILGROUP DISK_NUMBER READS WRITES
  ------- -------- ------------ ---------- ----------- ---------- ----------
  PRONE31 PRONE3 2 DG2_0000 0 4450 910
  PRONE32 PRONE3 2 DG2_0001 1 2256 910
  PRONE31 PRONE3 3 DG3_0000 0 300 29
  PRONE32 PRONE3 3 DG3_0001 1 560 29
 
    該輸出顯示了例項 PRONE31 和 PRONE32 的首選 failgroup 分別為 DG2_0000 和 DG2_0001。注意
  WRITES 列;它們在 910 處相同。這是因為統一寫入到兩個磁碟中。現在,注意 READS 列。針對例項
  PRONE31 和 PRONE32 分別為 4450 和 2256。為什麼?因為例項 PRONE3 發出多次讀取命令,這些讀取
  均來自於其首選 failgroup DG2_0000。對於磁碟組 DG3,例項 PRONE32 發出多次來自於其首選failgroup (DG3_0001) 的讀取命令,
  因此該磁碟顯示更多讀取。
 
    首選讀取在“拉伸”叢集(節點之間地理距離較遠的叢集)中尤為有用。首選讀取通過將讀取隔離到特定磁
  盤,加快了讀取速度。
 
  5.Drop Diskgroup Force
    當一個磁碟不再可用時(損壞到無法修復的程度)會發生什麼?您希望完全刪除該磁碟組然後重新建立,
  或者將該磁碟組的磁碟新增到其他磁碟組。該磁碟組尚未掛載。由於其中一個磁碟缺少,您甚至無法掛載
  它。要刪除該磁碟組,您必須掛載它,但由於缺少磁碟,您無法進行掛載 — 絕對是一個“無法擺脫的困
  境”。您應該做些什麼?
 
    在 Oracle 資料庫 10g 中,您可以使用一種變通方法 — 使用dd 命令擦除磁碟表頭:
  $ dd if=/dev/zero of=/dev/asm_disk1 bs=1024 count=4
 
    這將在磁碟 /dev/asm_disk1  的表頭中放入零,擦除所有資訊。如果該方法生效,它將完全擦除磁碟表頭
  的資訊,並刪除用作磁碟組一部分的磁碟。
 
    在 Oracle 資料庫 11g 中,您不必求助於該變通方法。您只需執行帶 force 選項的 drop 命令:
  SQL> drop diskgroup dg force including contents;
 
    使用該命令,即使沒有掛載磁碟,也可以刪除磁碟組。可用的磁碟顯示為 FORMER;即,它們用作某個磁
  盤組的一部分。(注:您必須使用“including contents”子句。)
 
 
  6.後設資料備份和恢復
    許多人將 ASM 看作一個具有自己的儲存的資料庫。事實並非如此,ASM 並不儲存資料,而是由資料庫進
  行儲存。但 ASM 例項需要維護磁碟組名稱、其中的磁碟、目錄等後設資料。這些後設資料儲存在磁碟表頭
  中。
    假設所有磁碟都損壞且表頭資訊消失,您該怎麼辦?當然,您已經使用 RMAN 對資料庫進行了備份,因此
  可以恢復。但您只有在建立了所有磁碟組和目錄後才能進行恢復。希望您保留了所有記錄。(對嗎?)即
  使您進行了備份,這個過程也需要時間。

    如果您進行了備份,該怎麼辦呢?在 Oracle 資料庫 11g 中,您可以使用 md_backup 命令通過 ASM 命令
  行選項 (ASMCMD) 備份 ASM 例項的後設資料。
 
  $ asmcmd -p
  ASMCMD [+] > md_backup
  該命令將建立一個名為 ambr_backup_intermediate_file 的檔案。以下是該檔案從頂部開始的一部分:
  @diskgroup_set = (
  {
  'DISKSINFO' => {
  'DG1_0000' => {
  'DG1_0000' => {
  'TOTAL_MB' => '103',
  'FAILGROUP' =>
  'DG1_0000',
  'NAME' => 'DG1_0000',
  'DGNAME' => 'DG1',
  'PATH' =>
  '/dev/raw/raw5'
  }
  }
  },
  'DGINFO' => {
  'DGTORESTORE' => 0,
  'DGCOMPAT' => '10.1.0.0.0',
  'DGNAME' => 'DG1',
  'DGDBCOMPAT' => '10.1.0.0.0',
  'DGTYPE' => 'EXTERN',
  'DGAUSZ' => '1048576'
  },
  'ALIASINFO' => {},
  'TEMPLATEINFO' => {
  '6' => {
  'DGNAME' => 'DG1',
  'STRIPE' => 'COARSE',
  'TEMPNAME' => 'ASM_STALE',
  'REDUNDANCY' => 'UNPROT',
  'SYSTEM' => 'Y'
  ... and more ...
 
    為了節省空間,此處沒有顯示整個檔案。它記錄了所有磁碟組、磁碟、目錄、磁碟屬性,等等。預設情況
  下,該檔案會記錄所有磁碟組。如果您希望僅備份特定磁碟組,可以使用-g 選項。此外,您還可以使用
    -b 選項建立特定的命名檔案。
    
  ASMCMD [+] > md_backup -g dg1 -b prolin3_asm.backup
 
    這會將磁碟組 DG1 的後設資料備份到一個名為 prolin3_asm.backup 的檔案,而不是預設的
  ambr_backup_intermediate_file。該檔案必須是新建的,如果在生成前該檔案已存在,您必須刪除它。
  現在,讓我們看看恢復操作是如何工作的。恢復有不同的型別。最簡單的用法是恢復一個以前刪除的磁碟
  組及其目錄。首選,在磁碟組上建立一個目錄:
 
  ASMCMD [+] > cd DG7
  ASMCMD [+DG7] > mkdir TEST
  ASMCMD [+DG7] > ls
  TEST/
 
  該磁碟組有一個名為 TEST 的目錄。現在,備份該磁碟組:
  ASMCMD [+] > md_backup -g dg7 -b g7.backup
 
  備份之後,假設您刪除該磁碟組來模擬一次意外刪除:
  SQL> drop diskgroup dg7;
  Diskgroup dropped.
 
  現在,磁碟組 DG7 已從 ASM 例項刪除,您希望使用以前的備份恢復它。可以使用 md_restore 命令恢復
  它:

  $ asmcmd md_restore -b dg7.backup -t full
  Current Diskgroup being restored: DG7
  Diskgroup DG7 created!
  System template TEMPFILE modified!
  System template FLASHBACK modified!
  System template ARCHIVELOG modified!
  System template BACKUPSET modified!
  System template XTRANSPORT modified!
  System template DATAGUARDCONFIG modified!
  System template CONTROLFILE modified!
  System template AUTOBACKUP modified!
  System template DUMPSET modified!
  System template ONLINELOG modified!
  System template PARAMETERFILE modified!
  System template ASM_STALE modified!
  System template CHANGETRACKING modified!
  System template DATAFILE modified!
  Directory +DG7/TEST re-created!
    看看輸出;它建立了該磁碟組以及模板和目錄。如果以前有任何資料,當然,這些資料將丟
  失。md_backup 不是資料的備份,而是 ASM 例項後設資料的備份。表面上,資料是由 RMAN 備份的。建立
  磁碟組和所有目錄之後,您可以將 RMAN 備份恢復到該磁碟組。
 
    另一個選項-f 使您可以將命令放在一個指令碼檔案中,而不是執行這些命令:
  ASMCMD [+] > md_restore -b dg7.backup -t full -f cr_dg7.sql
 
    它會建立一個名為 cr_dg7.sql 的 SQL 指令碼,該指令碼用於建立磁碟組以及所有其他物件。您可以在 ASM 實
  例中手動執行該指令碼。該檔案如下所示:
  create diskgroup DG7 EXTERNAL redundancy disk '/dev/raw/raw14' name DG7_0000 size 100M ;
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template TEMPFILE attributes (UNPROTECTED COARSE);
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template FLASHBACK attributes (UNPROTECTED FINE);
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template ARCHIVELOG attributes (UNPROTECTED COARSE);
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template BACKUPSET attributes (UNPROTECTED COARSE);
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template XTRANSPORT attributes (UNPROTECTED COARSE);
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template DATAGUARDCONFIG attributes (UNPROTECTED
  COARSE);
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template CONTROLFILE attributes (UNPROTECTED FINE);
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template AUTOBACKUP attributes (UNPROTECTED COARSE);
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template DUMPSET attributes (UNPROTECTED COARSE);
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template ONLINELOG attributes (UNPROTECTED FINE);
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template PARAMETERFILE attributes (UNPROTECTED
  COARSE);
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template ASM_STALE attributes (UNPROTECTED COARSE);
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template CHANGETRACKING attributes (UNPROTECTED
  COARSE);
  alter diskgroup /*ASMCMD AMBR*/DG7 alter template DATAFILE attributes (UNPROTECTED COARSE);
  alter diskgroup /*ASMCMD AMBR */ DG7 add directory '+DG7/TEST';
 
    該特性最有用的應用之一是記錄 ASM 例項的後設資料。您可以定期進行備份,也可以在一些重大更改(如
  新增磁碟組,新增/刪除磁碟,或者建立目錄)後進行備份。
 
  檢查磁碟
    ASM 使用者對傳統卷管理器最大的抱怨之一是其通過命令列進行諸多檢查的能力。ASM 命令列選項
  (ASMCMD) 在很大程度上彌補了這個空白。在 Oracle 資料庫 11g 中,ASMCMD 提示符中的一些其他命令
  可以使 ASM 例項的管理變得極其簡單。示例之一就是您在前面看到的後設資料備份。另一點值得關注的是
  用於檢查例項管理的磁碟的命令。該命令為lsdsk。
 
  ASMCMD> lsdsk
  Path
  /dev/raw/raw10
  /dev/raw/raw11
  /dev/raw/raw13
  ... snipped ...
  沒有任何標誌,該命令僅列出例項所有可用的磁碟。有幾個可以對輸出進行修改的標誌。最常用的是-k,
  如下所示:

  ASMCMD> lsdsk -k
  Total_MB Free_MB OS_MB Name Failgroup Library Label UDID Product Redund Path
  103 41 103 DG4_0000 DG4_0000 System UNKNOWN     /dev/raw/raw10
  103 41 103 DG5_0000 DG5_0000 System UNKNOWN       /dev/raw/raw11
  ... snipped ...
 
  另一個標誌-s 顯示了磁碟與 I/O 有關的各種統計資訊:
  ASMCMD> lsdsk -s
  Reads Write Read_Errs Write_Errs Read_time Write_Time Bytes_Read Bytes_Written
  Path
  207485 207916 0 0 245.820323 159.634398 851251200
  /dev/raw/raw10
  207481 207912 0 0 229.996931 144.73954 851234816
  /dev/raw/raw11
 
  要快速檢查磁碟的狀態,使用-p 標誌:
  ASMCMD> lsdsk -p
  Group_Num Disk_Num Incarn Mount_Stat Header_Stat Mode_Stat State Path
  4 0 3915926174 CACHED MEMBER ONLINE NORMAL /dev/raw/raw10
  5 0 3915926175 CACHED MEMBER ONLINE NORMAL /dev/raw/raw11
  6 0 3915926193 CACHED MEMBER ONLINE NORMAL /dev/raw/raw13
 
  最後,-t 標誌顯示與修復相關的資訊(將在本文後面進行介紹):
  ASMCMD> lsdsk -t
  Create_Date Mount_Date Repair_Timer Path
  27-SEP-07 28-SEP-07 0 /dev/raw/raw10
  27-SEP-07 28-SEP-07 0 /dev/raw/raw11
  28-SEP-07 28-SEP-07 0 /dev/raw/raw13
    目前為止,ASMCMD 選項提取了 ASM 例項中各個 V$ 檢視的值。但後設資料儲存在磁碟中。如果例項不可
  用,應該有一種方法可以從磁碟中提取這些資訊。在 Oracle 資料庫 11g 中,lsdsk 命令有一個標
  志“I”(大寫的“I”,不是小寫的“L”),它可以提取磁碟表頭(而非 V$ 檢視)的資訊。以下是-k 標誌從磁
  盤表頭提取資訊的一個示例。
 
  ASMCMD> lsdsk -Ik
  Total_MB Name Failgroup Path
  103 DG4_0000 DG4_0000 /dev/raw/raw10
  103 DG5_0000 DG5_0000 /dev/raw/raw11
  102 DG6_0000 DG6_0000 /dev/raw/raw13
 
  要列出特定磁碟組(例如,DG1)中的磁碟,您可以使用-d 標誌,如下所示:
  ASMCMD> lsdsk -t -d dg1
  Create_Date Mount_Date Repair_Timer Path
  28-SEP-07 28-SEP-07 0 /dev/raw/raw5
 
  也可以為磁碟提供一個模式:
  ASMCMD> lsdsk -t /dev/raw/raw1*
  Create_Date Mount_Date Repair_Timer Path
  27-SEP-07 28-SEP-07 0 /dev/raw/raw10
  27-SEP-07 28-SEP-07 0 /dev/raw/raw11
  28-SEP-07 28-SEP-07 0 /dev/raw/raw13
  28-SEP-07 05-OCT-07 0 /dev/raw/raw14
 
  該命令僅顯示與該模式匹配的磁碟。最後,無需記住這些選項;help 命令可以顯示所有選項:
 
  ASMCMD> help lsdsk
  lsdsk [-ksptcgHI] [-d ] [pattern]
  lsdsk 命令為 ASM 領域提供了更高階的卷管理(如功能)。
 
  7.受限制的掛載
    假設您向某個磁碟組新增了一個磁碟。ASM 會立即啟動重新均衡操作。該操作聯機進行,因此 ASM 必須

   通過一個複雜的鎖定系統與塊訪問和更改的 RDBMS 例項協調。在 RAC 資料庫中,該過程很棘手,因為
  不僅要在資料庫中管理鎖定,還要跨多個例項管理鎖定。
    如果將磁碟新增到一個現在無人使用的磁碟組,將會怎樣呢?如果 ASM 可以通過某種方式瞭解到該情
  況,它可以消除鎖定機制,從而加快該過程。
 
  在 Oracle 資料庫 11g 中,一種新的磁碟組掛載方式使得這一切得以實現。可以使用 RESTRICT 子句掛載
  磁碟組,如下所示:
  alter diskgroup dg7 mount restricted;
  以這種方式掛載磁碟組之後,ASM 例項可以知道底層磁碟上操作的互斥性,從而可以將鎖定機制的影響降
  至最小。這反過來又會影響磁碟操作,例如,可以加快重新均衡的速度。
 
  8.快速故障修復
    考慮一個具有兩個 failgroup 的磁碟組 DG2,每個 failgroup 有一個磁碟。當其中一個磁碟的某個區域損壞
  時,對該磁碟組而言並不是致命的打擊。由於進行了映象,因此可以從另一個磁碟讀取損壞的區,從而使
  磁碟和操作能夠繼續進行。但是磁碟損壞的部分發生了什麼?
 
    在 Oracle 資料庫 10g 中,損壞的磁碟會離線,它或另一個磁碟必須出現在磁碟組中。如果新增了新磁
  盤,必須要從用作映象的其餘磁碟完全克隆。但如果只有幾個塊損壞,複製(例如)34GB 磁碟的內容並
  不是一個高效的方法。
 
    因此,在 Oracle 資料庫 11g 中,修復磁碟損壞的部分,而不是複製整個磁碟。該特性使用磁碟組的一個
  新屬性 disk_repair_time,該屬性指定 ASM 例項容許出錯的磁碟在多長時間內從磁碟組中刪除。下面演示
  瞭如何將磁碟組 DG2 的屬性設為兩個小時:
 
  SQL> alter diskgroup dg2 set attribute 'disk_repair_time'='2H';
    假設 DG2 有兩個磁碟 DISK1 和 DISK2,DISK2 上的幾個塊突然損壞了。由於修復時間為兩小時,因此
  ASM 例項不會立即刪除該磁碟,而是等待。如果您修復了 DISK2 上的問題並再次將其聯機,這些故障磁
  盤將通過其餘磁碟進行修復。
 
  讓我們來看一個示例。假設磁碟組 DG2 有兩個 failgroup。首先,檢查磁碟組配置:
  ASMCMD [+dg2] > lsdg dg2
  State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB
  Usable_file_MB Offline_disks Name
  MOUNTED NORMAL N 512 4096 1048576 206 78 0
  39 0 DG2/
 
  您也可以使用du 命令進行確認:
  ASMCMD [+dg2] > du
  Used_MB Mirror_used_MB
  11 22
 
  du 命令將確認該磁碟組有 22MB,但只有 11MB 有用。現在,檢查磁碟組 dg2 的磁碟:
  ASMCMD [+dg2] > lsdsk -d dg2
  Path
  /dev/raw/raw6
  /dev/raw/raw7
 
  您也可以通過以下方式確認以及獲得磁碟的名稱:
  SQL> select name, path
  2 from v$asm_disk
  3 where group_number = 2
  4 /
  NAME PATH
  第 108 頁,共 218 頁
  -------- -----------------------------
  DG2_0000 /dev/raw/raw7
  DG2_0001 /dev/raw/raw6
 
  這將顯示該磁碟組有兩個磁碟,並顯示其名稱。現在,模擬一次塊損壞,並將一些字元放在裝置中間:
 
  $ dd if=/dev/zero of=/dev/raw/raw7 bs=1024 skip=10 count=1
  這將使磁碟組中的一個磁碟損壞。現在,使用新命令ALTER DISKGROUP ...CHECK 對磁碟組進行檢查。
  SQL> alter diskgroup dg check
  如果您檢查 ASM 例項的警報日誌,除其他幾行外,您還會注意到以下內容:
  ...
  NOTE: starting check of diskgroup DG2
  WARNING: cache read a corrupted block gn=2 fn=3 indblk=1 from disk 0
  ...
  NOTE: cache successfully reads gn 2 fn 3 indblk 1 count 15 from one mirror side
  kfdp_checkDsk(): 89
  ...
  NOTE: cache initiating offline of disk 0 group 2
  WARNING: initiating offline of disk 0.3915926170 (DG2_0000) with mask 0x7e
  ...
  WARNING: Disk (DG2_0000) will be dropped in: (7200) secs on ASM inst: (1)
  ...
  最後一行說明了一切。剛剛損壞的磁碟將在 7200 秒內從磁碟組中刪除,這符合您之前在修復計時器中設
  置的兩個小時。在刪除時,該訊息將在警報日誌中重複顯示:
  ...
  WARNING: Disk (DG2_0000) will be dropped in: (5550) secs on ASM inst: (1)
  GMON SlaveB: Deferred DG Ops completed.
  Sat Oct 06 00:25:52 2007
  WARNING: Disk (DG2_0000) will be dropped in: (5366) secs on ASM inst: (1)
  GMON SlaveB: Deferred DG Ops completed.
  Sat Oct 06 00:28:55 2007
  WARNING: Disk (DG2_0000) will be dropped in: (5183) secs on ASM inst: (1)
  GMON SlaveB: Deferred DG Ops completed.
  Sat Oct 06 00:31:59 2007
  WARNING: Disk (DG2_0000) will be dropped in: (5000) secs on ASM inst: (1)
  GMON SlaveB: Deferred DG Ops completed.
  ...
  最後,當計時為 0 時,磁碟將被刪除,除非您修復了問題並且磁碟經過了快速故障修復。如果您知道磁碟
  不可修復,則應儘快刪除,您可以執行以下命令來加速磁碟的淘汰:
  SQL> alter diskgroup dg2 offline disks in failgroup dg2_0000 drop after 1m
 
  這將在 1 分鐘後刪除 failgroup dg2_0000,從而允許您以物理方式將其取出或者將其他磁碟移到磁碟組
  中。強制刪除磁碟:
  SQL> alter diskgroup dg2 drop disks in failgroup dg2_0001 force;
 
  磁碟故障解決後,您可以通過執行以下命令來啟動快速修復:
  SQL> alter diskgroup dg2 online disks in failgroup dg2_0001;
  這將啟動將 failgroup DG2_0001 磁碟上損壞和更改的塊與其他磁碟組同步的過程。由於只複製幾個塊而
  非整個磁碟,這將大大減少發生小故障後同步磁碟所需的時間。
  結論
  Oracle 資料庫 11g ASM 更強大、更靈活並且更易於管理。現在,您可以確保從 RAC 資料庫的所有節點讀
  取磁碟組,即使在磁碟不完整的情況下也可以進行刪除,更快速地修復故障,只需在共享池中分配更少的
  區即可管理較大的儲存,等

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

相關文章