陈老师:1415968548 郑老师:2735197625 乐老师:354331153
客服热线:
19941464235/19906632509(微信同号)

客服微信

【Oracle OCP】Oracle 19c之CDB及PDB启停

作者:炎燚小寶
发布时间:2023-12-19 09:17
浏览量:813

本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。

一、Container Database (CDB)

容器数据库的启动和关闭与常规实例相同。将SQL*Plus启动和关闭命令作为特权用户连接到CDB时可用。一些典型值如下所示。

STARTUP [NOMOUNT | MOUNT | RESTRICT | UPGRADE | FORCE | READ ONLY]

SHUTDOWN [IMMEDIATE | ABORT]


二、Pluggable Database (PDB)

可以使用 SQL*Plus 命令或 ALTER PLUGGABLE DATABASE 命令启动和停止可插入数据库。

1、SQL*Plus命令

当以特权用户身份连接到可插入数据库时,以下 SQL*Plus 命令可用于启动和停止可插入数据库。

STARTUP FORCE;
STARTUP OPEN READ WRITE [RESTRICT];
STARTUP OPEN READ ONLY [RESTRICT];
STARTUP UPGRADE;
SHUTDOWN [IMMEDIATE];


下面显示了一些示例。

STARTUP FORCE;
SHUTDOWN IMMEDIATE;

STARTUP OPEN READ WRITE RESTRICT;
SHUTDOWN;

STARTUP;
SHUTDOWN IMMEDIATE;


2、ALTER PLUGGABLE DATABASE

可以从 CDB 或 PDB 使用 ALTER PLUGGABLE DATABASE 命令。

当以特权用户身份连接到 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 时,以下命令可用于打开和关闭一个或多个 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 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;


3、配置PDB自启动

12.1.0.2 补丁集引入了保留 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,您可以自定义触发器。


4、保存PDB的起动状态

12.1.0.2 补丁集引入了通过 CDB 重新启动来保留 PDB 启动状态的功能。这是使用 ALTER PLUGGABLE DATABASE 命令完成的。

我们将首先查看 CDB 重启的正常结果。请注意,PDB 在重新启动之前处于 READ WRITE 模式,但在重新启动之后处于 MOUNTED 模式。

 col name for a20
SELECT name, open_mode FROM v$pdbs;

NAME                           OPEN_MODE
------------------------------ ----------
PDB$SEED                       READ ONLY
PDB1                           READ WRITE
PDB2                           READ WRITE

SQL>


SHUTDOWN IMMEDIATE;
STARTUP;


SELECT name, open_mode FROM v$pdbs;

NAME                           OPEN_MODE
------------------------------ ----------
PDB$SEED                       READ ONLY
PDB1                           MOUNTED
PDB2                           MOUNTED

SQL>


接下来,我们打开两个可插拔数据库,但只保存 PDB1 的状态。

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 会给我们带来不同的结果。

SELECT name, open_mode FROM v$pdbs;

NAME                           OPEN_MODE
------------------------------ ----------
PDB$SEED                       READ ONLY
PDB1                           READ WRITE
PDB2                           READ WRITE

SQL>


SHUTDOWN IMMEDIATE;
STARTUP;


SELECT name, open_mode FROM v$pdbs;

NAME                           OPEN_MODE
------------------------------ ----------
PDB$SEED                       READ ONLY
PDB1                           READ WRITE
PDB2                           MOUNTED


可以使用以下语句丢弃保存的状态。

ALTER PLUGGABLE DATABASE pdb1 DISCARD STATE;

COLUMN con_name FORMAT A20
COLUMN instance_name FORMAT A20

SELECT con_name, instance_name, state FROM dba_pdb_saved_states;

no rows selected


以下是文档中解释的一些使用说明的简要列表。