前言 Oracle 数据库有 db_name 和 db_unique_name 的区别,在搭建 DG 的时候,要求主备的 db_unique_name 必须不一致,所以我们通过 DG 的方式迁移数据库后,通过切换后新的主库 db_unique_name 会与原主库不一致。
这时候,如果想修改 db_unique_name,该怎么做呢?
通常是切换成功后,手动修改新主库的 db_unique_name:
单机 :直接 alter system(scope=spfile)修改,重启数据库会自动更新对应参数文件。
RAC :比较复杂,本文会详细介绍。
单机 首先,在数据库中修改 db_unique_name:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 SQL > show parameter db_unique_nameNAME TYPE VALUE db_unique_name string luciferSQL > alter system set db_unique_name=luciferdg scope=spfile;System altered.SQL > shu immediate Database closed.Database dismounted. ORACLE instance shut down.SQL > startup ORACLE instance started. Total System Global Area 5351930904 bytes Fixed Size 8907800 bytes Variable Size 922746880 bytesDatabase Buffers 4412407808 bytes Redo Buffers 7868416 bytesDatabase mounted.Database opened.SQL > show parameter db_unique_nameNAME TYPE VALUE db_unique_name string LUCIFERDG
查看参数文件是否已经更新:
1 2 3 [oracle@orcl19c :/home/oracle ]$ cd $ORACLE_HOME /dbs [oracle@orcl19c :/u01/app/oracle/product/ 19.3 .0 /db/dbs]$ strings spfilelucifer.ora | grep db_unique_name *.db_unique_name='LUCIFERDG'
单机数据库修改成功。
RAC 生成参数文件 查看当前参数文件位置,生成本地参数文件:
1 2 3 SQL> show parameter pfile -- 如果存在 /u01/app/oracle/product/12.1 .0 /db/dbs/initlucifer.ora 文件,建议手动备份一下 SQL> create ;
移除原数据库资源 关闭并且移除数据库资源:
1 2 $ srvctl stop database -d lucifer $ srvctl remove database -d lucifer
修改参数文件 手工修改参数文件中的 db_unique_name:
1 *.db_unique_name =luciferdg
如果存在 db_domain 配置,也需要修改(我这里没有配置,不做修改):
启动数据库实例 在主节点手动启动数据库实例:
1 2 3 4 5 SQL > Startup;SQL > select * from global_name;
重新创建参数文件到 ASM 磁盘中:
1 SQL > create spfile= '+DATA/LUCIFERDG/spfilelucifer.ora' from pfile;
添加新数据库资源 重新添加数据库资源到集群中:
1 2 3 $ srvctl add database -db luciferdg -dbname lucifer -oraclehome $ORACLE_HOME -dbtype RAC -spfile +DATA/LUCIFERDG/spfilelucifer.ora -diskgroup DATA $ srvctl add instance -d luciferdg -i lucifer1 -n rac01 $ srvctl add instance -d luciferdg -i lucifer2 -n rac02
重启数据库实例:
1 $ srvctl start database -d luciferdg
在线移动数据文件 切换数据文件路径:
1 2 3 4 5 6 7 8 9 SQL > SELECT 'ALTER DATABASE MOVE DATAFILE ' || file_id || ';' FROM dba_data_files;'ALTERDATABASEMOVEDATAFILE' ||FILE_ID||';' ALTER DATABASE MOVE DATAFILE 1 ;ALTER DATABASE MOVE DATAFILE 3 ;ALTER DATABASE MOVE DATAFILE 5 ;ALTER DATABASE MOVE DATAFILE 6 ;ALTER DATABASE MOVE DATAFILE 4 ;
切换控制文件 备份控制文件:
1 SQL > alter database backup controlfile to '/home/oraprod/lucifer.ctl' ;
RMAN 还原控制文件:
1 RMAN> restore controlfile to '+DATA' from '+DATA/LUCIFER/CONTROLFILE/current.261.1192804305' ;
更新spfile控制文件参数:
1 2 SQL> alter system set control_files ='+DATA/LUCIFERDG/CONTROLFILE/current.260.1195424101' scope =spfile sid ='*' ; -- alter system set control_files ='+DATA/LUCIFERDG/CONTROLFILE/current.260.1195424101' ,'+DATADG3/RACDB/CONTROLFILE/current.258.1110065841' scope =spfile sid ='*' ;
重建 REDO 日志 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 SQL > set line2222 pages1000select * from v$log ;SQL > alter database add logfile thread 1 group 5 size 100 M,group 6 size 100 M;alter database add logfile thread 2 group 7 size 100 M,group 8 size 100 M;alter system archive log current ;alter system checkpoint ;SQL > alter database drop logfile group 1 ;alter database drop logfile group 2 ;alter database drop logfile group 3 ;alter database drop logfile group 4 ;SQL > alter database add logfile thread 1 group 1 size 100 M,group 2 size 100 M;alter database add logfile thread 2 group 3 size 100 M,group 4 size 100 M;SQL > alter database drop logfile group 5 ;alter database drop logfile group 6 ;alter database drop logfile group 7 ;alter database drop logfile group 8 ;SQL > col member for a100select member from v$logfile; MEMBER +DATA/LUCIFERDG/ONLINELOG/group_1.266 .1195465603 +DATA/LUCIFERDG/ONLINELOG/group_2.262 .1195465611 +DATA/LUCIFERDG/ONLINELOG/group_3.276 .1195465617 +DATA/LUCIFERDG/ONLINELOG/group_4.277 .1195465627
可以看到在线日志的路径已经切换到新的目录。
重建临时表空间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 SQL > col PROPERTY_NAME for a30 col PROPERTY_VALUE for a20SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE' ; PROPERTY_NAME PROPERTY_VALUE DEFAULT_TEMP_TABLESPACE TEMP SQL > col file_name for a100select file_name from dba_temp_files where tablespace_name = 'TEMP' ; FILE_NAME +DATA/LUCIFER/TEMPFILE/temp .264 .1192804321 create temporary tablespace tempdata tempfile '+DATA' size 1 G autoextend on ;alter database default temporary tablespace tempdata;drop tablespace temp including contents and datafiles cascade constraints;create temporary tablespace temp tempfile '+DATA' size 1 G autoextend on ;alter database default temporary tablespace temp ;drop tablespace tempdata including contents and datafiles cascade constraints;SQL > col PROPERTY_NAME for a30 col PROPERTY_VALUE for a20SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE' ; PROPERTY_NAME PROPERTY_VALUE DEFAULT_TEMP_TABLESPACE TEMP SQL > col file_name for a100select file_name from dba_temp_files where tablespace_name = 'TEMP' ; FILE_NAME +DATA/LUCIFERDG/TEMPFILE/temp .264 .1195466599
可以看到临时表空间文件路径已经切换。
参考 MOS 文章: