|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
为了在某种程序上弥补这一缺陷,许多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之后,还能恢复到之前的某个状态,整库或指定的表。 |
|