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

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常