Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104598576
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-05-23 21:50:28

  来源:

数据库系统的设计与开发

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进行应用开发过程中一点心得和体会,写出来与大家共勉,谢谢。

阅读(483) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~