[轉載] 全面學習和應用ORACLE ASM特性(4),(5)

tolywang發表於2011-01-17


全面學習和應用ORACLE ASM特性--(4)管理asm磁碟組中目錄和檔案

2.3 mount/unmount 磁碟組

  只有被mount的磁碟組才能被資料庫使用並執行add/drop等磁碟操作,ASM中
的磁碟組預設會在ASM例項啟動時自動載入,當然也可以手動透過命令列語句
mount/unmount磁碟組。

  查詢ASM例項中建立的磁碟組可以透過V$ASM_DISKGROUP檢視檢視,例如:

SQL> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup;

GROUP_NUMBER NAME                           STATE         TOTAL_MB    FREE_MB
------------ ------------------------------ ----------- ---------- ----------

           1 ASMDISK1                       MOUNTED          20472      18667
           2 ASMDISK2                       MOUNTED          16378      14621

  當前兩個磁碟組均為MOUNT狀態,要將其置為UNMOUNT,執行語句如下,例如
將ASMDISK2磁碟組UNMOUNT:

SQL> alter diskgroup asmdisk2 dismount;
Diskgroup altered.

SQL> select group_number,name,state from v$asm_diskgroup;

GROUP_NUMBER NAME                           STATE 
------------ ------------------------------ -----------
           1 ASMDISK1                       MOUNTED 
           0 ASMDISK2                       DISMOUNTED

  注意喲,UNMOUNT磁碟組的話務必慎重操作,要確保UNMOUNT的磁碟組中儲存的
檔案對應的資料庫當前未啟動,而且該操作也會直接導致資料庫SHUTDOWN。

  再將其置回MOUNT狀態,操作如下:

SQL> alter diskgroup asmdisk2 mount;
Diskgroup altered.

SQL> select group_number,name,state from v$asm_diskgroup;

GROUP_NUMBER NAME                           STATE
------------ ------------------------------ -----------
           1 ASMDISK1                       MOUNTED
           2 ASMDISK2                       MOUNTED

 

2.4  管理目錄及檔案
  ASM 磁碟組中檔案和目錄的管理自動化水平相當高,應該說基本上完全不需要DBA
參與,它自己就能玩的很好,當然,如果你非要動動手,那也是可以的。

2.4.1  管理磁碟組目錄
  
建立新目錄:
SQL> alter diskgroup asmdisk2 add directory '+ASMDISK2/JSS1';
Diskgroup altered.

修改目錄名:
SQL> alter diskgroup asmdisk2 rename directory '+ASMDISK2/JSS1'
  2  to '+ASMDISK2/JSS2';
Diskgroup altered.
  

刪除目錄名:
SQL> alter diskgroup asmdisk2 drop directory '+ASMDISK2/JSS2';
Diskgroup altered.


  實際上,ASM中目錄和檔案的管理,也可以透過ASMCMD命令列方式進行,該命令
行進入之後,是一個類似檔案系統的管理介面,ORACLE提供了一些最基礎的,如
cd、ls、mkdir、rm等等幾個有限的操作命令,如果對這部分內容感興趣,可以參考
官方文件中的介紹,或者搭個環境實踐操作,可用命令很少且簡單,熟悉Linux/Unix
的話極易上手。


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

例如,增加別名:
SQL> alter diskgroup asmdisk2 add alias '+ASMDISK2/repdb/datafile/temp01.dbf'
for '+ASMDISK2/repdb/TEMPFILE/TEMP.267.714576831';
  
修改別名:
SQL> alter diskgroup asmdisk2 rename alias '+ASMDISK2/repdb/datafile/temp01.dbf'
to '+ASMDISK2/repdb/TEMPFILE/temp01.dbf';
  
刪除別名:
SQL> alter diskgroup asmdisk2 drop alias '+ASMDISK2/repdb/TEMPFILE/temp01.dbf';

不管是新增/刪除或是修改別名,對原有檔案路徑均不會有影響。

 


2.4.3  刪除磁碟組中檔案/別名
  破壞總是最簡單的,當然我不是說刪除就一定是破壞,不過從嚴謹的角度講,刪除這
樣的操作要少做(沒說不做),做前得再三確認,三思而行並留有備份,即使做錯了,還
有恢復的可能。

  當然啦,ASM中遇到刪除檔案這樣需求的機率很低,但也不是完全沒有,比如說執行
