ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

½éÉÜÒ»ÏÂOracle±¯¹ÛËøºÍÀÖ¹ÛËø(Ò»)
2014-11-24 00:58:25 ¡¾´ó ÖРС¡¿ ä¯ÀÀ:2983´Î
Tags£º½éÉÜ Oracle ±¯¹Û ÀÖ¹Û

ΪÁ˵õ½×î´óµÄÐÔÄÜ£¬Ò»°ãÊý¾Ý¿â¶¼Óв¢·¢»úÖÆ£¬²»¹ý´øÀ´µÄÎÊÌâ¾ÍÊÇÊý¾Ý·ÃÎʵijåÍ»¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬´ó¶àÊýÊý¾Ý¿âÓõķ½·¨¾ÍÊÇÊý¾ÝµÄËø¶¨¡£


Êý¾ÝµÄËø¶¨·ÖΪÁ½ÖÖ·½·¨£¬µÚÒ»ÖÖ½Ð×ö±¯¹ÛËø£¬µÚ¶þÖÖ½Ð×öÀÖ¹ÛËø¡£Ê²Ã´½Ð±¯¹ÛËøÄØ£¬±¯¹ÛËø¹ËÃû˼Ò壬¾ÍÊǶÔÊý¾ÝµÄ³åÍ»²ÉÈ¡Ò»ÖÖ±¯¹ÛµÄ̬¶È£¬Ò²¾ÍÊÇ˵¼Ù ÉèÊý¾Ý ¿Ï¶¨»á³åÍ»£¬ËùÒÔÔÚÊý¾Ý¿ªÊ¼¶ÁÈ¡µÄʱºò¾Í°ÑÊý¾ÝËø¶¨×¡¡£¶øÀÖ¹ÛËø¾ÍÊÇÈÏΪÊý¾ÝÒ»°ãÇé¿öϲ»»áÔì³É³åÍ»£¬ËùÒÔÔÚÊý¾Ý½øÐÐÌá½»¸üеÄʱºò£¬²Å»áÕýʽ¶ÔÊý¾ÝµÄ³å Í»Óë·ñ½øÐмì²â£¬Èç¹û·¢ÏÖ³åÍ»ÁË£¬ÔòÈÃÓû§·µ»Ø´íÎóµÄÐÅÏ¢£¬ÈÃÓû§¾ö¶¨ÈçºÎÈ¥×ö¡£


ÏÈ´Ó±¯¹ÛËø¿ªÊ¼Ëµ¡£ÔÚSqlServerµÈÆäÓàºÜ¶àÊý¾Ý¿âÖУ¬Êý¾ÝµÄËø¶¨Í¨³£²ÉÓÃÒ³¼¶ËøµÄ·½Ê½£¬Ò²¾ÍÊÇ˵¶ÔÒ»ÕűíÄÚµÄÊý¾ÝÊÇÒ»ÖÖ´®Ðл¯µÄ¸üвåÈë»ú ÖÆ£¬ÔÚ ÈκÎʱ¼äͬһÕűíÖ»»á²å1ÌõÊý¾Ý£¬±ðµÄÏë²åÈëµÄÊý¾ÝÒªµÈµ½ÕâÒ»ÌõÊý¾Ý²åÍêÒÔºó²ÅÄÜÒÀ´Î²åÈë¡£´øÀ´µÄºó¹û¾ÍÊÇÐÔÄܵĽµµÍ£¬ÔÚ¶àÓû§²¢·¢·ÃÎʵÄʱºò£¬µ±¶ÔÒ»ÕÅ ±í½øÐÐƵ·±²Ù×÷ʱ£¬»á·¢ÏÖÏìӦЧÂʺܵͣ¬Êý¾Ý¿â¾­³£´¦ÓÚÒ»ÖÖ¼ÙËÀ״̬¡£¶øOracleÓõÄÊÇÐм¶Ëø£¬Ö»ÊǶÔÏëËø¶¨µÄÊý¾Ý²Å½øÐÐËø¶¨£¬ÆäÓàµÄÊý¾Ý²»Ïà¸É£¬Ëù ÒÔÔÚ¶ÔOracle±íÖв¢·¢²åÊý¾ÝµÄʱºò£¬»ù±¾Éϲ»»áÓÐÈκÎÓ°Ïì¡£


