当前位置:数据库 > Oracle >>

Oracle expdp过滤和并行

Oracle expdp过滤和并行
 
我们知道调用数据泵的方式可以有3种,在这里我绝对不会使用命令行而是首推脚本方式
放弃命令行的理由大概有这些:
① 操作系统对CLI字符数的限制
② 令人痛恨的转义符
③ 无法跨平台重用
④ 官方文档到处鼓吹用脚本方式
 
㈠ 过滤对象/数据篇
 
  ⑴ 过滤对象
 
     INCLUDE
 
     EXCLUDE和INCLUDE用法相同,这里就谈INCLUDE
 
     语法
     INCLUDE = object_type[:name_clause] [, ...]
 
     object_type:常用有TABLE、INDEX、CONSTRAINT、GRANT,更多的我们可以查阅
                           database_export_objects,schema_export_objects,table_export_objects
 
     name_clause:sql语句
 
     相关的索引、约束等都会很讲义气地被一起导出
 
     例子
 
     题目:导出所有以 emp 开头的表
 
     参数文件写法如下:
[plain] 
[oracle@bogon ~]$ cat hr.par  
SCHEMAS=HR  
DUMPFILE=hr.dmp  
DIRECTORY=dmpdir  
LOGFILE=hr.log  
INCLUDE=TABLE:"like 'EMP%'"  

 

 
     这个文件里,INCLUDE也可以这么写
[plain] 
INCLUDE=TABLE:"IN (select table_name from user_tables where table_name like 'EMP%')"  

 

 
  ⑵ 过滤数据
 
     QUERY
 
     语法 
     QUERY = [schema.][table_name:] query_clause
     
     该参数和以下几个为互斥关系
     CONTENT=METADATA_ONLY
     ESTIMATE_ONLY
     TRANSPORT_TABLESPACES
     
     例子
     
     题目:导出部门号为50,员工号大于128的所有员工资料
     
     参数文件写法如下:
[plain] 
[oracle@bogon ~]$ cat hr.par  
SCHEMAS=HR  
DUMPFILE=hr02.dmp  
DIRECTORY=dmpdir  
LOGFILE=hr02.log  
INCLUDE=TABLE:"IN ('EMPLOYEES','DEPARTMENTS')"  
QUERY=EMPLOYEES:"where employee_id>=128",DEPARTMENTS:"where department_id=20"  

 

㈡ 并行导出篇
 
   并行设置的结果无非3种:变得更好、没有变化、变得更差
   效率是否得到提高,并不取决于你设置了多碉堡的参数,参数和参数值是否合适方为根本
      
   并行需要成本,因为并行之前需对服务器资源综合权衡,计算并行,分配任务
   并行设置是门艺术,因为PARALLEL经常是要跟FILESIZE,DUMPFILE一起考虑
   
   下面是官方文档给的一个并行优化实例:
[plain] 
expdp hr/hr FULL=y DUMPFILE=dpump_dir1:full1%U.dmp, dpump_dir2:full2%U.dmp  
FILESIZE=2G PARALLEL=3 LOGFILE=dpump_dir1:expfull.log JOB_NAME=expfull  

 

 
   另外,并行度的设置不应该超过CPU数量的2倍
[plain] 
sys@ORCL> show parameter cpu  
  
NAME                                 TYPE        VALUE  
------------------------------------ ----------- ------------------------------  
cpu_count                            integer     1  

 

 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,