【翻译自mos文章】怎么startup/shutdown PDB?

怎么startup/shutdown PDB?
来源于:
12c: How to Startup/Shutdown PDB's? (文档 ID 1592247.1)

适用于:
Oracle Database - Enterprise Edition - Version 12.1.0.1 and later
Information in this document applies to any platform.

目标:
startup/shutdown PDB的方法。

解决方案:
在12c之前,传统的startup/shutdown 命令是:
Shutdown Command
SHUTDOWN NORMAL
SHUTDOWN IMMEDIATE
SHUTDOWN ABORT

Startup Command
STARTUP
STARTUP NOMOUNT
STARTUP MOUNT

在CDB中执行SHUTDOWN IMMEDIATE 会发生什么?


如果我们在container database (CDB)级别使用传统的shutdown命令,那么我们会把CDB和其下所有的PDB全部关闭。
[oracle@rhel59 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Sat Feb 13 03:45:42 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> select instance_name from v$instance;


INSTANCE_NAME
----------------
orcl


SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> alter session set container=pn1;
alter session set container=pn1
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0

SQL> 

从上面我们能确认:在container database (CDB)级别使用SHUTDOWN IMMEDIATE命令会把CDB和其下所有的PDB全部关闭

怎么关闭个别的PDB?
[oracle@rhel59 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Sat Feb 13 05:37:18 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL>  SELECT NAME,OPEN_MODE from v$PDBS;

NAME			       OPEN_MODE
------------------------------ ----------
PDB$SEED		       READ ONLY
PN1			       READ WRITE
PN2			       MOUNTED

SQL> ALTER SESSION SET CONTAINER=pn1; ------------->>>>关键点

Session altered.

SQL>  SHUTDOWN IMMEDIATE;
Pluggable Database closed.
SQL> SELECT NAME,OPEN_MODE from v$PDBS;

NAME			       OPEN_MODE
------------------------------ ----------
PN1			       MOUNTED

SQL> 

或者:
[oracle@rhel59 ~]$ sqlplus / as sysdba


SQL*Plus: Release 12.1.0.2.0 Production on Sat Feb 13 05:40:10 2016


Copyright (c) 1982, 2014, Oracle.  All rights reserved.




Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options


SQL> SELECT NAME,OPEN_MODE from v$PDBS;


NAME			       OPEN_MODE
------------------------------ ----------
PDB$SEED		       READ ONLY
PN1			       READ WRITE
PN2			       MOUNTED


SQL> alter pluggable database pn1 close;---->>关键点


Pluggable database altered.


SQL> SELECT NAME,OPEN_MODE from v$PDBS;


NAME			       OPEN_MODE
------------------------------ ----------
PDB$SEED		       READ ONLY
PN1			       MOUNTED
PN2			       MOUNTED


SQL> 

也可以这么写:SQL> alter pluggable database pn1 close immediate;
一旦我们执行了shutdown命令,pdb总是停留在mount状态


怎么根据需要启动某一个PDB?
有两种不同的方式来启动PDB
SQL> select con_id, name, open_mode from v$pdbs;


    CON_ID NAME 			  OPEN_MODE
---------- ------------------------------ ----------
	 2 PDB$SEED			  READ ONLY
	 3 PN1				  MOUNTED
	 4 PN2				  MOUNTED


SQL> alter pluggable database pn1 open;


Pluggable database altered.


SQL> select con_id, name, open_mode from v$pdbs;


    CON_ID NAME 			  OPEN_MODE
---------- ------------------------------ ----------
	 2 PDB$SEED			  READ ONLY
	 3 PN1				  READ WRITE
	 4 PN2				  MOUNTED


SQL> select con_id, name, open_mode,RESTRICTED from v$PDBS;


    CON_ID NAME 			  OPEN_MODE  RES
---------- ------------------------------ ---------- ---
	 2 PDB$SEED			  READ ONLY  NO
	 3 PN1				  READ WRITE NO
	 4 PN2				  MOUNTED


SQL> 



Open PDB in restricted mode
SQL> alter pluggable database PN1 open restricted;


Pluggable database altered.


SQL> SELECT NAME,OPEN_MODE,RESTRICTED from v$PDBS;


NAME                           OPEN_MODE  RES
------------------------------ ---------- ---
PN1                        READ WRITE YES

Open PDB with force option
SQL> alter pluggable database PN1 open FORCE;


Pluggable database altered.


SQL> SELECT NAME,OPEN_MODE,RESTRICTED from v$PDBS;


NAME                           OPEN_MODE  RES
------------------------------ ---------- ---
PN1                        READ WRITE NO

也可以把PDB open到upgrade模式
SQL> alter pluggable database PN1 open UPGRADE;
注意,本文也适用于rac,只需要把v$换成GV$
将脚本放置在 `/opt/sys/bin/startup/` 目录下并不会自动执行,除非该目录被明确集成到系统的启动流程中。Linux 系统的自动执行机制依赖于特定的配置和路径,例如 `/etc/rc.d/init.d` 或现代系统中的 systemd 单元文件。 在传统 SysV init 系统中,只有 `/etc/rc.d/init.d` 目录下的脚本才会被系统识别为服务脚本,并通过 `/etc/rc.d/rc` 脚本根据运行级别执行。每个运行级别对应的子目录(如 `/etc/rc.d/rc3.d`)中包含的符号链接指向 `/etc/rc.d/init.d` 中的实际脚本,从而决定哪些服务在该级别下启动[^1]。 对于 `/opt/sys/bin/startup/` 这样的自定义目录,若希望其中的脚本能够自动执行,需要手动将其集成到系统启动流程中。常见的方法包括: 1. **将脚本添加为 systemd 服务**:在现代 Linux 发行版中,systemd 是默认的初始化系统。可以通过创建 `.service` 文件来定义服务,并指定脚本的路径。例如,创建 `/etc/systemd/system/my_startup_script.service` 文件,内容如下: ```ini [Unit] Description=My Custom Startup Script [Service] ExecStart=/opt/sys/bin/startup/my_script.sh [Install] WantedBy=multi-user.target ``` 然后启用该服务以确保它在启动时运行: ```bash sudo systemctl enable my_startup_script.service ``` 2. **将脚本添加到 `/etc/rc.local`**:在某些系统中,`/etc/rc.local` 是一个可以放置自定义启动命令的脚本。确保该文件具有可执行权限,并在其中添加对 `/opt/sys/bin/startup/` 下脚本的调用。 3. **使用 cron 的 @reboot 功能**:可以将脚本添加到 cron 的启动任务中。编辑 root 用户的 crontab: ```bash sudo crontab -e ``` 添加如下行以在系统重启时运行脚本: ```cron @reboot /opt/sys/bin/startup/my_script.sh ``` 4. **将脚本链接到 `/etc/rc.d/init.d` 并配置运行级别**:如果系统仍使用 SysV init,则可以将脚本创建符号链接到 `/etc/rc.d/init.d`,并使用 `chkconfig` 或 `update-rc.d` 工具将其添加到特定运行级别中。 综上所述,除非 `/opt/sys/bin/startup/` 被明确集成到启动流程中,否则放置在该目录下的脚本不会自动执行。要实现自动执行,需根据系统使用的初始化机制进行相应的配置。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值