【oracle】使用数据泵导用户每张表部分数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/debimeng/article/details/84227912