ASM管理 - 如何重新命名diskgroup
ASM 11.2.0.1 版本開始增加了diskgroup重新命名的新功能,通過renamedg命令重新命名已經建立的diskgroup,重新命名前需要先dismount diskgroup。
如果重新命名的diskgroup已經用於儲存資料庫的資料檔案,那麼需要手動同步資料檔案的位置。
--檢查ASM diskgroup當前名字為DGASMDB
$ su - grid
$ sqlplus / as sysasm
SQL> select GROUP_NUMBER,name,state,type, offline_disks, ALLOCATION_UNIT_SIZE,BLOCK_SIZE,TOTAL_MB,FREE_MB from v$asm_diskgroup;
GROUP_NUMBER NAME STATE TYPE OFFLINE_DISKS ALLOCATION_UNIT_SIZE BLOCK_SIZE TOTAL_MB FREE_MB
------------ ---------- -------- ------ ------------- -------------------- ---------- ---------- ----------
1 DGASMDB MOUNTED EXTERN 0 1048576 4096 3992 1879
--檢查資料庫當前資訊(spfile/controlfile/datafile/redo)
su - Oracle
$ sqlplus / as sysdba
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DGASMDB/asmdb/spfileasmdb.ora
SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string +DGASMDB/asmdb/controlfile/current.256.856653049
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
+DGASMDB/asmdb/datafile/system.260.856653053
+DGASMDB/asmdb/datafile/sysaux.261.856653059
+DGASMDB/asmdb/datafile/undotbs1.262.856653061
+DGASMDB/asmdb/datafile/users.264.856653075
+DGASMDB/asmdb/datafile/asm_test.dbf
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
--dismount diskgroup dgasmdb
$ su - grid
$ asmcmd umount dgasmdb
--重命令diskgroup,新的diskgroup名為dgasmdb_new
$ renamedg phase=both dgname=dgasmdb newdgname=dgasmdb_new verbose=true
Parsing parameters..
Parameters in effect:
Old DG name : DGASMDB
New DG name : DGASMDB_NEW
Phases :
Phase 1
Phase 2
Discovery str : (null)
Clean : TRUE
Raw only : TRUE
renamedg operation: phase=both dgname=dgasmdb newdgname=dgasmdb_new verbose=true
Executing phase 1
Discovering the group
Performing discovery with string:
Identified disk ASM:/opt/oracle/extapi/64/asm/orcl/1/libasm.so:ORCL:ASMDISK4G1 with disk number:0 and timestamp (33006423 142494720)
Checking for hearbeat...
Re-discovering the group
Performing discovery with string:
Identified disk ASM:/opt/oracle/extapi/64/asm/orcl/1/libasm.so:ORCL:ASMDISK4G1 with disk number:0 and timestamp (33006423 142494720)
Checking if the diskgroup is mounted or used by CSS
Checking disk number:0
Generating configuration file..
Completed phase 1
Executing phase 2
Looking for ORCL:ASMDISK4G1
Modifying the header
Completed phase 2
Terminating kgfd context 0x7fa6c2bee0a0
--mount新的diksgroup dgasmdb_new
$ asmcmd mount dgasmdb_new
--查看新的diskgroup資訊
SQL> select GROUP_NUMBER,name,state,type, offline_disks, ALLOCATION_UNIT_SIZE,BLOCK_SIZE,TOTAL_MB,FREE_MB from v$asm_diskgroup;
GROUP_NUMBER NAME STATE TYPE OFFLINE_DISKS ALLOCATION_UNIT_SIZE BLOCK_SIZE TOTAL_MB FREE_MB
------------ ----------- -------- ------ ------------- -------------------- ---------- ---------- ----------
1 DGASMDB_NEW MOUNTED EXTERN 0 1048576 4096 3992 1879
--修改DB 初始化參數(/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initasmdb.ora)配置資訊
原來:SPFILE='+DGASMDB/asmdb/spfileasmdb.ora'
修改後:SPFILE='+DGASMDB_NEW/asmdb/spfileasmdb.ora'
--啟動資料庫nomount
su - oracle
sqlplus / as sysdba
startup nomount;
--修改control_files參數:
SQL> alter system set control_files='+DGASMDB_NEW/asmdb/controlfile/current.256.856653049' scope=spfile;
SQL> shutdown immediate;
SQL> startup mount;
SQL> show parameter control_files
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string +DGASMDB_NEW/asmdb/controlfile
/current.256.856653049
--確認目前記錄的datafile還是位於原來diskgroup DGASMDB
SQL> select FILE#,name from v$datafile;
FILE# NAME
---------- ----------------------------------------------------------------------------------------------------
1 +DGASMDB/asmdb/datafile/system.260.856653053
2 +DGASMDB/asmdb/datafile/sysaux.261.856653059
3 +DGASMDB/asmdb/datafile/undotbs1.262.856653061
4 +DGASMDB/asmdb/datafile/users.264.856653075
5 +DGASMDB/asmdb/datafile/asm_test.dbf
SQL> select file#, name from v$tempfile;
FILE# NAME
---------- --------------------------------------------------------------------------------
1 +DGASMDB/asmdb/tempfile/temp.263.856653061
--修改datafile/tempfile位置:
SQL> conn / as sysdba
SQL> ALTER DATABASE RENAME FILE '+DGASMDB/asmdb/datafile/system.260.856653053' TO '+DGASMDB_NEW/asmdb/datafile/system.260.856653053';
SQL> ALTER DATABASE RENAME FILE '+DGASMDB/asmdb/datafile/sysaux.261.856653059' TO '+DGASMDB_NEW/asmdb/datafile/sysaux.261.856653059';
SQL> ALTER DATABASE RENAME FILE '+DGASMDB/asmdb/datafile/undotbs1.262.856653061' TO '+DGASMDB_NEW/asmdb/datafile/undotbs1.262.856653061';
SQL> ALTER DATABASE RENAME FILE '+DGASMDB/asmdb/datafile/users.264.856653075' TO '+DGASMDB_NEW/asmdb/datafile/users.264.856653075';
SQL> ALTER DATABASE RENAME FILE '+DGASMDB/asmdb/datafile/asm_test.dbf' TO '+DGASMDB_NEW/asmdb/datafile/asm_test.dbf';
SQL> ALTER DATABASE RENAME FILE '+DGASMDB/asmdb/tempfile/temp.263.856653061' TO '+DGASMDB_NEW/asmdb/tempfile/temp.263.856653061';
--修改後確認:
SQL> select FILE#,name from v$datafile;
FILE# NAME
---------- ----------------------------------------------------------------------------------------------------
1 +DGASMDB_NEW/asmdb/datafile/system.260.856653053
2 +DGASMDB_NEW/asmdb/datafile/sysaux.261.856653059
3 +DGASMDB_NEW/asmdb/datafile/undotbs1.262.856653061
4 +DGASMDB_NEW/asmdb/datafile/users.264.856653075
5 +DGASMDB_NEW/asmdb/datafile/asm_test.dbf
--修改redo log位置
alter database rename file '+DGASMDB/asmdb/onlinelog/group_1.257.856653049' to '+DGASMDB_NEW/asmdb/onlinelog/group_1.257.856653049';
alter database rename file '+DGASMDB/asmdb/onlinelog/group_2.258.856653051' to '+DGASMDB_NEW/asmdb/onlinelog/group_2.258.856653051';
alter database rename file '+DGASMDB/asmdb/onlinelog/group_3.259.856653051' to '+DGASMDB_NEW/asmdb/onlinelog/group_3.259.856653051';
select * from v$logfile;
--啟動資料庫
SQL> alter database open;
重新命名diskgroup後,對資料庫有什麼影響?如何同步資料?
重新命名diskgroup前,需要先手動dismount 這個磁碟組,因此重新命名過程不會有資料被修改,因此不需要額外的同步。