informix怎么c语言实现web服务器跨服务器数据抽取

博客访问: 33566
博文数量: 14
博客积分: 312
博客等级: 一等列兵
技术积分: 105
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
原文地址: 作者:
INFORMIX数据库是一被广泛应用的关系型数据库,如何提高其应用性能是大家关心的话题,特别是随着库中数据量与应用处理交易量的不断增多,其运行效率问题尤显突出。除了充分应用INFORMIX新品质,从INFORMIX-SE到INFORMIX-ONLINE高版本外, INFORMIX数据库的运行效率与其系统参数(online)的配置、性能的调整、库表创建的方式、索引的策略、ESQL/C程序的质量优劣直接相关。本文结合工作实践介绍以下提高 INFORMIX数据库运行效率的若干优化策略与措施。&一、 INFORMIX系统性能参数优化&系统性能与磁盘、CPU、共享内存和网络相关。对磁盘调整的原则是降低读盘次数,极大化每次读盘数据量,数据分布均匀,防止瓶颈的发 生。Online的磁盘空间应采用裸设备方式(raw&device),而不采用文件系统方式(cooked file),前者比后者处理速度要快得多,且可靠性 高。物理日志缓存空间应在30~50兆间即可,不必太大。设置cpu&vp个数为cpu个数减1(若cpu个数为1,则cpu vp也为1)。共享内存一般是系 统内存的1/3~1/4,一个cpu vp配4个LRU队列,n个&LRU队列配n个页刷新进程page_cleaner,调谐使其高速缓冲区读命中率大于95%,写命中率大于85%,设定多张网卡可改进性能,网络碰撞率应在8%以内。系统核心参数按informix各版本提出的配置要求调整即可,若调整不对,在构造online时即可能不会成功。Informix-online数据服务器性能的调试往往在一定的经验值基础上动态反复调整、测试才能获得最终满意的结果。INFORMIX数据库系统参数性能调整的优劣直接影响INFORMIX数据库运行效率,对其性能调整的具体方法与步骤,informix资料有较详 尽说明,这里不作重点讨论。&二、 创建库表方式优化&1.数据库建库程序对每个数据表空间分配的优化。&在建表前将数据库每张表数据量大小作一估算,以便将表的第一个“extent”(物理上连续的页)空间分配尽量和估算值大小一致,下一 个“extent”空间分配则根据表数据的增加量估计值来分配,这样可减少数据分配碎片和空间浪费,提高数据库系统的效率。&2.引入表分割fragmentation,使数据在物理逻辑上分布均匀,有助于并行处理性能的提高。&3.建表时对表的记录锁方式根据应用处理的不同区别对待。批量处理的表采用页锁(page)方式,实时交易的表采用行锁(row)方式。锁方式可 以在建表时确定,也可以用alter&tabname lock mode(row)和alter tabname lock mode(page)命令改变。值得注意的是通过 dbimport、dbexport转移生成的表其默认锁方式是页级锁,对于实时交易且操作频繁的表应改为行级锁方式,使用oncheck -pt命令可查得表 的锁方式状态。&4.建库的日志方式:&(1)No logging:不能进行事务处理。&(2)buffered log:共享缓存满即刷新写入磁盘。&(3)unbuffered log:当一个交易完成时即刷新写入磁盘。&(4)ansi mode:只有日期格式差异,月日年形式,其他与unbuffered相同。&一般我们对实时处理系统日志方式采用unbuffered log,在进行大批量数据集中装卸时采用no logging。如:&create database workdb in dbspacel with log;&create table satmx(&zh char (20),&rq date,&fse money(16),&ye money(16)&)&in dbspacel&EXTENT size 1024&NEXT size 64&LOCK mode (row);&Greate index satmx_idx on satmx(zh,rq);&Alter table satmx modify next size 128 lock mode (page);&Alter index satmx_三、 应用程序的优化&1.Select语句优化要点&(1)对于大数据量的求和应避免使用单一的sum命令处理,可采用group by方式与其结合,有时其效率可提高几倍甚至百倍。例如,银行常要进 行帐户的总帐与明细帐一致性核对(总分核&对),数据量大,原采用单一的sum命令与while语句结合来完成,现改用以下group by方式后效率 大相径庭。&/*将定期表中所有数据按机构,储种统计户数,余额置临时表中并建索引*/&select zh[1,9] jg,zh[19,20]cz,count(*)hs,sum(ye)sumye&from satdq&where bz=″0″&group by zh[1,9],zh [19,20]&into temp satdq_&create index satdq_suml&on satdq_sum(jg,cz);&(帐号zh的前9位为机构编码,第19至20位为储种)&(2)最具有限制性的条件放在前面,大值在前,小值在后。&如:where col=1 效率高&where col>=1 and col<=1000 效率低&(3)避免子查询与相关查询。&如:where zh in (select zh from table where xm matches ″*11*″)&可将其编为declare cursor 的一while循环来处理。&(4)避免会引起磁盘读写的rowid操作。在where子句中或select语句中,用rowid要产生磁盘读写,是一个物理过程,会影响性能。&如原为:&declare ps2 cursor&for&select *,rowid&into b,id&from satmxhz&where zh[1,9]=vvjgbm&and bz=″0″&&open ps2;&fetch ps2;&while (sqlca.sqlcode==0){&……&update satmxhz&set&sbrq=b.sbrq,&ye=b.ye,&lxjs=b.lxjs,&wdbs=wdbs+1,&dac=dac&where rowid=&……&fetch ps2;&}&改为:&declare ps2 cursor&for&select * into b&from satmxhz&where zh [1,9]=vvjgbm&and bz=″0″&for update of sbrq,ye,lxjs,wdbs,&open ps2;&fetch ps2;&while (sqlca.sqlcode==0){&……&update satmxhz&set&sbrq=b.sbrq,&ye =b.ye,&lxjs=b.lxjs,&wdbs=b.wdbs,&dac=dac&where current of ps2;&……&fetch ps2;&}&(5)where子句中变量顺序应与索引字键顺序相同。&如:create index putlsz_idx on putlsz(zh ,rq,lsh)&索引字键顺序:首先是帐号zh,其次是日期rq,最后是流水号lsh,&所以where子句变量顺序应是where zh=″11111″and rq=″06/06/1999″and lsh<1000,不应是where&lsh<1000 and rq=″06/06/1999″ and zh =″11111″等非索引字键顺序。&(6)用=替代matches的操作。&如:where zh matches ″*″应用where zh[1,9]=″″替代。&(7)通过聚族索引cluster index提高效率。&(避免使用order by,group by,该操作需生成临时表而影响效率,可用视图来处理,视图的引入能控制用户的存取,提高效率。2.insert语句优化要点&(1)采用insert cursor或put替代insert;&如:wr_satmx ()&&prepare insert_mx from&″insert into satmx&values(?,?,?,?,?,?,?,?,?,?,?,?)″;&declare mx_cur cursor&for insert_&open mx_&declare cur_mxh cursor&for&select * into bmxh&from satmxh&&open cur_&fetch cur_&while (sqlca.sqlcode==0){&put mx_cur from&bmxh.zh ,bmxh,rq,bmxh,l sh,bmxh,jym,&bmx,pzhm,bmxh.bz,bmxh,fse,&bmxh.ye,bmxh.bdlsh,bmxh.bd rq,bmxh.czy,bmxh.&delete from satmxh&where current of cur_&fetch cur_&}&close mx_&close cur_&&以上一段程序是将satmxh表中记录转移到satmx表中,虽然可用&&insert into satmx select&*&&&四行程序即可实现,但若表中记录多的话,其运行效率远远不如前者的处理方式,因为insert cursor是先在共享内存缓存中处理,刷新时写 入磁盘的,所以上载数据速度最快,但其缺点是必须编程实现。(2)避免加长锁、长事务操作,这在处理大数据量时其优劣尤为突出,在能保证数据一致性的前提下应将长事务分解为小事务来处理。&如将前面例题数据分不同网点机构进行转移,避免长事务,可大大提高运行效率。&wr_satmx():&&declare cur_jgl cursor&with hold for&select jgbm,jgmc&into vvjgbm,vvjgmc&from putjgbm&order by jgbm&open cur_&fetch cur_&while(sqlca.sqlcode==0){&&prepare insert_mx from&″insert into satmx&values(?,?,?,?,?,?,?,?,?,?,?,?)″;&declare mx_cur cursor&for insert_mx&open mx_cur&declare cur_mxh cursor&for&select * into bmxh&from satmxh&where zh [1,9]=vvjgbm&&open cur_&fetch cur_&while (sqlca.sqlcode==0){&put mx_cur from&bmxh.zh,bmxh.rq,bmxh.lsh,bmxh,jym,&bmx.pzhm,bmxh.bz,bmxh.fse,&bmxh.ye,bmxh.bdlsh,bmxh.bd&rq,bmxh.czy,bmxh.&delete from satmxh&where current of cur_&fetch cur_&}&close mx_&close cur_&&fetch cor_&}&close&cur_&&(3)宿主变量应在执行insert操作前转换为表结构描述的数据类型,避免insert语句操作时不同数据类型自动转换而影响其效率。&(4)对表的insert操作很频繁时,可以将index fill factor降低一些,采用row lock 代替page lock。3.update语句优化要点&(1)用子串代替matches,避免使用不从第一个开始的子串。&如where a matches ″ab*″采用where a [1,2]=″ab″代替;避免使用如b[5,6]的子串。&(2)避免加长锁修改,避免长事务处理,例子参见insert的语句优化(2)方式。&4.delete语句优化要点&(1)用drop table,create table和create index代替delete from table,能快速清理并释放表空间。&(2)避免长事务处理,例子参见insert的语句优化(2)方式。&(3)使用关联(父子)删除cascading delete。&(4)编写程序使用delete cursor删,而不采用delete from table where…的方式。例子参见insert的语句优化(1)方式。四、 index索引策略的优化与原则&(1)两表中有关联,则关联字段必须建索引。如果select语句的where子句具有在一个表的一个单字段和另一个表的一个单字段之间的连接条件,则对记录数目更多的那个表的那个字段建立索引;如果一个表的几个字段和另一个表的几个字段的连接条件,则对记录数目更多的那个表的起作用的字段上建立复合索引。&(2)避免高重复率字段建索引。&(3)对同一表不要过多地建索引。&(4)建索引的字段的size尽量少,复合索引尽量少用。&(5)建聚族索引,减少索引文件碎片,以加快检索速度。&(6)where子句经常用到的字段做索引。&(7)先load data,后create index。&(数据量小的表是否建索引影响不大,一般不要对记录数小于200的小表建立索引,因为从使用索引得到的速度不能抵消在表上打开和检索索 引文件所需的时间。&(9)建primary key&五、 其他因素与措施&(1)INFORMIX数据库中一个事务处理不能跨多个进程。例:&……&&……&if(fork()==0){/*子进程处理*/&……&(或 )&……&}&……&引起数据库运行效率很低或处理异常。&(2)利用“set explain on” INFORMIX语句来分析数据库查找策略。&当发现某一部分INFORMIX语句运行特别慢又找不到原因时,可在程序中加入“set explain on”语句,当程序运行时,在程序运行的当前目录下产生一个“sqexplain.out”文件,记录了INFORMIX数据库服务器采用何种优化策略来查找数据库。在该文件中可以发现查找中有无使用索引条件,估计的查找代价等信息。(3)数据库在做″dbimport″后应运行update statistics语句。&当数据库系统用“dbimport”实用程序完成数据库装载后,应运行update statistics数据库语句保证系统表中统计信息准确,否则将影响数 据库优化器的策略和系统运行性能。例:&select * from satmxhz where zh matches″1111*″&satmxhz表在zh字段上建立了索引,但在数据库运行update statitic前,数据库优化查找策略是按顺序查找而不是按索引查找,严重影响了查 找速度。&(4)经常插入和删除的大表应定期运行update statistics high语句。&对经常插入和删除的大表应定期运行update statistics语句保证系统表中统计信息准确,保证数据库优化器作出正确的优化策略提高系统运 行性能。&(5)对大文件采用load命令装载入库前可先去掉原有的日志方式和去掉索引,等load装载完成后再重建索引和日志,能大大提高装载效率,避 免出错产生。&a.去掉原有的日志方式:ontape-S -N dbname&b.去索引:delete index indexname&c.用load 装入数据:load from filename insert into tabname&d.重建索引:create index to indexname on tabname(fld1,fld2……)&e.重建日志:ontape -C -B&(6)在应用上引入多进程并发处理,充分利用系统资源,能大大提高处理效率。如以下是对多机构多表同时并发处理的例子:&#include&#include&#include&#include&……&main()&{&pid_t pids[256];&int pid,i,ii,stat_loc,exit_flag=0;&signal(SIGCLD,SIG_DFL);&for(i=0;i< 3;i++){&pid=fork();&if (pid< 0)&exit(0);&else{&if(pid==0)&in_son(i);&else&pids[i]=pid;&}&}&while(1){&pid=wait(&stat_loc);&exit_flag=1;&for(i=0;i< 3;i++){&if(pid==pids[i])&pids[i]=-1;&if(pids[i]!=-1)&exit_flag=0;&}&if(exit_flag)&}&return(0);&}&in_son(i)&&{&sqldetach();&switch(i){&case 0:&wr_satmx();/*由[satmxh]转入[satmx]*/&&case 1:&wr_satzhmx();/*由[satzhmxh]转入[satzhmx]*/&&case 2:&wr_putrzz();/*由[putrzzh]转入[putrzz]*/&&&&}&exit(0);&}&wr_satmx()为前面举例的一函数,wr_satzhmx(),wr_putrzz()可为操作表不同的函数。
阅读(1328) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。informix怎么实现跨服务器数据抽取 - Informix当前位置:& &&&informix怎么实现跨服务器数据抽取informix怎么实现跨服务器数据抽取&&网友分享于:&&浏览:29次informix如何实现跨服务器数据抽取我现在用的数据库是informix,现在想写一个脚本每个月固定时间(每个月的最后一个或者每个月第一天)从一个服务器的某个表中抽取一些数据到另一个服务的表里面,例如从192.186.1.1的服务上抽取数据写入到192.168.1.2的服务器上,请问该如何实现!请高手帮忙解决一下!------解决方案--------------------类似这样的话,是分布式事务啦要看看你的数据库是否支持如果支持的话,又支持链接服务器的话,那可以通过链接服务器直接进行操作了。
------解决方案--------------------
dbaccess 要导入的dbname &&!insert into tabname1 select * from tabname2 from database@servername:owername.tabname& !__________________________________这样可以不?我也在学习中
------解决方案--------------------database@servername:tabname& 就可以,数据库主机建立信任关系
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有Shell脚本和Informix的交互实现技巧
Shell脚本和Informix的交互实现技巧
  在Linux/Unix下一些程序是命令行或者服务程序,一般都有一个配置文件来描述其运行规则,而这些规则通常会保存在数据库中,由其它应用程序来维护。这就牵涉一个问题,如何从数据库中获取最新的规则来驱动后台程序。同样后台程序运行结束后,生成的结果有时需要写回数据库,以便其它应用程序读取。  通过阅读本文章,读者能了解Shell脚本和Informix交互的一些常用技巧和方法,实现诸如查询、增加、删除、修改数据功能,最终实现数据库、后台程序之间的信息交互。  1. Informix简要介绍  Informix是IBM公司出品的关系数据库管理系统(RDBMS)家族。作为一个集成解决方案,它被定位为作为IBM在线事务处理(OLTP)旗舰级数据服务系统。 IBM对Informix和DB2都有长远的规划,两个数据库产品互相吸取对方的技术优势。目前最新版本的是Informix 11.7,这个最新的版本在未来十年对IBM Informix继续提供力量,其引擎有效的解决OLTP,决定了可以更好的支持各种规模的企业和合作伙伴的决策支持应用。  2.Linux/Unix Shell简要介绍  Linux/Unix Shell也叫做命令行界面,是一种控制系统的脚本语言。它是Linux/Unix操作系统下传统的用户和计算机的交互界面。用户直接输入命令来执行各种各样的任务,隐藏了操作系统低层的细节。  Shell的主要功能:命令执行、输入/输出重定向、环境控制、后台处理、Shell脚本。  3.Shell与Informix交互的基本方法  Shell通过调用dbaccess在Informix上执行各种SQL,而通过调用dbload可以将文件加载到数据库中。  3.1. 通过dbaccess连接数据库  dbaccess提供了用于输入、执行和调试结构化查询语言(SQL)语句与存储过程语言(SPL)例程的用户界面。假设联机的数据库服务器包含一个名为mystores的数据库,要使mystores数据库成为当前数据库,可以通过db2access mystores来启动DB-Access.也可以通过命令dbaccess //xyz/newstores 连接到xyz数据库服务器上的newstores数据库(未联机)。  3.2. 通过dbaccess执行SQL  当从命令行调用dbaccess时,可以指定某个数据库作为当前的数据库、执行包含一个或多个SQL语句的文件以及显示多个级别的错误信息。  例1:dbaccess test insert.sql  表示:在test数据库执行名为insert.sql的文件中SQL语句的命令。  例2:dbaccess - insert.sql  表示:在insert.sql上文件中指定的数据库上执行文件中的SQL语句的命令。  下面函数被调用后,调用dbaccess来执行相关的SQL并将结果输出到标准输出中。  清单1  ExecuteSqlSelect()
sqltxt="$1";
pre_sql="output to pipe cat without headings ";
sqltxt=$pre_sql"$sqltxt";
echo "$sqltxt"|dbaccess test 2&/dev/
}  在清单1的代码中,$1 表示函数的第1个参数,在这里第1个参数为要执行的SQL语句;pre_sql变量中的代码是用来屏蔽dbaccess执行时输出的运行日志信息,如果不加此设置,不会影响函数执行结果,只是执行过程中出现很多dbaccess运行日志信息。  echo &$sqltxt&|dbaccess test 2&/dev/null表示用dbaccess命令连接test数据库,然后执行$sqltxt语句,并将错误输出到/dev/null。  上面函数在Shell中调用方式如下:  User_name=`ExecuteSqlSelect &select user_name from t_&`;  3.3. 利用Shell调用dbaccess导出记录  下面函数被调用后,会执行传入的SQL并将结果导出到一个文件中。  清单2    ExecuteSqlUnloadFile()
 sqltxt="$1";
 unload_file="$2";
 temp_file="$3";
 pre_sql="unload to $unload_file delimiter ',' ";
 post_sql="";
 echo $pre_sql & $temp_
 echo "$sqltxt" && $temp_
 echo $post_sql && $temp_
 dbaccess testdb & $temp_file 2&/dev/
 rm -f $temp_
 }  在清单2的代码中,$1 、$2 、$3表示函数的第1个、第2个、第3个参数。  第1个参数为SQL语句。  第2个参数为输出文件名称。  第3个参数为临时文件名称(执行结束会被删除)。  unload to $unload_file delimiter &#39;,&#39; 表示记录导出时存为文件名为$unload_file的文件,在这里记录之间的分隔符用逗号表示。  $temp_file文件为临时文件,用来保存SQL语句,在函数执行末尾其内容将被删除。  dbaccess testdb & $temp_file 2&/dev/null表示用dbaccess命令连接testdb数据库,然后执行$temp_file文件中的SQL语句,并将错误输出到/dev/null。  上面函数在Shell中调用方式如下:  ExecuteSqlUnloadFile &select c1,c2 from t_test& &t_test.dat& &t_test.tmp&;  3.4. 利用dbload导入文件  dbload的功能是将一至多个ASCII文件中的数据传送到一至多个已有的表中。  语法为:dbload [-d dbname ] [-c cfilename] [-l logfile] [-e errnum] [-n nnum] [-i inum] [-s] [-p] [-r] [-k] [-X]。  其中主要选项说明如下:  -d dbname 指定接收数据的数据库名  -c cfilename 指定指定dbload命令文件的文件名  -l logfile 指定错误日志文件的文件名  -r 在装入数据期间允许其他用户修改表中数据(装入数据期间不封锁表)  -s 指示dbload 检查命令文件中语句的语法,而不插入数据  -i inum 指示dbload忽略指定数目的行数  -n nnum 指示dbload在插入指定数目的新行后提交操作  -e errnum 指定dbload 中止前可读入的坏行数  -p 如果坏行数超过了极限,给出提示信息,请用户指定解决方法  例如: dbload -d testdb -c load.ctl -n 10000 -l error.log。这个命令表示将按照load.ctl控制文件的指示,加载数据到testdb 数据库中, 每10000条记录提交一次,错误数据将写入error.log文件。以下是load.ctl控制文件的内容。  清单3  FILE crm.dat DELIMITER &#39;|&#39; 3;  INSERT INTO data_crm_  清单3中的内容表示将crm.dat数据文件加载到data_crm_list表中,分隔符是&#39;|&#39;, 数据字段个数为3。  4. Shell与Informix交互实例  通过第三章的介绍,读者已经基本了解Shell与Informix的交互方式。在本章中,作者将通过一个具体实例展现Shell与Informix交互过程。  4.1. 场景概述  脚本名称:test.sh  演示步骤:  A:先在Informix中创建2个表,分别为t_test和t_test2;  t_test表结构:    CREATE TABLE t_test
 user_code VARCHAR(20),
 user_name VARCHAR(20),
 user_desc VARCHAR(50)
 t_test2表结构:
 CREATE TABLE t_test2
 user_code VARCHAR(20),
 user_name VARCHAR(20),
 user_desc VARCHAR(50)
 )  B:在t_test中插入2条记录;  insert into t_test values(&#39;1001&#39;,&#39;test&#39;,&#39;this is a test&#39;)  insert into t_test values(&#39;1002&#39;,&#39;guess&#39;,&#39;this is a test&#39;)  C:在Linux终端下执行test.sh脚本。  运行结果:  A:脚本会读取t_test表中的2条记录,并导出为文件t_test.  B:t_test.dat文件被导入t_test2表中,此时t_test2记录数和t_test一样。  4.2. 完整代码和注释    #!/usr/bin/env bash
  DBTOOL="dbaccess"
  DBCONNT="test"
  #功能说明:执行SQL并将结果导出到一个文件中
  #参数说明:
  # 第1个参数为SQL语句
  # 第2个参数为输出文件名称
  # 第3个参数为临时文件名称(执行结束会被删除)
  ExecuteSqlUnloadFile()
  sqltxt="$1";
  unload_file="$2";
  temp_file="$3";
  pre_sql="SET LOCK MODE TO WAIT 10 ;unload to $unload_file delimiter ',' ";
  post_sql="";
  echo $pre_sql & $temp_
  echo "$sqltxt" && $temp_
  echo $post_sql && $temp_
  $DBTOOL $DBCONNT & $temp_file 2&/dev/
  rm -f $temp_
  #功能说明:执行SQL
  #参数说明:
  # 第1个参数为SQL语句
  ExecuteSqlSelect()
  sqltxt="$1";
  pre_sql="SET LOCK MODE TO WAIT 10 ;output to pipe cat without headings ";
  sqltxt=$pre_sql"$sqltxt";
  echo "$sqltxt"|$DBTOOL $DBCONNT 2&/dev/
  #功能说明:去掉变量的前后空白
  trim()
  echo $1 |sed 's/^ +//'|sed 's/ +$//'
  #功能说明:得到t_test指定记录中某个字段的值
  get_username_bycode()
  user_code="$1";
  EXECSQL="select user_name
  from t_test
  where user_code="$user_code";";
  echo $EXECSQL
  user_name=`ExecuteSqlSelect "$EXECSQL"`;
  user_name=`trim $user_name`;
  echo "user_name:["$user_name"]";
  #功能说明:得到t_test中所有记录,并导出为文件t_test.dat
  get_all_username()
  EXECSQL="select user_code,user_name,user_desc
  from t_";
  echo $EXECSQL
  ExecuteSqlUnloadFile "$EXECSQL" "t_test.dat" "username.tmp";
  #功能说明:生成入库配置文件
  #参数说明:
  # 第1个参数为需入库的表名称
  # 第2个参数为待入库的文件名称
  # 第3个参数为文件分隔符
  # 第4个参数为文件列个数
  make_loader()
  table_name=$1
  data_name=$2
  sep=$3
  tab_num=$4
  echo "file "$data_name" delimiter "$sep" $tab_" & $CTL_FILE;
  echo "insert into $table_" && $CTL_FILE;
  #功能说明:按照入库配置要求,将数据导入表中
  #参数说明:
  # 第1个参数为bad文件
  # 第2个参数为log文件
  start_loader()
  badfile_name=$1;
  logfile_name=$2;
  #这里的10000是指多少条数据commit一次,可以根据实际情况调节大小。
  dbload -d $DBCONNT -c "$CTL_FILE" -l "$badfile_name" -n 10000;
  #得到用户编号为1001的用户名称
  get_username_bycode "1001";
  #得到t_test表中用户编号、用户名称、用户描述信息,并保存到t_test.dat文件中
  get_all_
  #通过awk将t_test.dat最后一列转换为大写字母
  `cat t_test.dat | awk -F',' -v OFS=',' '{print $1,$2,toupper($3)}' & t_test2.dat`
  CTL_FILE="./t_test2.ctl"
  #生成入库配置
  make_loader "t_test2" "./t_test2.dat" "," "3";
  #执行入库
  start_loader "./t_test2.bad" "./t_test2.log";
  #--------------------主程序--------------------
    4.3. 运行结果与分析    test @ dwserver : /home/test /sgy $ ls -l
  总计 4
  -rwxr-xr-x 1 testtest
14:37 test.sh
  test @ dwserver : /home/test /sgy $ ./test.sh --------执行test.sh
  select user_name from t_test where user_code=1001;----49行代码输出
  user_name:[test] ----52行代码输出
  select user_code,user_name,user_desc from t_ ----59行代码输出
  DBLOAD Load Utility INFORMIX-SQL Version 10.00.UC5 ---DBLOAD运行输出
  Copyright IBM Corporation
All rights reserved
  Software Serial Number AAA#B000000
  Table t_test2 had 2 row(s) loaded into it.
  test @ dwserver : /home/test /sgy $ ls -l
  总计 16
  -rwxr-xr-x 1 testdba
14:37 test.sh
  -rw-r--r-- 1 test dba 0 05-04 14:38 t_test2.bad
  -rw-r--r-- 1 test dba 59 05-04 14:38 t_test2.ctl
  -rw-r--r-- 1 test dba 51 05-04 14:38 t_test2.dat
  -rw-r--r-- 1 test dba 53 05-04 14:38 t_test.dat
  test @ dwserver : /home/test /sgy $ head t_test2.ctl ----入库配置文件
  file "./t_test2.dat" delimiter "," 3;
  insert into t_test2;
  test @ dwserver : /home/test /sgy $ head t_test.dat ----导出的t_test记录
  1001,test,this is a test
  1002,guess,this is a test
  test @ dwserver : /home/test /sgy $ head t_test2.dat ----经过99行awk处理后的记录
  1001,test,THIS IS A TEST
  1002,guess,THIS IS A TEST  运行结束后,t_test2表中多出2条记录,且user_desc字段的值为大写。  结束语  本文主要介绍了Linux/Unix下Shell如何实现Informix数据库的交互。文章首先对Informix和Shell进行了简单介绍,然后通过介绍dbaccess和dbload两个应用程序的用法来使读者对Shell和Informix交互有一个基本认识。文章最后以一个完整的实例来展示Shell和Informix的各种交互,使读者加深理解,在例子中会用到awk、sed来对数据格式化,这些工具的加入使得Shell处理很多应用时更加强大,所以在实际各种应用中,Shell会结合awk、sed等工具来实现对数据库中导出的信息格式化,或者在文件导入数据库之前对文件中记录进行格式化。  作者介绍  张晓丹,IBM CDL软件工程师, 具有丰富的自动化测试经验、RQM应用经验、BI项目测试经验、以及Web application开发经验。  程平平,IBM CDL 软件工程师,主要从事 Optim Query Tuner 产品开发工作,在Eclipse插件开发有一定的经验。  王苹, IBM CDL 软件工程师,主要从事 DB2 for z/OS产品功能测试工作,在数据库应用和自动化测试工具开发方面有一定的经验。
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
职称考试题目
招生信息考研政治
网络安全安全设置工具使用手机安全
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&

我要回帖

更多关于 java实现http服务器 的文章

 

随机推荐