浅谈exp/imp(下)

你可能 不了解的dump文件

在工作中,dump文件对于dba而言是再平常不过的文件了。不过因为dump文件是二进制文件,所以大家可能在平时使用中也不太关注,不过尽管如此,在导入dump文件的时候还是有很多的细节和技巧值得注意,可以避免一些不必要的问题。 [荆波1] 
如何查看dump文件的一些基本信息 
当你拿到一个dump文件的时候,不能盲目导入,我们可以基于当前的dump文件作一些基本的检查。 
比如我们可以查到dump文件导出的版本,时间,导出的用户。 
尽管dump文件是二进制文件,但是我们还是可以使用strings来得到一些信息。 

$ strings test.dump|head -10 
iEXPORT:V11.02.00 
RUSERS 
8192 
Sun Dec 28 6:54:27 2014test.dump 
#G#G 
#G#G 
-08:00 
BYTE 
UNUSED 
INTERPRETED 

根据上面的命令输出,我们得到了一些dump的基本信息,可以从第一行看出exp是基于11.2版本,第2行可以看出是基于用户模式导出的dump,如果是全库模式会显示为RENTIRE,表模式则为RTABLES,从第4行可以看出dump生成的时间戳等等。

如何得到dump中的表信息 
对于dump文件,我们可以解析出含有的表名,可以尝试使用如下的方式来实现,使用strings,awk,sed结合可以很方便的完成这个功能。 

$ strings test.dump |grep
"CREATE TABLE "|awk '{print $3}'|sed 's/"//g' 
BALL_DATA 
BIG_INSERT 
CLOB_TEST 
COUNTRY_LST 
CTEST 
DATA 
DATA2

 对于数据量小的dump文件,这个方法非常有效,如果dump非常大,解析会稍稍有些慢,不过相比使用perl等方式解析,速度还是要快得多。
如何解析dump文件生成parfile

在上面的基础上,如果我们需要根据dump生成对应的parfile来做数据导入导出,可以使用如下的命令来解析dump生成parfile。

$ strings
n1_ddl.dump|grep "CREATE TABLE"|awk '{print $3}'|sed 's/"//g'|awk
'{ if(FNR==1) print "tables="$1 ; else print ","$1}'
tables=BIG_INSERT
,CLOB_TEST
,DATA
,NEW_DATA
,OLD_DATA
,PAR_DATA
,RATED_EVENT
,SMALL_INSERT

   parfile对于使用exp/imp如虎添翼,可以使数据导入导出更加规范,很多细节都可以在parfile中灵活定义,可以使得exp/imp可读性更强。

数据导入导出中的盲点

盲点1:需要考虑的外键影响
在导入dump文件的时候,外键也是一个很重要的因素,可能dump中含有一些表,有些表中存在外键,在数据迁移之类的项目中是很让人头疼的,你得基于外键考虑表的导入顺序,有些表得先导入,要不在数据插入的时候会报外键相关的ORA问题。 
可以使用如下的脚本来做一个基本过滤,可以考虑在过滤条件中嵌入一个dump中表的清单,可以更加精准的处理相关的外键。可以使用如下的脚本来动态生成对应的脚本来禁用外键。

SELECT

     
'ALTER TABLE '||TABLE_NAME||' DISABLE  CONSTRAINT '|| CONSTRAINT_NAME||';'
FROM USER_CONSTRAINTS WHERE

      
CONSTRAINT_TYPE='R' UNION SELECT 'ALTER TABLE '||UCA.TABLE_NAME||'
DISABLE  CONSTRAINT '|| UCA.CONSTRAINT_NAME||';'

FROM

      
USER_CONSTRAINTS UCA ,

      
(SELECT  CONSTRAINT_NAME

         
FROM  USER_CONSTRAINTS

         
WHERE CONSTRAINT_TYPE IN ('P','U')

) tmp

WHERE
UCA.CONSTRAINT_TYPE = 'R'

 
AND tmp.constraint_name = UCA.R_CONSTRAINT_NAME ;

生成的语句类似这样的形式。

ALTER TABLE ADD_TARGET DISABLE 
CONSTRAINT ADD_TARGET_1FK;

 务必注意在disable constraint,在完成数据导入后,需要enable
constraint的操作,就是把上面脚本中的disable改为enable即可。

 

盲点2:需要考虑的触发器影响
触发器在数据导入或者数据迁移中都会存在潜在的问题,如果你不了解应用中的触发器处理细节,就会发现在数据导入或者数据迁移的过程中,会莫名其妙多出来一部分数据,或者有些数据发生了变化。 
一般来说,可以和开发做简单的确认,大多数的情况下都是需要把触发器做disable操作,然后在数据导入之后再启用。

可以采用如下的脚本:

SELECT

     
'ALTER TRIGGER ' ||TRIGGER_NAME||' DISABLE ;'

FROM

      
USER_TRIGGERS; 

个人在使用trigger的过程中碰到过一些问题,就是因为没有注意到trigger的影响,结果本来表中含有100万数据,需要导入20万,结果导入后,发现总数据条数为130万了,那多出来的10万数据就是触发器中的相关逻辑插入的数据。

盲点3:buffer size的影响
buffer size的设置在数据导入中也是很重要的,如果dump存在一个较大的分区表,很可能导入的过程中就会跑出buffer
size不够的错误,给你的导入工作带来很多影响。 
一般可以把buffer size设置的大一些,比如4M,9M都是不错的选择。


