#!/bin/ksh
#===========================================================================
#filename:dbload.sh
#功能:
#从文件导入海量数据到informix数据库中
#主要是解决海量数据导入问题,当直接使用形如:
#load from loadfile.txt insert into tablename;
#导入数据时,如果数据超过几百万条则会使缓存被充满而无法导入
#input: nameDB nameTable dataFile
#注意:
#1.程序需要informix load 支持
#2.数据文件第行应以"|"结尾
#===========================================================================
#参数输入
if [ $# -ne 3 ];then
cat << EOF
Usage: $0 nameDB nameTable dataFile
nameDB 数据库名
nameTable 数据库表名
dataFile 即将导入数据库的数据文件
EOF
exit 1
fi
nameDB="$1" #数据库名
nameTable="$2" #数据库表名
dataFile="$3" #即将导入数据库的数据文件
if [ ! -f "$dataFile" ];then
echo "<ERROR>数据文件[$dataFile]不存在!" | tee -a $errLog
exit 1
fi
tmpStr0=`echo $dataFile | sed "s/\//_/g"`
errLog="${tmpStr0}_E.log" #日志
:>$errLog
delimStr="|" #数据文件中数据分隔符
commitNum=100000 #一次提交的数据条数
canErrNum=1000000 #容许错误的条数
loadCMDFile="load$$.cmd" #load命令文件
tmpFile="`basename $dataFile`.tmp" #临时文件
trap "myExit" 0 1 2 3 9 11 15
myExit()
{
#程序退出前删除临时文件
#删除load命令文件
rm -f $loadCMDFile
rm -f $tmpFile
#如果日志文件是空的删除
if [ ! -f "$errLog" ];then
return
fi
_tmpNum="`cat $errLog | wc -c`"
_tmpNum="`expr $_tmpNum`"
if [ $_tmpNum -eq 0 ];then
rm -f $errLog
fi
}
lineNum="`cat $dataFile | wc -l`" #数据行数
lineNum="`expr $lineNum`"
if [ $lineNum -eq 0 ];then
echo "<ERROR>数据文件[$dataFile]是空的!" | tee -a $errLog
exit 1
fi
#数据文件数据列数
colNum=`head -n1 $dataFile | awk -F"|" '{print NF}'`
#数据文件中的数据行最后有一个"|"
colNum=` expr $colNum - 1 `
cat << EOF > $loadCMDFile
file "$dataFile" delimiter "$delimStr" $colNum;
insert into $nameTable;
EOF
if [ ! -f "$loadCMDFile" ];then
echo "<ERROR>load命令文件[$loadCMDFile]不存在!" | tee -a $errLog
exit 1
fi
:> $tmpFile
dbload -d $nameDB -c $loadCMDFile -l $errLog -n $commitNum -e $canErrNum>> $tmpFile 2>&1
#| tee -a $tmpFile 2>&1
#cat $tmpFile
echo "[提示]数据文件行数: $lineNum"
#获取导入的数据条数
grepStr="Table $nameTable had "
tmpStr=`grep "$grepStr" $tmpFile`
insertNum=0
if [ "$tmpStr" != "" ];then
for str in $tmpStr
do
tmpStr2=`echo $str | grep "^[0-9]*$"`
if [ "$tmpStr2" = "" ];then
continue
else
insertNum=` expr $str `
echo "[提示]总计导入条数: $insertNum"
errNum=` expr $lineNum - $insertNum `
if [ $errNum -gt 0 ];then
echo "[ERROR]导入失败条数: $errNum"
exit 1
else
echo "[OK]导入成功!"
fi
break
fi
done
else
echo "[ERROR]导入失败条数: $lineNum"
exit 1
fi
源程序发布者informixchina bbs 新程序有改动。我的生产数据为约:2000W条
分享到:
相关推荐
《Informix High Performance Load用户指南》是一本专为Informix数据库管理员和开发人员设计的实用手册,它深入探讨了如何高效地加载大量数据到Informix数据库中。Informix是一款高性能的关系型数据库管理系统,广泛...
**Informix High Performance Load (HPL)** 是 IBM Informix 数据库系统中一个高性能的数据加载工具。它旨在帮助用户快速地将大量数据导入到 Informix 数据库中,从而提高整体的数据处理性能。此工具特别适用于需要...
**Informix 数据刀片开发详解** Informix 数据刀片(DataBlades)是 IBM Informix 数据库系统的一个重要特性,它扩展了 Informix 的核心功能,提供了针对特定数据类型和应用需求的专业化处理能力。数据刀片的设计...
Informix 11.5 数据压缩和存储优化的技术知识涵盖了数据库管理系统(DBMS)的存储成本削减、数据压缩技术的细节以及数据库管理的优化策略。以下详细知识点是基于给定文件的信息进行深入解析: 1. 存储成本不断上升...
Informix提供了多种复制解决方案,如同步复制、异步复制等,以确保数据的冗余和灾难恢复能力。全局事务处理和故障切换机制进一步增强了系统的可用性。 **六、Informix性能优化** Informix提供了各种性能优化工具和...
### Informix数据装卸技术详解 #### 一、概述 Informix数据装卸技术是IBM Informix数据库管理系统中的一个重要组成部分,主要用于实现数据的批量导入导出功能。这些技术包括unload/load、unonload/unonload、...
informix数据表的结构导出方法,informix是IBM的数据库
在 Informix 数据库管理中,备份是保障数据安全的重要环节。本篇文章将深入探讨 Informix 的两种常见备份方法:dbexport 和 0级备份,以及它们各自的优缺点和使用场景。 1. **dbexport 和 dbimport** `dbexport` ...
Informix提供了LOAD和UNLOAD语句,它们可以用于数据的导入和导出,且不需独占数据库。LOAD用于将数据从文本文件加载到数据库表中,而UNLOAD则相反,将数据库表的数据卸载到文本文件。通过编写脚本,我们可以利用这...
本文将Informix的所有错误代码的意义及推荐的解决方法汇总,中文txt格式
根据提供的文件信息,“Informix 用户例程与数据类型开发指南”这一标题以及描述明确指出了文档的主要内容将围绕IBM Informix数据库系统中的用户定义例程(User-defined Routines)及自定义数据类型展开。尽管具体内容...
在 Informix 数据库中,数据导入导出可以使用 unload 和 load 语句来实现。Unload 语句用于将数据从数据库导出到文本文件,而 load 语句用于将数据从文本文件导入到数据库中。 Unload 语句的基本语法为:unload to ...
而Informix的External Table功能则提供了高性能的ETL(Extract, Transform, Load)解决方案,极大地提升了数据处理的速度和灵活性。 ### 重要概念:Informix External Table #### 定义与特点 - **新特性**:自IDS ...
Informix支持多种数据类型和数据库模式,提供灵活的数据存储解决方案。 二、Informix数据库安装与配置 在开始学习Informix之前,了解如何安装和配置数据库系统至关重要。这包括选择合适的安装选项、配置服务器参数...
### Informix最快导数据(HPL):High Performance Load详解 #### 一、引言 在数据库管理和维护过程中,数据的导入导出是非常常见的操作之一。对于大型数据库系统来说,高效地进行数据导入导出不仅能够提升工作效率...
本文主要探讨了Informix数据库中的unload/load、Dbload、dbexport/dbimport、HPL以及External table等数据装卸技术。 首先,unload/load是Informix中基本的数据导出和导入工具,它的语法简洁明了。`unload`命令用于...
根据提供的信息,我们可以推断这份文档是关于IBM Informix数据库系统中的用户定义的例程(User-Defined Routines, UDRs)与用户定义的数据类型(User-Defined Data Types, UDTs)的开发者指南。虽然具体内容较为混乱...
Informix数据库系统是一个支持多种数据模型(如关系、对象-关系、时空)的高性能数据库解决方案。它提供了一整套用于数据管理、分析和集成的工具,适用于各种规模的企业,尤其在交易处理、大数据分析和物联网(IoT)...
Informix是一款高性能、可扩展的数据库解决方案,广泛应用于企业级数据管理、实时分析以及大数据处理等领域。本指南旨在帮助用户充分利用其功能,提升数据管理和应用开发的效率。 在Informix 12.1版本中,官方指南...