??xml version="1.0" encoding="utf-8" standalone="yes"?>国产欧美日韩精品一区二区免费,欧美一区二区视频观看视频,欧美性猛交xxxx免费看漫画http://www.aygfsteel.com/Todd/category/41637.htmlzh-cnTue, 24 Jul 2012 20:37:25 GMTTue, 24 Jul 2012 20:37:25 GMT60【oracle】高q发量表更新注意?/title><link>http://www.aygfsteel.com/Todd/archive/2012/07/25/383896.html</link><dc:creator>Todd</dc:creator><author>Todd</author><pubDate>Tue, 24 Jul 2012 18:29:00 GMT</pubDate><guid>http://www.aygfsteel.com/Todd/archive/2012/07/25/383896.html</guid><wfw:comment>http://www.aygfsteel.com/Todd/comments/383896.html</wfw:comment><comments>http://www.aygfsteel.com/Todd/archive/2012/07/25/383896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Todd/comments/commentRss/383896.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Todd/services/trackbacks/383896.html</trackback:ping><description><![CDATA[Ud一个业务高q发Q接入一个客L话就发一个特D邀LQ码为字W加数字LQ无规律Q,码已存表Q业务上?码和用户手机L一一对应Q?br /> 所以,来个用户得Ҏ标记的码更新手机LQ高q发Ӟ行锁及等待比较耗时Q导致数据库性能下降严重Q?br /> 解决办法Q?br /> 码表增加seqid,字段Q导入数据时使用rownum,做该字段?建烦引;<br /> 更新Ӟ使用序列Q? <div></div> <div>CREATE SEQUENCE SQ_U_SEQ INCREMENT BY 1 START WITH 1 MAXVALUE 50000000 CYCLE CACHE 2000 NOORDER;<br /> 更新则:update ... where ... and t.seqid = SQ_U_SEQ.nextval ...;<br /> 以后有新的数据要导入Q则序列需重置Q则Q?/div> <div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">create</span> <span style="color: #808080; ">or</span> <span style="color: #FF00FF; ">replace</span> <span style="color: #0000FF; ">procedure</span> seq_reset(v_seqname <span style="font-weight: bold; ">varchar2</span>) <span style="color: #0000FF; ">as</span> n <span style="font-weight: bold; ">number</span>(<span style="color: #800000; font-weight: bold; ">10</span>);<br /> tsql <span style="font-weight: bold; ">varchar2</span>(<span style="color: #800000; font-weight: bold; ">100</span>);<br />  <span style="color: #0000FF; ">begin</span><br />  <span style="color: #0000FF; ">execute</span> immediate <span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">select </span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span>v_seqname<span style="color: #808080; ">||</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">.nextval from dual</span><span style="color: #FF0000; ">'</span> <span style="color: #0000FF; ">into</span> n;<br />   n:<span style="color: #808080; ">=-</span>(n<span style="color: #808080; ">-</span><span style="color: #800000; font-weight: bold; ">1</span>);<br />   tsql:<span style="color: #808080; ">=</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">alter sequence </span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span>v_seqname<span style="color: #808080; ">||</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; "> increment by </span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span> n;<br />   <span style="color: #0000FF; ">execute</span> immediate tsql;<br />  <span style="color: #0000FF; ">execute</span> immediate <span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">select </span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span>v_seqname<span style="color: #808080; ">||</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">.nextval from dual</span><span style="color: #FF0000; ">'</span> <span style="color: #0000FF; ">into</span> n;<br />   tsql:<span style="color: #808080; ">=</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">alter sequence </span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span>v_seqname<span style="color: #808080; ">||</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; "> increment by 1</span><span style="color: #FF0000; ">'</span>;<br />  <span style="color: #0000FF; ">execute</span> immediate tsql;<br />  <span style="color: #0000FF; ">end</span> seq_reset;</div> 另外Q高q发时序列的cache要设|大?一般业务设|?00以上Q但nocache的时候性能实很差Q最大相?0倍. 排序参数Qoracle默认是NOORDERQ如果设|ؓORDERQ在单实例环境没有媄响,在RAC环境此时Q多实例实际~存相同的序列,此时在多个实例ƈ发取该序列的时候,会有短暂的资源竞争来在多实例之间q行同步。因ơ性能相比noorder要差Q所以RAC环境非必ȝ情况下不要用ORDERQ尤其要避免NOCACHE ORDERl合Q? <img src ="http://www.aygfsteel.com/Todd/aggbug/383896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Todd/" target="_blank">Todd</a> 2012-07-25 02:29 <a href="http://www.aygfsteel.com/Todd/archive/2012/07/25/383896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle JOB问题解决步骤【{?/title><link>http://www.aygfsteel.com/Todd/archive/2011/09/21/359115.html</link><dc:creator>Todd</dc:creator><author>Todd</author><pubDate>Tue, 20 Sep 2011 18:49:00 GMT</pubDate><guid>http://www.aygfsteel.com/Todd/archive/2011/09/21/359115.html</guid><wfw:comment>http://www.aygfsteel.com/Todd/comments/359115.html</wfw:comment><comments>http://www.aygfsteel.com/Todd/archive/2011/09/21/359115.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Todd/comments/commentRss/359115.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Todd/services/trackbacks/359115.html</trackback:ping><description><![CDATA[<p><strong><font color="#00ff00">一。job的运行频率设|?/font></strong></p> <p>1.每天固定旉q行Q比如早?:10分钟QTrunc(Sysdate+1) + (8*60+10)/24*60</p> <p>2.Toad中提供的Q?/p> <p>每天Qtrunc(sysdate)+1</p> <p>每周Qtrunc(sysdate)+7</p> <p>每月Qtrunc(sysdate)+30</p> <p>每个星期日:next_day(trunc(sysdate),'SUNDAY')</p> <p>每天6点:trunc(sysdate)+1+6/24</p> <p>半个时Qsysdate+30/1440</p> <p>3.每个时的第15分钟q行Q比如:8:15Q?:15Q?0:15...Qtrunc(sysdate,'hh')+75/1440。原先我讄的是trunc(sysdate,'hh')+15/1440Q发现居然不行?/p> <p><strong><font color="#00ff00">二。JOBZ么不q行Q?/font></strong></p> <p>1.先来了解一下JOB的参数说明:与job相关的参C个是job_queue_processesQ这个是q行JOB时候所Lq程敎ͼ当然pȝ里面JOB大于q个数值后Q就会有排队{候的Q最值是0Q表CZq行JOBQ最大值是36Q在OS上对应的q程时SNPnQ?i以后OS上管理JOB的进E叫CJQn。可以用下面这个SQL定目前有几个SNP/CJQ在运行?/p> <p>select * from v$bgprocessQ这个paddr不ؓI的snp/cjqq程是目前I闲的进E,有的表示正在工作的进E?/p> <p>另外一个是job_queue_intervalQ范围在1--3600之间Q单位是U,q个是唤醒JOB的processQ因为每ơsnpq行完他׃息了Q需要定期唤醒他Q这个g能太,太小会媄响数据库的性能?/p> <p>2.诊断Q先定上面q两个参数设|是否正,特别是第一个参敎ͼ讄?了,所有JOB׃会跑Q确认无误后Q我们l向下?/p> <p>3.使用下面的SQL察看JOB的的broken,last_date和next_dateQlast_date是指最q一ơjobq行成功的结束时_next_date是根据设|的频率计算的下ơ执行时_Ҏq个信息可以判断JOB上次是否正常Q还可以判断下次的时间对不对QSQL如下Q?/p> <p>select * from dba_jobs</p> <p>有时候我们发C的next_date?000q??日,说明job要不是在runningQ要不就是状态是break(broken=Y)Q如果发现JOB的brokengؓYQ找用户了解一下,定该JOB是否可以brokenQ如果不能brokenQ那把brokengҎNQ修改再使用上面的SQL察看发C的last_date已经变了QJOB卛_正常q行Q修改broken状态的SQL如下Q?/p> <p> declare </p> <p>BEGIN </p> <p>DBMS_JOB.BROKEN(<JOB_ID>,FALSE); </p> <p>END; </p> <p>4.使用下面的SQL查询是否JOBq在Running</p> <p>select * from dba_jobs_running</p> <p>如果发现JOB已经Run了很久了q没有结束,p查原因了。一般的JOB running时会锁定相关的相关的资源Q可以查看一下v$access和v$locked_objectq两个viewQ如果发现其他进E锁定了与JOB相关的ObjectQ包括PKG/Function/Procedure/Table{资源,那么p把其他进E删除,有必要的话,把JOB的进E也删除Q再重新跑看看结果?/p> <p>5.如果上面都正常,但是JOBq不runQ怎么办?那我们要考虑把JOBq程重启一ơ,防止是SNPq程M造成JOB不跑Q指令如下:</p> <p>alter system set job_queue_processes=0 --关闭jobq程Q等?--10U钟</p> <p>alter system set job_quene_processes=5 --恢复原来的?/p> <p>6.Oracle的BUG</p> <p>Oracle9i里面有一个BUGQ当计数器到497天时Q刚好达到它的最大|再计数就会变?1Ql计数就变成0了,然后计数器将不再跑了。如果碰到这U情况就得重启数据库Q我们这Ҏ一个生产型的数据库版本?205Q就发生q这样一ơ问题,后来和用L旉重启后就没问题了。但是其他的Oracle7345和Oracle8i的数据库没有发现q个问题?/p> <p>7.数据库上的检查基本上p多,如果JOBq行q有问题Q那需要配合用户察看一下是否是E序本n的问题,比如处理的资料量大,或者网l速度慢等造成q行时过长,那就需要具体情况具体分析了。我们可以通过下面的SQL手工执行一下JOB看看Q?/p> <p>declare </p> <p>begin</p> <p>dbms_job.run(<job>_ID)</p> <p>end;</p> <p>如果发现JOB执行不正常,pl合E序具体分析一下?/p> <img src ="http://www.aygfsteel.com/Todd/aggbug/359115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Todd/" target="_blank">Todd</a> 2011-09-21 02:49 <a href="http://www.aygfsteel.com/Todd/archive/2011/09/21/359115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]linux 启动 oraclehttp://www.aygfsteel.com/Todd/archive/2011/04/18/348494.htmlToddToddMon, 18 Apr 2011 08:05:00 GMThttp://www.aygfsteel.com/Todd/archive/2011/04/18/348494.htmlhttp://www.aygfsteel.com/Todd/comments/348494.htmlhttp://www.aygfsteel.com/Todd/archive/2011/04/18/348494.html#Feedback0http://www.aygfsteel.com/Todd/comments/commentRss/348494.htmlhttp://www.aygfsteel.com/Todd/services/trackbacks/348494.html启动数据库实例,分ؓ两步Q第一步,启动监听Q第二步Q启动数据库实例?br />  
一、如何启动数据库实例
   1.q入到sqlplus启动实例