时间: 2024-07-30 10:48:42

浅谈exp/imp(下)的相关文章

浅谈exp/imp(上)

作为DBA,经常需要在不同数据库环境间做数据的导入导出,exp/imp就是这样的轻便快捷的客户端工具,可以很方便的在不同数据库之间转移数据对象,即使数据库位于不同的硬件或者软件平台上.exp会转储产生对应的二进制文件,里面包含数据的定义信息,数据内容等,也就是我们通常所说的dump文件. exp/imp是比较经典的数据导出导入工具,不过自expdp/impdp推出以来,exp/imp还是受到了不少的冷落,在新的数据库版本中,支持力度都集中在了expdp/impdp上面.Expdp/impdp是基

浅谈在openSUSE下ASP.NET 4开发环境配置(1)

浅谈在openSUSE下ASP.NET 4开发环境配置(1)

浅谈linux系统下常见的故障与处理方法

与windows系统一样,linux操作系统也会存在很多问题和故障,很多linux新手都害怕故障,面对出现的问题显得无可奈何,更有甚者,由此放弃了linux,其实,我们不应该惧怕问题,学习就是一个发现问题与解决问题的过程,只要掌握了解决问题的基本思路,一切故障都会迎刃而解,当然前提是我们已经具备了解决问题的思路和扎实的知识功底. 一.处理linux系统故障的思路 作为一名合格的linux系统管理员,一定要有一套清晰.明确的解决故障思路,当问题出现时,才能迅速定位.解决问题,这里给出一个处理问题的

浅谈Windows系统下的网站备份与恢复

之前写了利用命令行工具创建LinuxMac系统下网站备份的文章,但是windows系统无法采用命令行工具进行网站备份,这个时候我们就需要借助第三方工具了.欲知详情,且看下文介绍. 目前仍有很多网站运营商没有做好备份工作,一旦网站突然"罢工"或遭到病毒感染,一切数据.资源.心血都将付诸东流. 一.前期准备 有的网站托管商会提供备份服务,当然你也可以购买一些附加的备份服务和插件.但本文的写作前提是你的网站托管商不提供备份服务,我们自己通过免费的软件进行网站备份. 首先,准备以下三个工具:

浅谈 Windows Vista 下 IIS7 的安装过程

初用IIS7让人一头雾水,再也没有原来熟悉的属性窗体,替代的是一些很陌生的名词和操作方式.现在不评它这种改变是好是坏,先让它给我们跑起来吧: 首先是安装IIS7:http://www.aliyun.com/zixun/aggregation/15470.html">Vista默认的情况下是没有安装IIS7,所以我们要在"控制面板"里面的"程序和功能"里面点击"打开或关闭Windows功能",在里面把对应的IIS的功能钩上,友情提示

浅谈Windows系统下C语言编程中Glib库的使用_C 语言

在这个C的变成世界里,有许多实用的库,其中最有名的且最通用(跨多个平台的实现包括Windows,要知道很多实用的编程库都不提供Windows的实现)就是GLib这个库,其中就有实现线程的部分. glib库是Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性. glib是Gtk +库和Gnome的基础.glib可以在多个平台下使用,比如Linux.Unix.Windows等.glib为许多标准的.常用的C语言结构提供了相应的替代物. 如果在程序中要使用到glib库中的函数,则应该包

浅谈云环境下的数据保护策略

 企业核心数据是企业的命脉.通过建立完善的数据保护系统,保障核心数据已经成为当前众多企业的共识.为防止IT系统最重要的资产--数据的丢失,越来越多的企业开始从信息系统的安全性.稳定性和可靠性出发,以数据安全为目标,构建自己的数据保护体系.然而,随着云计算的普及和大数据时代的来临,急速膨胀的数据量使企业在数据保护方面投入的硬件以及人力.时间成本剧增.如何不让数据保护方案成为企业业务走向"巅峰"的拦路虎,是困扰大多数IT管理人员的难题.其中,解决成本难题与降低管理风险便是首要考虑的重点.

深冬之寒 浅谈低温环境下的安防

近日,由于一大波寒潮正在赶来的路上,气象台已经拉响了"棉裤预警"警报.深冬之寒,即使是在深圳这个地处亚热带的安防之都,周末气温也将降到5度左右.大街上的妹纸们难得响应了一回气象局的号召,厚外套和厚棉裤纷纷上场,部分年轻男士们纷纷痛心疾首的表示冬天太不可爱了.那么小编不仅要问了,其他事情你们咋就不关心呢? 监控设备保温有办法 众所周知,监控设备的采集图像功能是由那一块小小的图像传感器实现的,而这块芯片的工作温度往往是工作温度0-50度,一旦高于或者低于这个温度,监控摄像机的画面就会大打折

浅谈大数据环境下的保险营销

大数据是一场源自于IT产业的创新与变革,它完美诠释了由量变到质变的发展模式,对现今各行各业的发展都有着相当重要的促进与激励作用.而作为传统金融行业分支之一的保险行业在很早之前便已经完成了量的积累,如何在大数据这股强有力的浪潮中完成质变,成了一个摆在保险行业面前相当重要的挑战与机遇. 在IT营销的思维中,我们信奉的是"羊毛出在狗身上,猪来买单"的理念,即通过整合资源以达到利润最大化的目标,在操作的过程中,我们产生数据,利用数据,并且赚取数据.在数据的积累中,我们完成了资源向资产的转变,并