DB2数据导入的四大注意事项

  在将数据库投入生产使用之前,数据库管理员往往需要先往数据库中导入大量的数据。数据库中只有大量的基础数据,建立在数据库上的应用软件才能够发挥效益。

  本文主要谈的就是在将数据从外部文件导入导数据库过程中的一些注意事项。也许这些内容能够帮助管理员解决难题。

  一、默认值与空值的争夺战。

  在数据库表设计的时候,为了数据的完整性,往往会对某些列设置一些默认值。特别是某个字段不允许为空时,要设置默认值。当用户没有输入对应的值的时候,就利用默认值来填充。如有一张销售订单的表。这个表上有一个字段是“订单日期”。当用户没有输入数据的时候,这个订单日期就默认为当前系统的日期,从而达到简化用户输入的目的。现在的问题是,在起初数据导入的时候,如果目标文件中没有这个列对应的值,而这个字段设置了默认值,此时会有什么后果呢? (DB2数据库与SQLServer数据库的异同)

  通常情况下,只要字段没有非空的约束条件(即允许存在空值),则无论这个字段有没有设置默认值,在导入的时候,只要目标文件没有对应的内容,都一律都会使用NULL值来替代目标文件中缺失的列。如果这个字段有非空的约束(即不允许存在空值),则数据库系统会提示不允许空值的错误信息。也就是说,表中的字段默认值的设置一般情况下在导入的过程中是无效的。当目标文件中不存在某个值的时候,数据库不会以列的默认值来填充,而是一律使用NULL值来填充。

  但是,如果数据库管理员一定要让默认值来填充这些这些列,是否可以呢?在DB2数据库中,这是可以的。只要目的表已经定义了默认值,那么就可以在导入的语句中使用USEDEFAUITS选项,就可以让数据库系统(Oracle数据库系统使用经验六则)在导入的过车观念中利用默认值来填充目标文件中不存在的数据。注意这里只有目标文件中对应记录的字段值不存在的时候,才会使用默认值。如果存在的话,则仍然采用目标文件中的值。可见这个NULL值与列默认值之间的战争,最后的结果还是在用户手中。用户可以通过USEDEFAULT选项来确定到底是否需要默认值。如果某个字段设置为了非空,而且这个列又设置了默认值的话,那么笔者建议采用默认值,这可以在很大程度上简化数据导入的工作。

  二、导入过程中的性能考虑。

  当将大量的数据插入到数据库表中的时候,会消耗比较多的数据库资源,从而影响到数据库的性能。为此在将数据导入导数据库的时候,除了需要选择一个用户访问量少的时间。还需要在导入的时候采用合适的手段来提高数据导入的性能。如在DB2数据库中,数据导入的工具主要分类两类,分别为装入使用工具和导入工具。当导入的数据量比较多,而且用户对于性能又有比较严格要求的话,那么笔者建立采用装入使用工具。因为通常情况下,在导入大量数据的时候,装入使用工具能够提供比较高的性能。

  当在客户端上导入数据,而不是直接在服务器上导入数据的时候,加入一个compound子句也可以改善数据库的性能。这个子句主要是用来对需要插入的数据进行分组,即以多少条记录为单位,向服务器传送插入请求。由于数据需要在客户端与服务器之间进行传递。客户端从外部文件中读取数据传递到数据库服务器上需要有一段时间;而数据库服务器在接受到客户端的请求将数据插入到表中也需要一段时间。此时如果采用n语句对需要插入的大量记录进行分组,可以改善数据库的性能。一方面可以让客户端与服务器端分工合作,客户端一边从外部文件中读入数据,服务器端一边插入数据,从而减少插入的时间。另一方面,数据分步在网络在网络中传输,也可以提高网络传输的性能,同样可以起到提高性能的目的。总之,数据导入作业往往会降低数据库正常运行的性能。为此在数据导入的时候,最好选择一个比较合适的时间。并且采用以上建议的一些措施来最大程度的降低导入工作对数据库的正常运行带来的负面影响。

  三、让活动日志分次落实。

  在数据导入的过程中,其最终还是需要通过Insert语句来实现。而DB2数据库在使用这个语句的时候,数据库引擎将会代表导入操作对标更新进行常规的记录。这就好像是在Oracle数据库中将这个表更新的操作记入到日志文件一样。所以,当导入的记录比较多就会潜在的长时间占有当前的活动日志,最终导致数据库管理器消耗完日志空间。为此,在导入数据的过程中,如果记录的数据比较大,那么最好使用COMMITCOUNT N子句。这个子句的主要作用就是告诉数据库系统,插入N条记录之后就需要执行一次日志落实。当使用了这个子句的时候,如果导入操作失败,那么在事务回滚期间,所有最后一次落实以后执行的的改变都会取消。这还可以减少数据导入失败而造成的损失。如果没有采用这个子句,如果导入失败的话,数据库系统会撤消所有导入的记录。也就是说,一切都要重头来过。但是如果采用了这个语句,那么数据库管理员就可以根据系统提供的最后一个落实点的信息,重新启用Import命令,并通过提供RESTARTCOUNT N子句来指导这个命令跳过在前面已经被报告为成功落实到输入文件的行数。即避免重复导入,来提高数据导入效率。数据库管理员可以根据记录量的多少来合理的设置这个n值。一般情况下这个值不要设置的太大。不过如果太小的话,也会影响到数据导入的性能。如果数据量很大,笔者往往将这个值设置为500。不过具体情况具体对待,数据库管理员还是需要根据经验来判断选择一个合适的值。

  四、在导入语句中采用格式化选项

  在导入数据的时候,一般要求外部文件都能够遵守严格的格式。如果格式不准确的话,那么往往数据导入会失败。所以,有时候数据库管理员在导入的过程中,还不得不采用一些文件类型修饰符,又叫做格式化选项,来规范外部文件的格式。让数据库系统能够正确识别外部文件,从而顺利导入外部数据。

  如默认情况下,外部文件的列与列之间是用英文状态下的逗号分割的。如果外部文件不是利用这个符号来分隔的,而是采用冒号或者TAB符号来符合来分隔的,此时数据库管理员有两个选择。一是更改原文件中的分隔符号。利用操作系统的相关命令或者其他软件的帮助,可以改变这个分隔符号。如通过Excle软件来变更等等。二是在导入的时候,采用格式化选项,让导入工具能够识别这个分隔符。如可以在导入语句中加入COLDEL :子句,告诉数据库系统,现在采用的列分隔符不是逗号,而是冒号。如此在不更改原文件的情况下,也可以顺利导入数据。

  除此之外,有时候在外部文件中有可能还会因为疏忽将某条记录写成了两行。由于默认情况下是根据行来判断记录,而不是根据列分隔符来区分不同的记录,所以此时这条记录会被当作两条记录来对待。为了避免这种情况,有时候数据库管理员需要更改分隔符号的优先极。默认情况下,DB2数据库分隔符的优先极分别为记录分隔符、字符串分隔符、列分隔符。也就是说记录分隔符(往往是换行符号)具有最高的优先级别。从而就会发生上面提到的情况。为了避免将一条记录 (在两行或者多行中显示)被当作多条记录对待,最好的方法就是利用 MODIFIED BY DELPRIORITYCHAR子句来更改分隔符号的优先性。让列分隔符号具有比较高的优先级。

