【真实经验分享】Grid管理仓库 (GIMR/MGMTDB) 迁移重建实战指南

Grid管理仓库 (GIMR/MGMTDB) 迁移重建实战指南

适用场景 :需要将 Oracle GI 管理仓库 (MGMTDB) 迁移至另一个 ASM 磁盘组

适用版本:本文以 12.1.0.2 为例,仅适用于12.1.0.2


一、前言

某客户MGMTDB数据库空间占了OCR磁盘组的大量空间,目前OCR磁盘组无法扩展,根据现状,制定的方案是将MGMTDB数据库重建到其他磁盘组。


二、操作前必读

2.1 重要警告

⚠️ 此操作不会保留MGMTDB数据库的历史数据!

如需备份现有数据,请在 grid 用户下任意节点执行:

bash 复制代码
$ <GI_HOME>/bin/oclumon dumpnodeview -allnodes -v > <backup-file>

与客户沟通,MGMTDB中的数据不重要,无需备份、保留,直接重建即可。

2.2 关键原则

  • 不要手动停止 ora.mgmtlsnr 或 ora.mgmtdb 资源,否则会导致后续删除步骤失败
  • 操作涉及 root 和 grid 两个用户,注意切换
  • 12.1.0.2 版本需要将 MGMTDB 重建为 CDB (容器数据库),并创建对应的 PDB

三、详细操作步骤

步骤 1:确认当前环境信息

以 grid 用户登录,确认 MGMTDB 实例和 PDB 状态:

bash 复制代码
su - grid

# 查看 MGMTDB 实例进程
ps -ef | grep smon | grep MGMTDB

# 设置环境变量并登录
export ORACLE_SID=-MGMTDB
sqlplus / as sysdba

# 查看 PDB 状态,记录 PDB_NAME(后续创建时需要用到)
SQL> show pdbs;

同时通过以下命令确认 MGMTDB 运行在哪个节点:

bash 复制代码
srvctl status mgmtdb

步骤 2:停止并禁用 ora.crf 资源

以 root 用户在每个节点上执行:

bash 复制代码
cd /u01/app/12.1.0.2.0/grid/bin

# 停止 ora.crf
./crsctl stop res ora.crf -init

# 禁用 ora.crf,防止自动重启
./crsctl modify res ora.crf -attr ENABLED=0 -init

# 确认资源状态
./crsctl stat res -t -init

ora.crf 资源依赖 MGMTDB,必须先停掉才能安全删除数据库。


步骤 3:删除现有的 -MGMTDB

以 grid 用户 在 MGMTDB 实际运行的节点上执行:

bash 复制代码
cd $ORACLE_HOME/bin

# 静默删除管理数据库
./dbca -silent -deleteDatabase -sourceDB -MGMTDB

删除过程约需几分钟,最后会提示查看日志文件。

如果 MGMTDB 无法正常启动导致 dbca 失败,可手动清理:

  • 使用 OS 命令删除 MGMTDB 相关物理文件
  • 清除 oratab 中的条目
  • 使用 srvctl remove mgmtdb 移除资源注册

步骤 4:重建 MGMTDB (仅适用于12.1.0.2)

以 grid 用户 在任意节点执行。12.1.0.2 版本必须创建为 容器数据库 (CDB):

存储在 ASM 磁盘组
bash 复制代码
cd /u01/app/12.1.0.2.0/grid/bin

./dbca -silent -createDatabase \
  -sid -MGMTDB \
  -createAsContainerDatabase true \
  -templateName MGMTSeed_Database.dbc \
  -gdbName _mgmtdb \
  -storageType ASM \
  -diskGroupName +FRD \
  -datafileJarLocation $ORACLE_HOME/assistants/dbca/templates \
  -characterset AL32UTF8 \
  -autoGeneratePasswords \
  -skipUserTemplateCheck

💡 建议 :建议将该磁盘组的 compatible.asm 和 compatible.rdbms 属性均设置为 12.1。


步骤 5:创建 PDB

重建后的 MGMTDB 是 CDB,需要为集群创建一个对应的 PDB。

首先确认集群名称:

bash 复制代码
cemutlo -n

注意 :集群名称中的连字符 - 必须替换为下划线 _。

然后执行 PDB 创建:

bash 复制代码
dbca -silent -createPluggableDatabase \
  -sourceDB -MGMTDB \
  -pdbName <CLUSTER_NAME> \
  -createPDBFrom RMANBACKUP \
  -PDBBackUpfile $ORACLE_HOME/assistants/dbca/templates/mgmtseed_pdb.dfb \
  -PDBMetadataFile $ORACLE_HOME/assistants/dbca/templates/mgmtseed_pdb.xml \
  -createAsClone true

创建完成后,建议再次登录 SQL*Plus 确认 PDB 状态:

bash 复制代码
export ORACLE_SID=-MGMTDB
sqlplus / as sysdba
SQL> show pdbs;

步骤 6:验证与配置

确认 MGMTDB 运行节点:

bash 复制代码
srvctl status MGMTDB

在 MGMTDB 运行的节点上,执行安全配置脚本:

bash 复制代码
$ <GI_HOME>/bin/mgmtca

执行无报错即表示管理数据库配置成功。


步骤 7:启用并启动 ora.crf

以 root 用户 在每个节点恢复 ora.crf 资源:

bash 复制代码
cd /u01/app/12.1.0.2.0/grid/bin

# 启用资源
./crsctl modify res ora.crf -attr ENABLED=1 -init

# 启动资源
./crsctl start res ora.crf -init
相关推荐
要开心吖ZSH1 小时前
一次线上锁风暴复盘:号源表大范围 DELETE 的隐患与分批删除改造
数据库·mysql·行锁·1024程序员节·间隙锁·lockwaittimeout
l1t2 小时前
在windows中测试musql数据库
数据库·sqlite·go·1024程序员节
鬼手点金3 小时前
从 API 消息到模型 Token:Chat Template
java·前端·javascript·数据库·人工智能·深度学习·1024程序员节
CRMEB系统商城3 小时前
Redis + 消息队列 + 连接池:CRMEB PRO 性能优化的三驾马车
大数据·数据库·人工智能·小程序·php·1024程序员节
鸽芷咕3 小时前
KingbaseES SQL 调优六步法:定位、诊断、下药、验证,一步都别省
数据库
黄俊懿4 小时前
【架构师从入门到进阶】第七章:缓存和存储的优化思路——第一节:缓存概述
数据结构·数据库·分布式·缓存·架构·系统架构·1024程序员节
John_Hui4 小时前
MySQL 进阶知识
数据库·sql·mysql·1024程序员节
java_nnnn4 小时前
Redis 核心特性与应用场景:从底层原理到分布式系统应用
数据库·redis·1024程序员节
Random Glow4 小时前
一条 SQL 从输入到返回,中间经历了什么
数据库·后端·mysql·性能优化·innodb·1024程序员节
何中应4 小时前
MySQL 连接驱动单独下载的两种方式
数据库·mysql·maven