﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-faintbear-随笔分类-ORACLE</title><link>http://www.blogjava.net/faintbear/category/705.html</link><description>小风嗖嗖的刮着......</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:32:10 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:32:10 GMT</pubDate><ttl>60</ttl><item><title>ORACLE : invalid specification for system parameter</title><link>http://www.blogjava.net/faintbear/archive/2005/04/26/3811.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Tue, 26 Apr 2005 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/04/26/3811.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/3811.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/04/26/3811.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/3811.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/3811.html</trackback:ping><description><![CDATA[今天startup&nbsp; 发现invalid specification for system parameter 错误提示<BR>注释掉initXX.ora里面的mts所有参数.启动okay<BR><BR><STRONG>&nbsp;一、简介<BR><BR></STRONG>&nbsp; MTS（Multi-Threaded Server）是ORACLE SERVER的一个可选的配置选择，是相对DEDICATE方式而言，它最大的优点是在以不用增加物理资源（内存）的前提下支持更多的并发的连接。换句话说，如果你只有2G的物理内存，而你又想支持2000个连接，在获取最好性能的前提下，你就应该选择MTS了。<BR><BR>&nbsp; 本文先说一说MTS的工作方式，然后与DEDICATE方式的做一下比较，接下来说一下MTS具体配置实现，最后说一些优化MTS配置选项的问题。<BR><BR><STRONG>&nbsp; 二、MTS的工作方式<BR></STRONG><BR><STRONG>&nbsp; 1、Joseph C.Johnson以餐馆给出一个MTS的形象的比喻</STRONG><BR><BR>&nbsp; 假设ORACLE是一家餐馆，当你走进一家餐馆时你感觉最舒服的服务方式就是有一个专门的waiter来为你服务，而不管餐馆中来了多少人，她只对你请求应答，这是DEDICTE的处理方式，也就是说每一个ORACLE客户端的连接都有一个专门的服务进程来为它服务。而大部的餐馆的服方式都不是一对一的，当你走进的时侯，你就被指定了一个waiter，她也可能为其它桌服着务，这对于餐馆来说是最有利的，因为他们可以服务更多的客人而不需要增加他们的员工。这样对你来说也可能是不错的，如果餐馆不是太忙，她服务的客人的请求都很简短且容易完成，你的感觉也好像自己拥有一个专门的waiter，waiter把你的ORDER转给厨师，然后把做好的菜拿给你，这就是MTS的处理方式，这些共享的waiters我们叫她们为Dispatchers，厨师我们则叫他们为Shared Server Processes。<BR><BR><STRONG>&nbsp; 2、以简图说一下MTS的工作方式(SYBEX书中的一幅图)<BR>
<P align=center><IMG height=387 alt=20040301_Oracle.jpg src="http://www.blogjava.net/images/blogjava_net/faintbear/20040301_Oracle.jpg" width=505 border=0><BR></STRONG><BR><BR>&nbsp;1)客户端向Dispatcher发一个服务请求<BR><BR>&nbsp; 2)Dispatch把这个请求放到SGA区的请求对队列中<BR><BR>&nbsp; 3)由一个或几个服务进程来处理这个请求<BR><BR>&nbsp; 4)服务进程把进行的结果放到Dispatch的SGA区的的响应队列中<BR><BR>&nbsp; 5)Dispatcher从响应队列拾起结果<BR><BR>&nbsp; 6)完成客户端的请求并把结果回送给客户端<BR><BR><STRONG>&nbsp; 三、MTS与DEDICATE方式方面做一下比较，为方便比较绘制如下的简表<BR></STRONG><BR></P>
<P></P>
<P align=center>
<TABLE class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 558px; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; HEIGHT: 204px; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 align=center border=1>
<TBODY>
<TR style="mso-yfti-irow: 0">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #ccffff; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 32.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt" vAlign=top width=43>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">序号</SPAN><SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></B></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #ccffff; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 135pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=180>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比较项</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #ccffff; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 135pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=180>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><FONT face=宋体><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>MTS</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方式</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></FONT></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #ccffff; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 123.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=165>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><FONT face=宋体><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US>DEDICATE</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方式</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></FONT></P></TD></TR>
<TR style="mso-yfti-irow: 1">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 32.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=43>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US><FONT face=宋体>1</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 135pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=180>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务进程</SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 135pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=180>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">多个连接共享一个服务进程</SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 123.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=165>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个连接有一个专门的服务进程</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 2">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 32.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=43>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US><FONT face=宋体>2</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 135pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=180>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">每个客户端的连接使用的内存量</SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 135pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=180>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US><FONT face=宋体>3-4M</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 123.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=165>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US><FONT face=宋体>150-200K<o:p></o:p></FONT></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 3">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 32.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=43>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US><FONT face=宋体>3</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 135pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=180>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">适合的应用环境</SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 135pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=180>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">适合连接数很多且请求很短少的</SPAN><FONT face=宋体><SPAN lang=EN-US>OLTP</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">环境</SPAN></FONT></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 123.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=165>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果</SPAN><FONT face=宋体><SPAN lang=EN-US>Oracle</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器的资源够用，这种方式是优选</SPAN></FONT></P></TD></TR>
<TR style="mso-yfti-irow: 4; mso-yfti-lastrow: yes">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 32.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=43>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US><FONT face=宋体>4</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 135pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=180>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><FONT face=宋体><SPAN lang=EN-US>CPU</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">负载</SPAN></FONT></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 135pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=180>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会造成一些</SPAN><FONT face=宋体><SPAN lang=EN-US>CPU</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的负载，如果你的</SPAN><SPAN lang=EN-US>CPU</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有瓶颈，则不要用这种方式</SPAN></FONT></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 123.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=165>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><SPAN lang=EN-US><o:p><FONT face=宋体>&nbsp;</FONT></o:p></SPAN></P></TD></TR></TBODY></TABLE></P>
<P>&nbsp;</P>
<P align=center><BR><BR>&nbsp;</P><img src ="http://www.blogjava.net/faintbear/aggbug/3811.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-04-26 10:33 <a href="http://www.blogjava.net/faintbear/archive/2005/04/26/3811.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 函数速查手册 </title><link>http://www.blogjava.net/faintbear/archive/2005/04/21/3562.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Thu, 21 Apr 2005 01:20:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/04/21/3562.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/3562.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/04/21/3562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/3562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/3562.html</trackback:ping><description><![CDATA[
<SCRIPT>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</SCRIPT>
<FONT size=2>&nbsp;</FONT>
<DIV class=post>
<DIV class=postTitle><A href="http://blog.csdn.net/faintbear/archive/2004/12/29/232908.aspx"><FONT size=2>oracle 函数速查手册</FONT></A><FONT size=2> </FONT></DIV>
<DIV class=postText>
<TABLE class=article cellSpacing=2 cellPadding=2 width=560 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top>
<CENTER><FONT size=2><FONT class=f18 color=#05006c><B>Oracle函数列表速查</B></FONT> 
<HR SIZE=1 bgcolor="#d9d9d9">
2004-10-20 22:53:13 </FONT></CENTER><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><FONT class=f14>
<P align=right><FONT size=2></FONT>&nbsp;</P><FONT size=2>PL/SQL单行函数和组函数详解<BR>　函数是一种有零个或多个参数并且有一个返回值的程序。在SQL中Oracle内建了一系列函数，这些函数都可被称为SQL或PL/SQL语句，函数主要分为两大类： </FONT>
<P></P>
<P><BR><FONT size=2>　　 单行函数</FONT></P>
<P><BR><FONT size=2>　　 组函数 </FONT></P>
<P><BR><FONT size=2>　　本文将讨论如何利用单行函数以及使用规则。</FONT></P>
<P><BR><FONT size=2>　　SQL中的单行函数</FONT></P>
<P><BR><FONT size=2>　　SQL和PL/SQL中自带很多类型的函数，有字符、数字、日期、转换、和混合型等多种函数用于处理单行数据，因此这些都可被统称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY等子句中，例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX等单行函数。<BR>SELECT ename,TO_CHAR(hiredate,''day,DD-Mon-YYYY'')FROM empWhere UPPER(ename) Like ''AL%''ORDER BY SOUNDEX(ename)</FONT></P>
<P><BR><FONT size=2>　　单行函数也可以在其他语句中使用，如update的SET子句，INSERT的VALUES子句，DELET的WHERE子句,认证考试特别注意在SELECT语句中使用这些函数，所以我们的注意力也集中在SELECT语句中。</FONT></P>
<P><BR><FONT size=2>　　NULL和单行函数</FONT></P>
<P><BR><FONT size=2>　　在如何理解NULL上开始是很困难的，就算是一个很有经验的人依然对此感到困惑。NULL值表示一个未知数据或者一个空值，算术操作符的任何一个操作数为NULL值，结果均为提个NULL值,这个规则也适合很多函数，只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL值。在这些中NVL函数时最重要的，因为他能直接处理NULL值，NVL有两个参数：NVL(x1,x2),x1和x2都式表达式，当x1为null时返回X2,否则返回x1。</FONT></P>
<P><BR><FONT size=2>　　下面我们看看emp数据表它包含了薪水、奖金两项，需要计算总的补偿<BR>column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2</FONT></P>
<P><BR><FONT size=2>　　不是简单的将薪水和奖金加起来就可以了，如果某一行是null值那么结果就将是null，比如下面的例子：<BR>update empset salary=(salary+bonus)*1.1</FONT></P>
<P><BR><FONT size=2>　　这个语句中，雇员的工资和奖金都将更新为一个新的值，但是如果没有奖金，即 salary + null,那么就会得出错误的结论，这个时候就要使用nvl函数来排除null值的影响。<BR>所以正确的语句是：<BR>update empset salary=(salary+nvl(bonus,0)*1.1<BR>单行字符串函数</FONT></P>
<P><BR><FONT size=2>　　单行字符串函数用于操作字符串数据，他们大多数有一个或多个参数，其中绝大多数返回字符串</FONT></P>
<P><BR><FONT size=2>　　ASCII()<BR>　　c1是一字符串，返回c1第一个字母的ASCII码，他的逆函数是CHR()<BR>SELECT ASCII(''A'') BIG_A,ASCII(''z'') BIG_z FROM empBIG_A BIG_z65 122</FONT></P>
<P><BR><FONT size=2>　　CHR(＜i＞)[NCHAR_CS]<BR>　　i是一个数字，函数返回十进制表示的字符<BR>select CHR(65),CHR(122),CHR(223) FROM empCHR65 CHR122 CHR223A z B</FONT></P>
<P><BR><FONT size=2>　　CONCAT(,)<BR>　　c1,c2均为字符串，函数将c2连接到c1的后面，如果c1为null,将返回c2.如果c2为null,则返回c1，如果c1、c2都为null，则返回null。他和操作符||返回的结果相同<BR>select concat(''slobo '',''Svoboda'') username from dualusernameslobo Syoboda</FONT></P>
<P><BR><FONT size=2>　　INITCAP()<BR>　　c1为一字符串。函数将每个单词的第一个字母大写其它字母小写返回。单词由空格，控制字符，标点符号限制。<BR>select INITCAP(''veni,vedi,vici'') Ceasar from dualCeasarVeni,Vedi,Vici</FONT></P>
<P><BR><FONT size=2>　　INSTR(,[,＜i＞[,]])<BR>　　c1,c2均为字符串，i,j为整数。函数返回c2在c1中第j次出现的位置，搜索从c1的第i个字符开始。当没有发现需要的字符时返回0,如果i为负数，那么搜索将从右到左进行，但是位置的计算还是从左到右，i和j的缺省值为1.<BR>select INSTR(''Mississippi'',''i'',3,3) from dualINSTR(''MISSISSIPPI'',''I'',3,3)11select INSTR(''Mississippi'',''i'',-2,3) from dualINSTR(''MISSISSIPPI'',''I'',3,3)2</FONT></P>
<P><BR><FONT size=2>　　INSTRB(,[,i[,j])<BR>　　与INSTR（）函数一样，只是他返回的是字节，对于单字节INSTRB()等于INSTR()</FONT></P>
<P><BR><FONT size=2>　　LENGTH()<BR>　　c1为字符串，返回c1的长度，如果c1为null，那么将返回null值。<BR>select LENGTH(''Ipso Facto'') ergo from dualergo10</FONT></P>
<P><BR><FONT size=2>　　LENGTHb()<BR>　　与LENGTH()一样，返回字节.</FONT></P>
<P><BR><FONT size=2>　　lower()<BR>　　返回c的小写字符，经常出现在where子串中<BR>select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE ''%white%''COLORNAMEWinterwhite</FONT></P>
<P><BR><FONT size=2>　　LPAD(,＜i＞[,])<BR>　　c1,c2均为字符串，i为整数。在c1的左侧用c2字符串补足致长度i,可多次重复，如果i小于c1的长度，那么只返回i那么长的c1字符，其他的将被截去。c2的缺省值为单空格，参见RPAD。<BR>select LPAD(answer,7,'''') padded,answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybe</FONT></P>
<P><BR><FONT size=2>　　LTRIM(,)<BR>　　把c1中最左边的字符去掉，使其第一个字符不在c2中，如果没有c2，那么c1就不会改变。<BR>select LTRIM(''Mississippi'',''Mis'') from dualLTRppi</FONT></P>
<P><BR><FONT size=2>　　RPAD(,＜i＞[,]) <BR>　　在c1的右侧用c2字符串补足致长度i,可多次重复，如果i小于c1的长度，那么只返回i那么长的c1字符，其他的将被截去。c2的缺省值为单空格,其他与LPAD相似</FONT></P>
<P><BR><FONT size=2>　　RTRIM(,)<BR>　　把c1中最右边的字符去掉，使其第后一个字符不在c2中，如果没有c2，那么c1就不会改变。</FONT></P>
<P><BR><FONT size=2>　　REPLACE(,[,])<BR>　　c1,c2,c3都是字符串，函数用c3代替出现在c1中的c2后返回。<BR>select REPLACE(''uptown'',''up'',''down'') from dualREPLACEdowntown</FONT></P>
<P><BR><FONT size=2>　　STBSTR(,＜i＞[,])<BR>　　c1为一字符串，i,j为整数，从c1的第i位开始返回长度为j的子字符串，如果j为空，则直到串的尾部。<BR>select SUBSTR(''Message'',1,4) from dualSUBSMess</FONT></P>
<P><BR><FONT size=2>　　SUBSTRB(,＜i＞[,])<BR>　　与SUBSTR大致相同，只是I,J是以字节计算。</FONT></P>
<P><BR><FONT size=2>　　SOUNDEX()<BR>　　返回与c1发音相似的词<BR>select SOUNDEX(''dawes'') Dawes SOUNDEX(''daws'') Daws, SOUNDEX(''dawson'') from dualDawes Daws DawsonD200 D200 D250</FONT></P>
<P><BR><FONT size=2>　　TRANSLATE(,,)<BR>　　将c1中与c2相同的字符以c3代替<BR>select TRANSLATE(''fumble'',''uf'',''ar'') test from dualTEXTramble </FONT></P>
<P><BR><FONT size=2>　　TRIM([[]] from c3)<BR>　　将c3串中的第一个，最后一个，或者都删除。<BR>select TRIM('' space padded '') trim from dual TRIMspace padded</FONT></P>
<P><BR><FONT size=2>　　UPPER()<BR>　　返回c1的大写，常出现where子串中<BR>select name from dual where UPPER(name) LIKE ''KI%''NAMEKING<BR>单行数字函数</FONT></P>
<P><BR><FONT size=2>　　单行数字函数操作数字数据，执行数学和算术运算。所有函数都有数字参数并返回数字值。所有三角函数的操作数和值都是弧度而不是角度，oracle没有提供内建的弧度和角度的转换函数。</FONT></P>
<P><BR><FONT size=2>　　ABS()<BR>　　返回n的绝对值</FONT></P>
<P><BR><FONT size=2>　　ACOS()<BR>　　反余玄函数，返回-1到1之间的数。n表示弧度<BR>select ACOS(-1) pi,ACOS(1) ZERO FROM dualPI ZERO3.14159265 0 </FONT></P>
<P><BR><FONT size=2>　　ASIN()<BR>　　反正玄函数，返回-1到1，n表示弧度</FONT></P>
<P><BR><FONT size=2>　　ATAN()<BR>　　反正切函数，返回n的反正切值，n表示弧度。</FONT></P>
<P><BR><FONT size=2>　　CEIL()<BR>　　返回大于或等于n的最小整数。</FONT></P>
<P><BR><FONT size=2>　　COS()<BR>　　返回n的余玄值，n为弧度</FONT></P>
<P><BR><FONT size=2>　　COSH()<BR>　　返回n的双曲余玄值，n 为数字。<BR>select COSH(&lt;1.4&gt;) FROM dualCOSH(1.4)2.15089847</FONT></P>
<P><BR><FONT size=2>　　EXP()<BR>　　返回e的n次幂，e=2.71828183.</FONT></P>
<P><BR><FONT size=2>　　FLOOR()<BR>　　返回小于等于N的最大整数。</FONT></P>
<P><BR><FONT size=2>　　LN()<BR>　　返回N的自然对数，N必须大于0</FONT></P>
<P><BR><FONT size=2>　　LOG(,)<BR>　　返回以n1为底n2的对数</FONT></P>
<P><BR><FONT size=2>　　MOD()<BR>　　返回n1除以n2的余数，</FONT></P>
<P><BR><FONT size=2>　　POWER(,)<BR>　　返回n1的n2次方</FONT></P>
<P><BR><FONT size=2>　　ROUND(,)<BR>　　返回舍入小数点右边n2位的n1的值，n2的缺省值为0，这回将小数点最接近的整数，如果n2为负数就舍入到小数点左边相应的位上，n2必须是整数。<BR>select ROUND(12345,-2),ROUND(12345.54321,2) FROM dualROUND(12345,-2) ROUND(12345.54321,2)12300 12345.54</FONT></P>
<P><BR><FONT size=2>　　SIGN()<BR>　　如果n为负数，返回-1,如果n为正数，返回1，如果n=0返回0.</FONT></P>
<P><BR><FONT size=2>　　SIN（)<BR>　　返回n的正玄值,n为弧度。</FONT></P>
<P><BR><FONT size=2>　　SINH()<BR>　　返回n的双曲正玄值,n为弧度。</FONT></P>
<P><BR><FONT size=2>　　SQRT()<BR>　　返回n的平方根,n为弧度</FONT></P>
<P><BR><FONT size=2>　　TAN（)<BR>　　返回n的正切值,n为弧度</FONT></P>
<P><BR><FONT size=2>　　TANH()<BR>　　返回n的双曲正切值,n为弧度</FONT></P>
<P><BR><FONT size=2>　　TRUNC(,)<BR>　　返回截尾到n2位小数的n1的值，n2缺省设置为0，当n2为缺省设置时会将n1截尾为整数，如果n2为负值，就截尾在小数点左边相应的位上。</FONT></P></FONT></TD></TR></TBODY></TABLE><BR><BR><BR><FONT size=2>单行日期函数 </FONT>
<P></P>
<P><BR><FONT size=2>　　单行日期函数操作DATA数据类型，绝大多数都有DATA数据类型的参数，绝大多数返回的也是DATA数据类型的值。</FONT></P>
<P><BR><FONT size=2>　　ADD_MONTHS(,＜i＞)<BR>　　返回日期d加上i个月后的结果。i可以使任意整数。如果i是一个小数，那么数据库将隐式的他转换成整数，将会截去小数点后面的部分。</FONT></P>
<P><BR><FONT size=2>　　LAST_DAY()<BR>　　函数返回包含日期d的月份的最后一天 </FONT></P>
<P><BR><FONT size=2>　　MONTHS_BETWEEN(,)<BR>　　返回d1和d2之间月的数目,如果d1和d2的日的日期都相同，或者都使该月的最后一天，那么将返回一个整数，否则会返回的结果将包含一个分数。</FONT></P>
<P><BR><FONT size=2>　　NEW_TIME(,,)<BR>　　d1是一个日期数据类型，当时区tz1中的日期和时间是d时，返回时区tz2中的日期和时间。tz1和tz2时字符串。</FONT></P>
<P><BR><FONT size=2>　　NEXT_DAY(,)<BR>　　返回日期d后由dow给出的条件的第一天，dow使用当前会话中给出的语言指定了一周中的某一天，返回的时间分量与d的时间分量相同。<BR>select NEXT_DAY(''01-Jan-2000'',''Monday'') "1st Monday",NEXT_DAY(''01-Nov-2004'',''Tuesday'')+7 "2nd Tuesday") from dual;1st Monday 2nd Tuesday03-Jan-2000 09-Nov-2004 </FONT></P>
<P><BR><FONT size=2>　　ROUND([,])<BR>　　将日期d按照fmt指定的格式舍入，fmt为字符串。</FONT></P>
<P><BR><FONT size=2>　　SYADATE<BR>　　函数没有参数，返回当前日期和时间。</FONT></P>
<P><BR><FONT size=2>　　TRUNC([,]) <BR>　　返回由fmt指定的单位的日期d.<BR>单行转换函数</FONT></P>
<P><BR><FONT size=2>　　单行转换函数用于操作多数据类型，在数据类型之间进行转换。</FONT></P>
<P><BR><FONT size=2>　　CHARTORWID()<BR>　　c 使一个字符串，函数将c转换为RWID数据类型。<BR>SELECT test_id from test_case where rowid=CHARTORWID(''AAAA0SAACAAAALiAAA'') </FONT></P>
<P><BR><FONT size=2>　　CONVERT(,[,])<BR>　　c尾字符串，dset、sset是两个字符集，函数将字符串c由sset字符集转换为dset字符集，sset的缺省设置为数据库的字符集。</FONT></P>
<P><BR><FONT size=2>　　HEXTORAW()<BR>　　x为16进制的字符串，函数将16进制的x转换为RAW数据类型。</FONT></P>
<P><BR><FONT size=2>　　RAWTOHEX()<BR>　　x是RAW数据类型字符串，函数将RAW数据类转换为16进制的数据类型。</FONT></P>
<P><BR><FONT size=2>　　ROWIDTOCHAR()<BR>　　函数将ROWID数据类型转换为CHAR数据类型。</FONT></P>
<P><BR><FONT size=2>　　TO_CHAR([[,)<BR>　　x是一个data或number数据类型，函数将x转换成fmt指定格式的char数据类型，如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制返回的月份和日份所使用的语言。如果x为数字nlsparm=NLS_NUMERIC_CHARACTERS 用来指定小数位和千分位的分隔符，以及货币符号。<BR>NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"</FONT></P>
<P><BR><FONT size=2>　　TO_DATE([,[,）<BR>　　c表示字符串，fmt表示一种特殊格式的字符串。返回按照fmt格式显示的c,nlsparm表示使用的语言。函数将字符串c转换成date数据类型。</FONT></P>
<P><BR><FONT size=2>　　TO_MULTI_BYTE()<BR>　　c表示一个字符串，函数将c的担子截字符转换成多字节字符。</FONT></P>
<P><BR><FONT size=2>　　TO_NUMBER([,[,)<BR>　　c表示字符串，fmt表示一个特殊格式的字符串，函数返回值按照fmt指定的格式显示。nlsparm表示语言，函数将返回c代表的数字。</FONT></P>
<P><BR><FONT size=2>　　TO_SINGLE_BYTE()<BR>　　将字符串c中得多字节字符转化成等价的单字节字符。该函数仅当数据库字符集同时包含单字节和多字节字符时才使用</FONT></P>
<P><BR><FONT size=2>　　其它单行函数</FONT></P>
<P><BR><FONT size=2>　　BFILENAME( <BR>,)<BR>　　dir是一个directory类型的对象，file为一文件名。函数返回一个空的BFILE位置值指示符，函数用于初始化BFILE变量或者是BFILE列。</FONT></P>
<P><BR><FONT size=2>　　DECODE(,,[,,,[])<BR>　　x是一个表达式，m1是一个匹配表达式，x与m1比较，如果m1等于x，那么返回r1,否则,x与m2比较，依次类推m3,m4,m5....直到有返回结果。</FONT></P>
<P><BR><FONT size=2>　　DUMP(,[,[,[,]]])<BR>　　x是一个表达式或字符，fmt表示8进制、10进制、16进制、或则单字符。函数返回包含了有关x的内部表示信息的VARCHAR2类型的值。如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回。</FONT></P>
<P><BR><FONT size=2>　　EMPTY_BLOB()<BR>　　该函数没有参数，函数返回 一个空的BLOB位置指示符。函数用于初始化一个BLOB变量或BLOB列。</FONT></P>
<P><BR><FONT size=2>　　EMPTY_CLOB()<BR>　　该函数没有参数，函数返回 一个空的CLOB位置指示符。函数用于初始化一个CLOB变量或CLOB列。</FONT></P>
<P><BR><FONT size=2>　　GREATEST()<BR>　　exp_list是一列表达式，返回其中最大的表达式，每个表达式都被隐含的转换第一个表达式的数据类型，如果第一个表达式是字符串数据类型中的任何一个，那么返回的结果是varchar2数据类型，同时使用的比较是非填充空格类型的比较。</FONT></P>
<P><BR><FONT size=2>　　LEAST()<BR>　　exp_list是一列表达式，返回其中最小的表达式，每个表达式都被隐含的转换第一个表达式的数据类型，如果第一个表达式是字符串数据类型中的任何一个，将返回的结果是varchar2数据类型，同时使用的比较是非填充空格类型的比较。</FONT></P>
<P><BR><FONT size=2>　　UID<BR>　　该函数没有参数，返回唯一标示当前数据库用户的整数。</FONT></P>
<P><BR><FONT size=2>　　USER<BR>　　返回当前用户的用户名</FONT></P>
<P><BR><FONT size=2>　　USERENV()<BR>　　基于opt返回包含当前会话信息。opt的可选值为：</FONT></P>
<P><BR><FONT size=2>　　ISDBA　 　　会话中SYSDBA脚色响应，返回TRUE <BR>　　SESSIONID 　返回审计会话标示符<BR>　　ENTRYID 　　返回可用的审计项标示符 <BR>　　INSTANCE　　在会话连接后，返回实例标示符。该值只用于运行Parallel 服务器并且有 多个实例的情况下使用。<BR>　　LANGUAGE　　返回语言、地域、数据库设置的字符集。<BR>　　LANG　　　　返回语言名称的ISO缩写。<BR>　　TERMINAL　　为当前会话使用的终端或计算机返回操作系统的标示符。</FONT></P>
<P><BR><FONT size=2>　　VSIZE()<BR>　　x是一个表达式。返回x内部表示的字节数。<BR>SQL中的组函数</FONT></P>
<P><BR><FONT size=2>　　组函数也叫集合函数，返回基于多个行的单一结果，行的准确数量无法确定，除非查询被执行并且所有的结果都被包含在内。与单行函数不同的是，在解析时所有的行都是已知的。由于这种差别使组函数与单行函数有在要求和行为上有微小的差异.</FONT></P>
<P><BR><FONT size=2>　　组（多行）函数</FONT></P>
<P><BR><FONT size=2>　　与单行函数相比，oracle提供了丰富的基于组的，多行的函数。这些函数可以在select或select的having子句中使用，当用于select子串时常常都和GROUP BY一起使用。</FONT></P>
<P><BR><FONT size=2>　　AVG([{DISYINCT|ALL}])<BR>　　返回数值的平均值。缺省设置为ALL.<BR>SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.empAVG(SAL) AVG(ALL SAL) AVG(DISTINCT SAL)1877.94118 1877.94118 1916.071413</FONT></P>
<P><BR><FONT size=2>　　COUNT({*|DISTINCT|ALL} )<BR>　　返回查询中行的数目，缺省设置是ALL,*表示返回所有的行。</FONT></P>
<P><BR><FONT size=2>　　MAX([{DISTINCT|ALL}])<BR>　　返回选择列表项目的最大值，如果x是字符串数据类型，他返回一个VARCHAR2数据类型，如果X是一个DATA数据类型，返回一个日期，如果X是numeric数据类型，返回一个数字。注意distinct和all不起作用，应为最大值与这两种设置是相同的。</FONT></P>
<P><BR><FONT size=2>　　MIN([{DISTINCT|ALL}])<BR>　　返回选择列表项目的最小值。</FONT></P>
<P><BR><FONT size=2>　　STDDEV([{DISTINCT|ALL}])<BR>　　返回选者的列表项目的标准差，所谓标准差是方差的平方根。</FONT></P>
<P><BR><FONT size=2>　　SUM([{DISTINCT|ALL}])<BR>　　返回选择列表项目的数值的总和。</FONT></P>
<P><BR><FONT size=2>　　VARIANCE([{DISTINCT|ALL}])<BR>　　返回选择列表项目的统计方差。</FONT></P>
<P><BR><FONT size=2>　　用GROUP BY给数据分组</FONT></P>
<P><BR><FONT size=2>　　正如题目暗示的那样组函数就是操作那些已经分好组的数据，我们告诉数据库用GROUP BY怎样给数据分组或者分类，当我们在SELECT语句的SELECT子句中使用组函数时，我们必须把为分组或非常数列放置在GROUP BY子句中，如果没有用group by进行专门处理，那么缺省的分类是将整个结果设为一类。<BR>select stat,counter(*) zip_count from zip_codes GROUP BY state;ST ZIP_COUNT-- ---------AK 360AL 1212AR 1309AZ 768CA 3982</FONT></P>
<P><BR><FONT size=2>　　在这个例子中，我们用state字段分类；如果我们要将结果按照zip_codes排序,可以用ORDER BY语句，ORDER BY子句可以使用列或组函数。<BR>select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;ST COUNT(*)-- --------NY 4312PA 4297TX 4123CA 3982</FONT></P>
<P><BR><FONT size=2>　　用HAVING子句限制分组数据</FONT></P>
<P><BR><FONT size=2>　　现在你已经知道了在查询的SELECT语句和ORDER BY子句中使用主函数，组函数只能用于两个子串中，组函数不能用于WHERE子串中，例如下面的查询是错误的：<BR>错误SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept=''OUTSIDE'' AND SUM(sale_amount)&gt;10000 GROUP BY sales_clerk</FONT></P>
<P><BR><FONT size=2>　　这个语句中数据库不知道SUM()是什么，当我们需要指示数据库对行分组，然后限制分组后的行的输出时，正确的方法是使用HAVING语句：<BR>SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept=''OUTSIDE'' GROUP BY sales_clerkHAVING SUM(sale_amount)&gt;10000;</FONT></P>
<P><BR><FONT size=2>　　嵌套函数</FONT></P>
<P><BR><FONT size=2>　　函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可继承的执行过程。但函数的优先权只是基于位置，函数遵循由内到外，由左到右的原则。嵌套技术一般用于象DECODE这样的能被用于逻辑判断语句IF....THEN...ELSE的函数。</FONT></P>
<P><BR><FONT size=2>　　嵌套函数可以包括在组函数中嵌套单行函数，或者组函数嵌套入单行函数或组函数中。比如下面的例子：<BR>SELECT deptno, GREATEST(COUNT(DISTINCT job),COUNT(DISTINCT mgr) cnt,COUNT(DISTINCT job) jobs,COUNT(DISTINCT mgr) mgrsFROM empGROUP BY deptno;DEPTNO CNT JOBS MGRS------ --- ---- ----10 4 4 220 4 3 430 3 3 2 </FONT></P></TD></TR></TBODY></TABLE><BR></DIV></DIV><img src ="http://www.blogjava.net/faintbear/aggbug/3562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-04-21 09:20 <a href="http://www.blogjava.net/faintbear/archive/2005/04/21/3562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速 删除 字典管理 表空间(转)</title><link>http://www.blogjava.net/faintbear/archive/2005/04/11/3126.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Mon, 11 Apr 2005 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/04/11/3126.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/3126.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/04/11/3126.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/3126.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/3126.html</trackback:ping><description><![CDATA[<TABLE cellPadding=4 width="100%" border=0>
<TBODY>
<TR>
<TD height=19></TD></TR>
<TR>
<TD width=10></TD>
<TD><SPAN id=ArticleContent1_ArticleContent1_lblContent>
<P><STRONG>我的测试环境</STRONG>:Hp rp7410主机，Hp-unix11.11 OS,Oracle8.1.7.4的数据库,一个有90张表大约100G的测试表空间TBS_TEST.</P>
<P><STRONG>问题的提出</STRONG>：Oracle中在使用drop tablespace &lt;tablespace_name&gt; including contents;删除数据字典管理的表空间时存在着很大的效率问题。</P>
<P><STRONG>测试开始:</STRONG></P>
<P><STRONG>1、使用drop tablespace &lt;tablespace_name&gt; including contents;方式直接来删除.</STRONG></P>
<P>SQL&gt;set linesize 132<BR>SQL&gt;set pagezie 0<BR>SQL&gt;set timing on<BR>SQL&gt;drop tablespace TBS_TEST including contents<BR>&nbsp; 2 /</P>
<P>已用时间:&nbsp; 03: 35: 39.10</P>
<P>经过我耐心的等待，花了三个半小时。&nbsp; </P>
<P><STRONG>2、测一下同样的表空间，把它转换为Local方式管理的删除效率。</STRONG></P>
<P>a、把TBS_TEST通过恢复回来。</P>
<P>b、把TBS_TEST转化为Local管理的方式。</P>
<P>SQL&gt;set timing on<BR>SQL&gt; exec sys.dbms_space_admin.tablespace_migrate_to_local('TBS_TEST') ; </P>
<P>已用时间:&nbsp; 00: 06: 33.25</P>
<P>c、删出这个空间。</P>
<P>SQL&gt; drop tablespace TBS_TEST including contents<BR>&nbsp; 2 /<BR>&nbsp;<BR>已用时间:&nbsp; 00: 00: 45.56</P>
<P>可以看到总共才花费了7分多钟。</P>
<P><STRONG>3、测一下同样的表空间，先删除其中的对象，然后再删这个表空间的效率如何。</STRONG></P>
<P>a、把TBS_TEST通过恢复回来。</P>
<P>b、形成删除表的语句</P>
<P>SQL&gt;set linesize 132<BR>SQL&gt;set pagezie 0<BR>SQL&gt;set timing off<BR>SQL&gt;spool drop_test_tables.sql<BR>SQL&gt;SELECT 'Drop table '||TABLE_name||';' FROM dba_tables WHERE tablespace_name='TBS_TEST';<BR>SQL&gt;spool off</P>
<P>c、删除表<BR>SQL&gt;@drop_test_tables.sql</P>
<P>这一步大约花费20秒</P>
<P>d、删出这个空间。</P>
<P>SQL&gt;set timing on<BR>SQL&gt; drop tablespace TBS_TEST including contents;</P>
<P>已用时间:&nbsp; 00: 07: 35.53<BR>&nbsp;<BR>可以看到总共才花费了将近8分钟。</P>
<P><BR><STRONG>总结</STRONG>：我们在做数据字典管理的表空间的删除时，最好先删除表空间中的对象再进行删除该表空间操作。也可以先把它转换为本地(local)管理的空间再进行删除。不过需要补充的是本地管理的空间在8i以后的版本中才是有的。<BR><BR><STRONG>作者Blog：</STRONG><A id=ArticleContent1_ArticleContent1_AuthorBlogLink href="http://blog.csdn.net/hrb_qiuyb/" target=_blank><FONT color=#002c99>http://blog.csdn.net/hrb_qiuyb/</FONT></A></P></SPAN></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/faintbear/aggbug/3126.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-04-11 13:27 <a href="http://www.blogjava.net/faintbear/archive/2005/04/11/3126.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>exp/imp导出导入工具的使用 (转)</title><link>http://www.blogjava.net/faintbear/archive/2005/04/07/2946.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Thu, 07 Apr 2005 08:17:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/04/07/2946.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/2946.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/04/07/2946.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/2946.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/2946.html</trackback:ping><description><![CDATA[<PRE>									2004-02 余枫									
一. 导出工具 exp

1. 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin

   exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移
   
   它有三种模式：
       a.  用户模式：	导出用户所有对象以及对象中的数据；
       b.  表模式：	导出用户所有表或者指定的表；
       c.  整个数据库：	导出数据库中所有对象。

2. 导出工具exp交互式命令行方式的使用的例子

$exp test/test123@appdb
Enter array fetch buffer size: 4096 &gt; 回车
Export file: expdat.dmp &gt; m.dmp  生成导出的文件名 
(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U &gt; 3
Export table data (yes/no): yes &gt; 回车
Compress extents (yes/no): yes &gt; 回车
Export done in ZHS16GBK character set and ZHS16GBK NCHAR character set
About to export specified tables via Conventional Path ...
Table(T) or Partition(T:P) to be exported: (RETURN to quit) &gt; cmamenu  							要导出的表名
. . exporting table                        CMAMENU       4336 rows exported
Table(T) or Partition(T:P) to be exported: (RETURN to quit) &gt;要导出的表名n
Table(T) or Partition(T:P) to be exported: (RETURN to quit) &gt; 回车
Export terminated successfully without warnings. 

3. 导出工具exp非交互式命令行方式的例子

$exp scott/tiger tables=(emp,dept) file=/directory/scott.dmp grants=y 

说明:把scott用户里两个表emp,dept导出到文件/directory/scott.dmp

$exp scott/tiger tables=emp query=\"where job=\'salesman\' and sal\&lt;1600\" file=/directory/scott2.dmp 

说明:在exp里面加上导出emp的查询条件job='salesman' and sal&lt;1600
    
    (但我个人很少这样用,还是把满足条件的记录生成临时表后,再exp会方便一些)

$exp parfile=username.par file=/directory1/username_1.dmp,/directory1/username_2.dmp filesize=2000M log=/directory2/username_exp.log

参数文件username.par内容
	userid=username/userpassword
	buffer=8192000
	compress=n
	grants=y

说明:username.par为导出工具exp用的参数文件,里面具体参数可以根据需要去修改

     filesize指定生成的二进制备份文件的最大字节数
     
     (可用来解决某些OS下2G物理文件的限制及加快压缩速度和方便刻历史数据光盘等)

二.导入工具 imp

1. 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin

	imp导入工具将EXP形成的二进制系统文件导入到数据库中.
	
   它有三种模式：
       a.  用户模式：	导出用户所有对象以及对象中的数据；
       b.  表模式：	导出用户所有表或者指定的表；
       c.  整个数据库：	导出数据库中所有对象。
       
   只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入
   
   imp步骤：
   (1) create table  (2) insert data  (3) create index (4) create triggers,constraints

2.导入工具imp交互式命令行方式的例子
$ imp
Import: Release 8.1.6.0.0 - Production on 星期五 12月 7 17:01:08 2001
(c) Copyright 1999 Oracle Corporation.  All rights reserved.
用户名:  test
口令:****
连接到: Oracle8i Enterprise Edition Release 8.1.6.0.0 - 64bit Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production
导入文件: expdat.dmp&gt; /tmp/m.dmp
输入插入缓冲区大小（最小为 8192 ) 30720&gt;
经由常规路径导出由EXPORT:V08.01.06创建的文件
警告: 此对象由 TEST 导出, 而不是当前用户
已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入
只列出导入文件的内容(yes/no)：no&gt;
由于对象已存在, 忽略创建错误(yes/no)：no&gt; yes
导入权限(yes/no)：yes&gt;
导入表数据(yes/no)：yes&gt;
导入整个导出文件(yes/no)：no&gt; yes
. 正在将TEST的对象导入到 SCOTT
. . 正在导入表                       "CMAMENU"       4336行被导入
成功终止导入，但出现警告。 


3.导入工具imp非交互式命令行方式的例子

$ imp system/manager fromuser=jones tables=(accts) 
$ imp system/manager fromuser=scott tables=(emp,dept) 
$ imp system/manager fromuser=scott touser=joe tables=emp 
$ imp scott/tiger file = expdat.dmp full=y 
$ imp scott/tiger file = /mnt1/t1.dmp show=n buffer=2048000 ignore=n commit=y grants=y full=y log=/oracle_backup/log/imp_scott.log
$ imp system/manager parfile=params.dat 
params.dat 内容 
file=dba.dmp show=n ignore=n grants=y fromuser=scott tables=(dept,emp) 

4.导入工具imp可能出现的问题

(1) 数据库对象已经存在
	一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;  	
	数据库对象已经存在, 按缺省的imp参数, 则会导入失败
	如果用了参数ignore=y, 会把exp文件内的数据内容导入
		如果表有唯一关键字的约束条件, 不合条件将不被导入
		如果表没有唯一关键字的约束条件, 将引起记录重复
		
(2) 数据库对象有主外键约束
      不符合主外键约束时, 数据会导入失败	
      解决办法: 先导入主表, 再导入依存表
		disable目标导入对象的主外键约束, 导入数据后, 再enable它们
(3)  权限不够
	如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限
	
(4)  导入大表( 大于80M ) 时, 存储分配失败
      默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上.
      导入时, 如果不存在连续一个大数据块, 则会导入失败.
      导出80M以上的大表时, 记得compress= N, 则不会引起这种错误.
	
(5) imp和exp使用的字符集不同
      如果字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息.
      导入完成后再改回来.

(6) imp和exp版本不能往上兼容
	imp可以成功导入低版本exp生成的文件, 不能导入高版本exp生成的文件
	根据情况我们可以用
	$ imp username/password@connect_string
 	说明: connect_string 是在/ORACLE_HOME/network/admin/tnsnames.ora
		   定义的本地或者远端数据库的名称
	注意事项:
	UNIX: /etc/hosts	          要定义本地或者远端数据库服务器的主机名
	win98:    windows\hosts             和IP地址的对应关系  
	
	win2000:  winnt\system32\drivers\etc\hosts<BR><BR><BR><BR><BR><IMG height=280 alt="uand me.jpg" src="http://www.blogjava.net/images/blogjava_net/faintbear/faintbear/uand%20me.jpg" width=400 border=0>
</PRE><img src ="http://www.blogjava.net/faintbear/aggbug/2946.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-04-07 16:17 <a href="http://www.blogjava.net/faintbear/archive/2005/04/07/2946.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle DECODE &amp; CASE Functions</title><link>http://www.blogjava.net/faintbear/archive/2005/03/30/2624.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Wed, 30 Mar 2005 13:03:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/03/30/2624.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/2624.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/03/30/2624.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/2624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/2624.html</trackback:ping><description><![CDATA[<A href="http://www.psoug.org/reference/decode_case.html">http://www.psoug.org/reference/decode_case.html</A>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD>
<H3 align=center><FONT face=Arial><B>Oracle DECODE &amp; CASE Functions</B></FONT></H3></TD>
<TD align=right width="20%" rowSpan=2>
<DIV align=right>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD><A onmouseover="imageChg('a','graphic1on')" onmouseout="imageChg('a','graphic1')" href="http://www.psoug.org/home.html" target=topic><IMG height=20 src="http://www.psoug.org/source/home1.jpg" width=120 border=0 name=a></A> </TD></TR>
<TR>
<TD><A onmouseover="imageChg('b','graphic2on')" onmouseout="imageChg('b','graphic2')" href="http://www.psoug.org/education.html" target=topic><IMG height=20 src="http://www.psoug.org/source/education1.jpg" width=120 border=0 name=b></A> </TD></TR></TBODY></TABLE></DIV></TD></TR>
<TR>
<TD width="20%"></TD>
<TD align=middle><STRONG><FONT face=Arial>Version 10.1</FONT></STRONG> </TD></TR></TBODY></TABLE><BR>
<TABLE width="90%" bgColor=#d8d8c4 border=1>
<TBODY>
<TR>
<TD colSpan=2><FONT face=Arial><STRONG>Note: </STRONG>Decode and Case are very similar in their appearance but can produce very different results. </FONT></TD></TR>
<TR>
<TD><FONT face=Arial>Demo Tables &amp; Data</FONT></TD>
<TD>
<DIV align=center>
<CENTER>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=1>
<TBODY>
<TR>
<TD width="33%">
<P align=center><FONT face=Courier><A href="http://www.psoug.org/files/airplanes.sql">Airplanes Table</A></FONT></P></TD>
<TD width="33%">
<P align=center><FONT face=Courier><A href="http://www.psoug.org/files/locations.sql">Locations Table</A></FONT></P></TD>
<TD width="34%">
<P align=center><FONT face=Courier><A href="http://www.psoug.org/files/build01.sql">All other tables</A></FONT></P></TD></TR></TBODY></TABLE></CENTER></DIV></TD></TR>
<TR>
<TD colSpan=2>&nbsp;</TD></TR>
<TR>
<TD colSpan=2><FONT face=Arial color=#808000><STRONG>Decode Built-in Function</STRONG></FONT></TD></TR>
<TR>
<TD width="22%" rowSpan=2><FONT face=Arial>Simple DECODE </FONT></TD>
<TD width="78%"><FONT face=Courier>SELECT DECODE (value, &lt;if this value&gt;, &lt;return this value&gt;)<BR>FROM dual; </FONT></TD></TR>
<TR>
<TD width="78%" bgColor=#80ffff><FONT face=Courier>SELECT program_id,&nbsp;<FONT color=#0000ff><BR>&nbsp; DECODE</FONT>(customer_id, 'AAL', 'American Airlines') AIRLINE,<BR>&nbsp; delivered_date<BR>FROM airplanes<BR>WHERE ROWNUM &lt; 11; </FONT></TD></TR>
<TR>
<TD width="22%" rowSpan=2><FONT face=Arial>More Complex DECODE</FONT></TD>
<TD width="78%"><FONT face=Courier>SELECT DECODE (value,&lt;<FONT color=#ff0000>if this value</FONT>&gt;,&lt;<FONT color=#ff0000>return this value</FONT>&gt;,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<FONT color=#8000ff>if this value</FONT>&gt;,&lt;<FONT color=#8000ff>return this value</FONT>&gt;,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG><FONT color=#0080ff>....</FONT></STRONG>)<BR>FROM dual; </FONT></TD></TR>
<TR>
<TD width="78%" bgColor=#80ffff><FONT face=Courier>SELECT program_id, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECODE(customer_id,&nbsp;<FONT color=#ff0000><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'AAL', 'American Airlines'</FONT>,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#8000ff>'ILC', 'Intl. Leasing Corp.'</FONT>,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#0080ff>'NWO', 'Northwest Orient'</FONT>,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<FONT color=#008000>'SAL', 'Southwest Airlines'</FONT>,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<FONT color=#800000>'SWA', 'Sweptwing Airlines'</FONT>,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<FONT color=#ff00ff>'USAF', 'U.S. Air Force'</FONT>) AIRLINE,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delivered_date<BR>FROM airplanes<BR>WHERE ROWNUM &lt; 11;</FONT></TD></TR>
<TR>
<TD width="22%" rowSpan=2><FONT face=Arial>DEOCODE with DEFAULT </FONT></TD>
<TD width="78%"><FONT face=Courier>SELECT DECODE (value,&lt;if this value&gt;,&lt;return this value&gt;,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;if this value&gt;,&lt;return this value&gt;,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>....</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#0000ff>&lt;otherwise this value&gt;</FONT>)<BR>FROM dual; </FONT></TD></TR>
<TR>
<TD width="78%" bgColor=#80ffff><FONT face=Courier>SELECT program_id, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECODE(customer_id,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'AAL', 'American Airlines',<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'ILC', 'Intl. Leasing Corp.',<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'NWO', 'Northwest Orient',<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'SAL', 'Southwest Airlines',<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'SWA', 'Sweptwing Airlines',<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'USAF', 'United States Airforce',<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#0000ff>'Not Known'</FONT>) AIRLINE,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delivered_date<BR>FROM airplanes<BR>WHERE ROWNUM &lt; 11; </FONT></TD></TR>
<TR>
<TD width="22%"><FONT face=Arial>Simple DECODE Crosstab<BR><BR>Note how each decode only looks at a single possible value and turns it into a new column </FONT></TD>
<TD width="78%" bgColor=#80ffff><FONT face=Courier>SELECT program_id, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#0000ff>DECODE(customer_id, 'AAL', 'AAL')</FONT> AMERICAN,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#0000ff>DECODE(customer_id, 'DAL', 'DAL')</FONT> DELTA,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#0000ff>DECODE(customer_id, 'NWO', 'NWO')</FONT> NORTHWEST,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#0000ff>DECODE(customer_id, 'ILC', 'ILC')</FONT> INTL_LEASING<BR>FROM airplanes<BR>WHERE rownum &lt; 20;</FONT></TD></TR>
<TR>
<TD width="22%" rowSpan=2><FONT face=Arial>DECODE as an in-line view with crosstab summation </FONT></TD>
<TD width="78%"><FONT face=Courier>The above DECODE, <FONT color=#0000ff>in blue</FONT>, used as an in-line view </FONT></TD></TR>
<TR>
<TD width="78%" bgColor=#80ffff><FONT face=Courier>SELECT program_id, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COUNT (AMERICAN) AAL, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COUNT (DELTA) DAL, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COUNT (NORTHWEST) NWO, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COUNT(INTL_LEASING) ILC<BR>FROM <FONT color=#ff0000><B>(</B></FONT><BR>&nbsp;&nbsp; SELECT program_id, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#0000ff>DECODE(customer_id, 'AAL', 'AAL')</FONT> AMERICAN,<BR><FONT color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DECODE(customer_id, 'DAL', 'DAL')</FONT> DELTA,<BR><FONT color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DECODE(customer_id, 'NWO', 'NWO')</FONT> NORTHWEST,<BR><FONT color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DECODE(customer_id, 'ILC', 'ILC')</FONT> INTL_LEASING<BR>&nbsp;&nbsp; FROM airplanes<FONT color=#ff0000><B>)</B></FONT><BR>GROUP BY program_id; </FONT></TD></TR>
<TR>
<TD width="22%"><FONT face=Arial>Query for DECODE demo </FONT></TD>
<TD width="78%" bgColor=#80ffff><FONT face=Courier>CREATE TABLE stores (<BR>store_name &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VARCHAR2(20),<BR>region_dir &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NUMBER(5),<BR>region_mgr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NUMBER(5),<BR>store_mgr1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NUMBER(5),<BR>store_mgr2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NUMBER(5),<BR>asst_storemgr1&nbsp;&nbsp;NUMBER(5),<BR>asst_storemgr2&nbsp;&nbsp;NUMBER(5),<BR>asst_storemgr3&nbsp;&nbsp;NUMBER(5))<BR>TABLESPACE data_sml;<BR><BR>INSERT INTO stores&nbsp;<BR>VALUES ('San Francisco',100,200,301,302,401,0,403);<BR><BR>INSERT INTO stores<BR>VALUES ('Oakland',100,200,301,0,404,0,0);<BR><BR>INSERT INTO stores<BR>VALUES ('Palo Alto',100,200,0,305,0,405,406);<BR><BR>INSERT INTO stores<BR>VALUES ('Santa Clara',100,250,0,306,0,0,407);<BR>COMMIT;<BR><BR>SELECT <FONT color=#0000ff>DECODE(asst_storemgr1, 0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT><FONT color=#800080>DECODE(asst_storemgr2, 0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT><FONT color=#008080>DECODE(asst_storemgr3, 0, 0, asst_storemgr3)</FONT><FONT color=#800080>,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;asst_storemgr2), asst_storemgr1)</FONT> ASST_MANAGER<FONT color=#800080>,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DECODE(store_mgr1,0,&nbsp;DECODE(store_mgr2,0, 0, store_mgr2)</FONT><FONT color=#0000ff>,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;store_mgr1)</FONT> STORE_MANAGER,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REGION_MGR,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REGION_DIR<BR>FROM stores; </FONT></TD></TR>
<TR>
<TD width="22%"><FONT face=Arial>DECODE with Summary Function</FONT></TD>
<TD width="78%" bgColor=#80ffff><FONT face=Courier>SELECT SUM(CA_COUNT) CA, SUM(TX_COUNT) TX<BR>FROM (<BR>&nbsp;&nbsp; SELECT state,<BR>&nbsp;&nbsp; <FONT color=#0000ff>DECODE</FONT>(state, 'CA', <FONT color=#800080>COUNT(*)</FONT>, 0) CA_COUNT,<BR>&nbsp;&nbsp; <FONT color=#0000ff>DECODE</FONT>(state, 'TX', <FONT color=#800080>COUNT(*)</FONT>, 0) TX_COUNT<BR>&nbsp;&nbsp; FROM locations<BR>&nbsp;&nbsp; GROUP BY state);</FONT></TD></TR>
<TR>
<TD width="22%"><FONT face=Arial>DECODE in the WHERE Clause</FONT></TD>
<TD width="78%" bgColor=#80ffff>
<P align=left><FONT face=Courier>set serveroutput on<BR><BR>DECLARE<BR><BR>posn&nbsp; PLS_INTEGER := 0;<BR>empid PLS_INTEGER := 178;<BR>x&nbsp;&nbsp;&nbsp;&nbsp; NUMBER;<BR><BR>BEGIN<BR>&nbsp; SELECT NVL(SUM(ah.quantity * ah.saleprice * ap.payoutpct), 0)<BR>&nbsp; INTO x<BR>&nbsp; FROM accessoryhistory ah, payoutpercentage ap,&nbsp;<BR>&nbsp; sku s, store st<BR>&nbsp; WHERE empid =&nbsp;<FONT color=#0000ff>DECODE(posn,&nbsp;<BR>&nbsp;&nbsp;&nbsp; 0, st.areadir, <BR>&nbsp;&nbsp;&nbsp;&nbsp;1, st.areamgr, <BR>&nbsp;&nbsp;&nbsp;&nbsp;2, NVL(st.storemgr1, st.storemgr2),<BR>&nbsp;&nbsp;&nbsp;&nbsp;3, NVL(st.asstmgr1, NVL(st.asstmgr2,<BR>&nbsp;&nbsp;&nbsp; st.asstmgr3)))<BR></FONT>&nbsp; AND ah.statustype IN ('ACT', 'DEA')<BR>&nbsp; AND ah.store = st.store<BR>&nbsp; AND s.dbid = ah.dbid<BR>&nbsp; AND s.sku = ah.sku<BR>&nbsp; AND ap.productgroup = s.productgroup<BR>&nbsp; AND ap.position = posn;<BR><BR>&nbsp; dbms_output.put_line(x); <BR>END;<BR>/</FONT></P></TD></TR>
<TR>
<TD colSpan=2>&nbsp;</TD></TR>
<TR>
<TD colSpan=2><FONT face=Arial color=#808000><STRONG>Case Built-in Function</STRONG></FONT></TD></TR>
<TR>
<TD width="22%" rowSpan=2><FONT face=Arial>Simple CASE Demo </FONT></TD>
<TD width="78%"><FONT face=Courier>SELECT CASE WHEN (&lt;column_value&gt; <STRONG>=</STRONG> &lt;value&gt;) THEN<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHEN (&lt;column_value&gt; <STRONG>=</STRONG> &lt;value&gt;) THEN<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSE &lt;value&gt;<BR>FROM &lt;table_name&gt;;</FONT></TD></TR>
<TR>
<TD width="78%" bgColor=#80ffff><FONT face=Courier>SELECT line_number, <BR>&nbsp;&nbsp;&nbsp;<FONT color=#0000ff>CASE WHEN (line_number = 1) THEN 'One'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN (line_number = 2) THEN 'Two'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ELSE 'More Than Two'<BR>&nbsp;&nbsp; END</FONT> AS RESULTSET<BR>FROM airplanes; </FONT></TD></TR>
<TR>
<TD width="22%" rowSpan=2><FONT face=Arial>More Complex CASE Demo With Between</FONT></TD>
<TD width="78%"><FONT face=Courier>SELECT CASE WHEN (&lt;column_value&gt; BETWEEN &lt;value&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AND &lt;value&gt;) THEN<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHEN (&lt;column_value&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BETWEEN &lt;value&gt; AND &lt;value&gt;) THEN<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSE &lt;value&gt;<BR>FROM &lt;table_name&gt;;</FONT></TD></TR>
<TR>
<TD width="78%" bgColor=#80ffff><FONT face=Courier>SELECT line_number, <BR>&nbsp;&nbsp;&nbsp;CASE WHEN (line_number <FONT color=#0000ff>BETWEEN</FONT> 1 AND 10) THEN 'One'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN (line_number <FONT color=#0000ff>BETWEEN</FONT> 11 AND 100) THEN 'Big'<BR>&nbsp;&nbsp;&nbsp;ELSE 'Bigger'<BR>&nbsp;&nbsp; END<BR>FROM airplanes; </FONT></TD></TR>
<TR>
<TD width="22%" rowSpan=2><FONT face=Arial>More Complex CASE Demo With Booleans</FONT></TD>
<TD width="78%"><FONT face=Courier>SELECT CASE WHEN (&lt;column_value&gt; <STRONG>&lt;=</STRONG>&nbsp;&lt;value&gt;) THEN<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHEN (&lt;</FONT><FONT face=Courier>column_value</FONT><FONT face=Courier>&gt; <STRONG>&lt;=</STRONG> &lt;value&gt;) THEN<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSE &lt;value&gt;<BR>FROM &lt;table_name&gt;;</FONT></TD></TR>
<TR>
<TD width="78%" bgColor=#80ffff><FONT face=Courier>SELECT line_number, <BR>&nbsp;&nbsp;&nbsp;CASE <FONT color=#0000ff>WHEN (line_number &lt; 10) THEN</FONT> 'Ones'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#8000ff>WHEN (line_number &lt; 100) THEN</FONT> 'Tens'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#008080>WHEN (line_number &lt; 1000) THEN</FONT> 'Hundreds'<BR>&nbsp;&nbsp;&nbsp;ELSE 'Thousands' <BR>&nbsp;&nbsp; END RESULT_SET<BR>FROM airplanes; </FONT></TD></TR>
<TR>
<TD width="22%"><FONT face=Arial color=#000000>The above demo turned into a view</FONT></TD>
<TD width="78%" bgColor=#80ffff><FONT face=Courier><FONT color=#0000ff>CREATE OR REPLACE VIEW line_number_view AS</FONT><BR>SELECT line_number, <BR>&nbsp;&nbsp; CASE WHEN (line_number &lt; 10) THEN 'Ones' <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN (line_number &lt; 100) THEN 'Tens' <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN (line_number &lt; 1000) THEN 'Hundreds' <BR>&nbsp;&nbsp; ELSE 'Thousands'<BR>&nbsp;&nbsp; END RESULT_SET<BR>FROM airplanes;</FONT></TD></TR>
<TR>
<TD colSpan=2>&nbsp;</TD></TR>
<TR>
<TD colSpan=2><FONT face=Arial color=#808000><STRONG>CASE - DECODE Comparison</STRONG></FONT></TD></TR>
<TR>
<TD width="22%"><FONT face=Arial>The same functionality written using both functions</FONT></TD>
<TD width="78%" bgColor=#80ffff><FONT face=Courier>SELECT parameter, DECODE(SIGN(parameter-1000),-1,'C','P') AS BAND<BR>FROM parameter_table;<BR><BR>SELECT parameter,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CASE WHEN parameter &lt; 1000 THEN 'C' ELSE 'P' END AS BAND<BR>FROM parameter_table;</FONT></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/faintbear/aggbug/2624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-03-30 21:03 <a href="http://www.blogjava.net/faintbear/archive/2005/03/30/2624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle decode 应用 </title><link>http://www.blogjava.net/faintbear/archive/2005/03/30/2623.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Wed, 30 Mar 2005 12:59:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/03/30/2623.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/2623.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/03/30/2623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/2623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/2623.html</trackback:ping><description><![CDATA[<DIV class=postTitle><B>
<DIV class=post>
<DIV class=postTitle><A id=viewpost.ascx_TitleUrl href="http://blog.csdn.net/faintbear/archive/2004/09/29/120822.aspx">oracle decode 应用</A> </DIV>
<DIV class=postText>select yw_seq,sum(bill),sum(louisa),sum(lynn),sum(wang),com_no&nbsp; from (select com_no,yw_seq,decode(person,'0001',(agree)) as lynn,decode(person,'0011',(agree)) as bill,decode(person,'0054',(agree))as wang,decode(person,'0005',(agree)) as louisa from ywht_shenpi group by yw_seq,person,agree,com_no) group by yw_seq,com_no<B><BR><BR>版权声明：CSDN是本Blog托管服务提供商。如本文牵涉版权问题，CSDN不承担相关责任，请版权拥有者直接与文章作者联系解决。</B><BR><BR></DIV></DIV><LINK href="http://blog.csdn.net/faintbear/Services/Pingback.aspx" rel=pingback><!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://blog.csdn.net/faintbear/archive/2004/09/29/120822.aspx"
dc:identifier="http://blog.csdn.net/faintbear/archive/2004/09/29/120822.aspx"
dc:title="oracle decode 应用"
trackback:ping="http://blog.csdn.net/faintbear/services/trackbacks/120822.aspx" />
</rdf:RDF>
--><BR>
<DIV id=comments>
<H3>评论</H3>
<DIV class=post>
<DIV class=postTitle><A id=Comments.ascx_CommentList__ctl0_NameLink target=_blank>faintbear</A>&nbsp;发表于 <SPAN>2004-12-02 11:35 AM </SPAN>&nbsp;&nbsp; <A id=Comments.ascx_CommentList__ctl0_EditLink href="javascript:__doPostBack('Comments.ascx$CommentList$_ctl0$EditLink','')"></A></DIV>
<DIV class=postText>set serveroutput on; <BR><BR>declare <BR><BR>l_count integer; <BR><BR>begin <BR><BR>for e in (select emp_no,emp_name from cus_emp_basic) loop <BR><BR>select count(*) into l_count from cus_emp_basic <BR><BR>where e.emp_no = emp_no and emp_no = '00006006'; <BR><BR>if l_count != 0 then <BR><BR>dbms_output.put_line(e.emp_name); <BR><BR>end if; <BR><BR>end loop; <BR><BR>end; <BR><BR></DIV></DIV><BR>
<DIV class=post>
<DIV class=postTitle><A id=Comments.ascx_CommentList__ctl1_NameLink target=_blank>faintbear</A>&nbsp;发表于 <SPAN>2004-12-02 11:39 AM </SPAN>&nbsp;&nbsp; <A id=Comments.ascx_CommentList__ctl1_EditLink href="javascript:__doPostBack('Comments.ascx$CommentList$_ctl1$EditLink','')"></A></DIV>
<DIV class=postText>关于in exists 的区别 <BR><BR>select emp_name from cus_emp_basic e <BR>where exists (select 0 from cus_emp_basic where e.emp_no=emp_no and emp_no='00006006'); <BR><BR></DIV></DIV><BR>
<DIV class=post>
<DIV class=postTitle><A id=Comments.ascx_CommentList__ctl2_NameLink target=_blank>faintbear</A>&nbsp;发表于 <SPAN>2004-12-02 11:54 AM </SPAN>&nbsp;&nbsp; <A id=Comments.ascx_CommentList__ctl2_EditLink href="javascript:__doPostBack('Comments.ascx$CommentList$_ctl2$EditLink','')"></A></DIV>
<DIV class=postText>select * from (select rownum r,b.* from cus_emp_basic b where rownum&lt;=3) t where t.r&gt;=1 </DIV></DIV><BR>
<DIV class=post>
<DIV class=postTitle><A id=Comments.ascx_CommentList__ctl3_NameLink target=_blank>faintbear</A>&nbsp;发表于 <SPAN>2004-12-02 11:55 AM </SPAN>&nbsp;&nbsp; <A id=Comments.ascx_CommentList__ctl3_EditLink href="javascript:__doPostBack('Comments.ascx$CommentList$_ctl3$EditLink','')"></A></DIV>
<DIV class=postText>select * from (select rownum r,b.* from cus_emp_basic b where rownum&lt;=3) t where t.r&gt;=1 </DIV></DIV></DIV></B></DIV><img src ="http://www.blogjava.net/faintbear/aggbug/2623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-03-30 20:59 <a href="http://www.blogjava.net/faintbear/archive/2005/03/30/2623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java数据库编程中的几个常用技巧(转)</title><link>http://www.blogjava.net/faintbear/archive/2005/03/23/2351.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Wed, 23 Mar 2005 01:38:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/03/23/2351.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/2351.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/03/23/2351.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/2351.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/2351.html</trackback:ping><description><![CDATA[<STRONG><FONT size=2>&nbsp;</FONT></STRONG><FONT size=2>
<HR color=#999999 noShade SIZE=1>
</FONT>
<P align=left><FONT size=2>1、java数据库操作基本流程 <BR><BR>　　2、几个常用的重要技巧： <BR><BR>　　可滚动、更新的记录集 <BR><BR>　　批量更新 <BR><BR>　　事务处理 <BR><BR>　　java数据库操作基本流程：取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 <BR><BR>　　1、取得数据库连接 <BR><BR>　　1）用DriverManager取数据库连接 <BR><BR>　　例子： <BR><BR>String className,url,uid,pwd; <BR>className = "oracle.jdbc.driver.OracleDriver"; <BR>url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr; <BR>uid = "system"; <BR>pwd = "manager"; <BR>Class.forName(className); <BR>Connection cn = DriverManager.getConnection(url,uid,pwd); <BR><BR>　　2）用jndi(java的命名和目录服务)方式 <BR><BR>　　例子 <BR><BR>String jndi = "jdbc/db"; <BR>Context ctx = (Context) new InitialContext().lookup("java:comp/env"); <BR>DataSource ds = (DataSource) ctx.lookup(jndi); <BR>Connection cn = ds.getConnection(); <BR><BR>　　多用于jsp中 <BR><BR>　　2、执行sql语句 <BR><BR>　　1）用Statement来执行sql语句 <BR><BR>String sql; <BR>Statement sm = cn.createStatement(); <BR>sm.executeQuery(sql); // 执行数据查询语句（select） <BR>sm.executeUpdate(sql); // 执行数据更新语句（delete、update、insert、drop等）statement.close(); <BR><BR>　　2）用PreparedStatement来执行sql语句 <BR><BR>String sql; <BR>sql = "insert into user (id,name) values (?,?)"; <BR>PreparedStatement ps = cn.prepareStatement(sql); <BR>ps.setInt(1,xxx); <BR>ps.setString(2,xxx); <BR>... <BR>ResultSet rs = ps.executeQuery(); // 查询 <BR>int c = ps.executeUpdate(); // 更新 <BR><BR>　　3、处理执行结果 <BR><BR>　　查询语句，返回记录集ResultSet。 <BR><BR>　　更新语句，返回数字，表示该更新影响的记录数。 <BR><BR>　　ResultSet的方法： <BR><BR>　　1、next()，将游标往后移动一行，如果成功返回true；否则返回false。 <BR><BR>　　2、getInt("id")或getSting("name")，返回当前游标下某个字段的值。 <BR><BR>　　3、释放连接。 <BR><BR>cn.close(); <BR><BR>　　一般，先关闭ResultSet，然后关闭Statement（或者PreparedStatement）；最后关闭Connection <BR><BR>　　可滚动、更新的记录集 <BR><BR>　　1、创建可滚动、更新的Statement <BR><BR>Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY); <BR><BR>　　该Statement取得的ResultSet就是可滚动的 <BR><BR>　　2、创建PreparedStatement时指定参数 <BR><BR>PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); <BR><BR>ResultSet.absolute(9000); <BR><BR>　　批量更新 <BR><BR>　　1、Statement <BR><BR>Statement sm = cn.createStatement(); <BR>sm.addBatch(sql1); <BR>sm.addBatch(sql2); <BR>... <BR>sm.executeBatch() <BR><BR>　　一个Statement对象，可以执行多个sql语句以后，批量更新。这多个语句可以是delete、update、insert等或兼有 <BR><BR>　　2、PreparedStatement <BR><BR>PreparedStatement ps = cn.preparedStatement(sql); <BR>{ <BR>　ps.setXXX(1,xxx); <BR>　... <BR>　ps.addBatch(); <BR>} <BR>ps.executeBatch(); <BR><BR>　　一个PreparedStatement，可以把一个sql语句，变换参数多次执行，一次更新。 <BR><BR>　　事务的处理 <BR><BR>　　1、关闭Connection的自动提交 <BR><BR>cn.setAutoCommit(false); <BR><BR>　　2、执行一系列sql语句 <BR><BR>　　要点：执行每一个新的sql语句前，上一次执行sql语句的Statement（或者PreparedStatemet）必须先close <BR><BR>Statement sm ; <BR>sm = cn.createStatement(insert into user...); <BR>sm.executeUpdate(); <BR>sm.close(); <BR><BR>sm = cn.createStatement("insert into corp...); <BR>sm.executeUpdate(); <BR>sm.close(); <BR><BR>　　3、提交 <BR><BR>cn.commit(); <BR><BR>　　4、如果发生异常，那么回滚 <BR><BR>cn.rollback(); <BR>　 </FONT></P><img src ="http://www.blogjava.net/faintbear/aggbug/2351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-03-23 09:38 <a href="http://www.blogjava.net/faintbear/archive/2005/03/23/2351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何修改默认的XDB监听端口</title><link>http://www.blogjava.net/faintbear/archive/2005/03/22/2339.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Tue, 22 Mar 2005 12:00:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/03/22/2339.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/2339.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/03/22/2339.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/2339.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/2339.html</trackback:ping><description><![CDATA[<P><FONT size=2>我的电脑之前装有oracle9i,今天安装tomcat成功后，测试<A href="http://localhost:8080">http://localhost:8080</A>出现 让输入XDB登陆的用户名和密码。一查原来是这个原因，特记录下来，备用。。。<BR><BR>Oracle9i默认的XML DB把HTTP的默认端口设为8080，这是一个太常用的端口了，很多别的WebServer都会使用这个端口，<BR>如果我们安装了它，最好修改一下，避免冲突，如果不使用呢，就最好不要安装<BR>提供三种修改的方法<BR>1.dbca，选择你的数据库，然后Standard Database Features-&gt;Customize-&gt;Oracle XML DB option，进入这个画面你应该就知道怎么改了。 <BR>2.OEM console，在XML Database 的配置里面修改 <BR>3.用oracle提供的包： <BR>-- 把HTTP/WEBDAV端口从8080改到8081 <BR>SQL&gt; call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), <BR>'/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()',8081)) <BR>/ <BR>-- 把FTP端口从2100改到2111 <BR>SQL&gt; call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), <BR>'/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()',2111)) <BR>/ <BR>SQL&gt; commit; <BR>SQL&gt; exec dbms_xdb.cfg_refresh; <BR>-- 检查修改是否已经成功 <BR>SQL&gt; select dbms_xdb.cfg_get from dual;<BR></FONT></P><img src ="http://www.blogjava.net/faintbear/aggbug/2339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-03-22 20:00 <a href="http://www.blogjava.net/faintbear/archive/2005/03/22/2339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle常用的一些功能集锦(转)</title><link>http://www.blogjava.net/faintbear/archive/2005/03/22/2317.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Tue, 22 Mar 2005 04:57:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/03/22/2317.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/2317.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/03/22/2317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/2317.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/2317.html</trackback:ping><description><![CDATA[<P><FONT size=2>数值函数：<BR>abs(m)&nbsp;&nbsp;m的绝对值<BR>mod(m,n)&nbsp;m被n除后的余数<BR>power(m,n)&nbsp;m的n次方<BR>round(m[,n])&nbsp;m四舍五入至小数点后n位的值（n缺省为0）<BR>trunc(m[,n])&nbsp;m截断n位小数位的值（n缺省为0）</FONT></P>
<P><FONT size=2>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</FONT></P>
<P><FONT size=2>字符函数：<BR>initcap(st)&nbsp;返回st将每个单词的首字母大写，所有其他字母小写<BR>lower(st)&nbsp;返回st将每个单词的字母全部小写<BR>upper(st)&nbsp;返回st将每个单词的字母全部大写<BR>concat(st1,st2)&nbsp;&nbsp;返回st为st2接st1的末尾（可用操作符"||"）<BR>lpad(st1,n[,st2])&nbsp;返回右对齐的st,st为在st1的左边用st2填充直至长度为n,st2的缺省为空格<BR>rpad(st1,n[,st2])&nbsp;返回左对齐的st,st为在st1的右边用st2填充直至长度为n,st2的缺省为空格<BR>ltrim(st[,set])&nbsp;&nbsp;返回st,st为从左边删除set中字符直到第一个不是set中的字符。缺省时，指的是空格<BR>rtrim(st[,set])&nbsp;&nbsp;返回st,st为从右边删除set中字符直到第一个不是set中的字符。缺省时，指的是空格<BR>replace(st,search_st[,replace_st])&nbsp;将每次在st中出现的search_st用replace_st替换，返回一个st。缺省时，删除search_st<BR>substr(st,m[,n])&nbsp;n=返回st串的子串，从m位置开始，取n个字符长。缺省时，一直返回到st末端<BR>length(st)&nbsp;数值，返回st中的字符数<BR>instr(st1,st2[,m[,n]])&nbsp;&nbsp;数值，返回st1从第m字符开始，st2第n次出现的位置，m及n的缺省值为1<BR>例：<BR>1.<BR>select initcap('THOMAS'),initcap('thomas') from test;<BR>initca initca<BR>------ ------<BR>Thomas Thomas<BR>2.<BR>select concat('abc','def') "first" from test;<BR>first<BR>-----<BR>abcdef<BR>3.<BR>select 'abc'||' '||'def' "first" from test;<BR>first<BR>-----<BR>abc def<BR>4.<BR>select lpad(name,10),rpad(name,5,'*') from test;<BR>lpad(name,10) rpad(name,5,'*')<BR>------------ ----------------<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mmx mmx**<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abcdef abcde<BR>5.<BR>去掉地址字段末端的点及单词st和rd<BR>select rtrim(address,'. st rd') from test<BR>6.<BR>select name,replace(name,'a','*') from test;<BR>name&nbsp; replace(name,'a','*')<BR>----&nbsp; ---------------------<BR>great gre*t<BR>7.<BR>select substr('archibald bearisol',6,9) a,substr('archibald bearisol',11) b from test;<BR>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<BR>-------&nbsp;&nbsp; -------<BR>bald bear bearisol<BR>8.<BR>select name,instr(name,' ') a,instr(name,' ',1,2) b from test;<BR>name&nbsp;&nbsp;&nbsp; a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<BR>------- -------- ---------<BR>li lei&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<BR>l i l&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</FONT></P>
<P><FONT size=2>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</FONT></P>
<P><FONT size=2>转换函数：<BR>nvl(m,n)&nbsp;如果m值为null,返回n,否则返回m<BR>to_char(m[,fmt])&nbsp;m从一个数值转换为指定格式的字符串fmt缺省时，fmt值的宽度正好能容纳所有的有效数字<BR>to_number(st[,fmt])&nbsp;st从字符型数据转换成按指定格式的数值，缺省时数值格式串的大小正好为整个数<BR>附：<BR>to_char()函数的格式：<BR>---------------------------------<BR>符号&nbsp;&nbsp;&nbsp; 说明<BR>---------------------------------<BR>9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个9代表结果中的一位数字<BR>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 代表要显示的先导0<BR>$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 美元符号打印在数的左边<BR>L&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 任意的当地货币符号<BR>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打印十进制的小数点<BR>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打印代表千分位的逗号<BR>---------------------------------<BR>例：<BR>1.<BR>select to_number('123.45')+to_number('234.56') form test;<BR>to_number('123.45')+to_number('234.56')<BR>----------------------------------------<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 358.01<BR>2.<BR>select to_char(987654321) from test;<BR>to_char(987654321)<BR>------------------<BR>987654321<BR>3.<BR>select to_char(123,'$9,999,999') a,to_char(54321,'$9,999,999') b,to_char(9874321,'$9,999,999') c from test;<BR>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c<BR>------- ---------- -----------<BR>$123&nbsp;&nbsp;&nbsp; $54,321&nbsp;&nbsp;&nbsp; $9,874,321<BR>4.<BR>select to_char(1234.1234,'999,999.999') a,to_char(0.4567,'999,999.999') b,to_char(1.1,'999,999.999') from test;<BR>a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c<BR>--------- ---------- ------------<BR>1,234.123 .457&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.100</FONT></P>
<P><FONT size=2>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</FONT></P>
<P><FONT size=2>分组函数：<BR>avg([distinct/all] n)&nbsp;列n的平均值<BR>count([all] *)&nbsp;&nbsp;返回查询范围内的行数包括重复值和空值<BR>count([distinct/all] n)&nbsp;非空值的行数<BR>max([distinct/all] n)&nbsp;该列或表达式的最大值<BR>min([distinct/all] n)&nbsp;该列或表达式的最小值<BR>stdev([distinct/all] n)&nbsp;该列或表达式的标准偏差，忽略空值<BR>sum([distinct/all] n)&nbsp;该列或表达式的总和<BR>variance([distinct/all] n)&nbsp;该列或表达式的方差，忽略空值</FONT></P>
<P><FONT size=2>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</FONT></P>
<P><FONT size=2>日期函数：<BR>add_months(d,n)&nbsp;&nbsp;日期d加n个月<BR>last_day(d)&nbsp;&nbsp;包含d的月份的最后一天的日期<BR>month_between(d,e)&nbsp;日期d与e之间的月份数，e先于d<BR>new_time(d,a,b)&nbsp;&nbsp;a时区的日期和时间d在b时区的日期和时间<BR>next_day(d,day)&nbsp;&nbsp;比日期d晚，由day指定的周几的日期<BR>sysdate&nbsp;&nbsp;当前的系统日期和时间<BR>greatest(d1,d2,...dn)&nbsp;给出的日期列表中最后的日期<BR>least(d1,k2,...dn)&nbsp;给出的日期列表中最早的日期<BR>to_char(d [,fmt])&nbsp;日期d按fmt指定的格式转变成字符串<BR>to_date(st [,fmt])&nbsp;字符串st按fmt指定的格式转成日期值，若fmt忽略，st要用缺省格式<BR>round(d [,fmt])&nbsp;&nbsp;日期d按fmt指定格式舍入到最近的日期<BR>trunc(d [,fmt])&nbsp;&nbsp;日期d按fmt指定格式截断到最近的日期<BR>附：<BR>日期格式：<BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR>格式代码　&nbsp;&nbsp;&nbsp; 说明&nbsp;&nbsp;&nbsp;举例或可取值的范围<BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR>DD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该月某一天&nbsp;&nbsp;1－3<BR>DY&nbsp;　　　三个大写字母表示的周几&nbsp;SUN，...SAT<BR>DAY&nbsp;　　　完整的周几，大写英文&nbsp;SUNDAY，...SATURDAY<BR>MM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 月份&nbsp;&nbsp;&nbsp;1－12<BR>MON　　　　　 三个大写字母表示的月份&nbsp;JAN，...DEC<BR>MONTH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 完整&nbsp;&nbsp;&nbsp;JANUARY,...DECEMBER<BR>RM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 月份的罗马数字&nbsp;&nbsp;I,...XII<BR>YY或YYYY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 两位，四位数字年<BR>HH:MI:SS　　　时：分：秒<BR>HH12或HH24　　以12小时或24小时显示<BR>MI　　　　　　分<BR>SS　　　　　　秒<BR>AM或PM　　　　上下午指示符<BR>SP　　　　　　后缀SP要求拼写出任何数值字段<BR>TH　　　　　　后缀TH表示添加的数字是序数　4th,1st<BR>FM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前缀对月或日或年值，禁止填充<BR>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<BR>例：<BR>1.<BR>下一个周五的日期<BR>select next_day(sysdate,6) from test;<BR>2.<BR>两个月前的今天的日期<BR>select add_months(sysdate,-2) from test;</FONT></P><img src ="http://www.blogjava.net/faintbear/aggbug/2317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-03-22 12:57 <a href="http://www.blogjava.net/faintbear/archive/2005/03/22/2317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE公司之起源</title><link>http://www.blogjava.net/faintbear/archive/2005/03/10/1916.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Thu, 10 Mar 2005 08:10:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/03/10/1916.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/1916.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/03/10/1916.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/1916.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/1916.html</trackback:ping><description><![CDATA[<H2><FONT size=2></FONT>&nbsp;</H2><BR><FONT size=2>很难想象，ORACLE公司的这一段传奇居然要从<ACRONYM title="International Business Machines">IBM</ACRONYM>开始。 <BR><BR>1970年的6月，<ACRONYM title="International Business Machines">IBM</ACRONYM>公司的研究员埃德加·考特 （Edgar Frank Codd） 在 Communications of ACM 上发表了那篇著名的《大型共享数据库数据的关系模型》（A Relational Model of Data for Large Shared Data Banks）的论文。这是数据库发展史上的一个转折。要知道，当时还是层次模型和网状模型的数据库产品在市场上占主要位置。从这篇论文开始，拉开了关系型数据库软件革命的序幕。 <BR><BR>虽然早在1970年就诞生了关系模型理论，但是市场上迟迟不见关系型数据库管理软件的推出。主要原因是很多反对者认为关系型数据库速度太慢，比不上当时的层次式数据库。值得好笑的是，<ACRONYM title="International Business Machines">IBM</ACRONYM>虽然1973年就启动了System R的项目来研究关系型数据库的实际可行性，也没有及时推出这样的产品，因为当时<ACRONYM title="International Business Machines">IBM</ACRONYM>的的IMS（著名的层次型数据库）市场不错，如果推出关系型数据库，牵涉到<ACRONYM title="International Business Machines">IBM</ACRONYM>很多人的自身利益。再者，<ACRONYM title="International Business Machines">IBM</ACRONYM>庞大复杂的官僚机构处在决策上远不那么灵活。 <BR><BR>1977年6月，Larry Ellison与Bob Miner和Ed Oates在硅谷共同创办了一家名为软件开发实验室（Software Development Laboratories，SDL）的计算机公司（ORACLE公司的前身）。那个时候，32岁的Larry Ellison，这个读了三家大学都没能毕业的辍学生，还只是一个普通的软件工程师。公司创立之初，Miner是总裁，Oates为副总裁，而Ellison，因为一个合同的事情，还在另一家公司上班。没多久，第一位员工Bruce Scott（用过ORACLE数据库软件的人都知道有个Scott用户的吧？没错，就是这个Scott，至于Scott用户的密码Tiger，那是Scott养的猫的名字）加盟进来，在Miner和Oates有些厌倦了那种合同式的开发工作后，他们决定开发通用软件，不过们还不知道自己能开发出来什么样的产品。Oates最先看到了埃德加·考特的那篇著名的论文连同其他几篇相关的文章并推荐Ellison和Miner也阅读一下。Ellison和Miner预见到数据库软件的巨大潜力（跟着<ACRONYM title="International Business Machines">IBM</ACRONYM>走，没错），于是，SDL开始策划构建可商用的关系型数据库管理系统（<ACRONYM title="Relational Database Mangement System">RDBMS</ACRONYM>）。 <BR></FONT>
<P align=center><FONT size=2><IMG alt="Oracle Company Gang of four" src="http://www.dbanotes.net/Images/Oracle_Gang_of_4.jpg"> <BR>图1 左起 Ed Oates、Bruce Scott、Bob Miner、Larry Ellison</FONT></P><BR><FONT size=2>很快他们就弄出来一个不太像样的产品，或者具体的说，更像一个Demo。根据Ellison和Miner他们在前一家公司从事的一个由中央情报局投资的项目代码,他们把这个产品命名为ORACLE。因为他们相信，ORACLE（字典里的解释有“神谕, 预言”之意）是一切智慧的源泉。1979年，SDL更名为关系软件有限公司（Relational Software，Inc.，<ACRONYM title="Relational Software，Inc.">RSI</ACRONYM>），毕竟“软件开发实验室”不太像一个大公司的名字。1983年，为了突出公司的核心产品，<ACRONYM title="Relational Software，Inc.">RSI</ACRONYM>再次更名为ORACLE。 <BR><BR></FONT>
<P align=center><FONT size=2><IMG height=415 alt="Oracle Company" src="http://www.dbanotes.net/Images/Oracle_Company.jpg" width=553> <BR>图2 美国 Oracle 公司总部一瞥</FONT></P><BR><FONT size=2>
<HR>
<BR></FONT>
<H2><FONT size=2>发展与壮大</FONT></H2><BR><FONT size=2>RSI在1979年的夏季发布了可用于<ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM>公司的<ACRONYM title="Progammable Data Processor">PDP</ACRONYM>-11计算机上的商用ORACLE产品，这个数据库产品整合了比较完整的<ACRONYM title="Structured Query Language">SQL</ACRONYM>实现，其中包括子查询、连接及其他特性。但不得不说，软件不是很稳定，并缺少事务处理这样的重要功能。出于市场策略，公司宣称这是该产品的第二版，但却是实际上的第一版。之所以被命名为第2版而不是第1版，是因为Ellison认为潜在的客户更愿意购买第2个版本，而不是初始版本。（虽然这样做有些不太诚实，还是要承认这是个十分高明的技巧。到现在还有一些公司把自己卖给客户的版本叫做1.0 ，学学1979年的ORACLE吧！）多年以后的今天，ORACLE公司声称是他们第一个提供了第一个<ACRONYM title="Structured Query Language">SQL</ACRONYM>关系型数据库管理系统。 <BR><BR>虽然软件不是很好，但是客户还是有的。美国中央情报局迫不及待的想买一套这样的软件来满足他们的需求。但在咨询了<ACRONYM title="International Business Machines">IBM</ACRONYM>公司之后发现<ACRONYM title="International Business Machines">IBM</ACRONYM>没有可以商用的产品，他们联系了<ACRONYM title="Relational Software，Inc.">RSI</ACRONYM>。于是<ACRONYM title="Relational Software，Inc.">RSI</ACRONYM>有了第一个客户。在当时，政府和军方的机构往往同时有几种计算机，而那时还没有什么“软件可移植”这样的说法，当然，也几乎没有具有这样的能力的应用软件。也就是说，给<ACRONYM title="Progammable Data Processor">PDP</ACRONYM>-11开发的ORACLE数据库不能用在<ACRONYM title="International Business Machines">IBM</ACRONYM>主机和<ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM>的<ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>上。很快用户就表现出来这样的需求：ORACLE能否同时在不同的操作系统上运行？这给<ACRONYM title="Relational Software，Inc.">RSI</ACRONYM>带来了新的挑战（主要是Miner和Scott）。70年代末期和80年代早期的软件一般都设计成在单一操作系统上运行，具有可移植能力的软件很少。 <BR><BR>1983年3月，<ACRONYM title="Relational Software，Inc.">RSI</ACRONYM>发布了ORACLE第三版。Miner和Scott历尽艰辛用C语言重新写就这一版本。要知道，C语言当时推出不久，用它来写ORACLE软件也是具有一定的风险的，但除此之外，别无他法。很快就证明了这样做是多么的正确:C编译器便宜而又有效，还有很好的移植性。从现在起，ORACLE产品有了一个关键的特性：<STRONG>[可移植性]</STRONG>。ORACLE第3版还推出了<ACRONYM title="Structured Query Language">SQL</ACRONYM>语句和事务处理的“原子性”--<ACRONYM title="Structured Query Language">SQL</ACRONYM>语句要么全部成功，要么全部失败，事务处理要么全部提交，要么全部回滚。ORACLE第3版还引入了非阻塞查询，使用存储在<STRONG>"Before Image File"</STRONG>中的数据来查询和回滚事务，从而避免了读锁定（read lock）的使用（虽然通过使用表级锁定限制了它的吞吐量）。同样是1983年，<ACRONYM title="International Business Machines">IBM</ACRONYM>发布了姗姗来迟的Database 2（<ACRONYM title="Database 2">DB2</ACRONYM>），但只可在MVS上使用。不管怎么说，ORACLE已经占取了先机。 <BR><BR>在开发第三版还没有结束的时候，Scott离开了ORACLE。当时用C语言改写ORACLE的压力很大，无休止的软件调试终于让Scott不堪重负，选择了一走了之。把剩下的重担交给了Miner一个人。在出售了自己的%4的股票之后，Scott 后来创建了Gupta公司（现更名为Centura Software）和PointBase公司（提供百分之百纯Java嵌入式数据库），都是开发和数据库相关的产品。多年后有人问到他的%4的ORACLE股票的时候，Scott，这个曾经给ORACLE写出第一行代码的技术高手，也只能报以一笑了。如果能坚持下来，那是一笔几亿美金的财富。不过当时的Scott没有那么多的想法，他只是太累了。 <BR><BR></FONT>
<P align=center><BR><FONT size=2><IMG height=76 alt="Bruce Scott" src="http://www.dbanotes.net/Images/Scott.jpg" width=65> <BR>图3 Bruce Scott 现在是PointBase公司的创办者之一</FONT></P><BR><FONT size=2>ORACLE最先将其软件移植到<ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM> <ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>计算机上的VMS操作系统上。早在1979年公司就已经雇了一位<ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM>公司的技术高手Robot Brandt进行<ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>上ORACLE的开发。开始的时候资金有限，只能到加州大学伯克利分校去蹭机器进行开发，后来好一些，但机器也是借来的。尽管困难重重，Brandt还是比较成功的完成了移植工作。随着<ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>小型机的大量销售乃至供不应求，ORACLE软件也成为<ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>上最受欢迎的程序。这一点要归功于Larry对市场的先知先觉。如果说，是<ACRONYM title="International Business Machines">IBM</ACRONYM>引领着ORACLE公司走上数据库的大船，那么<ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM>公司的<ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>就是带着他们扬帆出海了。短短的几年之后，ORACLE数据库被移植到各种主要平台之上。ORACLE产品也一直因为有可移植性这个关键特性而被那些潜在的客户关注。 <BR><BR>Oates这个时候因为婚姻趋于破裂而情绪沮丧，已经不能把精力全部放到公司上，不得不离开公司。几年后，他又重返公司，重新为ORACLE做出巨大的贡献，他许下诺言，在公司员工超过1万人的时候会再度离开。1999年，他完成了心愿。现在他正在纵情于音乐，自得其乐。 <BR><BR>很长一段时间里，公司研发由Miner独力承担。Miner视金钱如无物，为人低调，和Ellison的锋芒必露形成鲜明的对比。在公司里，大家一致认为他是老好人，他也深受员工爱戴。Ellison是公司的大脑，Miner则当之无愧的成为公司的心脏。他是个沉默的英雄，正如Steve Jobs背后的Steve Wozniak一样。 <BR><BR>1984年10月，ORACLE发布了第4版产品。产品的稳定性总算得到了得到了一定的增强，用Miner的话说，达到了“工业强度”。但是还不够令人满意，用户对产品的抱怨似乎永无休止。这一版增加了<STRONG>读一致性（Read Consistency）</STRONG>，这是数据库的一个关键特性，可以确保用户在查询期间看到一致的数据。也就是说，当一个会话正在修改数据时，其他的会话将看不到该会话未提交的修改。可以看到，在ORACLE第四版之前，产品始终是不稳定的，但是ORACLE的这群销售人员，主要是Ellison，他在宣传ORACLE的时候总是要夸大其词，但他就是有能力把软件卖出去，而且，还卖得很好，不得不承认，这的确有些神奇。让我们看看1984年软件市场的情形，在数据库市场上的霸主是Asnton-Tale公司，他们的拳头产品是刚推出不久的dBase III（确切的说dBase是PC上的数据库软件霸主），刚刚成为全球第三大的独立软件公司（第一和第二分别是微软、Lotus，ORACLE在当时还排不上号），这一年，也是苹果公司Macintosh诞生的年度，Steven Jobs用这个拳头产品挑战老大哥<ACRONYM title="International Business Machines">IBM</ACRONYM>。同样在这一年中，ORACLE公司的开发人员刚刚把产品移植到PC上。这是最好的年代，也是最坏的年代。数以千计的小公司在软件领域里争斗不休，新公司如雨后春笋般成立，ORACLE如何才能于不败之地？ <BR><BR>在1985年，ORACLE发布了5.0版。有用户说，这个版本算得上是ORACLE数据库的稳定版本。这也是首批可以在Client/Server模式下运行的的<ACRONYM title="Relational Database Mangement System">RDBMS</ACRONYM>产品，在技术趋势上，ORACLE数据库始终没有落后。这意味着运行在桌面PC机（客户机）上的商务应用程序能够通过网络访问数据库服务器。1986年发布的5.1版还支持<STRONG>分布式查询</STRONG>，允许通过一次性查询访问存储在多个位置的数据。 <BR><BR>那是在1985年，当时曾经的最大的独立软件公司Cullinet(主要销售网状数据库)已经如流星般陨落。ORACLE的主要竞争对手是Ingres数据库。Ingres在加州大学伯克利分校诞生，主要的设计者是当时鼎鼎大名的Michael Stonebraker教授。可以说Ingres数据库软件是上个世纪80年代技术上最好的数据库，Ingres市场分额的快速增长已经给ORACLE早成了很大的压力。巧的是，这个时候，<ACRONYM title="International Business Machines">IBM</ACRONYM>公司再一次伸出“上帝之手”。 <BR><BR>Ingres使用的是Stonebraker 发明的<ACRONYM title="QUEry Language">QUEL</ACRONYM>（Query Language））的查询技术，这和<ACRONYM title="International Business Machines">IBM</ACRONYM>的<ACRONYM title="Structured Query Language">SQL</ACRONYM>大不相同。在某些地方<ACRONYM title="QUEry Language">QUEL</ACRONYM>甚至要优于<ACRONYM title="Structured Query Language">SQL</ACRONYM>。<ACRONYM title="International Business Machines">IBM</ACRONYM>当时担心Ingres把<ACRONYM title="QUEry Language">QUEL</ACRONYM>变成标准会对自己不利。经过一番衡量，决定把自己的<ACRONYM title="Structured Query Language">SQL</ACRONYM>提交给数据库标准委员会。而Stonebraker教授可不打算把<ACRONYM title="QUEry Language">QUEL</ACRONYM>提交给数据库标准委员会，学院派的他认为这麽做实际上是扼杀了创新精神。鹬蚌相争，渔翁得利。ORACLE看到并抓住了这个绝佳的机会，大肆宣布ORACLE全面与<ACRONYM title="Structured Query Language">SQL</ACRONYM>兼容，加上ORACLE当时对Ingres PC上的版本的攻击（弱化对手优势，化解自己弱势是他们最拿手的本领），再加上ORACLE公司销售上的强势，Ingres不断丢城失地，等到后来推出支持<ACRONYM title="Structured Query Language">SQL</ACRONYM>的数据库的时候为时已晚。紧跟<ACRONYM title="International Business Machines">IBM</ACRONYM>让ORACLE得以成长、壮大，拥抱标准，拥抱开放，拥抱变化，让ORACLE立于不败之地。 <BR><BR>1986年3月12日，ORACLE公司以每股15美元公开上市，当日以20.75美元收盘，公司市值2.7亿美元。3月13日，微软以每股21美元的发行价上市，以28美元收市，公司市值达到7亿美元。远远超过了ORACLE。成功的光环的微软和盖茨遮盖住了ORACLE和Ellison的光芒，可能这也是Ellison敌视微软的开始。 </FONT>
<P align=center><FONT size=2><IMG height=455 alt="Larry Ellison" src="http://www.dbanotes.net/Images/Larry_Ellison.jpg" width=351> <BR>图4 桀骜不驯的Larry Ellison</FONT></P><BR>
<H2><FONT size=2>经受挫折 </FONT></H2><BR><FONT size=2>ORACLE第6版于1988年发布。由于过去的版本在性能上屡受诟病，Miner带领着工程师对数据库核心进行了重新的改写。引入了<STRONG>行级锁（row-level locking）</STRONG>这个重要的特性，也就是说，执行写入的事务处理只锁定受影响的行，而不是整个表。这个版本引入了还算不上完善的<ACRONYM title="Procedural Language extension to SQL">PL/SQL</ACRONYM>（Procedural Language extension to SQL）语言。第6版还引入了<STRONG>联机热备份</STRONG>功能，使数据库能够在使用过程中创建联机的备份，这极大地增强了可用性。同时在这一年，ORACLE开始研发<ACRONYM title="Enterprise Resource Planning">ERP</ACRONYM>软件。 <BR><BR>公司发展看上去比较顺利，不过，噩梦才刚刚开始。 <BR><BR>由于过去对软件测试重视的程度不够--那个时候公司规模小，基本上都是客户帮助免费测试的。在第六版刚发布之后，很多迫不及待开始使用的用户就怨声载道。这是个根本就没有测试好就进行发布的产品（也怪Ellison，大话总要说在前头，只好自尝苦果）。用户开始对ORACLE大肆抨击，ORACLE的一些对手也开始落井下石，针对ORACLE产品的一些弱点进行攻击。开发人员一面应付愤怒的用户，一面加班加点地对程序进行接连不断的修正，最后，总算得到了一个比较稳定的版本，暂时平息了用户的愤怒。 <BR><BR>但是，实际的问题并不在这里，几年来高速增长的同时也给公司带来了巨大的隐患，1990财年第三季度报表的公布引爆了一切。财务人员发现了1500万美元的坏帐，并且公司利润距离预期相差甚远。接下来的时间里，大公司病的诸般症状接踵而来，面对股东的指控，股票一落千丈，公司前景暗淡，甚至面临破产。一度靠贷款来维持自己的奢华生活也不变卖股票的Ellison也快撑不住了。公司下大力气整顿财务（财务主管杰夫·沃克从某种程度上解救了公司）。公司宣布削减开支，裁退大量销售人员，同时聘用了专门的管理人才。 <BR><BR>噩梦延续到ORACLE第七版的推出而结束。这个公司已经空谈了好几年的新版本（一度被讥讽为不过是Ellison的故计重施而已），直到1992年6月才终于闪亮登场，这一次公司吸取了第六版匆忙上市的教训，听取了用户的多方面的建议，并集中力量对新版本进行了大量而细致的测试。该版本增加了许多新的性能特性：<STRONG>分布式事务处理功能</STRONG>、增强的管理功能、用于应用程序开发的新工具以及安全性方法。ORACLE7还包含了一些新功能，如存储过程、触发过程和说明性引用完整性等，并使得数据库真正的具有可编程能力。还有一点必需要说明的是，这个版本在原有的基于规则的优化器（RBO）之外引入一种新的优化器：<STRONG>基于开销的优化器</STRONG>（Cost-Based Optimizer , <ACRONYM title="Cost-Based Optimizer">CBO</ACRONYM>）。<ACRONYM title="Cost-Based Optimizer">CBO</ACRONYM>根据数据库自身对对象的统计来计算语句的执行开销，从而得出具体的语句执行计划。在以后的几个重大版本中，ORACLE的工程师们逐步对这个优化器进行改进，<ACRONYM title="Cost-Based Optimizer">CBO</ACRONYM>逐渐取代了RBO。 <BR><BR>ORACLE 第七版是ORACLE真正出色的产品,取得了巨大的成功。这个版本的出现真是好时机，当时Sybase公司的数据库已经占据了不少份额，ORACLE借助这一版本的成功，一具击退了咄咄逼人的Sybase。公司的销售人员这次算到了给用户兑现空头许诺的时候。公司经过两三年的治理，终于摆脱了种种麻烦，重新开始健康发展，销售额也从92年的15亿美元变为四年后的42亿美元。 <BR><BR></FONT>
<H2><FONT size=2>跨上巅峰</FONT></H2><BR><FONT size=2>“搅浑水”是Ellison的一项绝技。在1995年巴黎举行的欧洲信息技术论坛会议上，Ellison在即兴演讲中介绍了网络计算机（Network Computer，NC）的概念,所谓NC指的是配置简单却能充分利用网络资源的低价电脑，最为重要的是，它不需要操作系统，或者更准确的说，不需要微软的操作系统。Ellison希望借此来抵制微软的强势。很快，ORACLE联合<ACRONYM title="International Business Machines">IBM</ACRONYM>、Sun、Apple和Netscape在1996年制定了网络计算机的标准，但事实上人们从头到尾没有看到一台真正的NC生产出来。这次的演讲在业界引起了轩然大波，通过这个事件，ORACLE公司吸引了足够多的注意力，同时也让人们看到ORACLE公司对于网络的巨大信心。 <BR><BR>1997年6月，ORACLE第八版发布。ORACLE8支持<STRONG>面向对象的开发</STRONG>及新的多媒体应用，这个版本也为支持Internet、网络计算等奠定了基础。同时这一版本开始具有同时处理大量用户和海量数据的特性。这个版本也算可圈可点了。 <BR><BR>1998年9月，ORACLE公司正式发布ORACLE 8i。“i”代表Internet，这一版本中添加了大量为支持Internet而设计的特性。这一版本为数据库用户提供了全方位的Java支持。ORACLE 8i成为第一个完全整合了本地Java运行时环境的数据库，用Java就可以编写ORACLE的存储过程。对，Java，只要是能够打击微软的武器，ORACLE都要派上用场。ORACLE8i 添加了SQLJ（一种开放式标准，用于将<ACRONYM title="Structured Query Language">SQL</ACRONYM>数据库语句嵌入客户机或服务器Java代码）和ORACLE interMedia（用于管理多媒体内容）以及<ACRONYM title="Extensible Markup Language">XML</ACRONYM>等特性。同时，ORACLE 8i 极大程度上提高了伸缩性、扩展性和可用性以满足网络应用需要。接下来的几年中，ORACLE陆续发布了8i的几个版本，并逐渐添加了一些面向网络应用的新特性。面对开源运动的蓬勃发展，ORACLE自然不甘落后，1998年十月ORACLE发布了可用于Linux平台的ORACLE 8 以及ORACLE Application Server 4.0，随后不久，ORACLE又发布了ORACLE 8i for Linux。在 .com大潮中，ORACLE是站在风口浪尖的弄潮儿。 <BR><BR>在2001年6月的ORACLE OpenWorld大会中，ORACLE发布了ORACLE 9i。在ORACLE 9i的诸多新特性中，最重要的就是Real Application Clusters（<ACRONYM title="Real Application Clusters">RAC</ACRONYM>）了。说起ORACLE集群服务器，早在第五版的时候，ORACLE就开始开发ORACLE并行服务器（ORACLE Parallel Server ，OPS），并在以后的版本中逐渐的完善了其功能，不过，严格来说，尽管OPS算得上是个集群环境，但是并没有体现出集群技术应有的优点。在完全吸收了Rdb（ORACLE在1994年收购了Compaq公司的Rdb数据库，此前Rdb属于<ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM>公司，<ACRONYM title="Digital Equipment Corporation">DEC</ACRONYM>公司在<ACRONYM title="Virtual Address eXtended">VAX</ACRONYM>上实现了第一个可以商用的Rdb集群数据库）的一些技术优势之后，ORACLE终于推出了真正的应用集群软件。<ACRONYM title="Real Application Clusters">RAC</ACRONYM>使得多个集群计算机能够共享对某个单一数据库的访问，以获得更高的可伸缩性、可用性和经济性。ORACLE 9i的<ACRONYM title="Real Application Clusters">RAC</ACRONYM>在TPC-C的基准测试中打破了数项记录，一时间业内瞩目。这个新的数据库还包含集成的商务智能（BI）功能。ORACLE 9i第2版还做出了很多重要的改进，使ORACLE数据库成为一个本地的<ACRONYM title="Extensible Markup Language">XML</ACRONYM>数据库；此外还包括自动管理、<STRONG>Data Guard</STRONG>等高可用方面的特性。 <BR><BR></FONT>
<H2><FONT size=2>历史还在继续</FONT></H2><BR><FONT size=2>2003年9月8日，旧金山举办的ORACLE World大会上，Ellison宣布下一代数据库产品为“ORACLE 10g”。ORACLE应用服务器10g（ORACLE Application Server 10g）也将作为甲骨文公司下一代应用基础架构软件集成套件。“g”代表“grid ,网格”。这一版的最大的特性就是加入了网格计算的功能。何谓网格计算？网格计算可以把分布在世界各地的计算机连接在一起，并且将各地的计算机资源通过高速的互联网组成充分共享的资源集成。通过合理调度，不同的计算环境被综合利用并共享。ORACLE宣称10g可以作为网格计算的基础，矛头直指最大的敌人<ACRONYM title="International Business Machines">IBM</ACRONYM>的“随需应变”！看来，ORACLE公司已经把这一次的“赌注”押在了网格计算的大市场上。但前景如何？让我们拭目以待。 <BR><BR>如果说，<ACRONYM title="International Business Machines">IBM</ACRONYM>是IT产业中的一头巨鲸，那么ORACLE一定就是一条大鲨鱼：咄咄逼人，善于进攻。就在2003年6月初，ORACLE突然宣布51亿美金收购仁科（PeopleSoft），业内再次震动。此举又一次露出ORACLE 一贯善于进攻的本性。要知道，ORACLE在发展过程中很少对企业进行收购的，那么收购仁科目的何在？首先，ORACLE觊觎企业应用软件市场已久，但苦于不能进一步扩大市场分额，尤为重要的是，一旦成功，可以直接对最大的敌人<ACRONYM title="International Business Machines">IBM</ACRONYM>进行打击，还可以阻击SAP等巨头的强势。时至今日，ORACLE依然以不达目的不罢休的态势和仁科缠斗，结果如何，让我们拭目以待。 <BR><BR>"人生最大的快乐是击败敌人"，Ellison一定很喜欢这句话。 <BR><BR>后记：2004年12月13日，Oracle公司宣布签订了以每股26.50美元、总计约103亿美元的代价收购 仁科(PeopleSoft) 的最终协议。历时十八个月的争斗终于尘埃落定。 <BR>
<HR>

<SCRIPT type=text/javascript><!--
google_ad_client = "pub-2198040673582211";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_channel ="0605826110";
google_ad_type = "text";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></SCRIPT>

<SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript>
</SCRIPT>

<HR>
</FONT>
<H2><FONT size=2>本文作者</FONT></H2><FONT size=2>Fenng，某美资公司DBA，业余时间混迹于各数据库相关的技术论坛且乐此不疲。目前关注如何利用ORACLE数据库有效地构建企业应用。对Oracle tuning、troubleshooting有一点研究。<BR>个人技术站点:</FONT><A href="http://www.dbanotes.net/"><FONT size=2>http://www.dbanotes.net/</FONT></A><FONT size=2> 。可以通过电子邮件 dbanotes@gmail.com 联系到他。 </FONT><img src ="http://www.blogjava.net/faintbear/aggbug/1916.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-03-10 16:10 <a href="http://www.blogjava.net/faintbear/archive/2005/03/10/1916.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何搭建Oracle 8高级复制环境</title><link>http://www.blogjava.net/faintbear/archive/2005/03/10/1912.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Thu, 10 Mar 2005 07:39:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/03/10/1912.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/1912.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/03/10/1912.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/1912.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/1912.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 12pt; mso-line-height-alt: 16.5pt"><FONT size=2><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">Oracle</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">高级复制，也称为对称复制。和</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">Oracle</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的其他功能不同，</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">Oracle</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的高级复制不是即插即用的，用户必须深刻理解它们是如何工作的以及各种复制方案的优缺点。深刻理解复制的基本概念可以帮助你设计一个可靠的复制环境（有关高级复制的基本概念请</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"><A href="http://www.ccidnet.com/tech/guide/2001/03/28/58_1900.html" target=_blank><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参看此文</SPAN></A></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</SPAN></FONT><FONT size=2><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"> <BR></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本文主要介绍了搭建</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">Oracle 8</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">高级复制环境时需要设置的一些系统参数。需要提醒读者注意的是，笔者所给出的这些系统参数的具体配置数值只能保证可以成功的搭建出一个相对较好的高级复制环境，但本文并未对这些参数的优化配置进行进一步的深入探讨。</SPAN></FONT><FONT size=2><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"> <BR><BR></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">现在我们正式开始。假设有两个节点，节点名分别为</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">ora_bj</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">ora_nb</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</SPAN></FONT><FONT size=2><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"> <BR><BR><STRONG>1.</STRONG></SPAN><STRONG><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统环境参数（</SPAN></STRONG><STRONG><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">init.ora</SPAN></STRONG><STRONG><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件）设置（对于非确省值）</SPAN></STRONG></FONT><FONT size=2><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"> <BR></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果要搭建</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">Oracle 8.0.x</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个高级复制环境，必须在初始化文件中设置下列参数，见表</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">1</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所示。</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></P>
<P>
<TABLE style="BACKGROUND: #e6e6e6; mso-padding-alt: 0cm 0cm 0cm 0cm; mso-cellspacing: 0cm" cellSpacing=0 cellPadding=0 bgColor=#e6e6e6 border=1>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; BACKGROUND: #ffcc66; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed" vAlign=top colSpan=3>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><FONT size=2><B><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表</SPAN></B><B><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">1</SPAN></B><B><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</SPAN></B><B><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">Oracle8</SPAN></B><B><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">高级复制环境初始化参数设置</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></FONT></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; BACKGROUND: #ccff66; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm; TEXT-ALIGN: center" align=center><B><FONT face=宋体 size=2>参数名称</FONT></B></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; BACKGROUND: #ccff66; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm; TEXT-ALIGN: center" align=center><B><FONT face=宋体 size=2>推荐值</FONT></B></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; BACKGROUND: #ccff66; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm; TEXT-ALIGN: center" align=center><B><FONT face=宋体 size=2>备注</FONT></B></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>processes</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>100</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=2><SPAN lang=EN-US>&nbsp;</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></FONT></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>shared_pool_size</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>30000000</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><FONT face=宋体><FONT size=2>至少<SPAN lang=EN-US>30M，如果有很多的复制对象的话，则需要更多的空间</SPAN></FONT></FONT></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>large_pool_size</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>500K</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2></FONT></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>db_block_buffers</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>550</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2></FONT></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>compatible</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>8.0.5.0</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2></FONT></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>db_file_multiblock_read_count</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>16</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2></FONT></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>dml_locks</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>100</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2></FONT></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>sequence_cache_entries</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>30</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2></FONT></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>sequence_cache_hash_buckets</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>23</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2></FONT></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>global_names</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>TRUE</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2></FONT></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>distributed_lock_timeout</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>300</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2></FONT></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>distributed_transactions</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>10</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2></FONT></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>Open_links</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>6</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><FONT face=宋体 size=2>复制节点多的话，需要增加</FONT></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>Sort_area_size</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>1000000</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2></FONT></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>db_name</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>ORA_BJ</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><FONT face=宋体><FONT size=2>或者<SPAN lang=EN-US>ORA_NB</SPAN></FONT></FONT></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>job_queue_processes</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>6</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2></FONT></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>job_queue_interval</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>60</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2></FONT></SPAN>&nbsp;</P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>parallel_max_servers</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>10</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><FONT face=宋体 size=2>只适用于并行传播</FONT></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>parallel_min_servers</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>2</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><FONT face=宋体 size=2>只适用于并行传播</FONT></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 173.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=231>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>PEPLICATION_DEPENDENCY_TRACKING</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 66pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=88>
<P class=content style="MARGIN: auto 0cm"><SPAN lang=EN-US><FONT face=宋体 size=2>true</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 191.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=255>
<P class=content style="MARGIN: auto 0cm"><FONT face=宋体><FONT size=2>如果采用并行传播，必须设置为<SPAN lang=EN-US>TRUE</SPAN></FONT></FONT></P></TD></TR></TBODY></TABLE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 16.5pt"><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"><BR></SPAN><FONT size=2><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">1</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中各个参数的推荐值认为目前的复制环境只有两个节点，一个简单的高级复制环境，如果节点较多，且复制关系复杂，需要复制的表也很多，则需要相应增大一些参数的值，这可以通过修改不同的参数试验获得。</SPAN></FONT><FONT size=2><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"> <BR><BR></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将所有的</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">SNAPSHOT_ </SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者是</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">JOB_QUEUE_KEEP_CONNECTIONS</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数都删除，因为</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">oracle8</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以后已经不支持这些参数。</SPAN></FONT><FONT size=2><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"> <BR><BR><STRONG>2.Net8</STRONG></SPAN><STRONG><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数文件</SPAN></STRONG><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"> <o:p></o:p></SPAN></FONT></P>
<P>
<TABLE style="BACKGROUND: #f7f3f7; WIDTH: 100%; mso-cellspacing: 1.5pt" cellPadding=0 width="100%" bgColor=#f7f3f7 border=0>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #000084">(1)sqlnet.ora</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000084; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件设置</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></P></TD></TR></TBODY></TABLE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 16.5pt"><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"><FONT size=2>&nbsp;<o:p></o:p></FONT></SPAN></P>
<P>
<TABLE style="WIDTH: 435pt; mso-padding-alt: 0cm 0cm 0cm 0cm; mso-cellspacing: 0cm" cellSpacing=0 cellPadding=0 width=580 border=1>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt"><SPAN lang=EN-US style="FONT-SIZE: 8.5pt; COLOR: black; FONT-FAMILY: Verdana"><FONT size=2>automatic_ipc=off<BR>names.default_domain = world<BR>name.default_zone = world<BR>sqlnet.expire_time = 0<BR>DISABLE_OOB = ON<o:p></o:p></FONT></SPAN></P></TD></TR></TBODY></TABLE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 16.5pt"><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"><FONT size=2>&nbsp;<o:p></o:p></FONT></SPAN></P>
<P>
<TABLE style="BACKGROUND: #f7f3f7; WIDTH: 100%; mso-cellspacing: 1.5pt" cellPadding=0 width="100%" bgColor=#f7f3f7 border=0>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0.75pt; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #ebe9ed; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #000084">(2)tnsnames.ora</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000084; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件设置</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></P></TD></TR></TBODY></TABLE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 16.5pt"><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"><FONT size=2>&nbsp;<o:p></o:p></FONT></SPAN></P>
<P>
<TABLE style="WIDTH: 435pt; mso-padding-alt: 0cm 0cm 0cm 0cm; mso-cellspacing: 0cm" cellSpacing=0 cellPadding=0 width=580 border=1>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt"><SPAN lang=EN-US style="FONT-SIZE: 8.5pt; COLOR: black; FONT-FAMILY: Verdana"><FONT size=2>ORA_BJ.world =<BR>&nbsp;&nbsp;&nbsp;&nbsp;(DESCRIPTION =<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ADDRESS = (PROTOCOL= TCP)(Host= 80.24.16.201)(Port= 1521))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(CONNECT_DATA = (SID = ORA8))<BR>&nbsp;&nbsp;&nbsp;&nbsp;)<BR>ORA_NB.world =<BR>&nbsp;&nbsp;&nbsp;&nbsp;(DESCRIPTION =<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ADDRESS = (PROTOCOL= TCP)(Host= 80.24.16.14 )(Port= 1521))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(CONNECT_DATA = (SID = ORA8))<BR>&nbsp;&nbsp;)<o:p></o:p></FONT></SPAN></P></TD></TR></TBODY></TABLE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 12pt; LINE-HEIGHT: 16.5pt"><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"><BR></SPAN><FONT size=2><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上面</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">Host</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为各个复制节点的</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">IP</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址，如果复制节点很多，则全部加入到</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">tnsnames.ora</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中，本例中有两个节点。</SPAN></FONT><FONT size=2><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"> <BR><BR><STRONG>3.</STRONG></SPAN><STRONG><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表空间</SPAN></STRONG></FONT><FONT size=2><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"> <BR></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果搭建</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">Oracle 8</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">高级的高级复制环境，额外需要加大一些表空间，表</SPAN><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt">2</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是建议的初始表空间。</SPAN><SPAN style="mso-bidi-font-size: 10.5pt"> <SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P>
<DIV align=center>
<TABLE style="BACKGROUND: #e6e6e6; mso-padding-alt: 0cm 0cm 0cm 0cm; mso-cellspacing: 0cm" cellSpacing=0 cellPadding=0 bgColor=#e6e6e6 border=1>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; BACKGROUND: #ffcc66; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed" vAlign=top colSpan=2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><FONT size=2><B><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表</SPAN><SPAN lang=EN-US>2</SPAN></B><B><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</SPAN><SPAN lang=EN-US>Oracle</SPAN></B><B><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统表空间大小设置</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></FONT></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; BACKGROUND: #ccff00; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 215.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed" vAlign=top width=287>
<P style="TEXT-ALIGN: center" align=center><B><FONT face=宋体 size=2>表空间</FONT></B></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; BACKGROUND: #ccff00; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 215.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed" vAlign=top width=287>
<P style="TEXT-ALIGN: center" align=center><B><FONT face=宋体 size=2>建议初始值</FONT></B></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 215.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=287>
<P style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US><FONT face=宋体 size=2>SYSTEM</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 215.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=287>
<P style="TEXT-ALIGN: center" align=center><FONT face=宋体><FONT size=2>至少<SPAN lang=EN-US>20M</SPAN></FONT></FONT></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 215.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=287>
<P style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US><FONT face=宋体 size=2>ROLLBACK SEGMENTS</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 215.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=287>
<P style="TEXT-ALIGN: center" align=center><FONT face=宋体><FONT size=2>至少<SPAN lang=EN-US>20M</SPAN></FONT></FONT></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 215.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=287>
<P style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US><FONT face=宋体 size=2>TEMPORARY</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 215.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=287>
<P style="TEXT-ALIGN: center" align=center><FONT face=宋体><FONT size=2>至少<SPAN lang=EN-US>10M</SPAN></FONT></FONT></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 215.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=287>
<P style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US><FONT face=宋体 size=2>TOOLS</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 0cm; BORDER-TOP: #ebe9ed; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ebe9ed; WIDTH: 215.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ebe9ed; BACKGROUND-COLOR: transparent" vAlign=top width=287>
<P style="TEXT-ALIGN: center" align=center><FONT face=宋体><FONT size=2>至少<SPAN lang=EN-US>20M</SPAN></FONT></FONT></P></TD></TR></TBODY></TABLE></DIV>
<P><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><BR></SPAN><FONT size=2><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">同时，我还建议回滚段的下一个区大小设置至少为</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">100K</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">。</SPAN></FONT><FONT size=2><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"> <BR><BR></SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">上面这些建议的设置是一种较小复制环境下的空间设置。如果要复制的表很多，每天的变化量很大，复制节点复杂，则需要相应增大表空间的大小。</SPAN></FONT></P><img src ="http://www.blogjava.net/faintbear/aggbug/1912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-03-10 15:39 <a href="http://www.blogjava.net/faintbear/archive/2005/03/10/1912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 8高级数据复制技术</title><link>http://www.blogjava.net/faintbear/archive/2005/03/10/1910.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Thu, 10 Mar 2005 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/03/10/1910.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/1910.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/03/10/1910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/1910.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/1910.html</trackback:ping><description><![CDATA[<P><FONT size=2>本文首先简单介绍和数据库复制有关的基本概念，然后探讨Oracle8数据复制技术中的几个重要模型，最后介绍Oracle8的数据复制管理器以及如何利用它来配置和维护复制环境。 <BR><BR>　　在文章的开头，我想首先简单谈一下复制的基本概念，也就是什么是复制？复制简单地说就是在由两个或者多个数据库系统构成的一个分布式数据库环境中拷贝数据的过程。Oracle高级复制，也称为对称复制，第一次是在Oracle 7.1.6版本中出现的，在这之前的Oracle版本中，Oracle数据复制方法仅有只读快照形式的基本复制一种方法。随着Oracle版本的每一次升级，数据复制的功能、管理以及速度等方面都得到了很大的改进和完善。目前，由于对分布式数据环境需求的不断增长，越来越多的应用提出了数据复制的需求。 <BR><BR><STRONG>一、基本概念</STRONG> <BR>　　1.分布式数据库技术 <BR><BR>　　分布式数据库技术是目前我们经常提及的分布式计算的一个重要组成部分，该技术允许数据在多个服务器端共享。采用分布式数据库技术，一个本地服务器可以存取不同物理地点的远程服务器上的数据；也可以使所有的服务器均可以持有数据的拷贝/复制，这样分布式系统中的所有服务器均可进行本地存取。 <BR><BR>　　设计一个分布式计算解决方案首先需要考虑的问题就是应用的完整性、复杂性、性能和可用性以及响应时间等，同时还需要考虑的是对于不同的应用需求是采用实时存取远程数据还是采用延迟存取远程数据。这对于数据复制来讲就是采取实时更新复制方案还是延迟数据复制方案。 <BR><BR>　　2.同步和异步的概念 <BR><BR>　　同步分发数据库技术是一种实时远程存取和实时更新数据的技术。这种技术可以保证应用的完整性降低了应用的复杂性，但是如果系统存在网络存取速度很慢这样的问题，相应响应时间就会很慢。 <BR><BR>　　异步分发数据库技术是一种延迟远程存取和延迟传播对数据更新的技术。这种技术具有很高的可用性和很短的响应时间。相比同步分发数据库技术就显得复杂一些，为了确保应用的完整性需要仔细考虑和设计。 <BR><BR>　　对于实际的商业问题，必须权衡这两种技术的利弊最终选择最佳的解决方案，有些问题选用同步技术比较适合，也有一些问题采用异步技术是比较好的解决方案，还有一些问题必须综合这两种技术。 <BR><BR>　　3.复制的概念 <BR><BR>　　复制，顾名思义就是将数据库中的数据拷贝到不同物理地点的数据库中以支持分布式应用，它是整个分布式计算解决方案的一个重要组成部分。上面介绍了同步和异步的概念，这里针对复制也存在同步复制和异步复制的问题。 <BR><BR>　　同步复制，复制数据在任何时间在任何复制节点均保持一致。如果复制环境中的任何一个节点的复制数据发生了更新操作，这种变化会立刻反映到其他所有的复制节点。这种技术适用于那些对于实时性要求较高的商业应用中。 <BR><BR>　　异步复制，所有复制节点的数据在一定时间内是不同步的。如果复制环境中的其中的一个节点的复制数据发生了更新操作，这种改变将在不同的事务中被传播和应用到其他所有复制节点。这些不同的事务间可以间隔几秒，几分种，几小时，也可以是几天之后。复制节点之间的数据临时是不同步的，但传播最终将保证所有复制节点间的数据一致。 <BR><BR>　　4.更新冲突 <BR><BR>　　在异步复制环境中，对于所有应用最关键的就是要确保数据的一致性。我们来看下面这种情况会有什么后果发生呢？在同一时间对同一个表的同一行数据的同一列在两个不同的地点作更新。这种情况就会发生称之为更新冲突的错误。为保证数据的一致性，更新冲突必须被检测到并且处理以确保在不同地点的数据元素保持同样的值。更新冲突可以通过限制"所有权" 到单一节点或者将更新某个特定数据元素的权利限制到某一具体节点的方法来避免。 <BR><BR><STRONG>二、Oracle 8数据复制应用模型(usage models)</STRONG> <BR>　　为确保实际应用数据的一致性，必须在异步复制应用模型中考虑冲突避免或者冲突检测和消除的方法。例如，对于一个实际商业应用，首先必须在逻辑上了解该商业应用采取的冲突避免方法和在某个节点有那些数据以及这些数据中那些是可更新的，而那些又是不可更新的。在下面的这一部分中，我们首先将详细讨论两种常用的冲突避免方法：主站点所有权模型和动态所有权模型。然后，讨论共享所有权模型以及这种模型引起的冲突检测和处理问题，最后，讨论针对Fail-over的复制配置，这种复制方案同时考虑了冲突避免和冲突检测与消除两种情况。 <BR><BR>　　1.主站点所有权 <BR><BR>　　主站点所有权，异步复制数据被一个单一节点"所有"，这些要复制的数据仅能被该节点更新，其他节点向拥有该数据的主节点订阅（subscribe）数据，这意味着他们在本地系统上只能够存取这些复制数据的只读拷贝。下面是一些这样的例子。 <BR><BR>　　（1）决策支持系统（DSS）的联机事务处理数据的卸载。来自一个或者多个OLTP系统的数据可以被卸载到一个独立的局部DSS中，用于只读分析。 <BR><BR>　　（2）中央信息的分发。产品信息，如价格列表等在总部节点上维护，然后将这些信息复制到远程销售办事处的只读产品目录系统中。 <BR><BR>　　（3）远程信息的集中。许多远程节点上的产品目录数据复制到总部节点，这里总部节点只需要有数据只读的权限。 <BR><BR>　　一个主节点拥有一个表的完全所有权，而其他节点只能订阅这个表的只读拷贝。也可以是多个主节点拥有同一个表的截然不同子集或者划分，而另一些节点则订阅这些子集或者划分的只读拷贝。如，一个分布的产品目录系统可以让不同的销售办事处拥有一个表的属于自己的一个"水平"部分，如在客户（CUSTOMERS）表, 订单（ORDERS）表和目录（ITEMS）这些表中含有每个销售办事处为之服务的客户和产品信息。中心总部节点可以通过订阅每个办事处拥有的数据来保持一个完整的所有产品和客户信息的只读拷贝。 <BR><BR>　　2.动态所有权 <BR><BR>　　动态所有权，异步更新将复制数据从一个节点移到另一个节点，而在该过程中，必须保证在同一时刻只有一个特定的节点可以对数据进行更新。一个典型实际应用就是"海关订单处理系统"，订单处理的典型步骤是，报关→同意→装运→开单→收单→入帐等。应用模型可以执行其中的任何步骤，但必须保证各个不同模块的同一个数据应该在一个综合数据库中。在该系统中，当且仅当订单的状态表明前一个步骤已经完成时，下一个应用模块才可以执行更新订单数据的操作。例如，"装运"应用模块仅能在"报关"并且得到"同意"后才能被执行。 <BR><BR>　　通过使用动态所有权复制模型，可以将一个系统分布在多个节点和数据库上，也就是说应用模型可以建立在不同的系统上。我们还是来看上面的例子，"报关"和"批准"这两部分可以运行在一个系统上，"装运"在另一个系统上，"开单"和"收单"等又可在一个系统上。在这个分布式系统中，数据可以被复制到不同的节点上，这些节点对复制的数据只要具有只读的权限即可。如，利用复制，"报关"节点可以监视已经报关的订单处理过程。 <BR><BR>　　前面讨论的主节点所有权和动态所有权复制模型具有一个共同的特征：在任何一个给定的时间点，只允许一个节点有更新数据的权利，而其余节点对于复制的数据拷贝仅有只读权限。然而，还存在这样的情况，允许多个节点可以更新同一个数据，在极端情况下可以是在同一时刻，这就是所说的共享所有权。 <BR><BR>　　3.共享所有权 <BR><BR>　　共享所有权使用异步复制，这对于主节点和动态所有权模型来讲存在一些限制。在共享所有权情况下，整个系统可以存在暂时的不一致，同时必须使用冲突检测和消除。共享所有权模型相对于前面两种模型具有一些新的特点。 <BR><BR>　　例如，对于前面我们讨论的那个采用具有水平划分主节点复制方案来的分布式"订单处理系统"的例子。采用共享所有权模型，每个销售办事处都有库表中不同的水平划分，该库表含有每一个办事处为之服务的一些订单信息和与消费者有关的顾客信息。每一个销售办事处只输入与自己有关的顾客订单情况，而不管其余顾客信息。 <BR><BR>　　然而，在实际商业应用中，这个模型不是最佳的选择。例如，这种情况，一个零售集团在一个大城市中可以有好几个商场。顾客可能经常去离他们住的最近的那个商场，但是偶尔也可能到其他商场去购物。这时，如果多家商场执行更新同一个顾客和其订单数据的信息，更新冲突就会发生。所以在这种情况下必须要采用冲突检测和消除方案。 <BR><BR>　　Oracle8高级复制支持同时既考虑冲突避免又考虑冲突检测和消除的复制模型。Oracle8高级复制之所以又称为对称复制，其原因之一就是支持对称复制模型，也就是可以在任何地方更新，即所有的复制节点都可以进行更新处理。为了避免冲突，一种方法就是将应用设计为将更新限制在一些特定的节点。对于共享所有权，Oracle 8提供了自动冲突检测和消除方案。 <BR><BR>　　4.备用数据库（Fail-Over ） <BR><BR>　　异步复制通过将一个主系统数据复制到另一系统，可以起到对主系统的崩溃提供保护的作用，这也就是所说的fail-over系统，如果主系统出现问题，业务依旧可以通过复制数据库进行。 <BR><BR>　　Oracle 8高级复制支持这种fail-over配置。同时，Oracle也针对fail-over提供了另外两个可选的解决方案：Oracle并行服务器和备用数据库配置。用户可以根据吞吐量、可用性、事务损失的可能性和其他一些如数据一致性、方法的局限性等参考指标来权衡选择合适的fail-over方案。 </FONT><BR><BR><BR><SPAN class=content><FONT size=2><STRONG>三、Oracle 高级复制配置</STRONG> <BR>　　Oracle 8高级复制即可支持基于整个表的复制也可支持基于部分表的复制两种复制方案。这两种复制方案主要是通过Oracle的两种复制机制来完成的，即多主复制和可更新快照复制，同时还可以将这两种复制机制结合起来以满足不断变化的业务需求。 <BR><BR>　　1.多主复制 <BR><BR>　　多主复制方案支持全表在各个主节点间的对称复制，允许所有主节点对主表都有更新操作的权利。任何一个主节点上的复制表的更新都会被传播并被直接应用到其他所有主表。一个主节点出现问题，不会对其他主节点之间变化的传播造成影响。 <BR><BR>　　多主复制采用一种称为"延迟远程过程调用（deferred remote procedure calls RPCs)"的机制作为主要的传播和应用变化的机制。各节点之间变化的传播，既可以以基于事件的方式立即传播，也可以在某个特定的时间点，如在网络空闲时（如晚上）传播。在传播变化时，如果其中的一个远端系统没有准备好，传播变化的延迟远程过程调用（RPCs）就会保存在其本地队列中，等到系统准备好以后再执行。 <BR><BR>　　2.可更新快照 <BR><BR>　　Oracle 将最早Oracle 7上的只读快照机制扩展为一种允许快照可更新的对称复制机制。快照更新的传播方式和如何应用到快照主节点采用了和多主复制一样的延迟远程过程调用机制。 <BR><BR>　　对于快照的定义，既可以是包含一个主表的完全拷贝，也可以是为满足基于值的选择标准的主表中行的子集。快照在主节点的刷新是按照一定的时间间隔或用户单独请求进行的。最后一次刷新后主表的任何变化也同样被传播并应用到快照。多个快照的刷新是在一个一致的事务中完成的，这就确保了数据和引用的完整性。 <BR><BR>　　3.混合配置 <BR><BR>　　可以将多主复制和可更新快照复制结合在一起，构成一种新的混合配置，这种配置可以完成对全表或者子表的复制。例如下面这种应用就是一个典型的混合配置方案，一个系统具有两个位于不同地理区域的中心节点，这两个不同的地理区域下面还有一些分支机构，两个中心节点可以彼此看做是自己的备份节点。采用多主复制方法在两个中心站点之间复制数据，同时采用只读或者可更新快照复制方法在每个区域范围中的主节点之间复制全表或者子表。这种配置的一个显著好处就是当其中的一个中心节点发生问题时，这些快照的主节点可以被重新定义到另一个运行良好的中心节点，从而提高了系统的可靠性。 <BR><BR>　　4.其他复制机制 <BR><BR>　　Oracle除了前面讨论的三种复制机制以外，还提供了另外两种复制机制：过程级复制和同步复制。 <BR><BR>　　（1）过程级复制 <BR><BR>　　这种复制方案主要应用在存在大量数据更新以及采取批处理方式操作数据时需要复制数据的情况。例如，下面这个应用，一个以年为单位管理客户订单的公司，对于老的订单数据不再需要在线保存，而需要卸载到某存储介质中。这时，如果在多个节点间复制每一独立的行级变化效率将是非常低的。对于这种情况，可以直接在每个复制节点执行一个过程来直接进行这种更新操作。Oralce8高级复制提供的分布式模式管理功能（将在下面详细讨论）可以非常方便地在多个节点上设置和维护过程级复制的远程过程。 <BR><BR>　　（2）同步复制 <BR><BR>　　一个采用同步复制方案的表发生变化时，Oracle会确保这种变化能够成功地作用在本地表和其他节点的复制表，如果失败则整个事务会被成功回滚。同步复制在网络的稳定性比较高的情况下是可行的，可以保证复制节点之间的复制数据一直保持同步。 <BR><BR><STRONG>四、Oracle 8管理工具</STRONG> <BR>　　很显然，有效的管理工具对于成功的分布式应用是非常关键的，如果没有能力去操作它，再专业的复制功能也不能发挥很好的作用。Oracle 8高级复制提供了几个功能强大的管理工具，诸如复制目录，分布式模式管理以及其他的一些Oracle 复制管理工具。 <BR><BR>　　1.复制目录 <BR><BR>　　复制目录是一个包含定义复制环境原数据的一个单一综合库。复制目录本身也被复制到多个节点以确保高可用性和授权用户可以简单地实现本地存取管理。 <BR><BR>　　复制目录定义了被复制的数据库对象，复制的节点以及用于复制的机制。数据库对象有需要复制的库表和其他一些相关的对象，如索引，视图，过程，触发器和同义词等等。这些原数据是开放的，用户可以通过标准SQL语句进行检索和查询。 <BR><BR>　　2.分布式模式管理 <BR><BR>　　Oracle 8高级复制的分布式模式管理功能允许在一个控制点就可进行复制环境的定义和改变。对复制环境的任何改变，都将自动复制并且应用这些数据定义语言（DDL）命令到其他复制环境节点，同时也利用数据库触发器和复制相关过程自动生成复制所需要的一些支持对象。 <BR><BR>　　分布式模式管理在一个被称为主定义节点的地方进行控制。它自动将DDL推向其他所有主节点并且也允许快照节点"拉"回并且执行这些DDL命令。由于主定义节点使用并且维护着整个复制目录，该复制目录本身也被复制到其他节点，所以该主定义节点一旦出现问题，就必须用其他节点来代替。分布式模式管理可以通过一个图形用户界面管理工具（GUI）来配置。 <BR><BR>　　3.Oracle复制管理器 <BR><BR>　　Oracle复制管理器是Oracle提供的一个图形界面的复制管理工具，通过该工具可以配置，定时和通过一个节点来管理整个的复制环境。该管理工具可以单独运行也可以在Oracle企业管理器中通过一个applet来激活。 <BR><BR>　　采用Oracle复制管理器，用于复制的对象组可以通过一些鼠标操作非常简单地定义。复制组可以包含表和其他相关的对象，如触发器，存储过程，索引，视图，同义词以及序列等。Oracle除了可以复制每个复制组的全部拷贝以外，还可以选择复制数据的子集。复制组的配置可以在任何时候修改，这种变化将自动应用到其他所有的复制节点。 <BR><BR>　　一旦定义了对象组，可以通过Oracle复制管理器，简单进行拖拉操作，就可自动部署复制组到一个新的节点。这些快照节点既可以是只读的也可以是可更新的。复制节点配置完成以后，用户可以配置定时以使复制环境中的变化传播到其他节点，当然也可以选择采用同步复制。 <BR><BR>　　4.选择冲突解决方案 <BR><BR>　　如果选择采用一种可以在任何地方更新的复制方案，Oracle复制管理器提供了几个内建的冲突解决方案，诸如"最近时间戳"和"站点优先"等来解决潜在的冲突。对于不同的表可以选择不同的方法，甚至可以对一个表中的不同列选择不同的冲突消除方案。用户对于一些特殊的商业需求也可以创建自己的冲突解决方案。 <BR><BR>　　5.实时管理 <BR><BR>　　通过Oracle的复制管理器，复制环境中任何地方发生的错误均可以非常快速和简单地分离出来并且改正。通过一个单一的节点，用户就可以看到每个节点的延迟事务队列，也可以重新定时或者强制立即执行事务。另外，用户也可以利用Oracle企业管理器的事件管理功能来对复制环境进行监视，该事件管理器提供了对多个站点间的复制状态的主动监视功能，另外还提供了可以定义自动改正的选项等。 <BR><BR><STRONG>结论</STRONG> <BR>　　和Oracle的其他功能不同，Oracle的高级复制不是即插即用的，用户必须深刻理解它们是如何工作的以及各种复制方案的优缺点。深刻理解复制的基本概念可以帮助你设计一个可靠的复制环境。 </FONT><BR></SPAN></P><img src ="http://www.blogjava.net/faintbear/aggbug/1910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-03-10 15:36 <a href="http://www.blogjava.net/faintbear/archive/2005/03/10/1910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE的高级复制资料 2</title><link>http://www.blogjava.net/faintbear/archive/2005/03/10/1909.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Thu, 10 Mar 2005 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/03/10/1909.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/1909.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/03/10/1909.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/1909.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/1909.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在Oracle中实现数据库的复制2004-04-23 15:18 pm作者：余枫来自：Linux知识宝库联系方式：无名&nbsp;在Internet上运作数据库经常会有这样的需求：把遍布全国各城市相似的数据库应用统一起来，一个节点的数据改变不仅体现在本地，还反映到远端。复制技术给用户提供了一种快速访问共享数据的办法。一、实现数据库复制的前提条件1、数据库支持高级复制...&nbsp;&nbsp;<a href='http://www.blogjava.net/faintbear/archive/2005/03/10/1909.html'>阅读全文</a><img src ="http://www.blogjava.net/faintbear/aggbug/1909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-03-10 15:35 <a href="http://www.blogjava.net/faintbear/archive/2005/03/10/1909.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE的高级复制资料 1</title><link>http://www.blogjava.net/faintbear/archive/2005/03/10/1908.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Thu, 10 Mar 2005 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/03/10/1908.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/1908.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/03/10/1908.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/1908.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/1908.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 用ORACLE的高级复制实现内外网数据同步&nbsp;陈光 holen@263.net 2003.10&nbsp;本文简要介绍了ORACLE的高级复制功能，并通过一个实际项目，讨论了在内外网的两级DB中如何采用高级复制达到内外网的数据统一，最后给出配置脚本供大家参考。&nbsp;1、基本概念&nbsp;ORACLEORACLE是以高级结构化查询语言(SQL)为基...&nbsp;&nbsp;<a href='http://www.blogjava.net/faintbear/archive/2005/03/10/1908.html'>阅读全文</a><img src ="http://www.blogjava.net/faintbear/aggbug/1908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-03-10 15:32 <a href="http://www.blogjava.net/faintbear/archive/2005/03/10/1908.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle update多表关联 </title><link>http://www.blogjava.net/faintbear/archive/2005/03/10/1890.html</link><dc:creator>小力力力</dc:creator><author>小力力力</author><pubDate>Thu, 10 Mar 2005 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/faintbear/archive/2005/03/10/1890.html</guid><wfw:comment>http://www.blogjava.net/faintbear/comments/1890.html</wfw:comment><comments>http://www.blogjava.net/faintbear/archive/2005/03/10/1890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/faintbear/comments/commentRss/1890.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/faintbear/services/trackbacks/1890.html</trackback:ping><description><![CDATA[<P class=postTitle align=left><FONT size=2><SPAN class=bold><SPAN class=smalltxt><STRONG><FONT face="Comic Sans MS">UPDATE A.A3 = A.A3+B.B3 的问题<BR><BR></FONT></STRONG></SPAN></SPAN>表A 结构 : A1 , A2 ,A3 <BR>表B 结构: B1,&nbsp;&nbsp;B2,&nbsp;&nbsp;B3<BR>其中 A1 ,B1 为PK ,切值相同 就是可以使用A1 = B1 了.<BR><BR>请问用SQL 语句或过程该如何实现如下的功能???<BR><BR>更新A 表的 A3 ,用A.A3 与B.B3之和更新.</FONT></P>
<P class=postText align=left><FONT size=2>3&gt;update A <BR>set A3 = (select A.A3 + B.B3 from B where A.A1 = B.B1) ;</FONT></P>
<P class=postText align=left><FONT size=2>7&gt;update (select a1,a3,b1,b3 from a,b where a1=b1) set a3=a3+b3</FONT></P>
<P class=postText align=left><FONT size=2></FONT></P>
<P class=postText align=left>
<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" height="100%" cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top>
<DIV align=left><FONT size=2>开执行计划, 谈论效率是没有太多的意义的^_^..<BR><BR><BR>三楼的写法与7楼的写法得到的结果是不同的.<BR><BR>三楼的写法会更新所有记录, 而7楼的写法只修改两者相交的相关记录信息.<BR><BR>7楼的写法可以更加容易的控制这条update语句的执行计划, 不过要求B表必须在对应的字段上有主键索引:) , 在B表在对应字段上有主键索引的时候, 建议使用7楼的写法.<BR><BR>可以参考一下这个帖子^_^<BR><BR></FONT><A href="http://www.cnoug.org/viewthread.php?tid=44070" target=_blank><FONT color=#003366 size=2>http://www.cnoug.org/viewthread.php?tid=44070</FONT></A></DIV>
<DIV align=left><FONT size=2></FONT></DIV>
<DIV align=left><FONT size=2>(测试没有成功..不知道怎么搞的.)</FONT></DIV>
<DIV align=left><FONT size=2></FONT></DIV>
<DIV align=left><FONT size=2>参考了下面的:</FONT></DIV>
<DIV align=left><FONT size=2></FONT></DIV>
<DIV align=left><FONT size=2>非常佩服。抱着学习的态度，重写了一下三楼的，在没有主键的情况，请指教：<BR>update a<BR>set a3=(select a3+b3 from b where a1=b1)<BR>where a1=(select b1 from b where a1=b1)</FONT></DIV>
<DIV align=left><FONT size=2></FONT></DIV>
<DIV align=left><FONT size=2>如下:</FONT></DIV>
<DIV align=left><FONT size=2>update con_eme_on20050309 a set a.con_price=(select a.con_price+(b.annuity-a.annuity)+(b.nojob-a.nojob)<BR>+(b.medicare-a.medicare)+(b.birthfee-a.birthfee)+(b.bruisefee-a.bruisefee) from con_eme_on200404 b <BR>where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),<BR>a.emp_base=(select b.emp_base from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),<BR>a.annuity=(select b.annuity from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),<BR>a.nojob=(select b.nojob from con_eme_on200404 bwhere a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),<BR>a.medicare=(select b.medicare from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),<BR>a.birthfee=(select b.birthfee from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),<BR>a.bruisefee=(select b.bruisefee from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),<BR>a.nojobbase=(select b.nojobbase from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),<BR>a.mediabase=(select b.mediabase from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),<BR>a.birthbase=(select b.birthbase from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),<BR>a.bruisebase=(select b.bruisebase from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base)where a.emp_cod in(select b.emp_cod from con_eme_on200404 b <BR>where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base)</FONT></DIV>
<DIV align=left><FONT size=2></FONT></DIV>
<DIV align=left><FONT size=2>公积金:</FONT></DIV>
<DIV align=left><FONT size=2></FONT></DIV>
<DIV align=left><FONT size=2>update con_eme_on20050309 a set a.con_price=(select a.con_price+(b.accumulation-a.accumulation) from con_eme_on200404 b <BR>where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),a.accumulation=(select b.accumulation from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),<BR>a.accumulationbase=(select b.accumulationbase from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base),a.accumulationbase1=(select b.accumulationbase1 from con_eme_on200404 b <BR>where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base)<BR>where a.emp_cod in(select b.emp_cod from con_eme_on200404 b where a.emp_cod=b.emp_cod and a.if_act='1' and a.emp_base!=b.emp_base)<BR></FONT><BR><IMG height=140 alt=28DE6CC0EDBBE9A61E23D9E9D46BB8A9.gif src="http://www.blogjava.net/images/blogjava_net/faintbear/faintbear/28DE6CC0EDBBE9A61E23D9E9D46BB8A9.gif" width=160 border=0><BR></DIV></TD></TR></TBODY></TABLE></P><img src ="http://www.blogjava.net/faintbear/aggbug/1890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/faintbear/" target="_blank">小力力力</a> 2005-03-10 10:22 <a href="http://www.blogjava.net/faintbear/archive/2005/03/10/1890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>