天天看点

Oracle 12c、18c、19c CDB、PDB常用命令

一、CDB、PDB常用管理命令

  • 查看PDB信息(在CDB模式下)
show pdbs  --查看所有pdb
select name,open_mode from v$pdbs为PDB信息视图
select con_id, dbid, guid, name , open_mode from v$pdbs;      
  • 切换容器
alter session set container=orcl1  --切换到PDBorcl1容器
alter session set container=CDB$ROOT    --切换到CDB容器      
  • 查看当前属于哪个容器
select sys_context('USERENV','CON_NAME') from dual; --使用sys_context查看属于哪个容器
show con_name  --用show查看当前属于哪个容器      
  • 启动PDB
alter pluggable database orcl1 open;    --开启指定PDB
alter pluggable database all open;  --开启所有PDB
alter session set container=orcl1;  --切换到PDB进去开启数据库
startup      
  • 关闭PDB
alter pluggable database orcl1 close;      --关闭指定的PDB
alter pluggable database all close;    --关闭所有PDB
alter session set container=orcl1;  --切换到PDB进去关闭数据库
shutdown immediate      
  • 创建或克隆前要指定文件映射的位置(需要CBD下sysdba权限)
alter system set db_create_file_dest='/u01/app/oracle/oradata/orcl/orcl2';      
  • 创建一个新的PDB:(需要CBD下sysdba权限)
create pluggable database test admin user admin identified by admin;    
alter pluggable database test_pdb open;    --将test_pdb 打开      
  • 克隆PDB(需要CBD下sysdba权限)
create pluggable database orcl2 from orcl1;  --test_pdb必须是打开的,才可以被打开
alter pluggable database orcl2 open;  --然后打开这个pdb      
  • 删除PDB(需要CBD下sysdba权限)
alter pluggable database  orcl2 close;  --关闭之后才能删除
drop pluggable database orcl2 including datafiles;  --删除PDB orcl2      
  • 设置CDB启动PDB自动启动(在这里使用的是触发器)
CREATE OR REPLACE TRIGGER open_pdbs
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END open_pdbs;
/      

二、Oracle 从PDBSEED创建PDB

  • 要确认PDBSEED的文件位置
select name from v$datafile;      
  • 创建一个目录,这个目录是新创建的PDB的名字
mkdir -p /u01/app/oracle/oradata/ora12cdb/ora_pdb3      
  • 从PDBSEED创建PDB
create pluggable database ora_pdb3 admin user hu identified by hu roles=(connect) default tablespace users datafile '/u01/app/oracle/oradata/ora12cdb/ora_pdb3/users01.dbf' size 20M autoextend on file_name_convert=('/u01/app/oracle/oradata/ora12cdb/pdbseed/','/u01/app/oracle/oradata/ora12cdb/ora_pdb3/');      
  • 查看PDB
show pdbs;      
  • 打开PDB
alter pluggable database ora_pdb3 open;      
  • 关闭PDB
alter pluggable database ora_pdb3 colse immediate;
show pdbs;      

三、通过已有PDB在本地克隆出新的PDB

实验步骤:

  • 查看PDB
show pdbs      
  • 关闭需要被克隆的PDB,并打开为只读状态
alter pluggable database ora_pdb1 close immediate;
alter pluggable database ora_pdb1 open read only;      
  • 创建一个目录,这个目录是新创建的PDB的名字
mkdir -p /u01/app/oracle/oradata/ora12cdb/ora_pdb4      
  • 克隆PDB
create pluggable database ora_pdb4 from ora_pdb1 file_name_convert=('/u01/app/oracle/oradata/ora12cdb/ora_pdb1/','/u01/app/oracle/oradata/ora12cdb/ora_pdb4/');
show pdbs      
  • 打开PDB
alter pluggable database ora_pdb4 open;
show pdbs      

四、Oracle 12c 使用Non-CDB来创建PDB

现有一个非CDB的数据库ora12cdb,计划将其作为PDB,装入CDB中。

  • 进入ORCL,将其设置为只读模式
startup mount
alter database open read only;
select OPEN_MODE from v$database;      
  • 连接到Non-CDB,并执行dbms_pdb.describe过程来创建描述Non-CDB的XML元数据文件。执行该过程的用户必须有sysdba权限。
BEGIN
DBMS_PDB.DESCRIBE
( pdb_descr_file => '/home/oracle/ncdb.xml');
END;
/      
  • 关闭Non-CDB
shutdown immediate
srvctl stop database -db ora12cdb(集群)      
  • 插入Non-CDB
CREATE PLUGGABLE DATABASE old12c_pdb USING '/home/oracle/ncdb.xml' source_file_name_convert = ('/u01/app/oracle/oradata/ora12cdb/', '/u01/app/oracle/oradata/ora12cdb/old12c_pdb/') nocopy tempfile reuse;
select name,open_mode from v$pdbs;      
  • 执行$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql脚本

这个脚本必须在第一次打开新PDB之前执行。如果PDB不是由Non-CDB创建而来,那么就不需要执行这个脚本。为了执行noncdb_to_pdb.sql脚本,完成以下操作:

a.访问PDB,当前用户必须有sysdba权限,并且权限必须是公共或本地授予给PDB。最好使用as sysdba进行连接。

alter session set container=old12c_pdb;      

b.执行noncdb_to_pdb.sql脚本:

SQL>@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql      
  • 以读写模式打开新PDB
alter pluggable database old12c_pdb open read write; -- 默认启动就是read/write模式 
select name,open_mode from v$pdbs;      
  • 备份PDB