了資料庫不完全恢復操作後,某部分資料檔案就不再需要,而恢復操作不會處理這部分
檔案,為合理利用空間,就會需要DBA手動刪除這類檔案,真遇到這樣的需求,表急,
語法也是黑簡單的吶,例如,刪除磁碟組2上的別名temp01:

SQL> alter diskgroup asmdisk2 drop file '+ASMDISK2/repdb/datafile/temp01.dbf';
Diskgroup altered.

  沒錯,即能刪檔案也能刪別名,只不過如果刪除的是檔案的話,其關聯的別名
(Alias)也會被自動刪除。

 

2.4.4  刪除磁碟組
  太簡單了,語法:drop diskgroup gpname即可!不演示了!需要注意一點,如果
刪除的diskgroup非空的話,直接執行上述語句會報錯,這時候可以透過附加including
contents子句,來自動刪除該磁碟組中包含的檔案。刪除磁碟組的操作會自動修改spfile
中ASM_DISKGROUPS初始化引數的值(如果使用了SPFILE的話) .

 

 

 

 

全面學習和應用ORACLE ASM特性--(5)管理asm磁碟中的檔案

 

3 、管理ASM磁碟中的檔案

  ASM 中的磁碟與物理磁碟並非完全一一對應,由於ASM在儲存資料時是打散處理,
ASM中的(同一個)檔案在儲存時也並非儲存在某個磁碟中,而是完全由ASM自動控制,
甚至連建立檔案時的檔名,都由ASM透過OMF(Oracle managed files)管理。

  接下來,三思跟大家一起聊聊ASM中檔案的那些事兒~~~

1) 、ASM中支援的檔案型別
  大多數的ORACLE檔案型別均能被ASM支援,注意,我說的是大多數,而沒說全部,
像trace檔案、alert檔案、dmp檔案等還不能直接被儲存到ASM中,注意,我說的是不
能直接,沒說不能間接。


  下表列出了ASM直接支援的檔案型別:

Control files
Datafiles
Redo log files
Archive log files
Trace files
Temporary files
Datafile backup pieces
Datafile incremental backup pieces
Archive log backup piece
Datafile copy
Persistent initialization parameter file (SPFILE)
Disaster recovery configurations
Flashback logs
Change tracking file
Data Pump dumpset
Automatically generated control file backup
Cross-platform. transportable datafiles
 
  如果想向ASM中儲存任意型別的檔案,FTP會是個好方式,yangtingkun的這
篇BLOG詳細描述了這一方法:http://space.itpub.net/4227/viewspace-448289
透過這一方式,可以將任意檔案放入ASM中,而不用考慮是否能夠被直接支援,這
其實提供了很大的靈活度,ASM不再是個嚴絲合縫的黑匣子,它也是有縫兒的~~


2)、ASM中的檔名
  ASM 建立的檔案均由系統自動命名,這種命名方式官方定義為 完全定義
檔名 (Fully Qualified Filename) ,這種方式命名的檔案包含完整的檔案
路徑,比如像這樣的形式:

+ASMDISK2/repdb/TEMPFILE/TEMP.267.714576831

  上述名稱是在檔案建立時完全由ASM自動生成,上述名稱的生成格式為:

+diskgroup/dbname/file_type/file_type_tag.file.incarnation

+diskgroup :磁碟組名稱;
dbname :資料庫的DB_UNIQUE_NAME引數值;
file_type :建立的檔案型別,比如CONTROLFILE/DATAFILE/ONLINELOG/ARCHIVELOG/
TEMPFILE/BACKUPSET/FLASHBACK等等,型別眾多此處不一一例舉;
file_type_tag :檔案型別的標籤,比如表空間對應的通常為該表空間名稱;
file.incarnation :檔案序號+incarnation,用來確保檔案的唯一;

 

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

下面是Oracle 11g R2 RAC下ASMCMD下看到的檔名稱:
可以看到,建立test表空間,雖然自己指定了test01.dbf檔案,但是
還是會生成一個TEST.340.740166807 檔案與之對應。同樣test02.dbf
對應TEST.341.740166937 。其中test01.dbf,test02.dbf是別名而已。

ASMCMD> pwd
+oradata/racdb/datafile
ASMCMD> ls
SYSAUX.261.739387301
SYSTEM.260.739387283
TEST.340.740166807
TEST.341.740166937
UNDOTBS1.262.739387315
UNDOTBS2.264.739387351
USERS.265.739387361
test01.dbf
test02.dbf

