在Oracle 12c及更高版本中引入的多租户架构极大地改变了数据库的管理方式,容器数据库与可插拔数据库的分离,使得资源整合和隔离变得前所未有的高效,这种新架构也带来了一些新的管理操作,其中最基本且最频繁的便是如何打开(启动)一个PDB数据库,本文将详细、系统地介绍在Oracle 12c环境中打开PDB数据库的多种方法、相关配置以及最佳实践。
准备工作:连接到CDB
在对PDB进行任何操作之前,管理员必须首先连接到其所在的CDB,因为PDB的生命周期(如打开、关闭)是由CDB来控制的,我们使用具有最高权限的SYSDBA
身份进行连接。
打开操作系统命令行工具(如Linux的Terminal或Windows的CMD),执行以下命令:
sqlplus / as sysdba
此命令将以操作系统认证的方式,使用SYS
用户并以SYSDBA
身份连接到本地默认的CDB实例,连接成功后,你将看到SQL提示符SQL>
。
打开单个PDB数据库
这是最核心、最常用的操作,当你需要让某个特定的应用访问其对应的PDB时,就需要执行此命令。
执行打开命令
连接到CDB后,使用ALTER PLUGGABLE DATABASE
语句来打开指定的PDB,其基本语法如下:
ALTER PLUGGABLE DATABASE <pdb_name> OPEN;
要打开一个名为orclpdb
的PDB,命令如下:
ALTER PLUGGABLE DATABASE orclpdb OPEN;
执行后,系统会返回“Pluggable database altered.”的提示。
验证PDB状态
为了确认PDB是否已成功打开,可以查询V$PDBS
动态性能视图,这个视图列出了当前CDB中所有PDB的状态。
SELECT name, open_mode FROM v$pdbs;
在查询结果中,如果orclpdb
对应的OPEN_MODE
列显示为READ WRITE
,则表示该PDB已成功打开并处于可读写的正常状态,如果显示为MOUNTED
,则表示它仍处于挂载状态,尚未打开。
你也可以指定打开模式,例如以只读方式打开:
ALTER PLUGGABLE DATABASE orclpdb OPEN READ ONLY;
打开所有PDB数据库
在某些场景下,例如在CDB维护完成后,你可能需要一次性打开CDB中所有的PDB,Oracle提供了便捷的语法来实现这一需求。
ALTER PLUGGABLE DATABASE ALL OPEN;
这条命令会尝试打开当前CDB中所有处于MOUNTED
状态的PDB,同样,你可以使用SELECT name, open_mode FROM v$pdbs;
来验证所有PDB是否都已成功打开。
实现PDB开机自动打开
默认情况下,当CDB重启时,其中的PDB并不会自动打开,它们会保持在关闭前的状态,如果希望某个PDB在CDB启动后自动进入OPEN
状态,需要手动保存其状态,这是12.1.0.2版本引入的重要特性。
保存PDB状态
使用SAVE STATE
子句可以永久保存PDB的打开状态。
ALTER PLUGGABLE DATABASE orclpdb SAVE STATE;
执行此命令后,Oracle会将orclpdb
的打开状态信息记录在CDB的字典中,当下次CDB启动时,它会自动将此PDB打开到READ WRITE
模式。
查看已保存的状态
可以通过查询DBA_PDB_SAVED_STATES
视图来查看哪些PDB已经保存了状态。
SELECT con_name, instance_name, state FROM dba_pdb_saved_states;
取消保存状态
如果不再需要PDB自动打开,可以使用DISCARD STATE
子句来清除已保存的状态。
ALTER PLUGGABLE DATABASE orclpdb DISCARD STATE;
常用操作命令汇总
为了方便快速查阅,下表小编总结了管理PDB开关状态的常用命令:
操作描述 | 命令 | 说明 |
---|---|---|
连接CDB | sqlplus / as sysdba | 以SYSDBA身份连接到本地CDB |
打开单个PDB | ALTER PLUGGABLE DATABASE <pdb_name> OPEN; | 将指定PDB从MOUNTED状态切换到READ WRITE状态 |
打开所有PDB | ALTER PLUGGABLE DATABASE ALL OPEN; | 批量打开CDB中所有MOUNTED状态的PDB |
关闭单个PDB | ALTER PLUGGABLE DATABASE <pdb_name> CLOSE; | 关闭指定的PDB |
保存PDB状态 | ALTER PLUGGABLE DATABASE <pdb_name> SAVE STATE; | 使PDB在CDB重启后自动打开 |
取消保存状态 | ALTER PLUGGABLE DATABASE <pdb_name> DISCARD STATE; | 撤销PDB的自动打开设置 |
查看PDB状态 | SELECT name, open_mode FROM v$pdbs; | 检查所有PDB的当前打开模式 |
相关问答FAQs
问题1:为什么我的PDB在CDB重启后又变回了MOUNTED状态,即使我之前手动打开过它?
解答: 这是Oracle 12c多租户架构的默认行为,PDB的状态默认是不会被CDB记住的,当CDB关闭并重启时,所有PDB都会恢复到CDB关闭前的状态,如果你希望某个PDB能够随CDB一起自动打开,你必须使用ALTER PLUGGABLE DATABASE <pdb_name> SAVE STATE;
命令来显式地保存它的打开状态,执行后,该PDB才会在后续的CDB启动过程中自动开启。
问题2:我可以不连接到CDB,而是直接连接到PDB然后执行OPEN命令吗?
解答: 这是一个很好的问题,涉及到连接的细节,你不能连接到一个处于CLOSED
或MOUNTED
状态的PDB,你可以通过配置TNS别名,使用SYSDBA
身份直接连接到PDB,当你执行类似sqlplus sys/password@pdb_tns_alias AS SYSDBA
的命令时,Oracle会隐式地为你完成两件事:它会连接到CDB并执行ALTER PLUGGABLE DATABASE <pdb_name> OPEN;
命令;它会将你的会话切换到该PDB中,虽然从用户体验上是“直接连接并打开了PDB”,但其底层逻辑依然是先通过CDB来管理PDB的生命周期,对于日常管理,推荐先连接到CDB,再明确地执行ALTER
命令,这样操作更清晰、更可控。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复