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 这个磁盘组,因此重命名过程不会有数据被修改,因此不需要额外的同步。
: