Oracle 12c多租户架构及优缺点

本文详细介绍了Oracle 12c引入的多租户架构,包括其核心概念、CDB容器的不同类型及其管理方式。通过对比传统架构,突出了多租户架构在资源利用、管理便捷性和性能优化方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle的多租户和MySQL,MSSQL的类似,把之前的一个实例对一个数据库的情形(RAC是多个实例对一个数据库)整合成了一个实例下可以挂多个数据库,并且定义为可插拔的,听起来很炫。就像在没有多租户特性之前,Oracle与MSSQL以及MySQL还是有很大的差异,因此对于Oracle的多租户也有一些不同的地方。本文主要描述Oracle 12c多租户架构。

一、多租户概念

Oracle多租户环境包含一个容器数据库(CDB)和零个或多个可插拔数据库(PDB),一个PDB是一个模式,模式对象,以及非模式对象,如到一个Oracle网络客户端作为非CDB。Oracle 12c之前的版本,都是非CDB数据库。

借用从MSSQL或者MySQL架构来看,即一个实例下面可以有多个数据库。Oracle这个多租户其实和他们的架构类似,把PDB按这种思路来理解就容易得多了。这么做最终的目的是可以充分的利用系统资源。想之前维护的一台机器上搞了5-6个实例,资源浪费,管理起来也费劲。

二、CDB容器

1、什么是CDB容器

一个CDB容器是多租户架构内的数据或元数据的逻辑集合。
下图为CDB中容器示例
这里写图片描述

每个CDB都有以下容器:

  • CDB根容器(也简称根)
    该CDB根是一个模式,模式对象,以及属于所有PDB的非模式对象的集合。根容器存储Oracle提供的元数据和公共用户。元数据的一个例子是Oracle提供的PL/SQL包的源代码。公共用户是每个容器中已知的数据库用户。根容器被命名CDB$ROOT。

  • 系统容器
    该系统包括根CDB和在CDB所有的PDBS。因此,系统容器是CDB本身的逻辑容器。

  • 零个或多个应用程序容器
    应用程序容器只包含一个应用程序根目录,并且PDB插入到该根目录中。而系统容器包含CDB根目录和CDB 内的所有 PDB,应用程序容器仅包含插入应用程序根目录的PDB。应用根属于CDB根,没有其他容器。

  • 零个或多个用户创建的PDB
    一个PDB包含特定功能集所需的数据和代码。例如,PDB可以支持特定应用,如人力资源或销售应用。您可以根据业务需求添加PDB。
    PDB属于零个或一个应用程序容器。如果PDB属于应用程序容器,那么它是一个应用程序PDB。例如,cust1_pdb与cust2_pdb应用PDBS可能属于该saas_sales_ac应用程序容器,在这种情况下,他们不属于任何其他应用程序容器。应用程序种子是可选的应用程序PDB,用作用户创建的PDB模板,使您能够快速创建新的应用程序PDB。

  • 一个种子PDB
    种子PDB是CDB可用于创建新的PDB的系统提供的模板。种子PDB命名PDB$SEED。您不能添加或修改对象PDB$SEED。

2、没有应用容器的CDB

此示例显示一个简单的CDB,其中包含五个容器:系统容器(整个CDB),CDB根,PDB种子和两个PDB。每个PDB都有自己的专用应用程序。不同的PDB管理员管理每个PDB。一个公共用户存在于具有单个身份的CDB上。在这个例子中,公共用户SYS可以管理根和每个PDB。在物理层面上,该CDB具有数据库实例和数据库文件,就像非CDB一样。

如下图没有应用程序容器的CDB
这里写图片描述

3、带有应用程序容器的CDB

在本变体中,CDB包含一个名为的应用程序容器saas_sales_ac。在应用程序容器中,应用程序PDB cust1_pdb支持一个客户的应用程序,并且应用程序PDB cust2_pdb支持不同客户的应用程序。CDB还包含一个名为的PDB hrpdb,它支持HR应用程序,但不属于应用程序容器。

下图为带有应用程序容器的CDB
这里写图片描述

在这个例子中,多个DBA管理CDB环境:
  CDB管理员管理CDB本身。
  应用程序容器管理员管理saas_sales_ac容器,包括应用程序安装和升级。
  应用程序PDB管理员管理的两个PDBS saas_sales_ac容器:cust1_pdb和cust2_pdb。
  PDB管理员管理hrpdb。

