MSSQL网页编程之让你的使用程序不再对数据库的修改“感...
为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。程序|数据|数据库原著JimCzuprynski
LBL(LookingBeforeLeaping)三思尔后行
后面所述的手艺只要在开辟前企图一组新的数据库工具大概修改原本的数据库工具时,可以获得很好的效果。可是我老是会发明,当我们在举行这类开辟计划的时分,运转中的使用程序常常不成制止地遭到中止。换句话说,一个好的企图应当回护现有的使用免受中因为数据库工具改动引发的重编译大概有效招致的中止之苦。
分明在使工具无效前会产生甚么严重影响
在我入手下手报告改动数据库工具之前,要重点夸大一点,请务需要细心反省每个待改动的数据库工具避免招致有效毛病。在已往的几年内,在焦心的开辟员和挠人的主管的敦促下,我已经成心或偶然地违背了这些倡议,一般会招致使用程序实行功能的下落。
上面的代码能够匡助你反省经由过程重编译哪些工具将会有效。
SQL>SETWRAPOFF
SQL>TTITLECENTER"ParentandDependentObjects"
SQL>BREAKONpar_typSKIP1ONpar_stsSKIP1ONpar_objSKIP1NODUPLICATES
SQL>COLUMNpar_typFORMATA12HEADING"Type"
SQL>COLUMNpar_stsFORMATA08HEADING"Status"
SQL>COLUMNpar_objFORMATA16HEADING"Parent"
SQL>COLUMNdep_objFORMATA16HEADING"Child"
SQL>COLUMNdep_typFORMATA12HEADING"Type"
SQL>COLUMNdep_stsFORMATA08HEADING"Status"
SQL>SELECT
2O1.object_typepar_typ,
3O1.statuspar_sts,
4O1.object_namepar_obj,
5O2.object_namedep_obj,
6O2.object_typedep_typ,
7O2.statusdep_sts
8FROM
9public_dependencyPD,
10all_objectsO1,
11all_objectsO2
12WHEREPD.referenced_object_id=O1.object_id
13ANDPD.object_id=O2.object_id
14ANDO1.object_name=EMPLOYEES
15ORDERBYpar_obj;
ParentandDependentObjects
TypeStatusParentChildTypeStatus
------------------------------------------------------------------------
TABLEVALIDEMPLOYEESPKG_SECURITYPACKAGEBODYINVALID
BV_EMPLOYEESVIEWVALID
EMP_DETAILS_VIEWVIEWVALID
PKG_SECURITYPACKAGEBODYVALID
SECURE_EMPLOYEESTRIGGERVALID
UPDATE_JOB_HISTOTRIGGERVALID
6rowsselected.
在重编译今后,必定要反省哪些有效的工具。然后仍是再反省
良多次,我已经目击了如许的情况:UTLRP.SQL重编译器大概第三方的软件没有重编译一切比来有效的工具。最少,这会招致一些成绩;在最坏的情形下,除非有人注重到了这一点,使用程序将完整不克不及存取数据库。
举个例子,不久前我消费了整整90分钟外加一个下战书匡助一个程序员调试PowerBuilder程序会见ORACLE开辟数据库时碰到的ORA-00942毛病"tablenotfound",可是不异的代码却能够在临盆数据库上准确运转。当我们在调试程序的时分,这个毛病看上往是间歇呈现和重现的。
我想起之前碰到过这类情形而且消费了良多工夫来熬煎我的年夜脑,终极具有取笑意味的是祸首罪魁是有效的数据库工具。终极发明是由于别的一个程序员删除而且重修了本来的一个表,可是有一年夜堆其他的数据库工具援用了这个表,而他却没有从头编译这些工具,招致它们都有效了。
亲切防备globaltemporarytables
最初一个劝诫:假如你利用全局一时表(GTTs)来存储和盘算形态信息,当心程序改动它会带来的成果。我已经把举行了一个最寻常不外的修改,把GTT的varchar(15)字段改动成varchar(25)。但是这个特别的GTT经由过程指定了ONCOMMITPRESERVEROWS选项,从而能够被一个程序包用来存储每一个毗连用户的信息。ORACLE固执地回绝了ALTERTABLE命令除非我请求一切使用程序的用户都刊出,排除了对GTT的解冻以后才行。大概谁人命令只必要一小会儿工夫,用户刊出后也只必要守候一小会儿,可是假想一下假如这类修改要在一个营业岑岭时分做的话,这类影响大概会变得十分糟。
(全文停止)
闪回的目的是要让数据库在commit之后,还能恢复到之前的某个状态,整库或指定的表。 不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理? 如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。 所以你总能得到相应的升级版本,来满足你的需求。 我们学到了什么?思考问题的时候从表的角度来思考问 外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。 如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。 如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。 可以动态传入参数,省却了动态SQL的拼写。
页:
[1]