<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[『波过无痕』's Blog]]></title>
<link>http://www.cn31.com/</link>
<description><![CDATA[秀出自己|我的博客我做主!   http://www.cn31.com/ | http://www.uuzz.net]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[zoubo265168@126.com(邹波)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>『波过无痕』&#39;s Blog</title> 
	<url>http://www.cn31.com/images/logos.gif</url> 
	<link>http://www.cn31.com/</link> 
	<description>『波过无痕』&#39;s Blog</description> 
</image>

			<item>
			<link>http://www.cn31.com/default.asp?id=950</link>
			<title><![CDATA[Oracle中执行sql脚本]]></title>
			<author>zoubo265168@126.com(bob520)</author>
			<category><![CDATA[PB设计]]></category>
			<pubDate>Sat,22 Mar 2008 19:27:40 +0800</pubDate>
			<guid>http://www.cn31.com/default.asp?id=950</guid>	
		<description><![CDATA[其实很简单，就是@命令即可，例如<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.cn31.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&nbsp;SQL&gt;&nbsp;@c:\cr&#101;ate_table_a.sql;&nbsp;&nbsp;&nbsp;<br/></div></div>&nbsp;<br/>表已创建。]]></description>
		</item>
		
			<item>
			<link>http://www.cn31.com/default.asp?id=949</link>
			<title><![CDATA[PB数据窗口自动换行]]></title>
			<author>zoubo265168@126.com(bob520)</author>
			<category><![CDATA[PB设计]]></category>
			<pubDate>Sat,22 Mar 2008 19:25:39 +0800</pubDate>
			<guid>http://www.cn31.com/default.asp?id=949</guid>	
		<description><![CDATA[在&nbsp;Datawindow&nbsp;中，若只选中列的&nbsp;Auto&nbsp;Horz&nbsp;Scroll，键入的字符可以加到文本串中并始终维持一行，直到达到上限；&nbsp;<br/>若只选中列的&nbsp;Auto&nbsp;Vert&nbsp;Scroll，键入的字符可以加到文本串中并会换行，直到达到上限；&nbsp;<br/>若都不选中，且高度不足以让文本多行显示的话，键入的字符只可达到控件的显示范围内的长度。&nbsp;<br/>所以为实现多行显示要求：必须不选中&nbsp;Auto&nbsp;Horz&nbsp;Scroll，并且在&nbsp;EditChanged&nbsp;事件中自动调整列高。建议不选中&nbsp;Auto&nbsp;Vert&nbsp;Scroll，以避免打印与显示不一致的问题。注：只有&nbsp;string&nbsp;型的文本才可以换行。最终方案：<br/>Object.DataWindow.Detail.Height.AutoSize&nbsp;=&nbsp;&#39;yes&#39;<br/><br/>Object.&lt;DWObject&gt;.Height.AutoSize&nbsp;=&nbsp;&#39;yes&#39;<br/><br/>Object.&lt;DWObject&gt;.Edit.AutoVScroll&nbsp;=&nbsp;&#39;yes&#39;&nbsp;//用于可编辑列<br/><br/>即可实现自动换行功能。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.cn31.com/default.asp?id=948</link>
			<title><![CDATA[oracle SQL性能优化 ]]></title>
			<author>zoubo265168@126.com(bob520)</author>
			<category><![CDATA[PB设计]]></category>
			<pubDate>Sat,22 Mar 2008 19:22:39 +0800</pubDate>
			<guid>http://www.cn31.com/default.asp?id=948</guid>	
		<description><![CDATA[网上找的优化方案，都学会后自己也成了高手。<br/>我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享！&nbsp;<br/>（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选择最有效率的表名顺序(只在基于规则的优化器中有效)：<br/>o&#114;ACLE的解析器按照从右到左的顺序处理FROM子句中的表名，FROM子句中写在最后的表(基础表&nbsp;driving&nbsp;table)将被最先处理，在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询,&nbsp;那就需要选择交叉表(intersection&nbsp;table)作为基础表,&nbsp;交叉表是指那个被其他表所引用的表.<br/>（2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wh&#101;re子句中的连接顺序．：<br/>o&#114;ACLE采用自下而上的顺序解析Wh&#101;re子句,根据这个原理,表之间的连接必须写在其他Wh&#101;re条件之前,&nbsp;那些可以过滤掉最大数量记录的条件必须写在Wh&#101;re子句的末尾.<br/>（3）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sel&#101;ct子句中避免使用&nbsp;‘&nbsp;*&nbsp;‘：<br/>o&#114;ACLE在解析的过程中,&nbsp;会将&#39;*&#39;&nbsp;依次转换成所有的列名,&nbsp;这个工作是通过查询数据字典完成的,&nbsp;这意味着将耗费更多的时间<br/>（4）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;减少访问数据库的次数：<br/>o&#114;ACLE在内部执行了许多工作:&nbsp;解析SQL语句,&nbsp;估算索引的利用率,&nbsp;绑定变量&nbsp;,&nbsp;读数据块等；<br/>（5）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在SQL*Plus&nbsp;,&nbsp;SQL*Forms和Pro*C中重新设置ARRAYSIZE参数,&nbsp;可以增加每次数据库访问的检索数据量&nbsp;,建议值为200<br/>（6）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用DECODE函数来减少处理时间：<br/>使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.<br/>（7）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;整合简单,无关联的数据库访问：<br/>如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系)<br/>（8）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;删除重复记录：<br/>最高效的删除重复记录方法&nbsp;(&nbsp;因为使用了ROWID)例子：<br/>Del&#101;te&nbsp;&nbsp;FROM&nbsp;&nbsp;EMP&nbsp;E&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;E.ROWID&nbsp;&gt;&nbsp;(Sel&#101;ct&nbsp;MIN(X.ROWID)&nbsp;<br/>FROM&nbsp;&nbsp;EMP&nbsp;X&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;X.EMP_NO&nbsp;=&nbsp;E.EMP_NO);<br/>（9）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用TRUNCATE替代Del&#101;te：<br/>当删除表中的记录时,在通常情况下,&nbsp;回滚段(rollback&nbsp;segments&nbsp;)&nbsp;用来存放可以被恢复的信息.&nbsp;如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)&nbsp;而当运用TRUNCATE时,&nbsp;回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短.&nbsp;(译者按:&nbsp;TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)<br/>（10）&nbsp;尽量多使用COMMIT：<br/>只要有可能,在程序中尽量多使用COMMIT,&nbsp;这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:&nbsp;<br/>COMMIT所释放的资源:&nbsp;<br/>a.&nbsp;回滚段上用于恢复数据的信息.&nbsp;<br/>b.&nbsp;被程序语句获得的锁&nbsp;<br/>c.&nbsp;redo&nbsp;log&nbsp;buffer&nbsp;中的空间&nbsp;<br/>d.&nbsp;o&#114;ACLE为管理上述3种资源中的内部花费<br/>（11）&nbsp;用Wh&#101;re子句替换HAVING子句：<br/>避免使用HAVING子句,&nbsp;HAVING&nbsp;只会在检索出所有记录之后才对结果集进行过滤.&nbsp;这个处理需要排序,总计等操作.&nbsp;如果能通过Wh&#101;re子句限制记录的数目,那就能减少这方面的开销.&nbsp;(非oracle中)on、wh&#101;re、having这三个都可以加条件的子句中，on是最先执行，wh&#101;re次之，having最后，因为on是先把不符合条件的记录过滤后才进行统计，它就可以减少中间运算要处理的数据，按理说应该速度是最快的，wh&#101;re也应该比having快点的，因为它过滤数据后才进行sum，在两个表联接时才用on的，所以在一个表的时候，就剩下wh&#101;re跟having比较了。在这单表查询统计的情况下，如果要过滤的条件没有涉及到要计算字段，那它们的结果是一样的，只是wh&#101;re可以使用rushmore技术，而having就不能，在速度上后者要慢如果要涉及到计算的字段，就表示在没计算之前，这个字段的值是不确定的，根据上篇写的工作流程，wh&#101;re的作用时间是在计算之前就完成的，而having就是在计算后才起作用的，所以在这种情况下，两者的结果会不同。在多表联接查询时，on比wh&#101;re更早起作用。系统首先根据各个表之间的联接条件，把多个表合成一个临时表后，再由wh&#101;re进行过滤，然后再计算，计算完后再由having进行过滤。由此可见，要想过滤条件起到正确的作用，首先要明白这个条件应该在什么时候起作用，然后再决定放在那里<br/>（12）&nbsp;减少对表的查询：<br/>在含有子查询的SQL语句中,要特别注意减少对表的查询.例子：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sel&#101;ct&nbsp;&nbsp;TAB_NAME&nbsp;FROM&nbsp;TABLES&nbsp;Wh&#101;re&nbsp;(TAB_NAME,DB_VER)&nbsp;=&nbsp;(&nbsp;Sel&#101;ct<br/>TAB_NAME,DB_VER&nbsp;FROM&nbsp;&nbsp;TAB_COLUMNS&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;VERSION&nbsp;=&nbsp;604)<br/>（13）&nbsp;通过内部函数提高SQL效率.：<br/>复杂的SQL往往牺牲了执行效率.&nbsp;能够掌握上面的运用函数解决问题的方法在实际工作中是非常有意义的<br/>（14）&nbsp;使用表的别名(Alias)：<br/>当在SQL语句中连接多个表时,&nbsp;请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.<br/>（15）&nbsp;用EXISTS替代IN、用NOT&nbsp;EXISTS替代NOT&nbsp;IN：<br/>在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下,&nbsp;使用EXISTS(或NOT&nbsp;EXISTS)通常将提高查询的效率.&nbsp;在子查询中,NOT&nbsp;IN子句将执行一个内部的排序和合并.&nbsp;无论在哪种情况下,NOT&nbsp;IN都是最低效的&nbsp;(因为它对子查询中的表执行了一个全表遍历).&nbsp;为了避免使用NOT&nbsp;IN&nbsp;,我们可以把它改写成外连接(Outer&nbsp;Joins)或NOT&nbsp;EXISTS.<br/>例子：<br/>（高效）Sel&#101;ct&nbsp;*&nbsp;FROM&nbsp;&nbsp;EMP&nbsp;(基础表)&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;EMPNO&nbsp;&gt;&nbsp;0&nbsp;&nbsp;AND&nbsp;&nbsp;EXISTS&nbsp;(Sel&#101;ct&nbsp;‘X&#39;&nbsp;&nbsp;FROM&nbsp;DEPT&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;DEPT.DEPTNO&nbsp;=&nbsp;EMP.DEPTNO&nbsp;&nbsp;AND&nbsp;&nbsp;LOC&nbsp;=&nbsp;‘MELB&#39;)<br/>(低效)Sel&#101;ct&nbsp;&nbsp;*&nbsp;FROM&nbsp;&nbsp;EMP&nbsp;(基础表)&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;EMPNO&nbsp;&gt;&nbsp;0&nbsp;&nbsp;AND&nbsp;&nbsp;DEPTNO&nbsp;IN(Sel&#101;ct&nbsp;DEPTNO&nbsp;&nbsp;FROM&nbsp;&nbsp;DEPT&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;LOC&nbsp;=&nbsp;‘MELB&#39;)<br/>（16）&nbsp;识别&#39;低效执行&#39;的SQL语句：<br/>虽然目前各种关于SQL优化的图形化工具层出不穷,但是写出自己的SQL工具来解决问题始终是一个最好的方法：<br/>Sel&#101;ct&nbsp;&nbsp;EXECUTIONS&nbsp;,&nbsp;DISK_READS,&nbsp;BUFFER_GETS,&nbsp;<br/>ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2)&nbsp;Hit_radio,&nbsp;<br/>ROUND(DISK_READS/EXECUTIONS,2)&nbsp;Reads_per_run,&nbsp;<br/>SQL_TEXT&nbsp;<br/>FROM&nbsp;&nbsp;V$SQLAREA&nbsp;<br/>Wh&#101;re&nbsp;&nbsp;EXECUTIONS&gt;0&nbsp;<br/>AND&nbsp;&nbsp;BUFFER_GETS&nbsp;&gt;&nbsp;0&nbsp;<br/>AND&nbsp;&nbsp;(BUFFER_GETS-DISK_READS)/BUFFER_GETS&nbsp;&lt;&nbsp;0.8&nbsp;<br/>o&#114;DER&nbsp;BY&nbsp;&nbsp;4&nbsp;DESC;<br/>（17）&nbsp;用索引提高效率：<br/>索引是表的一个概念部分,用来提高检索数据的效率，ORACLE使用了一个复杂的自平衡B-tree结构.&nbsp;通常,通过索引查询数据比全表扫描要快.&nbsp;当ORACLE找出执行查询和Up&#100;ate语句的最佳路径时,&nbsp;o&#114;ACLE优化器将使用索引.&nbsp;同样在联结多个表时使用索引也可以提高效率.&nbsp;另一个使用索引的好处是,它提供了主键(primary&nbsp;key)的唯一性验证.。那些LONG或LONG&nbsp;RAW数据类型,&nbsp;你可以索引几乎所有的列.&nbsp;通常,&nbsp;在大型表中使用索引特别有效.&nbsp;当然,你也会发现,&nbsp;在扫描小表时,使用索引同样能提高效率.&nbsp;虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价.&nbsp;索引需要空间来存储,也需要定期维护,&nbsp;每当有记录在表中增减或索引列被修改时,&nbsp;索引本身也会被修改.&nbsp;这意味着每条记录的Ins&#101;rt&nbsp;,&nbsp;Del&#101;te&nbsp;,&nbsp;Up&#100;ate将为此多付出4&nbsp;,&nbsp;5&nbsp;次的磁盘I/O&nbsp;.&nbsp;因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.。定期的重构索引是有必要的.：<br/>Alt&#101;r&nbsp;&nbsp;INDEX&nbsp;&lt;INDEXNAME&gt;&nbsp;REBUILD&nbsp;&lt;TABLESPACENAME&gt;<br/>（18）&nbsp;用EXISTS替换DISTINCT：<br/>当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在Sel&#101;ct子句中使用DISTINCT.&nbsp;一般可以考虑用EXIST替换,&nbsp;EXISTS&nbsp;使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果.&nbsp;例子：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(低效):&nbsp;<br/>Sel&#101;ct&nbsp;&nbsp;DISTINCT&nbsp;&nbsp;DEPT_NO,DEPT_NAME&nbsp;&nbsp;FROM&nbsp;&nbsp;DEPT&nbsp;D&nbsp;,&nbsp;EMP&nbsp;E&nbsp;<br/>Wh&#101;re&nbsp;&nbsp;D.DEPT_NO&nbsp;=&nbsp;E.DEPT_NO&nbsp;<br/>(高效):&nbsp;<br/>Sel&#101;ct&nbsp;&nbsp;DEPT_NO,DEPT_NAME&nbsp;&nbsp;FROM&nbsp;&nbsp;DEPT&nbsp;D&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;EXISTS&nbsp;(&nbsp;Sel&#101;ct&nbsp;‘X&#39;&nbsp;<br/>FROM&nbsp;&nbsp;EMP&nbsp;E&nbsp;&nbsp;Wh&#101;re&nbsp;E.DEPT_NO&nbsp;=&nbsp;D.DEPT_NO);<br/>（19）&nbsp;sql语句用大写的；因为oracle总是先解析sql语句，把小写的字母转换成大写的再执行<br/>（20）&nbsp;在java代码中尽量少用连接符“＋”连接字符串！<br/>（21）&nbsp;避免在索引列上使用NOT&nbsp;通常，　<br/>我们要避免在索引列上使用NOT,&nbsp;NOT会产生在和在索引列上使用函数相同的影响.&nbsp;当ORACLE”遇到”NOT,他就会停止使用索引转而执行全表扫描.<br/>（22）&nbsp;避免在索引列上使用计算．<br/>Wh&#101;re子句中，如果索引列是函数的一部分．优化器将不使用索引而使用全表扫描．&nbsp;<br/>举例:&nbsp;<br/>低效：&nbsp;<br/>Sel&#101;ct&nbsp;…&nbsp;FROM&nbsp;&nbsp;DEPT&nbsp;&nbsp;Wh&#101;re&nbsp;SAL&nbsp;*&nbsp;12&nbsp;&gt;&nbsp;25000;&nbsp;<br/>高效:&nbsp;<br/>Sel&#101;ct&nbsp;…&nbsp;FROM&nbsp;DEPT&nbsp;Wh&#101;re&nbsp;SAL&nbsp;&gt;&nbsp;25000/12;<br/>（23）&nbsp;用&gt;=替代&gt;<br/>高效:&nbsp;<br/>Sel&#101;ct&nbsp;*&nbsp;FROM&nbsp;&nbsp;EMP&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;DEPTNO&nbsp;&gt;=4&nbsp;<br/>低效:&nbsp;<br/>Sel&#101;ct&nbsp;*&nbsp;FROM&nbsp;EMP&nbsp;Wh&#101;re&nbsp;DEPTNO&nbsp;&gt;3&nbsp;<br/>两者的区别在于,&nbsp;前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录.<br/>（24）&nbsp;用UNION替换OR&nbsp;(适用于索引列)<br/>通常情况下,&nbsp;用UNION替换Wh&#101;re子句中的OR将会起到较好的效果.&nbsp;对索引列使用OR将造成全表扫描.&nbsp;注意,&nbsp;以上规则只针对多个索引列有效.&nbsp;如果有column没有被索引,&nbsp;查询效率可能会因为你没有选择OR而降低.&nbsp;在下面的例子中,&nbsp;LOC_ID&nbsp;和REGION上都建有索引.&nbsp;<br/>高效:&nbsp;<br/>Sel&#101;ct&nbsp;LOC_ID&nbsp;,&nbsp;LOC_DESC&nbsp;,&nbsp;REGION&nbsp;<br/>FROM&nbsp;LOCATION&nbsp;<br/>Wh&#101;re&nbsp;LOC_ID&nbsp;=&nbsp;10&nbsp;<br/>UNION&nbsp;<br/>Sel&#101;ct&nbsp;LOC_ID&nbsp;,&nbsp;LOC_DESC&nbsp;,&nbsp;REGION&nbsp;<br/>FROM&nbsp;LOCATION&nbsp;<br/>Wh&#101;re&nbsp;REGION&nbsp;=&nbsp;“MELBOURNE”&nbsp;<br/>低效:&nbsp;<br/>Sel&#101;ct&nbsp;LOC_ID&nbsp;,&nbsp;LOC_DESC&nbsp;,&nbsp;REGION&nbsp;<br/>FROM&nbsp;LOCATION&nbsp;<br/>Wh&#101;re&nbsp;LOC_ID&nbsp;=&nbsp;10&nbsp;o&#114;&nbsp;REGION&nbsp;=&nbsp;“MELBOURNE”&nbsp;<br/>如果你坚持要用OR,&nbsp;那就需要返回记录最少的索引列写在最前面.<br/>（25）&nbsp;用IN来替换OR&nbsp;&nbsp;<br/>这是一条简单易记的规则，但是实际的执行效果还须检验，在ORACLE8i下，两者的执行路径似乎是相同的．　<br/>低效:&nbsp;<br/>Sel&#101;ct….&nbsp;FROM&nbsp;LOCATION&nbsp;Wh&#101;re&nbsp;LOC_ID&nbsp;=&nbsp;10&nbsp;o&#114;&nbsp;LOC_ID&nbsp;=&nbsp;20&nbsp;o&#114;&nbsp;LOC_ID&nbsp;=&nbsp;30&nbsp;<br/>高效&nbsp;<br/>Sel&#101;ct…&nbsp;FROM&nbsp;LOCATION&nbsp;Wh&#101;re&nbsp;LOC_IN&nbsp;&nbsp;IN&nbsp;(10,20,30);<br/>（26）&nbsp;避免在索引列上使用IS&nbsp;NULL和IS&nbsp;NOT&nbsp;NULL<br/>避免在索引中使用任何可以为空的列，ORACLE将无法使用该索引．对于单列索引，如果列包含空值，索引中将不存在此记录.&nbsp;对于复合索引，如果每个列都为空，索引中同样不存在此记录.　如果至少有一个列不为空，则记录存在于索引中．举例:&nbsp;如果唯一性索引建立在表的A列和B列上,&nbsp;并且表中存在一条记录的A,B值为(123,null)&nbsp;,&nbsp;o&#114;ACLE将不接受下一条具有相同A,B值（123,null）的记录(插入).&nbsp;然而如果所有的索引列都为空，ORACLE将认为整个键值为空而空不等于空.&nbsp;因此你可以插入1000&nbsp;条具有相同键值的记录,当然它们都是空!&nbsp;因为空值不存在于索引列中,所以Wh&#101;re子句中对索引列进行空值比较将使ORACLE停用该索引.<br/>低效:&nbsp;(索引失效)&nbsp;<br/>Sel&#101;ct&nbsp;…&nbsp;FROM&nbsp;&nbsp;DEPARTMENT&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;DEPT_CODE&nbsp;IS&nbsp;NOT&nbsp;NULL;&nbsp;<br/>高效:&nbsp;(索引有效)&nbsp;<br/>Sel&#101;ct&nbsp;…&nbsp;FROM&nbsp;&nbsp;DEPARTMENT&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;DEPT_CODE&nbsp;&gt;=0;<br/>（27）&nbsp;总是使用索引的第一个列：<br/>如果索引是建立在多个列上,&nbsp;只有在它的第一个列(leading&nbsp;column)被wh&#101;re子句引用时,优化器才会选择使用该索引.&nbsp;这也是一条简单而重要的规则，当仅引用索引的第二个列时,优化器使用了全表扫描而忽略了索引<br/>（28）&nbsp;用UNION-ALL&nbsp;替换UNION&nbsp;(&nbsp;如果有可能的话)：<br/>当SQL语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并,&nbsp;然后在输出最终结果前进行排序.&nbsp;如果用UNION&nbsp;ALL替代UNION,&nbsp;这样排序就不是必要了.&nbsp;效率就会因此得到提高.&nbsp;需要注意的是，UNION&nbsp;ALL&nbsp;将重复输出两个结果集合中相同记录.&nbsp;因此各位还是要从业务需求分析使用UNION&nbsp;ALL的可行性.&nbsp;UNION&nbsp;将对结果集合排序,这个操作会使用到SORT_AREA_SIZE这块内存.&nbsp;对于这块内存的优化也是相当重要的.&nbsp;下面的SQL可以用来查询排序的消耗量<br/>低效：&nbsp;<br/>Sel&#101;ct&nbsp;&nbsp;ACCT_NUM,&nbsp;BALANCE_AMT&nbsp;<br/>FROM&nbsp;&nbsp;DEBIT_TRANSACTIONS&nbsp;<br/>Wh&#101;re&nbsp;TRAN_DATE&nbsp;=&nbsp;&#39;31-DEC-95&#39;&nbsp;<br/>UNION&nbsp;<br/>Sel&#101;ct&nbsp;ACCT_NUM,&nbsp;BALANCE_AMT&nbsp;<br/>FROM&nbsp;DEBIT_TRANSACTIONS&nbsp;<br/>Wh&#101;re&nbsp;TRAN_DATE&nbsp;=&nbsp;&#39;31-DEC-95&#39;&nbsp;<br/>高效:&nbsp;<br/>Sel&#101;ct&nbsp;ACCT_NUM,&nbsp;BALANCE_AMT&nbsp;<br/>FROM&nbsp;DEBIT_TRANSACTIONS&nbsp;<br/>Wh&#101;re&nbsp;TRAN_DATE&nbsp;=&nbsp;&#39;31-DEC-95&#39;&nbsp;<br/>UNION&nbsp;ALL&nbsp;<br/>Sel&#101;ct&nbsp;ACCT_NUM,&nbsp;BALANCE_AMT&nbsp;<br/>FROM&nbsp;DEBIT_TRANSACTIONS&nbsp;<br/>Wh&#101;re&nbsp;TRAN_DATE&nbsp;=&nbsp;&#39;31-DEC-95&#39;<br/>（29）&nbsp;用Wh&#101;re替代ORDER&nbsp;BY：<br/>o&#114;DER&nbsp;BY&nbsp;子句只在两种严格的条件下使用索引.&nbsp;<br/>o&#114;DER&nbsp;BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序.&nbsp;<br/>o&#114;DER&nbsp;BY中所有的列必须定义为非空.&nbsp;<br/>Wh&#101;re子句使用的索引和ORDER&nbsp;BY子句中所使用的索引不能并列.<br/>例如:&nbsp;<br/>表DEPT包含以下列:&nbsp;<br/>DEPT_CODE&nbsp;PK&nbsp;NOT&nbsp;NULL&nbsp;<br/>DEPT_DESC&nbsp;NOT&nbsp;NULL&nbsp;<br/>DEPT_TYPE&nbsp;NULL<br/>低效:&nbsp;(索引不被使用)&nbsp;<br/>Sel&#101;ct&nbsp;DEPT_CODE&nbsp;FROM&nbsp;&nbsp;DEPT&nbsp;&nbsp;o&#114;DER&nbsp;BY&nbsp;&nbsp;DEPT_TYPE&nbsp;<br/>高效:&nbsp;(使用索引)&nbsp;<br/>Sel&#101;ct&nbsp;DEPT_CODE&nbsp;&nbsp;FROM&nbsp;&nbsp;DEPT&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;DEPT_TYPE&nbsp;&gt;&nbsp;0<br/>（30）&nbsp;避免改变索引列的类型.:<br/>当比较不同数据类型的数据时,&nbsp;o&#114;ACLE自动对列进行简单的类型转换.&nbsp;<br/>假设&nbsp;EMPNO是一个数值类型的索引列.&nbsp;<br/>Sel&#101;ct&nbsp;…&nbsp;&nbsp;FROM&nbsp;EMP&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;EMPNO&nbsp;=&nbsp;‘123&#39;&nbsp;<br/>实际上,经过ORACLE类型转换,&nbsp;语句转化为:&nbsp;<br/>Sel&#101;ct&nbsp;…&nbsp;&nbsp;FROM&nbsp;EMP&nbsp;&nbsp;Wh&#101;re&nbsp;&nbsp;EMPNO&nbsp;=&nbsp;TO_NUMBER(‘123&#39;)&nbsp;<br/>幸运的是,类型转换没有发生在索引列上,索引的用途没有被改变.&nbsp;<br/>现在,假设EMP_TYPE是一个字符类型的索引列.&nbsp;<br/>Sel&#101;ct&nbsp;…&nbsp;&nbsp;FROM&nbsp;EMP&nbsp;&nbsp;Wh&#101;re&nbsp;EMP_TYPE&nbsp;=&nbsp;123&nbsp;<br/>这个语句被ORACLE转换为:&nbsp;<br/>Sel&#101;ct&nbsp;…&nbsp;&nbsp;FROM&nbsp;EMP&nbsp;&nbsp;Wh&#101;reTO_NUMBER(EMP_TYPE)=123&nbsp;<br/>因为内部发生的类型转换,&nbsp;这个索引将不会被用到!&nbsp;为了避免ORACLE对你的SQL进行隐式的类型转换,&nbsp;最好把类型转换用显式表现出来.&nbsp;注意当字符和数值比较时,&nbsp;o&#114;ACLE会优先转换数值类型到字符类型<br/>（31）&nbsp;需要当心的Wh&#101;re子句:<br/>某些Sel&#101;ct&nbsp;语句中的Wh&#101;re子句不使用索引.&nbsp;这里有一些例子.&nbsp;<br/>在下面的例子里,&nbsp;(1)‘!=&#39;&nbsp;将不使用索引.&nbsp;记住,&nbsp;索引只能告诉你什么存在于表中,&nbsp;而不能告诉你什么不存在于表中.&nbsp;(2)&nbsp;‘||&#39;是字符连接函数.&nbsp;就象其他函数那样,&nbsp;停用了索引.&nbsp;(3)&nbsp;‘+&#39;是数学函数.&nbsp;就象其他数学函数那样,&nbsp;停用了索引.&nbsp;(4)相同的索引列不能互相比较,这将会启用全表扫描.<br/>（32）&nbsp;a.&nbsp;如果检索数据量超过30%的表中记录数.使用索引将没有显著的效率提高.&nbsp;<br/>b.&nbsp;在特定情况下,&nbsp;使用索引也许会比全表扫描慢,&nbsp;但这是同一个数量级上的区别.&nbsp;而通常情况下,使用索引比全表扫描要块几倍乃至几千倍!<br/>（33）&nbsp;避免使用耗费资源的操作:<br/>带有DISTINCT,UNION,MINUS,INTERSECT,ORDER&nbsp;BY的SQL语句会启动SQL引擎&nbsp;<br/>执行耗费资源的排序(SORT)功能.&nbsp;DISTINCT需要一次排序操作,&nbsp;而其他的至少需要执行两次排序.&nbsp;通常,&nbsp;带有UNION,&nbsp;MINUS&nbsp;,&nbsp;INTERSECT的SQL语句都可以用其他方式重写.&nbsp;如果你的数据库的SORT_AREA_SIZE调配得好,&nbsp;使用UNION&nbsp;,&nbsp;MINUS,&nbsp;INTERSECT也是可以考虑的,&nbsp;毕竟它们的可读性很强<br/>（34）&nbsp;优化GROUP&nbsp;BY:<br/>提高GROUP&nbsp;BY&nbsp;语句的效率,&nbsp;可以通过将不需要的记录在GROUP&nbsp;BY&nbsp;之前过滤掉.下面两个查询返回相同结果但第二个明显就快了许多.<br/>低效:&nbsp;<br/>Sel&#101;ct&nbsp;JOB&nbsp;,&nbsp;AVG(SAL)&nbsp;<br/>FROM&nbsp;EMP&nbsp;<br/>GROUP&nbsp;JOB&nbsp;<br/>HAVING&nbsp;JOB&nbsp;=&nbsp;‘PRESIDENT&#39;&nbsp;<br/>o&#114;&nbsp;JOB&nbsp;=&nbsp;‘MANAGER&#39;&nbsp;<br/>高效:&nbsp;<br/>Sel&#101;ct&nbsp;JOB&nbsp;,&nbsp;AVG(SAL)&nbsp;<br/>FROM&nbsp;EMP&nbsp;<br/>Wh&#101;re&nbsp;JOB&nbsp;=&nbsp;‘PRESIDENT&#39;&nbsp;<br/>o&#114;&nbsp;JOB&nbsp;=&nbsp;‘MANAGER&#39;&nbsp;<br/>GROUP&nbsp;JOB]]></description>
		</item>
		
			<item>
			<link>http://www.cn31.com/default.asp?id=947</link>
			<title><![CDATA[如何在pb9中调用WebService]]></title>
			<author>zoubo265168@126.com(bob520)</author>
			<category><![CDATA[PB设计]]></category>
			<pubDate>Sat,22 Mar 2008 19:20:08 +0800</pubDate>
			<guid>http://www.cn31.com/default.asp?id=947</guid>	
		<description><![CDATA[网上找到的文章，不错。<br/>用一个实例来说明：&nbsp;新建应用,这些步骤与pb8一致的。然后建立一个WebService&nbsp;&nbsp;Proxy&nbsp;&nbsp;Wizard,下一步会提示你输入WSDL文件，点击浏览选择，假设是C:\inetpub\wwwroot\的service1.wsdl文件。点击下一步，会自动出现WSDL文件中的Service.点击下一步，系统默认选择ServiceSoap，紧接着输入proxy&nbsp;&nbsp;name(代理对象名)，输入test_ws.后面的几项按默认即可。&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;完成后是编译代理对象的界面。会出现：&nbsp;<br/><br/>Web&nbsp;Service&nbsp;Generator&nbsp;Project&nbsp;Status<br/><br/>Deployment&nbsp;PBL:&nbsp;&nbsp;E:\333\test.pbl<br/><br/>Clear&nbsp;PBL&nbsp;on&nbsp;build:&nbsp;&nbsp;No<br/><br/>Confirm&nbsp;overwrites:&nbsp;&nbsp;No<br/><br/>WSDL&nbsp;Location:&nbsp;&nbsp;<a href="http://192.168.0.50/Service.wsdl" target="_blank">http://192.168.0.50/Service.wsdl</a><br/><br/>Services&nbsp;sel&#101;cted&nbsp;:<br/>&#160;&#160;&#160;&#160;Service&nbsp;Service:<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ServiceSoap<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;可以在属性中设置，也可以不用去管。点击编译的绿色图标，好了，一个代理对象生成了。&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;在左边的treeview中可以看到如:test_wsservice1soap的东西。&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;点击加号的图标，在function中可以看到里面的我们定义的helloworld()&nbsp;&nbsp;returns&nbsp;&nbsp;string.&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;好了最重要的一步已经完成了，我们来测试一下：&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;建一个windows，添加一个文本框和按钮控件。&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;在cb_1.click事件写入：&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;SoapConnection&nbsp;&nbsp;conn&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Test_wsservice1soap&nbsp;&nbsp;test_ws&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;rVal&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;&nbsp;=&nbsp;&nbsp;cr&#101;ate&nbsp;&nbsp;SoapConnection&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;rVal&nbsp;&nbsp;=&nbsp;&nbsp;Conn.Cr&#101;ateInstance(test_ws,&nbsp;&nbsp;&#34;test_wsservice1soap&#34;)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;sle_1.text&nbsp;&nbsp;=&nbsp;&nbsp;test_ws.helloworld()&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;destroy&nbsp;&nbsp;conn&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;好了，保存，会提示SoapConnection未定义。&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;增加PBSoapClient90.pbd到库列表中。PBSoapClient90.pbd在pb安装目录下&nbsp;&nbsp;&nbsp;&nbsp;Shared\PowerBuilder。增加后左边treeview会出现soapconnection，SOAP&nbsp;&nbsp;server&nbsp;&nbsp;pexception&nbsp;两个对象.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;运行，点击按钮，文本框中出现&#34;HELLO&nbsp;WORLD&#34;&nbsp;<br/><br/><span style="color:Red">&nbsp;&nbsp;&nbsp;&nbsp;注意的是:Service1.asmx文件在服务器上是可以运行的，否则不会出现东西的</span>]]></description>
		</item>
		
			<item>
			<link>http://www.cn31.com/default.asp?id=946</link>
			<title><![CDATA[PB使DataWindow列只能追加不能修改]]></title>
			<author>zoubo265168@126.com(bob520)</author>
			<category><![CDATA[PB设计]]></category>
			<pubDate>Sat,22 Mar 2008 19:15:17 +0800</pubDate>
			<guid>http://www.cn31.com/default.asp?id=946</guid>	
		<description><![CDATA[如何使DataWindow中的数据只能追加新记录而不能修改，利用&nbsp;Column&nbsp;的&nbsp;Protect&nbsp;属性可以很方便的做到这一点，方法如下：<br/>将每一列的&nbsp;Protect&nbsp;属性设置为：<br/>If(&nbsp;IsRowNew(),&nbsp;0,&nbsp;1)&nbsp;)<br/>在&nbsp;PowerScript&nbsp;中可以动态修改&nbsp;Protect&nbsp;属性：<br/>dw_1.Modify(&#34;column_name_here.Protect=&#39;1~tIf(IsRowNew(),0,1)&#39;&#34;)<br/>这样，DataWindow&nbsp;中只有新追加的记录可修改，而其他记录是只读的。]]></description>
		</item>
		
			<item>
			<link>http://www.cn31.com/default.asp?id=945</link>
			<title><![CDATA[Oracle查看用户默认表空间使用情况的sql语句]]></title>
			<author>zoubo265168@126.com(bob520)</author>
			<category><![CDATA[PB设计]]></category>
			<pubDate>Sat,22 Mar 2008 19:13:02 +0800</pubDate>
			<guid>http://www.cn31.com/default.asp?id=945</guid>	
		<description><![CDATA[查看用户默认的表空间.sql：<br/><br/>sel&#101;ct&nbsp;username,default_tablespace&nbsp;from&nbsp;dba_users;<br/><br/>查看各个表空间占用磁盘情况.sql：<br/><br/><span style="color:Purple">sel&#101;ct&nbsp;<br/>b.file_id&nbsp;文件ID号,&nbsp;<br/>b.tablespace_name&nbsp;表空间名,&nbsp;<br/>b.bytes/1024/1024||&#39;M&#39;字节数,&nbsp;<br/>(b.bytes-sum(nvl(a.bytes,0)))/1024/1024||&#39;M&#39;&nbsp;已使用,&nbsp;<br/>sum(nvl(a.bytes,0))/1024/1024||&#39;M&#39;&nbsp;剩余空间,&nbsp;<br/>100&nbsp;-&nbsp;sum(nvl(a.bytes,0))/(b.bytes)*100&nbsp;占用百分比&nbsp;<br/>from&nbsp;dba_free_space&nbsp;a,dba_data_files&nbsp;b&nbsp;<br/>wh&#101;re&nbsp;a.file_id=b.file_id&nbsp;<br/>group&nbsp;by&nbsp;b.tablespace_name,b.file_id,b.bytes&nbsp;<br/>o&#114;der&nbsp;by&nbsp;b.file_id&nbsp;</span><br/><br/>以上2者关联，就是查看用户默认表空间使用情况的sql语句：<br/><br/><span style="color:Purple">Sel&#101;ct&nbsp;*<br/>FROM&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(sel&#101;ct&nbsp;username,default_tablespace&nbsp;from&nbsp;dba_users)&nbsp;ut,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(sel&#101;ct&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--b.file_id&nbsp;文件ID号,&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.tablespace_name&nbsp;表空间名,&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.bytes/1024/1024||&#39;M&#39;字节数,&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(b.bytes-sum(nvl(a.bytes,0)))/1024/1024||&#39;M&#39;&nbsp;已使用,&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum(nvl(a.bytes,0))/1024/1024||&#39;M&#39;&nbsp;剩余空间,&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100&nbsp;-&nbsp;sum(nvl(a.bytes,0))/(b.bytes)*100&nbsp;占用百分比&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;dba_free_space&nbsp;a,dba_data_files&nbsp;b&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wh&#101;re&nbsp;a.file_id=b.file_id&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group&nbsp;by&nbsp;b.tablespace_name,b.file_id,b.bytes&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&#114;der&nbsp;by&nbsp;b.file_id&nbsp;)&nbsp;tsu<br/>Wh&#101;re&nbsp;ut.default_tablespace&nbsp;=&nbsp;tsu.表空间名<br/>o&#114;DER&nbsp;BY&nbsp;ut.username</span>]]></description>
		</item>
		
			<item>
			<link>http://www.cn31.com/default.asp?id=944</link>
			<title><![CDATA[如何查看死锁]]></title>
			<author>zoubo265168@126.com(bob520)</author>
			<category><![CDATA[PB设计]]></category>
			<pubDate>Sat,22 Mar 2008 19:11:33 +0800</pubDate>
			<guid>http://www.cn31.com/default.asp?id=944</guid>	
		<description><![CDATA[执行<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.cn31.com/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent"><br/>Sel&#101;ct&nbsp;&nbsp;&nbsp;/*+&nbsp;rule&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.spid&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.username<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.sid<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.serial#<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.status<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.osuser<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,DECODE&nbsp;(l.lmode,&nbsp;0,&nbsp;&#39;lock&nbsp;waiter&#39;,&nbsp;&#39;lock&nbsp;holder&#39;)&nbsp;resp<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.program<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,SUBSTR&nbsp;(s.module,&nbsp;INSTR&nbsp;(s.module,&nbsp;&#39;/&#39;,&nbsp;-1)&nbsp;+&nbsp;1,&nbsp;20)&nbsp;module<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.sql_hash_value<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.sql_address<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,l.id1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,l.TYPE<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.logon_time<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.paddr<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,l.lmode<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,l.request<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,l.ctime<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.row_wait_obj#<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.row_wait_file#<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.row_wait_block#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;v$session&nbsp;s<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,v$process&nbsp;p<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,v$lock&nbsp;l<br/>&nbsp;&nbsp;&nbsp;Wh&#101;re&nbsp;l.id1&nbsp;IN&nbsp;(Sel&#101;ct&nbsp;c.id1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;v$lock&nbsp;c<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wh&#101;re&nbsp;c.lmode&nbsp;=&nbsp;0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;l.sid&nbsp;=&nbsp;s.sid<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;s.paddr=p.addr<br/>o&#114;DER&nbsp;BY&nbsp;l.id1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,resp<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,ctime<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,s.logon_time<br/></div></div><br/>解决办法：<br/>//-------------------------<br/>o&#114;acle下：&nbsp;alert&nbsp;system&nbsp;kill&nbsp;session&nbsp;&#39;sid,serial#&#39;<br/>unix下：&nbsp;&nbsp;&nbsp;kill&nbsp;-9&nbsp;spid]]></description>
		</item>
		
			<item>
			<link>http://www.cn31.com/default.asp?id=943</link>
			<title><![CDATA[ORACLE连接数]]></title>
			<author>zoubo265168@126.com(bob520)</author>
			<category><![CDATA[PB设计]]></category>
			<pubDate>Sat,22 Mar 2008 19:09:41 +0800</pubDate>
			<guid>http://www.cn31.com/default.asp?id=943</guid>	
		<description><![CDATA[直接在PL/SQL执行<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.cn31.com/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent"><br/>sel&#101;ct&nbsp;*&nbsp;from&nbsp;v$session<br/></div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.cn31.com/default.asp?id=942</link>
			<title><![CDATA[oracle 查看表空间]]></title>
			<author>zoubo265168@126.com(bob520)</author>
			<category><![CDATA[PB设计]]></category>
			<pubDate>Sat,22 Mar 2008 19:07:53 +0800</pubDate>
			<guid>http://www.cn31.com/default.asp?id=942</guid>	
		<description><![CDATA[1.查看某个表空间内所占空间大于某个值的段（表或索引）:&nbsp;&nbsp;Sel&#101;ct&nbsp;segment_name,bytes&nbsp;FROM&nbsp;dba_segments&nbsp;Wh&#101;re&nbsp;bytes&gt;10000000&nbsp;AND&nbsp;tablespace_name=&#39;tablespace_name&#39;;&nbsp;<br/>2.查看某个表空间内最大连续的自由空间大小:&nbsp;&nbsp;&nbsp;Sel&#101;ct&nbsp;tablespace_name,max(bytes)&nbsp;FROM&nbsp;dba_free_space&nbsp;GROUP&nbsp;BY&nbsp;tablespace_name&nbsp;o&#114;DER&nbsp;BY&nbsp;max(bytes);&nbsp;<br/>3.查看所有表空间的碎片程度（值在30以下表示碎片很多）<br/>sel&#101;ct&nbsp;tablespace_name,sum(bytes),sum(free),sum(free)*100/sum(bytes)&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;(sel&#101;ct&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.file_id&nbsp;&nbsp;file_ID,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.tablespace_name&nbsp;&nbsp;tablespace_name,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.bytes&nbsp;&nbsp;Bytes,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(b.bytes-sum(nvl(a.bytes,0)))&nbsp;&nbsp;used,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum(nvl(a.bytes,0))&nbsp;&nbsp;free,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum(nvl(a.bytes,0))/(b.bytes)*100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Percent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;dba_free_space&nbsp;a,dba_data_files&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wh&#101;re&nbsp;a.file_id=b.file_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group&nbsp;by&nbsp;b.tablespace_name,b.file_id,b.bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&#114;der&nbsp;by&nbsp;b.file_id)&nbsp;group&nbsp;by&nbsp;tablespace_name&nbsp;o&#114;der&nbsp;by&nbsp;sum(free)*100/sum(bytes);&nbsp;&nbsp;<br/>4.迅速收缩临时段（适用于临时段表空间收缩很慢的情况）&nbsp;&nbsp;<br/>&nbsp;alt&#101;r&nbsp;tablespace&nbsp;temp&nbsp;default&nbsp;storage(pctincrease&nbsp;1)；&nbsp;&nbsp;&nbsp;<br/>&nbsp;alt&#101;r&nbsp;tablespace&nbsp;temp&nbsp;default&nbsp;storage(pctincrease&nbsp;0)；<br/>&nbsp;5.查看自上次数据库启动以来所有数据文件的读写次数&nbsp;&nbsp;&nbsp;<br/>sel&#101;ct&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;substr(DF.NAME,1,5)&nbsp;Drive,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DF.NAME&nbsp;file_name,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fs.phyblkrd+fs.phyblkwrt)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;v$filestat&nbsp;fs,v$datafile&nbsp;df&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wh&#101;re&nbsp;&nbsp;df.file#=fs.file#;&nbsp;<br/>&nbsp;6.查看某用户下段存储的大小&nbsp;&nbsp;&nbsp;sel&#101;ct&nbsp;SEGMENT_NAME,BYTES&nbsp;from&nbsp;dba_segments&nbsp;wh&#101;re&nbsp;segment_type=&#39;TABLE&#39;&nbsp;and&nbsp;owner=&#39;owner_name&#39;&nbsp;;&nbsp;&nbsp;&nbsp;sel&#101;ct&nbsp;SEGMENT_NAME,BYTES&nbsp;from&nbsp;dba_segments&nbsp;wh&#101;re&nbsp;segment_type=&#39;INDEX&#39;&nbsp;and&nbsp;owner=&#39;owner_name&#39;&nbsp;;<br/>由于oracle提供的oem工具的局限性，所以很多时候dba必需借助于一些脚本来管理、调优数据库。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.cn31.com/default.asp?id=941</link>
			<title><![CDATA[PB生成XML文件]]></title>
			<author>zoubo265168@126.com(bob520)</author>
			<category><![CDATA[PB设计]]></category>
			<pubDate>Sat,22 Mar 2008 19:04:54 +0800</pubDate>
			<guid>http://www.cn31.com/default.asp?id=941</guid>	
		<description><![CDATA[直接在代码写上<div class="UBBPanel"><div class="UBBTitle"><img src="http://www.cn31.com/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">dw_1.saveas(files,xml!,true)</div></div>]]></description>
		</item>
		
</channel>
</rss>