﻿<?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-风之语-随笔分类-Oracle</title><link>http://www.blogjava.net/gf7/category/3280.html</link><description>&lt;a href="http://www.keepc.com/voip/?t=1&amp;id=6125" target="_blank"&gt;&lt;img src="http://union.keepc.com/templates/default/images/1/950X90.gif" alt="KC网络电话，中国最优秀的网络电话" width="950" height="90" border="0"&gt;&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Sun, 01 Jul 2012 23:58:41 GMT</lastBuildDate><pubDate>Sun, 01 Jul 2012 23:58:41 GMT</pubDate><ttl>60</ttl><item><title>使用Oracle trunc 来指定精确的年月日时分秒</title><link>http://www.blogjava.net/gf7/archive/2012/07/01/381933.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Sun, 01 Jul 2012 15:20:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2012/07/01/381933.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/381933.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2012/07/01/381933.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/381933.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/381933.html</trackback:ping><description><![CDATA[<div class="showContent">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="宋体">函数<span lang="EN-US"><a target="_self"><u><strong>trunc</strong></u></a>是一个Oracle内置的函数，可以对<a target="_self"><u><strong>date</strong></u></a>类型数据进行&#8220;度身裁剪&#8221;，来适应不同类型的数据需求。</span></font></font></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="宋体">在前篇《<span lang="EN-US">Oracle日期类型操作几个问题》中，我们已经了解到date类型的基本知识。date类型是一种包括年、月、日、时、分和秒的数据类型，可以表示相对精确的时间信息。内部存储上，date类型是类似于数字类型的，可以通过加减操作实现对日期的推进和后退。</span></font></font></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="宋体">但是，日期格式的精确常常给我们带来一些困扰，特别是其中的时分秒信息。很多时候，我们对这部分信息是不需要的。比如指定日期查询、只显示天信息等等。借助<span lang="EN-US">To_char虽然可以实现一部分这种需要，但是这样做格式上比较复杂，而且进行了数据类型的转换。是否存在不变化数据类型的方法，对日期型数据进行处理。答案就是trunc函数。</span></font></font></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3" face="宋体">trunc(date)</font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="宋体">截断函数<span lang="EN-US">trunc的作用就是将日期类型数据按照指定格式截断，返回一个日期变量数据。例如：</span></font></font></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TO_CHAR(SYSDATE,'YYYY-MM-DDHH2</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">------------------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">2010-12-10 20:39:58</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select trunc(sysdate) from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TRUNC(SYSDATE)</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">--------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">2010-12-10</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select to_char(trunc(sysdate),'yyyy-mm-dd hh24:mi:ss') from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TO_CHAR(TRUNC(SYSDATE),'YYYY-M</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">------------------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">2010-12-10 00:00:00</font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="宋体">默认情况下，<span lang="EN-US">sysdate函数返回的日期类型数据包括当前的具体时间。通过trunc(date)的处理，直接截取到天信息，返回指定天的零时。</span></font></font></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><span lang="EN-US"><font face="宋体">trunc函数还支持一个重载参数，格式字符串：trunc(date,</font></span><span style="font-family: 'Times New Roman'" lang="EN-US">&#8216;</span><span lang="EN-US"><font face="宋体">format</font></span><span style="font-family: 'Times New Roman'" lang="EN-US">&#8217;</span><span lang="EN-US"><font face="宋体">)，用于指定截断的位置。如下：</font></span></font></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">//截断到年</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select trunc(sysdate,'yyyy') from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TRUNC(SYSDATE,'YYYY')</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">---------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">2010-1-1</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">//截断到月</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select trunc(sysdate,'mm') from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TRUNC(SYSDATE,'MM')</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">-------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">2010-12-1</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">//截断到日</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select trunc(sysdate,'dd') from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TRUNC(SYSDATE,'DD')</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">-------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">2010-12-10</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">//截断到小时</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select trunc(sysdate,'hh24') from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TRUNC(SYSDATE,'HH24')</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">---------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">2010-12-10 20:00:00</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">//截断到分钟</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select trunc(sysdate,'mi') from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TRUNC(SYSDATE,'MI')</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">-------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">2010-12-10 20:52:00</font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font size="3" face="宋体">使用不同的格式标志，可以指示不同的截断位置，获取各种零刻时间。</font></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<div align="center">
<table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 77.4pt; padding-right: 5.4pt;background: yellow; border-top: windowtext 0.5pt solid; border-right: windowtext 0.5pt solid; padding-top: 0cm" width="103">
<p style="text-align: center; margin: 0cm 0cm 0pt" class="MsoNormal" align="center"><font face="宋体">&nbsp;</font></p></td>
<td style="border-bottom: windowtext 0.5pt solid; border-left: rgb(236,233,216); padding-bottom: 0cm; padding-left: 5.4pt; width: 126pt; padding-right: 5.4pt;background: yellow; border-top: windowtext 0.5pt solid; border-right: windowtext 0.5pt solid; padding-top: 0cm" width="168">
<p style="text-align: center; margin: 0cm 0cm 0pt" class="MsoNormal" align="center"><font face="宋体">格式字符串</font></p></td>
<td style="border-bottom: windowtext 0.5pt solid; border-left: rgb(236,233,216); padding-bottom: 0cm; padding-left: 5.4pt; width: 162pt; padding-right: 5.4pt;background: yellow; border-top: windowtext 0.5pt solid; border-right: windowtext 0.5pt solid; padding-top: 0cm" width="216">
<p style="text-align: center; margin: 0cm 0cm 0pt" class="MsoNormal" align="center"><font face="宋体">说明</font></p></td></tr>
<tr>
<td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 77.4pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="103">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font face="宋体">年</font></p></td>
<td style="border-bottom: windowtext 0.5pt solid; border-left: rgb(236,233,216); padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 126pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="168">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font face="宋体">yyyy或者year</font></span></p></td>
<td style="border-bottom: windowtext 0.5pt solid; border-left: rgb(236,233,216); padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 162pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="216">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font face="宋体">年度第一天（一月一日零时）</font></p></td></tr>
<tr>
<td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 77.4pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="103">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font face="宋体">月</font></p></td>
<td style="border-bottom: windowtext 0.5pt solid; border-left: rgb(236,233,216); padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 126pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="168">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font face="宋体">mm或者month</font></span></p></td>
<td style="border-bottom: windowtext 0.5pt solid; border-left: rgb(236,233,216); padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 162pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="216">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font face="宋体">月份第一天（一日零时）</font></p></td></tr>
<tr>
<td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 77.4pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="103">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font face="宋体">日</font></p></td>
<td style="border-bottom: windowtext 0.5pt solid; border-left: rgb(236,233,216); padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 126pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="168">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font face="宋体">dd或者day</font></span></p></td>
<td style="border-bottom: windowtext 0.5pt solid; border-left: rgb(236,233,216); padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 162pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="216">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font face="宋体">日期零时（<span lang="EN-US">00:00:00）</span></font></p></td></tr>
<tr>
<td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 77.4pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="103">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font face="宋体">小时</font></p></td>
<td style="border-bottom: windowtext 0.5pt solid; border-left: rgb(236,233,216); padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 126pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="168">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font face="宋体">hh或者hh24</font></span></p></td>
<td style="border-bottom: windowtext 0.5pt solid; border-left: rgb(236,233,216); padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 162pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="216">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font face="宋体">几时整（<span lang="EN-US">XX:00:00）</span></font></p></td></tr>
<tr>
<td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 77.4pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="103">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font face="宋体">分</font></p></td>
<td style="border-bottom: windowtext 0.5pt solid; border-left: rgb(236,233,216); padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 126pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="168">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font face="宋体">mi</font></span></p></td>
<td style="border-bottom: windowtext 0.5pt solid; border-left: rgb(236,233,216); padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 162pt; padding-right: 5.4pt; border-top: rgb(236,233,216); border-right: windowtext 0.5pt solid; padding-top: 0cm" valign="top" width="216">
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font face="宋体">几分整（<span lang="EN-US">XX:XX:00）</span></font></p></td></tr></tbody></table></div>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="宋体">借助<span lang="EN-US">trunc函数和日期类型加减处理，我们可以实现一些特殊日期的设置，实现日期功能，使用在例如Job调度方面。</span></font></font></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">//明天零点</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select to_char(trunc(sysdate)+1,'yyyy-mm-dd hh24:mi:ss') from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TO_CHAR(TRUNC(SYSDATE)+1,'YYYY</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">------------------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">2010-12-11 00:00:00</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">//当天早上十点</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select to_char(trunc(sysdate)+10/24,'yyyy-mm-dd hh24:mi:ss') from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TO_CHAR(TRUNC(SYSDATE)+10/24,'</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">------------------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">2010-12-10 10:00:00</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">//当月三号，上午10点半</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select to_char(trunc(sysdate,'mm')+2+10/24+1/48, 'yyyy-mm-dd hh24:mi:ss') from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="color: rgb(153,51,0)"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">注：</font></span>trunc(sysdate,'mm')将时间取到当前月的1号零时零分零秒，那么加上2就表示当前月的3好零时零分零秒，再加上'10/24'('10/24'本身表示10个小时)就是表示当月3号的十点零分零秒，再加上'1/48'('1/48'本身表示30分钟)就表示当月3号十点三十分零秒</span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体"></font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TO_CHAR(TRUNC(SYSDATE,'MM')+2+</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">------------------------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">2010-12-03 10:30:00</font></span><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="宋体">较复杂的<span lang="EN-US">to_char，trunc更加可以发挥日期类型数值本身的特色和优势，无论是代码整洁度还是处理效率都是值得关注的。</span></font></font></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><font size="3"><font face="宋体">额外多说一句，<span lang="EN-US">trunc本身还具有处理数字截断功能，用于截断指定位数的数字类型。</span></font></font></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">//默认截断到整数，不进行四舍五入；</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select trunc(15.743) from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TRUNC(15.743)</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">-------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>15</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">//截断到小数点后一位；</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select trunc(15.793,1) from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TRUNC(15.793,1)</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">---------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>15.7</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">//截断到小数点前一位；</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">SQL&gt; select trunc(15.793,-1) from dual;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">TRUNC(15.793,-1)</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体">----------------</font></span></p>
<p style="margin: 0cm 0cm 0pt;background: silver" class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><font face="宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>10</font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3"><font face="宋体">&nbsp;</font></font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3" face="宋体">trunc对数字和日期类型处理，也折射出日期类型数据和数字之间的间接关系。</font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span lang="EN-US"><font size="3" face="宋体">原文地址：http://space.itpub.net/17203031/viewspace-681548</font></span></p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal">&nbsp;</p>
<hr />

<p style="margin: 0cm 0cm 0pt" class="MsoNormal">&nbsp;trunc不仅可以用来处理日期，还可以用来处理数字</p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal">TRUNC(i1,i2)截取i1的i2位而不四舍五入，如果i2是正就截取小数点右边第几位，如果是i2是负就是截取小数点左边第几位。</p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal">例如：</p>
<p style="margin: 0cm 0cm 0pt" class="MsoNormal">&nbsp;</p><pre><ol class="dp-sql"><li class="alt"><span class="keyword">select</span><span>&nbsp;TRUNC(0.10005767,1)&nbsp;</span><span class="keyword">from</span><span>&nbsp;dual;&nbsp;</span></li><li class="alt">&nbsp;<hr /></li><li class="alt">TRUNC(0.10005767,1) 1	0.1</li></ol></pre>
<p>而如果trunc函数没有指定参i2，那么其作用为取整，且取整的时候不会四舍五入</p>
<p>例如：</p><pre><ol class="dp-sql"><li class="alt"><span class="keyword">select</span><span>&nbsp;TRUNC(2.60005767)&nbsp;</span><span class="keyword">from</span><span>&nbsp;dual;&nbsp;</span></li><li class="alt">&nbsp;<hr />   	TRUNC(2.60005767) </li></ol><font class="Apple-style-span" color="#5c5c5c" size="3" face="'Courier New', monospace"><span style="white-space: pre; font-size: 12px" class="Apple-style-span"><br /></span></font></pre>
<hr />

<p>round函数和trunc函数的区别：</p>
<p>
<p>ROUND(i1,i2)四舍五入,i1四舍五入，如果i2是正保留小数点后i2位。如果是i2是负数，表示保留小数点前面(左边第几位)</p>
<p>TRUNC(i1,i2)截取i1的i2位而不四舍五入，如果i2是正就截取小数点右边第几位，如果是i2是负就是截取小数点左边第几位。</p>
<p>&nbsp;</p></div><img src ="http://www.blogjava.net/gf7/aggbug/381933.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2012-07-01 23:20 <a href="http://www.blogjava.net/gf7/archive/2012/07/01/381933.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle进程导致CPU 100%的具体解决步骤</title><link>http://www.blogjava.net/gf7/archive/2010/11/19/338484.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Fri, 19 Nov 2010 07:57:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2010/11/19/338484.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/338484.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2010/11/19/338484.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/338484.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/338484.html</trackback:ping><description><![CDATA[<div id="clickeye_content">
<div id="fontsize" class="article_c">
<p>　　1:检查系统</p>
<code>sar -u 5 5</code>
<p>&nbsp;</p>
<p>　　2: 看谁在用CPU</p>
<code>topas<br />
ps -ef |grep ora #检查第四列，C的大小（unit，100 per cpu）</code>
<p>&nbsp;</p>
<p>　　3:检查CPU数量</p>
<code>/usr/sbin/bindprocessor -q<br />
　　<br />
lsattr El proc0</code>
<p>&nbsp;</p>
<p>　　4:两种可能：</p>
<code>1: A Background (instance) process<br />
　　<br />
2: An oracle (user) process ＃此种可能最大。</code>
<p>&nbsp;</p>
<p>　　5: 如果是用户进程：那么高CPU的主要原因有：</p>
<code>Large Queries, Procedure compilation or execution,<br />
Space management and Sorting</code>
<p>&nbsp;</p>
<p>　　5.1 查看每个Session的CPU利用情况：</p>
<code>select ss.sid,se.command,ss.value CPU ,se.username,se.program<br />
from v$sesstat ss, v$session se<br />
where ss.statistic# in<br />
(select statistic#<br />
from v$statname<br />
where name = 'CPU used by this session')<br />
and se.sid=ss.sid<br />
and ss.sid&gt;6<br />
order by ss.sid</code>
<p>&nbsp;</p>
<p>　　5.2: 比较上述Session</p>
<p>　　比较一下哪个session的CPU使用时间最多，然后查看该Session的具体情况：</p>
<code>select s.sid, event, wait_time, w.seq#, q.sql_text<br />
from v$session_wait w, v$session s, v$process p, v$sqlarea q<br />
where s.paddr=p.addr and<br />
s.sid=&amp;p and<br />
s.sql_address=q.address;</code>
<p>&nbsp;</p>
<p>　　5.3:查看</p>
<p>　　得到上述信息后，查看相应操作是否有hash joins 和 full table scans。如果有hash joins 和 full table scans那么必须创建相应的Index或者检查Index是否有效。</p>
<p>　　另外必须检查是否有并行的查询存在和同一时刻有多个用户在执行相同的SQL语句，如果有必须关闭并行的查询和任何类型的并行提示(hints);如果查询使用intermedia数据，那么为了减少总的Index大小，必须限制使用Intermedia的Worldlist。（try restricting the wordlist that intermedia uses to help reduce the total indexsize）。</p>
<p>　　6:注意事项</p>
<p>　　上述方案只能根据已经运行完成的操作，对于正在执行的长时间操作只能等操作完成后才能检测得到。因此我们可以通过另外一个很好的工具来检测正在运行的长时间操作语句。v$session_longops,这个视图显示那些操作正在被运行，或者已经完成。每个process完成后会刷新本视图的信息。</p>
<p>　　7:怎样寻找集中使用CPU的Process：</p>
<p>　　很多时候会发现有N个Process在平均分享着CPU的利用率，这种情况唯一的可能性就是这些Process在执行着相同的Package或者Query.</p>
<p>　　这种情况：建议通过statspack,在CPU高利用率额时候运行几个快照，然后根据这些快照检查Statspack报告，检查报告中最TOP的Query。然后使用 sql_trace and tkprof 工具去跟踪一下。</p>
<p>　　同时检查buffer cache 的命中率是否大雨95％。</p>
<p>　　同时在报告中还需要检查一下table scans (long tables)，看是否在报告生成期间有存在全表扫描。</p>
<p>　　8:参数</p>
<p>　　另外还有一些不是特别重要的，但是也必须关心检查的参数可能消耗CPU。</p>
<p>　　parallel query 并行查询：</p>
<p>　　并行查询最好用于数据仓库的环境下，那种情况任何时候只有几个用户在同时使用。在一个联机事务处理环境中，当同时许多用户去并行查询一个数据库的巨大表时候，会导致CPU的爆满。所以最好在数据库的级别关闭并行查询：设置参数如下：</p>
<code>parallel_min_server = 0　　parallel_max_server = 0　　<br />
parallel_automatic_tuning = false;</code>
<p>&nbsp;</p>
<p>　　在配置上述参数后，如果SQL语句中使用的并行的提示，那么还是有可能会出现并行查询的情况，所以还需要继续监视相关的SQL语句，如果有可以直接去除提示。</p>
</div>
</div>
<img src ="http://www.blogjava.net/gf7/aggbug/338484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2010-11-19 15:57 <a href="http://www.blogjava.net/gf7/archive/2010/11/19/338484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Redhat Linux AS4(AS5)下oracle10g自启动脚本设置</title><link>http://www.blogjava.net/gf7/archive/2010/10/27/336314.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Wed, 27 Oct 2010 11:46:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2010/10/27/336314.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/336314.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2010/10/27/336314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/336314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/336314.html</trackback:ping><description><![CDATA[<p>以redhat as4和oracle 10g为例。单机在安装过程依照oracle官方的文档一步步下来，只要设置好 参数、安装好必要的包，一般不会出什么问题。安装好了以后系统重启，oracle重启服务，网上很多人建议自己写脚本（其实脚本也很简单），这里讲的是用 oracle本身的脚本实现，当然不可避免最后还要写一点点的。</p>
<p>1、配置dbstart和dbshut</p>
<p>在$ORACLE_HOME/bin 中，有dbstart和dbshut这两个脚本，more dbstart看一下可以看到：</p>
<p>#<br />
# $Id: dbstart.sh.pp 11-may-2005.18:18:07 vikrkuma Exp $<br />
# Copyright (c) 1991, 2005, Oracle. All rights reserved.<br />
#</p>
<p>###################################<br />
#<br />
# usage: dbstart<br />
#<br />
# This script. is used to start ORACLE from /etc/rc(.local).<br />
# It should ONLY be executed as part of the system boot procedure.<br />
#<br />
# This script. will start all databases listed in the oratab file<br />
# whose third field is a "Y". If the third field is set to "Y" and<br />
# there is no ORACLE_SID for an entry (the first field is a *),<br />
# then this script. will ignore that entry.<br />
#<br />
# This script. requires that ASM ORACLE_SID's start with a +, and<br />
# that non-ASM instance ORACLE_SID's do not start with a +.<br />
#<br />
# If ASM instances are to be started with this script, it cannot<br />
# be used inside an rc*.d directory, and should be invoked from<br />
# rc.local only. Otherwise, the CSS service may not be available<br />
# yet, and this script. will block init from completing the boot<br />
# cycle.<br />
#<br />
# Note:<br />
# Use ORACLE_TRACE=T for tracing this script.<br />
#<br />
# The progress log for each instance bringup plus Error and Warning message[s]<br />
# are logged in file $ORACLE_HOME/startup.log. The error messages related to<br />
# instance bringup are also logged to syslog (system log module).<br />
# The Listener log is located at $ORACLE_HOME_LISTNER/listener.log<br />
......</p>
<p>可以看出这个脚本是用来启动oracle服务的，包括listener、instance、asm instances，并且可以放到/etc/rc(.local).，同样dbshut也是起到关闭服务的作用。</p>
<p>配置系统使这个脚本起作 用：</p>
<p>1）、以root编辑/etc/oratab，类似 orcl:/u01/product/10.2.0/db_1:N 这种格式，其中orcl是你的ORACLE_SID，/u01/product/10.2.0/db_1是ORACLE_HOME，这里需要把N改为Y， 即orcl:/u01/product/10.2.0/db_1:Y这样。</p>
<p>2）、以oracle编辑$ORACLE_HOME/bin /dbstart，找到其中第78行:ORACLE_HOME_LISTNER=改为你自己的路径，或者可以改成 ORACLE_HOME_LISTNER=$ORACLE_HOME</p>
<p>保存脚本，以oracle用户运行dbshut和dbstart看是 否能关闭、启动数据库。如 果不能，一般是参数设置，根据报错找到对应位置更改。</p>
<p>2、 把dbstart和dbshut加到redhat启动服务中</p>
<p>经过上一步的配置，可以直接用 dbstart命令启动数据listener、instance、asm instances，但是还没有启动oracle10g的EM，ORACLE利用web页 面管理数据库相当方便，也 是10g的一个特色，所以应该一并启动起该服务来。</p>
<p>$ORACLE_HOME/bin/emctl start dbconsole</p>
<p>因此我们可以用rc.local或者redhat服务都可以实现要求的开机启动。下面分别说一下：</p>
<p>1）、利用 rc.local。直接把dbstart加到rc.local中，实现开机自动启动。这里需要注意的是必须以oracle启动该脚本。</p>
<p>用 root编辑/etc/rc.local，添加下面一行：</p>
<p>su - oracle -c "/u01/product/10.2.0/db_1/bin/dbstart"<br />
su - oracle -c "/u01/product/10.2.0/db_1/bin/emctl start dbconsole"</p>
<p>这里/u01/product/10.2.0/db_1需要替换成实际的ORACLE_HOME</p>
<p>保存并退出后，reboot服务器测试一下，可以看到，当系统启动以后oracle监听、实例 和em都已经起来了</p>
<p>2）、如果我们不用rc.local，也可以加到redhat服务中。在/etc/rc.d /init.d中添加如下脚本文件，命名为oracle：</p>
<p>#!/bin/sh<br />
#chkconfig: 2345 99 01<br />
#description: ORACLE 10g Server</p>
<p>ORACLE_HOME=/u01/product/10.2.0/db_1</p>
<p>if [ ! -f $ORACLE_HOME/bin/dbstart ]<br />
then<br />
echo "ORACLE cannot start"<br />
exit<br />
fi</p>
<p>case "$1" in<br />
'start')<br />
echo "Starting Oracle Database..."<br />
su - oracle -c "$ORACLE_HOME/bin/dbstart"<br />
su - oracle -c "$ORACLE_HOME/bin/emctl start dbconsole"<br />
;;<br />
'stop')<br />
echo "Stoping Oracle Database"<br />
su - oracle -c "$ORACLE_HOME/bin/emctl stop dbconsole"<br />
su - oracle -c "$ORACLE_HOME/bin/dbshut"<br />
;;<br />
esac</p>
<p>注意其中两行注释，网上很多脚本因为少了这两行不能使服务自启动：</p>
<p>#chkconfig: 2345 99 01<br />
#description: ORACLE 10g Server</p>
<p>其中chkconfig：2345 99 01 是指脚本将为运行级2、3、4、5启动oracle 10g服务，启动优先级为99，关闭优先级为01。</p>
<p>然后以root权限:</p>
<p># cd /etc/rc2.d<br />
# ln -s /etc/rc.d/init.d/oracle S99oracle<br />
# chkconfig --list oracle<br />
# chkconfig --level 2345 oracle&nbsp;on</p>
<p>重启系统，就可以在启动的过程中看到 Starting oracle，因为我们设置的优先级为99，一般是最后启动。[OK]以后就可以了。因为要启动emctl，可能有点慢，等待的时间要稍微长一点。</p>
<p>启 动以后可以以root执行oracle start或者oracle stop来启动或停止服务。</p>
<p><br />
&nbsp;</p>
 <img src ="http://www.blogjava.net/gf7/aggbug/336314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2010-10-27 19:46 <a href="http://www.blogjava.net/gf7/archive/2010/10/27/336314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深刻理解Oracle数据库的启动和关闭</title><link>http://www.blogjava.net/gf7/archive/2010/09/11/331734.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Sat, 11 Sep 2010 05:18:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2010/09/11/331734.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/331734.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2010/09/11/331734.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/331734.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/331734.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Oracle数据库提供了几种不同的数据库启动和关闭方式，本文将详细介绍这些启动和关闭方式之间的区别以及它们各自不同的功能。
