当前位置: 首页 > news >正文

Oracle 12c 中的 CDB和PDB的启动和关闭

一、简介

Oracle 12c引入了多租户架构,允许一个容器数据库(Container Database, CDB)托管多个独立的可插拔数据库(Pluggable Database, PDB)。本文档旨在详细描述如何启动和关闭CDB及PDB。

二、容器数据库 (CDB)

2.1 启动和关闭CDB

启动和关闭容器数据库的操作与传统的实例相同。通过SQL*Plus中的STARTUP和SHUTDOWN命令来完成这些操作,当以特权用户身份连接到CDB时可以使用以下命令:

STARTUP [NOMOUNT | MOUNT | RESTRICT | UPGRADE | FORCE | READ ONLY]
SHUTDOWN [IMMEDIATE | TRANSACTIONAL | NORMAL | ABORT]

例如:

STARTUP NOMOUNT;
STARTUP MOUNT;
STARTUP RESTRICT;
STARTUP UPGRADE;
STARTUP FORCE;
STARTUP READ ONLY;SHUTDOWN IMMEDIATE;
SHUTDOWN TRANSACTIONAL;
SHUTDOWN NORMAL;
SHUTDOWN ABORT;

二、 可插拔数据库 (PDB)

2.1 使用SQL*Plus命令启动和停止PDB

当以特权用户身份连接到特定的PDB时,可以使用以下SQL*Plus命令来启动或停止该PDB:

STARTUP FORCE;
STARTUP OPEN READ WRITE [RESTRICT];
STARTUP OPEN READ ONLY [RESTRICT];
STARTUP UPGRADE;
SHUTDOWN [IMMEDIATE | TRANSACTIONAL | NORMAL | ABORT];

示例:

STARTUP FORCE;
SHUTDOWN IMMEDIATE;
STARTUP OPEN READ WRITE RESTRICT;
SHUTDOWN;
STARTUP;
SHUTDOWN IMMEDIATE;

2.2 使用ALTER PLUGGABLE DATABASE命令启动和停止PDB

  • 在PDB中执行

当以特权用户身份连接到PDB时,可以使用以下命令来打开或关闭当前PDB:

ALTER PLUGGABLE DATABASE OPEN READ WRITE [RESTRICTED] [FORCE];
ALTER PLUGGABLE DATABASE OPEN READ ONLY [RESTRICTED] [FORCE];
ALTER PLUGGABLE DATABASE OPEN UPGRADE [RESTRICTED];
ALTER PLUGGABLE DATABASE CLOSE [IMMEDIATE];

示例:

ALTER PLUGGABLE DATABASE OPEN READ ONLY FORCE;
ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE OPEN READ WRITE;
ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;
  • 在CDB中执行

当以特权用户身份连接到CDB时,可以使用以下命令来打开或关闭一个或多个PDB:

ALTER PLUGGABLE DATABASE <pdb-name-clause> OPEN READ WRITE [RESTRICTED] [FORCE];
ALTER PLUGGABLE DATABASE <pdb-name-clause> OPEN READ ONLY [RESTRICTED] [FORCE];
ALTER PLUGGABLE DATABASE <pdb-name-clause> OPEN UPGRADE [RESTRICTED];
ALTER PLUGGABLE DATABASE <pdb-name-clause> CLOSE [IMMEDIATE];

<pdb-name-clause>可以是:

  • 一个或多个PDB名称,以逗号分隔的列表。
  • ALL关键字表示所有PDB。
  • ALL EXCEPT关键字后跟一个或多个PDB名称,以逗号分隔的列表,表示一组PDB的子集。

示例:

ALTER PLUGGABLE DATABASE pdb1, pdb2 OPEN READ ONLY FORCE;
ALTER PLUGGABLE DATABASE pdb1, pdb2 CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER PLUGGABLE DATABASE ALL CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE ALL EXCEPT pdb1 OPEN;
ALTER PLUGGABLE DATABASE ALL EXCEPT pdb1 CLOSE IMMEDIATE;

2.3 PDB 自动启动

在Oracle 12.1.0.2补丁集之后,引入了保存PDB启动状态的能力,因此不再需要为自动启动PDB而实现触发器。

在12.1.0.2之前的版本中,当CDB启动时,所有的PDB会保持挂载状态。默认情况下没有机制可以在CDB启动时自动启动它们。要实现这一点,可以创建一个系统触发器,在CDB启动后打开一些或全部PDB。

CREATE OR REPLACE TRIGGER open_pdbs
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END open_pdbs;
/

