让你的应用程序不再对数据库的改动“感冒”(三)

原创 2003年08月22日 09:08:00

原著作者:Jim Czuprynski

 

LBL(Looking Before Leaping)三思而后行<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

前面所述的技术只有在开发前计划一组新的数据库对象或者修正原有的数据库对象时,能够取得很好的效果。但是我总是会发现,当我们在进行这种开发规划的时候,运行中的应用程序往往不可避免地受到中断。换句话说,一个好的计划应该保护现有的应用免受中由于数据库对象改变引起的重编译或者无效导致的中断之苦

明白在使对象有效前会发生什么重大影响

在我开始讲述改变数据库对象之前,要重点强调一点,请务必要仔细检查每一个待改变的数据库对象防止导致无效错误。在过去的几年内,在焦急的开发员和挠人的主管的催促下,我曾经有意或无意地违反了这些建议,通常会导致应用程序执行性能的下降。

下面的代码可以帮助你检查通过重编译哪些对象将会无效。

 

在重编译以后,一定要检查哪些无效的对象。然后还是再检查

很多次,我曾经目睹了这样的情形:UTLRP.SQL重编译器或者第三方的软件没有重编译所有最近无效的对象。至少,这会导致一些问题;在最坏的情况下,除非有人注意到了这一点,应用程序将完全不能存取数据库。

举个例子,不久前我花费了整整90分钟外加一个下午帮助一个程序员调试PowerBuilder程序访问ORACLE开发数据库时遇到的ORA-00942错误"table not found",但是相同的代码却可以在生产数据库上正确运行。当我们在调试程序的时候,这个错误看上去是间歇出现和重现的。

我想起以前遇到过这种情况并且花费了很多时间来折磨我的大脑,最终具有讽刺意味的是罪魁祸首是无效的数据库对象。最终发现是因为另外一个程序员删除并且重建了原来的一个表,但是有一大堆其他的数据库对象引用了这个表,而他却没有重新编译这些对象,导致它们都无效了。

密切提防global temporary tables

最后一个告诫:如果你使用全局临时表(GTTs)来存储和计算状态信息,小心程序改变它会带来的后果。我曾经把进行了一个最平常不过的改动,把GTT的varchar(15)字段改变成varchar(25)。然而这个特殊的GTT通过指定了ON COMMIT PRESERVE ROWS选项,从而可以被一个程序包用来存储每个连接用户的信息。ORACLE顽固地拒绝了ALTER TABLE命令除非我要求所有应用程序的用户都注销,解除了对GTT的冻结之后才行。也许那个命令只需要一小会儿时间,用户注销后也只需要等待一小会儿,但是设想一下如果这种改动要在一个业务高峰时候做的话,这种影响也许会变得非常糟糕。

 

(全文结束)

用java写一个对数组进行冒泡排序法

用java写一个对数组进行冒泡排序法
  • xiaochenxiaoren
  • xiaochenxiaoren
  • 2017年03月13日 13:04
  • 2045

FaceBook第三方登录问题处理

网站配置 创建应用 下载sdk 在Facebook应用页输入自己的工程的唯一标识符,bundle identifi...
  • bendanzexiaohua
  • bendanzexiaohua
  • 2016年09月30日 12:01
  • 2438

关于Android应用程序退至后台,再次启动数据丢失的问题

问题描述: 最近项目中出现了个Bug,打开应用程序按home键退出前台,启动其他的应用,经过一段时间再次启动自己的应用程序,发现界面中出现了数据丢失问题,导致程序出现一系列问题。 发现即使用Sta...
  • u010743397
  • u010743397
  • 2016年04月28日 23:23
  • 4641

让32位应用程序不再为2G内存限制苦恼

最近在做个程序,虽然是小型程序,但是使用的内存量却很大,动辄达到10G。在64位系统上可以轻松实现,无奈我是基于32位的系统进行开发,程序还没跑起来就已经被终止了。      试过很多办法,包括文件内...
  • flyingworm_eley
  • flyingworm_eley
  • 2011年05月14日 21:13
  • 6971

让32位应用程序不再为2G内存限制苦恼

让32位应用程序不再为2G内存限制苦恼 分类: VC++ 2009-09-21 17:57 8303人阅读 评论(6) 收藏 举报 windowswinapitokenser...
  • bjdu_jlxs
  • bjdu_jlxs
  • 2013年09月29日 15:52
  • 825

Java源码——一个简单的数据库应用程序(通讯录)

无数据,不应用。现实生活中的很多系统都离不开数据库,而数据的增删改查则是最基本的功能。 这几天实现了以下个人在技术上的突破: 1. Java程序直连Oracle数据库,而之前的玩法是: a. 直...
  • hpdlzu80100
  • hpdlzu80100
  • 2017年04月20日 00:17
  • 1772

数据库应用程序常见T-SQL和PL/SQL

数据库应用程序常见T-SQL和PL/SQL2007年03月02日 星期五 下午 06:50     许多软件公司都理解开发不依赖于特定数据库 类型(例如,Oracle  , SQL Server ,D...
  • BubbleKitty
  • BubbleKitty
  • 2011年04月25日 13:26
  • 435

数据库应用程序开发入门篇—— 结构化查询语言SQL及常用操作

数据库应用程序开发入门篇—— 结构化查询语言SQL及常用操作 1.什么是SQL 构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设...
  • Hy_Fighting
  • Hy_Fighting
  • 2013年04月12日 14:17
  • 1827

应用程序的数据库从Sql Server迁移到Oracle

应用程序的数据库从Sql Server迁移到Oracle   迁移案例一:数据库: Sql Server 2008到Oracle 9i 工具: Sy...
  • studyvcmfc
  • studyvcmfc
  • 2011年11月06日 22:27
  • 1297

一次.NET Web应用程序安装包的制作经历:Sql数据库安装的3种方式

一次难得的安装包制作经历,因为之前从没有制作过安装包,那就免不了遇到问题,在摸索和学习中获得了不少宝贵经验,在这里我将用图文并茂的形式详细描述一下流程及主要难点问题的解决方法,希望对需要的朋友有所帮助...
  • ffei060828
  • ffei060828
  • 2013年11月10日 22:02
  • 995
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让你的应用程序不再对数据库的改动“感冒”(三)
举报原因:
原因补充:

(最多只允许输入30个字)