[oracle@redhat ~]$ su - oracle                                 --“切换到oracle用户”
Password:
[oracle@redhat ~]$ lsnrctl start                               --“打开监听”
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 14-OCT-2009 19:06:40
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
Starting /home/oracle/product/10g/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /home/oracle/product/10g/network/admin/listener.ora
Log messages written to /home/oracle/product/10g/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC2)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=redhat)(PORT=1522)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC2)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date                14-OCT-2009 19:06:40
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /home/oracle/product/10g/network/admin/listener.ora
Listener Log File         /home/oracle/product/10g/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC2)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=redhat)(PORT=1522)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@redhat ~]$ sqlplus /nolog                                --“q入到sqlplus”
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Oct 14 19:06:45 2009
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL> conn /as sysdba                                              --“q接到sysdba”
Connected to an idle instance.
SQL> startup                                                     --“启动数据库实?#8221;
ORACLE instance started.
Total System Global Area  285212672 bytes
Fixed Size      1218968 bytes
Variable Size     88082024 bytes
Database Buffers   188743680 bytes
Redo Buffers      7168000 bytes
Database mounted.
Database opened.
SQL> shutdown immediate                                          --“关闭数据库实?#8221;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@redhat ~]$ lsnrctl stop                                 --“关闭监听”
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 14-OCT-2009 19:08:06
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC2)))
The command completed successfully
 
   2.用dbstart和dbshut启动和关闭数据库实例
 
