PDB的导入导出:
描述:
12c推出了可插拔数据库,在一个容器cdb中以多租户的形式同时存在多个数据库pdb。在为pdb做数据泵导入导出时和传统的数据库有少许不同。
1,需要为pdb添加tansnames
2,导入导出时需要在userid参数内指定其tansnames的值,比如 userid=user/pwd@tnsname
实验流程:
连接至该PDB:
[oracle@server1 ~]$ sqlplus sys/oracle@pdb1 as sysdba
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 PDB1 READ WRITE NO
创建目录对象:
[oracle@server1 ~]$ mkdir pdb1_expdp
SQL>create directory pdb1_dir as '/home/oracle/pdb1_expdp';
//如果使用PDB下其他用户执行导出的话,需要给该用户授读写权限
SQL> grant read,write on directory pdb1_dir to xxx;
//本次使用system用户导出
配置PDB tnsname:
pdb1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.199.243)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1)
)
)
执行导出:
全库导出:
[oracle@server1 admin]$expdp system/oracle@pdb1 directory=pdb1_dir dumpfile=pdb1.dmp logfile=pdb1.log full=y
按用户导出:
[oracle@server1 admin]$expdp system/oracle@pdb1 directory=pdb1_dir dumpfile=pdb1_hr.dmp logfile=pdb1_hr.log schema=hr
按表空间导出:
[oracle@server1 admin]$expdp system/oracle@pdb1 directory=pdb1_dir dumpfile=pdb1.dmp logfile=pdb1.log tablespace=users
...皆与非CDB相同
执行导入:
全库导入:
[oracle@server1 admin]$impdp system/oracle@pdb1 directory=pdb1_dir dumpfile=pdb1.dmp logfile=pdb1.log full=y
按用户导入:
[oracle@server1 admin]$impdp system/oracle@pdb1 directory=pdb1_dir dumpfile=pdb1_hr.dmp logfile=pdb1_hr.log schema=hr
按表空间导入://表空间需事先创建好
[oracle@server1 admin]$impdp system/oracle@pdb1 directory=pdb1_dir dumpfile=pdb1.dmp logfile=pdb1.log tablespace=users
...皆与非CDB相同
CDB的导入导出:
[oracle@server1 admin]$ sqlplus / as sysdba
SQL> create directory cdb as '/home/oracle/cdb';
全库导出:
[oracle@server1 ~]$ expdp system/oracle directory=cdb dumpfile=cdb.dmp logfile=cdb.log full=y
通过将CDB.DMP与PDB的导出文件进行大小比对发现仅导出了根容器
所以可以得出CDB的导出不包含PDB