暂无图片
暂无图片
11
暂无图片
暂无图片
7
暂无图片

Oracle 如何修改 db_unique_name?强迫症福音!

原创 Lucifer三思而后行 2025-03-12
322

大家好,这里是公众号 DBA学习之路,分享一些学习国产数据库路上的知识和经验。

目录

前言

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:

-- 查看当前 db_unique_name SQL> show parameter db_unique_name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_unique_name string lucifer -- 修改 db_unique_name 为 luciferdg SQL> 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 bytes Database Buffers 4412407808 bytes Redo Buffers 7868416 bytes Database mounted. Database opened. -- 查看修改后的 db_unique_name SQL> show parameter db_unique_name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_unique_name string LUCIFERDG
复制

查看参数文件是否已经更新:

[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

生成参数文件

查看当前参数文件位置,生成本地参数文件:

SQL> show parameter pfile -- 如果存在 /u01/app/oracle/product/12.1.0/db/dbs/initlucifer.ora 文件,建议手动备份一下 SQL> create pfile='/u01/app/oracle/product/12.1.0/db/dbs/initlucifer.ora' from spfile;
复制

移除原数据库资源

关闭并且移除数据库资源:

$ srvctl stop database -d lucifer $ srvctl remove database -d lucifer
复制

修改参数文件

手工修改参数文件中的 db_unique_name:

*.db_unique_name=luciferdg
复制

如果存在 db_domain 配置,也需要修改(我这里没有配置,不做修改):

## *.db_domain=<domain>
复制

启动数据库实例

在主节点手动启动数据库实例:

-- 这里默认使用开始创建的 initlucifer.ora 参数文件启动 SQL> Startup; -- 检查 global_name SQL> select * from global_name;
复制

重新创建参数文件到 ASM 磁盘中:

SQL> create spfile='+DATA/LUCIFERDG/spfilelucifer.ora' from pfile;
复制

添加新数据库资源

重新添加数据库资源到集群中:

$ 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
复制

重启数据库实例:

$ srvctl start database -d luciferdg
复制

在线移动数据文件

切换数据文件路径:

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;
复制

切换控制文件

备份控制文件:

SQL> alter database backup controlfile to '/home/oraprod/lucifer.ctl';
复制

RMAN 还原控制文件:

RMAN> restore controlfile to '+DATA' from '+DATA/LUCIFER/CONTROLFILE/current.261.1192804305';
复制

更新spfile控制文件参数:

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 日志

-- 查看在线日志 SQL> set line2222 pages1000 select * from v$log; -- 新增临时在线日志 SQL> alter database add logfile thread 1 group 5 size 100M, group 6 size 100M; alter database add logfile thread 2 group 7 size 100M, group 8 size 100M; -- 切换日志 alter system archive log current; alter system checkpoint; -- 删掉错误路径的日志文件(确保日志状态为 INACTIVE) 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 100M, group 2 size 100M; alter database add logfile thread 2 group 3 size 100M, group 4 size 100M; -- 删除临时在线日志(确保日志状态为 INACTIVE) 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 a100 select 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
复制

可以看到在线日志的路径已经切换到新的目录。

重建临时表空间

-- 查看当前默认临时表空间 SQL> col PROPERTY_NAME for a30 col PROPERTY_VALUE for a20 SELECT 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 a100 select file_name from dba_temp_files where tablespace_name = 'TEMP'; FILE_NAME ---------------------------------------------------------------------------------------------------- +DATA/LUCIFER/TEMPFILE/temp.264.1192804321 -- 创建临时的临时表空间 tempdata create temporary tablespace tempdata tempfile '+DATA' size 1G autoextend on; -- 切换默认临时表空间为临时的临时表空间 alter database default temporary tablespace tempdata; -- 删除原始临时表空间 temp drop tablespace temp including contents and datafiles cascade constraints; -- 重建原始临时表空间 temp create temporary tablespace temp tempfile '+DATA' size 1G autoextend on; -- 切换默认临时表空间为原始临时表空间 TEMP alter database default temporary tablespace temp; --删除临时表空间 drop tablespace tempdata including contents and datafiles cascade constraints; -- 新增临时表空间 temp 数据文件(根据原始临时表空间文件数量来新增) -- alter tablespace temp add tempfile '+DATA' size 1g autoextend on; -- 检查默认临时表空间以及文件路径 SQL> col PROPERTY_NAME for a30 col PROPERTY_VALUE for a20 SELECT 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 a100 select file_name from dba_temp_files where tablespace_name = 'TEMP'; FILE_NAME ---------------------------------------------------------------------------------------------------- +DATA/LUCIFERDG/TEMPFILE/temp.264.1195466599
复制

可以看到临时表空间文件路径已经切换。


参考 MOS 文章:

最后修改时间:2025-03-17 10:48:07
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

鲁鲁
暂无图片
8天前
评论
暂无图片 0
Oracle 如何修改 db_unique_name?强迫症福音!
8天前
暂无图片 点赞
评论
淡定
暂无图片
9天前
评论
暂无图片 0
Oracle 如何修改 db_unique_name?强迫症福音!
9天前
暂无图片 点赞
评论
luyingjun
暂无图片
9天前
评论
暂无图片 0
Oracle 如何修改 db_unique_name?强迫症福音!
9天前
暂无图片 点赞
评论
芃芃
暂无图片
12天前
评论
暂无图片 0
Oracle 如何修改 db_unique_name?强迫症福音!
12天前
暂无图片 点赞
评论
筱悦星辰
暂无图片
13天前
评论
暂无图片 0
对很多人来说,去爬一座山,最困难的并不是攀登的过程,而是在山脚下的焦虑和恐惧。消极的人会为想象中的崎岖山路愁容满面,积极的人却会构思每一段路要怎么安排,可以在哪里适当地休息补给。
13天前
暂无图片 点赞
评论
手机用户2163
暂无图片
15天前
评论
暂无图片 0
1111
15天前
暂无图片 点赞
评论
查看更多 >