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

推荐订阅源

K
Kaspersky official blog
云风的 BLOG
云风的 BLOG
IT之家
IT之家
T
The Blog of Author Tim Ferriss
C
Check Point Blog
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
G
Google Developers Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
F
Fortinet All Blogs
D
DataBreaches.Net
The Register - Security
The Register - Security
L
LINUX DO - 最新话题
W
WeLiveSecurity
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V2EX - 技术
V2EX - 技术
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
小众软件
小众软件
F
Full Disclosure
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
I
InfoQ
S
Secure Thoughts
TaoSecurity Blog
TaoSecurity Blog
MyScale Blog
MyScale Blog
AI
AI
Recent Announcements
Recent Announcements
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CXSECURITY Database RSS Feed - CXSecurity.com
V
Vulnerabilities – Threatpost
NISL@THU
NISL@THU
SecWiki News
SecWiki News
Cisco Talos Blog
Cisco Talos Blog
H
Heimdal Security Blog
Y
Y Combinator Blog
N
News | PayPal Newsroom
P
Privacy International News Feed
美团技术团队
Attack and Defense Labs
Attack and Defense Labs
D
Docker
PCI Perspectives
PCI Perspectives
Webroot Blog
Webroot Blog
A
About on SuperTechFans
A
Arctic Wolf
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
MongoDB | Blog
MongoDB | Blog
T
Threat Research - Cisco Blogs

博客园 - dirgo

Oracle关联表删除数据和更新数据 logback-spring.xml引入了base.xml日志文件默认生成在哪里? application.yml中Logback相关配置 org/springframework/boot/logging/logback/defaults.xml的内容和作用 logback-spring.xml 中<include resource="org/springframework/boot/logging/logback/base.xml"/>作用 Spring Boot 项目 Logback 日志框架配置文件logback-spring.xml详解 Oracle DataBaseLink 提示密码过期 梅特勒托-托利多衡器串口连续输出数据格式的说明 utf-8编码详解 mybaits updateWrapper更新报错:无效的列类型: 1111 @RequestPart和@RequestParam有什么区别 如何避免Mass Assignment漏洞? 关于vxe-table v4 导出大数据量excel浏览器卡死问题的解决 开源的Linux换源和安装docker脚本 wsl常用命令 使用网页静默打印 在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&quot;字(Word)&quot;类型,最直接和正确的做法是使用其内置的 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 名。