sybase数据库:PB/Sybase系统开发中的数据库转移

  摘要:针对在大型MIS系统中经常遇到将种数据库原始数据转移到服务器数据库进行处理问题将本地磁盘上Foxbase数据库数据转移到Sybase 11数据库服务器为例提出了几种有效思路方法并对各种思路方法优缺点作了介绍说明和比较

  关键词:客户机/服务器 ODBC Pipeline 系统表  在大型MIS系统中大多是采用客户机/服务器(C/S)网络体系结构在该系统中数据集中存储在服务器数据库中开发新MIS系统时候数据采集和录入是个重要部分以电信计费系统为例主要有以下几个方面:

  1)原始数据分拣处理处理对象主要是磁盘、磁带或者光盘 2进制数据

  2)以往系统中档案数据和参数数据转移处理以减少用户输入量和人工输入所带来处理对象主要是Foxbase、Access等数据库文件

  3)信息台或者其它部门送来以Foxbase、Access等文件存储费用文件如168信息台送来费用数据等

  本文中将结合PowerBuilder/Sybase系统开发例子重点介绍2)3)两种情况处理过程(即完成本地数据库文件向服务器数据库中转移)中所采取几种方式以及各种方式具体设计思路方法介绍说明了每种思路方法普遍性和针对性并对其优缺点作了比较

  1、利用importfile ( )实现转移

  PowerBuilder是种进行C/S系统开发优秀前端工具本身提供了大量功能和其中DataWindow数据窗口是其重要组成部分具有强大功能其中importfile( )能够完成数据转移

  实现过程是在服务器上创建个同磁盘上数据库结构相同创建个数据窗口对象(dw_fox)取数据源建立数据窗口利用数据窗口对象本身importfile( )将数据转移到数据窗口中利用update( )将数据保存到服务器上所建表中:

  dw_fox. importfi1e (cipan_file_name)

  dw_fox. Update ( )

  其中cipan_file_name为磁盘上文件及其路径名称该处理简单但是缺乏灵活性对在服务器数据库中建立结构有比较高要求保证严格致性但可以作相应处理将有效数据处理后转移到自己建表中

  2、利用ODBC连接实现转移

  ODBC是种标准应用接口(API)最早由Microsoft Windows系统实现它允许个应用同时连接多个数据源它使用标准SQL语句作为其数据查询语句在处理过程中先通过ODBC画板静态地建立个ODBC连接磁盘上Foxbase数据库编程中创建个本地事务对象连接本地数据库通过处理后将有效数据送到服务器上事先设计个和Foxbase数据库相类似表中保存有效数据就可以了在实际处理过程中各个地方磁盘文件名是区别这样所连接数据库文件名和目录都是变化那么在设计时候就不能够实现将ODBC接口固定设计出来在处理时候般有两种方式前端作处理即按照系统要求目录和文件名称进行拷贝为了使应用有更好适应性我们没有采取这种方式而是另外种方式采取动态建立ODBC连接方式

  在PowerBuilderODBC连接中需要几个重要参数在利用ODBC事先建立个连接FoxBASE数据库后(如Foxbase)查看pb.ini文件时将有如下记录:

  [PROFILE Foxtran]
DBMS=ODBC
.......
DbParm=Connect='DSN=FoxBASE'
Prompt=0
AutoCommit=0
  同样打开注册器在HKEY_CURRENT_USER Software\ODBC\ODBC.INI下将会发现已经注册FoxBASE主键这些给我们动态地建立ODBC连接提供了重要资料

  在具体设置中利用PowerBuilder提供注册个ODBC连接然后创建个事务对象连接本地(磁盘)数据库作相应处理后将所需要数据送到服务器上具体操作如下:

  RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI
 \FoxBASE", "Default Dir", reg!, file_path)
             //设置FoxBASE主键
Transaction Foxtran
Foxtran=create Transaction //下面是
Foxtran.DBMS="ODBC"
Foxtran.DBParm="Connect='DSN=FoxBASE'"
connect using Foxtran;
  其中FoxBASE是注册ODBC名称Foxtran是事务对象管理中创建用以连接Foxbase数据库新事务然后对事务对象进行file_path是磁盘数据库所在路径名称(可根据用户输入文件路径和文件名分析后取得)利用动态创建ODBC连接同样可以同时连接其它本地数据库如Access或者Sybase SQL anywhere等具有灵活性

  3、利用数据管道实现转移

  PowerBuilder数据管道对象是在开发(利用Data Pipeline画板来完成)和运行(动态生成)当中传输数据和数据结构种有效方案这些数据库可以是相同DBMS或区别DBMS数据传输可以是插入张完整数据表或者表部分及其数据也可以是更新已有表数据转换时几个重要选项是:源数据库目标数据库移动数据出来源表数据将移到所要完成管道操作等下面以在运行中使用为例来加以介绍说明其处理过程

  (1)建立管道对象(Pipe_copy_convert)然后建立个管道类型标准类用户对象u_pipeline和个数据窗口dw_pipe_errors在运行过程中创建用户对象例子对它属性进行赋值:iu_pipeline=create u_pipelineiu_pipeline.DataObject="pipe_copy_convert"

  (2)创建连接源数据库和目标数据库事务对象化连接事务对象(同上)

  Transaction Tran_sourse, Tran_dest
