惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - dirgo

在Oracle中,授予用户角色和权限 Linux下查看当前哪些端口在监听状态,哪些端口在连接状态 mobaxterm常用配置 Windows下udp工具 Oracle表空间用户授权创建dblink等操作 用nmap扫描找出某个网段下空闲的ip脚本 Oracle 19c 常用运维 SQL Linux下设置CDB/PDB 环境的Oracle19c开机启动 怎样禁止dbeaver点击导航中数据库自动切换sql编辑器所属的数据库 Oracle 19c占内存高的解决方法 sudo -i -u zhangsan 与su - zhangsan区别,在现代 Linux 系统中,推荐使用 sudo 进行权限切换 Linux 的目录结构英文全称(及可能的命名背景)和更详细的说明 利用 Logback 的热加载特性,安全的迁移日志,改变日志保存路径 Linux中查询进程内存占用 iotDB调整内存占用及注意事项 Eclipse Milo 处理PLC"字(Word)"类型,最直接和正确的做法是使用其内置的 UShort 类型 centos7.9安装minio RELEASE.2025-04-22T22-12-26Z centos7.9编译安装nginx 1.28.1 linux(centos7.9)编译安装redis7.2.4 UFW 防火墙常用命令速查表
Oracle是 CDB/PDB 环境下,让PDB在数据库启动后自动打开
dirgo · 2026-03-02 · via 博客园 - dirgo

在 Oracle 12c 及以上版本里,让 PDB 在 CDB 启动后自动打开,推荐用“保存状态”(SAVE STATE)特性,从 12.1.0.2 开始支持。如果你是很老的 12.1.0.1,就只能用系统触发器。
下面分两种情况给你一个完整操作步骤。

一、先确认你的版本

以 sysdba 登录 CDB:

SELECT * FROM v$version;

或:

SELECT VERSION FROM PRODUCT_COMPONENT_VERSION WHERE PRODUCT LIKE 'Oracle Database%';
  • 如果是 12.1.0.2 及以上(包括 12.2、18c、19c 等) → 用方案一(SAVE STATE)。
  • 如果是 12.1.0.1 及更早 → 用方案二(触发器)。

方案一:用 SAVE STATE 让 PDB 自动打开(推荐)

1. 基本原理

Oracle 从 12.1.0.2 开始提供了“保存 PDB 打开状态”的功能:
你在 PDB 打开(READ WRITE/READ ONLY)状态下执行:

ALTER PLUGGABLE DATABASE <pdb名> SAVE STATE;

Oracle 会把当前打开状态记录下来,下次 CDB 启动时,自动把该 PDB 恢复成这个状态。
状态保存在视图 DBA_PDB_SAVED_STATES 里。

2. 操作步骤(单 PDB 示例)

假设你的 PDB 叫 PDB1,CDB 叫 CDB$ROOT
1)以 sysdba 登录 CDB 根容器:

sqlplus / as sysdba

2)确认当前 PDB 状态:

SHOW PDBS;

或:

SELECT NAME, OPEN_MODE FROM V$PDBS;

3)打开 PDB:

ALTER PLUGGABLE DATABASE pdb1 OPEN;

4)保存 PDB 状态(让下次 CDB 启动时自动打开):

ALTER PLUGGABLE DATABASE pdb1 SAVE STATE;

5)查看已保存的状态:

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

表示已保存为 OPEN 状态。
6)重启 CDB 验证:

SHUTDOWN IMMEDIATE;
STARTUP;
-- 等待实例完全启动后
SHOW PDBS;

正常情况下,PDB1 应该已经是 READ WRITE,不再是 MOUNTED。

3. 让所有 PDB 都自动打开

如果你有多个 PDB,想让全部自动打开,可以一次性处理:
1)打开所有 PDB:

ALTER PLUGGABLE DATABASE ALL OPEN;

2)保存所有 PDB 的状态:

ALTER PLUGGABLE DATABASE ALL SAVE STATE;

这样,以后 CDB 重启时,所有 PDB 都会自动打开到之前保存的状态(READ WRITE 或 READ ONLY)。

4. 取消自动打开(清除保存的状态)

如果你不想某个 PDB 再自动打开,可以清除其保存状态:

ALTER PLUGGABLE DATABASE pdb1 DISCARD STATE;

之后重启 CDB,这个 PDB 会回到默认行为:MOUNTED,需要手工打开。

方案二:用系统触发器(适合 12.1.0.1 及更早)

如果你的版本是 12.1.0.1 或更早,不支持 SAVE STATE,可以在 CDB 上创建一个系统触发器,在数据库启动后自动打开 PDB。

1. 创建触发器

以 sysdba 登录 CDB:

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

这个触发器会在每次 CDB STARTUP 后自动执行 ALTER PLUGGABLE DATABASE ALL OPEN,把所有 PDB 打开。

2. 自定义只打开部分 PDB

如果你只想自动打开某几个 PDB,可以在触发器里写具体名字:

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

小结

  • 版本 ≥ 12.1.0.2
    ALTER PLUGGABLE DATABASE ... SAVE STATE;,这是官方推荐方式,无需触发器。
  • 版本 ≤ 12.1.0.1
    用系统触发器 AFTER STARTUP ON DATABASE,在触发器里 ALTER PLUGGABLE DATABASE ALL OPEN 或指定 PDB 名。