大家好,这里是公众号 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
Oracle 如何修改 db_unique_name?强迫症福音!
8天前

评论
Oracle 如何修改 db_unique_name?强迫症福音!
9天前

评论
Oracle 如何修改 db_unique_name?强迫症福音!
9天前

评论
Oracle 如何修改 db_unique_name?强迫症福音!
12天前

评论
对很多人来说,去爬一座山,最困难的并不是攀登的过程,而是在山脚下的焦虑和恐惧。消极的人会为想象中的崎岖山路愁容满面,积极的人却会构思每一段路要怎么安排,可以在哪里适当地休息补给。
13天前

评论
1111
15天前

评论
查看更多 >
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1216次阅读
2025-03-13 11:40:53
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
739次阅读
2025-03-17 11:33:53
Oracle+Deepseek+Dify 实现数据库数据实时分析
bicewow
648次阅读
2025-03-06 09:41:49
【ORACLE】ORACLE19C在19.13版本前的一个严重BUG-24761824
DarkAthena
541次阅读
2025-03-04 14:33:31
Oracle避坑指南|同名表导出难题:如何精准排除指定用户下的表?
szrsu
502次阅读
2025-03-05 00:42:34
Ogg23ai高手必看-MySQL Innodb Cluster跟oracle的亲密接触
曹海峰
437次阅读
2025-03-04 21:56:13
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
436次阅读
2025-03-13 14:38:19
【ORACLE】char类型和sql优化器发生的“错误”反应
DarkAthena
398次阅读
2025-03-04 23:05:01
什么,oracle 主机用户被删了?原来是虚惊一场!
Lucifer三思而后行
393次阅读
2025-03-03 21:12:09
Oracle数据库,误删除数据文件,无任何备份情况下,完全恢复只需3步?
陈举超
320次阅读
2025-03-03 21:22:34