重庆思庄Oracle、、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1227|回复: 0
打印 上一主题 下一主题

[Oracle] Oracle 如何修改 db_unique_name

[复制链接]
跳转到指定楼层
楼主
发表于 2025-3-16 15:25:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前言
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
可以看到临时表空间文件路径已经切换。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2025-5-18 04:12 , Processed in 0.093526 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表