-
一.优缺点
-
优点:
-
1.高效性能:
-
expdp,impdp
使用并行技术,可以显著提高导出导入速度,尤其适用于大数据量的迁移。 -
支持压缩和加密,减少导出文件的大小并提高安全性。
-
-
2.灵活的对象选择:
-
可以导出整个数据库、特定表空间、用户(Schema)或单个表。
-
支持过滤条件,例如只导出特定表的数据或元数据。
-
-
3.跨平台兼容性:
-
支持跨平台迁移(例如从 Linux 到 Windows),但需要注意字节序(endianness)问题。
-
-
4.元数据和数据分离:
-
可以单独导出元数据(如表结构)或数据,便于灵活处理
-
缺点:
-
1.依赖目录对象:
-
导出文件必须存储在数据库服务器上的目录对象中,不能直接导出到客户端。
-
-
2.资源占用较高:
-
导出过程中会占用较多的 CPU 和 I/O 资源,可能影响生产环境的性能
-
-
3.不支持跨字节序迁移:
-
如果源端和目标端的字节序不同(例如从 AIX 到 Linux),需要使用额外的工具(如 XTTS)进行转换。
-
二. 详细操作步骤:
一、源端操作
1、操作系统准备工作
- 创建导出的dump文件的目录并赋予权限
操作系统目录
/u01/app/oracle/dpump
,并且Oracle用户有读写权限主要是用来存放导出数据库的内容
[oracle@oramig ~]$ mkdir -p /u01/app/oracle/dpump
2、数据库层面创建目录
SQL> create directory dpump_dir as '/u01/app/oracle/dpump';
Directory created.
SQL> grant read, write on directory dpump_dir to system;
Grant succeeded.
3.用数据泵expdp
使用
expdp
工具导出源端数据库的元数据和数据。[oracle@oramig ~]$ expdp system/123456@source_db schemas=zjr directory=dpump_dir dumpfile=zjr.dmp logfile=expdp_zjr.log
参数说明:
system/123456
:数据库用户名和密码。
source_db
:源端数据库的连接字符串。
schemas=zjr
:指定导出的用户模式(schema)。
directory=dpump_dir
:指定存放导出文件的目录对象。
dumpfile=zjr.dmp
:导出的数据泵文件名。
logfile=expd——zjr.log
:导出日志文件名。
二、传输操作
[oracle@oramig ~]$ scp /u01/app/oracle/dpump/zjr.dmp oracle@192.168.91.220:/u01/app/oracle/dpump/
参数说明:oracle1@192.168.91.220 其中oracle1是目标数据库端的主机名,192.168.91.220是目标数据库端的IP地址
当然在执行scp之前要确保目标数据库端的系统存在/u01/app/oracle/dpump/ 目录
三、目标端操作
1、目标端创建用户、表空间、权限
SQL> create user zjr identified by zjr;
User created.
SQL> grant connect,resource to zjr;
Grant succeeded.
2.
创建目录对象:
-
在目标端数据库中创建一个目录对象,用于存放导入的数据泵文件。
-
SQL> create directory dpump_dir as '/u01/app/oracle/dpump';
Directory created.
SQL> grant read, write on directory dpump_dir to system;
Grant succeeded.
3.使用impdp
导入数据:
-
使用
impdp
工具将导出的数据导入目标端数据库。 -
[oracle1@oracle2 admin]$ impdp system/123456@target_db schemas=zjr directory=dpump_dir dumpfile=zjr.dmp logfile=impdp_zjr.log
4. 验证数据一致性
-
对象验证:
-
使用以下SQL查询目标端数据库的对象数量,并与源端对比
SELECT object_type, COUNT(*) FROM dba_objects WHERE owner = 'zjr' GROUP BY object_type;
-
-
数据验证:
-
使用以下SQL查询目标端数据库的数据行数,并与源端对比:
SELECT table_name, num_rows FROM dba_tables WHERE owner = 'zjr';
-