先启动监?lsnrctl start
启动实例  dbstart
 
使用dbstart命o启动数据库比较方便,但是在linux上安装好oracle之后Q第一ơ用dbstart命o可能会报如下错误Q?br />  
ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener
Usage: /u01/app/oracle/oracle/product/10.2.0/db_1/bin/dbstart ORACLE_HOME

原因Q?br /> dbstart和dbshut脚本文g中ORACLE_HOME_LISTNER的设|有问题Q分别打开两个文g扑ֈQ用vi~辑dbstartQORACLE_HOME_LISTNER=$1,修改?br /> ORACLE_HOME_LISTNER=$ORACLE_HOME
 
 
然后保存退出,此时再运行dbstartQ已l不报错了,但是没有M反应Qps一下进E,没有oracle的进E,说明oracle实例没有正常启动?br />  
此时的原因是?etc/oratab的设|问题,我们vi一下,发现
zgz:/home/oracle/product/10g:N
最后设|的?N"Q我的环境中只有一个实例,因此只有一行配|语句)Q我们需要把“N”修改?#8220;Y”?br />  
以上的工作做好之后,dbstart可以正怋用了Q?br />  
[oracle@redhat bin]$ lsnrctl start                                   --“启动监听”
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 14-OCT-2009 19:44:53
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
Starting /home/oracle/product/10g/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /home/oracle/product/10g/network/admin/listener.ora
Log messages written to /home/oracle/product/10g/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC2)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=redhat)(PORT=1522)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC2)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date                14-OCT-2009 19:44:53
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /home/oracle/product/10g/network/admin/listener.ora
Listener Log File         /home/oracle/product/10g/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC2)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=redhat)(PORT=1522)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@redhat bin]$ dbstart                                   --“启动数据库实?#8221;
Processing Database instance "zgz": log file /home/oracle/product/10g/startup.log
[oracle@redhat bin]$ dbshut                                    --“关闭数据库实?#8221;
[oracle@redhat bin]$ lsnrctl stop                              --“关闭监听”
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 14-OCT-2009 19:45:33
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC2)))
The command completed successfully
 