<p>　　一、启动和关闭Oracle数据库</p>
<p>　　对于大多数Oracle DBA来说，启动和关闭Oracle数据库最常用的方式就是在命令行方式下的Server Manager。从Oracle 8i以后，系统将Server Manager的所有功能都集中到了SQL*Plus中，也就是说从8i以后对于数据库的启动和关闭可以直接通过SQL*Plus来完成，而不再另外需要Server Manager，但系统为了保持向下兼容，依旧保留了Server Manager工具。另外也可通过图形用户工具（GUI）的Oracle Enterprise Manager来完成系统的启动和关闭，图形用户界面Instance Manager非常简单，这里不再详述。</p>
<p>　　要启动和关闭数据库，必须要以具有Oracle 管理员权限的用户登陆，通常也就是以具有SYSDBA权限的用户登陆。一般我们常用INTERNAL用户来启动和关闭数据库（INTERNAL用户实际上是SYS用户以SYSDBA连接的同义词）。Oracle数据库的新版本将逐步淘汰INTERNAL这个内部用户，所以我们最好还是设置DBA用户具有SYSDBA权限。</p>
<p>　　二、数据库的启动（STARTUP）</p>
<p>　　启动一个数据库需要三个步骤：</p>
<p>　　　1、 创建一个Oracle实例（非安装阶段）</p>
<p>　　　2、 由实例安装数据库（安装阶段）</p>
<p>　　　3、 打开数据库（打开阶段）</p>
<p>　　在Startup命令中，可以通过不同的选项来控制数据库的不同启动步骤。</p>
<p>　　1、STARTUP NOMOUNT</p>
<p>　　NONOUNT选项仅仅创建一个Oracle实例。读取init.ora初始化参数文件、启动后台进程、初始化系统全局区（SGA）。Init.ora文件定义了实例的配置，包括内存结构的大小和启动后台进程的数量和类型等。实例名根据Oracle_SID设置，不一定要与打开的数据库名称相同。当实例打开后，系统将显示一个SGA内存结构和大小的列表，如下所示：</p>
<p>SQL&gt; startup nomount<br />
ORACLE 例程已经启动。<br />
Total System Global Area 35431692 bytes<br />
Fixed Size 70924 bytes<br />
Variable Size 18505728 bytes<br />
Database Buffers 16777216 bytes<br />
Redo Buffers 77824 bytes&nbsp; </p>
<p>　　2、STARTUP MOUNT </p>
<p>　　该命令创建实例并且安装数据库，但没有打开数据库。Oracle系统读取控制文件中关于数据文件和重作日志文件的内容，但并不打开该文件。这种打开方式常在数据库维护操作中使用，如对数据文件的更名、改变重作日志以及打开归档方式等。在这种打开方式下，除了可以看到SGA系统列表以外，系统还会给出"数据库装载完毕"的提示。</p>
<p>　　3、STARTUP</p>
<p>　　该命令完成创建实例、安装实例和打开数据库的所有三个步骤。此时数据库使数据文件和重作日志文件在线，通常还会请求一个或者是多个回滚段。这时系统除了可以看到前面Startup Mount方式下的所有提示外，还会给出一个"数据库已经打开"的提示。此时，数据库系统处于正常工作状态，可以接受用户请求。 </p>
<p>　　如果采用STARTUP NOMOUNT或者是STARTUP MOUNT的数据库打开命令方式，必须采用ALTER DATABASE命令来执行打开数据库的操作。例如，如果你以STARTUP NOMOUNT方式打开数据库，也就是说实例已经创建，但是数据库没有安装和打开。这是必须运行下面的两条命令，数据库才能正确启动。</p>
<p>ALTER DATABASE MOUNT;<br />
ALTER DATABASE OPEN; </p>
<p>　　而如果以STARTUP MOUNT方式启动数据库，只需要运行下面一条命令即可以打开数据库：</p>
<p>　　　 ALTER DATABASE OPEN. </p>
<p>　　4、其他打开方式</p>
<p>　　除了前面介绍的三种数据库打开方式选项外，还有另外其他的一些选项。</p>
<p>　　(1) STARTUP RESTRICT </p>
<p>　　这种方式下，数据库将被成功打开，但仅仅允许一些特权用户（具有DBA角色的用户）才可以使用数据库。这种方式常用来对数据库进行维护，如数据的导入/导出操作时不希望有其他用户连接到数据库操作数据。</p>
<p>　　(2) STARTUP FORCE</p>
<p>　　该命令其实是强行关闭数据库（shutdown abort）和启动数据库（startup）两条命令的一个综合。该命令仅在关闭数据库遇到问题不能关闭数据库时采用。</p>
<p>　　(3) ALTER DATABASE OPEN READ ONLY;</p>
<p>　　该命令在创建实例以及安装数据库后，以只读方式打开数据库。对于那些仅仅提供查询功能的产品数据库可以采用这种方式打开。</p>
<p><br />
　　三、数据库的关闭（SHUTDOWN）</p>
<p>　　对于数据库的关闭，有四种不同的关闭选项，下面对其进行一一介绍。</p>
<p>　　1、SHUTDOWN NORMAL</p>
<p>　　这是数据库关闭SHUTDOWN命令的确省选项。也就是说如果你发出SHUTDOWN这样的命令，也即是SHUTDOWN NORNAL的意思。</p>
<p>　　发出该命令后，任何新的连接都将再不允许连接到数据库。在数据库关闭之前，Oracle将等待目前连接的所有用户都从数据库中退出后才开始关闭数据库。采用这种方式关闭数据库，在下一次启动时不需要进行任何的实例恢复。但需要注意一点的是，采用这种方式，也许关闭一个数据库需要几天时间，也许更长。</p>
<p>　　2、SHUTDOWN IMMEDIATE </p>
<p>　　这是我们常用的一种关闭数据库的方式，想很快地关闭数据库，但又想让数据库干净的关闭，常采用这种方式。</p>
<p>　　当前正在被Oracle处理的SQL语句立即中断，系统中任何没有提交的事务全部回滚。如果系统中存在一个很长的未提交的事务，采用这种方式关闭数据库也需要一段时间（该事务回滚时间）。系统不等待连接到数据库的所有用户退出系统，强行回滚当前所有的活动事务，然后断开所有的连接用户。</p>
<p>　　3、SHUTDOWN TRANSACTIONAL</p>
<p>　　该选项仅在Oracle 8i后才可以使用。该命令常用来计划关闭数据库，它使当前连接到系统且正在活动的事务执行完毕，运行该命令后，任何新的连接和事务都是不允许的。在所有活动的事务完成后，数据库将和SHUTDOWN IMMEDIATE同样的方式关闭数据库。</p>
<p>　　4、SHUTDOWN ABORT </p>
<p>　　这是关闭数据库的最后一招，也是在没有任何办法关闭数据库的情况下才不得不采用的方式，一般不要采用。如果下列情况出现时可以考虑采用这种方式关闭数据库。</p>
<p>　　1、 数据库处于一种非正常工作状态，不能用shutdown normal或者shutdown immediate这样的命令关闭数据库;</p>
<p>　　2、 需要立即关闭数据库；</p>
<p>　　3、 在启动数据库实例时遇到问题；</p>
<p>　　所有正在运行的SQL语句都将立即中止。所有未提交的事务将不回滚。Oracle也不等待目前连接到数据库的用户退出系统。下一次启动数据库时需要实例恢复，因此，下一次启动可能比平时需要更多的时间。</p>
<p>　　表1可以清楚地看到上述四种不同关闭数据库的区别和联系。</p>
<p>　　 表1 Shutdown数据库不同方式对比表<br />
</p>
<table border="1" cellspacing="0" width="500" align="center">
    <tbody>
        <tr>
            <td width="250">关闭方式</td>
            <td width="66">A </td>
            <td width="47">I </td>
            <td width="67">T </td>
            <td width="48">N </td>
        </tr>
        <tr>
            <td width="250">允许新的连接</td>
            <td width="66">&#215;</td>
            <td width="47">&#215; </td>
            <td width="67">&#215; </td>
            <td width="48">&#215;</td>
        </tr>
        <tr>
            <td width="250">等待直到当前会话中止</td>
            <td width="66">&#215;</td>
            <td width="47">&#215; </td>
            <td width="67">&#215; </td>
            <td width="48">&#8730;</td>
        </tr>
        <tr>
            <td width="250">等待直到当前事务中止</td>
            <td width="66">&#215;</td>
            <td width="47">&#215; </td>
            <td width="67">&#8730; </td>
            <td width="48">&#8730;</td>
        </tr>
        <tr>
            <td width="250">强制CheckPoint，关闭所有文件 </td>
            <td width="66">&#215; </td>
            <td width="47">&#8730; </td>
            <td width="67">&#8730; </td>
            <td width="48">&#8730;</td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>　　其中：A-Abort I-Immediate T-Transaction N-Nornal</p>
 <img src ="http://www.blogjava.net/gf7/aggbug/331734.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2010-09-11 13:18 <a href="http://www.blogjava.net/gf7/archive/2010/09/11/331734.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle查询命中率调优的一个方法(有用呦)</title><link>http://www.blogjava.net/gf7/archive/2010/07/21/326691.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Tue, 20 Jul 2010 22:37:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2010/07/21/326691.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/326691.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2010/07/21/326691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/326691.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/326691.html</trackback:ping><description><![CDATA[<p>构建一个企业级的应用系统，往往数据库成为最终的一个负载瓶颈，在我们优化完sql语句、优化完应用程序之后，数据库的调优必不可少，下面就基于sql查询的命中率的oracle调优做一个简单的说明。<br />
