ASM時的OFM特性對影的建資料檔名的影響及為SYSTEM表空間的資料檔案使用別名

還不算暈發表於2014-07-05
客戶遇到個DG的問題,儲存使用的ASM管理,有多個磁碟盤。
在主庫建立資料檔案,備庫自動建立的資料檔案都在同一磁碟組,並且在主庫建立資料檔案是指定的是類似**.DBF的名字,到備庫也變成了使用ASM的數字格式**.266.123456
這是因為使用了OMF特性。
OMF,全稱是Oracle_Managed Files,即Oracle檔案管理。
使用OMF可以簡化管理員的管理工作,不用指定檔案的名字、大小、路徑,其名字,大小,路徑由oracle 自動分配。在刪除不再使用的日誌、資料、控制檔案時,OMF也可以自動刪除其對應的OS檔案。

Oracle資料庫是否啟用OMF特性可以通過檢視DB_CREATE_FILE_DEST引數來獲得。
當DB_CREATE_FILE_DEST引數值為空時表示未啟用OMF功能,設定為目錄名則是開啟OMF。
實驗資料庫版本:11.2.0.4.0,

一、啟用OMF時的資料檔案建立情況

1.主庫在指定磁碟組建立資料檔案,備庫會在DB_CREATE_FILE_DEST=+DG1指定的磁碟組建立

備庫引數
SQL> show parameter standby_file
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
standby_file_management              string      AUTO
SQL> show parameter DB_CREATE_FILE_DEST
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string      +DG1
SQL> col name for a50
SQL> set linesize 1000
SQL> select * from v$dbfile;
     FILE# NAME
---------- --------------------------------------------------
         1 +DG1/dg2/datafile/system.258.852146097
         2 +DG1/dg2/datafile/sysaux.257.852146099
         3 +DG1/dg2/datafile/undotbs1.256.852146101
         4 +DG1/dg2/datafile/users.259.852146107
         5 +DG2/dg/datafile/test1.dbf

主庫建立在DG2磁碟組建立表空間:
SQL> col name for a50
SQL> set linesize 1000
SQL> select * from v$dbfile;
     FILE# NAME
---------- --------------------------------------------------
         1 +DG1/dg/datafile/system.260.852134271
         2 +DG1/dg/datafile/sysaux.261.852134303
         3 +DG1/dg/datafile/undotbs1.262.852134329
         4 +DG1/dg/datafile/users.264.852134361
         5 +DG2/dg/datafile/test1.dbf
SQL> create tablespace test2 datafile '+DG2/dg/datafile/test2.dbf' size 10m;
Tablespace created.
SQL> alter system switch logfile;
System altered.
在備份庫上查詢表空間及資料檔案建立情況:在DB_CREATE_FILE_DEST指定的磁碟組+DG1中建立
SQL> select * from v$dbfile;
     FILE# NAME
---------- --------------------------------------------------
         1 +DG1/dg2/datafile/system.258.852146097
         2 +DG1/dg2/datafile/sysaux.257.852146099
         3 +DG1/dg2/datafile/undotbs1.256.852146101
         4 +DG1/dg2/datafile/users.259.852146107
         5 +DG2/dg/datafile/test1.dbf
         6 +DG1/dg2/datafile/test2.272.852147911

修改備庫DB_CREATE_FILE_DEST引數為+DG2:
SQL> SQL> show parameter DB_CREATE_FILE_DEST

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string      +DG2

在主庫建立表空間:
SQL> create tablespace test3 datafile '+DG1/dg/datafile/test3.dbf' size 10m;
Tablespace created.
SQL> alter system switch logfile;
System altered.
在備庫查詢:
SQL> select * from v$dbfile;
     FILE# NAME
---------- --------------------------------------------------
         1 +DG1/dg2/datafile/system.258.852146097
         2 +DG1/dg2/datafile/sysaux.257.852146099
         3 +DG1/dg2/datafile/undotbs1.256.852146101
         4 +DG1/dg2/datafile/users.259.852146107
         5 +DG2/dg/datafile/test1.dbf
         6 +DG1/dg2/datafile/test2.272.852147911
         7 +DG2/dg2/datafile/test3.260.852148535


 二、關閉OMF特性

修改備庫DB_CREATE_FILE_DEST引數為空,關閉OMF特性。--我這裡只關閉了備庫的
SQL> show parameter DB_CREATE_FILE_DEST
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string      +DG2
SQL> alter system set DB_CREATE_FILE_DEST='';
System altered.
SQL> show parameter DB_CREATE_FILE_DEST

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string
主庫做操作:
SQL> create tablespace test4 datafile '+DG1/dg/datafile/test4.dbf' size 10m;
Tablespace created.
SQL> create tablespace test5 datafile '+DG2/dg/datafile/test5.dbf' size 10m;
Tablespace created.
SQL> select * from v$dbfile;
     FILE# NAME
