PDB 创建删除插入拔出

创建 PDB

  1. 使用 dbca 创建 PDB

dbca 图形化方式就不讲了,这里主要讲 SQLPLUS 命令行创建 PDB 的方法

  1. 使用 PDB$SEED 创建 PDB

1).如果使用的是 OMF,例如是集群环境,直接使用 create pluggable database 命令创建 PDB,如下:

create pluggable database pdb1 admin user pdb1admin identified by pdb1admin;

这里由于使用的是 OMF,可以不指定新建的 PDB 数据文件
路径,则会将数据文件存放到 DB_CREATE_FILE_DEST 下的 GUID 目录下(GUID 可以在 v$pdbs 中查询到).

还可以指定文件的创建路径,例如:

create pluggable database pdb1 admin user pdb1admin identified by pdb1admin create_file_dest='+PDBDATA';

2).如果使用的是非 OMF 环境,则需要指定 PDB 数据文件的目录.由于是从 PDBSEED进行的克隆,所以需要指定一个FILE_NAME_CONVERT参数,将PDBSEED 的数据文件目录进行转换.

例如这里我们 PDBSEED 文件目录为:

[oracle@ora19c1 pdbseed]$ pwd

/u01/app/oracle/oradata/ORA19C/pdbseed

则创建新的 PDB 语法如下:

create pluggable database testpdb2 admin user suq identified by suq 
file_name_convert=('/u01/app/oracle/oradata/ORA19C/pdbseed','/u01/app/oracle/oradata/ORA19C/testpdb2');

这样创建的 PDB 默认只创建了 SYSTEM,SYSAUX,TEMP,UNDO 表空间(19c 环境)

还可以进行简写,如下:

create pluggable database testpdb4 admin user suq identified by suq file_name_convert=('pdbseed','testpdb4');

上面的意思,默认从 pdb$seed 容器进行拷贝,并且将 pdb$seed 的数据文件路径中的 pdbseed 都替换为 testpdb4.

[oracle@ora19c1 testpdb2]$ ls -l
total 609360
-rw-r-----. 1 oracle oinstall 173023232 Jun 23 22:27 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 220209152 Jun 23 22:27 system01.dbf
-rw-r-----. 1 oracle oinstall  20979712 Jun 23 22:27 temp01.dbf
-rw-r-----. 1 oracle oinstall 230694912 Jun 23 22:27 undotbs01.dbf

还可以指定默认表空间创建:

create pluggable database testpdb3 admin user suq identified by suq 
file_name_convert=('/u01/app/oracle/oradata/ORA19C/pdbseed','/u01/app/oracle/oradata/ORA19C/testpdb3')
default tablespace users
datafile '/u01/app/oracle/oradata/ORA19C/testpdb3/user01.dbf' size 10m autoextend on;

Pluggable database created.

上面创建完成之后,我们发现 在 test3pdb/目录下面并没有生成 user01.dbf 文件,是因为刚创建完成之后 pdb 的状态为 mount:

SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 BRENT			  READ WRITE NO
	 4 TESTPDB1			  READ WRITE NO
	 5 TESTPDB2			  MOUNTED
	 6 TESTPDB3			  MOUNTED

需要手工将 PDB 进行 open,之后 pdb 才会创建刚刚的默认表空间和数据文件,alter pluggable database testpdb3 open

SQL> alter pluggable database testpdb3 open;
Pluggable database altered.
  1. 其他的 PDB 复制

使用此方法需要注意:

i)如果使用的是 12.1 版本,则源 PDB 必须处于只读模式。如果使用的是 12.2 版本,则源 PDB 可以处于打开状态,只要 CDB 处于归档模式,并且使用本地的 UNDO 管理(默认选项)

ii)CDB 中的每一个 PDB 必须被唯一标识

iii)一旦克隆完毕,新 PDB 至少需要以读写模式打开一次,以便进行后继的操作

1)在 OMF 环境中的克隆