1.先检验数据库的查询命中率，请执行下面的2组sql语句，并且分别记录修改之前的数值。<br />
第一组sql语句如下：<br />
<code>select 100- (j.value-( a.value+b.value )) /(u.value+v.value-a.value-b.value)*100 as 命中率 from<br />
(select value from v$sysstat where name ='physical reads direct' ) a,<br />
(select value from v$sysstat where name ='physical reads direct (lob)' ) b,<br />
(select value from v$sysstat where name ='physical reads') j,<br />
(select value from v$sysstat where name ='consistent gets') u,<br />
(select value from v$sysstat where name = 'db block gets') v ;</code></p>
<p>第二组sql语句如下：<br />
<code>select sum(gets) "请求存取数",sum(getmisses) "不命中数" , (1-sum(getmisses)/sum(gets) )*100 "命中率"<br />
from v$rowcache;</code></p>
<p>2.如果第一组sql语句执行的结果是&lt;90%，则说明需要调整oracle数据库的内存（SGA的大小），第二组sql语句作为一个参照。<br />
一般经验：在 1G 的内存的服务器上，我们能分配给SGA的内存大约为400—500M 。若是2G的内存，大约可以分到1G的内存给 SGA，8G 的内存可以分到5G的内存给SGA。</p>
<p>考虑到数据库服务器的机器内存大小为2G, 可以按照以下脚本执行修改：<br />
【注:请用具有dba权限的用户登录&#8220;login as sysdba&#8221;登录，可以用pl/sql工具】<br />
<br />
--修改前备份一下sqfile<br />
create pfile='d:\oracle\ora9init.ora' from spfile;<br />
<code><br />
--修改共享池大小<br />
alter system set shared_pool_size =256M scope=spfile; </p>
<p>--修改缓冲池大小<br />
alter system set db_cache_size=896M scope=spfile;</p>
<p>--大缓冲池<br />
alter system set large_pool_size=100m scope=spfile;<br />
--修改链接进程数<br />
alter system set processes=1500 scope=spfile;<br />
--会话数<br />
alter system set sessions=900 scope=spfile;<br />
--事务数<br />
alter system set transactions=900 scope=spfile;<br />
--打开游标数<br />
alter system set open_cursors =1000 scope=spfile;</code></p>
<p>3.用pl/sql工具修改了这些参数之后，需要重启oracle服务。当重启之后再查执行开始的2组sql语句，对比数值的差异。</p>
<img src ="http://www.blogjava.net/gf7/aggbug/326691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2010-07-21 06:37 <a href="http://www.blogjava.net/gf7/archive/2010/07/21/326691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle内存参数调优技术详解 </title><link>http://www.blogjava.net/gf7/archive/2010/07/21/326689.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Tue, 20 Jul 2010 20:58:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2010/07/21/326689.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/326689.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2010/07/21/326689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/326689.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/326689.html</trackback:ping><description><![CDATA[<p><strong><span>前言</span></strong><strong></strong></p>
<p><span>近来公司技术</span><span><font face="Times New Roman">,</font></span><span>研发都在问我关于内存参数如何设置可以优化</span><span><font face="Times New Roman">oracle</font></span><span>的性能</span><span><font face="Times New Roman">,</font></span><span>所以抽时间整理了这篇文档</span><span><font face="Times New Roman">,</font></span><span>以做参考</span><span><font face="Times New Roman">.</font></span></p>
<p><strong><span>目的</span></strong><strong></strong></p>
<p><span>希望通过整理此文档</span><span><font face="Times New Roman">,</font></span><span>使大家对</span><span><font face="Times New Roman">oracle</font></span><span>内存结构有一个全面的了解</span><span><font face="Times New Roman">,</font></span><span>并在实际的工作中灵活应用</span><span><font face="Times New Roman">,</font></span><span>使</span><span><font face="Times New Roman">oracle</font></span><span>的内存性能达到最优配置，提升应用程序反应速度，并进行合理的内存使用</span><span><font face="Times New Roman">.</font></span></p>
<p><strong><span>内容</span></strong><strong></strong></p>
<p><strong><span>实例结构</span></strong><strong></strong></p>
<p><span><font face="Times New Roman">oracle</font></span><span>实例</span><span><font face="Times New Roman">=</font></span><span>内存结构</span><span><font face="Times New Roman">+</font></span><span>进程结构</span></p>
<p><span><font face="Times New Roman">oracle</font></span><span>实例启动的过程，其实就是</span><span><font face="Times New Roman">oracle</font></span><span>内存参数设置的值加载到内存中，并启动相应的后台进程进行相关的服务过程。</span></p>
<p><strong><span>进程结构</span></strong><strong></strong></p>
<p><span><font face="Times New Roman">oracle</font></span><span>进程</span><span><font face="Times New Roman">=</font></span><span>服务器进程</span><span><font face="Times New Roman">+</font></span><span>用户进程</span></p>
<p><span>几个重要的后台进程</span><span>：</span></p>
<p><span><font face="Times New Roman">DBWR</font></span><span>：数据写入进程</span><span><font face="Times New Roman">.</font></span></p>
<p><span><font face="Times New Roman">LGWR:</font></span><span>日志写入进程</span><span><font face="Times New Roman">.</font></span></p>
<p><span><font face="Times New Roman">ARCH:</font></span><span>归档进程</span><span><font face="Times New Roman">.</font></span></p>
<p><span><font face="Times New Roman">CKPT:</font></span><span>检查点进程</span><span><font face="Times New Roman">(</font></span><span>日志切换；上一个检查点之后，又超过了指定的时间；预定义的日志块写入磁盘；例程关闭，</span><span><font face="Times New Roman">DBA</font></span><span>强制产生</span><span><font face="Times New Roman">,</font></span><span>表空间</span><span><font face="Times New Roman">offline)</font></span></p>
<p><span><font face="Times New Roman">LCKn</font></span><span>（</span><span><font face="Times New Roman">0-9</font></span><span>）：封锁进程</span><span><font face="Times New Roman">.</font></span></p>
<p><span><font face="Times New Roman">Dnnn:</font></span><span>调度进程</span><span><font face="Times New Roman">.</font></span></p>
<p><strong><span>内存结构</span></strong><strong><span><font face="Times New Roman">(</font></span></strong><strong><span>我们重点讲解的</span></strong><strong><span><font face="Times New Roman">)</font></span></strong></p>
<p><span>内存结构</span><span><font face="Times New Roman">=SGA</font></span><span>（系统全局区）</span><span><font face="Times New Roman">+PGA</font></span><span>（程序全局区）</span></p>
<p><span><font face="Times New Roman">SGA</font></span><span>：是用于存储数据库信息的内存区，该信息为数据库进程所共享。它包含</span><span><font face="Times New Roman">Oracle </font></span><span>服务器的数据和控制信息</span><span><font face="Times New Roman">,</font></span><span>它是在</span><span><font face="Times New Roman">Oracle</font></span><span>服务器所驻留的计算机的实际内存中得以分配，如果实际内存不够再往虚拟内存中写</span></p>
<p>&nbsp;</p>
<p><span>我们重点就是设置</span><span><font face="Times New Roman">SGA</font></span><span>，理论上</span><span><font face="Times New Roman">SGA</font></span><span>可占</span><span><font face="Times New Roman">OS</font></span><span>系统物理内存的</span><span><font face="Times New Roman">1/2</font></span><span>——</span><span><font face="Times New Roman">1/3</font></span></p>
<p><em><span>原则：</span></em><em><span><font face="Times New Roman">SGA+PGA+OS</font></span></em><em><span>使用内存</span></em><em><span><font face="Times New Roman">&lt;</font></span></em><em><span>总物理</span></em><em><span><font face="Times New Roman">RAM</font></span></em></p>
<p><em><span><font face="Times New Roman">SGA=((db_block_buffers*blocksize)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+1MB</font></span></em></p>
<p><span><font face="Times New Roman">1</font></span><span>、</span><span><font face="Times New Roman">SGA</font></span><span>系统全局区</span><span><font face="Times New Roman">.(</font></span><span>包括以下五个区</span><span><font face="Times New Roman">)</font></span></p>
<p><span><font face="Times New Roman">A</font></span><span>、数据缓冲区</span><span><font face="Times New Roman">:</font></span><span>（</span><span><font face="Times New Roman">db_block_buffers</font></span><span>）存储由磁盘数据文件读入的数据。</span></p>
<p><span>大小</span><span><font face="Times New Roman">: db_block_buffers*db_block_size</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Oracle9i</font></span><span>设置数据缓冲区为：</span><span><font face="Times New Roman">Db_cache_size</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;<strong><em><span>&nbsp;</span></em></strong></font></span><em><span>原则：</span></em><em><span><font face="Times New Roman">SGA</font></span></em><em><span>中主要设置对象，一般为可用内存</span></em><em><span><font face="Times New Roman">40%</font></span></em><em><span>。</span></em><em></em></p>
<p><span><font face="Times New Roman">B</font></span><span>、共享池</span><span><font face="Times New Roman">:</font></span><span>（</span><span><font face="Times New Roman">shared_pool_size</font></span><span>）</span><span><font face="Times New Roman">:</font></span><span>数据字典，</span><span><font face="Times New Roman">sql</font></span><span>缓冲，</span><span><font face="Times New Roman">pl/sql</font></span><span>语法分析</span><span><font face="Times New Roman">.</font></span><span>加大可提速度。</span></p>
<p><em><span>原则：</span></em><em><span><font face="Times New Roman">SGA</font></span></em><em><span>中主要设置对象，一般为可用内存</span></em><em><span><font face="Times New Roman">10%</font></span></em></p>
<p><span><font face="Times New Roman">C</font></span><span>、日志缓冲区</span><span><font face="Times New Roman">:</font></span><span>（</span><span><font face="Times New Roman">log_buffer</font></span><span>）存储数据库的修改信息</span><span><font face="Times New Roman">.</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><em><span><span>&nbsp;&nbsp;&nbsp;</span></span></em></strong></font></span><em><span>原则：</span></em><em><span><font face="Times New Roman">128K ---- 1M </font></span></em><em><span>之间，不应该太大</span></em><em></em></p>
<p><span><font face="Times New Roman">D </font></span><span>、</span><span><font face="Times New Roman">JAVA</font></span><span>池（</span><span><font face="Times New Roman">Java_pool_size</font></span><span>）主要用于</span><span><font face="Times New Roman">JAVA</font></span><span>语言的开发</span><span><font face="Times New Roman">.</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><em><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></em></font></span><em><span>原则：若不使用</span></em><em><span><font face="Times New Roman">java</font></span></em><em><span>，原则上不能小于</span></em><em><span><font face="Times New Roman">20M</font></span></em><em><span>，给</span></em><em><span><font face="Times New Roman">30M</font></span></em><em><span>通常就够了</span></em><span><br />
<font face="Times New Roman">E</font></span><span>、</span><span><font face="Times New Roman"> </font></span><span>大池（</span><span><font face="Times New Roman">Large_pool_size</font></span><span>）</span><span><span><font face="Times New Roman">&nbsp; </font></span></span><span>如果不设置</span><span><font face="Times New Roman">MTS</font></span><span>，主要用于数据库备份恢复管理器</span><span><font face="Times New Roman">RMAN</font></span><span>。</span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><em><span><span>&nbsp;&nbsp;</span></span></em></font></span><em><span>原则：若不使用</span></em><em><span><font face="Times New Roman">MTS,5---- 10M </font></span></em><em><span>之间，不应该太大</span></em><em></em></p>
<p><span><font face="Times New Roman">SGA=. db_block_buffers*db_block_size+ shared_pool_size+ log_buffer+Java_pool+size+large_pool_size</font></span></p>
<p><span><font face="Times New Roman">&nbsp;<em><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></em></font></span><em><span>原则：</span></em><em><span><font face="Times New Roman"> </font></span></em><em><span>达到可用内存的</span></em><em><span><font face="Times New Roman">55-58%</font></span></em><em><span>就可以了</span></em><em><span><font face="Times New Roman">.</font></span></em></p>
<p><span><font face="Times New Roman">2</font></span><span>、</span><span><font face="Times New Roman">PGA</font></span><span>程序全局区</span></p>
<p><span><font face="Times New Roman">PGA</font></span><span>：包含单个服务器进程或单个后台进程的数据和控制信息，与几个进程共享的</span><span><font face="Times New Roman">SGA </font></span><span>正相反</span><span><font face="Times New Roman">PGA </font></span><span>是只被一个进程使用的区域，</span><span><font face="Times New Roman">PGA </font></span><span>在创建进程时分配在终止进程时回收</span><span><font face="Times New Roman">.</font></span></p>
<p><span><font face="Times New Roman">A</font></span><span>、</span><span><font face="Times New Roman">Sort_area_size&nbsp;</font></span><span>用于排序所占内存</span></p>
<p><span><font face="Times New Roman">B</font></span><span>、</span><span><font face="Times New Roman">Hash_area_size </font></span><span>用于散列联接，位图索引</span></p>
<p><span>这两个参数在非</span><span><font face="Times New Roman">MTS</font></span><span>下都是属于</span><span><font face="Times New Roman">PGA </font></span><span>，不属于</span><span><font face="Times New Roman">SGA,</font></span><span>是为每个</span><span><font face="Times New Roman">session</font></span><span>单独分配的，在我们的服务器上除了</span><span><font face="Times New Roman">OS + SGA,</font></span><span>一定要考虑这两部分</span><span><br />
</span><em><span>原则：</span></em><em><span><font face="Times New Roman">OS </font></span></em><em><span>使用内存</span></em><em><span><font face="Times New Roman">+SGA+</font></span></em><em><span>并发执行进程数</span></em><em><span><font face="Times New Roman">*(sort_area_size+hash_ara_size+2M) &lt; 0.7*</font></span></em><em><span>总内存</span></em><em></em></p>
<p><strong><span>实例配置</span></strong><strong></strong></p>
<p><span>一：物理内存多大</span></p>
<p><span>二：操作系统估计需要使用多少内存</span></p>
<p><span>三：数据库是使用文件系统还是裸设备</span></p>
<p><span>四：有多少并发连接</span></p>
<p><span>五：应用是</span><span><font face="Times New Roman">OLTP </font></span><span>类型还是</span><span><font face="Times New Roman">OLAP </font></span><span>类型</span></p>
<p><em><span>基本掌握的原则是，</span></em><em><span><font face="Times New Roman"> db_block_buffer </font></span></em><em><span>通常可以尽可能的大，</span></em><em><span><font face="Times New Roman">shared_pool_size </font></span></em><em><span>要适度，</span></em><em><span><font face="Times New Roman">log_buffer </font></span></em><em><span>通常大到几百</span></em><em><span><font face="Times New Roman">K</font></span></em><em><span>到</span></em><em><span><font face="Times New Roman">1M</font></span></em><em><span>就差不多了</span></em><em></em></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>A</font></span><span>、如果</span><span><font face="Times New Roman">512M RAM&nbsp;</font></span><span>单个</span><span><font face="Times New Roman">CPU<span>&nbsp;&nbsp; </span>db_block_size </font></span><span>是</span><span><font face="Times New Roman">8192 bytes<br />
&nbsp;SGA=0.55*512M=280M</font></span><span>左右</span></p>
<p><span>建议</span><span><font face="Times New Roman"> shared_pool_size = 50M, db_block_buffer* db_block_size = 200M<br />
</font></span><span>具体</span><span><font face="Times New Roman">: shared_pool_size =52428800&nbsp;#50M</font></span></p>
<p><span><font face="Times New Roman">db_block_buffer=25600<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>#200M</font></span></p>
<p><span><font face="Times New Roman">log_buffer = 131072<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span># 128k (128K*CPU</font></span><span>个数</span><span><font face="Times New Roman">)</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>large_pool_size=7864320<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>#7.5M</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>java_pool_size = 20971520<span>&nbsp;&nbsp;&nbsp; </span># 20 M</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sort_area_size = 524288<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span># 512k (65k--2M)</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sort_area_retained_size = 524288<span>&nbsp;&nbsp; </span># MTS </font></span><span>时</span><span><font face="Times New Roman"> sort_area_retained_size = sort_area_size</font></span></p>
<p><span><font face="Times New Roman">B</font></span><span>、如果</span><span><font face="Times New Roman">1G RAM <span>&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span><span>单个</span><span><font face="Times New Roman">CPU<span>&nbsp;&nbsp; </span>db_block_size </font></span><span>是</span><span><font face="Times New Roman">8192 bytes<br />
SGA=0.55*1024M=563M</font></span><span>左右</span><span><br />
</span><span>建议</span><span><font face="Times New Roman"> </font><span><font face="Times New Roman">shared_pool_size = 100M , db_block_buffer* db_block_size = 400M<br />
</font></span></span><span>具体</span><span><font face="Times New Roman">: shared_pool_size=104857600<span>&nbsp;&nbsp;&nbsp; </span>#100M</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>db_block_buffer=51200<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>#400M</font></span></p>
<p><span><font face="Times New Roman">&nbsp;log_buffer = 131072<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span># 128k (128K*CPU</font></span><span>个数</span><span><font face="Times New Roman">)</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>large_pool_size=15728640<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>#15M</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>java_pool_size = 20971520<span>&nbsp;&nbsp;&nbsp; </span># 20 M</font></span></p>
<p><span><font face="Times New Roman">sort_area_size = 524288<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span># 512k (65k--2M)</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sort_area_retained_size = 524288<span>&nbsp;&nbsp; </span># MTS </font></span><span>时</span><span><font face="Times New Roman"> sort_area_retained_size = sort_area_size</font></span></p>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<p><span><font face="Times New Roman">C</font></span><span>、如果</span><span><font face="Times New Roman">2G<span>&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span><span>单个</span><span><font face="Times New Roman">CPU<span>&nbsp;&nbsp; </span>db_block_size </font></span><span>是</span><span><font face="Times New Roman">8192 bytes</font></span></p>
<p><span><font face="Times New Roman">SGA=0.55*2048M=1126.4M</font></span><span>左右</span><span><br />
</span><span>建议</span><span><font face="Times New Roman"> <span>shared_pool_size = 200M , db_block_buffer *db_block_size = 800M</span></font></span></p>
<p><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span>具体</span><span><font face="Times New Roman">: shared_pool_size=209715200<span>&nbsp;&nbsp;&nbsp; </span>#200M</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>db_block_buffer=103192<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>#800M</font></span></p>
<p><span><font face="Times New Roman">&nbsp;log_buffer = 131072<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span># 128k (128K*CPU</font></span><span>个数</span><span><font face="Times New Roman">)</font></span></p>
<p><font face="Times New Roman"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>large_pool_size=</span><span><font size="3"> </font></span><span>31457280<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>#30M</span></font></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>java_pool_size = 20971520<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span># 20 M</font></span></p>
<p><span><font face="Times New Roman">sort_area_size = 524288<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span># 512k (65k--2M)</font></span></p>
<p><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sort_area_retained_size = 524288<span>&nbsp;&nbsp; </span># MTS </font></span><span>时</span><span><font face="Times New Roman"> sort_area_retained_size = sort_area_size</font></span></p>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<p><span>假定</span><span><font face="Times New Roman">64 bit ORACLE</font></span></p>
<p><span>内存</span><span><font face="Times New Roman">4G</font></span></p>
<p><span><font face="Times New Roman">shared_pool_size = 200M , data buffer = 2.5G</font></span></p>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<p><span>内存</span><span><font face="Times New Roman">8G</font></span></p>
<p><span><font face="Times New Roman">shared_pool_size = 300M , data buffer = 5G</font></span></p>
<p><span><font face="Times New Roman">&nbsp;</font></span></p>
<p><span>内存</span><span><font face="Times New Roman"> 12G</font></span></p>
<p><span><font face="Times New Roman">shared_pool_size = 300M-----800M , data buffer = 8G</font></span></p>
<p><strong><span>参数更改方式</span></strong><strong></strong></p>
<p><span><font face="Times New Roman">oracle8i</font></span><span>：</span></p>
<p><span>主要都是通过修改</span><span><font face="Times New Roman">oracle</font></span><span>启动参数文件进行相关的配置</span></p>
<p><span>参数文件位置：</span></p>
<p><span><font face="Times New Roman">d:\oracle\admin\DB_Name\pfile\init.ora</font></span></p>
<p><span>按以上修改以上参数值即可。</span></p>
<p><span><font face="Times New Roman">Oracle9i:</font></span></p>
<p><span>两种方式：第一种是修改</span><span><font face="Times New Roman">oracle</font></span><span>启动参数文件后，通过此参数文件再创建服务器参数文件</span></p>
<p><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span>第二种是直接运行</span><span><font face="Times New Roman">oracle</font></span><span>修改命令进行修改。</span></p>
<p><span><font face="Times New Roman">SQL&gt;alter system set db_cache_size=200M scope=spfile;</font></span></p>
<p><span><font face="Times New Roman">SQL&gt;alter system set shared_pool_size=50M scope=spfile;</font></span></p>
<img src ="http://www.blogjava.net/gf7/aggbug/326689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2010-07-21 04:58 <a href="http://www.blogjava.net/gf7/archive/2010/07/21/326689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>win7下安装Oracle10g</title><link>http://www.blogjava.net/gf7/archive/2010/02/04/311861.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Wed, 03 Feb 2010 16:55:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2010/02/04/311861.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/311861.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2010/02/04/311861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/311861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/311861.html</trackback:ping><description><![CDATA[<p>工具网上的资料改了refhost.xml文件 添加了<br />
&lt;!--Microsoft Windows 7--&gt;<br />
&lt;OPERATING_SYSTEM&gt;<br />
&lt;VERSION VALUE="6.1"/&gt;<br />
&lt;/OPERATING_SYSTEM&gt;<br />
后来用xp sp3 兼容模式，管理员运行安装，<br />
刚装完 Oracle 10g，然后，进行em后，界面出来了，但报了一个错：<br />
java.lang.Exception: Exception in sending Request :: null<br />
很多功能不能用，提示重新登录</p>
<p>解决方案：找到下面的文件<br />
$ORACLE_HOME\db_1\$HOSTNAME\sysman\config\emd.properties<br />
其中的agentTZRegion缺省是GMT,改为你所在的时区即可,例如:<br />
agentTZRegion=Asia/Harbin<br />
关于时区的列表参考：10.2.0\db_1\sysman\admin\supportedtzs.lst<br />
然后先停止 dbconsole 使时区设置生效并重启OracleDBConsole：<br />
然后先停止dbconsole 在重启dbconsole ：<br />
set ORACLE_SID=orcl</p>
<p>emctl stop dbconsole</p>
<p>emctl start dbconsole</p>
<img src ="http://www.blogjava.net/gf7/aggbug/311861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2010-02-04 00:55 <a href="http://www.blogjava.net/gf7/archive/2010/02/04/311861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle10g卸载后再次安装，设置的SID相同出现“指定的SID在本机上已经存在。。。解决方法</title><link>http://www.blogjava.net/gf7/archive/2010/02/04/311860.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Wed, 03 Feb 2010 16:52:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2010/02/04/311860.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/311860.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2010/02/04/311860.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/311860.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/311860.html</trackback:ping><description><![CDATA[<p><font size="2">1、开始－＞设置－＞控制面板－＞管理工具－＞服务 停止所有Oracle服务。 <br />
2、 开始－＞程序－＞Oracle - OraHome81－＞Oracle Installation Products－＞ Universal Installer 卸装所有Oracle产品，但Universal Installer本身不能被删除 <br />
5、 运行regedit，选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE，按del键删除这个入口。 <br />
6、 运行regedit，选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services，滚动 这个列表，删除所有Oracle入口。 <br />
7、 运行refedit， HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application， 删除所有Oracle入口。 <br />
8、 开始－＞设置－＞控制面板－＞系统－＞高级－＞环境变量 删除环境变量CLASSPATH和PATH中有关Oracle的设定 <br />
9、 从桌面上、STARTUP（启动）组、程序菜单中，删除所有有关Oracle的组和图标 <br />
10、 删除\Program Files\Oracle目录 <br />
11、 重新启动计算机，重起后才能完全删除Oracle所在目录（到这基本可以安装 ）&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; <br />
12、 删除与Oracle有关的文件，选择Oracle所在的缺省目录C:\Oracle，删除这个入 口目录及所有子目录，并从Windows 2000目录（一般为C:\WINNT）下删除以下文 件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等。&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;&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
13、 WIN.INI文件中若有[ORACLE]的标记段，删除该段 <br />
14、 如有必要，删除所有Oracle相关的ODBC的DSN <br />
15、 到事件查看器中，删除Oracle相关的日志 说明： 如果有个别DLL文件无法删除的情况，则不用理会，重新启动，开始新的安装， 安装时，选择一个新的目录，则，安装完毕并重新启动后，老的目录及文件就可以删除掉了。</font></p>
<img src ="http://www.blogjava.net/gf7/aggbug/311860.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2010-02-04 00:52 <a href="http://www.blogjava.net/gf7/archive/2010/02/04/311860.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 10g 可以自动共享内存管理</title><link>http://www.blogjava.net/gf7/archive/2009/06/20/283335.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Sat, 20 Jun 2009 02:47:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2009/06/20/283335.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/283335.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2009/06/20/283335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/283335.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/283335.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="word-spacing: 0px; font: 16px simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 14px; line-height: 25px; font-family: 宋体; text-align: left">是不是很难准确地分配不同的池所需的内存数？自动共享内存管理特性使得自动将内存分配到最需要的地方去成为可能。<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　无论您是一个刚入门的 DBA 还是一个经验丰富的 DBA，您肯定至少看到过一次类似以下的错误：<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　ORA-04031:unable to allocate 2216 bytes of shared memory ("shared pool"... ...<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　或者这种错误：<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　ORA-04031:unable to allocate XXXX bytes of shared memory<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　("large pool","unknown object","session heap","frame")<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　或者可能这种错误：<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　ORA-04031:unable to allocate bytes of shared memory ("shared pool",<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　"unknown object","joxlod:init h", "JOX:ioc_allocate_pal")<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　第一种错误的原因很明显：分配给共享池的内存不足以满足用户请求。（在某些情况下，原因可能不是池本身的大小，而是未使用绑定变量导致的过多分析造成的碎片，这是我很喜欢的一个主题；但目前让我们把重点放在手头的问题上。）其它的错误分别来自大型池和<span class="Apple-converted-space">&nbsp;</span><a class="channel_keylink" style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; color: rgb(0,0,255); line-height: 22px; padding-top: 0px; font-family: 宋体; text-decoration: none; word-wrap: break-word" href="http://java.chinaitlab.com/" target="_blank">Java</a><span class="Apple-converted-space">&nbsp;</span>池的空间不足。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　您需要解决这些错误情况，而不作任何与应用程序相关的修改。那么有哪些方案可选呢？问题是如何在<a class="channel_keylink" style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; color: rgb(0,0,255); line-height: 22px; padding-top: 0px; font-family: 宋体; text-decoration: none; word-wrap: break-word" href="http://oracle.chinaitlab.com/" target="_blank">Oracle</a><span class="Apple-converted-space">&nbsp;</span>例程所需的所有池之间划分可用的内存。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">馅饼怎么分？</strong><span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　正如您所了解的，一个<span class="Apple-converted-space">&nbsp;</span><a class="channel_keylink" style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; color: rgb(0,0,255); line-height: 22px; padding-top: 0px; font-family: 宋体; text-decoration: none; word-wrap: break-word" href="http://oracle.chinaitlab.com/" target="_blank">Oracle</a><span class="Apple-converted-space">&nbsp;</span>例程的系统全局区域 (SGA) 包含几个内存区域（包括缓冲高速缓存、共享池、<a class="channel_keylink" style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; color: rgb(0,0,255); line-height: 22px; padding-top: 0px; font-family: 宋体; text-decoration: none; word-wrap: break-word" href="http://java.chinaitlab.com/" target="_blank">Java</a><span class="Apple-converted-space">&nbsp;</span>池、大型池和重做日志缓冲）。这些池在操作系统的内存空间中占据了固定的内存数；它们的大小由 DBA 在初始化参数文件中指定。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　这四个池（数据库块缓冲高速缓存、共享池、Java 池和大型池）几乎占据了 SGA 中所有的空间。（与其它区域相比，重做日志缓冲没有占据多少空间，对我们这里的讨论无关紧要。）作为 DBA，您必须确保它们各自的内存分配是充足的。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　假定您决定了这些池的值分别是 2GB、1GB、1GB 和 1GB。您将设置以下初始化参数来为数据库例程规定池的大小。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　db_cache_size = 2g<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　shared_pool_size = 1g<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　large_pool_size = 1g<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　java_pool_size = 1g<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　现在，仔细看一下这些参数。坦白讲，这些值是否准确？<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　我相信您一定会有疑虑。在实际中，没有人能够为这些池指定确切的内存数 — 它们太依赖于数据库内部的处理，而处理的特性随时在变化。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　下面是一个示例场景。假定您有一个典型的、大部分属于 OLTP 的数据库，并且为缓冲高速缓存分配的专用内存比为纯 OLTP 数据库（现在已经很少见了）分配的要少。有一天，您的用户放开了一些非常大的全表扫描，以创建当天的结束报表。Oracle9i 数据库为您提供了在线修改内存分配的功能，但由于提供的总物理内存有限，您决定从大型池和 Java 池中取出一些内存：<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　alter system set db_cache_size = 3g scope=memory;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　alter system set large_pool_size = 512m scope=memory;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　alter system set java_pool_size = 512m scope=memory;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　这个解决方案能够很好地工作一段时间，但是接着夜间的 RMAN 作业（它们使用大型池）开始了，大型池将立即出现内存不足。同样，您从数据库高速缓存中取出一些内存来补充大型池，以挽救这种局面。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　RMAN 作业完成，然后启动一个广泛使用 Java 的批处理程序，接着您开始看到与 Java 池相关的错误。因此，您（再次）重新分配池，以满足 Java 池和数据库高速缓存上的内存需求：<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　alter system set db_cache_size = 2G scope=memory;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　alter system set large_pool_size = 512M scope=memory;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　alter system set java_pool_size = 1.5G scope=memory;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　第二天早上，OLTP 作业恢复在线，这个循环又完全重复！<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　解决这种恶性循环的一种替代方法是永久设置每个池的最大需求。不过，这么做的话，您分配的总的 SGA 可能超出可用的内存 — 从而在为每个池分配的内存数不足时，将增加<a class="channel_keylink" style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; color: rgb(0,0,255); line-height: 22px; padding-top: 0px; font-family: 宋体; text-decoration: none; word-wrap: break-word" href="http://cisco.chinaitlab.com/List_7.html" target="_blank">交换</a>和分页的风险。人工重新分配的方法（虽然不实际）目前看起来很不错。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　另一种替代方法是将值设为可接受的最小值。不过，当需求增长且内存不能完全满足时，性能将受到影响。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　注意在所有这些示例中，分配给 SGA 的总内存保持不变，而池之间的内存分配根据即时的需求进行修改。如果 RDBMS 将自动探测来自用户的需求并相应地重新分布内存分配，那不是很好吗？<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　Oracle 数据库 10g 中的自动共享内存管理特性正好能够实现这一目的。您可以决定 SGA 的总大小，然后设置一个名称为 SGA_TARGET 的参数，这个参数决定 SGA 的总大小。SGA 内部的各个池将根据工作负载动态地进行配置。实现自动内存分配仅仅需要 SGA_TARGET 参数的一个非零值。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">设置自动共享内存管理</strong><span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　让我们看看该特性是如何工作的。首先，确定 SGA 的总大小。您可以通过确定现在分配了多少内存来估计这个值。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　SQL&gt; select sum(value)/1024/1024 from v$sga;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　SUM(VALUE)/1024/1024<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　--------------------<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　　　　　　　 500<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　此时 SGA 的当前总大小近似为 500MB，并且这个值将变为 SGA_TARGET 的值。接下来，执行语句：<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　alter system set sga_target = 500M scope=both;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　这种方法不需要为各个池设置不同值；因而，您将需要在参数文件中使它们的值为零或全部删除它们。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　shared_pool_size = 0<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　large_pool_size = 0<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　java_pool_size = 0<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　db_cache_size = 0　　<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　再循环数据库，使这些值生效。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　这个人工过程还可以通过 Enterprise Manager 10g 实施。从数据库主页中，选择 "Administration" 选项卡，然后选择 "Memory Parameters"。对于人工配置的内存参数，将显示标记为 "Enable" 的按钮，以及所有人工配置的池的值。单击 "Enable" 按钮，启用自动共享内存管理特性。企业管理器将完成剩下的工作。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　在配置了自动内存分配之后，您可以利用以下命令检查它们的大小：<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　SQL&gt; select current_size from v$buffer_pool;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　CURRENT_SIZE<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　------------<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　　　 340<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　SQL&gt; select pool, sum(bytes)/1024/1024 Mbytes from v$sgastat group by pool;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　POOL　　　　　　 MBYTES<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　------------ ----------<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　java pool　　　　　　 4<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　large pool　　　　　　4<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　shared pool　　　　 148<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　正如您所看到的，所有的池都从 500MB 的总目标大小中自动进行分配。（参见图 1。）缓冲高速缓存大小是 340MB，Java 池是 4MB，大型池是 4MB，共享池是 148MB。它们合起来总的大小为 (340+4+4+148=) 496MB，近似与 500MB 的目标 SGA 的大小相同。<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　
<center style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">　<img style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" src="http://www.blogjava.net/imgfiles/2004.7.1.11.29.38.1.jpg"  alt="" /></center><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　
<center style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">图 1：池的初始分配</center><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　现在假定提供给 Oracle 的主机内存从 500MB 减少为 300MB，这意味着我们必须减少总 SGA 的大小。我们可以通过减小目标 SGA 大小来反映这种变化。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　alter system set sga_target = 300M scope=both;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　现在查看各个池，我们可以看到：<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　SQL&gt; select current_size from v$buffer_pool;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　CURRENT_SIZE<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　------------<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　　　 244<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　SQL&gt; select pool, sum(bytes)/1024/1024 Mbytes from v$sgastat group by pool;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　POOL　　　　　　 MBYTES<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　------------ ----------<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　java pool　　　　　　 4<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　large pool　　　　　　4<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　shared pool　　　　　44<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　占用的总大小是 240+4+4+44 = 296MB，接近于目标的 300MB。注意如图 2 所示，当 SGA_TARGET 改变时，如何自动重新分配池。<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　
<center style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">　<img style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" src="http://www.blogjava.net/imgfiles/2004.7.1.11.29.47.2.jpg"  alt="" /></center><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　
<center style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">图 2：在将 SGA 大小减少到 300MB 之后重新分配池</center><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　这些池的大小是动态的。池将根据工作负载扩展，以容纳需求的增长，或缩小以容纳另一个池的扩展。这种扩展或缩小自动发生，无需 DBA 的干预，这与本文开头的示例不同。让我们暂时返回到那个场景，假定在初始分配后，RMAN 作业启动，指示需要一个更大的大型池，大型池将从 4MB 扩展到 40MB，以容纳需求。这个额外的 36MB 将从数据库缓冲中划出，数据库块缓冲将缩小，如图 3 所示。<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　
<center style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">　<img style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" src="http://www.blogjava.net/imgfiles/2004.7.1.11.29.56.3.jpg"  alt="" /></center><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　
<center style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">图 3：在对大型池的需求增长之后经过重新分配的池</center><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　池的大小变化基于系统上的工作负载，因此不需要为最坏的情况调整池的大小 — 它们将根据需求的增长自动调整。此外，SGA 的总大小始终在由 SGA_TARGET 指定的最大值之内，因此不存在使内存需求的增长比例失调（这将导致分页和<a class="channel_keylink" style="padding-right: 0px; padding-left: 0px; font-size: 14px; padding-bottom: 0px; margin: 0px; color: rgb(0,0,255); line-height: 22px; padding-top: 0px; font-family: 宋体; text-decoration: none; word-wrap: break-word" href="http://cisco.chinaitlab.com/List_7.html" target="_blank">交换</a>）的风险。您可以动态地将 SGA_TARGET 增加至绝对最大值,这个绝对最大值是通过调整参数 SGA_MAX_SIZE 指定的。<span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　<strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">哪些池不受影响？</strong><span class="Apple-converted-space">&nbsp;</span><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word" />
　　SGA 中的一些池不受动态大小调整的影响，但是必须显式指定这些池。其中值得注意的是非标准块大小的缓冲池，以及 KEEP 池或 RECYCLE 池的非默认块大小。如果您的数据库有一个块大小为 8K，而您想要配置 2K、4K、16K 和 32K 块大小的池，那么您必须手动设置它们。它们的大小将保持不变；它们将不会根据负载缩小或扩展。当使用多种大小的缓冲池、KEEP 池和 RECYCLE 池时，您应当考虑这个因素。此外，日志缓冲不受内存调整的影响 — 不管工作负载如何，</span></span>
<img src ="http://www.blogjava.net/gf7/aggbug/283335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2009-06-20 10:47 <a href="http://www.blogjava.net/gf7/archive/2009/06/20/283335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORA-02095: 无法修改指定的初始化参数</title><link>http://www.blogjava.net/gf7/archive/2009/06/20/283333.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Sat, 20 Jun 2009 02:44:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2009/06/20/283333.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/283333.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2009/06/20/283333.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/283333.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/283333.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="word-spacing: 0px; font: 16px simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 12px; font-family: verdana">有些参数不能动态修改，需要使用ALTER SYSTEM SET parameter = value&nbsp;&nbsp;SCOPE = SPFILE，然后重新启动数据库才能生效。<br />
<br />
而ALTER SYSTEM SET parameter = value 使用的默认SCOPE = BOTH，包括同时修改spfile 和当前的设置。</span></span>
<img src ="http://www.blogjava.net/gf7/aggbug/283333.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2009-06-20 10:44 <a href="http://www.blogjava.net/gf7/archive/2009/06/20/283333.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>调整Oracle应用系统性能的原则和方法</title><link>http://www.blogjava.net/gf7/archive/2009/06/20/283332.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Sat, 20 Jun 2009 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2009/06/20/283332.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/283332.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2009/06/20/283332.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/283332.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/283332.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="word-spacing: 0px; font: 16px simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 14px; line-height: 28px; font-family: Tahoma; text-align: left">
<p style="text-indent: 2em"><strong>摘要：</strong>通过探讨和研究Oracle服务器和Client/Server的特点和原理，阐述了提高、调整Oracle应用系统性能的一些原则和方法。</p>
<p style="text-indent: 2em"><strong>关键词：</strong>Oracle；客户/服务器；系统全程区；网络I/O；回滚段。</p>
<p style="text-indent: 2em">Oracle 数据库广泛应用在社会的各个领域，特别是在Client/Server模式的应用，但是应用开发者往往碰到整个系统的性能随着数据量的增大显著下降的问题，为了解决这个问题，从以下几个方面：数据库服务器、网络I/O、应用程序等对整个系统加以调整，充分发挥Oracle的效能，提高整个系统的性能。</p>
<p style="text-indent: 2em"><strong>1 调整数据库服务器的性能</strong></p>
<p style="text-indent: 2em">Oracle数据库服务器是整个系统的核心，它的性能高低直接影响整个系统的性能，为了调整Oracle数据库服务器的性能，主要从以下几个方面考虑：</p>
<p style="text-indent: 2em"><strong>1.1 调整操作系统以适合Oracle数据库服务器运行</strong></p>
<p style="text-indent: 2em">Oracle数据库服务器很大程度上依赖于运行服务器的操作系统，如果操作系统不能提供最好性能，那么无论如何调整，Oracle数据库服务器也无法发挥其应有的性能。</p>
<p style="text-indent: 2em">1.1.1 为Oracle数据库服务器规划系统资源</p>
<p style="text-indent: 2em">据已有计算机可用资源, 规划分配给Oracle服务器资源原则是：尽可能使Oracle服务器使用资源最大化,特别在Client/Server中尽量让服务器上所有资源都来运行Oracle服务。</p>
<p style="text-indent: 2em">1.1.2 调整计算机系统中的内存配置</p>
<p style="text-indent: 2em">多数操作系统都用虚存来模拟计算机上更大的内存，它实际上是硬盘上的一定的磁盘空间。当实际的内存空间不能满足应用软件的要求时，操作系统就将用这部分的磁盘空间对内存中的信息进行页面替换，这将引起大量的磁盘I/O操作，使整个服务器的性能下降。为了避免过多地使用虚存，应加大计算机的内存。</p>
<p style="text-indent: 2em">1.1.3 为Oracle数据库服务器设置操作系统进程优先级</p>
<p style="text-indent: 2em">不要在操作系统中调整Oracle进程的优先级，因为在Oracle数据库系统中，所有的后台和前台数据库服务器进程执行的是同等重要的工作，需要同等的优先级。所以在安装时，让所有的数据库服务器进程都使用缺省的优先级运行。</p>
<p style="text-indent: 2em"><strong>1.2 调整内存分配</strong></p>
<p style="text-indent: 2em">Oracle数据库服务器保留3个基本的内存高速缓存，分别对应3种不同类型的数据：库高速缓存，字典高速缓存和缓冲区高速缓存。库高速缓存和字典高速缓存一起构成共享池，共享池再加上缓冲区高速缓存便构成了系统全程区(SGA)。SGA是对数据库数据进行快速访问的一个系统全程区，若SGA本身需要频繁地进行释放、分配，则不能达到快速访问数据的目的，因此应把SGA放在主存中，不要放在虚拟内存中。内存的调整主要是指调整组成SGA的内存结构的大小来提高系统性能，由于Oracle数据库服务器的内存结构需求与应用密切相关，所以内存结构的调整应在磁盘I/O调整之前进行。</p>
<p style="text-indent: 2em">1.2.1 库缓冲区的调整</p>
<p style="text-indent: 2em">库缓冲区中包含私用和共享SQL和PL/SQL区，通过比较库缓冲区的命中率决定它的大小。要调整库缓冲区，必须首先了解该库缓冲区的活动情况，库缓冲区的活动统计信息保留在动态性能表v$librarycache数据字典中，可通过查询该表来了解其活动情况，以决定如何调整。</p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code>Select sum(pins),sum(reloads) from v$librarycache;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p style="text-indent: 2em">Pins列给出SQL语句，PL/SQL块及被访问对象定义的总次数；Reloads列给出SQL 和PL/SQL块的隐式分析或对象定义重装载时在库程序缓冲区中发生的错误。如果sum(pins)/sum(reloads) ≈0，则库缓冲区的命中率合适；若sum(pins)/sum(reloads)&gt;1, 则需调整初始化参数 shared_pool_size来重新调整分配给共享池的内存量。</p>
<p style="text-indent: 2em">1.2.2 数据字典缓冲区的调整</p>
<p style="text-indent: 2em">数据字典缓冲区包含了有关数据库的结构、用户、实体信息。数据字典的命中率，对系统性能影响极大。数据字典缓冲区的使用情况记录在动态性能表v$librarycache中，可通过查询该表来了解其活动情况，以决定如何调整。</p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code>Select sum(gets),sum(getmisses) from v$rowcache;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center></span></span><span class="Apple-style-span" style="word-spacing: 0px; font: 16px simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 14px; line-height: 28px; font-family: Tahoma; text-align: left">
<p style="text-indent: 2em">Gets列是对相应项请求次数的统计；Getmisses 列是引起缓冲区出错的数据的请求次数。对于频繁访问的数据字典缓冲区，sum(getmisses)/sum(gets)&lt;10%～15%。若大于此百分数，则应考虑增加数据字典缓冲区的容量，即需调整初始化参数shared_pool_size来重新调整分配给共享池的内存量。</p>
<p style="text-indent: 2em">1.2.3 缓冲区高速缓存的调整</p>
<p style="text-indent: 2em">用户进程所存取的所有数据都是经过缓冲区高速缓存来存取，所以该部分的命中率，对性能至关重要。缓冲区高速缓存的使用情况记录在动态性能表v$sysstat中，可通过查询该表来了解其活动情况，以决定如何调整。</p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code>　　Select name,value from v$sysstat where name in
            ('dbblock gets','consistent gets','physical reads');</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p>　　</p>
<p style="text-indent: 2em">dbblock gets和consistent gets的值是请求数据缓冲区中读的总次数。physical reads的值是请求数据时引起从盘中读文件的次数。从缓冲区高速缓存中读的可能性的高低称为缓冲区的命中率，计算公式：</p>
<p style="text-indent: 2em">Hit Ratio=1-(physical reds/(dbblock gets+consistent gets))</p>
<p style="text-indent: 2em">如果Hit Ratio&lt;60%～70%，则应增大db_block_buffers的参数值。db_block_buffers可以调整分配给缓冲区高速缓存的内存量，即db_block_buffers可设置分配缓冲区高速缓存的数据块的个数。缓冲区高速缓存的总字节数=db_block_buffers的值*db_block_size的值。db_block_size 的值表示数据块大小的字节数，可查询 v$parameter 表：</p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code>　　select name,value from v$parameter where name='db_block_size';</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p style="text-indent: 2em">在修改了上述数据库的初始化参数以后，必须先关闭数据库，在重新启动数据库后才能使新的设置起作用。</p>
<p style="text-indent: 2em"><strong>1.3 调整磁盘 I/O</strong></p>
<p style="text-indent: 2em">磁盘的I/O速度对整个系统性能有重要影响。解决好磁盘I/O问题，可显著提高性能。影响磁盘I/O的性能的主要原因有磁盘竞争、I/O次数过多和数据块空间的分配管理。</p>
<p style="text-indent: 2em">为Oracle数据库服务器创建新文件时，不论是表空间所用的数据文件还是数据事务登录所用的日志文件，都应仔细考虑数据库服务器上的可用磁盘资源。如果服务器上有多个磁盘，则可将文件分散存储到各个可用磁盘上，减少对数据库的数据文件及事务日志文件的竞争，从而有效地改善服务器的性能。对于不同的应用系统都有各自的数据集，应当创见不同的表空间分别存储各自应用系统的数据，并且尽可能的把表空间对应的数据文件存放在不同的磁盘上，这种从物理上把每个应用系统的表空间分散存放的方法，可以排除两个应用系统竞争磁盘的可能性。数据文件、事务日志文件分别存放在不同的磁盘上，这样事务处理执行的磁盘访问不妨碍对相应的事物日志登记的磁盘访问。如果有多个磁盘可用，将两个事物日志成员放在不同的磁盘驱动器上，就可以消除日志文件可能产生的磁盘竞争。应把一个应用的表数据和索引数据分散存放不同表空间上，并且尽量把不同类型的表空间存放在不同磁盘上，这样就消除了表数据和索引数据的磁盘竞争。</p>
</span></span><span class="Apple-style-span" style="word-spacing: 0px; font: 16px simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 14px; line-height: 28px; font-family: Tahoma; text-align: left">
<p style="text-indent: 2em"><strong>1.4 调整数据库服务器的回滚段</strong></p>
<p style="text-indent: 2em">回滚段是一个存储区域，数据库使用该存储区域存放曾经由一个事务更新或删除的行的原始数据值。如果用户要回滚一个事务所做的改变，那么数据库就从回滚段中读回改变前的数据并使该事务影响的行改变为它们的原状态。回滚段控制着数据库处理事务的能力，因而在数据库成功中起着关键性的作用，不管数据库的其它部分设计得多好，如果它设计得不合理，将会严重影响系统的性能。建立和调整回滚段的原则如下。</p>
<p style="text-indent: 2em">1.4.1 分离回滚段</p>
<p style="text-indent: 2em">分离回滚段是指单独为回滚段创建一个以上的表空间，使回滚段与数据字典、用户数据、索引等分离开来。由于回滚段的写入与数据和索引的写入是并行进行的，因此将它分离出来可以减少I/O争用。如果回滚段与数据不分离，倘若要某个表空间脱机或撤消，那么在该表空间中的各个回滚段没有全部脱机之前，不能将这个表空间脱机或撤消。而一旦该表空间不可用，则该表空间中的所有回滚段也不能使用，这将浪费所有分配的磁盘空间。所以，独立回滚段可使数据库管理变得容易。回滚段的经常性收缩，使得表空间的自由块更容易形成碎片。分离回滚段可以减少数据库表空间的碎片产生。</p>
<p style="text-indent: 2em">1.4.2 创建不同大小的回滚段群</p>
<p style="text-indent: 2em">对于一些联机事物处理，他们一般是频繁地对少量数据进行修改，创建许多小的回滚段对之有利。每一个事物的入口项只能限于一个回滚段，回滚段应该充分大以容纳一个完整的事物处理，因此对一些较大型事物，需要较大型的回滚段。极个别脱机处理事物会产生大量的回滚信息，这时需要一个特大号的回滚段来处理。根据这些理论，在Oracle数据库服务器中针对上述3种事物处理创建三组：小事物组、较大事物组、特大事物组等大小不同的回滚段群，并且将之分散到3个不同的表空间上，群内大小相同，应能满足该组事物处理的最大要求。</p>
<p style="text-indent: 2em">1.4.3 创建数量适当的回滚段</p>
<p style="text-indent: 2em">一般回滚段数量与并发事物个数有关，以下给出由于并发事物个数而应建立回滚段的参考数：</p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code>并发事物（n）　　　回滚段数
            n&lt;16　　　　　　　　4
            16 &#8804; n&lt;32　　　　　8
            n&#8805; 32　　　　　　n/4</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p style="text-indent: 2em"><strong>2 调整 Client/Server 模式下的网络 I/O</strong></p>
<p style="text-indent: 2em">Client/Server环境中的应用处理是分布在客户应用程序和数据库服务程序之间的。在 Client/Server环境中Client与Server之间的网络I/O是整个系统性能提高的瓶颈，一个客户应用程序引起的网络I/O越少，应用及整个系统的性能越好。减少网络I/O的最重要的一条原则：将应用逻辑集中在数据库服务器中。</p>
<p style="text-indent: 2em"><strong>2.1 使用Oracle数据库的完整约束性</strong></p>
<p style="text-indent: 2em">当为应用建表时，应当为一些有特殊要求的数据加上适当的完整性约束，这样就能实现由数据库本身而不是应用程序来约束数据符合一定的条件。数据库服务器端的完整约束的执行操作是在比SQL语句级别更低的系统机制上优化，它与客户端无关，只在服务器中运行，不需在Client 端和Server端之间传递SQL语句，有效地减轻网络I/O负担。</p>
<p style="text-indent: 2em"><strong>2.2 使用数据库触发器</strong></p>
<p style="text-indent: 2em">完整约束性只能实现一些较简单的数据约束条件，对一些较复杂的事物处理规则就无能为力，这时最好不要在应用程序中实施复杂的程序控制，而是应当采用数据库触发器来实施复杂的事物规则。数据库触发器能实现由数据库本身，而不是应用程序，来约束数据符合复杂的事物处理规则，并且容易创建，便于管理，避免大量的网络I/O。</p>
<p style="text-indent: 2em">例如：将当前表A中成为历史的记录从A表中转储到历史表B中，表示为Lsbs。</p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code>在应用程序中实现：　　　　　　　用数据库触发器实现：
            Beign　　　　　　　　　　　　　　Create trigger delete1
            　Update A set lsbs='T';　　　　　 After update of lsbs on A
            　Insert into B　　　　　　　　　　For each row
            　Select * from A where lsbs='T';　Insert into B
            　Delete A where lsbs='T';　　　　　select * from A where :new.lsbs='T';
            End;　　　　　　　　　　　　　　 Delete A where :new.lsbs='T';
            　　　　　　　　　　　　　　　　   End delete1;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p style="text-indent: 2em">在应用程序中实现时，所有的SQL命令请求传送的数据都要通过网络在Client端和Server端进行交换，而不像数据库触发器一样，SQL本身在Server端，不需要通过网络传输数据。当进行操作的数据量相当大时，并且多个用户同时操作时，通过在应用程序中实现复杂的控制，必将增大网络I/O的负荷，使整个系统的性能降低，而用数据库触发器能完全避免这种情况发生。</p>
</span></span><span class="Apple-style-span" style="word-spacing: 0px; font: 16px simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 14px; line-height: 28px; font-family: Tahoma; text-align: left">
<p style="text-indent: 2em"><strong>2.3 使用存储过程、存储函数和包</strong></p>
<p style="text-indent: 2em">Oracle的存储过程和存储函数是命名的能完成一定功能并且存储在Server端的PL/SQL的集合。包是一种把有关的过程和函数组织封装成一个数据库程序单元的方法。它们相对于应用程序的过程、函数而言，把SQL命令存储在Server端。使用存储过程和存储函数，应用程序不必再包含多个网络操作的SQL语句去执行数据库服务器操作，而是简单调用存储过程和存储函数，在网络上传输的只是调用过程的名字和输出结果，这样就可减少大量的网络I/O。</p>
<p style="text-indent: 2em">例如：基表A、B的定义：name char(20)；detail char(10)；A表100万记录，应用程序将从基表A中检索detail列符合给出条件的记录，并将之插入基表B。</p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code>　　
            Declare
            Cursor cursor1 is select*from A;poin cursor1%type；
            con1 number(2);res1 char(4)='abcd';
            Begin　Insert into B values(poin.name,poin.detail);end if;
            For poin in cursor1 loop　　　End loop;End loop;
            For con1 in 1..7 loop　　　　Commit;
            If substr(poin.detail ,con1,4)=res1 then End;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p style="text-indent: 2em">　　</p>
<p style="text-indent: 2em">如果在Developer/2000 From中按钮触发器直接用PL/SQL实现和把它改写为一个Oracle存储过程，然后在From中调用此过程实现比较，后者性能显著提高。</p>
<p style="text-indent: 2em">在考虑使用上述3种方法时：首先考虑使用完整约束性。对于数据库触发器和存储过程，如果需要所有访问数据库的程序自动实施一定规则或检查，那么使用数据库触发器；如果只需对少数的程序实施一定的规则或检查，则可创建一个过程，让有关程序调用这个过程。</p>
<p style="text-indent: 2em"><strong>3 应用程序的调整</strong></p>
<p style="text-indent: 2em"><strong>3.1 SQL语句的优化</strong></p>
<p style="text-indent: 2em">SQL语句的执行速度，可以受很多因素的影响而变化。但主要的影响因素是：驱动表、执行操作的先后顺序和索引的运用。可以由很多不同的方法间接地改变这些因素，以达到最优的执行速度。这里主要探讨当对多个表进行连接查询时应遵循的优化原则：</p>
<p style="text-indent: 2em">(1) 用于连接的子句的列应被索引、在Where子句中应尽量利用索引，而不是避开索引。</p>
<p style="text-indent: 2em">(2) 连接操作应从返回较少行上驱动。</p>
<p style="text-indent: 2em">(3) 如果所连接的表A和B，A表长度远远大于B表，建议从较大的A表上驱动。</p>
<p style="text-indent: 2em">(4) 如果Where子句中含有选择性条件,Where No=20，将最具有选择性部分放在表达式最后。</p>
<p style="text-indent: 2em">(5) 如果只有一个表有索引，另一表无索引，无索引的表通常作为驱动表。如A表的No列以被索引，而B表的No 列没被索引，则应当B表作为驱动表，A表作为被驱动表。</p>
<p style="text-indent: 2em">(6) 若用于连接的列和Where子句中其他选择条件列均有索引，则按各个索引对查询的有效性和选择性分别定出级别，结合表中具体数据构成情况，从中选出优化路径，一般需要考虑：子句中哪些列可以使用索引、哪些索引具有唯一性及被查询表行数目等。</p>
<p style="text-indent: 2em"><strong>3.2 建立和使用视图、索引</strong></p>
<p style="text-indent: 2em">利用视图可以将基表中的列或行进行裁减、隐藏一部分数据，并且能够将涉及到多个表的复杂查询以视图的方式给出，使应用程序开发简洁快速。利用索引可以提高查询性能，减少磁盘 I/O，优化对数据表的查询，加速SQL语句的执行。但任何时候建立索引都能提高性能，何时建立索引应当遵循以下原则：该表常用来在索引列上查询，该表不常更新、插入、删除等操作，查询出来的结果记录数应控制在原表的2%～4%。</p>
<p style="text-indent: 2em"><strong>3.3 使用 Oracle 的数组接口</strong></p>
<p style="text-indent: 2em">当一个客户应用程序插入一行或用一个查询来向服务器请求某行时，不是发送具有单个行的网络包，而是采用数组处理，即把要插入的多个行或检索出的多个行缓冲在数组中，然后通过很少的几个包就可在网上传送这些数组。例如，一个给定的Select语句返回2000行数据，每行平均大小为40个字节，数据包的大小为4kB，而数组大小参数(arraysize)设置为20 ，则需从服务器发送100个数据包到客户机。如果简单地把(arraysize)设置为2000，那么同样的操作只需要传送 20个数据包。这样就减少了网络的传输量，提高了所有应用的性能。</p>
<p style="text-indent: 2em"><strong>4 总结</strong></p>
<p style="text-indent: 2em">我们在开发应用程序时，遵循上述的方法和原则，对系统进行调整，收到了令人满意的效果。但是应当指出，由于客户机、网络、服务器这3个相互依存的组成部分都必须调整和同步才能产生最佳的性能，因此还应根据系统的具体情况，具体分析和调整。</p>
</span></span>
<img src ="http://www.blogjava.net/gf7/aggbug/283332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2009-06-20 10:38 <a href="http://www.blogjava.net/gf7/archive/2009/06/20/283332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle下载地址</title><link>http://www.blogjava.net/gf7/archive/2009/06/08/280713.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Mon, 08 Jun 2009 11:33:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2009/06/08/280713.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/280713.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2009/06/08/280713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/280713.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/280713.html</trackback:ping><description><![CDATA[<p>Oracle Database 10g Release 2 (10.2.0.1.0)&nbsp;&nbsp; Enterprise/Standard Edition for Microsoft Windows (32-bit)<br />
<a href="http://download.oracle.com/otn/nt/oracle10g/10201/10201_database_win32.zip" target="_blank">http://download.oracle.com/otn/nt/oracle10g/10201/10201_database_win32.zip</a><br />
<a href="http://download.oracle.com/otn/nt/oracle10g/10201/10201_client_win32.zip" target="_blank">http://download.oracle.com/otn/nt/oracle10g/10201/10201_client_win32.zip</a><br />
<a href="http://download.oracle.com/otn/nt/oracle10g/10201/10201_clusterware_win32.zip" target="_blank">http://download.oracle.com/otn/nt/oracle10g/10201/10201_clusterware_win32.zip</a><br />
<a href="http://download.oracle.com/otn/nt/oracle10g/10201/10201_gateways_win32.zip" target="_blank">http://download.oracle.com/otn/nt/oracle10g/10201/10201_gateways_win32.zip</a><br />
<br />
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (x64)<br />
<a href="http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_database.zip" target="_blank">http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_database.zip</a><br />
<a href="http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_client.zip" target="_blank">http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_client.zip</a><br />
<a href="http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_clusterware.zip" target="_blank">http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_clusterware.zip</a><br />
<br />
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86<br />
<a href="http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux32.zip" target="_blank">http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux32.zip</a><br />
<a href="http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux32.zip" target="_blank">http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux32.zip</a><br />
<a href="http://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux32.zip" target="_blank">http://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux32.zip</a><br />
<br />
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86-64<br />
<a href="http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux_x86_64.cpio.gz" target="_blank">http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux_x86_64.cpio.gz</a><br />
<a href="http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux_x86_64.cpio.gz" target="_blank">http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux_x86_64.cpio.gz</a><br />
<a href="http://download.oracle.com/otn/linux/oracle10g/10201/10201_clusterware_linux_x86_64.cpio.gz" target="_blank">http://download.oracle.com/otn/linux/oracle10g/10201/10201_clusterware_linux_x86_64.cpio.gz</a><br />
<a href="http://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux_x86_64.cpio.gz" target="_blank">http://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux_x86_64.cpio.gz</a><br />
<br />
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for AIX5L<br />
<a href="http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_database.cpio.gz" target="_blank">http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_database.cpio.gz</a><br />
<a href="http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_client.cpio.gz" target="_blank">http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_client.cpio.gz</a><br />
<a href="http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_cluster.cpio.gz" target="_blank">http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_cluster.cpio.gz</a><br />
<a href="http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_gateways.cpio.gz" target="_blank">http://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_gateways.cpio.gz</a><br />
<br />
Oracle Database 10g Release 2 (10.2.0.2) Enterprise/Standard Edition for Solaris Operating System (x86)<br />
<a href="http://download.oracle.com/otn/solaris/oracle10g/10202/10202_database_solx86.zip" target="_blank">http://download.oracle.com/otn/solaris/oracle10g/10202/10202_database_solx86.zip</a><br />
<a href="http://download.oracle.com/otn/solaris/oracle10g/10202/10202_client_solx86.zip" target="_blank">http://download.oracle.com/otn/solaris/oracle10g/10202/10202_client_solx86.zip</a><br />
<a href="http://download.oracle.com/otn/solaris/oracle10g/10202/10202_clusterware_solx86.zip" target="_blank">http://download.oracle.com/otn/solaris/oracle10g/10202/10202_clusterware_solx86.zip</a><br />
<br />
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Solaris Operating System (x86-64)<br />
<a href="http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_database_solx86_64.zip" target="_blank">http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_database_solx86_64.zip</a><br />
<a href="http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_client_solx86_64.zip" target="_blank">http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_client_solx86_64.zip</a><br />
<a href="http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_clusterware_solx86_64.zip" target="_blank">http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_clusterware_solx86_64.zip</a><br />
--------------------------------------------------------------------------------------------------------- </p>
<p>更多oracle10g数据库相关下载请参考下面的官方下载网址：<a href="http://www.oracle.com/technology/global/cn/software/products/database/index.html" target="_blank" rel="external">http://www.oracle.com/technology/global/cn/software/products/database/index.html</a></p>
<p>ORACLE10gR2下载_oracle10G官方下载_Oracle10G Release2(10.2.0.1.0)下载_Oracle10g下载_oracle下载(Authour: 王大帅 Email: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#100;&#97;&#115;&#104;&#117;&#97;&#105;&#119;&#97;&#110;&#103;&#64;&#49;&#50;&#54;&#46;&#99;&#111;&#109;">dashuaiwang@126.com</a> 个人空间：<a href="http://wds.3u.cn/">http://wds.3u.cn</a>)</p>
<p>ORACLE10G 补丁_ORACLE10g PATCH下载地址：</p>
<p>oracle 10.2.0.2 patch:<br />
<a href="ftp://updates.oracle.com/4547817/p4547817_10202_AIX64-5L.zip" target="_blank">ftp://updates.oracle.com/4547817/p4547817_10202_AIX64-5L.zip</a><br />
<a href="ftp://updates.oracle.com/4547817/p4547817_10202_HP64.zip" target="_blank">ftp://updates.oracle.com/4547817/p4547817_10202_HP64.zip</a><br />
<a href="ftp://updates.oracle.com/4547817/p4547817_10202_HPUX-IA64.zip" target="_blank">ftp://updates.oracle.com/4547817/p4547817_10202_HPUX-IA64.zip</a><br />
<a href="ftp://updates.oracle.com/4547817/p4547817_10202_LINUX.zip" target="_blank">ftp://updates.oracle.com/4547817/p4547817_10202_LINUX.zip</a><br />
<a href="ftp://updates.oracle.com/4547817/p4547817_10202_Linux-IA64.zip" target="_blank">ftp://updates.oracle.com/4547817/p4547817_10202_Linux-IA64.zip</a><br />
<a href="ftp://updates.oracle.com/4547817/p4547817_10202_Linux-x86-64.zip" target="_blank">ftp://updates.oracle.com/4547817/p4547817_10202_Linux-x86-64.zip</a><br />
<a href="ftp://updates.oracle.com/4547817/p4547817_10202_MVS.zip" target="_blank">ftp://updates.oracle.com/4547817/p4547817_10202_MVS.zip</a><br />
<a href="ftp://updates.oracle.com/4547817/p4547817_10202_SOLARIS.zip" target="_blank">ftp://updates.oracle.com/4547817/p4547817_10202_SOLARIS.zip</a><br />
<a href="ftp://updates.oracle.com/4547817/p4547817_10202_SOLARIS64.zip" target="_blank">ftp://updates.oracle.com/4547817/p4547817_10202_SOLARIS64.zip</a><br />
<a href="ftp://updates.oracle.com/4547817/p4547817_10202_WINNT.zip" target="_blank">ftp://updates.oracle.com/4547817/p4547817_10202_WINNT.zip</a><br />
<a href="ftp://updates.oracle.com/4547817/p4547817_10202_WINNT64.zip" target="_blank">ftp://updates.oracle.com/4547817/p4547817_10202_WINNT64.zip</a><br />
<br />
oracle 10.2.0.3 patch:<br />
<a href="ftp://updates.oracle.com/5337014/p5337014_10203_WINNT.zip" target="_blank">ftp://updates.oracle.com/5337014/p5337014_10203_WINNT.zip</a><br />
<a href="ftp://updates.oracle.com/5337014/p5337014_10203_WINNT64.zip" target="_blank">ftp://updates.oracle.com/5337014/p5337014_10203_WINNT64.zip</a><br />
<a href="ftp://updates.oracle.com/5337014/p5337014_10203_AIX5L.zip" target="_blank">ftp://updates.oracle.com/5337014/p5337014_10203_AIX5L.zip</a><br />
<a href="ftp://updates.oracle.com/5337014/p5337014_10203_WINNT.zip" target="_blank">ftp://updates.oracle.com/5337014/p5337014_10203_WINNT.zip</a><br />
<a href="ftp://updates.oracle.com/5337014/p5337014_10203_WINNT.zip" target="_blank">ftp://updates.oracle.com/5337014/p5337014_10203_WINNT.zip</a><br />
<a href="ftp://updates.oracle.com/5337014/p5337014_10203_WINNT.zip" target="_blank">ftp://updates.oracle.com/5337014/p5337014_10203_WINNT.zip</a><br />
<br />
oracle 10.2.0.4 patch:<br />
<a href="ftp://updates.oracle.com/6810189/p6810189_10204_AIX5L.zip" target="_blank">ftp://updates.oracle.com/6810189/p6810189_10204_AIX5L.zip</a><br />
<a href="ftp://updates.oracle.com/6810189/p6810189_10204_LINUX.zip" target="_blank">ftp://updates.oracle.com/6810189/p6810189_10204_LINUX.zip</a><br />
<a href="ftp://updates.oracle.com/6810189/p6810189_10204_Linux-x86-64.zip" target="_blank">ftp://updates.oracle.com/6810189/p6810189_10204_Linux-x86-64.zip</a><br />
<a href="ftp://updates.oracle.com/6810189/p6810189_10204_Linux-x86.zip" target="_blank">ftp://updates.oracle.com/6810189/p6810189_10204_Linux-x86.zip</a><br />
<a href="ftp://updates.oracle.com/6810189/p6810189_10204_Win32.zip" target="_blank">ftp://updates.oracle.com/6810189/p6810189_10204_Win32.zip</a><br />
<a href="ftp://updates.oracle.com/6810189/p6810189_10204_Win64.zip" target="_blank">ftp://updates.oracle.com/6810189/p6810189_10204_Win64.zip</a><br />
<br />
<br />
<br />
<strong>Oracle9i</strong><br />
<br />
</p>
<p>Oracle9i Database Release 2 Enterprise/Standard/Personal Edition for Windows NT/2000/XP</p>
<p>http://download.oracle.com/otn/nt/oracle9i/9201/92010NT_Disk1.zip<br />
http://download.oracle.com/otn/nt/oracle9i/9201/92010NT_Disk2.zip<br />
http://download.oracle.com/otn/nt/oracle9i/9201/92010NT_Disk3.zip</p>
<p>Oracle9i Database Release 2 Enterprise/Standard/Personal/Client Edition for Windows XP 2003/Windows Server 2003 (64-bit)</p>
<p>http://download.oracle.com/otn/nt/oracle9i/9202/92021Win64_Disk1.zip<br />
http://download.oracle.com/otn/nt/oracle9i/9202/92021Win64_Disk2.zip</p>
<p>Oracle9i Database Release 2 Enterprise/Standard Edition for Intel Linux</p>
<p>http://download.oracle.com/otn/linux/oracle9i/9204/ship_9204_linux_disk1.cpio.gz<br />
http://download.oracle.com/otn/linux/oracle9i/9204/ship_9204_linux_disk2.cpio.gz<br />
http://download.oracle.com/otn/linux/oracle9i/9204/ship_9204_linux_disk3.cpio.gz</p>
<p>Oracle9i Database Release 2 (9.2.0.4) Enterprise/Standard Edition for Linux x86-64</p>
<p>http://download.oracle.com/otn/linux/oracle9i/9204/amd64_db_9204_Disk1.cpio.gz<br />
http://download.oracle.com/otn/linux/oracle9i/9204/amd64_db_9204_Disk2.cpio.gz<br />
http://download.oracle.com/otn/linux/oracle9i/9204/amd64_db_9204_Disk3.cpio.gz</p>
<p>Oracle9i Database Release 2 Enterprise/Standard Edition for AIX - Based 4.3.3 Systems (64-bit)</p>
<p>http://download.oracle.com/otn/aix/oracle9i/9201/server_9201_AIX64_Disk1.cpio.gz<br />
http://download.oracle.com/otn/aix/oracle9i/9201/server_9201_AIX64_Disk2.cpio.gz<br />
http://download.oracle.com/otn/aix/oracle9i/9201/server_9201_AIX64_Disk3.cpio.gz<br />
http://download.oracle.com/otn/aix/oracle9i/9201/server_9201_AIX64_Disk4.cpio.gz</p>
<p>Oracle9i Database Release 2 Enterprise/Standard Edition for AIX- Based 5L Systems</p>
<p>http://download.oracle.com/otn/aix/oracle9i/9201/A99331-01.zip<br />
http://download.oracle.com/otn/aix/oracle9i/9201/A99331-02.zip<br />
http://download.oracle.com/otn/aix/oracle9i/9201/A99331-03.zip<br />
http://download.oracle.com/otn/aix/oracle9i/9201/A99331-04.zip</p>
<p>Oracle9i Database Release 2 Enterprise/Standard Edition for Sun SPARC Solaris (32-bit)</p>
<p>http://download.oracle.com/otn/solaris/oracle9i/9201/92010Sol_Disk1.cpio.gz<br />
http://download.oracle.com/otn/solaris/oracle9i/9201/92010Sol_Disk2.cpio.gz<br />
http://download.oracle.com/otn/solaris/oracle9i/9201/92010Sol_Disk3.cpio.gz</p>
<p>Oracle9i Database Release 2 Enterprise/Standard Edition for Sun SPARC Solaris (64-bit)</p>
<p>http://download.oracle.com/otn/solaris/oracle9i64/9201/solaris64_9.2.0.1.0.Disk1.cpio.gz<br />
http://download.oracle.com/otn/solaris/oracle9i64/9201/solaris64_9.2.0.1.0.Disk2.cpio.gz<br />
http://download.oracle.com/otn/solaris/oracle9i64/9201/solaris64_9.2.0.1.0.Disk3.cpio.gz</p>
<img src ="http://www.blogjava.net/gf7/aggbug/280713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2009-06-08 19:33 <a href="http://www.blogjava.net/gf7/archive/2009/06/08/280713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 9i 表空间误删除的恢复方法</title><link>http://www.blogjava.net/gf7/archive/2009/04/01/263288.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Wed, 01 Apr 2009 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2009/04/01/263288.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/263288.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2009/04/01/263288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/263288.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/263288.html</trackback:ping><description><![CDATA[昨天老项目的客户来电话说系统有问题了，过去一看是数据库起不来了，看来一下日志。<br />
Errors in file /opt/ora9/admin/xwoa/udump/xwoa_ora_17933.trc:<br />
ORA-01115: 从文件 16 读取块时出现 IO 错误 (块 # 189544)<br />
ORA-27072: skgfdisp: I/O 错误<br />
Linux Error: 25: Inappropriate ioctl for device<br />
Additional information: 189543<br />
靠，数据表空间文件被删除。<br />
好在数据库采用了归档模式。<br />
开始恢复：<br />
&nbsp;1、SQL&gt;shutdown immediate<br />
备份全部数据文件和控制文件和log以防恢复过程中出现问题。<br />
2、SQL&gt; startup mount;<br />
3、SQL&gt; alter database create datafile '/opt/ora9/oradata/xwoa/CHAOYANGJP.dbf'&nbsp;&nbsp;&nbsp; as '/opt/ora9/oradata/xwoa/CHAOYANGJP.dbf'&nbsp; reuse;<br />
创建误删除的数据文件。<br />
4、recover datafile '/opt/ora9/oradata/xwoa/CHAOYANGJP.dbf';<br />
<p>ORA-00279: 更改 57900012 (在 09/19/2007 10:27:05 生成) 对于线程 1 是必需的<br />
ORA-00289: 建议: /opt/ora9/oradata/xwoa/archive/1_863.dbf<br />
ORA-00280: 更改 57900012 对于线程 1 是按序列 # 863 进行的</p>
<p><br />
指定日志: {&lt;RET&gt;=suggested | filename | AUTO | CANCEL} </p>
输入：AUTO回车<br />
开始恢复过程，这个时间比较长。<br />
<br />
5、SQL&gt; select d.file#,d.name,d.status,h.status from v$datafile d,v$datafile_header<br />
&nbsp;h where d.file#=h.file# ;<br />
查看一下数据文件是否online。<br />
如果没有online，<br />
6、SQL&gt; ALTER DATABASE DATAFILE '/opt/ora9/oradata/xwoa/CHAOYANGJP.dbf' ONLINE;<br />
ok！完成恢复过程。
<img src ="http://www.blogjava.net/gf7/aggbug/263288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2009-04-01 10:27 <a href="http://www.blogjava.net/gf7/archive/2009/04/01/263288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何收缩数据文件的大小？</title><link>http://www.blogjava.net/gf7/archive/2007/08/10/135803.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Fri, 10 Aug 2007 05:56:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2007/08/10/135803.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/135803.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2007/08/10/135803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/135803.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/135803.html</trackback:ping><description><![CDATA[如何收缩数据文件的大小？<br><br>
<div class=t_msgfont id=message65052>下面这个实验用于描述如何通过move tablespace来完成resize datafile。 <br>&nbsp;&nbsp;<br>HWM的概念就不在此阐述了。 <br>&nbsp;&nbsp;<br>测试环境为Oracle10g for Linux，其它版本的一样。 <br>&nbsp;&nbsp;<br>我们先创建两个表空间，分别为t_tbs和t_tbs1，分别有一个数据文件，大小都是5M <br>再创建一个test_user用户，给这个用户上述两个表空间的无限限额，并且设置默认表空间是t_tbs。 <br>[zhangleyi@as zhangleyi]$ sqlplus / as sysdba <br>&nbsp;&nbsp;<br>SQL*Plus: Release 10.1.0.2.0 - Production on Tue Apr 13 21:01:25 2004 <br>&nbsp;&nbsp;<br>Copyright (c) 1982, 2004, Oracle.&nbsp;&nbsp;All rights reserved. <br>&nbsp;&nbsp;<br>Connected to: <br>Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production <br>With the Partitioning, OLAP and Data Mining options <br>&nbsp;&nbsp;<br>SYS at orcl10&gt;alter user test_user default tablespace t_tbs; <br>&nbsp;&nbsp;<br>User altered. <br>&nbsp;&nbsp;<br>SYS at orcl10&gt;alter user test_user quota unlimited on t_tbs; <br>&nbsp;&nbsp;<br>User altered. <br>&nbsp;&nbsp;<br>SYS at orcl10&gt;alter user test_user quota unlimited on t_tbs1; <br>&nbsp;&nbsp;<br>User altered <br>&nbsp;&nbsp;<br>用test_user登录，创建表 <br>TEST_USER at orcl10&gt;create table t_obj as select * from dba_objects where rownum&amp;lt;10000; <br>&nbsp;&nbsp;<br>Table created. <br>&nbsp;&nbsp;<br>TEST_USER at orcl10&gt;insert into t_obj select * from t_obj; <br>&nbsp;&nbsp;<br>9999 rows created. <br>&nbsp;&nbsp;<br>TEST_USER at orcl10&gt;/ <br>&nbsp;&nbsp;<br>19998 rows created. <br>&nbsp;&nbsp;<br>TEST_USER at orcl10&gt;/ <br>insert into t_obj select * from t_obj <br>* <br>ERROR at line 1: <br>ORA-01653: unable to extend table TEST_USER.T_OBJ by 128 in tablespace T_TBS <br>&nbsp;&nbsp;<br>TEST_USER at orcl10&gt;commit; <br>&nbsp;&nbsp;<br>Commit complete. <br>&nbsp;&nbsp;<br>TEST_USER at orcl10&gt;select sum(blocks) "Total Blocks",sum(bytes) "Total Size" from dba_extents where owner='TEST_USER' and segment_name='T_OBJ'; <br>&nbsp;&nbsp;<br>Total Blocks Total Size <br>------------ ---------- <br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 512&nbsp; &nbsp; 4194304 <br>&nbsp;&nbsp;<br>好，上面我们创建了一个表，并且插入了很多数据，通过dba_extents视图我们可以看到总共用的block熟和总共的大小。 <br>&nbsp;&nbsp;<br>下面我们用delete删除全部数据，并且插入新的9999条数据 <br>TEST_USER at orcl10&gt;delete from t_obj; <br>&nbsp;&nbsp;<br>39996 rows deleted. <br>&nbsp;&nbsp;<br>TEST_USER at orcl10&gt;insert into t_obj select * from dba_objects where rownum&amp;lt;10000; <br>&nbsp;&nbsp;<br>9999 rows created. <br>&nbsp;&nbsp;<br>TEST_USER at orcl10&gt;commit; <br>&nbsp;&nbsp;<br>Commit complete. <br>&nbsp;&nbsp;<br>TEST_USER at orcl10&gt;select sum(blocks) "Total Blocks",sum(bytes) "Total Size" from dba_extents <br>&nbsp; &nbsp;2&nbsp;&nbsp;where owner='TEST_USER' and segment_name='T_OBJ'; <br>&nbsp;&nbsp;<br>Total Blocks Total Size <br>------------ ---------- <br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 512&nbsp; &nbsp; 4194304 <br>&nbsp;&nbsp;<br>再次查看dba_extents视图，发现占用的空间并没有减少。 <br>&nbsp;&nbsp;<br>我们尝试resize这个数据文件，file#为6的是t_tbs表空间下面的数据文件 <br>SYS at orcl10&gt;alter database datafile 6 resize 4M; <br>alter database datafile 6 resize 4M <br>* <br>ERROR at line 1: <br>ORA-03297: file contains used data beyond requested RESIZE value <br>&nbsp;&nbsp;<br>SYS at orcl10&gt;alter database datafile 6 resize 4500000; <br>&nbsp;&nbsp;<br>Database altered. <br>&nbsp;&nbsp;<br>我们发现想resize到4M不可以，但是resize到4500000就可以了，因为上面查看出来的Total Size是4194304，这个值大于4M而小于4500000。 <br>&nbsp;&nbsp;<br>然后我们move这张表到t_tbs1表空间，这个表空间下面的数据文件file#是8 <br>&nbsp;&nbsp;<br>EST_USER at orcl10&gt;alter table t_obj move tablespace t_tbs1; <br>&nbsp;&nbsp;<br>Table altered. <br>&nbsp;&nbsp;<br>TEST_USER at orcl10&gt;select sum(blocks) "Total Blocks",sum(bytes) "Total Size" from dba_extents <br>&nbsp; &nbsp;2&nbsp;&nbsp;where owner='TEST_USER' and segment_name='T_OBJ'; <br>&nbsp;&nbsp;<br>Total Blocks Total Size <br>------------ ---------- <br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 128&nbsp; &nbsp; 1048576 <br>&nbsp;&nbsp;<br>我们检查dba_extents视图，发现Total Size已经变化了，此时已经可以说明move表是会重新进行block的整理的，同时也重置了HWM。 <br>&nbsp;&nbsp;<br>下面我们resize这个数据文件。 <br>SYS at orcl10&gt;alter database datafile 8 resize 2M; <br>&nbsp;&nbsp;<br>Database altered. <br>&nbsp;&nbsp;<br>SYS at orcl10&gt;host <br>[zhangleyi@as ORCL10]$ cd /oracle/oradata/ORCL10/datafile/ <br>[zhangleyi@as datafile]$ ls -l <br>总用量 1419076 <br>-rw-r-----&nbsp; &nbsp; 1 zhangleyi dba&nbsp; &nbsp;&nbsp; &nbsp;20979712&nbsp;&nbsp;4月 13 21:17 cattbs01.dbf <br>-rw-r-----&nbsp; &nbsp; 1 zhangleyi dba&nbsp; &nbsp;&nbsp; &nbsp;157294592&nbsp;&nbsp;4月 13 21:17 o1_mf_example_02p0gpoj_.dbf <br>-rw-r-----&nbsp; &nbsp; 1 zhangleyi dba&nbsp; &nbsp;&nbsp; &nbsp;419438592&nbsp;&nbsp;4月 13 21:20 o1_mf_sysaux_02p09kny_.dbf <br>-rw-r-----&nbsp; &nbsp; 1 zhangleyi dba&nbsp; &nbsp;&nbsp; &nbsp;555753472&nbsp;&nbsp;4月 13 21:17 o1_mf_system_02p09kno_.dbf <br>-rw-r-----&nbsp; &nbsp; 1 zhangleyi dba&nbsp; &nbsp;&nbsp; &nbsp;20979712&nbsp;&nbsp;4月 13 21:02 o1_mf_temp_02p0fzsd_.tmp <br>-rw-r-----&nbsp; &nbsp; 1 zhangleyi dba&nbsp; &nbsp;&nbsp; &nbsp;62922752&nbsp;&nbsp;4月 13 21:20 o1_mf_undotbs1_02p09kog_.dbf <br>-rw-r-----&nbsp; &nbsp; 1 zhangleyi dba&nbsp; &nbsp;&nbsp; &nbsp;209723392&nbsp;&nbsp;4月 13 21:17 o1_mf_users_02p09kqv_.dbf <br><font color=red>-rw-r-----&nbsp; &nbsp; 1 zhangleyi dba&nbsp; &nbsp;&nbsp; &nbsp; 2105344&nbsp;&nbsp;4月 13 21:21 TEST01.DBF</font>（这是file#8） <br><font color=red>-rw-r-----&nbsp; &nbsp; 1 zhangleyi dba&nbsp; &nbsp;&nbsp; &nbsp; 4513792&nbsp;&nbsp;4月 13 21:20 test.dbf</font>（这是file#6） <br>&nbsp;&nbsp;<br>可以看到我们的目的已经达到了。 <br>&nbsp;&nbsp;<br>在真实应用中，我们可以将一个表空间中的所有object，全部move到一个新的表空间中，然后drop掉原来的表空间，再从磁盘上删除原来表空间中的数据文件。 <br>&nbsp;&nbsp;<br>至于如何得知HWM，我们可以通过analyze之后的数据字典得到，那么如果不进行analyze的话，我们也可以运行下面这个脚本。 <br>这个脚本可以用于检查一个object占有的总共block数和处于HWM之上的block数，这当然也就知道了HWM是在什么位置。 <br>&nbsp;&nbsp;<br>DECLARE <br>v_total_blocks NUMBER; <br>v_total_bytes NUMBER; <br>v_unused_blocks NUMBER; <br>v_unused_bytes NUMBER; <br>v_last_used_extent_file_id NUMBER; <br>v_last_used_extent_block_id NUMBER; <br>v_last_used_block NUMBER; <br>BEGIN <br>dbms_space.unused_space('SCOTT','BIGEMP','TABLE',v_total_blocks,v_total_bytes,v_unused_blocks,v_unused_bytes,v_last_used_extent_file_id,v_last_used_extent_block_id,v_last_used_block); <br>dbms_output.put_line('Total Blocks: '||TO_CHAR(v_total_blocks)); <br>dbms_output.put_line('Blocks above HWM: '||TO_CHAR(v_unused_blocks)); <br>END; <br>/ <br>&nbsp;&nbsp;<br>Total Blocks: 256 <br>Blocks above HWM: 0 <br>&nbsp;&nbsp;<br>PL/SQL procedure successfully completed <br>&nbsp;&nbsp;<br>Executed in 0.01 seconds</div>
<img src ="http://www.blogjava.net/gf7/aggbug/135803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2007-08-10 13:56 <a href="http://www.blogjava.net/gf7/archive/2007/08/10/135803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改oracle 150 的最大连接数</title><link>http://www.blogjava.net/gf7/archive/2007/03/13/103556.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Tue, 13 Mar 2007 07:50:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2007/03/13/103556.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/103556.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2007/03/13/103556.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/103556.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/103556.html</trackback:ping><description><![CDATA[使用sys，以sysdba权限登录：<br /><br />c:\sqlplus /nolog<br />SQL&gt;conn / as sysdba<br /><br />SQL&gt; show parameter processes;<br /><br />NAME TYPE VALUE<br />------------------------------------ ----------- ------------------------------<br />aq_tm_processes integer 1<br />db_writer_processes integer 1<br />job_queue_processes integer 10<br />log_archive_max_processes integer 1<br />processes integer 150<br /><br />SQL&gt; alter system set processes=300 scope = spfile;<br /><br />系统已更改。<br /><br />SQL&gt; show parameter processes;<br /><br />NAME TYPE VALUE<br />------------------------------------ ----------- ------------------------------<br />aq_tm_processes integer 1<br />db_writer_processes integer 1<br />job_queue_processes integer 10<br />log_archive_max_processes integer 1<br />processes integer 150<br /><br />SQL&gt; create pfile from spfile;<br /><br />文件已创建。<br /><br /><br />重启数据库，OK！<img src ="http://www.blogjava.net/gf7/aggbug/103556.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2007-03-13 15:50 <a href="http://www.blogjava.net/gf7/archive/2007/03/13/103556.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>itpub上的ORACLE之常用FAQ V1.0</title><link>http://www.blogjava.net/gf7/archive/2006/08/01/61179.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Tue, 01 Aug 2006 05:18:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2006/08/01/61179.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/61179.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2006/08/01/61179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/61179.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/61179.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 第一部分、SQL&amp;PL/SQL[Q]怎么样查询特殊字符，如通配符%与_[A]select * from table where name like 'A_%' escape ''[Q]如何插入单引号到数据库表中[A]可以用ASCII码处理，其它特殊字符如&amp;也一样，如insert into t values('i'||chr(39)||'m'); -- chr(39)代表字符'或者用...&nbsp;&nbsp;<a href='http://www.blogjava.net/gf7/archive/2006/08/01/61179.html'>阅读全文</a><img src ="http://www.blogjava.net/gf7/aggbug/61179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2006-08-01 13:18 <a href="http://www.blogjava.net/gf7/archive/2006/08/01/61179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE中的物化视图</title><link>http://www.blogjava.net/gf7/archive/2006/07/09/57321.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Sun, 09 Jul 2006 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2006/07/09/57321.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/57321.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2006/07/09/57321.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/57321.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/57321.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align="left">
				<span lang="EN-US" style="FONT-SIZE: 14pt; mso-bidi-font-size: 12.0pt">
						<span style="mso-tab-count: 1">
								<font face="Times New Roman">      </font>
						</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">物化视图是包括一个查询结果的数据库对像，它是远程数据的的本地副本，或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据，也可以称为快照。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">
								<font face="Times New Roman">       </font>
						</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">物化视图可以查询表，视图和其它的物化视图。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">
								<font face="Times New Roman">       </font>
						</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通常情况下，物化视图被称为主表（在复制期间）或明细表（在数据仓库中）。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">
								<font face="Times New Roman">       </font>
						</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于复制，物化视图允许你在本地维护远程数据的副本</span>
				<span lang="EN-US">
						<font face="Times New Roman">,</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这些副本是只读的。如果你想修改本地副本，必须用高级复制的功能。当你想从一个表或视图中抽取数据时，你可以用从物化视图中抽取。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">
								<font face="Times New Roman">       </font>
						</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于数据仓库，创建的物化视图通常情况下是聚合视图，单一表聚合视图和连接视图。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本文我们将会看到怎样创建物化视图并且讨论它的刷新选项。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">
								<font face="Times New Roman">       </font>
						</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在复制环境下，创建的物化视图通常情况下主键，</span>
				<span lang="EN-US">
						<font face="Times New Roman">rowid,</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和子查询视图。</span>
				<span lang="EN-US" style="FONT-SIZE: 7.5pt; mso-bidi-font-size: 12.0pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<font face="Times New Roman">1.</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">主键物化视图：</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font face="Times New Roman">
								<span style="mso-tab-count: 1">       </span>
								<span style="mso-tab-count: 1">       </span>
						</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面的语法在远程数据库表</span>
				<span lang="EN-US">
						<font face="Times New Roman">emp</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上创建主键物化视图</span>
		</p>
		<pre>
				<font color="#000055">
						<font face="Courier New">
								<span lang="EN-US">
										<font size="1">SQL&gt; CREATE MATERIALIZED VIEW mv_emp_pk</font>
								</span>
						</font>
				</font>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">REFRESH FAST START WITH SYSDATE </font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">
												<span style="mso-tab-count: 1">    </span>NEXT<span style="mso-spacerun: yes">  </span>SYSDATE + 1/48</font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">WITH PRIMARY KEY </font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">
												<span style="mso-tab-count: 1">    </span>AS SELECT * FROM <a href="mailto:emp@remote_db;">emp@remote_db;</a></font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font face="Courier New">
								<font color="#000055">
										<font size="1">Materialized view created.</font>
										<br />   </font>
						</font>
				</span>
				<span lang="EN-US">
						<font face="Times New Roman">
								<span style="mso-tab-count: 1">
								</span>
						</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意：当用</span>
				<span lang="EN-US">
						<font face="Times New Roman">FAST</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选项创建物化视图，必须创建基于主表的视图日志</span>
				<span lang="EN-US">
						<font face="Times New Roman">,</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如下</span>
				<span lang="EN-US">
						<font face="Times New Roman">:</font>
				</span>
		</pre>
		<pre style="tab-stops: 45.75pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt">      <span lang="EN-US"><font size="1"><font color="#000055"><font face="Courier New"><span style="mso-tab-count: 1"></span>SQL&gt; CREATE MATERIALIZED VIEW LOG ON emp;</font></font></font></span><font size="1"><font color="#000055"><font face="Courier New"><span lang="EN-US">Materialized view log created.</span></font></font></font></pre>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 42.0pt">
				<font face="Times New Roman">
						<span lang="EN-US" style="FONT-SIZE: 12pt">2.</span>
						<span lang="EN-US">Rowid</span>
				</font>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">物化视图</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font face="Times New Roman">
								<span style="mso-tab-count: 1">       </span>
								<span style="mso-tab-count: 1">       </span>
						</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面的语法在远程数据库表</span>
				<span lang="EN-US">
						<font face="Times New Roman">emp</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上创建</span>
				<span lang="EN-US">
						<font face="Times New Roman">Rowid</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">物化视图</span>
		</p>
		<pre style="tab-stops: 45.8pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt">
				<font color="#000055">
						<font face="Courier New">
								<span lang="EN-US">
										<font size="1">SQL&gt; CREATE MATERIALIZED VIEW mv_emp_rowid </font>
								</span>
						</font>
				</font>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">REFRESH WITH ROWID </font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">
												<span style="mso-tab-count: 1">     </span>AS SELECT * FROM emp@remote_db; </font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">Materialized view log created.</font>
								</font>
						</font>
				</span>
		</pre>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<font face="Times New Roman">3.</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">子查询物化视图</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font face="Times New Roman">
								<span style="mso-tab-count: 1">       </span>
								<span style="mso-tab-count: 1">       </span>
						</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面的语法在远程数据库表</span>
				<span lang="EN-US">
						<font face="Times New Roman">emp</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上创建基于</span>
				<span lang="EN-US">
						<font face="Times New Roman">emp</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">
						<font face="Times New Roman">dept</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表的子查询物化视图</span>
		</p>
		<pre>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">
												<span style="mso-tab-count: 1">
												</span>SQL&gt; CREATE MATERIALIZED VIEW<span style="mso-spacerun: yes">  </span>mv_empdept</font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">AS SELECT * FROM emp@remote_db e</font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">
												<span style="mso-tab-count: 1">     </span>WHERE EXISTS</font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">
												<span style="mso-tab-count: 1">   </span>(SELECT * FROM dept@remote_db d</font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font face="Courier New" color="#000055" size="1">
								<span style="mso-tab-count: 1">        </span>WHERE e.dept_no = d.dept_no)</font>
				</span>
				<font color="#000055">
						<font face="Courier New">
								<font size="1">
										<span lang="EN-US">Materialized view log created.</span>
										<span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-size: 7.0pt">
										</span>
								</font>
						</font>
				</font>
				<b>
						<span lang="EN-US">
								<span style="mso-tab-count: 1">
										<font face="Times New Roman">       </font>
								</span>
						</span>
				</b>
				<b>
						<span lang="EN-US" style="FONT-FAMILY: Arial">REFRESH </span>
				</b>
				<b>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">子句</span>
				</b>
				<b>
						<span lang="EN-US" style="FONT-FAMILY: Arial">
								<o:p>
								</o:p>
						</span>
				</b>
		</pre>
		<pre>
				<font size="1">
						<font color="#000055">
								<span lang="EN-US">
										<font face="Courier New">[refresh [fast|complete|force]</font>
								</span>
						</font>
				</font>
				<span lang="EN-US">
						<font size="1">
								<font face="Courier New">
										<font color="#000055">
												<span style="mso-tab-count: 1">         </span>[on demand | commit]</font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font face="Courier New">
										<font color="#000055">
												<span style="mso-tab-count: 1">         </span>[start with date] [next date]</font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font face="Courier New">
										<font color="#000055">
												<span style="mso-tab-count: 1">         </span>[with {primary key|rowid}]]</font>
								</font>
						</font>
				</span>
		</pre>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<b>
						<span lang="EN-US" style="FONT-FAMILY: Arial">
								<span style="mso-tab-count: 1">       </span>
						</span>
				</b>
				<span lang="EN-US" style="FONT-FAMILY: Arial">Refresh</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">选项说明</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">:</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt; TEXT-INDENT: -18pt; tab-stops: list 60.0pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">a.</span>
				<span lang="EN-US" style="FONT-SIZE: 7pt">
						<font face="Times New Roman">      </font>
				</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">oracle</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">用刷新方法在物化视图中刷新数据</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">.</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt; TEXT-INDENT: -18pt; tab-stops: list 60.0pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">b.</span>
				<span lang="EN-US" style="FONT-SIZE: 7pt">
						<font face="Times New Roman">      </font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">是基于主键还是基于</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">rowid</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的物化视图</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt; TEXT-INDENT: -18pt; tab-stops: list 60.0pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">c.</span>
				<span lang="EN-US" style="FONT-SIZE: 7pt">
						<font face="Times New Roman">       </font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">物化视图的刷新时间和间隔刷新时间</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt; TEXT-INDENT: -18pt; tab-stops: list 60.0pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">Refresh</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">方法</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">-FAST</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">子句</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<span style="mso-tab-count: 1">       </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">增量刷新用物化视图日志（参照上面所述）来发送主表已经修改的数据行到物化视图中</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">.</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">如果指定</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">REFRESH FAST</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">子句，那么应该对主表创建物化视图日志</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<pre>
				<font size="1">
						<font color="#000055">
								<span lang="EN-US">
										<font face="Courier New">SQL&gt; CREATE MATERIALIZED VIEW LOG ON emp;</font>
								</span>
						</font>
				</font>
				<span lang="EN-US" style="FONT-SIZE: 7pt; COLOR: #000055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-fareast-font-family: 黑体">
						<font size="2">Materialized view log created.</font>
				</span>
		</pre>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<span style="mso-tab-count: 1">       </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">对于增量刷新选项，如果在子查询中存在分析函数，则物化视图不起作用。</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">Refresh</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">方法</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">-<em></em>COMPLETE</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">子句</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<span style="mso-tab-count: 1">       </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">完全刷新重新生成整个视图，如果请求完全刷新，</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">oracle</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">会完成</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<span style="mso-tab-count: 1">       </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">完全刷新即使增量刷新可用。</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">Refresh Method – FORCE </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">子句</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<span style="mso-tab-count: 1">       </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">当指定</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">FORCE</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">子句，如果增量刷新可用</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">Oracle</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">将完成增量刷新，否则将完成完全刷新</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">如果不指定刷新方法</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">(FAST, COMPLETE, or FORCE),Force</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">选项是默认选项</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">主键和</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">ROWD</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">子句</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<span style="mso-tab-count: 1">       </span>WITH PRIMARY KEY</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">选项生成主键物化视图</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">也就是说物化视图是基于主表的主键，而不是</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">ROWID(</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">对应于</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">ROWID</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">子句</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">). PRIMARY KEY</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">是默认选项</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">为了生成</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">PRIMARY KEY</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">子句，应该在主表上定义主键，否则应该用基于</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">ROWID</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的物化视图</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">.</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<span style="mso-tab-count: 1">       </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">主键物化视图允许识别物化视图主表而不影响物化视图增量刷新的可用性。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="COLOR: red; FONT-FAMILY: Arial">
						<span style="mso-tab-count: 1">       </span>
				</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">Rowid</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">物化视图只有一个单一的主表，不能包括下面任何一项</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">:</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-INDENT: -21pt; tab-stops: list 63.0pt">
				<span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Arial">n</span>
				<span lang="EN-US" style="FONT-SIZE: 7pt">
						<font face="Times New Roman">         </font>
				</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">Distinct </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">或者聚合函数</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">.</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-INDENT: -21pt; tab-stops: list 63.0pt">
				<span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Arial">n</span>
				<span lang="EN-US" style="FONT-SIZE: 7pt">
						<font face="Times New Roman">         </font>
				</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">Group by</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">，子查询，连接和</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">SET</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">操作</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US" style="COLOR: red; FONT-FAMILY: Arial"> </span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<b>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">刷新时间</span>
				</b>
				<b>
						<span lang="EN-US" style="FONT-FAMILY: Arial">
								<span style="mso-tab-count: 1">       </span>
						</span>
				</b>
				<b>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<em>
						<span lang="EN-US" style="FONT-FAMILY: Arial">
								<span style="mso-tab-count: 1">       </span>
						</span>
				</em>
				<span lang="EN-US" style="FONT-FAMILY: Arial">START WITH</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">子句通知数据库完成从主表到本地表第一次复制的时间</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">应该及时估计下一次运行的时间点</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">, NEXT </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">子句说明了刷新的间隔时间</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">.<o:p></o:p></span>
		</p>
		<pre style="tab-stops: 45.8pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt">
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">SQL&gt; CREATE MATERIALIZED VIEW mv_emp_pk</font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">
												<span style="mso-tab-count: 1">            </span>REFRESH FAST </font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">
												<span style="mso-tab-count: 1">            </span>START WITH SYSDATE </font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">
												<span style="mso-tab-count: 1">            </span>NEXT<span style="mso-spacerun: yes">  </span>SYSDATE + 2</font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">
												<span style="mso-tab-count: 1">            </span>WITH PRIMARY KEY </font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">
												<span style="mso-tab-count: 1">              </span>AS SELECT * FROM emp@remote_db;<br /></font>
								</font>
						</font>
				</span>
				<span lang="EN-US">
						<font size="1">
								<font color="#000055">
										<font face="Courier New">
												<span style="mso-tab-count: 1">                 </span>Materialized view created.</font>
								</font>
						</font>
				</span>
		</pre>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">在上面的例子中，物化视图数据的第一个副本在创建时生成，以后每两天刷新一次</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">.</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">
				</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<b>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">总结</span>
				</b>
				<b>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">物化视图提供了可伸缩的基于主键或</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">ROWID</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的视图</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">指定了刷新方法和自动刷新的时间。</span>
				<br />
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">
						<o:p>
						</o:p>
				</span>
		</p>
		<span id="CommnetList1_CommnetList1_rpCommentList__ctl0_lblContent">查询本数据库用户模式下有多少物化视图<br />select * from user_mviews<br /><br />查询增量复制是否成功<br />select* from user_jobs，查看其中的failure列<br /><br />物化视图立即刷新<br />exec dbms_snapshot.refresh('"CUSTCARE"."MV_Name"','C')；<br /><br />使用复制还需要注意：<br />     相应主表的log大小，如log占有的空间太大，会影响性能<br /></span>
<img src ="http://www.blogjava.net/gf7/aggbug/57321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2006-07-09 10:56 <a href="http://www.blogjava.net/gf7/archive/2006/07/09/57321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle性能调优实践中的几点心得</title><link>http://www.blogjava.net/gf7/archive/2005/10/28/17153.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Fri, 28 Oct 2005 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2005/10/28/17153.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/17153.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2005/10/28/17153.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/17153.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/17153.html</trackback:ping><description><![CDATA[很多的时侯，做Oracle DBA的我们，当应用管理员向我们通告现在应用很慢、数据库很慢的时侯，我们到数据库时做几个示例的Select也发现同样的问题时，有些时侯我们会无从下手，因为我们认为数据库的各种命种率都是满足Oracle文档的建议。实际上如今的优化己经向优化等待(waits)转型了，实际中性能优化最根本的出现点也都集中在IO，这是影响性能最主要的方面，由系统中的等待去发现Oracle库中的不足、操作系统某些资源利用的不合理是一个比较好的办法，下面把我的一点实践经验与大家分享一下，本文测重于Unix环境。 <BR><BR>一、通过操作系统的一些工具检查系统的状态，比如CPU、内存、交换、磁盘的利用率，根据经验或与系统正常时的状态相比对，有时系统表面上看起来看空闲这也可能不是一个正常的状态，因为cpu可能正等待IO的完成。除此之外我们还应观注那些占用系统资源(cpu、内存)的进程。 <BR><BR>　　 1、如何检查操作系统是否存在IO的问题？使用的工具有sar,这是一个比较通用的工具。 <BR><BR>　　 Rp1#Sar -u 2 10 <BR><BR>　　 即每隔2秒检察一次，共执行20次，当然这些都由你决定了。 <BR><BR>　　 示例返回： <BR><BR>　　 HP-UX hpn2 B.11.00 U 9000/800 08/05/03 <BR><BR>　　 18:26:32 %usr %sys %wio %idle <BR><BR>　　 18:26:34 80 9 12 0 <BR><BR>　　 18:26:36 78 11 11 0 <BR><BR>　　 18:26:38 78 9 13 1 <BR><BR>　　 18:26:40 81 10 9 1 <BR><BR>　　 18:26:42 75 10 14 0 <BR><BR>　　 18:26:44 76 8 15 0 <BR><BR>　　 18:26:46 80 9 10 1 <BR><BR>　　 18:26:48 78 11 11 0 <BR><BR>　　 18:26:50 79 10 10 0 <BR><BR>　　 18:26:52 81 10 9 0 <BR><BR>　　 Average 79 10 11 0 <BR><BR>　　 其中的%usr指的是用户进程使用的cpu资源的百分比，%sys指的是系统资源使用cpu资源的百分比，%wio指的是等待io完成的百分比，这是值得我们观注的一项，%idle即空闲的百分比。如果wio列的值很大，如在35%以上，说明你的系统的IO存在瓶颈，你的CPU花费了很大的时间去等待IO的完成。Idle很小说明系统CPU很忙。像我的这个示例，可以看到wio平均值为11说明io没什么特别的问题，而我的idle值为零，说明我的cpu已经满负荷运行了。 <BR><BR>　　 当你的系统存在IO的问题，可以从以下几个方面解决 <BR><BR>　　 ＊联系相应的操作系统的技术支持对这方面进行优化，比如hp-ux在划定卷组时的条带化等方面。 <BR><BR>　　 ＊查找Oracle中不合理的sql语句，对其进行优化 <BR><BR>　　 ＊对Oracle中访问量频繁的表除合理建索引外，再就是把这些表分表空间存放以免访问上产生热点，再有就是对表合理分区。 
<P class=line-height>　　 2、关注一下内存。 <BR><BR>　　 常用的工具便是vmstat，对于hp-unix来说可以用glance,Aix来说可以用topas,当你发现vmstat中pi列非零，memory中的free列的值很小，glance,topas中内存的利用率多于80%时，这时说明你的内存方面应该调节一下了，方法大体有以下几项。 <BR><BR>　　 ＊划给Oracle使用的内存不要超过系统内存的1/2,一般保在系统内存的40%为益。 <BR><BR>　　 为系统增加内存 <BR><BR>　　 ＊如果你的连接特别多，可以使用MTS的方式 <BR><BR>　　 ＊打全补丁，防止内存漏洞。 <BR><BR>　　 3、如何找到点用系用资源特别大的Oracle的session及其执行的语句。 <BR><BR>　　 Hp-unix可以用glance,top <BR><BR>　　 IBM AIX可以用topas <BR><BR>　　 此外可以使用ps的命令。 <BR><BR>　　 通过这些程序我们可以找到点用系统资源特别大的这些进程的进程号，我们就可以通过以下的sql语句发现这个pid正在执行哪个sql，这个sql最好在pl/sql developer,toad等软件中执行, 把&lt;&gt;中的spid换成你的spid就可以了。 <BR><BR>　　 SELECT a.username, <BR><BR>　　 a.machine, <BR><BR>　　 a.program, <BR><BR>　　 a.sid, <BR><BR>　　 a.serial#, <BR><BR>　　 a.status, <BR><BR>　　 c.piece, <BR><BR>　　 c.sql_text <BR><BR>　　 FROM v$session a, <BR><BR>　　 v$process b, <BR><BR>　　 v$sqltext c <BR><BR>　　 WHERE b.spid= <BR><BR>　　 AND b.addr=a.paddr <BR><BR>　　 AND a.sql_address=c.address(+) <BR><BR>　　 ORDER BY c.piece <BR><BR>　　 我们就可以把得到的这个sql分析一下，看一下它的执行计划是否走索引，对其优化避免全表扫描，以减少IO等待，从而加快语句的执行速度。 <BR><BR>　　 提示：我在做优化sql时，经常碰到使用in的语句，这时我们一定要用exists把它给换掉，因为Oracle在处理In时是按Or的方式做的，即使使用了索引也会很慢。 <BR><BR>　　 比如： <BR><BR>　　 SELECT col1,col2,col3 FROM table1 a <BR><BR>　　 WHERE a.col1 not in (SELECT col1 FROM table2) <BR><BR>　　 可以换成： <BR><BR>　　 SELECT col1,col2,col3 FROM table1 a <BR><BR>　　 WHERE not exists <BR><BR>　　 (SELECT 'x' FROM table2 b <BR><BR>　　 WHERE a.col1=b.col1) <BR><BR>　　 4、另一个有用的脚本：查找前十条性能差的sql. <BR><BR>　　 SELECT * FROM <BR><BR>　　 ( <BR>　　 SELECT PARSING_USER_ID <BR><BR>　　　　 EXECUTIONS, <BR><BR>　　　　 SORTS, <BR><BR>　　　　 COMMAND_TYPE, <BR><BR>　　　　 DISK_READS, <BR><BR>　　　　 sql_text <BR><BR>　　 FROM v$sqlarea <BR><BR>　　 ORDER BY disk_reads DESC <BR><BR>　　 ) <BR><BR>　　 WHERE ROWNUM&lt;10 ; <BR>　　 二、迅速发现Oracle Server的性能问题的成因，我们可以求助于v$session_wait这个视图，看系统的这些session在等什么，使用了多少的IO。以下是我提供的参考脚本： <BR><BR>　　 脚本说明：查看占io较大的正在运行的session <BR><BR>　　 SELECT se.sid, <BR><BR>　　　　 se.serial#, <BR><BR>　　　　 pr.SPID, <BR><BR>　　　　 se.username, <BR><BR>　　　　 se.status, <BR><BR>　　　　 se.terminal, <BR><BR>　　　　 se.program, <BR><BR>　　　　 se.MODULE, <BR><BR>　　　　 se.sql_address, <BR><BR>　　　　 st.event, <BR><BR>　　　　 st.p1text, <BR><BR>　　　　 si.physical_reads, <BR><BR>　　　　 si.block_changes <BR><BR>　　 FROM v$session se, <BR><BR>　　　　 v$session_wait st, <BR><BR>　　　　 v$sess_io si, <BR><BR>　　　　 v$process pr <BR><BR>　　 WHERE st.sid=se.sid <BR><BR>　　　　 AND st.sid=si.sid <BR><BR>　　　　 AND se.PADDR=pr.ADDR <BR><BR>　　　　 AND se.sid&gt;6 <BR><BR>　　　　 AND st.wait_time=0 <BR><BR>　　　　 AND st.event NOT LIKE '%SQL%' <BR><BR>　　 ORDER BY physical_reads DESC <BR>　　 对检索出的结果的几点说明： <BR><BR>　　 1、我是按每个正在等待的session已经发生的物理读排的序，因为它与实际的IO相关。 <BR><BR>　　 2、你可以看一下这些等待的进程都在忙什么，语句是否合理？ <BR><BR>　　 Select sql_address from v$session where sid= ; <BR><BR>　　 Select * from v$sqltext where address= ; <BR><BR>　　 执行以上两个语句便可以得到这个session的语句。 <BR><BR>　　 你也以用alter system kill session 'sid,serial#';把这个session杀掉。 <BR><BR><BR>　　 3、应观注一下event这列，这是我们调优的关键一列，下面对常出现的event做以简要的说明： <BR>a、buffer busy waits，free buffer waits这两个参数所标识是dbwr是否够用的问题，与IO很大相关的，当v$session_wait中的free buffer wait的条目很小或没有的时侯，说明你的系统的dbwr进程决对够用，不用调整；free buffer wait的条目很多，你的系统感觉起来一定很慢，这时说明你的dbwr已经不够用了，它产生的wio已经成为你的数据库性能的瓶颈，这时的解决办法如下： <BR><BR>　　 a.1增加写进程，同时要调整db_block_lru_latches参数 <BR><BR>　　 示例：修改或添加如下两个参数 <BR>　　 db_writer_processes=4 <BR><BR>　　 db_block_lru_latches=8 <BR><BR>　　 a、2开异步IO，IBM这方面简单得多，hp则麻烦一些，可以与Hp工程师联系。 <BR><BR>　　 b、db file sequential read，指的是顺序读，即全表扫描，这也是我们应该尽量减少的部分，解决方法就是使用索引、sql调优，同时可以增大db_file_multiblock_read_count这个参数。 <BR><BR>　　 c、db file scattered read,这个参数指的是通过索引来读取，同样可以通过增加db_file_multiblock_read_count这个参数来提高性能。 <BR><BR>　　 d、latch free,与栓相关的了，需要专门调节。 <BR><BR>　　 e、其他参数可以不特别观注。 <BR><BR>　　 结篇：匆忙之中写下了这篇文章，希望能抛砖引玉，能为你的Oracle调优实践带来帮助。 <BR></P><img src ="http://www.blogjava.net/gf7/aggbug/17153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2005-10-28 11:53 <a href="http://www.blogjava.net/gf7/archive/2005/10/28/17153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE性能调优原则</title><link>http://www.blogjava.net/gf7/archive/2005/10/28/17151.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Fri, 28 Oct 2005 03:50:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2005/10/28/17151.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/17151.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2005/10/28/17151.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/17151.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/17151.html</trackback:ping><description><![CDATA[<P>任何事情都有它的源头，要解决问题，也得从源头开始，影响ORACLE性能的源头非常多，主要包括如下方面：<BR>&nbsp;数据库的硬件配置：CPU、内存、网络条件</P>
<P>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU：在任何机器中CPU的数据处理能力往往是衡量计算机性能的一个标志，并且ORACLE是一个提供并行能力的数据库系统，在CPU方面的要求就更高了，如果运行队列数目超过了CPU处理的数目，性能就会下降，我们要解决的问题就是要适当增加CPU的数量了，当然我们还可以将需要许多资源的进程KILL掉；</P>
<P>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 内存：衡量机器性能的另外一个指标就是内存的多少了，在ORACLE中内存和我们在建数据库中的交换区进行数据的交换，读数据时，磁盘I/O必须等待物理I/O操作完成，在出现ORACLE的内存瓶颈时，我们第一个要考虑的是增加内存，由于I/O的响应时间是影响ORACLE性能的主要参数，我将在这方面进行详细的讲解</P>
<P>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 网络条件：NET*SQL负责数据在网络上的来往，大量的SQL会令网络速度变慢。比如10M的网卡和100的网卡就对NET*SQL有非常明显的影响，还有交换机、集线器等等网络设备的性能对网络的影响很明显，建议在任何网络中不要试图用3个集线器来将网段互联。</P>
<P>Ø&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OS参数的设置</P>
<P>下表给出了OS的参数设置及说明，DBA可以根据实际需要对这些参数进行设置</P>
<P>
<TABLE cellSpacing=0 cellPadding=0 width=492 border=1>
<TBODY>
<TR>
<TD vAlign=bottom noWrap width=108>
<P align=center>内核参数名</P></TD>
<TD vAlign=bottom noWrap width=384>
<P align=center>说明</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>bufpages</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>对buffer空间不按静态分配，采用动态分配，使bufpages值随nbuf一起对buffer空间进行动态分配。</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>create_fastlinks</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>对HFS文件系统允许快速符号链接，</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>dbc_max_pct</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>加大最大动态buffer空间所占物理内存的百分比，以满足应用系统的读写命中率的需要。</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>dbc_min_pct</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>设置最小动态buffer空间所占物理内存的百分比</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>desfree</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>提高开始交换操作的最低空闲内存下限，保障系统的稳定性，防止出现不可预见的系统崩溃（Crash）。</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>fs_async</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>允许进行磁盘异步操作，提高CPU和磁盘的利用率</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>lotsfree</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>提高系统解除换页操作的空闲内存的上限值，保证应用程序有足够的可用内存空间。</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>maxdsiz</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>针对系统数据量大的特点，加大最大数据段的大小，保证应用的需要。（32位）</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>maxdsiz_64bit</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>maximum process data segment size for 64_bit</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>Maxssiz</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>加大最大堆栈段的大小。（32_bit）</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>maxssiz_64bit</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>加大最大堆栈段的大小（64_bit）</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>Maxtsiz</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>提高最大代码段大小，满足应用要求</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>maxtsiz_64bit</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>原值过大，应调小</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>Minfree</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>提高停止交换操作的自由内存的上限</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>Shmem</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>允许进行内存共享，以提高内存的利用率。</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>Shmmax</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>设置最大共享内存段的大小，完全满足目前的需要。</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>Timeslice</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>由于系统的瓶颈主要反映在磁盘I/O上，因此　降低时间片的大小，一方面可避免因磁盘I/O不畅造成CPU的等待，从而提高了CPU的综合利用率。另一方面减少了进程的阻塞量。</P></TD></TR>
<TR>
<TD vAlign=bottom noWrap width=108>
<P>unlockable_mem</P></TD>
<TD vAlign=bottom noWrap width=384>
<P>提高了不可锁内存的大小，使可用于换页和交换的内存空间扩大,用以满足系统对内存管理的要求。</P></TD></TR></TBODY></TABLE></P><BR>用户SQL质量
<P>以上讲的都是硬件方面的东西，在条件有限的条件下，我们可以调整应用程序的SQL质量：</P>
<P>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不要进行全表扫描（Full Table Scan）：全表扫描导致大量的I/O</P>
<P>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 尽量建好和使用好索引：建索引也是有讲究的，在建索引时，也不是索引越多越好，当一个表的索引达到4个以上时，ORACLE的性能可能还是改善不了，因为OLTP系统每表超过5个索引即会降低性能，而且在一个sql 中， Oracle 从不能使用超过 5个索引；当我们用到GROUP BY和ORDER BY时,ORACLE就会自动对数据进行排序,而ORACLE在INIT.ORA中决定了sort_area_size区的大小,当排序不能在我们给定的排序区完成时,ORACLE就会在磁盘中进行排序,也就是我们讲的临时表空间中排序, 过多的磁盘排序将会令 free buffer waits 的值变高,而这个区间并不只是用于排序的,对于开发人员我提出如下忠告:</P>
<P>1)、select,update,delete 语句中的子查询应当有规律地查找少于20%的表行.如果一个语句查找的行数超过总行数的20%,它将不能通过使用索引获得性能上的提高. 　　</P>
<P>2）、索引可能产生碎片,因为记录从表中删除时,相应也从表的索引中删除.表释放的空间可以再用,而索引释放的空间却不能再用.频繁进行删除操作的被索引的表,应当阶段性地重建索引,以避免在索引中造成空间碎片,影响性能.在许可的条件下,也可以阶段性地truncate表,truncate命令删除表中所有记录,也删除索引碎片. </P>
<P>3）、在使用索引时一定要按索引对应字段的顺序进行引用。</P>
<P>4）、用（+）比用NOT IN更有效率。</P>
<P>Ø&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 降低ORACLE的竞争：</P>
<P>先讲几个ORACLE的几个参数，这几个参数关系到ORACLE的竞争：</P>
<P>1）、freelists 和 freelist 组：他们负责ORACLE的处理表和索引的空间管理；</P>
<P>2）、pctfree 及 pctused：该参数决定了freelists 和 freelist 组的行为，pctfree 和pctused 参数的唯一目的就是为了控制块如何在 freelists 中进出</P>
<P>设置好pctfree 及 pctused对块在freelists的移走和读取很重要。</P>
<P>Ø&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其他参数的设置</P>
<P>1）、包括SGA区（系统全局区）：系统全局区（SGA）是一个分配给Oracle 的包含一个 Oracle 实例的数据库的控制信息内存段。</P>
<P>　主要包括数据库高速缓存(the database buffer cache)，</P>
<P>　重演日志缓存（the redo log buffer），</P>
<P>　共享池（the shared pool），</P>
<P>　数据字典缓存（the data dictionary cache）以及其它各方面的信息</P>
<P>2）、db_block_buffers（数据高速缓冲区）访问过的数据都放在这一片内存区域，该参数越大，Oracle在内存中找到相同数据的可能性就越大，也即加快了查询速度。</P>
<P>3）、share_pool_size （SQL共享缓冲池）：该参数是库高速缓存和数据字典的高速缓存。</P>
<P>4）、Log_buffer （重演日志缓冲区）</P>
<P>5）、sort_area_size（排序区）</P>
<P>6）、processes （同时连接的进程数）</P>
<P>7）、db_block_size （数据库块大小）：Oracle默认块为2KB，太小了，因为如果我们有一个8KB的数据，则2KB块的数据库要读4次盘，才能读完，而8KB块的数据库只要1次就读完了，大大减少了I/O操作。数据库安装完成后，就不能再改变db_block_size的值了，只能重新建立数据库并且建库时，要选择手工安装数据库。</P>
<P>8）、open_links （同时打开的链接数）</P>
<P>9）、dml_locks </P>
<P>10）、open_cursors （打开光标数）</P>
<P>11）、dbwr_io_slaves （后台写进程数）</P><img src ="http://www.blogjava.net/gf7/aggbug/17151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2005-10-28 11:50 <a href="http://www.blogjava.net/gf7/archive/2005/10/28/17151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 9 linux 自启动方法</title><link>http://www.blogjava.net/gf7/archive/2005/09/08/12446.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Thu, 08 Sep 2005 09:03:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2005/09/08/12446.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/12446.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2005/09/08/12446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/12446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/12446.html</trackback:ping><description><![CDATA[<P>1\创建文件ora9 ,注意里面的路径 .<BR><BR>#!/bin/bash<BR>#<BR># (c) <A href="mailto:denis.klaric@in2.hr">denis.klaric@in2.hr</A><BR>#<BR># name: /etc/rc.d/init.d/ora9<BR># des cription: starts and stops oracle 9i database, TNS listener<BR># http server, and fixes kernel parameters for oracle</P>
<P>. /etc/rc.d/init.d/functions</P>
<P>prog=oracle</P>
<P>start() {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo -n $"Starting $prog: "<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #daemon "startOracle"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; su - oracle -c "lsnrctl start"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; su - oracle -c "/usr/oracle/product/9.2.0.4/bin/dbstart"<BR>}</P>
<P>stop() {<BR>&nbsp;echo -n $"Stopping $prog: "<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #stopOracle<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; su - oracle -c "lsnrctl stop"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; su - oracle -c "/usr/oracle/product/9.2.0.4/bin/dbshut"<BR>}<BR>case $1 in<BR>start)<BR>&nbsp;start<BR>&nbsp;;;<BR>stop)<BR>&nbsp;stop<BR>&nbsp;;;<BR>*)<BR>echo "Usage: ora9 [start|stop]"<BR>;;</P>
<P>esac<BR><BR><BR>2\拷贝到 /etc/init.d/ 中<BR><BR>3\ 运行如下命令<BR>ln -s /etc/init.d/ora9 /etc/rc.d/rc2.d/S99ora9<BR>ln -s /etc/init.d/ora9 /etc/rc.d/rc3.d/S99ora9<BR>ln -s /etc/init.d/ora9 /etc/rc.d/rc4.d/S99ora9<BR>ln -s /etc/init.d/ora9 /etc/rc.d/rc5.d/S99ora9<BR>ln -s /etc/init.d/ora9 /etc/rc.d/rc0.d/S99ora9<BR>ln -s /etc/init.d/ora9 /etc/rc.d/rc0.d/K99ora9<BR>ln -s /etc/init.d/ora9 /etc/rc.d/rc6.d/K99ora9<BR><BR>4\修改/etc/oratab 把sid置为Y<BR><BR>5、<BR>sqlplus /nolog<BR>conn sys/pwd as sysdba<BR>create pfile from spfile<BR>6\reboot</P><img src ="http://www.blogjava.net/gf7/aggbug/12446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2005-09-08 17:03 <a href="http://www.blogjava.net/gf7/archive/2005/09/08/12446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 9.2.0.4 在 Redhat AS3 上安装全过程</title><link>http://www.blogjava.net/gf7/archive/2005/09/08/12444.html</link><dc:creator>风</dc:creator><author>风</author><pubDate>Thu, 08 Sep 2005 08:58:00 GMT</pubDate><guid>http://www.blogjava.net/gf7/archive/2005/09/08/12444.html</guid><wfw:comment>http://www.blogjava.net/gf7/comments/12444.html</wfw:comment><comments>http://www.blogjava.net/gf7/archive/2005/09/08/12444.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gf7/comments/commentRss/12444.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gf7/services/trackbacks/12444.html</trackback:ping><description><![CDATA[<P>Oracle 9.2.0.4 在 Redhat AS3 上安装全过程</P>
<P>折腾我3天  总算是搞定了 同一版本的Oracle 装在不同版本Redhat上 装法都不同 真是麻烦 难怪微软称霸世界 他的产品毕竟好装又好用上网看了别人的装配经历若干 但即使是同一版本的Redhat 每人的配置又都不一样 装法也有差别 Linux的可配置性太高这点不象windows 每个人的windows都差不多 微软没留太多的配置余地给用户 好了说正经的</P>
<P>基本参数   <BR>操作系统: Redhat Enterprise Linux as3  默认配置外加所有开发软件包 内存至少512兆 swap分区设置为内存的二倍。不要采用DHCP设置主机名和IP地址，而是“手工设置”。否则会在安装oracle的时候出现如下错误：Thrown when the IP address of a host cannot be determined  </P>
<P>Oracle: 9.2.0.4  （注意不是9.2.0.1 这个版本安装后要打补丁升级到 9.2.0.4）</P>
<P>所需的软件<BR>Oracle: 9.2.0.4 安装文件<BR>ship_9204_linux_disk1.cpio.gz<BR>ship_9204_linux_disk2.cpio.gz<BR>ship_9204_linux_disk3.cpio.gz</P>
<P>从网上下载升级补丁包,  <BR>所有的补丁说明如下：   <BR>p3006854_9204_LINUX.zip 在运行 runInstaller 之前打.<BR>p2617419_210_GENERIC.zip 打其他补丁所需要的工具.  <BR>p3119415_9204_LINUX.zip 在升级到9.2.0.4.0之后打.  <BR>p3238244_9204_LINUX.zip 用来修agent服务不能启动的错误</P>
<P>安装需要在2个帐户下进行 分别是 root 和 oracle帐户 管理员帐户负责基础设施创建 oracle帐户则负责Oracle软件的安装 帐户切换可用 su<BR>每步安装操作一定要看清楚在那个帐户进行  注意我下面的帐户提示</P>
<P>现在开始</P>
<P>1）先以root登录  在root帐户下进行下面操作</P>
<P>首先准备安装需要的软件包和补丁包 先看安装所需要的软件包是否都装了<BR>a  检察开发软件包 用下面的命令<BR>rpm -q gcc cpp compat-libstdc++ glibc-devel glibc-headers glibc-kernheaders binutils</P>
<P>b  检察安装依赖软件包 查看系统中是否安有以下几个软件包<BR>compat-libstdc++-7.3-2.96.122  <BR>compat-gcc-c++-7.3-2.96.122  <BR>compat-libstdc++-devel-7.3-2.96.122  <BR>compat-db-4.0.14-5  <BR>compat-gcc-7.3-2.96.122  <BR>setarch-1.3-1.i386.rpm<BR>tcl-8.3.5-92.i386.rpm<BR>nss_db-compat-2.2-20.i386.rpm  </P>
<P>如果还没装 它们都在第2和第3张盘上 把它们都装上 保险的做法是把他们都拷到你当前目录下用下面的命令<BR>装过的它会自动跳过<BR>rpm -ivh \<BR>compat-db-4.0.14-5.i386.rpm \<BR>compat-gcc-7.3-2.96.122.i386.rpm \<BR>compat-gcc-c++-7.3-2.96.122.i386.rpm \<BR>compat-libstdc++-7.3-2.96.122.i386.rpm \<BR>compat-libstdc++-devel-7.3-2.96.122.i386.rpm \<BR>openmotif21-2.1.30-8.i386.rpm \<BR>setarch-1.3-1.i386.rpm \<BR>tcl-8.3.5-92.i386.rpm\<BR>nss_db-compat-2.2-20.i386.rpm  </P>
<P>注意：在装Redhat时一定要选上 gnome开发软件包 否则将来配置 Oracle http是会出错 没装的话现在装上还来的及</P>
<P>2）还是在root帐户下 准备安装过程中需要的用户和用户组  对就是那个oracle帐户<BR># groupadd oinstall  <BR># groupadd dba  <BR># useradd -g oinstall -G dba oracle  <BR># passwd oracle  </P>
<P>3）还是在root帐户下 准备文件目录：  <BR># mkdir -p /usr/oracle/product/9.2  <BR># mkdir /var/opt/oracle  <BR># chown oracle.dba /var/opt/oracle  <BR># chown -R oracle.dba /usr/oracle  <BR># chmod 777 /var/opt/oracle</P>
<P>3）还是在root帐户下 设置内核参数，调节信号灯及共享内存：  <BR># echo 250 32000 100 128 > /proc/sys/kernel/sem  <BR># echo 1073741824 > /proc/sys/kernel/shmmax  <BR># echo 4096 > /proc/sys/kernel/shmmni  <BR># echo 2097152 > /proc/sys/kernel/shmall  <BR># echo 65536 > /proc/sys/fs/file-max  <BR># echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range  <BR>  <BR>当然为了一开机系统就能自动帮你设好这些参数，也可改动 /etc/sysctl.conf 这个文件，加入以下的语句：  <BR>kernel.shmmax = 1073741824  <BR>kernel.shmmni = 4096        <BR>kernel.shmall = 2097152  <BR>kernel.sem = 250 32000 100 128  <BR>fs.file-max = 65536  <BR>net.ipv4.ip_local_port_range = 1024 65000  <BR>保存</P>
<P>设置完成后用命令 more /etc/sysctl.conf |grep kernel.s 检查.<BR>Shmmax： 最大共享内存1GB 物理内存如果小的话可以设置成 536870912<BR>Shmmni： 最小共享内存 4096KB）</P>
<P>4）还是在root帐户下 设置oracle对文件的要求：  <BR>编辑文件：/etc/security/limits.conf 加入以下语句：  <BR>oracle 　　　soft 　　　nofile 　　　65536  <BR>oracle 　　　hard 　　　nofile　　　65536  <BR>oracle 　　　soft 　　　nproc 　　　16384  <BR>oracle 　　　hard 　　　nproc 　　　16384  <BR>保存</P>
<P> </P>
<P>现在退出root帐户 以oracle帐户登陆<BR>4）在oracle帐户下 设该置帐户环境<BR>打开.bash.profile文件，将如下内容加入：  <BR>  <BR>#oracle 9i  <BR>export ORACLE_BASE=/usr/oracle  <BR>export ORACLE_HOME=/usr/oracle/product/9.2  <BR>export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH  <BR>export ORACLE_OWNER=oracle  <BR>export ORACLE_SID=db01  <BR>export ORACLE_TERM=vt100  <BR>export LD_ASSUME_KERNEL=2.4.1  <BR>export THREADS_FLAG=native  <BR>export LD_LIBRARY_PATH=/usr/oracle/product/9.2/lib:$LD_LIBRARY_PATH  <BR>export PATH=/opt/ora9/product/9.2/bin:$PATH  <BR>#  <BR># change this NLS settings to suit your country:  <BR># example:  <BR># german_germany.we8iso8859p15, american_america.we8iso8859p2 etc.  <BR>#  <BR>export LANG=en_US  </P>
<P>保存后退出。  <BR>然后。退出登录，再次进入，这时候oracle的环境就已经生效了。</P>
<P>4）转到root帐户下 （可用 su  root）<BR>随便建立个安装目录把oracle安装文件和补丁都拷进去<BR>解压oracle安装文件<BR>zcat ship_9204_linux_disk1.cpio.gz | cpio -idmv<BR>zcat ship_9204_linux_disk2.cpio.gz | cpio -idmv<BR>zcat ship_9204_linux_disk3.cpio.gz | cpio -idmv<BR>解压完后看见Disk1,Disk2,Disk3这3个目录</P>
<P>打安装前补丁 p3006854_9204_LINUX.zip 用下面的命令<BR># unzip p3006854_9204_LINUX.zip  <BR>Archive: p3006854_9204_LINUX.zip  <BR>creating: 3006854/  <BR>inflating: 3006854/rhel3_pre_install.sh  <BR>inflating: 3006854/README.txt  <BR>...  <BR># cd 3006854  <BR># sh rhel3_pre_install.sh  <BR>退出root帐户</P>
<P>5）回到oracle帐户下<BR>进到Disk1目录运行<BR>./runInstaller  <BR>启动安装界面</P>
<P>- Welcome Screen:       Click Next<BR>- Inventory Location:   Click Next<BR>- Unix Group Name:      Use "oinstall" and click Next<BR>                         会提示运行 /tmp/orainstRoot.sh, 运行它然后继续<BR>- File Locations:       Use default values<BR>- Available Products:   Select "Oracle9i Database 9.2.0.4"<BR>- Installation Types:   选择安装类型是“通用”除非你有特别要求 如数据仓库 或不想要产生默认数据库<BR>- 输入全局数据库名：     我一般设为和下面SID一样<BR>- 数据文件的存放位置:    我采用的是默认位置，点“Next”；<BR>出现安装组件的选择结果，这时点“Install”，开始安装，复制文件，进度条在一点一点的增加，当安装并link完后，会提示运行root.sh 运行它然后继续<BR>出现配置工具界面，默认数据库正确配置完毕后会自动产生2个数据库管理员帐户 SYS 和 SYSTEM 分别设置密码然后继续<BR>agent服务不能配置成功，忽略不用管，在下面修复。DBCA，NETCA，HTTP都正确配置完毕哦。下面开始修复错误。</P>
<P>6）转到root帐户下 （可用 su  root）<BR>先加入下面2个环境变量<BR>#export ORACLE_BASE=/usr/oracle  <BR>#export ORACLE_HOME=/usr/oracle/product/9.2</P>
<P>先解压补丁工具 p2617419_210_GENERIC.zip 这是打其他补丁所需要的工具opatch.<BR># unzip p2617419_210_GENERIC.zip  <BR>Archive: p2617419_210_GENERIC.zip  <BR>creating: OPatch/  <BR>creating: OPatch/docs/  <BR>inflating: Opatch/docs/FAQ  <BR>......  <BR>inflating: README.txt   <BR># pwd  <BR>解压所在目录  <BR># export PATH=$PATH:解压所在目录/OPatch:/sbin</P>
<P>安装p3119415_9204_LINUX.zip 补丁<BR># unzip p3119415_9204_LINUX.zip  <BR>Archive: p3119415_9204_LINUX.zip  <BR>creating: 3119415/  <BR>......  <BR>inflating: 3119415/README.txt  <BR># cd 3119415  <BR># opatch apply  </P>
<P>安装p3238244_9204_LINUX.zip补丁<BR>unzip p3238244_9204_LINUX.zip<BR># cd 3238244<BR>...<BR># opatch apply</P>
<P>补丁修复完成，需要relinked一个.mk文件。<BR>回到oracle帐户下<BR>$ cd $ORACLE_HOME/network/lib<BR>$ make -f ins_oemagent.mk install<BR>现在在运行agentctl start，看是不是可以成功运行agent服务了啊，可以用stop、status来停止此服务或者检查服务的状态</P>
<P>好了全部的安装就算成功了.  <BR>祝贺你,恶梦结束了  </P>
<P>要配置数据库用<BR>$dbca</P>
<P>要启动企业管理器<BR>$oemapp console<BR>看看能不能连上刚才创建的数据库</P>
<P>注意：下次从新开机后企业管理器中打开数据库报ORA-12541:TNS:no listener错误<BR>这是因为监听服务（listener）第一次是安装程序为你启动的 以后你得自己启动 用下面的命令<BR>$lsnrctl start</P><img src ="http://www.blogjava.net/gf7/aggbug/12444.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gf7/" target="_blank">风</a> 2005-09-08 16:58 <a href="http://www.blogjava.net/gf7/archive/2005/09/08/12444.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>