
3.4 管理PDB
管理PDB和管理普通的Non-CDB一样,可以管理表空间、数据文件、临时文件和用户对象等,但是有些任务是无法在PDB级别执行的,例如下面的操作。
启动和关闭CDB。
修改CDB。
管理以下组件:进程、内存、错误和告警信息、诊断数据、控制文件、在线 redo日志、归档日志、UNDO模式。
创建、插入、拔出和删除PDB。
3.4.1 连接PDB
可以先配置TNS,然后通过SQL*PLUS 命令直接访问容器;也可以先连接CDB,然后通过ALTER 命令访问PDB。
(1)通过TNS直接访问
TNS配置代码如下:

通过SQL*PLUS命令直接访问,代码如下。对于这种访问方式,用户只要有连接该PDB的权限就可以了。


如果访问时报如下错误:

可以参考笔者的博客文章来解决:《Oracle 18c 通过 service_name 连接PDB报ORA-12514 错误解决方法》(https://www.cndba.cn/cndba/dave/article/2997)。
(2)通过ALTER SESSION命令访问
这种访问方式只能普通用户使用,代码如下:

3.4.2 在系统级别修改PDB
可以使用ALTER SYSTEM命令动态修改PDB,如果当前容器是PDB,那么可以执行以下命令:
ALTER SYSTEM FLUSH { SHARED_POOL | BUFFER_CACHE |FLASH_CACHE };
ALTER SYSTEM { ENABLE | DISABLE } RESTRICTED SESSION;
ALTER SYSTEM SET USE_STORED_OUTLINES;
ALTER SYSTEM { SUSPEND | RESUME };
ALTER SYSTEM CHECKPOINT;
ALTER SYSTEM CHECK DATAFILES;
○ ALTER SYSTEM REGISTER;
ALTER SYSTEM { KILL | DISCONNECT } SESSION;
ALTER SYSTEM SET 初始化参数。
对于修改初始化参数,如果V$SYSTEM_PARAMETER视图中的列ISPDB_MODIFIABLE是TRUE,那么可以在PDB级别进行修改,并不会影响CDB的参数值。
在Oracle 18c中,共有210个可在PDB中修改的参数。

3.4.3 在数据库级别修改PDB
在数据库级别修改PDB,主要是使用ALTER PLUGGABLE DATABASE命令,相当于使用ALTER DATABASE命令修改Non-CDB。
如果当前容器是PDB,则执行ALTER PLUGGABLE DATABASE命令的结果是覆盖从CDB继承来的默认值,但不会影响其他的容器,相关命令如下。
验证当前容器是PDB,代码如下:

关闭PDB,代码如下:

以只读方式打开PDB,代码如下:

在线查看数据文件,代码如下:

修改默认表空间,代码如下:

设置PDB的存储大小,代码如下:

设置强制记录日志,代码如下:

3.4.4 启动/关闭PDB
PDB默认处于MOUNT(挂载)模式,和Non-CDB的MOUNT模式一样,可以进行相关操作。如表3-3所示是PDB的打开模式及其说明。
表3-3 PDB的打开模式及其说明

在打开PDB时,Oracle会检查PDB与CDB的兼容性。如果存在不兼容的地方,Oracle会给出一个警告或错误信息。如果是一个警告,那么警告信息将被记录在告警日志中,PDB依然可以正常打开,返回结果不会显示告警消息。如果是一个错误,那么在打开PDB时会显示一条提示消息,返回结果会提示该错误信息,并将错误信息记录在告警日志中。
当出现错误时,PDB将以RESTRICTED方式打开,只对有RESTRICTED SESSION权限的用户开放,其他用户无法连接该PDB。相关的告警和错误信息可以通过查询PDB_PLUG_IN_VIOLATIONS视图来查看。
1.打开PDB
在CDB root中,可以通过STARTUP PLUGGABLE DATABASE、ALTER PLUGGABLE DATABASE命令打开一个或多个PDB,也可以在PDB中执行STARTUP、SHUTDOWN命令打开和关闭PDB。这里主要介绍第一种方式。
以读写方式打开CNDBAPDB,代码如下:

以只读方式打开CNDBAPDB,代码如下:

以升级脚本方式打开CNDBAPDB,代码如下:

同时打开多个PDB(cndbapdb、zhixinpdb) ,代码如下:

打开所有的PDB,代码如下:

除zhixinpdb外,打开其他的PDB,代码如下:

2.保存当前PDB的打开状态
如果想在重启CDB时,PDB能够被自动打开,那么可以在PDB被打开时,执行命令保存PDB的当前打开状态,这样下次重启CDB时,PDB就会被自动打开。如果不想保存PDB的打开状态,则执行ALTER PLUGGABLE DATABASE cndbapdb DISCARD STATE命令取消设置即可。
保存一个PDB的打开状态,代码如下:

保存所有PDB的打开状态,代码如下:

保存多个PDB的打开状态,代码如下:

除zhixinpdb外,保存其他PDB的打开状态,代码如下:

3.关闭PDB
在CDB root中可以通过ALTER PLUGGABLE DATABASE命令关闭PDB,代码如下:

如果连接到PDB中,可以通过SHUTDOWN命令关闭PDB,代码如下:
