Oracle 19c 可插拔数据库PDB的创建方式

2023-11-04 07:01

本文主要是介绍Oracle 19c 可插拔数据库PDB的创建方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

多租户容器数据库架构图总览

多租户容器数据库组成部分

1.有且仅有一个CDB Root(CDB$ROOT),它包含了Root和所有PDB数据库的元数据和数据字典信息。

2.有且仅有一个Seed PDB(PDB$SEED),它的作用是创建其他PDB的模板,它是只读库,不能做任何修改。

3.0个或多个应用程序容器Application Container,每个Application Container包含一个Application Root,以及插在这个root上的Application PDBs,Application Root属于CDB Root。

4.0个或多个用户创建的PDB,每个PDB和12c之前的普通数据功能基本一样,在CDB创建之初,是没有PDB的,PDB根据用户业务需求后创建。

5.0个或1个Application Seed,它是应用程序容器里面用来创建Application PDBs的模板,是可选的,如果没有,则Application PDBs可以以第2条的PDB$SEED为模板创建。

创建PDB的几种方式总览

技术方式描述
Create a PDB from scratch通过pdb seed或者application seed作为模版创建

Clone an existing PDB or non-CDB

通过源pdb或者源non-cdb克隆。

源数据库可以是本地/远程cdb里面的普通pdb

或者本地/远程cdb里application container里面的application pdb

或者是non-cdb

Relocate a PDB to a different

CDB

从一个cdb里面搬迁pdb到另外一个cdb

Plug an unplugged PDB into a

CDB

通过源pdb的元数据xml文件来把pdb插入现有cdb

Reference a PDB as a proxy PDB

通过本地/远程cdb里面的普通pdb

或者本地/远程cdb里application container里面的application pdb来创建一个代理pdb

一、 通过种子PDB创建标准PDB(Create a PDB from scratch)

或者

需注意的几点:

1.注意当前是在cdb root还是application root,如果是cdb root,创建的就是标准pdb,如果在application root下,创建的是application pdb。

2.通过命令CREATE PLUGGABLE DATABASE创建,并指定本地pdb管理员账户,如果还需要其他子句可以添加,pdb刚创建完成后是mount模式,要打开到read write模式,默认会创建一个和pdb同名的服务,注意在网络配置文件中配置好以供客户端正常访问。

操作命令:

CREATE PLUGGABLE DATABASE salespdb 
ADMIN USER salesadm
IDENTIFIED BY password  
STORAGE (MAXSIZE 2G)  
DEFAULT TABLESPACE sales
DATAFILE '/disk1/oracle/dbs/salespdb/sales01.dbf' SIZE 250M AUTOEXTEND ON 
PATH_PREFIX = '/disk1/oracle/dbs/salespdb/'    
FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/','/disk1/oracle/dbs/salespdb/');

 需注意pdbseed的大小写。

二、通过本地PDB复制新的PDB

或者:

需满足的前提条件:

  1. 用户得在根容器数据库和源PDB数据库中有CREATE PLUGGABLE DATABASE的系统权限。
  2. 源PDB不能关闭。
  3. 如果CDB不是local undo 模式,源PDB得处于open read only模式。如果CDB是local undo,源PDB没有这个限制,如下查询是否是local undo 模式:
    SYS@PRODCDB>SELECT PROPERTY_NAME, PROPERTY_VALUE FROM   DATABASE_PROPERTIES WHERE  PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';PROPERTY_NAME	     PROPERTY_VALUE
    -------------------- --------------------
    LOCAL_UNDO_ENABLED   TRUE
  4. 如果CDB不是归档模式,源PDB得处于open read only模式。如果CDB是归档模式,源PDB没有这个限制,如下查询是否是归档模式:

        SYS@PRODCDB>archive log list;
        Database log mode           No Archive Mode
        Automatic archival           Disabled

      5.如果创建的是application pdb,需要和application container保持一样的字符集

操作命令: 

以通过PDBPROD1复制一个PDBPROD3为例,因为实验库没开归档,需要源pdb read only,创建完后确保两个库都是打开状态

SYS@PRODCDB>show pdbs;CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------2 PDB$SEED			  READ ONLY  NO3 PDBPROD1			  READ WRITE NOSYS@PRODCDB>alter pluggable database PDBPROD1 close;Pluggable database altered.SYS@PRODCDB>alter pluggable database PDBPROD1 open read only;Pluggable database altered.SYS@PRODCDB>create pluggable database PDBPROD3 FROM PDBPROD1 FILE_NAME_CONVERT=('PDBPROD1','PDBPROD3');Pluggable database created.SYS@PRODCDB>alter pluggable database PDBPROD1 close;Pluggable database altered.SYS@PRODCDB>show pdbs;CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------2 PDB$SEED			  READ ONLY  NO3 PDBPROD1			  MOUNTED6 PDBPROD3			  MOUNTEDSYS@PRODCDB>alter pluggable database all open;Pluggable database altered.SYS@PRODCDB>show pdbs;CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------2 PDB$SEED			  READ ONLY  NO3 PDBPROD1			  READ WRITE NO6 PDBPROD3			  READ WRITE NO

