今天收到了一个数据同步的需求,具体信息是将原oracle数据库的几张表的部分数据同步到另外一台oracle数据库。完成这个需求使用的是oracle的expdp导出工具。因为是导出表的部分数据,因此用到了expdp的query参数。下面的步骤主要是写的query参数的使用,因为数据的导入使用impdp导就很容易了,这里就不介绍了。
(1)首先在源端进行数据的导出,需要先创建导出路径。
--创建导出路径
create directory TEST_DIR as '/home/oracle/test_dir';
通过dba_directories来查看系统中已创建的目录
set line 200
col DIRECTORY_PATH format a60
select * from dba_directories;
(2)使用expdp的query参数有两种方式,一种是一个一个表的导出,一种是批量的导出。
(2.1)先介绍单个表的数据导出,特别注意query后面的转义字符的使用。
expdp \'sys/m\!Y25ntb\? as sysdba\' directory=TEST_DIR dumpfile=TEST_DIR.dmp tables=scott.testa query=scott.testa:\"WHERE pub_date\>to_date\(\'2019-08-23 00:00:00\',\'yyyy-mm-dd hh24:mi:ss\'\)\" logfile=TEST_DIR.log
(2.2)使用query批量导出表数据
使用批量的时候需要用到参数文件
[root@test test_dir]# more test.par
DUMPFILE=test.dmp
DIRECTORY=TEST_DIR
TABLES=
(
SCOTT.TEST1,
SCOTT.TEST2 ,
SCOTT.TEST3,
SCOTT.TEST4,
SCOTT.TEST5,
SCOTT.TEST6,
SCOTT.TEST7,
SCOTT.TEST8 ,
SCOTT.TEST9,
SCOTT.TEST10
)
QUERY=
(
SCOTT.TEST1:"where stat_date>to_date('2019-08-23 00:00:00','yyyy-mm-dd hh24:mi:ss')",
SCOTT.TEST2:"where stat_date>to_date('2019-08-23 00:00:00','yyyy-mm-dd hh24:mi:ss')",
SCOTT.TEST3:"where stat_time>to_date('2019-08-23 00:00:00','yyyy-mm-dd hh24:mi:ss')",
SCOTT.TEST4:"where stat_time>to_date('2019-08-23 00:00:00','yyyy-mm-dd hh24:mi:ss')",
SCOTT.TEST5:"where stat_time>to_date('2019-08-23 00:00:00','yyyy-mm-dd hh24:mi:ss')",
SCOTT.TEST6:"where stat_time>to_date('2019-08-23 00:00:00','yyyy-mm-dd hh24:mi:ss')",
SCOTT.TEST7:"where stat_time>to_date('2019-08-23 00:00:00','yyyy-mm-dd hh24:mi:ss')",
SCOTT.TEST8:"where stat_time>to_date('2019-08-23 00:00:00','yyyy-mm-dd hh24:mi:ss')",
SCOTT.TEST9:"where stat_time>to_date('2019-08-23 00:00:00','yyyy-mm-dd hh24:mi:ss')",
SCOTT.TEST10:"where stat_time>to_date('2019-08-23 00:00:00','yyyy-mm-dd hh24:mi:ss')"
)
导出命令;
expdp system/oracle parfile=test.par
将导出的文件 test.dmp传输到目标端使用impdp进行数据的导入即可。