一、背景:
公司有个业务取一张大表,大概八千万数据量,24G左右的大小,经常会宕机,看了一下是用exp/imp去做处理的。
而且需要从A库的T1用户导入到B库的T2用户,两个表结构是相同的,只是T2下的表多一个索引,但是A库的数据库版本要高于B库的数据库版本
二、解决思路:
首先想到的是改成expdp与impdp的方式
数据泵的创建:
1、在系统上创建物理目录,如/opt/oracle/dmp_dir
2、在oracle上创建逻辑目录:create or replace directory BIG_DATA_DUMP as '/opt/oracle/dmp_dir';
3、授权给T1用户:grant read,write on directory BIG_DATA_DUMP to t1;
4、写导出parfile文件,内容如下:
directory=big_data_dump
dumpfile=test%U.dmp
logfile=test.log
tables=tbs_a
filesize=5G
当然还可以加上PARALLEL并行参数,并行的值应小于等于生成文件的个数,比如以这个为例,我的文件大概24G,我指定filesize=5G,那么会生成5个文件,因此PARALLEL的值最大只能是5
5、导出表数据expdp t1/pwd parfile=parfilename,评测了一下大概只需要5分钟不到的时间
6、再将dmp文件传到B库上,同样需要创建物理目录和逻辑目录并且授权,parfile内容如下:
directory=dump_data_test
dumpfile=test%U.dmp
tables=tbs_a
table_exists_action=truncate
remap_schema=t1:t2
NOLOGFILE=y
PARALLEL=4
7、由于高版本库导入到低版本库,需要在B库上运行以下命令
SQL> exec dbms_metadata_util.load_stylesheets
8、由于业务特殊性,该表不需要记日志,因此我们还可以将该表设置成不记日志模式
SQL> alter table tbs_a NOLOGGING;
9、impdp t2/pwd parfile=parfilename,评测一下大概需要20分钟左右
因此 从这次改变数据迁移方式是成功的,建议大数据迁移不要用exp/imp模式