首页 > 数据库 >Oracle多租户系列--多租户简要概述

Oracle多租户系列--多租户简要概述

时间:2023-11-15 20:32:36浏览次数:37  
标签:容器 CDB 租户 数据库 -- Oracle PDB

简要概述

Oracle 12c Release 1(12.1)引入了多租户选项,是Oracle数据库历史上最大的架构变化之一,引入了容器数据库(CDB)和可插拔数据库(PDB)的概念。

容器数据库(CDB): 从表面上看,它与传统的Oracle数据库非常相似,因为它包含了大部分您已经熟悉的工作部分(控制文件、数据文件、undo、tempfile、重做日志等)。它还包含所有PDB可见的根容器数据字典对象。

可插拔数据库(PDB): 因为CDB包含数据库主要的工作部分,所以PDB仅需要包含特定于自身的信息。它不需要关注控制文件,重做日志和UNDO等。相反,它只是由数据文件和tempfile组成,以处理它自己的对象。这包括它自己的数据字典,只包含关于特定于PDB的对象的信息。从Oracle 12.2以后,PDB可以而且应该有一个本地undo表空间。

Oracle多租户系列--多租户简要概述_数据字典

通过分离根容器中的公共数据字典对象和特定于PDB的数据字典对象,为多租户选项提供了灵活性。从PDB的角度来看,数据字典是根数据字典和PDB数据字典的联合,因此在内部PDB感觉非常像一个普通的Oracle数据库。例如,PDB中的DBA_%和ALL_%视图看起来与任何非cdb数据库相同。

Oracle Managed Files (OMF) 和多租户

Oracle建议在使用多租户架构时使用Oracle Managed Files (OMF),因为它简化了许多功能。对于某些功能,OMF的使用似乎是必须的,比如Oracle 12.2中的应用程序容器功能。

创建PDB

由于大部分工作部件已经存在于根容器中,因此创建一个新的PDB是一项相对快速和简单的任务。在创建一个全新的PDP时,PDB是基于种子PDB(PDB$SEED)的副本创建的,因此它只需要进行文件复制。

Oracle多租户系列--多租户简要概述_多租户_02

可以克隆现有的PDB,而不是从种子PDB创建新的PDB。

Oracle多租户系列--多租户简要概述_多租户_03

还可以在远程CDB中创建克隆。

Oracle多租户系列--多租户简要概述_数据字典_04

Unpluging和Plugging

多租户选项最强大的功能之一是从CDB中拔出PDB并将其插入到另一个CDB中的能力。这不仅允许轻松地移动数据库,而且还提供了另一种补丁和升级到未来版本的方法。

Oracle多租户系列--多租户简要概述_数据字典_05

重新定位 PDB

从Oracle 12.2开始,可以重新定位一个PDB,将它从一个CDB移动到另一个CDB。这比传统的拔插要简单得多。

Oracle多租户系列--多租户简要概述_多租户_06

刷新 PDB

从Oracle 12.2开始,可以从源PDB刷新克隆的PDB,前提是它只以只读模式打开过。

Oracle多租户系列--多租户简要概述_多租户_07

可刷新PDB切换

从Oracle 18c开始,可以切换一个可刷新的PDB。

Oracle多租户系列--多租户简要概述_数据字典_08

代理 PDB

从Oracle 12.2开始,可以创建代理PDB,它将SQL发送到远程PDB进行处理。这允许您为远程数据库拥有一个本地端点。

Oracle多租户系列--多租户简要概述_数据字典_09

应用程序容器

Oracle 12.2引入了应用程序容器的概念,它就像一个迷你根容器。它们可用于集中共享配置和应用程序,这些共享配置和应用程序由依赖的应用程序pdb使用。

Oracle多租户系列--多租户简要概述_数据库_10

PDB 快照旋转盘

从Oracle 18c开始,可以创建PDB的自动管理快照,也称为快照旋转盘(snapshot carousel)。

Oracle多租户系列--多租户简要概述_数据库_11

容器数据库CDB集中管理

从Oracle 18c开始,可以集中监视多个容器数据库。

Oracle多租户系列--多租户简要概述_多租户_12

Views

