虚拟化容器,大数据,DBA,中间件,监控。

oracle 19c创建/删除/插入/拔出CDB/PDB

04 08月
作者:admin|分类:DBA运维

oracle 19c创建/删除/插入/拔出CDB/PDB


一.创建CDB

一般使用dbca和命令行方式来创建CDB,dbca有两种方式:

1.使用图形化dbca

2.使用dbca命令行静默方式安装

dbca -createDatabase \

-slient \

....

一大堆参数,可以参考官方文档.

还可以指定响应文件,即事先编辑好dbca的响应文件,直接使用

dbca -createDatabase -responseFile xxxxx(文件名) -slient

具体响应文件模版在$ORACLE_HOME/ass*/dbca.rp中,具体配置方法可以参考官方文档.

还可以使用sqlplus命令行方式.即使用CREATE DATABASE命令来创建,具体的CREATE DATABASE命令可以参考oracle官方文档.

建议使用DBCA图形化方式安装CDB,就和以前的创建非CDB数据库一样

 

二.创建PDB

1.同样,创建PDB一般也可以使用dbca和命令行方式创建

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

2.命令行的方式可以使用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数据文件的目录.由于是从PDB$SEED进行的克隆,所以需要指定一个FILE_NAME_CONVERT参数,将PDB$SEED的数据文件目录进行转换.

例如这里我们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.

3.还可以从其他的PDB(非PDB$SEED)容器进行克隆,生成新的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;

三.删除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为保留数据文件,默认如果不添加任何参数即为keep datafiles,但是注意keep datafiles则必须先将PDB拔出,所以一般是用在拔出和插入PDB场景下.

 

四.拔出和插入PDB

1.拔出PDB

    1)关闭PDB

 

SQL> alter pluggable database testpdb4 close immediate;

Pluggable database altered.

    2)拔出PDB

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

 

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

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

    3)删除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

2.插入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/中。

    2)打开PDB

 

SQL> alter pluggable database testpdb4 open;

    3)查看插入PDB是否有报错

 

SQL> select name,cause,type,message,status from PDB_PLUG_IN_VIOLATIONs order by name;

 

 

 

 

 

浏览510 评论0
返回
目录
返回
首页
Oracle Database 19c安装Sample Schemas ETL-Talend官方入门实战案例