文章:www.dbfen.com 转载请注明出处

时间: 2024-08-25 16:23:59

DB2数据导入的四大注意事项的相关文章

将一个数据库中的数据导入另一个数据库(DB2)

将一个数据库中的数据导入另一个数据库(DB2) 我这里举得例子是使用的DB2数据库,其他数据库思路也是这样啦! 1.从db2 数据库中将表中的数据导入本地的excel中 export to d:\mytest.xls of del modified by nochardel coldel0x09 select * from IOUT_BUSI_YWDJMX_TEMP 2.在需要导入的数据库建立一个临时表 --创建临时表 CREATE TABLE NBADV.l_hzcitywa ( fhcode

db2数据导出导入

C:\Users\yexuxia>set db2instance=TCASHMAN C:\Users\yexuxia>db2(c) Copyright IBM Corporation 1993,2007DB2 客户机 10.5.0 的命令行处理器 db2 => connect to TCASHMAN user db2inst1 using '1qaz!QAZ' 数据库连接信息 数据库服务器         = DB2/AIX64 9.7.0 SQL 授权标识         = DB2I

SQL Server 数据导入Mysql详细教程

SQL Server 数据导入Mysql详细教程 SQL Server数据库和Mysql 数据库都是关系型数据库,虽然很多数据库都对SQL语句进行了再开发和扩展,使得在不同的数据库中执行的方法或用法不一,但是 SQL Server,Mysql ,Access等都采用了SQL语言标准,不同的数据库中的数据是可以导入的.对于大数据的导入是有相当大的意义. 今天,我和大家一起分享一下,我用的便捷的"sql server 数据导入mysql 中的方法",希望能给大家的项目开发中"sq

Oracle exp/imp数据导入导出工具基本用法

一.获取帮助 exp/imp help=y 二.数据导出 1.将数据库完全导出,设置full选项exp system/[email protected] file=d:\db.dmp full=y 2.导出数据库结构,不导出数据,设置rows选项exp system/[email protected] file=d:\db.dmp rows=n full=y 3.当导出数据量较大时,可以分成多个文件导出,设置filesize选项exp system/[email protected] file=

MATLAB/Excel-如何将Excel数据导入MATLAB中

在使用MATLAB对矩阵进行数据处理时,为了方便编辑与修改,常常需要先将数据录入到Excel中,然后再将其导入到MATLAB中参与矩阵运算.本文在MATLAB 2013a和Office 2013环境下向大家演示如何将Excel数据导入到MATLAB中,其他版本的MATLAB.OFFICE方法大同小异,一起来看一下 工具/原料   Excel数据文件(格式xls或xlsx) MATLAB 7.x + 方法/步骤     将待导入的矩阵结构的数据录入Excel中,录入时注意行列要跟原矩阵一一对应  

PL/SQL数据导入导出浅谈(1)

近来需要通过PL/SQL向Oracle中导数据,特此总结一下 试例表:test 字段:id;name;org; 1.直接复制粘贴(当数据量不是特别大的时候) 1)使用select * from test for update语句 2)执行之后,点击查询结果窗口左上方的小锁,打开之后,便可在相应的字段下面进行复制粘贴 3)粘贴结束之后,点击对号.之后提交事务即可. 优点:方便 缺点:当数据量比较大的时候准确度容易出差错 2.使用PL/SQL自带工具 1)准备数据,把需要导入的Excel文件另存为t