×¢£º¶ÔÓÚ±¯¹ÛËøÊÇÕë¶Ô²¢·¢µÄ¿ÉÄÜÐԱȽϴ󣬶øÒ»°ãÔÚÎÒÃǵÄÓ¦ÓÃÖÐÓÃÀÖ¹ÛËø×ãÒÔ¡£


OracleµÄ±¯¹ÛËøÐèÒªÀûÓÃÒ»ÌõÏÖÓеÄÁ¬½Ó£¬·Ö³ÉÁ½ÖÖ·½Ê½£¬´ÓSQLÓï¾äµÄÇø±ðÀ´¿´£¬¾ÍÊÇÒ»ÖÖÊÇfor update£¬Ò»ÖÖÊÇfor update nowaitµÄÐÎʽ¡£±ÈÈçÎÒÃÇ¿´Ò»¸öÀý×Ó¡£Ê×ÏȽ¨Á¢²âÊÔÓõÄÊý¾Ý¿â±í¡£


CREATE TABLE TEST(ID,NAME,LOCATION,VALUE,CONSTRAINT test_pk PRIMARY KEY(ID))AS SELECT deptno, dname, loc, 1 FROM scott.dept


ÕâÀïÎÒÃÇÀûÓÃÁËOracleµÄSampleµÄscottÓû§µÄ±í£¬°ÑÊý¾Ýcopyµ½ÎÒÃǵÄtest±íÖС£Ê×ÏÈÎÒÃÇ¿´Ò»ÏÂfor updateËø¶¨·½Ê½¡£Ê×ÏÈÎÒÃÇÖ´ÐÐÈçϵÄselect for updateÓï¾ä¡£


select * from test where id = 10 for update


ͨ¹ýÕâÌõ¼ìË÷Óï¾äËø¶¨ÒÔºó£¬ÔÙ¿ªÁíÍâÒ»¸ösql*plus´°¿Ú½øÐвÙ×÷£¬ÔÙ°ÑÉÏÃæÕâÌõsqlÓï¾äÖ´ÐÐÒ»±ã£¬Äã»á·¢ÏÖsqlplusºÃÏñËÀÔÚÄÇÀïÁË£¬ ºÃÏñ¼ì Ë÷²»µ½Êý¾ÝµÄÑù×Ó£¬µ«ÊÇÒ²²»·µ»ØÈκνá¹û£¬¾ÍÊôÓÚ¿¨ÔÚÄÇÀïµÄ¸Ð¾õ¡£Õâ¸öʱºòÊÇʲôԭÒòÄØ£¬¾ÍÊÇÒ»¿ªÊ¼µÄµÚÒ»¸öSessionÖеÄselect for updateÓï¾ä°ÑÊý¾ÝËø¶¨×¡ÁË¡£ÓÉÓÚÕâÀïËø¶¨µÄ»úÖÆÊÇwaitµÄ״̬(Ö»Òª²»±íʾnowaitÄǾÍÊÇwait)£¬ËùÒÔµÚ¶þ¸öSession(Ò²¾ÍÊÇ¿¨×¡ µÄÄǸösql*plus)Öе±Ç°Õâ¸ö¼ìË÷¾Í´¦Óڵȴý״̬¡£µ±µÚÒ»¸ösession×îºócommit»òÕßrollbackÖ®ºó£¬µÚ¶þ¸ösessionÖеļì Ë÷½á¹û¾ÍÊÇ×Ô¶¯Ìø³öÀ´£¬²¢ÇÒÒ²°ÑÊý¾ÝËø¶¨×¡¡£²»¹ýÈç¹ûÄãµÚ¶þ¸ösessionÖÐÄãµÄ¼ìË÷Óï¾äÈçÏÂËùʾ¡£


select * from test where id = 10