在 OMF 中克隆 PDB 非常简单,无需指定额外的子句即可.例如克隆 PDB1 来创建 PDB5

CREATE PLUGGABLE DATABASE PDB5 FROM PDB1;
alter pluggable database pdb5 open;

2)在非 OMF 环境中克隆

同意在非 OMF 环境中克隆需要指定 FILE_NAME_CONVERT 子句,例如克隆 TESTPDB1 来创建 TESTPDB5

SQL> create pluggable database testpdb5 from testpdb1
file_name_convert=('/u01/app/oracle/oradata/ORA19C/testpdb1','/u01/app/oracle/oradata/ORA19C/testpdb5');

注意这里的文件名称转换是将 testpdb1 转换成 testpdb5;

  1. 从非 CDB 插入 CDB

    SQL> startup mount
    ORACLE instance started.
    Total System Global Area 2622255104 bytes
    Fixed Size 2685024 bytes
    Variable Size 1644169120 bytes
    Database Buffers 956301312 bytes
    Redo Buffers 19099648 bytes
    Database mounted.
    SQL> alter database open read only;
    Database altered.
    SQL> exec dbms_pdb.describe('/tmp/rptqa12c.xml');
    
    PL/SQL procedure successfully completed.
    

删除 PDB

删除 PDB 之前需要将 PDB 先关闭,使用 drop pluggable database 命令,如下:

SQL> alter pluggable database testpdb5 close;

Pluggable database altered.

SQL>  drop pluggable database testpdb5 including datafiles;

Pluggable database dropped.

如果是删除 PDB 一般使用 including datafiles 则会将数据文件一起删除, keep datafiles 为默认选项。

拔出和插入 PDB

拔出 PDB

当 PDB 被拔出(unplugged)后,它在物理存储上是一个独立的文件集合,但从数据库实例的角度看,它处于一种特殊的状态。它不再与源 CDB(Container Database)实例有活动的关联,比如不再参与事务处理、用户连接等操作。因此其仍然可以,而且应该对其进行备份。

  1. 关闭 PDB
SQL> alter pluggable database testpdb4 close immediate;

Pluggable database altered.
  1. 拔出 PDB

拔出 PDB 的时候指定 xml 位置,xml 中记录了 PDB 的信息,例如数据文件目录,DBID,PDB 参数等等

SQL> alter pluggable database testpdb4 unplug into '/home/oracle/testpdb4.xml';

被拔出的 PDB 只能被删除,不能做其它操作,例如 mount,打开等.

  1. 删除 PDB

下面删除 PDB,如果不加任何参数,默认为 keep datafiles 保留数据文件.

SQL> drop pluggable database testpdb4;

Pluggable database dropped.

SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 BRENT			  READ WRITE NO
	 4 TESTPDB1			  READ WRITE NO
	 5 TESTPDB2			  READ WRITE NO
	 6 TESTPDB3			  READ WRITE NO

插入 PDB

  1. 插入 PDB

使用 create pluggable database 指定 xml 位置来插入 PDB

SQL> create pluggable database testpdb4 using '/home/oracle/testpdb4.xml' nocopy;   

Pluggable database created.

SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 BRENT			  READ WRITE NO
	 4 TESTPDB1			  READ WRITE NO
	 5 TESTPDB2			  READ WRITE NO
	 6 TESTPDB4			  MOUNTED

注意:上面的,创建 pdb 的时候,你可以指定不同的 PDB 命令,例如你 unplug 的 PDB 为 testpdb4,你创建的时候名字可以是 testpdb3,但是如果你使用的是同样的 xml 文件,则数据文件位置不会变动,只是 pdb 名字变化了

一般我拔出了 PDB 之后,使用场景是将他插入到其它的 CDB 中,那么我们可以将他的数据文件和生成的 xml 文件拷贝到另外一台 CDB 上,一般情况下的数据文件目录都是不一样的,那么就可以使用下面的语法:

SQL> create pluggable database PDB8 using '/u01/tmp/pdb8.xml' 
SOURCE_FILE_NAME_CONVERT=('/u02/app/oracle/oradata/DG/PDB8/','/u01/tmp/PDB8/')
MOVE FILE_NAME_CONVERT=('/u01/tmp/PDB8/','/u01/app/oracle/oradata/MPCDB/PDB8/')
PATH_PREFIX='/u01/app/oracle/oradata/MPCDB/PDB8/' ;

这里 xml 文件中指示数据文件在/u02/app/oracle/oradata/DG/PDB8/中,

而实际上数据文件在/u01/tmp/PDB8/中,

且最终我们要将数据文件放在/u01/app/oracle/oradata/MPCDB/PDB8/中。

  1. 打开 PDB
SQL> alter pluggable database PDBC open;
  1. 查看插入 PDB 是否有报错
SQL> select name,cause,type,message,status from PDB_PLUG_IN_VIOLATIONs order by name;
NAME       CAUSE       TYPE      MESSAGE                                                                                                          STATUS
PDB$SEED   SQL Patch   ERROR     '19.3.0.0.0 Release_Update 1904101227' is installed in the CDB but no release updates are installed in the PDB   RESOLVED
PDBC       Parameter   WARNING   CDB parameter processes mismatch: Previous 200 Current 320                                                       PENDING

实战:Oracle plug & unplug1


  1. 实战:Oracle plug & unplug

    -- close PDB
    SQL> alter pluggable database all close;
    
    Pluggable database altered.
    
    SQL> show pdbs;
    
        CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    ---------- ------------------------------ ---------- ----------
             2 PDB$SEED                       READ ONLY  NO
             3 PDBA                           MOUNTED
             4 PDBC                           MOUNTED
             5 PDBB                           MOUNTED
    
    -- unplug PDBC
    SQL> alter pluggable database PDBC unplug into '/tmp/pdbc.xml';
    
    Pluggable database altered.
    
    SQL> show pdbs;
    
        CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    ---------- ------------------------------ ---------- ----------
             2 PDB$SEED                       READ ONLY  NO
             3 PDBA                           MOUNTED
             4 PDBC                           MOUNTED
             5 PDBB                           MOUNTED
    
    SQL> SELECT PDB_NAME, STATUS FROM DBA_PDBS;
    PDB_NAME   STATUS
    PDBA       NORMAL
    PDB$SEED   NORMAL
    PDBC       UNPLUGGED
    PDBB       NORMAL
    
    -- 不删除PDBC,直接插入会报错
    SQL> create pluggable database PDBC using '/tmp/pdbc.xml' nocopy;
    
    create pluggable database PDBC using '/tmp/pdbc.xml' nocopy
     *
    ERROR at line 1:
    ORA-65012: Pluggable database PDBC already exists.
    
    SQL> drop pluggable database PDBC;
    
    Pluggable database dropped.
    
    -- 也可使用参数including datafiles
    SQL> drop pluggable database PDBC including datafiles;
    
    SQL> show pdbs;
      CON_ID CON_NAME   OPEN MODE   RESTRICTED
           2 PDB$SEED   READ ONLY   NO
           3 PDBA       MOUNTED
           5 PDBB       MOUNTED
    
    SQL> create pluggable database PDBC using '/tmp/pdbc.xml' nocopy;
    
    Pluggable database created.
    
    
    SQL> show pdbs;  
      CON_ID CON_NAME   OPEN MODE   RESTRICTED
           2 PDB$SEED   READ ONLY   NO
           3 PDBA       MOUNTED
           5 PDBB       MOUNTED
           6 PDBC       MOUNTED
    
    SQL> SELECT PDB_NAME, STATUS FROM DBA_PDBS;
    PDB_NAME   STATUS
    PDBA       NORMAL
    PDB$SEED   NORMAL
    PDBB       NORMAL
    PDBC       NEW
    
    

  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 370 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...