Tran_sourse=create Transaction
Tran_dest=create Transaction
...... //


  (3)运行数据管道及后续处理

  利用start()完成后捕捉到后进行相应处理利用cancel()终止数据管道执行

  iu_pipeline.start (tran_sourse, tran_dest, dw_pipe_errors)
...... //处理
iu_pipeline.cancel()


  利用数据管道能够比较快速、直接将本地数据库(包括表整个结构或者部分以及数据)转移到服务器数据库并保存在个表中在转移用户原始档案资料时候多采取这种思路方法

  4、分析本地库系统实现转移

  在进行数据转换过程中由于各种数据结构都是不以电信计费信息费为例区别地区信息台使用软件Software区别数据字段几乎都是不实际处理中也不是每个字段数据都有意义或者都需要转换到服务器数据库中用户往往要求根据自己需要来选择字段、计算方式以及每列约束条件(如有些项目有最大值限制等)利用以上思路方法来处理就有些困难在实际处理中我们考虑分析本地数据库系统表来得到本地数据库结构将数据库中各个字段呈现在用户面前用户作出选择后加入条件再进行处理将利用动态SQL语句生成个满足条件这样就要求用户能够通过系统来了解磁盘数据库内容分析本地库系统表后将得到较为满意结果

  在利用ODBC连接到本地库后发现并分析了几个系统表( table)其中有个表是Pbcatcol中记录着用户数据库结构其中部分如表1所示(如果表为ADDRESS (ID, Name, Address, Phone))

  表 1

pbc_tnam pbc tid pbc ownr pbc cnam
ADDRESS   Public ID
ADDRESS   Public Name
ADDRESS   Public Address
ADDRESS   Public Phone

  其中:pbc_tnam记录是用户数据库表名(Table name) (在Foxbase中个表就是个数据库)pbc_cnam记录是用户数据库列名(Column name)

  根据用户输入文件名称取消后缀即可得到数据库表名定义个光标即可取得用户数据库列名将数据库展示在用户面前用户根据需要选择后再作处理

  DECLARE My_Cursor CURSOR FOR
SELECT pbcatcol.pbc_cnam
FROM pbcatcol
......


  利用分析系统表来得到用户数据库结构是个比较有效思路方法它能够对未知数据库结构有个清晰认识而不需要事先知道它结构但是它仍然有个问题就是通过分析系统表不能得到用户数据库数据类型在转换到服务器数据库时候要借助用户输入才能够确定即提供用户必须选择项目来确定某个字段数据类型能够比较好地完成数据转换具有相当大灵活性并不要关心用户数据库类型可以广泛地使用于各种类型数据库(FoxbaseAccess等)

  5、分析服务器系统实现转移

  要确定个数据库结构只要确定用户数据库字段名和数据类型就可以了利用分析本地库系统表方式可以得到数据库字段名但是用户数据库字段数据类型仍然无法获得通过分析Sybase服务器数据库系统表可以得到服务器数据库中字段名和数据类型在设计时候考虑采取两种思路方法相结合办法先利用(数据管道)Pipeline将用户本地数据库完整地转换到服务器数据库中个表然后通过分析服务器上系统表:PbcatcolSyscolumnsSystypes其中Pbcatcol表中同前面样记录着用户表表名和字段名等Syscolumns中记录着数据库中所有表字段名(Name)、字段数据类型(Type)、字段长度(Length)和精确度(PrecScale)等将 3个表关联后可从中取得从磁盘上转换到服务器上完整结构(可以通过定义光标或者直接利用数据窗口方式完成具体设计)

  SELECT syscolumns.name, systypes.name
FROM pbcatcol, syscolumns, systypes, length
WHERE (syscolumns.type=systypes.type)
  and (pbcatcol.pbc_cnam=syscolumns.name)
  and ((pbcatcol.pbc_tnam= 'Address'));


  6、分析数据库文件实现转移

  利用数据管道和分析服务器系统表相结合思路方法能够比较完整解决数据转换问题但仍然要将本地数据库完整转换到服务器上增加了服务器负担占据了存储空间设计中我们试用了另种思路方法通过分析本地数据库本身结构希望有所收获利用Visual C以 2进制方式将数据库文件打开(此种思路方法只对Foxbase文件进行了分析)发现如图1所示结构文件存储方式是表头和数据两个部分表头以十 6进制0D结尾其表头规律是:第个32个字节是文件头;从第 2个32个字节后是第个字段名和数据类型;第 3个32字节开始又是第 2个字段名和数据类型以此类推直到0D结束其结构如表2所示不足部分添十 6进制00其中数据类型是简写:C-CharD-DateL-LogicalN-NumericM-MemoG-Genera1

字段名(1~11) 数据类型

  (12~32)
11个字节

  (最多) 个字节

  于是用PowerBuilder提供文件处理FileOpen()FileSeek()FileRead()FileClose()等可以分析Foxbase数据库文件得到本地数据库字段和数据类型对各种字段长度可以让用户来设定或者系统按照最大和系统要求来设定在服务器数据库上来产生相应利用动态数据窗口(Datawindow)可以显示本地库数据和处理结果

  7、结束语

  对于完成数据转移有很多种思路方法在实际处理过程中要根据用户需求和系统设计等各个方面来考虑其目是要设计过程简单而且要满足用户需要要求有较高适应性和灵活性以减少后期维护工作本文上述6种思路方法均在系统设计过程中得以实现取得了较好效果

Tags:  sybase数据库恢复 sybase数据库工具 sybase的数据库 sybase数据库

延伸阅读

最新评论

发表评论