可根据业务情况选择是否加其他子句: PATH_PREFIX 、STORAGE、 NO DATA等。

三、通过远程PDB复制新的PDB

需满足的前提条件:

  1. 用户得在根容器数据库和源PDB数据库中有CREATE PLUGGABLE DATABASE的系统权限。
  2. 源数据库安装平台和目标数据库安装平台须具有同样的字节序endianness,源库安装选项必须和目标库安装选项相同或者是目标库的子集。
  3. 如果创建的是application pdb,源pdb的应用程序名称和版本须和目标application container的程序名称和版本保持一致。
  4. 如果目标CDB字符集不是AL32UTF8,则需要和源CDB兼容,且目标CDB所有application pdb需要和application container保持一样的字符集,如果CDB字符集是AL32UTF8,则没有要求。
  5. 源库不能关闭。
  6. 如果目标CDB不是local undo 模式,源PDB得处于open read only模式。
  7. 如果目标CDB不是归档模式,源PDB得处于open read only模式。
  8. 如果创建的是refreshable pdb,则源pdb得处于归档和local undo模式。
  9. 创建的database link连接用户须具有CREATE PLUGGABLE DATABASE和sysoper权限。

操作命令: 

CREATE PLUGGABLE DATABASE pdb2 FROM pdb1@pdb1_link;

四、通过19c非容器数据库复制新的PDB

需满足的前提条件:

  1. 用户得在根容器数据库和源PDB数据库中有CREATE PLUGGABLE DATABASE的系统权限。
  2. 源数据库安装平台和目标数据库安装平台须具有同样的字节序endianness,源库安装选项必须和目标库安装选项相同或者是目标库的子集。
  3. 两边版本要在12.1.0.2及以上,且版本要一致。
  4. 新建的PDB数据块大小要和cdb保持一致。
  5. 如果non-cdb不是归档模式,要打开为read only。
  6. 字符集和dblink要求同上。

操作命令: 

CREATE PLUGGABLE DATABASE pdb2 FROM mydb@mydb_link; --mydb是non-cdb的名字同CREATE PLUGGABLE DATABASE pdb2 FROM NON$CDB@mydb_link;--用NON$CDB代替。执行后在打开新建的pdb之前需要执行转换脚本 :ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

五、通过relocate迁移PDB

从一个CDB Root到另一个CDB Root

或从一个Application Root 到另一个Application Root

通过dblink复制源pdb的数据块,undo块,redo块到新的位置,是一种几乎没有downtime的数据库迁移方式,不需要更改网络连接串等,新库打开后,源库就会自动删除。

需满足的前提条件:

1.源库处于local undo模式。

2.目标CDB如果不是归档模式,需要处于read only状态。

3.用户,dblink,字符集的前提条件同上。

操作命令: 

CREATE PLUGGABLE DATABASE ... FROM src_pdb_name@link2src... RELOCATE AVAILABILITY [MAX | NORMAL]

使用AVAILABILITY NORMAL(默认),源和目标共享同一个LISTENER。


六、通过XML元数据文件或者.pdb压缩归档文件导入非插入PDB

在CDB Root创建PDB

在application root创建pdb:

源库不能比新库版本更高,当用.pdb的归档文件创建时,不必指定源数据库的文件地址,当用XML的文件创建时,需指定SOURCE_FILE_NAME_CONVERT或 SOURCE_FILE_DIRECTORY

操作命令:

CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/salespdb.xml'   SOURCE_FILE_NAME_CONVERT = ('/disk1/oracle/sales/', '/disk2/oracle/sales/')  NOCOPY  STORAGE (MAXSIZE 2G)  TEMPFILE REUSE;
用.pdb文件:
CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/sales.pdb'   STORAGE (MAXSIZE 2G);

七、代理PDB

在CDB Root创建代理PDB

在Application Container创建代理PDB

代理PDB实现的是像访问本地CDB中的PDB一样访问远程的PDB,只复制源PDB的 SYSTEM 和 SYSAUX 表空间。

需满足的前提条件:

1.用户得在根容器数据库和源PDB数据库中有CREATE PLUGGABLE DATABASE的系统权限。
2.本地CDB必须为归档模式和LOCAL UNDO模式。
3.创建Proxy PDB时,远程PDB必须为OPEN READ/WRITE 模式。

操作命令:

CREATE PLUGGABLE DATABASE pdb1 AS PROXY FROM pdb1@pdb1_link;

这篇关于Oracle 19c 可插拔数据库PDB的创建方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/344071

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作