暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle Non-CDB 转换成 PDB

原创 Albert 2025-02-08
396

前言

继11g后12C中,Oracle 由原本 Single 实例进行多路演化,推出 CDB 架构,单个CDB容器在没有授权liscense的且个人使用的情况下,可支持多个PDB。也可将原non-CDB架构的库转换成CDB下的一个PDB。本文侧重讲解 NON-CDB 如何转换到 CDB 架构中。

CDB 架构的优势

  1. 资源整合与共享

    共享资源:CDB 中的多个 PDB 共享相同的后台进程、内存和存储资源(如 UNDO 表空间、REDO 日志等),从而减少资源浪费。

    资源隔离:通过资源管理器(Resource Manager),可以为每个 PDB 分配独立的资源配额(如 CPU、内存、I/O),确保关键业务不受其他 PDB 的影响。

  2. 简化管理与运维
    集中管理:管理员可以在 CDB 级别统一管理多个 PDB,而不需要为每个数据库单独配置和维护。

    统一备份与恢复:CDB 支持对整个容器数据库进行备份和恢复,简化了操作流程。

    快速部署:通过 PDB 的克隆、复制和迁移功能,可以快速创建新的数据库实例,显著缩短部署时间。

  3. 高可用性与灵活性
    快速迁移:PDB 可以在不同的 CDB 之间快速迁移,支持跨平台、跨版本的数据迁移。

    高可用性:CDB 支持 Oracle Data Guard 和 Oracle RAC,确保 PDB 的高可用性和容灾能力。

    快速升级:可以在 CDB 级别统一升级数据库版本,而不需要逐个升级 PDB。

  4. 简化补丁和升级
    统一补丁管理:在 CDB 级别应用补丁,所有 PDB 都会自动继承这些补丁,减少了逐个数据库打补丁的工作量。

    版本一致性:CDB 和 PDB 的版本保持一致,避免了多版本数据库管理的复杂性。

要点

1、源库及目标库必须是12C及以上的版本
2、源库实现转换后,除数据文件所处的路径及文件夹以外,源库相关文件均可删除
3、当前转换并不需要移动数据文件,提高转换效率

Non-CDB Convert To PDB

1、前提条件
源库必须是12C的数据库,且目标环境必须是CDB架构。否则无法进行转换。

select * from v$version;

2、源库开启只读模式

SQL>shutdown immediate SQL>startup mount SQL>alter database open read only;

3、源库创建XML

SQL>exec dbms_pdb.describe(pdb_descr_file=>'/u01/ORCLPDB.xml');

4、目标库检查是否兼容源库

set serverout on declare compatible constant varchar2(3) := case dbms_pdb.check_plug_compatibility( pdb_descr_file => '/u01/ORCLPDB.xml', pdb_name => 'testpdb') when true then 'yes' else 'no' end; begin dbms_output.put_line(compatible); end; /

5、关闭源库

SQL>shutdown immediate

6、目标库创建PDB
注意:此处需要使用源库创建的XML新建

create pluggable database ORCLPDB using '/u01/ORCLPDB.xml' nocopy tempfile reuse;

7、转换架构
注意:此处需要进入到新建的PDB下进行转换

SQL>alter session set container=ORCLPDB; SQL>@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql; -- 此处需要等待半小时左右,具体时长根据库大小而定。

8、打开新的PDB即可

SQL>alter pluggable database ORCLPDB open;

9、监听文件中追加新的PDB服务

# tnsname.ora 文件:文件中将需要对外暴露的库信息进行书写。按照当前对应的格式编辑即可 LISTENER_CDB = (ADDRESS = (PROTOCOL = TCP)(HOST = testcdb.localdomain.com)(PORT = 1521)) CDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = testcdb.localdomain.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = cdb) ) ) PDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = testcdb.localdomain.com)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = PDB) (INSTANCE_NAME = CDB) ) ) ORCLPDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = testcdb.localdomain.com)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORCLPDB) (INSTANCE_NAME = CDB) ) )
# 注意:listener.ora文件:其中注册对应的PDB库信息并标明PDB所对应的容器是哪个即可。 CDB = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = testcdb.localdomain.com)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) SID_LIST_TEST = (SID_LIST = (SID_DESC = (ORACLE_HOME=/u01/db/CDBOH/cdb) (SID_NAME = CDB) ) (SID_DESC = (GLOBAL_DBNAME = PDB) (SID_NAME = CDB) ) (SID_DESC = (GLOBAL_DBNAME = ORCLPDB) (SID_NAME = CDB) ) )

10、重新启动监听并连接新的PDB即可

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

评论