三、CDB要点理解

  • 一个多租户数据库有一个CDB容器,可以理解为一栋写字楼。
  • 多租户数据库有一个数据库实例,一个系统全局区以及一组后台进程,可以理解为写字楼的物业,安保人员等等,服务于所有租户。
  • 有零个和多个PDB数据库,可以理解为各个企业在当前写字楼租用的办公室。有些企业有多间办公室(多个PDB服务与某个特定应用程序),有些企业只有一间办公室(单个PDB及应用程序)。
  • 根容器中定义的对象可以由所有PDB共享及访问。可以理解为写字楼的公共区,如电梯,楼台,公共洗手间等。
  • 各个PDB服务通过数据库监听器提供给用户,可以理解为写字楼大厅水牌,按照水牌,即可以找到对应公司具体楼层及位置。
  • PDB内定义的对象为私有的,每个PDB都有自己的数据字典。可以理解为不同的企业财务,业务各自独立,如有业务往来,那就签协议(fast intra-CDB dblink)

四、多租户架构的优缺点

1、非CDB架构的挑战

整合前,如下图所示

这里写图片描述

  • 整合前集中常见的架构情形

  N多的应用服务器对应到N多的数据库服务器 #Author : Leshami

  几个或N个数据库服务器实例放在同一台服务器 #Blog : http://blog.youkuaiyun.com/leshami

  • 存在的问题

  DBA团队必须分别管理每个数据库的SGA,数据库文件,帐户,安全性等

  大部分系统资源变成闲置,即使是在一台服务器上放置多个实例,本质上依旧是单独管理(数据库级别)

  各个数据库之间的交互远程调用效率低下(dblink)

2、整合后的优点

整合后图示如下:
这里写图片描述

  • 整合的实质

  将数据从位于不同服务器上的多个数据库合并到一台服务器上,且无需更改现有模式或应用程序

  • 整合后的优点

    • 降低成本(10台服务器变成1台,共享进程,共享系统资源)

    • 更容易和更快速的数据和代码的移动(可拔插数据库,像U盘一样,能不快速吗)

    • 更轻松地管理和监控物理数据库(至少不用连接N多服务器来观察)

    • 分离数据和代码

    • 安全分离管理权限(各个PDB之间的权限依旧独立)

    • 轻松性能调优(不用看辣么多的AWR,不用研究是不是哪个服务器SGA多了,哪个PGA少了)

    • 补丁升级更容易,一次搞定N个数据库(绿盟很厉害,一扫N台数据库都得打补丁)

    • 系统管理员不需要分配辣么多的oracle用户了

3、整合后的缺点

  • DBA管理人员锐减,要失业了

  • 每一个调整都要当心了,牵一发动全局,你懂的

  • 发现中……

参考链接: http://docs.oracle.com/database/122/CNCPT/introduction-to-the-multitenant-architecture.htm#CNCPT89242

DBA牛鹏社(SQL/NOSQL/LINUX)

这里写图片描述

