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 的数据文件目录进行转换.

例如这里我们 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 回帖 • 340 关注

相关帖子

欢迎来到这里!

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

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