Oracle Data Pump的一般架构
Oracle Data Pump是一种用于数据和元数据移动的高效工具,提供了多种接口和模式来执行数据导出和导入操作。其一般架构如下:
DBMS_DATAPUMP包:这是核心的数据和元数据移动引擎,负责管理和执行Data Pump操作。 Data Pump工具:包括expdp(导出工具)和impdp(导入工具),用于数据的导出和导入。 External Table(外部表):用于与外部数据文件进行交互,可以通过Oracle Loader或Oracle Data Pump访问。 Direct Path API(直接路径API):用于高效的数据加载,绕过了常规的SQL接口。 DBMS_METADATA包:用于管理数据库元数据。 客户端:包括SQL*Loader、expdp和impdp等,可以通过命令行或图形界面进行操作。
使用Data Pump导出和导入在Oracle数据库之间移动数据
Data Pump Export and Import Clients
Data Pump导出和导入的过程涉及以下几个关键组件:
expdp client:发起导出任务。 源数据库:包含要导出的数据,创建一个主表以跟踪导出操作。 Data Pump job:处理导出任务,将数据写入转储文件集。 Dump file set:存储导出的数据。 目标数据库:接收导入的数据,创建一个主表以跟踪导入操作。 impdp client:发起导入任务。 Database link:在网络模式下,允许跨数据库传输数据。
使用镜像副本或备份集在数据库之间传输表空间
Full Transportable Export/Import: Example
全传输导出/导入是一种用于传输整个数据库或特定表空间的高效方法。步骤如下:
将表空间设为只读:确保在传输过程中表空间数据不被修改。
ALTER TABLESPACE appl1 READ ONLY;
ALTER TABLESPACE hrtbs READ ONLY;
导出数据:使用expdp工具执行全传输导出,将数据写入转储文件。
expdp user_name@proddb FULL=y DUMPFILE=expdat.dmp DIRECTORY=data_pump_dir TRANSPORTABLE=always LOGFILE=export.log
字节序转换:如有必要,使用RMAN CONVERT或DBMS_FILE_TRANSFER进行字节序转换。 传输数据文件和转储文件:将这些文件复制到目标数据库。 导入数据:使用impdp工具将数据导入到目标数据库。
impdp user_name@pdbprod FULL=y DUMPFILE=expdat.dmp DIRECTORY=data_pump_dir TRANSPORT_DATAFILES='/oracle/oradata/prod/file1.dbf', '/oracle/oradata/prod/file2.dbf', '/oracle/oradata/prod/file3.dbf' LOGFILE=import.log
使用数据文件或备份集传输数据库
在数据库之间传输数据时,可以使用数据文件或备份集实现高效传输。以下是具体步骤:
导出数据库:使用expdp工具将整个数据库导出到转储文件。
expdp system@sourceDB FULL=y DIRECTORY=data_pump_dir DUMPFILE=full_db.dmp LOGFILE=full_db_exp.log
传输转储文件:将导出的转储文件复制到目标数据库服务器。 导入数据库:使用impdp工具将转储文件中的数据导入到目标数据库。
impdp system@targetDB FULL=y DIRECTORY=data_pump_dir DUMPFILE=full_db.dmp LOGFILE=full_db_imp.log
举例
示例1:使用Data Pump在Oracle数据库之间移动数据
有一个名为prodDB
的生产数据库,需要将其数据导出到名为testDB
的测试数据库。
创建Data Pump目录:
在源数据库和目标数据库上分别创建目录:
CREATE DIRECTORY data_pump_dir AS '/u01/datapump';
GRANT READ, WRITE ON DIRECTORY data_pump_dir TO system;
导出数据:
使用expdp工具导出数据:
expdp system@prodDB FULL=y DIRECTORY=data_pump_dir DUMPFILE=prodDB.dmp LOGFILE=prodDB_exp.log
传输转储文件:
将转储文件prodDB.dmp
复制到目标数据库服务器的相同目录中。
导入数据:
使用impdp工具将数据导入到目标数据库:
impdp system@testDB FULL=y DIRECTORY=data_pump_dir DUMPFILE=prodDB.dmp LOGFILE=testDB_imp.log
示例2:使用全传输导出/导入在数据库之间传输表空间
将prodDB
数据库中的表空间传输到pdbprod
数据库。
将表空间设为只读:
ALTER TABLESPACE appl1 READ ONLY;
ALTER TABLESPACE hrtbs READ ONLY;
执行全传输导出:
expdp user_name@prodDB FULL=y DUMPFILE=expdat.dmp DIRECTORY=data_pump_dir TRANSPORTABLE=always LOGFILE=export.log
传输数据文件和转储文件:
将数据文件和转储文件复制到目标数据库服务器。
导入数据:
impdp user_name@pdbprod FULL=y DUMPFILE=expdat.dmp DIRECTORY=data_pump_dir TRANSPORT_DATAFILES='/oracle/oradata/prod/file1.dbf', '/oracle/oradata/prod/file2.dbf', '/oracle/oradata/prod/file3.dbf' LOGFILE=import.log
在PDB之间导出和导入
在PDB之间导出和导入的步骤:
使用 FULL=Y
参数从CDB1的PDBA导出数据:
expdp system@PDBA FULL=Y ...
如果CDB2中不存在PDBC,创建PDBC:
SQL> CONNECT sys@CDB2
SQL> CREATE PLUGGABLE DATABASE PDBC ...;
打开PDBC。 在PDBC中创建Data Pump目录。 将转储文件复制到Data Pump目录。 在PDBC中创建与PDBA相同的表空间。 使用 FULL
和REMAP
参数将数据导入到CDB2的PDBC:
impdp system@PDBC FULL=Y REMAP_SCHEMA=c##u:lu ...
全传输导出/导入
全传输导出/导入的步骤:
导出数据:使用expdp工具执行全传输导出,将数据写入转储文件。
expdp user_name@pdb FULL=y DUMPFILE=expdat.dmp DIRECTORY=data_pump_dir TRANSPORTABLE=always
导入数据:使用impdp工具将转储文件中的数据导入到目标数据库。
impdp user_name@pdb FULL=y DUMPFILE=expdat.dmp DIRECTORY=data_pump_dir TRANSPORT_DATAFILES=...
举例
示例1:使用Data Pump在Oracle数据库之间移动数据
有一个名为prodDB
的生产数据库,需要将其数据导出到名为testDB
的测试数据库。
创建Data Pump目录:
在源数据库和目标数据库上分别创建目录:
CREATE DIRECTORY data_pump_dir AS '/u01/datapump';
GRANT READ, WRITE ON DIRECTORY data_pump_dir TO system;
导出数据:
使用expdp工具导出数据:
expdp system@prodDB FULL=y DIRECTORY=data_pump_dir DUMPFILE=prodDB.dmp LOGFILE=prodDB_exp.log
传输转储文件:
将转储文件prodDB.dmp
复制到目标数据库服务器的相同目录中。
导入数据:
使用impdp工具将数据导入到目标数据库:
impdp system@testDB FULL=y DIRECTORY=data_pump_dir DUMPFILE=prodDB.dmp LOGFILE=testDB_imp.log
示例2:使用全传输导出/导入在数据库之间传输表空间
将prodDB
数据库中的表空间传输到pdbprod
数据库。
将表空间设为只读:
ALTER TABLESPACE appl1 READ ONLY;
ALTER TABLESPACE hrtbs READ ONLY;
执行全传输导出:
expdp user_name@prodDB FULL=y DUMPFILE=expdat.dmp DIRECTORY=data_pump_dir TRANSPORTABLE=always LOGFILE=export.log
传输数据文件和转储文件:
将数据文件和转储文件复制到目标数据库服务器。
导入数据:
impdp user_name@pdbprod FULL=y DUMPFILE=expdat.dmp DIRECTORY=data_pump_dir TRANSPORT_DATAFILES='/oracle/oradata/prod/file1.dbf', '/oracle/oradata/prod/file2.dbf', '/oracle/oradata/prod/file3.dbf' LOGFILE=import.log
举例
示例1:在CentOS上使用Data Pump导出和导入数据
一个名为hrdb
的数据库,我们需要将其数据导出到名为salesdb
的新数据库。
在 hrdb
数据库上创建Data Pump目录:
CREATE DIRECTORY data_pump_dir AS '/u01/datapump';
GRANT READ, WRITE ON DIRECTORY data_pump_dir TO system;
使用Data Pump导出数据:
expdp system@hrdb FULL=y DIRECTORY=data_pump_dir DUMPFILE=hrdb.dmp LOGFILE=hrdb_exp.log
在 salesdb
数据库上创建Data Pump目录:
CREATE DIRECTORY data_pump_dir AS '/u01/datapump';
GRANT READ, WRITE ON DIRECTORY data_pump_dir TO system;
将转储文件复制到 salesdb
的Data Pump目录。使用Data Pump导入数据:
impdp system@salesdb FULL=y DIRECTORY=data_pump_dir DUMPFILE=hrdb.dmp LOGFILE=salesdb_imp.log
示例2:在CentOS上使用全传输导出/导入
需要将数据库proddb
的数据传输到pdbprod
。
在 proddb
上创建Data Pump目录:
CREATE DIRECTORY data_pump_dir AS '/u01/datapump';
GRANT READ, WRITE ON DIRECTORY data_pump_dir TO system;
将表空间设为只读:
ALTER TABLESPACE appl1 READ ONLY;
ALTER TABLESPACE hrtbs READ ONLY;
使用全传输导出:
expdp user_name@proddb FULL=y DUMPFILE=expdat.dmp DIRECTORY=data_pump_dir TRANSPORTABLE=always LOGFILE=export.log
如有必要,进行字节序转换(RMAN CONVERT或DBMS_FILE_TRANSFER)。 将数据文件和转储文件复制到 pdbprod
的Data Pump目录。在 pdbprod
上导入数据:
impdp user_name@pdbprod FULL=y DUMPFILE=expdat.dmp DIRECTORY=data_pump_dir TRANSPORT_DATAFILES='/oracle/oradata/prod/file1.dbf', '/oracle/oradata/prod/file2.dbf', '/oracle/oradata/prod/file3.dbf' LOGFILE=import.log
非常感谢您读到这里!如果您觉得这篇文章对您有帮助,可以关注一下博主。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。
让AI工具成为你的得力助手,感受AI工具的无限可能,让复杂的任务变得简单,让你的工作更加轻松和高效。