---------- --------------------------------------------------
         1 +DG1/dg/datafile/system.260.852134271
         2 +DG1/dg/datafile/sysaux.261.852134303
         3 +DG1/dg/datafile/undotbs1.262.852134329
         4 +DG1/dg/datafile/users.264.852134361
         5 +DG2/dg/datafile/test1.dbf
         6 +DG2/dg/datafile/test2.dbf
         7 +DG1/dg/datafile/test4.dbf
         8 +DG2/dg/datafile/test5.dbf
備庫做查詢:
SQL>  select * from v$dbfile;
     FILE# NAME
---------- --------------------------------------------------
         1 +DG1/dg2/datafile/system.258.852146097
         2 +DG1/dg2/datafile/sysaux.257.852146099
         3 +DG1/dg2/datafile/undotbs1.256.852146101
         4 +DG1/dg2/datafile/users.259.852146107
         5 +DG2/dg/datafile/test1.dbf
         6 +DG1/dg2/datafile/test2.272.852147911
         7 +DG1/dg/datafile/test4.dbf

         8 +DG2/dg/datafile/test5.dbf

三、觀察下ASM磁碟組中對於資料檔案別名的儲存形式

ASMCMD> ls -al
WARNING:option 'a' is deprecated for 'ls'
please use 'absolutepath'

Type      Redund  Striped  Time             Sys  Name
DATAFILE  UNPROT  COARSE   JUL 05 22:00:00  Y    none => SYSAUX.257.852146099
DATAFILE  UNPROT  COARSE   JUL 05 22:00:00  Y    none => SYSTEM.258.852146097
DATAFILE  UNPROT  COARSE   JUL 05 22:00:00  Y    none => TEST2.272.852147911
DATAFILE  UNPROT  COARSE   JUL 05 22:00:00  Y    +DG1/dg/datafile/test4.dbf => TEST4.279.852157365
DATAFILE  UNPROT  COARSE   JUL 05 22:00:00  Y    none => UNDOTBS1.256.852146101
DATAFILE  UNPROT  COARSE   JUL 05 22:00:00  Y    none => USERS.259.852146107

ASMCMD> ls -al
WARNING:option 'a' is deprecated for 'ls'
please use 'absolutepath'

Type      Redund  Striped  Time             Sys  Name
DATAFILE  UNPROT  COARSE   JUL 05 22:00:00  Y    +DG2/dg/datafile/test1.dbf => TEST1.256.852146103
DATAFILE  UNPROT  COARSE   JUL 05 22:00:00  Y    +DG2/dg/datafile/test5.dbf => TEST5.260.852157413

四、為ASM中SYSTEM表空間使用別名

比如上面建立的表空間test4其對應的資料檔案TEST4.DBF是一個別名,真實的資料檔案與別名的對應是:+DG1/dg/datafile/test4.dbf => TEST4.279.852157365

,然而(system,undotbs,sysaux,users)對應的都是真實的資料檔案,沒有別名,這時如果要對這些表空間使用別名,就需要重建控制檔案。示例如下:

alter diskgroup dg1 add alias '+DG1/dg2/datafile/SYSTEM1.DBF' FOR '+DG1/dg2/datafile/system.258.852146097';
此時ASMCMD中檢視:
ASMCMD> ls -al
WARNING:option 'a' is deprecated for 'ls'
please use 'absolutepath'
Type      Redund  Striped  Time             Sys  Name
DATAFILE  UNPROT  COARSE   JUL 05 23:00:00  Y    none => SYSAUX.257.852146099
DATAFILE  UNPROT  COARSE   JUL 05 23:00:00  Y    +DG1/DG2/DATAFILE/SYSTEM1.DBF => SYSTEM.258.852146097
                                            N    SYSTEM1.DBF => +DG1/DG2/DATAFILE/SYSTEM.258.852146097

SQL> startup nomount;
ORACLE instance started.
Total System Global Area  418484224 bytes
Fixed Size                  1365040 bytes
Variable Size             255855568 bytes
Database Buffers          155189248 bytes
Redo Buffers                6074368 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "DG" RESETLOGS FORCE LOGGING ARCHIVELOG …………
重建控制檔案完成後資料庫是MOUNT狀態,此時查詢:                                           
SQL> select * from v$dbfile;
     FILE# NAME
---------- --------------------------------------------------
         8 +DG2/dg/datafile/test5.dbf
         7 +DG1/dg/datafile/test4.dbf
         6 +DG1/dg2/datafile/test2.272.852147911
         5 +DG2/dg/datafile/test1.dbf
         4 +DG1/dg2/datafile/users.259.852146107
         3 +DG1/dg2/datafile/undotbs1.256.852146101
         2 +DG1/dg2/datafile/sysaux.257.852146099
         1 +DG1/dg2/datafile/system1.dbf


相關文章