Ò²¾ÍÊÇûÓÐfor updateÕâÖÖËø¶¨Êý¾ÝµÄÓï¾äµÄ»°£¬¾Í²»»áÔì³É×èÈûÁË¡£ÁíÍâÒ»ÖÖÇé¿ö£¬¾ÍÊǵ±Êý¾Ý¿âÊý¾Ý±»Ëø¶¨µÄʱºò£¬Ò²¾ÍÊÇÖ´ÐиղÅfor updateÄÇÌõsqlÒÔºó£¬ÎÒÃÇÔÚÁíÍâÒ»¸ösessionÖÐÖ´ÐÐfor update nowaitºóÓÖÊÇʲôÑùÄØ¡£±ÈÈçÈçϵÄsqlÓï¾ä¡£ ÓÉÓÚÕâÌõÓï¾äÖÐÊÇÖƶ¨²ÉÓÃnowait·½Ê½À´½øÐмìË÷£¬ËùÒÔµ±·¢ÏÖÊý¾Ý±»±ðµÄsessionËø¶¨ÖеÄʱºò£¬¾Í»áѸËÙ·µ»ØORA-00054´íÎó£¬ÄÚÈÝÊÇ×Ê Ô´Õýæ, µ«Ö¸¶¨ÒÔ NOWAIT ·½Ê½»ñÈ¡×ÊÔ´¡£ËùÒÔÔÚ³ÌÐòÖÐÎÒÃÇ¿ÉÒÔ²ÉÓÃnowait·½Ê½Ñ¸ËÙÅжϵ±Ç°Êý¾ÝÊÇ·ñ±»Ëø¶¨ÖУ¬Èç¹ûËø¶¨ÖеĻ°£¬¾ÍÒª²ÉÈ¡ÏàÓ¦µÄÒµÎñ´ëÊ©½øÐд¦Àí¡£


select * from test where id = 10 for update nowait


ÄÇÕâÀïÁíÍâÒ»¸öÎÊÌ⣬¾ÍÊǵ±ÎÒÃÇËø¶¨×¡Êý¾ÝµÄʱºò£¬ÎÒÃǶÔÊý¾Ý½øÐиüкÍɾ³ýµÄ»°»áÊÇʲôÑùÄØ¡£±ÈÈçͬÑù£¬ÎÒÃÇÈõÚÒ»¸öSessionËø¶¨×¡id=10µÄÄÇÌõÊý¾Ý£¬ÎÒÃÇÔÚµÚ¶þ¸ösessionÖÐÖ´ÐÐÈçÏÂÓï¾ä¡£


update test set value=2 where id = 10


Õâ¸öʱºòÎÒÃÇ·¢ÏÖupdateÓï¾ä¾ÍºÃÏñselect for updateÓï¾äÒ»ÑùҲͣס¿¨ÔÚÕâÀµ±ÄãµÚÒ»¸ösession·Å¿ªËø¶¨ÒÔºóupdate²ÅÄÜÕý³£ÔËÐС£µ±ÄãupdateÔËÐкó£¬Êý¾ÝÓÖ±»Äãupdate Óï¾äËø¶¨×¡ÁË£¬Õâ¸öʱºòÖ»ÒªÄãupdateºó»¹Ã»ÓÐcommit£¬±ðµÄsessionÕÕÑù²»ÄܶÔÊý¾Ý½øÐÐËø¶¨¸üеȵȡ£