ASMCMD> ls -l
Type      Redund  Striped  Time             Sys  Name
DATAFILE  UNPROT  COARSE   JAN 12 22:00:00  Y    SYSAUX.261.739387301
DATAFILE  UNPROT  COARSE   JAN 11 17:00:00  Y    SYSTEM.260.739387283
DATAFILE  UNPROT  COARSE   JAN 11 17:00:00  Y    TEST.340.740166807
DATAFILE  UNPROT  COARSE   JAN 11 17:00:00  Y    TEST.341.740166937
DATAFILE  UNPROT  COARSE   JAN 11 17:00:00  Y    UNDOTBS1.262.739387315
DATAFILE  UNPROT  COARSE   JAN 11 17:00:00  Y    UNDOTBS2.264.739387351
DATAFILE  UNPROT  COARSE   JAN 11 17:00:00  Y    USERS.265.739387361
                                            N    test01.dbf => +ORADATA/RACDB/DATAFILE/TEST.340.740166807
                                            N    test02.dbf => +ORADATA/RACDB/DATAFILE/TEST.341.740166937

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


  實際上,即使DBA在建立時想手動指定這樣格式的檔名也是
不行的(即使指定了,建立的也只是別名),例如:

SQL> alter tablespace jsstbs add datafile '+ASMDISK2/repdb/datafile/jsstbs.280.722005095' size 100m;
alter tablespace jsstbs add datafile '+ASMDISK2/repdb/datafile/jsstbs.280.722005095' size 100m
*
ERROR at line 1:
ORA-01276: Cannot add file +ASMDISK2/repdb/datafile/jsstbs.280.722005095. File has an Oracle Managed Files file name.
  

指定非OMF格式的方式名:
SQL> alter tablespace jsstbs add datafile '+ASMDISK2/repdb/datafile/jsstbs02.dbf' size 100m;
Tablespace altered.

看起來好像OK了,其實不然,到asmcmd下檢視一下實際建立的檔案:

ASMCMD> pwd
+ASMDISK2/repdb/datafile

ASMCMD> ls -l jsstbs*
Type Redund Striped Time Sys Name

DATAFILE UNPROT COARSE JUN 18 12:00:00 Y JSSTBS.263.714575967
DATAFILE UNPROT COARSE JUN 18 13:00:00 Y JSSTBS.271.722005397
N jsstbs01.dbf => +ASMDISK2/repdb/datafile/JSSTBS.263.714575967
N jsstbs02.dbf => +ASMDISK2/repdb/datafile/JSSTBS.271.722005397


  由上可以看出,系統雖然建立了名為jsstb02.dbf的檔案,但只是別名,
實際指向了由系統自動命名的 JSSTBS.271.722005397。即然檔案建立時無法
指定實際檔名及路徑,那麼建立語句當然還可以更簡化,例如:

SQL> alter tablespace jsstbs add datafile '+ASMDISK2' size 10m;
Tablespace altered.

SQL> select file_name from dba_data_files where tablespace_name='JSSTBS';

FILE_NAME
--------------------------------------------------
+ASMDISK2/repdb/datafile/jsstbs01.dbf
+ASMDISK2/repdb/datafile/jsstbs02.dbf
+ASMDISK2/repdb/datafile/jsstbs.272.722005653

這樣就完全由ORACLE的OMF控制和管理了。


如果設定了初始化引數db_create_file_dest(預設為空),甚至連磁碟組名都不需要
寫了,例如:

SQL> show parameter db_create_file_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +ASMDISK2

SQL> alter tablespace jsstbs add datafile size 10m;
Tablespace altered.

  透過上述示例,相信大家對於使用ASM做為儲存的資料庫,新增資料檔案
已無疑惑,不過如何新增其它型別檔案,比如重做日誌檔案、歸檔檔案(當然
歸檔檔案本來也就不需要特殊處理,只要LOG_ARCHIVE_DEST_n設定好即可)等還
不明瞭,其實沒有那麼複雜,操作方式都是同理的。由上述示例可知,ASM中文
件名完全可由其自行管理,因此在建立檔案時,只需指定磁碟組路徑即可,文
件名嘛,就由ASM自己玩吧~~

  對於現有系統想遷入ASM儲存,最簡單的方式,莫過於使用RMAN了,之
前的三思筆記系統文章中對此已有描述,此處不再重複深度,感興趣的朋友
可以翻看之前的三思筆記系統文章,或者瀏覽官方文件。

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

相關文章