您可以根据需求自定义此触发器,以便不是所有的PDB都会启动。

2.4 保存和丢弃PDB启动状态(12.1.0.2 及以后)

从12.1.0.2补丁集开始,可以通过ALTER PLUGGABLE DATABASE命令保存PDB的启动状态,使其在CDB重启后仍然有效。我们先来看一下正常CDB重启后的结果。

注意在重启前PDB处于READ WRITE模式,但在重启后变为MOUNTED模式。

SELECT name, open_mode FROM v$pdbs;
NAME OPEN_MODE
---- ----------
PDB$SEED READ ONLY
PDB1 READ WRITE
PDB2 READ WRITE

然后我们重启CDB:

SHUTDOWN IMMEDIATE;
STARTUP;
SELECT name, open_mode FROM v$pdbs;
NAME OPEN_MODE
---- ----------
PDB$SEED READ ONLY
PDB1 MOUNTED
PDB2 MOUNTED

接下来,我们打开两个可插拔数据库,但只保存其中一个的状态:

ALTER PLUGGABLE DATABASE pdb1 OPEN;
ALTER PLUGGABLE DATABASE pdb2 OPEN;
ALTER PLUGGABLE DATABASE pdb1 SAVE STATE;

DBA_PDB_SAVED_STATES视图显示有关容器保存状态的信息:

COLUMN con_name FORMAT A20
COLUMN instance_name FORMAT A20
SELECT con_name, instance_name, state FROM dba_pdb_saved_states;
CON_NAME INSTANCE_NAME STATE
-------- -------------- -----
PDB1     cdb1          OPEN

现在重启CDB将给出不同的结果:

SHUTDOWN IMMEDIATE;
STARTUP;
SELECT name, open_mode FROM v$pdbs;
NAME OPEN_MODE
---- ----------
PDB$SEED READ ONLY
PDB1 READ WRITE
PDB2 MOUNTED

请注意,状态仅在容器处于READ ONLY或READ WRITE模式时被保存并在DBA_PDB_SAVED_STATES视图中可见。对于处于MOUNTED模式的容器,ALTER PLUGGABLE DATABASE ... SAVE STATE命令不会报错,但也不会记录任何内容,因为这是CDB重启后的默认状态。

此外,像其他ALTER PLUGGABLE DATABASE命令一样,PDB可以通过单独指定、逗号分隔列表、ALL或ALL EXCEPT关键词来标识。在RAC环境中还可以添加INSTANCES子句来指定实例,但是无论INSTANCES子句如何,SAVE/DISCARD STATE命令仅影响当前实例。

三、结论

通过遵循上述指导,您可以安全高效地管理Oracle 12c环境中的CDB和PDB的启动和关闭过程,从而更好地利用多租户架构的优势。随着技术的进步,预计未来版本中这项功能将会更加完善,为用户提供更佳的操作体验。

http://www.lryc.cn/news/526767.html

相关文章:

  • Vue组件开发-使用 html2canvas 和 jspdf 库实现PDF文件导出 设置页面大小及方向
  • chrome插件:网页图片高清下载
  • 汽车定速巡航
  • CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)
  • WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel
  • 14-6-2C++STL的list
  • 【AI论文】Sigma:对查询、键和值进行差分缩放,以实现高效语言模型
  • 私域流量池构建与转化策略:以开源链动2+1模式AI智能名片S2B2C商城小程序为例
  • vofa++使用方法
  • LogicFlow 一款流程图编辑框架
  • HTML<kbd>标签
  • PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(上.文章部分)
  • 150 Linux 网络编程6 ,从socket 到 epoll整理。listen函数参数再研究
  • 深入浅出 SQLSugar:快速掌握高效 .NET ORM 框架
  • ESP8266 NodeMCU与WS2812灯带:实现多种花样变换
  • MacOS安装Docker battery-historian
  • Linux的基本指令(上)
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.1 从零搭建NumPy环境:安装指南与初体验
  • ASP .NET Core 学习(.NET9)部署(一)windows
  • 百日计划(2025年1月22日-4月30日,以完成ue4.0 shader抄写为目标)
  • AIGC视频生成模型:慕尼黑大学、NVIDIA等的Video LDMs模型
  • 类与对象(中)
  • 如何移植ftp服务器到arm板子?
  • npm常见报错整理
  • 苍穹外卖—订单模块
  • MQ的可靠消息投递机制
  • 视频多模态模型——视频版ViT
  • w179基于Java Web的流浪宠物管理系统的设计与实现
  • MyBatis框架基础学习(1)
  • arm-linux平台、rk3288 SDL移植