多租户选项的引入带来了额外的一层数据字典视图,允许查询的信息跨根容器和pdb。
在Oracle 12c中,一个额外的层被添加到视图层次结构中。

  • CDB_:所有容器中的所有对象*(根和所有pdb)。
  • DBA_:当前容器中的所有对象(根或PDB)。
  • ALL_:当前容器(根或PDB)中当前用户可访问的对象,包括当前用户拥有的对象。
  • USER_:当前容器(根或PDB)中当前用户拥有的对象。
    备注:CDB_视图的输出依赖于访问它们的容器。当从根容器访问时,它们确实会显示来自所有容器的所有信息。当从PDB访问时,它们有效地充当容器内的DBA_视图。这一开始可能会让人有点困惑。

参考文档

https://oracle-base.com/articles/12c/multitenant-overview-container-database-cdb-12cr1

https://docs.oracle.com/en/database/oracle/oracle-database/19/upgrd/intro-to-upgrading-oracle-database.html#GUID-FA024F34-A61A-4C4B-AA60-C123A9191A16

标签:容器,CDB,租户,数据库,--,Oracle,PDB
From: https://blog.51cto.com/u_13482808/8407073

相关文章

  • c语言 常量字符串及其初始化
    @TOC前言一、常量字符串:常量字符串:需用双引号包着。例如:"hello","你好".常量字符串的本质就是字符数组,该字符串就是数组的名字。访问常量字符串的个元素:"hellowyy"[0]"hellowyy"[1]"hellowyy"[2]......访问各元素可以输出,但是不能赋值修改,因为这是常量字符。常量......
  • 统计字符串中每个单词出现的次数
    defcount_words(string):words=string.split()word_count={}forwordinwords:ifwordinword_count:word_count[word]+=1else:word_count[word]=1returnword_countstring="Iloveprogramming.Programmingisfun!"......
  • 统计字符串中每个单词出现的次数
    defcount_words(string):words=string.split()word_count={}forwordinwords:ifwordinword_count:word_count[word]+=1else:word_count[word]=1returnword_countstring="Iloveprogramming.Programmingisfun!"......
  • 无涯教程-Dart - Updating The Index函数
    Dart允许修改列表中元素的值,换句话说,可以重写列表项的值,以下示例说明了相同的内容-voidmain(){Listl=[1,2,3];l[0]=123;print(l);}上面的示例使用索引0更新List项的值。代码的输出将为-[123,2,3]参考链接https://www.learnfk.com/dart-programming/......
  • SpringBoot
    一、简介SpringBoot是Spring公司的一个顶级项目,和SpringFramework是一个级别的。不需要编写xml配置文件,通过利用pringFramework4自动配置特性完成配置。启动器就是引入相关的依赖,通过java配置的方式完成自动配置。1.特征使用SpringBoot可以创建独立的Spring应......
  • React.Children.map的用法
    React.Children用很多用法,如下图,经常会用到的是toArray(),具体用法可以自行了解,这里记录下map()的用法和使用到的场景。1.用法:React.Children.map接收2个参数,第一个是所有子元素,第二个是个回调,可以对每个子元素进行处理,然后返回处理后的子元素。2.使用场景:子元素(也可理解为......
  • day130-springboot的各种配置与应用
    编写springboot应用看官方文档DevelopingwithSpringBoot查看场景依赖,引入对应自动配置的场景,编写配置文件中debug=true开启自动配置报告。Negative(不生效)Positive(生效)Lombok的应用Lombok用标签方式代替构造器、getter/setter、toString()等鸡肋代码。引入依赖......
  • CF1436E Complicated Computations 题解
    CF1436EComplicatedComputationsmex的定义是:一个区间中没有出现过的数中最小的整数。对于一个区间,当正整数x在区间中没有出现过、[1,x-1](整数)在区间中全部出现过,那么正整数x就是该区间的mex正整数x在区间中没有出现过我们一共有n个数字,所有的数字都不出现一次,就一共有n次......
  • EASYHOOK
    第一次做hook的题目打开看到main函数经过整理得到主要的函数和主要的逻辑判断 点击发现sub_401240()这个函数会比较像,然后就进入分析了,然后发现根本算不了 特别是里面v4里面的,我们输入的flag被当作了下标处理,就很不合理 然后根据题解和题目的提示,这道题的考点就是hook......
  • Falsk二
    登录认证装饰器1、只要函数被装饰器装饰了,以后被装饰的函数,就都叫inner2、只要在路由器装饰器上加endpoint属性,就可以解决名字重复问题3、endpoint等同于django路由中的name,给路由命别名,可以通过反向解析,通过名字找到路径4、url_for做路由反向解析,需要使用endpoint指定的名字......