INformIX-OnLine客户服务器结构的建立方法及单机运行( 三 )


$include sqlca;
$include sqlda;
$char s_sql[50],s_spname[50];
static char *sqlcmdtxt[ ]={
" drop procedure tb2",0
};
static _SQSTMT _SQ0={0};
main(argc,argv)
char *argv[ ];
{
$database icbdb@acct_qz;
$begin work;
sprintf(s_spname,"/usr/icbacct/proc/%s.sql",argv[2]);
sprintf(s_sql," drop procedure %s",argv[1]);
strcpy(sqlcmdtxt[0],s_sql);
_iqstmnt(&_SQ0,sqlcmdtxt,0,(char *)0,(char *)0);
$create procedure from $s_procname;
$commit work;
$close database;
}
OnLine 7.1将存储过程以记录的方式存放在系统数据库sysmasters中,OnLine 5.0则不存在系统数据库,但是却有二十几个以sys开头的系统表,所以也可以用isql查询存储过程,方法是选择Form/Generate,直接输入表名sysprocbody和sysprocedures,存储过程也是以记录的形式存放在这两个表中 。2.4 数据的倒出和倒入既然要在单机上运行应用程序,所以有必要将服务器上的数据库的数据倒出并倒入到在单机上的数据库中 。在客户机上运行"dbexport icbdb@acct_qz"命令倒出服务器上的数据库的数据,成功运行后将会在当前目录下生成dbexport.out文件和icbdb@acct_qz.exp目录,其中dbexport.out包含生成数据库和数据库表以及建立所有索引的SQL语句,倒出的数据存放在icbdb@acct_qz.exp目录下 。将文件dbexport.out和icbdb@acct_qz.exp目录压缩后拷到单机上, 再用命令"dbimport icbdb@acct_qz -l buffered"将数据装入到单机上的数据库中 。这一命令首先在单机上的数据库服务器acct_qz上生成数据库icbdb,然后生成所有的表再装入数据,同时生成所有的索引 。其中的"-l buffered"允许使用逻辑日志,否则客户机上的程序将无法在单机上运行,原因是客户机程序使用诸如了"begin work"等事务操作语句 。这是第一次运行时的操作过程,目的是建立数据库并生成数据库表和索引 。在单机上建立数据库后,数据的倒出倒入就另外要用SQL语言来做,在客户机上执行下面命令将数据转为文本:$ isql icbdb@acct_qz /usr/icbacct/bin/sh/backup_dbs.sql 。backup_dbs.sql语句如下(仅以fxa和fxd表为例):
unload to "/usr/icbacct/tmp1/fxa.txt" select * from fxa where fxa010="111";
unload to "/usr/icbacct/tmp1/fxd.txt" select * from fxd where fxd010="111";
将客户机上的文本拷到单机上,再用如下命令将文本数据装入在单机上的数据库中:$ isql icbdb@acct_qz /usr/icbacct/bin/sh/dbs_hf.sql
这条命令也可以将客户机的文本数据恢复到服务器上的数据库中,当然在单机运行时可以省去"@acct_qz" 。由于表fxd记录比较多,考虑到逻辑日志的承受能力,故将删除与恢复分成两个事务来做,方法是在做完删除操作后就关闭数据库,然后再打开数据库做插入操作 。因为我们已经将参数LTAPEDEV设置成/dev/null,当OnLine在处理一个事务时,如果逻辑日志已满就不会要求备份逻辑日志而是从头开始循环使用 。但在处理一个长事务时,如果逻辑日志已满是不会自动循环的,因为下一个要使用的逻辑日志文件也已被这一事务所占用,此时OnLine将停止响应,即不会提交也不会回滚该事务 。可以用"tbstat -l"命令查看逻辑日志的使用情况 。dbs_hf.sql语句如下:
database icbdb@acct_qz;
begin work;
lock table fxa in exclusive mode;
delete from fxa;
load from "/usr/icbacct/tmp1/fxa.txt" insert into fxa;
commit work;
close database;
database icbdb@acct_qz;
begin work;
lock table fxd in exclusive mode;
delete from fxd;
commit work;
close database;
database icbdb@acct_qz;
begin work;
lock table fxd in exclusive mode;
load from "/usr/icbacct/tmp1/fxd.txt" insert into fxd;
commit work;
close database;
2.5 安装应用程序
直接将客户机上的应用程序拷到单机上,不用任何修改即可运行 。在单机上编写的程序不用任何修改也可在客户机上运行,如上面的aproc程序就可在单机和客户机上运行 。3 应用情况

推荐阅读