LOB对象导出时,无法使用并行,导出的时间有可能会非常久。我们可以尝试使用Rowid分片的方式,手动分配并发的导出进程,这种方式有助于加快导出速度。
示例,导出test.t这张表,导出脚本如下所示。
#!/bin/bash chunk=10 TABLE_NAME=test.t for ((i=0; i<${chunk}; i++)) do nohup expdp userid=\'/ as sysdba\' TABLES=${TABLE_NAME} QUERY=${TABLE_NAME}:\"where mod\(dbms_rowid.rowid_block_number\(rowid\)\, ${chunk}\) = ${i}\" directory=dpdir dumpfile=${TABLE_NAME}_${i}.dmp logfile= ${TABLE_NAME}_${i}.log JOB_NAME=expdp_${TABLE_NAME}_${i} & sleep 10 done |
思路是指定分片数量,例如本示例中设置了分片数为10,然后每个分片就有相应的expdp导出进程。
示例,导入脚本如下所示。
#!/bin/bash chunk=10 TABLE_NAME=test.t for ((i=0; i<${chunk}; i++)) do nohup impdp userid=\'/ as sysdba\' directory=dpdir dumpfile=${TABLE_NAME}_${i}.dmp logfile=impdp_${TABLE_NAME}_${i}.log DATA_OPTIONS=DISABLE_APPEND_HINT table_exists_action=append & sleep 10 done |