版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/debimeng/article/details/84227912
oracle使用数据泵导用户每张表部分数据
(每张表5000行数据,少于5000的导入全部下每张表5000行数据,少于5000的导入全部)
数据库版本:11.2.0.4;系统版本:Oracle Linux 6.4
场景:
开发提出一个需求,需要把tods用户下的数据全部导入到UAT环境,便于他们测试使用;
但经查询该用户下的数据量过大,达到了300GB以上,但目标数据库目前只剩下5000GB左右的空间;
而且这个数据库不单单该部分开发使用还有别的部门也在使用,故建议他们考虑只导入部分数据测试即可。
解决:
因11g数据库如果导用户的数据使用expdp/impdp来操作的话会比较得心应手,并且速度还能接受;
并且习惯使用数据泵来导用户的数据,并且不需要考虑写sql,一条语句就能搞定;
但这次的需求是只需要导出一部分的数据库,跟以往不同,所幸数据泵也提供了这种功能:parfile和query
--查询该用户下的表名(大写表名)
select t.owner || '.' || t.TABLE_NAME from dba_tables t where t.owner in ('TODS');
--创建parfile参数文件(文件名可随意定义,建议跟用户时间相关,这样好区分)
$ vi test.par
dumpfile=d_otest_1116.dmp
directory=UTL_DATA
logfile=d_otest_1116_exp.log
job_name=job08
parallel=4
cluster=no
tables=(
TOST.TEST_1
)
query=(
TOST.TEST_1:"where rownum<=100"
)
exit;
注意:如果是rac环境需要加上cluster=no参数,否则会报错,因导出的文件不在共享存储上。
expdp \"/ as sysdba \" parfile=test.par