二、如何数据库实例和linuxpȝ一起启?br /> ?etc/rc.d/rc.local中加入如下语句即可实现同pȝ启动实例Q?br /> su - oracle -c "lsnrctl start"
su - oracle -c "dbstart" 





Todd 2011-04-18 16:05 发表评论
]]>
[转]ORACLE的隔ȝ?/title><link>http://www.aygfsteel.com/Todd/archive/2011/04/15/348360.html</link><dc:creator>Todd</dc:creator><author>Todd</author><pubDate>Fri, 15 Apr 2011 08:15:00 GMT</pubDate><guid>http://www.aygfsteel.com/Todd/archive/2011/04/15/348360.html</guid><wfw:comment>http://www.aygfsteel.com/Todd/comments/348360.html</wfw:comment><comments>http://www.aygfsteel.com/Todd/archive/2011/04/15/348360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Todd/comments/commentRss/348360.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Todd/services/trackbacks/348360.html</trackback:ping><description><![CDATA[<p><strong><span style="font-family: 宋体">隔离U别Qisolation levelQ?/span></strong></p> <p><strong> </strong></p> <p style="margin-left: 21.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">隔离U别定义了事务与事务之间的隔ȝ度?/span></p> <p style="margin-left: 21.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">隔离U别与ƈ发性是互ؓ矛盾的:隔离E度高Q数据库的ƈ发性越差;隔离E度低Q数据库的ƈ发性越好?/span></p> <p style="margin-left: 21.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">ANSI/ISO SQL92</span><span style="font-family: 宋体">标准定义了一些数据库操作的隔ȝ别:</span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">未提交读Qread uncommittedQ?/span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">提交读(read committedQ?/span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">重复读(repeatable readQ?/span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">序列化(serializableQ?/span></p> <p style="margin-left: 21.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">通过一些现象,可以反映出隔ȝ别的效果。这些现象有Q?/span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">更新丢失Qlost updateQ:当系l允怸个事务同时更新同一数据是,发生更新丢失?/span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">脏读Qdirty readQ:当一个事务读取另一个事务尚未提交的修改Ӟ产生脏读?/span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">非重复读Qnonrepeatable readQ:同一查询在同一事务中多ơ进行,׃其他提交事务所做的修改或删除,每次q回不同的结果集Q此时发生非重复诅R?A transaction rereads data it has previously read and finds that another committed transaction has modified or deleted the data.  )</span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">qdQphantom readQ:同一查询在同一事务中多ơ进行,׃其他提交事务所做的插入操作Q每ơ返回不同的l果集,此时发生qd诅R?A transaction reexecutes a query returning a set of rows that satisfies a search condition and finds that another committed transaction has inserted additional rows that satisfy the condition.  )</span></p> <p style="margin-left: 21.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">下面是隔ȝ别及其对应的可能出现或不可能出现的现?/span></p> <table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1"> <tbody> <tr> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"></td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Dirty Read  </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">NonRepeatable Read  </span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Phantom Read  </span></p> </td> </tr> <tr> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Read uncommitted</span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Possible</span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Possible</span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Possible</span></p> </td> </tr> <tr> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Read committed</span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Not possible</span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Possible</span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Possible</span></p> </td> </tr> <tr> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Repeatable read</span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Not possible</span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Not possible</span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Possible</span></p> </td> </tr> <tr> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Serializable</span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Not possible</span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Not possible</span></p> </td> <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 110.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="148"> <p><span style="font-family: 宋体">Not possible</span></p> </td> </tr> </tbody> </table> <p><strong><span style="font-family: 宋体">ORACLE</span></strong><strong><span style="font-family: 宋体">的隔ȝ?/span></strong></p> <p style="margin-left: 21.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">ORACLE</span><span style="font-family: 宋体">提供了SQL92标准中的read committed和serializableQ同时提供了非SQL92标准的read-only?/span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">read committed</span><span style="font-family: 宋体">Q?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">q是ORACLE~省的事务隔ȝ别?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">事务中的每一条语句都遵从语句U的M致性?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">保证不会脏读Q但可能出现非重复读和像?/span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">serializable</span><span style="font-family: 宋体">Q?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">单地_serializable是使事务看h象是一个接着一个地序地执行?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">保证不会出现非重复读和像?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">Serializable</span><span style="font-family: 宋体">隔离U别提供了read-only事务所提供的读一致性(事务U的M致性)Q同时又允许DML操作?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">如果有在serializable事务开始时未提交的事务在serializable事务l束之前修改了serializable事务要修改的行q进行了提交Q则serializable事务不会dq些变更Q因此发生无法序列化讉K的错误。(换一U解释方法:只要在serializable事务开始到l束之间有其他事务对serializable事务要修改的东西q行了修改ƈ提交了修改,则发生无法序列化讉K的错误。)</span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">If a serializable transaction contains data manipulation language (DML) that attempts to update any resource that may have been updated in a transaction uncommitted at the start of the serializable transaction, </span><span style="font-family: 宋体">Qƈ且修改在后来被提交而没有回滚)Qthen the DML statement fails. q回的错误是ORA-08177: Cannot serialize access for this transaction?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="color: red; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">ORACLE</span><span style="font-family: 宋体">在数据块中记?u>最q对数据行执行修Ҏ作的N个事?/u>的信息,目的是确定是否有在本事务开始时未提交的事务修改了本事务要修改的行。具体见英文QOracle permits a serializable transaction to modify a data row only if it can determine that prior changes to the row were made by transactions that had committed when the serializable transaction began. To make this determination efficiently, Oracle uses control information stored in the data block that indicates which rows in the block contain committed and uncommitted changes. In a sense, the block contains a recent history of transactions that affected each row in the block. The amount of history that is retained is controlled by the INITRANS parameter of CREATE TABLE and ALTER TABLE. Under some circumstances, Oracle may have insufficient history information to determine whether a row has been updated by a "too recent" transaction. This can occur when many transactions concurrently modify the same data block, or do so in a very short period. You can avoid this situation by setting higher values of INITRANS for tables that will experience many transactions updating the same blocks. Doing so will enable Oracle to allocate sufficient storage in each block to record the history of recent transactions that accessed the block. </span></p> <p style="margin-left: 78.5pt; text-indent: -21.25pt"><span style="color: red; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">The INITRANS Parameter</span><span style="font-family: 宋体">QOracle stores control information in each data block to manage access by concurrent transactions. Therefore, if you set the transaction isolation level to serializable, you must use the ALTER TABLE command to set INITRANS to at least 3. This parameter will cause Oracle to allocate sufficient storage in each block to record the history of recent transactions that accessed the block. Higher values should be used for tables that will undergo many transactions updating the same blocks. </span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">read-only</span><span style="font-family: 宋体">Q?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">遵从事务U的M致性,仅仅能看见在本事务开始前由其它事务提交的更改?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">不允许在本事务中q行DML操作?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">read only</span><span style="font-family: 宋体">是serializable的子集。它们都避免了非重复dqd。区别是在read only中是只读Q而在serializable中可以进行DML操作?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">Export with CONSISTENT = Y sets the transaction to read-only.</span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">read committed</span><span style="font-family: 宋体">和serializable的区别和联系Q?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">事务1先于事务2开始,q保持未提交状态。事?惌修改正被事务1修改的行。事?{待。如果事?回滚Q则事务2Q不论是read committedq是serializable方式Q进行它惌做的修改。如果事?提交Q则当事?是read committed方式Ӟq行它想要做的修改;当事?是serializable方式Ӟp|q报?#8220;Cannot serialize access”Q?span style="color: red">因ؓ事务2看不见事?提交的修改,且事?惛_事务一修改的基上再做修?/span>。具体见英文QBoth read committed and serializable transactions use row-level locking, and both will wait if they try to change a row updated by an uncommitted concurrent transaction. The second transaction that tries to update a given row waits for the other transaction to commit or roll back and release its lock. If that other transaction rolls back, the waiting transaction (regardless of its isolation mode) can proceed to change the previously locked row, as if the other transaction had not existed. However, if the other (blocking) transaction commits and releases its locks, a read committed transaction proceeds with its intended update. A serializable transaction, however, fails with the error "Cannot serialize access", because the other transaction has committed a change that was made since the serializable transaction began. </span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">read committed</span><span style="font-family: 宋体">和serializable可以在ORACLEq行服务器中使用?/span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">关于SET TRANSACTION READ WRITEQread write和read committed 应该是一L。在L面,它们都避免了脏读Q但都无法实现重复读。虽然没有文档说明read write在写斚w与read committed一_但显然它在写的时候会加排他锁以避免更C失。在加锁的过E中Q如果遇到待锁定资源无法锁定Q应该是{待而不是放弃。这与read committed一致?/span></p> <p style="margin-left: 21.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">语句U的M致?/span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">ORACLE</span><span style="font-family: 宋体">保证语句U的M致性,即一个语句所处理的数据集是在单一旉点上的数据集Q这个时间点是这个语句开始的旉?/span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">一个语句看不见在它开始执行后提交的修攏V?/span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">对于DML语句Q它看不见由自己所做的修改Q即DML语句看见的是它本w开始执行以前存在的数据?/span></p> <p style="margin-left: 21.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">事务U的M致?/span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">事务U的M致性保证了可重复读Qƈ保证不会出现qd?/span></p> <p style="margin-left: 21.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">讄隔离U别</span></p> <p style="margin-left: 42.5pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">          </span></span><span style="font-family: 宋体">讄一个事务的隔离U别</span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">SET TRANSACTION ISOLATION LEVEL READ COMMITTED; </span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; </span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">SET TRANSACTION READ ONLY; </span></p> <p style="margin-left: 42.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">讄增个会话的隔ȝ?/span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE; </span></p> <p style="margin-left: 57.25pt; text-indent: -21.25pt"><span style="font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">         </span></span><span style="font-family: 宋体">ALTER SESSION SET ISOLATION_LEVEL READ COMMITTED; </span></p> <img src ="http://www.aygfsteel.com/Todd/aggbug/348360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Todd/" target="_blank">Todd</a> 2011-04-15 16:15 <a href="http://www.aygfsteel.com/Todd/archive/2011/04/15/348360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql事务隔离U别以及有问题的dQ脏读,不可重复读,q象读)http://www.aygfsteel.com/Todd/archive/2010/09/11/331745.htmlToddToddSat, 11 Sep 2010 07:50:00 GMThttp://www.aygfsteel.com/Todd/archive/2010/09/11/331745.htmlhttp://www.aygfsteel.com/Todd/comments/331745.htmlhttp://www.aygfsteel.com/Todd/archive/2010/09/11/331745.html#Feedback0http://www.aygfsteel.com/Todd/comments/commentRss/331745.htmlhttp://www.aygfsteel.com/Todd/services/trackbacks/331745.html1.事务里一些有问题的读取:脏读Q不可重复读Q象读

