数据库应用系统的设计与开发
1、应用设计
不论使用何种工具或语言来开发应用程序,都需要进行应用的全面设计。应用设计包括:
首先,分析应用要完成的功能,确定应用类型,是OLTP(联机事务处理)系统、DSS(决策支持)系统还是批处理系统;
其次,了解应用在何时由谁使用、应用访问的数据、应用程序用到的组件、应用被要求的响应时间等,在设计前,必须对这些问题尽量进行解答,这对应用设计特别是大规模的应用设计非常重要;
第三,根据上面的资料,确定应用的体系结构,是采用client/server两层架构的方式,还是采用browser/server多层架构的方式实现一个开放的分布式应用系统,如何对应用服务器进行选择与配置;
第四,将应用按功能划分为一个或多个应用程序,明确应用程序的具体功能、类型、组成,使用时间及高峰时间、事务的流量、用户组成、访问的数据库对象等,确定应用程序间的关联和互操作特性,对各个应用程序的执行时间合理地进行安排;
第五,对应用程序进行模块化设计,选择实现应用的数据库组件和开发语言及工具。
2、应用开发
在应用开发阶段,根据应用的不同,实现的方法和步骤会有很大的差异。这里只讨论以下在应用开发中需要重点注意的几个问题。
1) 在开发会话关键型应用程序时,尽可能使用Pro*C/C++或OCI。在编写后备实例和数据库失败恢复等需要进行数据库重新连接的代码时,用Pro*C/C++ 或OCI比用PL/SQL要容易实现,在Oracle8/8i中,OCI可以实现透明应用程序失败恢复(TAF)。编写数据库操作繁重的应用程序,使用OCI,OCI程序对数据库的访问是通过调用OCI库函数实现的,能够直接到达系统内核,比Pro*C/C++速度更快。
2) 在开发会话关键型应用程序时,尽量实现失败检查和恢复能力,如指定后备数据库或实例、终止出错客户进程等。
3) 编写代码时,要考虑应用程序的可维护性,尽量将应用程序独立于数据库的变化。可使用视图、相对变量类型定义(%TYPE)、记录型变量定义(%ROWTYPE),采用表驱动的应用程序设计模式。
4) 进行充分的单元测试和模块测试,为应用集成打下坚实的基础。
5) 对关键表操作的应用程序实现要特别当心,必要的话,在应用中对关键表先做备份,应用成功执行后再删除备份表。
6) 编码结束后,应对代码进行优化。前面提到过,代码优化在数据库应用中非常重要,很高比例的性能问题与编码拙劣的应用程序有关。
7) 定期对应用操作的数据库对象增长的情况进行监控,避免因空间不足引起的应用程序的失败。
8) 对应用的数据定时进行整理。有些应用中,存放在数据库表中的数据只要求保存一段时间,就需要定时对数据进行删除。如果手工进行删除操作,工作量很大,可以用Oracle提供的作业来完成, unix系统下可用cron进程来实现。笔者在工作中经常使用cron来做数据的定
时删除,根据应用要求,编制Pro*C/C++程序,编写Shell脚本调用应用程序,将Shell脚本提交给cron进程。
注意:在Shell脚本中必须设置相应的Oracle环境变量,如ORACLE_BASE、ORACLE_HOME、NLS_LANG、LD_LIBRARY_PATH、PATH等,用户环境文件中的定义是无效的。
9)对于大量删除操作的应用程序,如果表是分区存放的,可对数据分区执行截断(truncate)操作,截断操作执行速度快并且不会产生碎片,但截断后可能需要进行重建索引的工作。对大量的数据做删除(delete)操作,会引起数据库回滚段的急剧增长,建议根据删除
数据量为这类应用创建特殊的专用回滚段,为专用回滚段指定合适的storage参数。平常,专用回滚段可以是离线的(offline),在事物开始前,使专用回滚段在线(online),指定事物使用专用回滚段,事物结束后再使专用回滚段离线,笔者使用的部分代码 (Pro*C/C++) 如下所示。
.. EXEC SQL WHENEVER SQLERROR goto Error; EXEC SQL CONNECT :uid; .. EXEC SQL ALTER ROLLBACK SEGMENT RBS_SPEC ONLINE; EXEC SQL SET TRANSACTION USE ROLLBACK SEGMENT RBS_SPEC; .. EXEC SQL DELETE FROM .. WHERE ..; EXEC SQL ALTER ROLLBACK SEGMENT RBS_SPEC OFFLINE; .. |
结束语 Oracle数据库是一个功能强大的数据库系统,适用于各种各样的应用系统,系统规模可大可小,应用设计或简单或复杂,因此在使用过程中要根据各自不同的应用进行设置与调整,以上是笔者在使用Oracle进行应用开发过程中一点心得和体会,写出来与大家共勉,谢谢。
查看本文来源