<think>嗯,用户问的是Oracle 11g迁移到12c的方法,我需要详细介绍一下。首先,我应该考虑不同的迁移方法,用户可能是DBA或者需要执行迁移任务的技术人员,他们可能对步骤和工具不太熟悉,需要详细指导。可能的迁移方法包括使用Data Pump、升级助手、导出导入、RMAN或者传输表空间等。 用户可能关心的是步骤、注意事项以及不同方法的优缺点。比如,DBUA(Database Upgrade Assistant)比较自动化,适合不太熟悉手动操作的用户,而Data Pump可能需要更多的手动步骤,但灵活。另外,兼容性检查也很重要,比如检查11g的版本是否支持直接升级到12c,可能需要先升级到11.2.0.4版本。 还需要提到迁移前的准备工作,比如备份、测试环境搭建,以及迁移后的步骤,比如参数调整、组件更新和测试验证。用户可能还会关心迁移过程中可能遇到的问题,比如兼容性问题、参数变化等,需要提醒他们注意这些点。 另外,可能需要比较不同方法的适用场景,比如数据量大的情况下,RMAN或传输表空间可能更高效,而小数据库用Data Pump或导出导入更方便。还要提到字符集和时区设置,这些在迁移后可能需要调整。 总结下来,应该分步骤介绍几种主要方法,每种方法的详细步骤、优缺点,以及迁移前后的注意事项。这样用户可以根据自己的情况选择最合适的方法,并确保迁移过程顺利。</think>将 Oracle 11g 数据库迁移到 12c 可以通过多种方法实现,具体选择取决于业务需求、停机时间窗口和数据量等因素。以下是常见的迁移方法及详细步骤: --- ### **一、迁移前的准备工作** 1. **检查兼容性** - 确认 11g 数据库版本是否支持直接升级到 12c(11.2.0.3 或更高版本需先升级到 11.2.0.4)。 - 使用 Oracle 预升级工具 `preupgrade.jar` 检查兼容性: ```sql -- 在 11g 数据库中运行 @?/rdbms/admin/preupgrd.sql ``` - 根据报告修复不兼容项(如废弃参数、失效对象等)。 2. **备份数据库** - 使用 RMAN 全量备份数据库,避免迁移失败导致数据丢失: ```bash rman target / BACKUP DATABASE PLUS ARCHIVELOG; ``` 3. **准备 12c 环境** - 安装 Oracle 12c 软件,建议与 11g 的安装目录分开。 - 确保操作系统版本、内核参数等满足 12c 要求。 -- ### **二、常用迁移方法** #### **方法1:使用 Database Upgrade Assistant (DBUA)** **适用场景**:停机时间允许,自动化升级。 **步骤**: 1. 关闭 11g 数据库: ```bash sqlplus / as sysdba SHUTDOWN IMMEDIATE; ``` 2. 启动 DBUA 工具(图形化界面): ```bash dbua ``` 3. 选择 11g 数据库实例,按照向导完成升级(自动处理参数文件、数据文件迁移等)。 4. 验证升级后的数据库状态和组件: ```sql @?/rdbms/admin/utlrp.sql -- 重新编译无效对象 SELECT * FROM v$version; -- 确认版本 ``` **优点**:自动化程度高,适合不熟悉命令行的用户。 **缺点**:需要停机时间较长。 -- #### **方法2:使用 Data Pump (expdp/impdp)** **适用场景**:跨平台迁移、部分数据迁移或结构重组。 **步骤**: 1. 在 11g 导出元数据及数据: ```bash expdp system/password DIRECTORY=dpump_dir DUMPFILE=11g_export.dmp FULL=YES ``` 2. 在 12c 创建新数据库(可选),并导入数据: ```bash impdp system/password DIRECTORY=dpump_dir DUMPFILE=11g_export.dmp FULL=YES ``` 3. 处理可能的字符集、对象兼容性问题。 **优点**:灵活控制迁移内容,支持跨平台。 **缺点**:数据量大时耗时较长,需手动处理依赖关系。 -- #### **方法3:使用 RMAN 增量备份迁移** **适用场景**:最小化停机时间,大型数据库。 **步骤**: 1. 将 11g 数据库置为归档模式: ```sql ALTER DATABASE ARCHIVELOG; ``` 2. 使用 RMAN 将 11g 数据库转换为 12c 格式: ```bash rman target / auxiliary sys/password@12c_sid CONVERT DATABASE NEW DATABASE '12c_sid' TRANSPORT SCRIPT '/path/transport.sql' DB_FILE_NAME_CONVERT '/11g/datafile','/12c/datafile'; ``` 3. 执行生成的 `transport.sql` 脚本完成迁移。 **优点**:支持增量备份减少停机时间。 **缺点**:操作复杂,需熟悉 RMAN 高级功能。 -- #### **方法4:使用 Transportable Tablespaces (TTS)** **适用场景**:迁移部分表空间,跨平台。 **步骤**: 1. 检查表空间自包含性: ```sql EXEC DBMS_TTS.TRANSPORT_SET_CHECK('tablespace_name', TRUE); ``` 2. 导出元数据并复制数据文件: ```bash expdp system/password DIRECTORY=dpump_dir DUMPFILE=tts_meta.dmp TRANSPORT_TABLESPACES=tablespace_name ``` 3. 在 12c 导入元数据并挂载数据文件: ```bash impdp system/password DIRECTORY=dpump_dir DUMPFILE=tts_meta.dmp TRANSPORT_DATAFILES='/path/datafile.dbf' ``` **优点**:快速迁移特定数据,支持跨平台。 **缺点**:仅适用于表空间级别迁移。 -- ### **三、迁移后任务** 1. **更新参数文件** - 检查 `spfile` 中废弃参数(如 `memory_target` 替代 `sga_target`)。 2. **更新组件和统计信息** ```sql @?/rdbms/admin/catupgrd.sql -- 更新数据字典 EXEC DBMS_STATS.GATHER_DATABASE_STATS; ``` 3. **测试应用兼容性** - 验证 SQL 性能、PL/SQL 功能是否正常。 4. **调整 12c 新特性** - 如多租户架构(CDB/PDB)适配(可选)。 --- ### **四、注意事项** - **字符集与时区**:确保 12c 数据库字符集与 11g 兼容。 - **权限与依赖**:检查角色、公共同义词等对象是否完整迁移。 - **回退计划**:提前制定回退方案,防止意外情况。 --- 根据实际情况选择合适的方法:小型数据库可优先使用 DBUA 或 Data Pump,大型生产库推荐 RMAN 或 TTS。建议在测试环境充分验证后再进行生产迁移。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风智语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值