脏读 Qdirty readQ事务T1更新了一行记录的内容Q但是ƈ没有提交所做的修改。事务T2d更新后的行,然后T1执行回滚操作Q取消了刚才所做的修改。现在T2所d的行无效了?/p>

不可重复d Qnonrepeatable readQ事务T1d一行记录,紧接着事务T2修改 了T1刚才d的那一行记录。然后T1又再ơ读取这行记录,发现与刚才读取的l果不同。这q为“不可重复”读Q因为T1原来d的那行记录已l发生了变化?/p>

qdd Qphantom readQ事务T1d一条指定的WHERE子句所q回的结果集。然后事务T2新插?一行记录,q行记录恰好可以满T1所使用的查询条件中的WHERE 子句的条件。然后T1又用相同的查询再次对表q行索,但是此时却看C事务T2刚才插入的新行。这个新行就UCؓ“像”,因ؓ对T1来说q一行就像突 然出现的一栗?/p>

2.事务的隔ȝ?/p>

从别低到高依次为:

READ UNCOMMITTED qd诅R不可重复读和脏读都允许?/p>

READ COMMITTED 允许qd诅R不可重复读Q但不允许脏诅R?/p>

REPEATABLE READ 允许qd读,但不允许不可重复d脏读。InnoDB默认U别

