当前位置: 首页 > news >正文

非容器数据库(non-CDB)迁移为可插拔数据库(PDB)步骤

非容器数据库(non-CDB)迁移为可插拔数据库(PDB)步骤

1. 源库 noncdb1 预处理

(1) 检查兼容性(在 noncdb1 执行)

SELECT name, value FROM v$parameter
WHERE name IN ('compatible', 'enable_pluggable_database');
  • 确保 compatible 参数版本与目标 CDB 兼容。
  • 确认 enable_pluggable_database 为 TRUE。

(2) 验证字符集(必须与目标 CDB 一致)

SELECT * FROM v$database_parameters
WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
  • 确保字符集与目标 CDB 一致,否则需调整。

(3) 开启归档模式(如果未启用)

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
  • 验证归档模式是否成功启用:
    SELECT log_mode FROM v$database;
    • 应显示 ARCHIVELOG。

2. 生成 PDB 元数据

(1) 生成 XML 描述文件(需要 SYSDBA 权限)

BEGINDBMS_PDB.DESCRIBE(pdb_descr_file => '/tmp/noncdb1.xml');
END;
/
  • 该文件将描述 noncdb1 的元数据。

(2) 关闭数据库

这里可以在关库的状态下dump,也可以在read only模式下,不过总体来说这里还是有限制的

目的是为了保持数据的一致性。

SHUTDOWN IMMEDIATE;

3. 数据传输准备

(1) 获取数据文件和日志文件列表(在 noncdb1 执行)

SELECT name FROM v$datafile;
SELECT member FROM v$logfile;
  • 记录所有数据文件和重做日志文件路径。

(2) 打包关键文件

包括生成的pdb xml文件还有所有的数据文件和redolog文件

tar czvf noncdb1_files.tar.gz \/tmp/noncdb1.xml \/oradata/noncdb1/oradata/*.dbf \/oradata/noncdb1/redolog/*.log
  • 根据实际情况调整文件路径。

(3) 传输到目标 CDB 主机

scp noncdb1_files.tar.gz oracle@<cdb_host>:/oracle/pdb_transfer/
  • 将打包文件传输到目标 CDB 主机(<cdb_host> 替换为实际目标主机地址)。

4. 目标 CDB 操作(pdb1)

(1) 将文件放置到与源库相同的路径

  • 解压文件到目标路径:
    tar xzvf /oracle/pdb_transfer/noncdb1_files.tar.gz -C /oradata/
  • 确保数据文件和日志文件路径与源库一致,例如 /oradata/noncdb1/oradata/*.dbf。
  • 关键点:需要在目标库创建和源库一样的文件路径,并将数据库文件和redo log恢复到和源库一致的路径
  • 如果不一致 就会报错,这点非常关键。

(2) 创建 PDB(SYSDBA 执行)

CREATE PLUGGABLE DATABASE pdb1
USING '/oracle/pdb_transfer/noncdb1.xml'
FILE_NAME_CONVERT=('/oradata/noncdb1/','/oradata/pdb1/'
);
  • 将源库文件路径 /oradata/noncdb1/ 转换为目标路径 /oradata/pdb1/。

(3) 检查状态

SELECT name, open_mode FROM v$pdbs WHERE name = 'PDB1';
  • 确保状态为 MOUNTED。

(4) 同步 PDB(关键步骤)

这是将non-cdb转化为cdb的关键步骤

ALTER PLUGGABLE DATABASE pdb1 OPEN UPGRADE;
ALTER SESSION SET CONTAINER = pdb1;
@?/rdbms/admin/noncdb_to_pdb.sql
  • 执行 noncdb_to_pdb.sql 脚本以完成非 CDB 到 PDB 的转换。

(5) 重新编译无效对象

ALTER SESSION SET CONTAINER = pdb1;
@?/rdbms/admin/utlrp.sql

(6) 打开 PDB 为读写模式

ALTER PLUGGABLE DATABASE pdb1 OPEN READ WRITE;

5. 迁移后验证

(1) 检查 PDB 运行状态

SELECT name, open_mode FROM v$pdbs;
  • 确保 PDB1 状态为 READ WRITE。

(2) 验证数据完整性

ALTER SESSION SET CONTAINER = pdb1;
SELECT COUNT(*) FROM dba_tables;
  • 确认表数量与源库一致。

(3) 测试用户连接

CREATE USER testuser IDENTIFIED BY Password;
GRANT CREATE SESSION TO testuser;
  • 验证新用户是否能正常连接。

(4) 更新补丁(如果有)

  • 如果你打了补丁 这一步必须做,不然你的pdb的状态会是受限的,记得执行这一步时确保pdb是open状态
  • 如果目标 CDB 有补丁未应用,执行:
    $ORACLE_HOME/OPatch/datapatch -verbose
  • 确保 PDB 不受补丁限制。
http://www.dtcms.com/a/352757.html

相关文章:

  • GPIO推挽和开漏的名称由来和本质含义
  • 数学建模模型
  • 【Linux】Docker洞察:掌握docker inspect命令与Go模板技巧
  • Oracle中快速排查存储过程问题
  • LeetCode - 739. 每日温度
  • 《金融对账系统雪崩隐患的深度复盘与架构重生》
  • 数据库服务-日志管理-备份与恢复-主从同步
  • 项目经验处理
  • 获取服务器指标的信息
  • 幂等性设计艺术:在分布式重试风暴中构筑坚不可摧的防线
  • 大批量查询数据库大字段导致OOM问题
  • TCP服务端并发模型
  • 第5章 Excel公式与函数应用指南(4):日期和时间函数
  • Paimon——官网阅读:主键表
  • 计算神经科学数学建模编程深度前沿方向研究(下)
  • 【C++】类型系统:内置类型与自定义类型的对比
  • super(msg)层层上抛
  • 数据结构青铜到王者第七话---队列(Queue)
  • 基于Spring Boot的考研辅导知识共享平台-项目分享
  • Node.js 多版本管理工具 nvm 的安装与使用教程(含镜像加速与常见坑)
  • 计算机组成原理实验报告
  • Kafka架构以及组件讲解
  • 【Kafka】重点概念和架构总结
  • Unity 串口通信
  • 解开 Ansible 任务复用谜题:过滤器用法、Include/Import 本质差异与任务文件价值详解
  • Writer-你的私人内容创作助手
  • TCP并发服务器构建
  • TensorFlow 深度学习 | Layer 基础知识介绍
  • 浅谈Elasticsearch数据写入流程的refresh和flush操作
  • 智能一卡通系统通过集成身份识别、权限管理、数据联动等技术,实现多场景一体化管理。以下是多奥基于最新技术趋势和应用案例的系统解析