Oracle 18c 必须掌握的新特性:管理与实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.4 管理PDB

管理PDB和管理普通的Non-CDB一样,可以管理表空间、数据文件、临时文件和用户对象等,但是有些任务是无法在PDB级别执行的,例如下面的操作。

img 启动和关闭CDB。

img 修改CDB。

img 管理以下组件:进程、内存、错误和告警信息、诊断数据、控制文件、在线 redo日志、归档日志、UNDO模式。

img 创建、插入、拔出和删除PDB。

3.4.1 连接PDB

可以先配置TNS,然后通过SQL*PLUS 命令直接访问容器;也可以先连接CDB,然后通过ALTER 命令访问PDB。

(1)通过TNS直接访问

TNS配置代码如下:

img

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

img
img

如果访问时报如下错误:

img

可以参考笔者的博客文章来解决:《Oracle 18c 通过 service_name 连接PDB报ORA-12514 错误解决方法》(https://www.cndba.cn/cndba/dave/article/2997)。

(2)通过ALTER SESSION命令访问

这种访问方式只能普通用户使用,代码如下:

img

3.4.2 在系统级别修改PDB

可以使用ALTER SYSTEM命令动态修改PDB,如果当前容器是PDB,那么可以执行以下命令:

img ALTER SYSTEM FLUSH { SHARED_POOL | BUFFER_CACHE |FLASH_CACHE };

img ALTER SYSTEM { ENABLE | DISABLE } RESTRICTED SESSION;

img ALTER SYSTEM SET USE_STORED_OUTLINES;

img ALTER SYSTEM { SUSPEND | RESUME };

img ALTER SYSTEM CHECKPOINT;

img ALTER SYSTEM CHECK DATAFILES;

○ ALTER SYSTEM REGISTER;

img ALTER SYSTEM { KILL | DISCONNECT } SESSION;

img ALTER SYSTEM SET 初始化参数。

对于修改初始化参数,如果V$SYSTEM_PARAMETER视图中的列ISPDB_MODIFIABLE是TRUE,那么可以在PDB级别进行修改,并不会影响CDB的参数值。

在Oracle 18c中,共有210个可在PDB中修改的参数。

img

3.4.3 在数据库级别修改PDB

在数据库级别修改PDB,主要是使用ALTER PLUGGABLE DATABASE命令,相当于使用ALTER DATABASE命令修改Non-CDB。

如果当前容器是PDB,则执行ALTER PLUGGABLE DATABASE命令的结果是覆盖从CDB继承来的默认值,但不会影响其他的容器,相关命令如下。

验证当前容器是PDB,代码如下:

img

关闭PDB,代码如下:

img

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

img

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

img

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

img

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

img

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

img

3.4.4 启动/关闭PDB

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

表3-3 PDB的打开模式及其说明

img

在打开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,代码如下:

img

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

img

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

img

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

img

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

img

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

img

2.保存当前PDB的打开状态

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

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

img

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

img

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

img

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

img

3.关闭PDB

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

img

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

img