×ÜÖ®£¬OracleÖеı¯¹ÛËø¾ÍÊÇÀûÓÃOracleµÄConnection¶ÔÊý¾Ý½øÐÐËø¶¨¡£ÔÚOracleÖУ¬ÓÃÕâÖÖÐм¶Ëø´øÀ´µÄÐÔÄÜËðʧÊǺÜС µÄ£¬Ö»ÊÇ Òª×¢Òâ³ÌÐòÂß¼­£¬²»Òª¸øÄãÒ»²»Ð¡Ðĸã³ÉËÀËøÁ˾ͺ᣶øÇÒÓÉÓÚÊý¾ÝµÄ¼°Ê±Ëø¶¨£¬ÔÚÊý¾ÝÌύʱºò¾Í²»ºô³öÏÖ³åÍ»£¬¿ÉÒÔÊ¡È¥ºÜ¶àÄÕÈ˵ÄÊý¾Ý³åÍ»´¦Àí¡£È±µã¾ÍÊÇÄã ±ØÐëҪʼÖÕÓÐÒ»ÌõÊý¾Ý¿âÁ¬½Ó£¬¾ÍÊÇ˵ÔÚÕû¸öËø¶¨µ½×îºó·Å¿ªËøµÄ¹ý³ÌÖУ¬ÄãµÄÊý¾Ý¿âÁª½ÓҪʼÖÕ±£³Öס¡£Ó뱯¹ÛËøÏà¶ÔµÄ£¬ÎÒÃÇÓÐÁËÀÖ¹ÛËø¡£ÀÖ¹ÛËøÒ»¿ªÊ¼Ò²Ëµ ÁË£¬¾ÍÊÇÒ»¿ªÊ¼¼ÙÉè²»»áÔì³ÉÊý¾Ý³åÍ»£¬ÔÚ×îºóÌá½»µÄʱºòÔÙ½øÐÐÊý¾Ý³åÍ»¼ì²â¡£ÔÚÀÖ¹ÛËøÖУ¬ÎÒÃÇÓÐ3ÖÖ


³£ÓõÄ×ö·¨À´ÊµÏÖ¡£


[1]µÚÒ»ÖÖ¾ÍÊÇÔÚÊý¾ÝÈ¡µÃµÄʱºò°ÑÕû¸öÊý¾Ý¶¼copyµ½Ó¦ÓÃÖУ¬ÔÚ½øÐÐÌá½»µÄʱºò±È¶Ôµ±Ç°Êý¾Ý¿âÖеÄÊý¾ÝºÍ¿ªÊ¼µÄʱºò¸üÐÂÇ°È¡µÃµÄÊý¾Ý¡£µ±·¢ÏÖÁ½¸öÊý¾ÝһģһÑùÒԺ󣬾ͱíʾûÓгåÍ»¿ÉÒÔÌá½»£¬·ñÔòÔòÊDz¢·¢³åÍ»£¬ÐèҪȥÓÃÒµÎñÂß¼­½øÐнâ¾ö¡£


[2]µÚ¶þÖÖÀÖ¹ÛËøµÄ×ö·¨¾ÍÊDzÉÓð汾´Á£¬Õâ¸öÔÚHibernateÖеõ½ÁËʹÓᣲÉÓð汾´ÁµÄ»°£¬Ê×ÏÈÐèÒªÔÚÄãÓÐÀÖ¹ÛËøµÄÊý¾Ý¿âtableÉϽ¨Á¢ Ò»¸öРµÄcolumn£¬±ÈÈçΪnumberÐÍ£¬µ±ÄãÊý¾Ýÿ¸üÐÂÒ»´ÎµÄʱºò£¬°æ±¾Êý¾Í»áÍùÉÏÔö¼Ó1¡£±ÈÈçͬÑùÓÐ2¸ösessionͬÑù¶ÔijÌõÊý¾Ý½øÐвÙ×÷¡£Á½Õ߶¼ È¡µ½µ±Ç°µÄÊý¾ÝµÄ°æ±¾ºÅΪ1£¬µ±µÚÒ»¸ösession½øÐÐÊý¾Ý¸üкó£¬ÔÚÌá½»µÄʱºò²é¿´µ½µ±Ç°Êý¾ÝµÄ°æ±¾»¹Îª1£¬ºÍ×Ô¼ºÒ»¿ªÊ¼È¡µ½µÄ°æ±¾Ïàͬ¡£¾ÍÕýʽÌá ½»£¬È»ºó°Ñ°æ±¾ºÅÔö¼Ó1£¬Õâ¸öʱºòµ±Ç°Êý¾ÝµÄ°æ±¾Îª2¡£µ±µÚ¶þ¸ösessionÒ²¸üÐÂÁËÊý¾ÝÌá½»µÄʱºò£¬·¢ÏÖÊý¾Ý¿âÖа汾Ϊ2£¬ºÍÒ»¿ªÊ¼Õâ¸ö sessionÈ¡µ½µÄ°æ±¾ºÅ²»Ò»Ö£¬¾ÍÖªµÀ±ðÈ˸üйý´ËÌõÊý¾Ý£¬Õâ¸ö


