当前位置: 首页 > news >正文

使用数据泵的注意事项

一、在日常工作中,数据泵的使用需要注意以下几点

1.要想预估导出文件的大小,可以使用“ESTIMATE_ONLY=Y”选项运行EXPDP

如,预估导出 SCOTT 用户所需空间的大小,命令如下

expdp \'/ as sysdba\' schemas=scott estimate_only=yExport: Release 11.2.0.4.0 - Production on Tue Nov 14 14:10:50 2023Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYS"."SYS_EXPORT_SCHEMA_01":  "/******** AS SYSDBA" schemas=scott estimate_only=y 
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
.  estimated "SCOTT"."DEPT"                                 64 KB
.  estimated "SCOTT"."EMP"                                  64 KB
.  estimated "SCOTT"."SALGRADE"                             64 KB
.  estimated "SCOTT"."BONUS"                                 0 KB
Total estimation using BLOCKS method: 192 KB
Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Tue Nov 14 14:11:40 2023 elapsed 0 00:00:43

2.确定expdp/impdp 两个数据库之间的字符集是否兼容。

Zhs16gbk导入UTF-8
UTF-8是 Zhs16gbk 的超集,后者的 varchar2 和 char类型字段的存储长度是前者的 1.5倍。因此我们只需要先导入表结构,修改字段的长度再导入数据即可。具体实现步骤如下。
1)导入目标端表结构,命令如下:

impdp \'/ as sysdba\' DIRECTORY=expdir CONTENT=METADATA_ONLY DUMPFILE=scott_metadata.dmp logfile=scott_metadata.log

2)修改表格中varchar2和char类型的字符长度,命令如下:

select 'alter table ' || owner || ',' || table_name || ' modify (' || COLUMN_NAME || ' ' || DATA_TYPE || '(' || (case when DATA_LENGTH >= 2660 then 4000 else ceil(DATA_LENGTH * 1.5) end) || '));'
from dba_tab_columns 
where table_name = 'DEPT' and DATA_TYPE in ('VARCHAR2','CHAR');

在目标端中执行上述生成的语句,以修改字段长度
3)最后导入表格数据,命令如下:

impdp \'/ as sysdba \' DIRECTORY=expdir CONTENT=DATA_ONLY DUMPFILE=scott_data.dmp logfile= scott_data.log

3.数据字典统计信息应确保准确。数据泵的性能依赖于数据库字典统计信息的准性,若长时间未收集统计信息,则会严重影响数据泵的性能,建议使用以下语句收集统信息。

统计数据字典基表(物理存在的基表)的命令如下:

SQL> exec dbms_stats.gather_dictionary_stats();PL/SQL procedure successfully completed.

统计基表动态表格的命令如下:

SQL> exec dbms_stats.gather_fixed_objects_stats();PL/SQL procedure successfully completed.

4.低版本向上兼容,而高版本导入低版本需要注意是否正常。

5.导入Oracle 12c及以上版本时,建议搭配“TRANSFORM= DISABLE_ARCHIVE_LOGGING:Y”参数,在归档模式下不生成归档日志

6.导出部分数据

对一个数据量在太字节(TB)级别的生产库做全库迁移费时又费力。但创建测试环境时,我们往往并不需要用到所有的数据,只需要使用部分数据进行功能性测试即可。对此,数据泵提供了两种方式用于导出部分数据,一种方式是QUERY,即按条件导出,类似于查询语句中的 where。例如,导出业务用户下每张表格的前 5000行数据,命令如下:

shell> expdp \'/ as sysdba\' parfile=expdp.par
shell> cat expdp.par
directory=EXPDIR
parallel=4
CLUSTER=N
dumpfile=his_%U.dmp
logfile=his.log
schemas=
(
'HIS',
'MEDIA'
'APP',
'INPAUTO'
)
query="where rownum<=5000"

另一种方式是 SAMPLE,即数据抽样百分比。针对全库、用户和表三种模式,我们可以在导出时使用此参数来进行设置,使用方法示例如下:
导出SCOTT用户下每张表格 20%的数据,命令如下:

expdp \"/ as sysdba\" directory=EXPDIR dumpfile=scott_data.dmp logfile=scott_data.log schemas=scott sample=20

导出SCOTT用户下的所有表格,但只对大表emp 抽取 20%的数据,命令如下:

expdp \"/ as sysdba\" directory=EXPDIR dumpfile=scott_data.dmp logfile=scott_data.log schemas=scott sample=scott.emp:20

二、数据泵常用参数

Oracle 的功能非常强大,其提供的命令成千上万,我们不可能全部记住。在使用 Oracle 时,只需要知道如何查询这些命令即可,对于数据泵,建议大家记住“expdp/impdp -help”命令。其中几个关键的参数用法如下。
CLUSTER:RAC中默认为Y,利用集群资源并行工作,建议关闭(CLUSTER=N)
CONTENT:导出内容,默认为ALL,可以选择元数据[METADATA_ONLY]或仅数据[DATA_ONLY]
INCLUDE:导出/导入时指定的对象
EXCLUDE:与INCLUDE 互斥,导出/导入时排除的对象
NETWORK_LINK:远端数据库DBLINK 连接
PARFILE:参数文件,避免在不同的操作系统下,因转义字符的不同而带来影响
QUERY:特定对象筛选条件,类似于 select 中的 where条件
SAMPLE:数据抽样比,一般用于搭建测试环境
SQLFILE:对导入内容生成SQL文本语句
REMAP_SCHEMA/REMAP_TABLE/REMAP_TABLESPACE:用于重定向目标端导
入对象
COMPRESSION:导出文件压缩,空间紧张时可以使用此参数,可以选择所有内容[ALL]、元数据[METADATA_ONLY]或仅数据[DATA_ONLY]
PARTITION_OPTIONS:用于迁移分区表,NONE表示与源端保持一致,DEPARTITION表示将每个分区表和子分区表作为一个独立的表创建,并使用表和分区(子分区)名字的组合作为自己的名字,MERGE 表示将所有分区合并到一个表

相关文章:

  • k8s自定义Endpoint实现内部pod访问外部应用
  • 307.区域和检索
  • Idea 编译SpringBoot项目Kotlin报错/Idea重新编译
  • YOLOv8-Seg改进:卷积变体系列篇 | DCNv3可形变卷积基于DCNv2优化 | CVPR2023
  • 2001-2022年全国平均气温数据,逐月数据均有
  • 鼎捷PLM:引领国产替代,创造极致体验,探索数字化研发可行之路
  • 【图论实战】 Boost学习 03:dijkstra_shortest_paths
  • 数据库MHA高可用
  • 浪潮服务器安装操作系统
  • 【iOS】JSONModel的基本使用
  • PyCharm鼠标控制字体缩放
  • 阿里云centos7.9乱码问题
  • 【C++】——运算符重载
  • mysql主从复制-使用心得
  • 图片批量编辑器,高效拼接多张图片,释放无限创意!
  • [数据结构]链表的实现在PHP中
  • 2017年终总结、随想
  • Centos6.8 使用rpm安装mysql5.7
  • css选择器
  • exports和module.exports
  • JS函数式编程 数组部分风格 ES6版
  • Laravel5.4 Queues队列学习
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Node项目之评分系统(二)- 数据库设计
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Shadow DOM 内部构造及如何构建独立组件
  • vue 配置sass、scss全局变量
  • vuex 学习笔记 01
  • Vue实战(四)登录/注册页的实现
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 产品三维模型在线预览
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从输入URL到页面加载发生了什么
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 翻译:Hystrix - How To Use
  • 分布式任务队列Celery
  • 关于List、List?、ListObject的区别
  • 诡异!React stopPropagation失灵
  • 利用jquery编写加法运算验证码
  • 通过git安装npm私有模块
  • 智能合约开发环境搭建及Hello World合约
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #define,static,const,三种常量的区别
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C语言)fgets与fputs函数详解
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm码农论坛 毕业设计 231126
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