MySQL5.7.18 备份、Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份,数据导入导出

粗略介绍冷备,热备,温暖,及Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份 --备份的目的 灾难恢复:意外情况下(如服务器宕机.磁盘损坏等)对损坏的数据进行恢复和还原保证数据不丢失,最小程度地丢失需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用 --备份与恢复概述 根据备份的方法可以分为: 1.Hot Backup(热备) 2.Cold Backup(冷备) 3.Warm Backup(温备) Hot Backup是指

关于ORALCE一个表空间的数据导入到另一个表空间的方法(原创)

用户:   whnaproject     所属表空间: whnaproject 新用户   : wniec            所属新表空间: wniec 要求:将用户whnaproject中的数据库表以及数据 ,全部复制到 新表空间wniec的  wniec用户中. 常规过程:用exp命令把用户whnaproject的表及数据导出,然后用IMP命令把导出的表及数据导入到新用户wniec中. 存在问题:用户whnaproject的表及数据可以导入到新用户wniec中,但wniec中的导入的表

oracle数据导入/导出(2)

Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失). Oracle有个好处,虽然你的电脑不是服务器,但是你装了oracle客户端,并建立了连接 (通过Net Configuration Assistant添加正确的服务命名,其实你可以想成是客户端与服务器端 修了条路,然后数据就可以被拉过来了) 这样你可以把数据导出到本地,虽然可能服务器离你很远