ʱºòÔÙ½øÐÐÒµÎñ´¦Àí£¬±ÈÈçÕû¸öTransaction¶¼RollbackµÈµÈ²Ù×÷¡£ÔÚÓð汾´ÁµÄʱºò£¬¿ÉÒÔÔÚÓ¦ÓóÌÐò²àʹÓð汾´ÁµÄÑéÖ¤£¬Ò²¿ÉÒÔÔÚ Êý¾Ý¿â ²à²ÉÓÃTrigger(´¥·¢Æ÷)À´½øÐÐÑéÖ¤¡£²»¹ýÊý¾Ý¿âµÄTriggerµÄÐÔÄÜ¿ªÏú»¹ÊDZȽϵĴó£¬ËùÒÔÄÜÔÚÓ¦Óòà½øÐÐÑéÖ¤µÄ»°»¹ÊÇÍƼö²»Óà Trigger¡£


[3]µÚÈýÖÖ×ö·¨ºÍµÚ¶þÖÖ×ö·¨ÓеãÀàËÆ£¬¾ÍÊÇÒ²ÐÂÔöÒ»¸öTableµÄColumn£¬²»¹ýÕâ´ÎÕâ¸öcolumnÊDzÉÓÃtimestampÐÍ£¬´æ´¢Êý¾Ý ×îºó¸ü еÄʱ¼ä¡£ÔÚOracle9iÒÔºó¿ÉÒÔ²ÉÓÃеÄÊý¾ÝÀàÐÍ£¬Ò²¾ÍÊÇtimestamp with time zoneÀàÐÍÀ´×öʱ¼ä´Á¡£ÕâÖÖTimestampµÄÊý¾Ý¾«¶ÈÔÚOracleµÄʱ¼äÀàÐÍÖÐÊÇ×î¸ßµÄ£¬¾«È·µ½Î¢Ãë(»¹Ã»Óëµ½ÄÉÃëµÄ¼¶±ð)£¬Ò»°ãÀ´Ëµ£¬¼ÓÉÏÊý¾Ý ¿â´¦Àíʱ¼äºÍÈ˵Ä˼¿¼¶¯×÷ʱ¼ä£¬Î¢Ã뼶±ðÊǷdz£·Ç³£¹»ÁË£¬ÆäʵֻҪ¾«È·µ½ºÁÃëÉõÖÁÃ붼Ӧ¸ÃûÓÐʲôÎÊÌâ¡£ºÍ¸Õ²ÅµÄ°æ±¾´ÁÀàËÆ£¬Ò²ÊÇÔÚ¸üÐÂÌá½»µÄʱºò¼ì²éµ± Ç°Êý¾Ý¿âÖÐÊý¾ÝµÄʱ¼ä´ÁºÍ×Ô¼º¸üÐÂÇ°È¡µ½µÄʱ¼ä´Á½øÐжԱȣ¬Èç¹ûÒ»ÖÂÔòOK£¬·ñÔò¾ÍÊÇ°æ±¾³åÍ»¡£Èç¹û²»Ïë°Ñ´úÂëдÔÚ

Ê×Ò³ ÉÏÒ»Ò³ 1 2 ÏÂÒ»Ò³ βҳ 1/2/2
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
ÉÏһƪ£º½éÉÜÒ»ÏÂCVSµÄÓ÷¨£¿ ÏÂһƪ£ºÉîÛÚÓÐȤÍøÂç±ÊÊÔÌâÃæÊÔÌâ

×îÐÂÎÄÕÂ

ÈÈÃÅÎÄÕÂ

Hot ÎÄÕÂ

Python

C ÓïÑÔ

C++»ù´¡

´óÊý¾Ý»ù´¡

linux±à³Ì»ù´¡

C/C++ÃæÊÔÌâÄ¿