SERIALIZABLE qd诅R不可重复读和脏读都不允许?/p>

但是InnoDB的可重复读隔ȝ别和其他数据库的可重复读是有区别的,不会造成q象读(phantom readQ?/p>

ORACLE数据库支?READ COMMITTED ?SERIALIZABLE Q不支持 READ UNCOMMITTED ?REPEATABLE READ ?/p>

3.试Q?/p>

1Qƈ发更?Q表tab1 的一条记录id=1 num=1Q两个session分别执行事务1Q?

分别输入下面的语?/p>

事务1 (session1) Q?/p>

           start transaction;

           update tab1 set num=num+1 where id=1Q?/p>

=========

一条记录被更新Qselect发现num=2;

事务2 (session2)Q?/p>

           start transaction;

           update tab1 set num=num+1 where id=1;

=========

事务2会被dQ然后session1输入commit;提交事务1。此时事?更新成功?/p>

session1 select一下会发现numq是2Q不允许脏读 Q;session2 select 一?num ?Qupdate可以得到最新提交过的数据然后更斎ͼ但是如果没有updateQ一直是select 的话select得到的num一直是1 Q,然后commitQ?/p>

session1 select 发现num? Qsession2 select 发现num?Q?/p>

所以,事务中update是有行写锁(排他锁)的,不会发生Q?脏读和不可重复读Q对于自w有update的事务,update之后是可以读到最新数据的Q这属于例外Q^_^ Q,

2Q关于象读 Qinnodb默认事务隔离U别是不会出现的Q摘自网上,试通过Q?/p>

mysql> set autocommit=off;
Query OK, 0 rows affected (0.00 sec)

session 1 创徏表ƈ插入试数据

mysql> create table test(i int) engine=innodb;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values(1);
Query OK, 1 row affected (0.00 sec)
session 2 查询Q没有数据,正常Qsession1没有提交Q不允许脏读

mysql> select * from test;
Empty set (0.00 sec)
session 1 提交事务

mysql> commit;
Query OK, 0 rows affected (0.00 sec)
session 2 查询Q还是没有数据,没有产生q象?/p>

mysql> select * from test;
Empty set (0.00 sec)
4.最后,现在应该知道数据库ƈ发控制ƈ不复杂,交给数据库的事务pQmysql 选用innodb引擎Q不会出玎ͼ“不可重复读”(是在事?q行数据修改的时候,事务2d的数据是没修?之前的数据,事务1提交的时候,事务2再次d的时候得到的是修改后的数据,单个事务内所L据不一_Q“脏诠Z,“象读”;

 关于innodb锁机制的详细解释Q参见《mysql手册??5.2.10 .  InnoDB 事务模型和锁定”?


本文来自CSDN博客Q{载请标明出处Q?a >http://blog.csdn.net/todd_liu/archive/2010/09/10/5875650.aspx



Todd 2010-09-11 15:50 发表评论
]]>
վ֩ģ壺 | | Զ| Ԫ| ƽ| ɽ| | Ů| Դ| | | | ˳| | | ӱ| | ī񹤿| | | ϴ| | Դ| | Է| | | | | ǭ| | | ²| | մ| ά| | | Դ| | |