集输大队报表数据迁移论文03083107刘骞.docx
- 文档编号:6527732
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:63
- 大小:110.85KB
集输大队报表数据迁移论文03083107刘骞.docx
《集输大队报表数据迁移论文03083107刘骞.docx》由会员分享,可在线阅读,更多相关《集输大队报表数据迁移论文03083107刘骞.docx(63页珍藏版)》请在冰豆网上搜索。
集输大队报表数据迁移论文03083107刘骞
中国石油大学(华东)毕业设计(论文)
集输大队报表数据迁移
学生姓名:
刘骞
学号:
03083107
专业班级:
软件工程03-1班
指导教师:
郑秋梅
2007年6月20日
摘要
随着信息技术的发展,对数据处理提出了越来越多的要求,在异构数据库之间进行数据迁移以及web数据库的建立成为两种常用的的信息处理方式。
本文就Oracle向SQLServer的数据迁移作为一个实例,讨论一种数据迁移模式,即通过源、的数据库之间的“对话”确定要抽取和插入的数据,这是实现数据的定时、自动迁移的基础。
然后建立网上报表系统将迁移到SQLServer中的数据发布到网上供相关用户访问。
本文实例涉及Oracle和SQLServer两大关系型数据库,运用Java实现定时自动迁移模块,JSP+Resin实现报表系统,两个系统都是基于JDBC机制实现的。
在指导老师的帮助下,已经基本上实现了任务书所要求的功能。
关键词:
数据迁移;数据管理;JDBC;Oracle数据库;SQLServer数据库
ABSTRACT
Withthedevelopmentoftheinformationtechnology,thereismoreandmoredemandondataprocessing.Somanykindsofdataprocessingsuchasdatamigrationbetweendatabaseswithdifferentarchitectureorfoundationofon-linedatabasesbecomeverypopular.ThisarticletakesdatamigrationfromOracletoSQLServerasanexampletodiscussamigrationmodewhichdecideswhatdatatoselect-and-insertthrough“talk”betweenthem,andthisisalsothebasicfoundationonwhichtheautomaticandon-timemigrationisbased.AndthenatablemanagementsystemisdevelopedtomakethedatamigratedtoSQLServerisavailableforcertainusers.TheinstanceinthisarticleinvolvesOracleandSQLServer,whicharethetwolarge-scalerelationaldatabases.Andtheautomaticandon-timemigrationmoduleisprogrammedinJavawhilethedataformsystemisbaseonJSPandResin.AndtheyarebothbasedonJDBC(JavaDataBaseConnectivity).Withthehelpoftheteacher,thesystemdesignedcouldeasilymeetthedemandslistedonthetaskbook.
Keywords:
datamigration;datamanagement;JDBC;Oracle;SQLServer
目录
第一章前言1
1.研究的目的及意义1
1.1研究目的1
1.2研究的意义1
2.研究现状1
第二章系统实现技术3
2.1Oracle数据库3
2.1.1Oracle数据库的安装、配置3
2.1.2Oracle数据库的连接3
2.1.3Oracle数据库的查询4
2.2SQLServer数据库5
2.2.1SQLServer数据库的安装、配置5
2.2.2SQLServer数据库的连接5
2.2.3SQLServer数据库的插入6
2.3数据迁移的概念及特点6
2.3.1数据迁移的概念6
2.3.2数据迁移的特点7
2.3.3定时、自动迁移7
2.4数据迁移的实现机制7
2.4.1数据的提取和插入7
2.4.2源、的库间的“对话”7
2.4.3定时器的使用7
第三章需求分析8
3.1用户需求8
3.2系统需求8
3.3数据流图9
3.4总体设计11
3.5开发工具12
3.6运行环境12
第四章系统的详细设计及实现13
4.1系统主要功能模块及实现13
4.2系统开发过程中遇到的关键问题及其解决15
4.3数据库设计17
第五章系统总体评价及改进26
5.1系统总体评价26
5.2系统存在不足及改进27
第六章总结28
6.1主要工作28
6.2心得体会28
致谢30
参考文献31
附录32
第一章前言
1.研究的目的及意义
1.1研究目的
为方便高效地实现油田运作,对各种设备的工作运行情况进行记录,并方便各种用户对大量记录进行各种网络操作,需要实现不同数据库系统间数据的定时、自动迁移(Oracle到SQLServer),并基于SQLServer数据库建立B/S平台,允许注册用户通过网络对数据进行查询。
1.2研究的意义
一方面,随着油田上先进设备的引进,自动化程度的不断提高使得对设备工作情况的记录、检测有了数据量大、分散采集、集中存储的特点。
另一方面,随着信息技术的蓬勃发展,对数据的存储、查询等各种形式的信息处理提出了越来越多的要求,于是许多新技术应运而生。
本课题的意义正是在于综合考虑各种技术的特点,选取最符合应用需求的那些技术,并将其有机地结合成一个整体,从而形成一个功能完整、性能稳健的程序,并证各功能模块的高度独立,提高其可重用性,可维护性。
由于本课题涉及网络和数据库的各种常用功能,因而课题可以作为网络及数据库应用开发的参考模式。
课题中所用到的各种技术都是较为成熟的,但力求在此基础上求精,充份利用各种技术的优点,做到效率与质量并重。
2.研究现状
目前基于网络数据库的管理信息系统较为常见,借助高级开发工具也较容易实现,搭建一个基于网络库的平台的技术已较为成熟。
事实上这样的系统比比皆是,我们登录的任何一个网站都是不同程度的基于这种技术实现的。
但是根据发布的信息量不同,接受信息的对象不同,不同平台所采用的具体技术有很大差别。
当用户需要查询数据库表中的大量数据时,需要选择效率较高的技术来进行各种形式的数据处理。
数据迁移也是现代信息处理中常用的关键技术,由于技术的发展,不同厂家之间的竞争,实现不同的数据库系统间的数据迁移往往却并不容易而且方式多种多样。
简单情形下,只要实现数据的复制,然后用合适的数据库管理系统对其进行组织管理即可;然而大多数情形下各种附加条件的限制,使得数据迁移实现起来颇费周折。
例如不同厂家的数据库系统间进行数据迁移就需要考虑其对表中数据以及查询语句不同格式要求及相应的对策;有些情形下不是要迁移源数据库中的所有数据,而是只需检索出部分数据,进行必需的格式转换后插入目的库,另一种常见情形时,源数据库中大量数据定时更新,而为了保持实时性,必须对源数据库进行检测,如发现其某个表中新添加了数据,则将新添加的数据移入目的数据库相应表中。
第二章系统实现技术
2.1Oracle数据库
2.1.1Oracle数据库的安装、配置
点击setup.exe开始安装后,一路点击“下一步”,直到“下一步”为灰色,上面标题栏显示为“OracleUniversalInstaller:
数据库标识”,这时请需输入“全局数据库名”(SID)继续点击“下一步”,直到“安装”,点击“安装”后开始安装。
安装过程中如果出现“错误:
没有找到文件D:
\oracle\ora92\ocs4j\admin\OCS4J.properties”时,点击“取消”,弹出“取消”对话框后选中“只停止安装该组件”,点击“确定”,安装会继续。
安装到“OracleUniversalInstaller:
配置工具”的“AgentConfigurationAssistant”时,如果报错“ORA-12571:
TNS:
包写入程序失败”,直接点击“确定”。
这步完成时会有个“错误”提示,“确定”就是,然后继续“下一步”,到“OracleUniversalInstaller:
配置工具”,点击“退出”。
Oracle较SQLServer完善、稳健,在Oracle9.0的安装过程中没有太大的问题,只要输入一个数据库名就可以在安装完成后建立一个数据库了(当然安装完成后也可以再建立其他数据库),然后唯一要做的就是配置环境变量,也就是将Oracle的JDBC驱动包classes12.jar包含到classpath中即可。
这个包不需要下载,因为Oracle已经将它放在%oracle%\jdbc\lib\classes12.jar路径下了[1]。
还有就是有时需要再设置一下监听器或重启一下数据库服务。
2.1.2Oracle数据库的连接
如何配置才能使客户端连到Oracle数据库:
要使一个客户端机器能连接Oracle数据库,需要在客户端机器上安装Oracle的客户端软件,唯一的例外就是Java连接数据库的时候,可以用JDBCthin模式,不用装Oracle的客户端软件。
加入你在机器上装了Oracle数据库,就不需要在单独在该机器上安装Oracle客户端了,因为装Oracle数据库的时候会自动安装Oracle客户端[1]。
用过SQLserver数据库然后又用Oracle的新手可能会有这样的疑问:
问什么我用SQLServer的时候不用装SQLServer的客户端呢?
原因很简单,SQLServer也是微软的,它在操作系统中集成了SQLserver客户端,如果微软与Oracle有协议,将Oracle客户端也集成到操作系统中,那我们也就不用在客户端机器装Oracle客户端软机就可访问数据库了,不过,这好像是不可能实现的事情。
也有的人会问:
为什么在SQLserver中没有侦听端口一说,而在Oracle中要配置侦听端口?
其实SQLserver中也有侦听端口,只不过微软将侦听端口固定为1433,不允许你随便改动,这样给你一个错觉感觉SQLserver中没有侦听端口,咳,微软把太多的东西都封装到黑盒子里,方便使用的同时也带来的需要副作用。
而Oracle中的侦听端口直接在配置文件中,允许随便改动,只不过无论怎样改动,要Oracle服务器端设置的侦听端口一致。
迁移和报表系统分别是通过Java和JSP实现的,两者都能够方便地通过JDBC来取得与Oracle数据库的连接[1]。
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Stringurl="jdbcracle:
thinlocalhost:
1521:
facility";
Stringuser="scott";
Stringpassword="tiger";
Connectionconn=DriverManager.getConnection(url,user,password)[2];
2.1.3Oracle数据库的查询
对Oracle的查询是通过预编译的SQL语句实现的,这就保证了与SQLServer之间的“对话”的进行。
通过在查询条件中设置变量,就能够完成动态查询功能。
StringoracleSelect="select*fromSCOTT.TABLEwhereDATE>?
or(DATE=?
andTIME>?
)orderbyDATE,TIME";
PreparedStatementoraclePrepstmt=conn.prepareStatement
(oracleSelect,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
oraclePrepstmt.setDate(1,latelyDate);
oraclePrepstmt.setDate(2,latelyDate);
oraclePrepstmt.setString(3,latelyTime)[2];
2.2SQLServer数据库
2.2.1SQLServer数据库的安装、配置
SQLServer在使用上方便一些,特别是它提供一些功能强大的工具,入导入导出向导等。
SQLServer安装成功后正式使用之前还有几件事要做,
首先是根据所使用的系统下在一个最高版本的补丁(如SP4)安装到系统上,然后还要再下载一个JDBC驱动包同样安装,再设置一下环境变量,即把MicrosoftSQLServer2000DriverforJDBC\lib下的msbase.jar,mssqlserver.jar,msutil.jar包含到classpath中[3]。
2.2.2SQLServer数据库的连接
在通过JDBC连接SQLServer遇到的最大问题是报错:
[Microsoft][SQLServer2000DriverforJDBC]Errorestablishingsocket.原因如下:
1.通过URL连接的时候指定的服务器名称或者服务器地址不正确,这一点可以通过ping来验证。
2.指定的服务器上的SQLServer的服务没有启动,可以通过SQLServer的查询工具来验证这个问题。
3.指定端口错误,SQLServer的默认端口是1433。
4.sqlserver没有提供TCP/IP的服务,可以通过SQLServer的管理工具来查看这个问题。
5.如果系统是windowsXP或者Windows2003,那么SQLServer一定要升级到sp3以上.
解决了上面的问题,就可以顺利地连接SQLServer了,迁移和报表系统分别是通过Java和JSP实现的,两者都能够方便地通过JDBC来取得与SQLServer数据库的连接。
("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
url="jdbc:
microsoft:
sqlserver:
//localhost:
1433;DatabaseName=mydb";
Stringuser="sa";
Stringpassword="";
Connectionconn=DriverManager.getConnection(url,user,password);
2.2.3SQLServer数据库的插入
SQLServer插入也是使用预编译的SQL语句,但由于不同的插入语句变量设置不完全相同,为保证可重用性采用循环自动生成该SQL语句,同样变量赋值也是使用循环自动完成的。
不同类型的数据在异构数据库间迁移时需要分别进行处理[3]。
使用可更新的结果集也可以对数据库进行更新,但向数据库插入记录时会报错,JDBC驱动不支持特定的数据类型,网上关于这个错误的讨论很少,而且都很含糊,所后来放弃了这种方式改用预编译的SQL语句,效率还可以,使用起来也不麻烦。
2.3数据迁移的概念及特点
2.3.1数据迁移的概念
数据迁移是现代信息处理中不可或缺的一种数据操作方式,它与代码迁移的区别在于后者将异地(异构系统)代码迁移至本地以处理本地数据,相反前者是将本地数据以某种方式迁移到异地(异构系统)以供其应用程序操作。
使用存储介质转储、利用导入导出工具、通过网络上传下载数据等很多数据操作都可以归为数据迁移的范畴,狭义的数据迁移主要指数据库之间的数据转移。
2.3.2数据迁移的特点
数据迁移是为了在异地(异构系统)中对数据进行处理,不是数据的简单备份,进行过程中可能需要对源数据进行筛选、格式转换等操作以满足目的系统的需求从而保证迁移的有效性。
本文实例通过基于JDBC的两库对话机制确定要迁移的数据。
JDBC不能直接操作日志文件,但可以通过建表来模拟日志,然后通过JDBC来维护和使用该模拟日志。
也可以通过在各表最后添加一个辅助标志字段来实现该操作。
2.3.3定时、自动迁移
为实现定时迁移,即保证目的系统的实时性要求,需设置定时机制以定时激活迁移进程。
通过源、的数据库的“对话”确定要迁移的数据,这样就保证了有效数据的迁移能够在没有人工干预的情况下自动进行。
二者结合起来就实现了数据的定时、自动迁移。
2.4数据迁移的实现机制
2.4.1数据的提取和插入
由于要实现数据的自动迁移,所以数据的提取和插入都要通过动态SQL语句来完成,该语句中的变量通过循环语句自动设置,语句中的变量列表通过数据库表的元数据类型自动生成。
2.4.2源、的库间的“对话”
先查询一次SQLServer数据库,确定最近一次增加记录发生的时间,再将Oracle中所有晚于这个时间的记录查询出来,然后插入SQLServer中,实现SQLServer向Oracle的“看齐”。
2.4.3定时器的使用
Java系统提供的timer类可以很好的满足本系统的需求,通过在类中安排任务日程,实现多个任务的定时执行,方便程序的调试及功能的增强。
第三章需求分析
3.1用户需求
迁移系统应能够每隔一小时自动地将集输大队11个设备运行记录表中需要迁移的数据从Oracle数据库迁移到SQLServer数据库相应表中,保证数据的实时性要求。
系统应方便用户使用,只要启动系统,在无任何人工干预的情况下,就能够实时、准确地实现数据的自动迁移,从而保证两数据库中数据在一定时间延迟内的一致性。
报表系统应能为系统用户进行分级管理,不同级别的用户具有不同的权限。
管理员具有最多的权限,其次为高级用户,普通用户只能对报表进行查询。
具体说来,报表系统应能为为管理员用户提供用户管理如添加新用户、删除旧用户功能及高级用户具有的所有功能;为高级用户提供集输大队11个设备运行记录表的增、删、改的功能及普通用户具有的所有功能;为普通用户提供集输大队11个设备运行记录表的查询功能。
3.2系统需求
一、迁移系统
迁移系统应能够保证两数据库中数据在一定时间延迟内的一致性。
每次执行应能够成功地取得与数据库的连接,然后实现两库“对话”及SQLServer数据库中的11个设备运行记录表向Oracle数据库中相应的表“看齐”;
迁移系统应能够保证实时性,每个一个小时执行一次,每次执行所需的时间不应超过5秒,即在5秒钟之内将Oracle数据库中新添加的数据迁移至SQLServer数据库中;
系统在一个月内不能出现2次以上故障,当某次迁移失败时,下次执行迁移过程应仍能正常启动;
当某个表的某次迁移过程失败时,系统应能够告知用户该表的迁移过程出现故障,下次执行迁移过程应能对该次失败进行弥补;
系统应使用应使用安全性较好,且操作数据库较方便的Java语言编码实现;
两个数据库都安装了相应的JDBC驱动及所需补丁,并进行了必要的环境配置。
二、报表系统
设置管理员、高级用户、普通用户三种具有不同权限范围的用户;
管理员应能够方便的添加或删除用户;
高级用户、普通用户应能按各自的权限对11个表进行相应的操作,如查询满足某些条件的记录或更新查询结果中某些记录;
用户对系统所要求的操作应能够在10秒之内完成;
用户对系统所要求的操作应能得到系统的正确响应;
对于用户的不合理输入应输出相应的出错信息或不予响应;
系统应基于SQLServer数据库使用JSP和Resin实现;
用户应能对数据库中新添加的表进行操作。
3.3数据流图
系统总体数据流图见图1。
图1顶层数据流图
迁移模块用于将Oracle中的数据迁移到SQLServer中,其数据流图见图2。
图2迁移模块的数据流图
报表模块用于对用户的登录信息进行修改,其数据流图见图3。
图3报表模块的数据流图
3.4总体设计
整个系统包括数据迁移和数据报表两大系统,二者都是通过JDBC机制操作数据库,关键在于动态SQL语句的使用。
一、系统要操作的表
本系统涉及以下11个设备运行记录表:
(1)分离设备运行记录报表,
(2)泵运行记录报表,(3)气体流量计运行记录,(4)污水处理站运行记录,(5)水处理装置运行记录报表,(6)液体流量计运行记录,(7)加热炉运行记录,(8)压缩机运行记录,(9)站加药运行记录,(10)注水站运行记录,(11)储罐运行记录
二、迁移系统设计
迁移系统将上面的11个设备运行记录表中的数据从Oracle迁移到SQLServer。
采用JDBC机制连接数据库,并对数据库进行查询、插入。
系统启动后,在定时器控制下,当定时时间间隔到达后,系统将自动连接数据库,若连接成功则比较两数据库中数据将Oracle中新添加的数据插入SQLServer数据库中。
具体实现为先查询一次SQLServer数据库,确定最近一次增加记录发生的时间,再将Oracle中所有晚于这个时间的记录查询出来,然后插入SQLServer中,实现SQLServer向Oracle的“看齐”。
本系统地实现模式具有一定的实用性和通用性,定时由线程定时器实现,可以保证多个任务并发进行、互不影响。
基于JDBC机制实现的源、的数据库间的“对话”,使得该模式具有较大的灵活性,采用不同的对话,即可实现多种不同的功能。
两者的结合,使得该系统具有了很好的实时性及智能性,保证了自动定时迁移的实现。
三、报表系统设计
报表系统将SQLServer的11个设备运行记录表中的数据发部到网上供用户操作。
由于报表系统是针对特定用户的,而并不是所有网络上的用户都有资格注册成为本系统的合法用户。
所以,我们采用一种基于管理员确认的注册机制。
首先,由想要使用报表系统的人向管理员提出申请,管理员对申请用户的合法性进行验证;验证通过,由管理员将该用户添加进系统,成为系统的合法用户。
新添加的用户可以是普通用户、高级用户或管理员用户。
管理员用户能够进行用户管理,可以将其他用户删除。
3.5开发工具
(1)JDK1.4.2
(2)Resin
(3)EditPlus
3.6运行环境
(1)操作系统:
Windows9X/2000/XP/2003
(2)jdk1.4或更高版本
(3)Web服务器:
Resin3.0或更高版本
(4)客户端浏览器:
IE5.0及以上版本
第四章系统的详细设计及实现
4.1系统主要功能模块及实现
一、迁移系统
1.定时器模块
本模块的主要功能是每个一小时调用一次迁移模块,保证系统的实时性。
基于线程实现的定时器,可以同时为多个并发进行的任务分别设定不同时间间
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大队 报表 数据 迁移 论文 03083107 刘骞
![提示](https://static.bdocx.com/images/bang_tan.gif)