<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>跑马圈地 &#187; Oracle</title>
	<atom:link href="http://www.ukuang.com/tag/oracle/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ukuang.com</link>
	<description>一切恩爱会，无常难久得。声势多畏惧，命危于晨露。 因爱故生忧，因爱故生怖。若离于爱者，无忧亦无怖。</description>
	<lastBuildDate>Mon, 16 Jan 2012 17:51:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>完全卸载Oracle 9i记事</title>
		<link>http://www.ukuang.com/2010/06/27/%e5%ae%8c%e5%85%a8%e5%8d%b8%e8%bd%bdoracle-9i%e8%ae%b0%e4%ba%8b/</link>
		<comments>http://www.ukuang.com/2010/06/27/%e5%ae%8c%e5%85%a8%e5%8d%b8%e8%bd%bdoracle-9i%e8%ae%b0%e4%ba%8b/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 04:56:18 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=454</guid>
		<description><![CDATA[<p>1.停止Oracle服务 进入服务管理器，“开始-》运行-》services.msc”，停止那些Oracle服务， 他们都具有一个oracle或ora   的前缀。一旦停止了所有的Oracle服务， 我们建议将它们设置为手工启动模式（manual   start   mode）。</p> <p>2.删除注册表中相关项   1）进入注册表编辑器；    2）、备份Windows   注册表。   启动Registry   Editor   并从菜单中选择   File   &#124;   Export。     3）、用命令   regedt32启动Registry   Editor。找到HKEY_CLASSES_ROOT节点并删除所有以字符串   Oracle、ORA、ORCL开始的键。     4）、找到HKEY_LOCAL_MACHINE/SOFTWARE键并删除   Oracle   和   Apache   Group   键。     5）、删除HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\odbcinst.ini   下    面的Oracle   ODBC   Driver键。  </p> <p>   6）、删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\   Services   和HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servicess\EventLog\Application下   所有以ORACLE起始的键。     7)、删除HKEY_CURRENT_USER\SOFTWARE\ORACLE下所有以ORACLE或ORCL起始的键。     8）、删除HKEY_CURRENT_USER\SOFTWARE\ODBC\odbcinst.ini下所有以Oracle起始的键。     [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>1.停止Oracle服务<br />
进入服务管理器，“开始-》运行-》services.msc”，停止那些Oracle服务，<br />
他们都具有一个oracle或ora   的前缀。一旦停止了所有的Oracle服务，<br />
我们建议将它们设置为手工启动模式（manual   start   mode）。</p>
<p>2.删除注册表中相关项<br />
  1）进入注册表编辑器； <br />
  2）、备份Windows   注册表。<br />
  启动Registry   Editor   并从菜单中选择   File   |   Export。  <br />
  3）、用命令<br />
  regedt32启动Registry   Editor。找到HKEY_CLASSES_ROOT节点并删除所有以字符串<br />
  Oracle、ORA、ORCL开始的键。  <br />
  4）、找到HKEY_LOCAL_MACHINE/SOFTWARE键并删除<br />
  Oracle   和   Apache   Group   键。  <br />
  5）、删除HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\odbcinst.ini   下 <br />
  面的Oracle   ODBC   Driver键。  </p>
<p><span id="more-454"></span><br />
  6）、删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\   Services<br />
  和HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servicess\EventLog\Application下<br />
  所有以ORACLE起始的键。  <br />
  7)、删除HKEY_CURRENT_USER\SOFTWARE\ORACLE下所有以ORACLE或ORCL起始的键。  <br />
  8）、删除HKEY_CURRENT_USER\SOFTWARE\ODBC\odbcinst.ini下所有以Oracle起始的键。  <br />
  9）、寻找注册表中所有包含Oracle和ORCL字符串的键并删除它们。  <br />
  10）、关闭Registry   Editor。  </p>
<p>3.删除环境变量相关项<br />
编辑环境变量（控制面板中的System   applet）并修改PATH变量，从PATH中删除所有Oracle   条目。  <br />
 </p>
<p>4.删除oracle的安装文件<br />
  （1）删除Program   Files   中的Oracle   文件夹。<br />
   如果没有成功的删除该文件夹，则可能是Windows锁定了一些文件(DLL)。<br />
   遇到这种情况，重新启动系统并删除该文件夹。<br />
 （2）删除Oracle   Base   文件夹（默认情况为Oracle   ）。 <br />
  应注意，Oracle   9i   Enterprise   Edition  <br />
  也安装了第三方软件诸如：Apache   HTTP   Server   (Oracle   HTTP   Server  <br />
  是一个   Apache   Web Server   的修改版)。 <br />
  注意   当试图删除   c:\oracle   文件夹时，可能会得到一个“Access   is   denied   ”<br />
  的错误消息。如果遇到了这个错误提示，则应将   c:\oracle\ora90\bin\oci.dll <br />
  重新命名为   c:\oracle\ora90\bin\ocibak   ,然后重新启动机器，<br />
  并删除c:\oracle   文件夹。</p>
<p>5.删除快捷方式</p>
<div class="shr-publisher-454"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2010/06/27/%e5%ae%8c%e5%85%a8%e5%8d%b8%e8%bd%bdoracle-9i%e8%ae%b0%e4%ba%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用绑定变量和不使用绑定变量操作数据库</title>
		<link>http://www.ukuang.com/2009/11/05/%e4%bd%bf%e7%94%a8%e7%bb%91%e5%ae%9a%e5%8f%98%e9%87%8f%e5%92%8c%e4%b8%8d%e4%bd%bf%e7%94%a8%e7%bb%91%e5%ae%9a%e5%8f%98%e9%87%8f%e6%93%8d%e4%bd%9c%e6%95%b0%e6%8d%ae%e5%ba%93/</link>
		<comments>http://www.ukuang.com/2009/11/05/%e4%bd%bf%e7%94%a8%e7%bb%91%e5%ae%9a%e5%8f%98%e9%87%8f%e5%92%8c%e4%b8%8d%e4%bd%bf%e7%94%a8%e7%bb%91%e5%ae%9a%e5%8f%98%e9%87%8f%e6%93%8d%e4%bd%9c%e6%95%b0%e6%8d%ae%e5%ba%93/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 03:52:06 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=107</guid>
		<description><![CDATA[<p>以下例子是在delphi中编程实现，数据库为oracle，具体的代码省略了，只说明情况。</p> <p>1、不使用绑定变量</p> <p>例子：删除同一张表的两条记录。</p> <p>sql语句如下：</p> <p>（1）delete from t_englishscore_score where STUDENTNUM=&#8217;200431500123&#8242;</p> <p>and LESSONNAME=&#8217;test&#8217; and YEAR=&#8217;2005&#8242; and TERM=&#8217;上&#8217;；</p> <p>（2）delete from t_englishscore_score where STUDENTNUM=&#8217;200431500123&#8242;</p> <p>and LESSONNAME=&#8217;毕业设计&#8217; and YEAR=&#8217;2007&#8242; and TERM=&#8217;下&#8217;</p> <p>此时查询v$sqltext视图（它能够反映oracle 中share pool中的sql解析共享情况）：</p> <p align="left">ADDRESS</p> <p align="left">HASH_VALUE</p> <p align="left">SQL_ID</p> <p align="left">COMMAND_TYPE</p> <p align="left">PIECE</p> <p align="left">SQL_TEXT</p> <p align="left">0000000173D47990</p> <p align="right">2193311325</p> <p align="left">1mhba361bqjkx</p> <p align="right">7</p> <p align="right">0</p> <p align="left">delete from t_englishscore_score [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>以下例子是在delphi中编程实现，数据库为oracle，具体的代码省略了，只说明情况。</p>
<p>1、不使用绑定变量</p>
<p>例子：删除同一张表的两条记录。</p>
<p>sql语句如下：</p>
<p>（1）delete from t_englishscore_score where STUDENTNUM=&#8217;200431500123&#8242;</p>
<p>and LESSONNAME=&#8217;test&#8217; and YEAR=&#8217;2005&#8242; and TERM=&#8217;上&#8217;；</p>
<p>（2）delete from t_englishscore_score where STUDENTNUM=&#8217;200431500123&#8242;</p>
<p>and LESSONNAME=&#8217;毕业设计&#8217; and YEAR=&#8217;2007&#8242; and TERM=&#8217;下&#8217;</p>
<p>此时查询v$sqltext视图（它能够反映oracle 中share pool中的sql解析共享情况）：</p>
<table border="0" cellspacing="0" cellpadding="0" width="735">
<tbody>
<tr>
<td width="121" valign="bottom">
<p align="left"><strong>ADDRESS</strong></p>
</td>
<td width="96" valign="bottom">
<p align="left"><strong>HASH_VALUE</strong></p>
</td>
<td width="96" valign="bottom">
<p align="left"><strong>SQL_ID</strong></p>
</td>
<td width="82" valign="bottom">
<p align="left"><strong>COMMAND_TYPE</strong></p>
</td>
<td width="50" valign="bottom">
<p align="left"><strong>PIECE</strong></p>
</td>
<td width="290" valign="bottom">
<p align="left"><strong>SQL_TEXT</strong></p>
</td>
</tr>
<tr>
<td width="121" valign="bottom">
<p align="left">0000000173D47990</p>
</td>
<td width="96" valign="bottom">
<p align="right">2193311325</p>
</td>
<td width="96" valign="bottom">
<p align="left">1mhba361bqjkx</p>
</td>
<td width="82" valign="bottom">
<p align="right">7</p>
</td>
<td width="50" valign="bottom">
<p align="right">0</p>
</td>
<td width="290" valign="bottom">
<p align="left">delete from t_englishscore_score where   STUDENTNUM=&#8217;200431500123&#8242;</p>
</td>
</tr>
<tr>
<td width="121" valign="bottom">
<p align="left">0000000173D47990</p>
</td>
<td width="96" valign="bottom">
<p align="right">2193311325</p>
</td>
<td width="96" valign="bottom">
<p align="left">1mhba361bqjkx</p>
</td>
<td width="82" valign="bottom">
<p align="right">7</p>
</td>
<td width="50" valign="bottom">
<p align="right">1</p>
</td>
<td width="290" valign="bottom">
<p align="left">and   LESSONNAME=&#8217;test&#8217; and YEAR=&#8217;2005&#8242; and TERM=&#8217;上&#8217;</p>
</td>
</tr>
<tr>
<td width="121" valign="bottom">
<p align="left">0000000188BDAC00</p>
</td>
<td width="96" valign="bottom">
<p align="right">321412224</p>
</td>
<td width="96" valign="bottom">
<p align="left">3jjk8tn9khr40</p>
</td>
<td width="82" valign="bottom">
<p align="right">7</p>
</td>
<td width="50" valign="bottom">
<p align="right">0</p>
</td>
<td width="290" valign="bottom">
<p align="left">delete from t_englishscore_score where   STUDENTNUM=&#8217;200431500123&#8242;</p>
</td>
</tr>
<tr>
<td width="121" valign="bottom">
<p align="left">0000000188BDAC00</p>
</td>
<td width="96" valign="bottom">
<p align="right">321412224</p>
</td>
<td width="96" valign="bottom">
<p align="left">3jjk8tn9khr40</p>
</td>
<td width="82" valign="bottom">
<p align="right">7</p>
</td>
<td width="50" valign="bottom">
<p align="right">1</p>
</td>
<td width="290" valign="bottom">
<p align="left">and   LESSONNAME=&#8217;毕业设计&#8217; and YEAR=&#8217;2007&#8242; and TERM=&#8217;下&#8217;</p>
</td>
</tr>
</tbody>
</table>
<p>可见，没有使用绑定变量，两次删除的语句都分别对应不同的Hash_Value，在共享池中占据两个条目，而且关键是这两个条目能够被以后删除记录操作共享的几率大致趋于0，除非有同样的记录需要删除，这样就大大降低了共享池“共享”的功能。</p>
<p>2、使用绑定变量</p>
<p>例子：更新同一张表多条记录。</p>
<p>sql语句：在delphi中sql语句代码如下：</p>
<p>（1）update t_englishscore_score set LESSONNUM=:newLessonnum,LESSONNAME=:newLessonname,</p>
<p>YEAR=:newYear,TERM=:newTerm,COURSESORT=:newCourseSort,</p>
<p>CREDIT=:newCredit,SCORE=:newScore,ISDELETE=:newIsDelete</p>
<p>where STUDENTNUM=:oldStudentnum and LESSONNAME=:oldLessonname</p>
<p>and YEAR=:oldYear and TERM=:oldTerm</p>
<p>每次更新，只要赋予相应的参数即可。多次更新后，查看v$sqltext：</p>
<table border="0" cellspacing="0" cellpadding="0" width="852">
<tbody>
<tr>
<td width="100" valign="bottom">
<p align="left"><strong>ADDRESS</strong></p>
</td>
<td width="123" valign="bottom">
<p align="left"><strong>HASH_VALUE</strong></p>
</td>
<td width="99" valign="bottom">
<p align="left"><strong>SQL_ID</strong></p>
</td>
<td width="99" valign="bottom">
<p align="left"><strong>COMMAND_TYPE</strong></p>
</td>
<td width="47" valign="bottom">
<p align="left"><strong>PIECE</strong></p>
</td>
<td width="386" valign="bottom">
<p align="left"><strong>SQL_TEXT</strong></p>
</td>
</tr>
<tr>
<td width="100" valign="bottom">
<p align="left">00000001735AF2B0</p>
</td>
<td width="123" valign="bottom">
<p align="right">1453164333</p>
</td>
<td width="99" valign="bottom">
<p align="left">gfdbw8db9v1td</p>
</td>
<td width="99" valign="bottom">
<p align="right">6</p>
</td>
<td width="47" valign="bottom">
<p align="right">0</p>
</td>
<td width="386" valign="bottom">
<p align="left">update t_englishscore_score set   LESSONNUM=:1,LESSONNAME=:2,YEAR=</p>
</td>
</tr>
<tr>
<td width="100" valign="bottom">
<p align="left">00000001735AF2B0</p>
</td>
<td width="123" valign="bottom">
<p align="right">1453164333</p>
</td>
<td width="99" valign="bottom">
<p align="left">gfdbw8db9v1td</p>
</td>
<td width="99" valign="bottom">
<p align="right">6</p>
</td>
<td width="47" valign="bottom">
<p align="right">1</p>
</td>
<td width="386" valign="bottom">
<p align="left">:3,TERM=:4,COURSESORT=:5,CREDIT=:6,SCORE=:7,ISDELETE=:8  where S</p>
</td>
</tr>
<tr>
<td width="100" valign="bottom">
<p align="left">00000001735AF2B0</p>
</td>
<td width="123" valign="bottom">
<p align="right">1453164333</p>
</td>
<td width="99" valign="bottom">
<p align="left">gfdbw8db9v1td</p>
</td>
<td width="99" valign="bottom">
<p align="right">6</p>
</td>
<td width="47" valign="bottom">
<p align="right">2</p>
</td>
<td width="386" valign="bottom">
<p align="left">TUDENTNUM=:9 and LESSONNAME=:10 and   YEAR=:11 and TERM=:12</p>
</td>
</tr>
</tbody>
</table>
<p>可见使用绑定变量后，多次更新操作，都很好的共享了一条sql解析，大大降低了硬解析的数量，相应的提供了软解析的数量，从而真正发挥了共享池“共享”的作用。</p>
<div class="shr-publisher-107"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2009/11/05/%e4%bd%bf%e7%94%a8%e7%bb%91%e5%ae%9a%e5%8f%98%e9%87%8f%e5%92%8c%e4%b8%8d%e4%bd%bf%e7%94%a8%e7%bb%91%e5%ae%9a%e5%8f%98%e9%87%8f%e6%93%8d%e4%bd%9c%e6%95%b0%e6%8d%ae%e5%ba%93/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用Merge语句同时执行插入和更新操作</title>
		<link>http://www.ukuang.com/2009/10/10/%e4%bd%bf%e7%94%a8merge%e8%af%ad%e5%8f%a5%e5%90%8c%e6%97%b6%e6%89%a7%e8%a1%8c%e6%8f%92%e5%85%a5%e5%92%8c%e6%9b%b4%e6%96%b0%e6%93%8d%e4%bd%9c/</link>
		<comments>http://www.ukuang.com/2009/10/10/%e4%bd%bf%e7%94%a8merge%e8%af%ad%e5%8f%a5%e5%90%8c%e6%97%b6%e6%89%a7%e8%a1%8c%e6%8f%92%e5%85%a5%e5%92%8c%e6%9b%b4%e6%96%b0%e6%93%8d%e4%bd%9c/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 12:10:58 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=89</guid>
		<description><![CDATA[<p></p> <p>考虑下列情况，对于一张表T，有（A，B）两列，进行下列操作：如果表T中存在A=‘a1’的记录，就更新对应的B列值为‘b1’；如果不存在，就插入这一条记录。</p> <p>经典的处理方式是先查询，看记录是否存在，再确定是进行插入还是删除操作。</p> <p>从oracle9i开始，就已经支持Merge语句，可以使用一条sql语句，同时执行插入和更新操作。</p> <p>下面举一个例子，表t_englishscore_stuengname表，有studentnum和engname两列，现在需要处理一条记录：（&#8217;20011111111&#8242;，&#8217;Li Bo&#8217;），不确定是否插入还是更新，使用Merge语句如下：</p> <p>merge into t_englishscore_stuengname t using (select &#8217;20011111111&#8242; as studentnum,&#8217;Li Bo&#8217; as engname from dual) s on (t.studentnum=s.studentnum) when matched then update set t.engname=s.engname where t.studentnum=s.studentnum when not matched then insert (studentnum,engname) values(s.studentnum,s.engname);</p> <p>有关Merge语句的详细说明参见下列网址，本文不予赘述。</p> <p>[1] eygle. 使用Merge Into 语句实现 Insert/Update. http://www.eygle.com/digest/2009/01/merge_into_insertupdate.html. [2] eygle. Merge用法:Oracle 10g中对Merge语句的增强. http://www.eygle.com/digest/2009/02/mergeoracle_10gmerge.html [3] google. www.google.com <p></p> [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"></p>
<div id="msgcns!378A3196AFD42482!207">
<p>考虑下列情况，对于一张表T，有（A，B）两列，进行下列操作：如果表T中存在A=‘a1’的记录，就更新对应的B列值为‘b1’；如果不存在，就插入这一条记录。</p>
<p>经典的处理方式是先查询，看记录是否存在，再确定是进行插入还是删除操作。</p>
<p>从oracle9i开始，就已经支持Merge语句，可以使用一条sql语句，同时执行插入和更新操作。</p>
<p>下面举一个例子，表t_englishscore_stuengname表，有studentnum和engname两列，现在需要处理一条记录：（&#8217;20011111111&#8242;，&#8217;Li Bo&#8217;），不确定是否插入还是更新，使用Merge语句如下：</p>
<p><em>merge into t_englishscore_stuengname t<br />
using (select &#8217;20011111111&#8242; as studentnum,&#8217;Li Bo&#8217; as engname from dual) s<br />
on (t.studentnum=s.studentnum)<br />
when matched then<br />
update set t.engname=s.engname where t.studentnum=s.studentnum<br />
when not matched then<br />
insert (studentnum,engname) values(s.studentnum,s.engname);</em></p>
<p>有关Merge语句的详细说明参见下列网址，本文不予赘述。</p>
<p>[1] eygle. 使用Merge Into 语句实现 Insert/Update.<br />
<a href="http://www.eygle.com/digest/2009/01/merge_into_insertupdate.html">http://www.eygle.com/digest/2009/01/merge_into_insertupdate.html</a>.<br />
[2] eygle. Merge用法:Oracle 10g中对Merge语句的增强.<br />
<a href="http://www.eygle.com/digest/2009/02/mergeoracle_10gmerge.html">http://www.eygle.com/digest/2009/02/mergeoracle_10gmerge.html</a><br />
[3] google. www.google.com</div>
<p></span></p>
<div class="shr-publisher-89"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2009/10/10/%e4%bd%bf%e7%94%a8merge%e8%af%ad%e5%8f%a5%e5%90%8c%e6%97%b6%e6%89%a7%e8%a1%8c%e6%8f%92%e5%85%a5%e5%92%8c%e6%9b%b4%e6%96%b0%e6%93%8d%e4%bd%9c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在PL/SQL中计算采用四舍五入和delphi 6中计算采用四舍五入之间的误差</title>
		<link>http://www.ukuang.com/2009/10/10/%e5%9c%a8plsql%e4%b8%ad%e8%ae%a1%e7%ae%97%e9%87%87%e7%94%a8%e5%9b%9b%e8%88%8d%e4%ba%94%e5%85%a5%e5%92%8cdelphi-6%e4%b8%ad%e8%ae%a1%e7%ae%97%e9%87%87%e7%94%a8%e5%9b%9b%e8%88%8d%e4%ba%94%e5%85%a5/</link>
		<comments>http://www.ukuang.com/2009/10/10/%e5%9c%a8plsql%e4%b8%ad%e8%ae%a1%e7%ae%97%e9%87%87%e7%94%a8%e5%9b%9b%e8%88%8d%e4%ba%94%e5%85%a5%e5%92%8cdelphi-6%e4%b8%ad%e8%ae%a1%e7%ae%97%e9%87%87%e7%94%a8%e5%9b%9b%e8%88%8d%e4%ba%94%e5%85%a5/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 12:10:27 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=87</guid>
		<description><![CDATA[<p></p> <p>有系统用户反映，在其中使用delphi6的程序中计算一个数值为2.64，但是在另外一个模块中，相同的参数，计算出来却是2.63，之间相差了0.01。一查，后者是调用oracle中存储过程实现的，而前者在delphi6中实现。</p> <p>在 仔细分析原因后，发现delphi 6中使用roundto或者simpleroundto都不是我们通常说的四舍五入，前者是采用银行家的四舍五入，即四舍六入五奇偶，而 simpleroundto这个函数也令人有点琢磨不透，有些是四舍五入，有些不是，比如对于 simpleroundto（12.95，-1）=12.9。</p> <p>而在PL/SQL中，一律保留了1位，四舍五入，所以两种方法一比较，最后累计，就出现了误差。</p> <p>解决方法，可以自己编辑一个函数处理，也可以按照下面一个网友的解释进行处理：</p> <p>http://www.2ccc.com/idea.asp?articleid=1300 网友iamdream</p> <p>以下是研究的结果(Delphi6)：</p> <p>RoundTo(及Round)函数使用所谓“银行家舍入法”&#60;Banker&#8217;s Rounding&#62;（对于舍入位后为5的情况，则舍入位为偶数，则舍，为奇数，则入），而Format函数则为正常的四舍五入法，取例如下：</p> <p>0.145 RoundTo(0.145, -2) = 0.14</p> <p>0.145 Format(&#8216;%8.2f&#8217;, 0.145) = 0.15</p> <p>0.155 RoundTo(0.155, -2) = 0.16</p> <p>0.155 Format(&#8216;%8.2f&#8217;, 0.155) = 0.16</p> <p>另在进行浮点数的运算时，可能会出现0.14499999999999的情况，此时的值按数学上要求实际应为0.145，如用以上方法舍入到小数点后两位时，均不能达到想要的效果。</p> <p>另SimpleRoundTo比RoundTo更接近四舍五入法，但不完全是四舍五入，如对0.145用SimpleRoundTo(0.145, -2)舍入时仍为0.14；</p> <p>如果后面还有小数，如0.1450000001，此时舍入，则三者均为0.15！对1.145，SimpleRoundTo舍入为1.15！</p> <p>故而如用RoundTo来四舍五入，则可在舍入位后的第二位加上5，如0.145，则加上0.0005，此时成为0.1455，再舍入时，就为0.15了！</p> <p>因此四舍五入取两位小数时，只要先加上0.0001，然后用RoundTo或SimpleRoundTo即可。 <p></p> ]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"></p>
<div id="msgcns!378A3196AFD42482!206">
<p>有系统用户反映，在其中使用delphi6的程序中计算一个数值为2.64，但是在另外一个模块中，相同的参数，计算出来却是2.63，之间相差了0.01。一查，后者是调用oracle中存储过程实现的，而前者在delphi6中实现。</p>
<p>在 仔细分析原因后，发现delphi 6中使用roundto或者simpleroundto都不是我们通常说的四舍五入，前者是采用银行家的四舍五入，即四舍六入五奇偶，而 simpleroundto这个函数也令人有点琢磨不透，有些是四舍五入，有些不是，比如对于 simpleroundto（12.95，-1）=12.9。</p>
<p>而在PL/SQL中，一律保留了1位，四舍五入，所以两种方法一比较，最后累计，就出现了误差。</p>
<p>解决方法，可以自己编辑一个函数处理，也可以按照下面一个网友的解释进行处理：</p>
<p><a href="http://www.2ccc.com/idea.asp?articleid=1300">http://www.2ccc.com/idea.asp?articleid=1300</a> 网友iamdream</p>
<p><em>以下是研究的结果(Delphi6)：</em></p>
<p><em>RoundTo(及Round)函数使用所谓“银行家舍入法”&lt;Banker&#8217;s Rounding&gt;（对于舍入位后为5的情况，则舍入位为偶数，则舍，为奇数，则入），而Format函数则为正常的四舍五入法，取例如下：</em></p>
<p><em>0.145 RoundTo(0.145, -2) = 0.14</em></p>
<p><em>0.145 Format(&#8216;%8.2f&#8217;, 0.145) = 0.15</em></p>
<p><em>0.155 RoundTo(0.155, -2) = 0.16</em></p>
<p><em>0.155 Format(&#8216;%8.2f&#8217;, 0.155) = 0.16</em></p>
<p><em>另在进行浮点数的运算时，可能会出现0.14499999999999的情况，此时的值按数学上要求实际应为0.145，如用以上方法舍入到小数点后两位时，均不能达到想要的效果。</em></p>
<p><em>另SimpleRoundTo比RoundTo更接近四舍五入法，但不完全是四舍五入，如对0.145用SimpleRoundTo(0.145, -2)舍入时仍为0.14；</em></p>
<p><em>如果后面还有小数，如0.1450000001，此时舍入，则三者均为0.15！对1.145，SimpleRoundTo舍入为1.15！</em></p>
<p><em>故而如用RoundTo来四舍五入，则可在舍入位后的第二位加上5，如0.145，则加上0.0005，此时成为0.1455，再舍入时，就为0.15了！</em></p>
<p><em>因此四舍五入取两位小数时，只要先加上0.0001，然后用RoundTo或SimpleRoundTo即可。</em></div>
<p></span></p>
<div class="shr-publisher-87"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2009/10/10/%e5%9c%a8plsql%e4%b8%ad%e8%ae%a1%e7%ae%97%e9%87%87%e7%94%a8%e5%9b%9b%e8%88%8d%e4%ba%94%e5%85%a5%e5%92%8cdelphi-6%e4%b8%ad%e8%ae%a1%e7%ae%97%e9%87%87%e7%94%a8%e5%9b%9b%e8%88%8d%e4%ba%94%e5%85%a5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>“Memory Notification: Library Cache Object loaded into SGA”问题</title>
		<link>http://www.ukuang.com/2009/10/10/%e2%80%9cmemory-notification-library-cache-object-loaded-into-sga%e2%80%9d%e9%97%ae%e9%a2%98/</link>
		<comments>http://www.ukuang.com/2009/10/10/%e2%80%9cmemory-notification-library-cache-object-loaded-into-sga%e2%80%9d%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 12:09:55 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=85</guid>
		<description><![CDATA[<p>最近AlertSid.log有错误如下： Tue Sep 15 00:00:06 2009 Memory Notification: Library Cache Object loaded into SGA Heap size 3708K exceeds notification threshold (2048K) Details in trace file /opt/oracle/admin/alpha/udump/alpha_ora_2177.trc KGL object name :XDB.XDbD/PLZ01TcHgNAgAIIegtw== Tue Sep 15 00:00:07 2009 Memory Notification: Library Cache Object loaded into SGA Heap size 4067K exceeds notification threshold (2048K) Details in trace file /opt/oracle/admin/alpha/udump/alpha_ora_2177.trc [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>最近AlertSid.log有错误如下：<br />
<em>Tue Sep 15 00:00:06 2009<br />
Memory Notification: Library Cache Object loaded into SGA<br />
Heap size 3708K exceeds notification threshold (2048K)<br />
Details in trace file /opt/oracle/admin/alpha/udump/alpha_ora_2177.trc<br />
KGL object name :XDB.XDbD/PLZ01TcHgNAgAIIegtw==<br />
Tue Sep 15 00:00:07 2009<br />
Memory Notification: Library Cache Object loaded into SGA<br />
Heap size 4067K exceeds notification threshold (2048K)<br />
Details in trace file /opt/oracle/admin/alpha/udump/alpha_ora_2177.trc<br />
KGL object name :XDB.XDA8XlWX/h+P3gQFeMmGQWfg==<br />
Tue Sep 15 00:01:01 2009<br />
Errors in file /opt/oracle/admin/alpha/udump/alpha_ora_2239.trc:</em><br />
一查，原因是版本10.2.0.1中，这个定义大对象的阈值是2M，在load较大的对象进library cache中时，会记录以上警告。这个bug在10.2.0.2中被fixed， 这个值被增加到了50MB。<br />
解决办法：<br />
置隐藏参数_kgl_large_heap_warning_threshold，将其扩大即可，假如设为8M，这个参数的单位是byte。<br />
操作如下：<br />
<em>SQL&gt; show parameter _kgl_large_heap_warning_threshold<br />
SQL&gt; alter system set &#8220;_kgl_large_heap_warning_threshold&#8221;=8388608 scope=spfile ;<br />
系统已更改。 </em></p>
<p><em>SQL&gt; shutdown immediate;<br />
SQL&gt; show parameter _kgl_large_heap_warning_threshold<br />
NAME                                 TYPE        VALUE<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
_kgl_large_heap_warning_threshold    integer     838860</em></p>
<div class="shr-publisher-85"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2009/10/10/%e2%80%9cmemory-notification-library-cache-object-loaded-into-sga%e2%80%9d%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决“Process m001 died……”问题，设置Processes数</title>
		<link>http://www.ukuang.com/2009/10/10/%e8%a7%a3%e5%86%b3%e2%80%9cprocess-m001-died%e2%80%a6%e2%80%a6%e2%80%9d%e9%97%ae%e9%a2%98%ef%bc%8c%e8%ae%be%e7%bd%aeprocesses%e6%95%b0/</link>
		<comments>http://www.ukuang.com/2009/10/10/%e8%a7%a3%e5%86%b3%e2%80%9cprocess-m001-died%e2%80%a6%e2%80%a6%e2%80%9d%e9%97%ae%e9%a2%98%ef%bc%8c%e8%ae%be%e7%bd%aeprocesses%e6%95%b0/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 12:09:09 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=84</guid>
		<description><![CDATA[<p></p> <p>最近服务器经常down掉，开始以为是机房空调坏了导致高温造成服务器自动停机的缘故，直到今天，空调弄好了，还down了，从alsertSid.log一查，有如下错误信息： Process m001 died, see its trace file Wed Sep 16 10:00:52 2009 ksvcreate: Process(m001) creation failed 原来是oracle进程数达到Processes上限了。在oracle中：sessions和processes的关系是： sessions=1.1*processes + 5 这样，通过修改processes可以同时修改process和sessions的目的。 解决过程如下： SQL&#62; conn xxx/yyyy 已连接。 SQL&#62; show parameter sessions; </p> <p>NAME                                 TYPE        VALUE &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; java_max_sessionspace_size           integer     0 java_soft_sessionspace_limit         integer     0 license_max_sessions                 integer     0 license_sessions_warning             integer     0 logmnr_max_persistent_sessions       integer     1 sessions                             [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"></p>
<div id="msgcns!378A3196AFD42482!201">
<p>最近服务器经常down掉，开始以为是机房空调坏了导致高温造成服务器自动停机的缘故，直到今天，空调弄好了，还down了，从alsertSid.log一查，有如下错误信息：<br />
<em>Process m001 died, see its trace file<br />
Wed Sep 16 10:00:52 2009<br />
ksvcreate: Process(m001) creation failed</em><br />
原来是oracle进程数达到Processes上限了。在oracle中：sessions和processes的关系是：<br />
sessions=1.1*processes + 5<br />
这样，通过修改processes可以同时修改process和sessions的目的。<br />
解决过程如下：<br />
<em>SQL&gt; conn xxx/yyyy<br />
已连接。<br />
SQL&gt; show parameter sessions; </em></p>
<p><em>NAME                                 TYPE        VALUE<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
java_max_sessionspace_size           integer     0<br />
java_soft_sessionspace_limit         integer     0<br />
license_max_sessions                 integer     0<br />
license_sessions_warning             integer     0<br />
logmnr_max_persistent_sessions       integer     1<br />
sessions                             integer     170<br />
shared_server_sessions               integer<br />
SQL&gt; show parameter processes; </em></p>
<p><em>NAME                                 TYPE        VALUE<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
aq_tm_processes                      integer     0<br />
db_writer_processes                  integer     1<br />
gcs_server_processes                 integer     0<br />
job_queue_processes                  integer     10<br />
log_archive_max_processes            integer     2<br />
processes                            integer     150<br />
SQL&gt; alter system set processes=200 scope=spfile; </em></p>
<p><em>系统已更改。 </em></p>
<p><em>SQL&gt; shutdown immediate; </em></p>
<p><em>SQL&gt; show parameter sessions; </em></p>
<p><em>NAME                                 TYPE        VALUE<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
java_max_sessionspace_size           integer     0<br />
java_soft_sessionspace_limit         integer     0<br />
license_max_sessions                 integer     0<br />
license_sessions_warning             integer     0<br />
logmnr_max_persistent_sessions       integer     1<br />
sessions                             integer     225<br />
shared_server_sessions               integer<br />
SQL&gt; show parameter processes; </em></p>
<p><em>NAME                                 TYPE        VALUE<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
aq_tm_processes                      integer     0<br />
db_writer_processes                  integer     1<br />
gcs_server_processes                 integer     0<br />
job_queue_processes                  integer     10<br />
log_archive_max_processes            integer     2<br />
processes                            integer     200</em></div>
<p></span></p>
<div class="shr-publisher-84"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2009/10/10/%e8%a7%a3%e5%86%b3%e2%80%9cprocess-m001-died%e2%80%a6%e2%80%a6%e2%80%9d%e9%97%ae%e9%a2%98%ef%bc%8c%e8%ae%be%e7%bd%aeprocesses%e6%95%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于SQL*Loader的用法</title>
		<link>http://www.ukuang.com/2009/10/10/%e5%85%b3%e4%ba%8esqlloader%e7%9a%84%e7%94%a8%e6%b3%95/</link>
		<comments>http://www.ukuang.com/2009/10/10/%e5%85%b3%e4%ba%8esqlloader%e7%9a%84%e7%94%a8%e6%b3%95/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 12:08:35 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=82</guid>
		<description><![CDATA[<p></p> <p>网上有很多好文，贴出网址以及一些摘要：</p> <p>1、关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法</p> <p>http://www.blogjava.net/Unmi/archive/2009/01/05/249956.html</p> <p>2、使用手册</p> <p>http://www.psoug.org/reference/sqlloader.html</p> <p>3、sqlldr语法</p> <p>http://yumianfeilong.com/html/2007/03/20/49.html</p> <p>4、faq</p> <p>http://www.orafaq.com/wiki/SQL*Loader_FAQ</p> <p>5、sqlloader，这篇很值得一看。</p> <p>http://www.oracleutilities.com/OSUtil/sqlldr.html</p> <p>其中写了一个自动生成控制文件的脚本：</p> <p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; set echo off ver off feed off pages 0 </p> <p>accept tname prompt &#8216;Enter Name of Table: &#8216; accept dformat prompt &#8216;Enter Format to Use for Date Columns: &#8216; </p> <p>spool &#38;tname..ctl </p> <p>select &#8216;LOAD [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"></p>
<div id="msgcns!378A3196AFD42482!200">
<p>网上有很多好文，贴出网址以及一些摘要：</p>
<p>1、关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法</p>
<p><a title="http://www.blogjava.net/Unmi/archive/2009/01/05/249956.html" href="http://www.blogjava.net/Unmi/archive/2009/01/05/249956.html">http://www.blogjava.net/Unmi/archive/2009/01/05/249956.html</a></p>
<p>2、使用手册</p>
<p><a title="http://www.psoug.org/reference/sqlloader.html" href="http://www.psoug.org/reference/sqlloader.html">http://www.psoug.org/reference/sqlloader.html</a></p>
<p>3、sqlldr语法</p>
<p><a title="http://yumianfeilong.com/html/2007/03/20/49.html" href="http://yumianfeilong.com/html/2007/03/20/49.html">http://yumianfeilong.com/html/2007/03/20/49.html</a></p>
<p>4、faq</p>
<p><a title="http://www.orafaq.com/wiki/SQL*Loader_FAQ" href="http://www.orafaq.com/wiki/SQL*Loader_FAQ">http://www.orafaq.com/wiki/SQL*Loader_FAQ</a></p>
<p>5、sqlloader，这篇很值得一看。</p>
<p><a title="http://www.oracleutilities.com/OSUtil/sqlldr.html" href="http://www.oracleutilities.com/OSUtil/sqlldr.html">http://www.oracleutilities.com/OSUtil/sqlldr.html</a></p>
<p>其中写了一个自动生成控制文件的脚本：</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
<em>set echo off ver off feed off pages 0 </em></p>
<p><em>accept tname prompt &#8216;Enter Name of Table: &#8216;<br />
accept dformat prompt &#8216;Enter Format to Use for Date Columns: &#8216; </em></p>
<p><em>spool &amp;tname..ctl </em></p>
<p><em>select &#8216;LOAD DATA&#8217;|| chr (10) ||<br />
&#8216;INFILE &#8221;&#8217; || lower (table_name) || &#8216;.dat&#8221;&#8217; || chr (10) ||<br />
&#8216;INTO TABLE &#8216;|| table_name || chr (10)||<br />
&#8216;FIELDS TERMINATED BY &#8221;,&#8221;&#8217;||chr (10)||<br />
&#8216;TRAILING NULLCOLS&#8217; || chr (10) || &#8216;(&#8216;<br />
from   user_tables<br />
where  table_name = upper (&#8216;&amp;tname&#8217;); </em></p>
<p><em>select decode (rownum, 1, &#8216;   &#8216;, &#8216; , &#8216;) ||<br />
rpad (column_name, 33, &#8216; &#8216;)      ||<br />
decode (data_type,<br />
&#8216;VARCHAR2&#8242;, &#8216;CHAR NULLIF (&#8216;||column_name||&#8217;=BLANKS)&#8217;,<br />
&#8216;FLOAT&#8217;,    &#8216;DECIMAL EXTERNAL NULLIF(&#8216;||column_name||&#8217;=BLANKS)&#8217;,<br />
&#8216;NUMBER&#8217;,   decode (data_precision, 0,<br />
&#8216;INTEGER EXTERNAL NULLIF (&#8216;||column_name||<br />
&#8216;=BLANKS)&#8217;, decode (data_scale, 0,<br />
&#8216;INTEGER EXTERNAL NULLIF (&#8216;||<br />
column_name||&#8217;=BLANKS)&#8217;,<br />
&#8216;DECIMAL EXTERNAL NULLIF (&#8216;||<br />
column_name||&#8217;=BLANKS)&#8217;)),<br />
&#8216;DATE&#8217;,     &#8216;DATE &#8220;&amp;dformat&#8221; NULLIF (&#8216;||column_name||&#8217;=BLANKS)&#8217;, null)<br />
from   user_tab_columns<br />
where  table_name = upper (&#8216;&amp;tname&#8217;)<br />
order  by column_id; </em></p>
<p><em>select &#8216;)&#8217;<br />
from dual; </em></p>
<p><em>spool off<br />
</em>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>另外提到了几种高效率的使用sqlldr的方法：</p>
<p>1. <strong>Use Direct Path Loads</strong> &#8211; The conventional path loader essentially loads the data by using standard insert statements. The direct path loader (<em>direct=true</em>) loads directly into the Oracle data files and creates blocks in Oracle database block format. The fact that SQL is not being issued makes the entire process much less taxing on the database. There are certain cases, however, in which direct path loads cannot be used (clustered tables). To prepare the database for direct path loads, the script <em>$ORACLE_HOME/rdbms/admin/catldr.sql.sql</em> must be executed.</p>
<p>2. <strong>Disable Indexes and Constraints. </strong>For conventional data loads only, the disabling of indexes and constraints can greatly enhance the performance of SQL*Loader.</p>
<p>3. <strong>Use a Larger Bind Array</strong>. For conventional data loads only, larger bind arrays limit the number of calls to the database and increase performance. The size of the bind array is specified using the <em>bindsize</em> parameter. The bind array&#8217;s size is equivalent to the number of rows it contains (<em>rows=</em>) times the maximum length of each row.</p>
<p>4. <strong>Use ROWS=<em>n</em> to Commit Less Frequently. </strong>For conventional data loads only, the <em>rows</em> parameter specifies the number of rows per <em>commit</em>. Issuing fewer commits will enhance performance.</p>
<p>5. <strong>Use Parallel Loads. </strong>Available with direct path data loads only, this option allows multiple SQL*Loader jobs to execute concurrently.</p>
<p>$ sqlldr control=first.ctl parallel=true direct=true</p>
<p>$ sqlldr control=second.ctl parallel=true direct=true</p>
<p>6. <strong>Use Fixed Width Data. </strong>Fixed width data format saves Oracle some processing when parsing the data. The savings can be tremendous, depending on the type of data and number of rows.</p>
<p>7. <strong>Disable Archiving During Load. </strong>While this may not be feasible in certain environments, disabling database archiving can increase performance considerably.</p>
<p>8. <strong>Use <em>unrecoverable</em>. </strong>The unrecoverable option (unrecoverable load data) disables the writing of the data to the redo logs. This option is available for direct path loads only.</div>
<p></span></p>
<div class="shr-publisher-82"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2009/10/10/%e5%85%b3%e4%ba%8esqlloader%e7%9a%84%e7%94%a8%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>oracle下删除一个数据库</title>
		<link>http://www.ukuang.com/2009/10/10/oracle%e4%b8%8b%e5%88%a0%e9%99%a4%e4%b8%80%e4%b8%aa%e6%95%b0%e6%8d%ae%e5%ba%93/</link>
		<comments>http://www.ukuang.com/2009/10/10/oracle%e4%b8%8b%e5%88%a0%e9%99%a4%e4%b8%80%e4%b8%aa%e6%95%b0%e6%8d%ae%e5%ba%93/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 12:07:37 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=80</guid>
		<description><![CDATA[<p></p> <p>1、使用dbca。</p> <p>2、手工删除日志、数据、控制、参数文件。</p> <p>3、oracle10g以后，使用drop database命令：</p> shutdown abort; startup mount exclusive restrict; drop database; <p></p> ]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"></p>
<div id="msgcns!378A3196AFD42482!199">
<p>1、使用dbca。</p>
<p>2、手工删除日志、数据、控制、参数文件。</p>
<p>3、oracle10g以后，使用drop database命令：</p>
<pre><a href="http://www.adp-gmbh.ch/ora/sqlplus/shutdown.html#abort"><em>shutdown</em></a><em> abort;
</em><a href="http://www.adp-gmbh.ch/ora/sqlplus/startup.html#mount"><em>startup</em></a><em> mount exclusive restrict;
drop database;</em></pre>
</div>
<p></span></p>
<div class="shr-publisher-80"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2009/10/10/oracle%e4%b8%8b%e5%88%a0%e9%99%a4%e4%b8%80%e4%b8%aa%e6%95%b0%e6%8d%ae%e5%ba%93/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle10g重建EM</title>
		<link>http://www.ukuang.com/2009/10/10/oracle10g%e9%87%8d%e5%bb%baem/</link>
		<comments>http://www.ukuang.com/2009/10/10/oracle10g%e9%87%8d%e5%bb%baem/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 12:07:07 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=78</guid>
		<description><![CDATA[<p></p> <p>Oracle10G 的EM采用了web方式，并且分成了2个产品，database control和grid control。使用命令行工具emca可以创建，修改，重建或者删除dbcontrol的配置。而使用命令行工具emctl可以启动/停止EM console服务，察看服务状态等。</p> <p>1.drop configuration files and repository run : </p> <p>emca -deconfig dbcontrol db -repos drop</p> <p>2. Logon SQLPLUS as user SYS or SYSTEM, and drop the sysman account and mangement objects:</p> <p>SQL&#62; drop user sysman cascade;</p> <p>SQL&#62; drop role MGMT_USER;</p> <p>SQL&#62; drop user MGMT_VIEW cascade;</p> <p>SQL&#62; drop public synonym MGMT_TARGET_BLACKOUTS;</p> [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"></p>
<div id="msgcns!378A3196AFD42482!198">
<p>Oracle10G 的EM采用了web方式，并且分成了2个产品，database control和grid control。使用命令行工具emca可以创建，修改，重建或者删除dbcontrol的配置。而使用命令行工具emctl可以启动/停止EM console服务，察看服务状态等。</p>
<p><strong>1.drop configuration files and repository run : </strong></p>
<p><em>emca -deconfig dbcontrol db -repos drop</em></p>
<p><strong>2. Logon SQLPLUS as user SYS or SYSTEM, and drop the sysman account and mangement objects:</strong></p>
<p><em>SQL&gt; drop user sysman cascade;</em></p>
<p><em>SQL&gt; drop role MGMT_USER;</em></p>
<p><em>SQL&gt; drop user MGMT_VIEW cascade;</em></p>
<p><em>SQL&gt; drop public synonym MGMT_TARGET_BLACKOUTS;</em></p>
<p><em>SQL&gt; drop public synonym SETEMVIEWUSERCONTEXT;</em></p>
<p><strong>3.Create configuration files and repository run</strong></p>
<p><em>emca -config dbcontrol db -repos create</em></p>
<p><strong>附A emca</strong><strong>常用命令语法</strong></p>
<p>emca -repos create创建一个EM资料库</p>
<p>emca -repos recreate重建一个EM资料库</p>
<p>emca -repos drop删除一个EM资料库</p>
<p>emca -config dbcontrol db配置数据库的 Database Control</p>
<p>emca -deconfig dbcontrol db删除数据库的 Database Control配置</p>
<p>emca -reconfig ports 重新配置db control和agent的端口</p>
<p>注：通过查看$ORACLE_HOME/install/portlist.ini 文件可以知道当前dbcontrol正在使用的端口，默认dbcontrol http端口1158，agent端口3938。如果要重新配置端口，可以使用如下命令：</p>
<p>emca -reconfig ports -dbcontrol_http_port 1159</p>
<p>emca -reconfig ports -agent_port 3939</p>
<p><strong>附B emctl</strong><strong>常用命令语法</strong></p>
<p>emctl start dbconsole启动EM console服务，使用前需要先设置ORACLE_SID环境变量</p>
<p>emctl stop dbconsole停止EM console服务，使用前需要先设置ORACLE_SID环境变量</p>
<p>emctl status dbconsole 查看EM console服务状态</p>
<p><strong>参考：</strong></p>
<p>【1】 Oracle 10G重建EM DB Control，<a href="http://home.ixpub.net/space.php?uid=22032845&amp;do=blog&amp;id=407481">http://home.ixpub.net/space.php?uid=22032845&amp;do=blog&amp;id=407481</a></p>
<p>【2】 emca与emctl常用的命令语法，http://blog.m6699.com/diomedea/article/10510.html</p></div>
<p></span></p>
<div class="shr-publisher-78"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2009/10/10/oracle10g%e9%87%8d%e5%bb%baem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle10g EM无法连接数据库实例 &amp; 正确修改DBSnmp和SYSMAN密码</title>
		<link>http://www.ukuang.com/2009/10/10/oracle10g-em%e6%97%a0%e6%b3%95%e8%bf%9e%e6%8e%a5%e6%95%b0%e6%8d%ae%e5%ba%93%e5%ae%9e%e4%be%8b-%e6%ad%a3%e7%a1%ae%e4%bf%ae%e6%94%b9dbsnmp%e5%92%8csysman%e5%af%86%e7%a0%81/</link>
		<comments>http://www.ukuang.com/2009/10/10/oracle10g-em%e6%97%a0%e6%b3%95%e8%bf%9e%e6%8e%a5%e6%95%b0%e6%8d%ae%e5%ba%93%e5%ae%9e%e4%be%8b-%e6%ad%a3%e7%a1%ae%e4%bf%ae%e6%94%b9dbsnmp%e5%92%8csysman%e5%af%86%e7%a0%81/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 12:06:28 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=77</guid>
		<description><![CDATA[<p></p> SYSMAN和DBSNMP跟涉及到Oracle的EM，所以跟其他的用户修改密码方式有所区别。下面是这两个用户的默认密码和作用说明： <p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p> <p>DBSNMP</p> <p>DBSNMP</p> <p>The account used by the Management Agent component of Oracle Enterprise Manager to monitor and manage the database .</p> <p>Oracle Enterprise Manager Grid Control Installation and Basic Configuration.</p> <p>SYSMAN CHANGE_ON_INSTALL</p> <p>The account used to perform Oracle Enterprise Manager database administration tasks. Note that SYS and SYSTEM can also perform these [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"></p>
<div id="msgcns!378A3196AFD42482!197">
<h4>SYSMAN和DBSNMP跟涉及到Oracle的EM，所以跟其他的用户修改密码方式有所区别。下面是这两个用户的默认密码和作用说明：</h4>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>DBSNMP</p>
<p>DBSNMP</p>
<p>The account used by the Management Agent component of Oracle Enterprise Manager to monitor and manage the database .</p>
<p>Oracle Enterprise Manager Grid Control Installation and Basic Configuration.</p>
<p>SYSMAN<br />
CHANGE_ON_INSTALL</p>
<p>The account used to perform Oracle Enterprise Manager database administration tasks. Note that SYS and SYSTEM can also perform these tasks.</p>
<p>Oracle Enterprise Manager Grid Control Installation and Basic Configuration</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<h3><strong>错误修改可能造成的问题</strong></h3>
<p>如果像修改其它用户的方式修改其密码的话，登陆em，可能出现如下状态：</p>
<p>（1）提示Enterprise Manager 无法连接到数据库实例</p>
<p>（2）数据库实例，是红色向下的箭头</p>
<p>（3）到数据库的实例链接，是红色向下的箭头</p>
<p>（4）监听，绿色向上的箭头</p>
<p>（5）检查SYSMAN用户，处于锁定状态，使用解锁命令，又会自动锁定。</p>
<p>但是数据库其它一起正常。</p>
<h3><strong>正确的修改方式</strong></h3>
<p><strong>1</strong><strong>、</strong><strong>SYSMAN</strong><strong>密码修改</strong></p>
<p>1、 停止dbconsole</p>
<p>[oracle@xxx ~]$ emctl stop dbconsole</p>
<p>查看状态，确认dbconsole已经停止</p>
<p>[oracle@xxx ~]$ emctl status dbconsole</p>
<p>2、修改sysman用户的密码</p>
<p>[oracle@xxx ~]$ sqlplus / as sysdba</p>
<p>SQL&gt; alter user sysman identified by yyyy;</p>
<p>解锁用户</p>
<p>SQL&gt; alter user sysman account unlock;</p>
<p>确认密码已修改</p>
<p>SQL&gt; conn sysman/ yyyy @qqq</p>
<p>Connected.</p>
<p>3、转到$ORACLE_HOME/(host)_(sid)/sysman/config目录下</p>
<p>a. 把emoms.properties另存为emoms.properties.old</p>
<p>b. 修改emoms.properties文件</p>
<p>找到oracle.sysman.eml.mntr.emdRepPwd=把等于后的加密字串替换成刚才更改的密码yyyy;</p>
<p>找到oracle.sysman.eml.mntr.emdRepPwdEncrypted=TRUE 把TRUE换成FALSE。</p>
<p>4、重启dbconsole，访问EM恢复正常</p>
<p>[oracle@xxx ~]$emctl start dbconsole</p>
<p>2、修改DBSNMP密码</p>
<p><strong>2</strong><strong>、</strong><strong>DBSNMP </strong><strong>密码修改</strong></p>
<p>修改的流程类似修改SYSMAN，只不过第3步如下：</p>
<p>转到$ORACLE_HOME/(host)_(sid)/sysman/emd目录下</p>
<p>[oracle@xxx ~]$ cp targets.xml targets.xml.bak</p>
<p>[oracle@xxx ~]$vi targets.xml</p>
<p>修改些列代码中：</p>
<p>&lt;Property NAME=&#8221;UserName&#8221; VALUE=&#8221;6f5848a4f53a2d0a&#8221; ENCRYPTED=&#8221;TRUE&#8221;/&gt;</p>
<p>&lt;Property NAME=&#8221;password&#8221; VALUE=&#8221;829e1a25401de489&#8243; ENCRYPTED=&#8221;TRUE&#8221;/&gt;</p>
<p>用新的dbsnmp的密码代替上列password的Value值，ENCRYPTED的值修改成FALSE。</p>
<h4><strong>参考</strong></h4>
<p>[1] 正确修改DBSNMP和SYSMAN密码, http://asmboy001.blog.51cto.com/340398/133720</p></div>
<p></span></p>
<div class="shr-publisher-77"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2009/10/10/oracle10g-em%e6%97%a0%e6%b3%95%e8%bf%9e%e6%8e%a5%e6%95%b0%e6%8d%ae%e5%ba%93%e5%ae%9e%e4%be%8b-%e6%ad%a3%e7%a1%ae%e4%bf%ae%e6%94%b9dbsnmp%e5%92%8csysman%e5%af%86%e7%a0%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

