﻿<?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-疯狂-随笔分类-database</title><link>http://www.blogjava.net/freeman1984/category/38740.html</link><description>STANDING ON THE SHOULDERS OF GIANTS
</description><language>zh-cn</language><lastBuildDate>Mon, 05 Jun 2017 06:15:04 GMT</lastBuildDate><pubDate>Mon, 05 Jun 2017 06:15:04 GMT</pubDate><ttl>60</ttl><item><title>oracle 索引字段包含date类型，使用spring jdbc更新时不走索引，而是走table access full的问题</title><link>http://www.blogjava.net/freeman1984/archive/2015/11/15/428197.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Sat, 14 Nov 2015 16:04:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2015/11/15/428197.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/428197.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2015/11/15/428197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/428197.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/428197.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: oracle 索引字段包含date类型，使用spring jdbc更新时不走索引，而是走table access full的问题&nbsp;&nbsp;<a href='http://www.blogjava.net/freeman1984/archive/2015/11/15/428197.html'>阅读全文</a><img src ="http://www.blogjava.net/freeman1984/aggbug/428197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2015-11-15 00:04 <a href="http://www.blogjava.net/freeman1984/archive/2015/11/15/428197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)Oracle数据库如何授权收费（Database Licensing） </title><link>http://www.blogjava.net/freeman1984/archive/2014/10/27/419097.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Mon, 27 Oct 2014 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2014/10/27/419097.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/419097.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2014/10/27/419097.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/419097.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/419097.html</trackback:ping><description><![CDATA[<p><span style="font-family: Courier New; font-size: 12px;"><br />说白了，Oracle License就是一张纸，一张许可证。这跟许多软件产品是一样的，有没有许可证的产品在功能上是没有区别的，仅仅是一个法律问题。也就是说，随便到网上下的Oracle都可以免费正常使用，只不过这个使用是有区别的，如果是测试或研发，那没关系，随便用；如果是用于商业用途，那就是违法的了，Oracle公司有权起诉！</span></p><p><span style="font-family: Courier New; font-size: 12px;">&nbsp;</span></p><p><span style="font-family: Courier New; font-size: 12px;">与免费的下载版本不同，正式版的Oracle在购买后，用户会得到一个产品服务码，凭此Oracle服务码，可以得到Oracle的在线升级等服务，Oracle的服务分为好多级，不同级别提供相对应的在线或是现场服务。</span></p><p><span style="font-family: Courier New; font-size: 12px;">&nbsp;</span></p><p><span style="font-family: Courier New; font-size: 12px;"><strong>现在Oracle有两种授权方式，按CPU(Process)数和按用户数(NamedUser Plus)。</strong>前一种方式一般用于用户数不确定或者用户数量很大的情况，典型的如互联网环境，而后一种则通常被用于用户数确定或者较少的情况。</span></p><p><span style="font-family: Courier New; font-size: 12px;">&nbsp;</span></p><p><span style="font-family: Courier New; font-size: 12px;"><strong>按CPU：</strong>License数=CPU数*系数。系数来自Oracle的一个参数表，如IBM Power6的处理器为1，AMD和Intel的处理器为0.5，详细情况见下：</span></p><table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">参数</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">处理器型号</span></p></td></tr><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">0.25</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">Sun UltraSPARC T1 处理器</span></p></td></tr><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">0.50</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">Sun UltraSPARC T1处理器</span></p></td></tr><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">0.50</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">Intel、AMD处理器</span></p></td></tr><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">0.50</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">Sun UltraSPARC T2+ 处理器</span></p></td></tr><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">1.00</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">IBM POWER6、POWER7 处理器</span></p></td></tr><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">0.75</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">其他多核处理器</span></p></td></tr><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">1.00</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">单核处理器</span></p></td></tr></tbody></table><p><span style="font-family: Courier New; font-size: 12px;">则根据公式可以算出，一个SUN UltraSparc T1的4*8核处理器需要4*8*0.25=8个CPU licenses</span></p><p><span style="font-family: Courier New; font-size: 12px;">&nbsp;</span></p><p><span style="font-family: Courier New; font-size: 12px;"><strong>按用户数：</strong>Oracle数据库按照用户数授权，是指最终端的连接到Oracle数据库的用户数。按照用户数来买的时候只能用于一个系统，不允许在多台机器上安装。每一个访问Oracle数据库的用户，无论是自然人还是设备，都算作一个用户 (Named User)。如果是B/S架构，那么是指连接到中间件上的用户数。</span></p><p><span style="font-family: Courier New; font-size: 12px;">&nbsp;</span></p><p><span style="font-family: Courier New; font-size: 12px;">Named User Plus: is defined as anindividual authorized by you to use the programs which are installed on a singleserver or multiple servers, regardless of whether the individual is activelyusing the programs at any given time. A non human operated device will becounted.</span></p><p><span style="font-family: Courier New; font-size: 12px;">&nbsp;</span></p><p><span style="font-family: Courier New; font-size: 12px;">按用户数购买则对应相应的产品有对应的License的最低购买量限制，如下：</span></p><table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">产品</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">最低License数</span></p></td></tr><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">Oracle Database Standard Edition ONE</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">5 Named User Plus licenses</span></p></td></tr><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">Oracle Database Standard Edition</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">5 Named User Plus licenses</span></p></td></tr><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">Oracle Database Enterprise Edition</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">25 Named User Plus licenses per CPU</span></p></td></tr><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">Oracle Application Server Standard Edition ONE</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">5 Named User Plus licenses</span></p></td></tr><tr><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">All other Oracle Application Server products</span></p></td><td valign="top"><p><span style="font-family: Courier New; font-size: 12px;">10 Named User Plus licenses per CPU</span></p></td></tr></tbody></table><p><span style="font-family: Courier New; font-size: 12px;">当然用户应该根据自己的实际用户数订购，且不少于相应版本所要求的最低用户数。</span></p><p><span style="font-family: Courier New; font-size: 12px;"><strong>一般情况下，1CPU的费用约等于50user的费用，所以如果用户数&gt;CPU数*系数*50，则按CPU订购反而更为经济。</strong></span></p><p><span style="font-family: Courier New; font-size: 12px;"><strong>&nbsp;</strong></span></p><p><span style="font-family: Courier New; font-size: 12px;"><strong>更换服务器，OracleLicense要重新购买吗？</strong></span></p><p><span style="font-family: Courier New; font-size: 12px;">如果用户是按照用户数购买的Oracle，更改硬件不需要重新购买License；</span></p><p><span style="font-family: Courier New; font-size: 12px;">如果是按照CPU个数买，有相应的换算方法，具体请咨询Oracle公司。</span></p><p><span style="font-family: Courier New; font-size: 12px;">&nbsp;</span></p><p><span style="font-family: Courier New; font-size: 12px;"><strong>这里是Oracle 11g企业版的销售价格：</strong></span></p><p><span style="font-family: Courier New; font-size: 12px;">每个License还有有效期的分类（不论是User License还是CPU License），分别为：1年、2年、3年、4年、5年、永久。当然价格也是依次增加。</span></p><p><span style="font-family: Courier New; font-size: 12px;">&nbsp;</span></p><p><span style="font-family: Courier New; font-size: 12px;">当前Oracle 11G的User License无限使用期的价格为人民币3千5左右，按50个User License无限使用期的购买量则价格为17.5万;每个CPU License无限使用期的价格为17万9千，按IBM小机的系数计算，则购买价格为17万9千，和50个User License的价格相近。</span></p><p><span style="font-family: Courier New; font-size: 12px;">&nbsp;</span></p><p><span style="font-family: Courier New; font-size: 12px;">关于服务价格：一般地，购买Oracle的License都包含首年的服务费，以后的费用按每年原价的22%计算。</span></p><p><span style="font-family: Courier New; font-size: 12px;">&nbsp;</span></p><p><span style="font-family: Courier New; font-size: 12px;">更多的产品价格可以访问http://shop.oracle.com查看。</span></p><p><span style="font-family: Courier New; font-size: 12px;"><br /></span></p><p><span style="font-family: Courier New; font-size: 12px;"><strong>这里我们再介绍一下如何查看服务器上物理CPU总数以及核数：</strong></span></p><p><span style="font-family: Courier New; font-size: 12px;">a.如果已安装了数据库实例，那么直接查看V$license视图即可:</span></p><pre><span style="font-family: Courier New; font-size: 12px;">SQL&gt; select cpu_count_current,CPU_CORE_COUNT_CURRENT,CPU_SOCKET_COUNT_CURRENT from v$license;

CPU_COUNT_CURRENT CPU_CORE_COUNT_CURRENT CPU_SOCKET_COUNT_CURRENT
----------------- ---------------------- ------------------------
                2                      2                        1</span></pre><span style="font-family: Courier New; font-size: 12px;">以上通过v$license 视图反应了数据库服务器当前的逻辑CPU总数为2，而总的核数也是2，实际的物理CPU Socket是1，那么说明是1个双核的物理CPU。</span> <p><span style="font-family: Courier New; font-size: 12px;"><br /></span></p><p><span style="font-family: Courier New; font-size: 12px;">b. 如果服务器上尚没有部署实例则不能使用v$license视图，那么可以通过OS 命令来获取必要的信息。</span></p><p><span style="font-family: Courier New; font-size: 12px;">在x86 Linux服务器上：</span></p><p><span style="font-family: Courier New; font-size: 12px;"><br /></span></p><pre><span style="font-family: Courier New; font-size: 12px;">列出当前使用的物理CPU的个数：

grep core\ id /proc/cpuinfo | grep -c \ 0$ | grep ^0$ &gt;&gt; /dev/null &amp;&amp; grep -c processor /proc/cpuinfo || \
grep core\ id /proc/cpuinfo | grep -c \ 0$

列出单个物理CPU的核数

grep "cpu cores" /proc/cpuinfo |uniq</span></pre><p>&nbsp;</p><p>&nbsp;</p><span style="font-family: Courier New; font-size: 12px;"><p>在Power系列的IBM小机上按照cpu模块方式来购买，在IBM Dual-Core Module（双核模块）的power芯片上，一个双核模块（内含2颗物理cpu）只需要购买1.5个license ， 具体的模块类型可以咨询IBM厂家或者集成商。<br /><br />转自：<a href="http://blog.csdn.net/eurasiaxz/article/details/10699869">http://blog.csdn.net/eurasiaxz/article/details/10699869</a></p></span><p>当然随着cpu计算能力的提高，cpu个数有可能并不需要太多。oracle的收费模式肯定会变化。</p><img src ="http://www.blogjava.net/freeman1984/aggbug/419097.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2014-10-27 16:43 <a href="http://www.blogjava.net/freeman1984/archive/2014/10/27/419097.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORA-06548错误</title><link>http://www.blogjava.net/freeman1984/archive/2013/11/28/406952.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Thu, 28 Nov 2013 08:44:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2013/11/28/406952.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/406952.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2013/11/28/406952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/406952.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/406952.html</trackback:ping><description><![CDATA[ORA-06548: 不再需要更多的行。<br />原因：有可能是通过pl/sql等客户端执行管道输出函数（pipelined）造成，pl/sql客户端一般不会显示全部结果，管道输出挂起。 <img src ="http://www.blogjava.net/freeman1984/aggbug/406952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2013-11-28 16:44 <a href="http://www.blogjava.net/freeman1984/archive/2013/11/28/406952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ora-01031:insufficient privileges</title><link>http://www.blogjava.net/freeman1984/archive/2013/09/04/403674.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Wed, 04 Sep 2013 12:03:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2013/09/04/403674.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/403674.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2013/09/04/403674.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/403674.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/403674.html</trackback:ping><description><![CDATA[<div>如果密码文件存在的话（路径：$ORACLE_HOME/dbs/），去查看密码文件（格式：orapw$ORACLE_SID）里面sid和当前ORACLE_SID大小写是否一致。必须一样才行。<br />不一样是用mv 修改成一样的。即可。<br /><br />相关文章参考。<br /><br /><a href="http://www.xifenfei.com/2025.html">http://www.xifenfei.com/2025.html</a></div><img src ="http://www.blogjava.net/freeman1984/aggbug/403674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2013-09-04 20:03 <a href="http://www.blogjava.net/freeman1984/archive/2013/09/04/403674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dbcp重连(转) </title><link>http://www.blogjava.net/freeman1984/archive/2013/06/06/400263.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Thu, 06 Jun 2013 01:38:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2013/06/06/400263.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/400263.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2013/06/06/400263.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/400263.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/400263.html</trackback:ping><description><![CDATA[<p>转自：<a href="http://lc87624.iteye.com/blog/1734089">http://lc87624.iteye.com/blog/1734089</a></p>
<p>&nbsp;</p>
<div id="blog_content" class="blog_content">使用数据库连接池时，免不了会遇到断网、数据库挂掉等异常状况，当网络或数据库恢复时，若无法恢复连接池中的连接，那必然会是一场灾难。 <br /><br />关于dbcp的自动重连配置，网上相关的资料也不少，通过以下资料，并对照官方文档中的参数说明，大致能了解各项配置的含义，我就不冗诉了，本文的目的主要是对问题排查的经过做个简单的记录。 <br />参考资料： <br />
<ul><li><a href="http://agapple.iteye.com/blog/791943" target="_blank">解读dbcp自动重连那些事</a></li><li><a href="http://commons.apache.org/dbcp/configuration.html" target="_blank">官方文档</a> </li></ul><br />测试环境： <br />
<ul><li>dbcp版本&#8212;&#8212;1.4</li><li>数据库&#8212;&#8212;postgresSQL 9.10（简称pg）</li><li>本地(以下称为client)操作系统及数据库服务器(以下称为server)操作系统均为linux</li><li>server位于内网环境，client需要通过vpn或网线直连内网才能访问数据库 </li></ul><br /><strong>首先模拟的是断网的情况</strong> <br />在本地测试dbcp的重连配置时，发现断网后，连接池无法重建连接，分别试过testOnBorrow和testWhileIdle两种validate方式，都没能解决，现象如下： <br />1. 正常启动应用，在server端通过"select * from pg_stat_activity"查看连接数，会有initialSize个来自client的IDLE连接。&#8212;&#8212;正常 <br />2. 在client端执行各种查询操作，连接数保持不变，且在server端的db log中能看到validate query。&#8212;&#8212;正常 <br />3. 手动切断vpn，client与server断开，查询无法返回结果；然后重连，再次查看连接数，连接数仍保持不变，且连接的创建时间为断网前，即是说连接池认为之前的连接仍然有效，没有销毁旧连接&amp;创建新连接。 <br />4. 此时在应用中执行各种查询操作，均无响应，等待一段时间后（分钟级），超时抛出异常： <br />Caused by: org.postgresql.util.PSQLException: An I/O error occured while sending to the backend. <br />Caused by: java.net.SocketException: Connection timed out. <br />5. 继续通过"select * from pg_stat_activity"查看连接数，隔一段时间后，连接消失。 <br /><br /><strong>问题：</strong>断网后，仍留在线程池内的连接是否有效？若有效，为什么网络恢复后查询无响应？若无效，为何线程池没有发现并重新创建有效连接？ <br /><strong>排查过程：</strong> <br />1.重连vpn后，通过netstat查看client至server的连接 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" href="http://lc87624.iteye.com/blog/1734089#"></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"></a></div></div>
<ol class="dp-j"><li><span>sudo&nbsp;netstat&nbsp;-antop&nbsp;|&nbsp;grep&nbsp;:</span><span class="number"><font color="#c00000">5432</font></span><span>&nbsp;&nbsp;|&nbsp;grep&nbsp;java&nbsp;&nbsp;</span></li></ol></div><em>注：5432为pg端口，grep java是为了过滤client上的其他形式的连接。</em> <br />发现连接数和在server端看到的连接数一致，且均为ESTABLISH状态。 <br />2. 但在client上执行查询时，通过tcpdump查看client发往server的tcp请求，并无任何请求产生。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" href="http://lc87624.iteye.com/blog/1734089#"></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"></a></div></div>
<ol class="dp-j"><li><span>sudo&nbsp;tcpdump&nbsp;-s&nbsp;</span><span class="number"><font color="#c00000">65535</font></span><span>&nbsp;-X&nbsp;-i&nbsp;eth0&nbsp;host&nbsp;xxx.xxx.xxx&nbsp;&nbsp;</span></li></ol></div>可见当前线程池中的连接实际上已经失效了，但dbcp仍认为它是有效的，因此仍在尝试用旧连接访问数据库，直至网络超时。 <br /><br />于是，开始怀疑是vpn的问题，将client接上网线直连内网后，再次重试上述步骤，只是把断网的方式由切断vpn换成了拔网线，发现这次使用断网前的连接能够正常访问数据库，于是断定是vpn的问题，猜测是重连vpn后，虽然client端ip没有变，但路由的路径已经变了，之前的连接无法复用，但dbcp并不知道。对网络细节不是太熟悉，就不多加揣测了。 <br /><br /><strong>接下来模拟数据库断开client连接的情况</strong> <br />由于pg采用的是进程模型，与数据库建立的每一个连接都是单独的一个进程，故尝试采用kill进程的方式模拟数据库断开连接。 <br />预期的结果是：kill掉一个连接进程后，dbcp通过validate query发现该连接失效，将销毁该连接并重新创建新连接。 <br />但实际情况确是：kill掉一个连接后，所有连接全部被销毁。 <br /><strong>问题：</strong>究竟是数据库还是dbcp销毁了所有连接? <br /><strong>排查过程：</strong> <br />熟悉pg的同事认为pg之所以采用进程模型，就是为了避免连接之间的影响，因此不可能发生kill一个连接，其他连接也被销毁的情况。在这个理论前提下，问题就变得很诡异，因为dbcp的validate肯定是针对一个连接的，也不可能会在validate一个连接失效的情况下销毁所有连接，于是越想越偏，甚至开始怀疑是pg的jdbc driver有问题，最终放弃了深究。 <br />但我总觉得有点不太对劲，于是推翻之前的前提，开始怀疑是pg销毁了所有连接。于是，在使用连接池的应用之外，通过pg的数据库客户端psql连接db，这就建立了一个与dbcp无关的连接，接着继续在server端kill了一个连接池中的连接，继而发现psql创建的连接也被销毁了，这就能确定是pg在销毁连接，因为dbcp不可能控制自身范围之外的连接。 <br />后来才知道，pg之所以会这么做，是因为我们kill连接时使用的是kill -9（简称9杀），9杀太过粗暴，pg会重启很多内部进程，以保证所有进程正常，之前的连接也将会丢失，换用普通的kill命令，则不会发生以上情况。可见9杀很多情况下是十分危险的，试想一个线上db，若是9杀一个连接，后果不堪设想。。。 <br /><br /><strong>总结</strong> <br />说是dbcp问题排查，但大家可以看到最终问题的根源都跟dbcp没有什么关系。实际工作中的很多问题，关联的因素众多，需要有各方面的知识储备才能找到真正问题根源，否则就会把问题归结到一个自己不太了解的领域。 <br />另外，看到<a href="http://agapple.iteye.com/blog/772507" target="_blank">dbcp基本配置和重连配置</a>这篇文章中对连接池重连有两句不错的总结，引用一下： <br />
<div class="quote_title">引用</div>
<div class="quote_div">1. 数据库意外重启后，原先的数据库连接池能自动废弃老的无用的链接，建立新的数据库链接 <br />2. 网络异常中断后，原先的建立的tcp链接，应该能进行自动切换</div><br /><br />最后附上测试使用的dbcp配置。 <br />testOnBorrow配置： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://lc87624.iteye.com/blog/1734089#"></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"></a></div></div>
<ol class="dp-xml"><li><span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">bean</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"dataSource"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">class</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.apache.commons.dbcp.BasicDataSource"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">destroy-method</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"close"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"driverClassName"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${jdbc.driver}"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"url"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${jdbc.url}"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"username"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${jdbc.user}"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"password"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${jdbc.passwd}"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"removeAbandoned"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"true"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"initialSize"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"10"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"maxIdle"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"10"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"minIdle"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"10"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"maxActive"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"30"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"maxWait"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"30000"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=&nbsp;</span><span class="attribute-value"><font color="#0000ff">"testWhileIdle"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"false"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=&nbsp;</span><span class="attribute-value"><font color="#0000ff">"testOnBorrow"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"true"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=&nbsp;</span><span class="attribute-value"><font color="#0000ff">"testOnReturn"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"false"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=&nbsp;</span><span class="attribute-value"><font color="#0000ff">"validationQuery"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"select&nbsp;1"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments">&lt;!--&nbsp;&lt;property&nbsp;name=&nbsp;"validationQueryTimeout"&nbsp;value="1"&nbsp;/&gt;&nbsp;配置已失效--&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li></ol></div>testWhileIdle配置： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://lc87624.iteye.com/blog/1734089#"></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"></a></div></div>
<ol class="dp-xml"><li><span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">bean</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"dataSource"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">class</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.apache.commons.dbcp.BasicDataSource"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">destroy-method</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"close"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"driverClassName"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${jdbc.driver}"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"url"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${jdbc.url}"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"username"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${jdbc.user}"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"password"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${jdbc.passwd}"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"removeAbandoned"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"true"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"initialSize"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"10"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"maxIdle"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"10"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"minIdle"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"10"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"maxActive"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"30"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"maxWait"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"30000"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=&nbsp;</span><span class="attribute-value"><font color="#0000ff">"testWhileIdle"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"true"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=&nbsp;</span><span class="attribute-value"><font color="#0000ff">"testOnBorrow"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"false"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=&nbsp;</span><span class="attribute-value"><font color="#0000ff">"testOnReturn"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"false"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=&nbsp;</span><span class="attribute-value"><font color="#0000ff">"validationQuery"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"select&nbsp;1"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments">&lt;!--&nbsp;&lt;property&nbsp;name=&nbsp;"validationQueryTimeout"&nbsp;value="1"&nbsp;/&gt;&nbsp;配置已失效--&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=&nbsp;</span><span class="attribute-value"><font color="#0000ff">"timeBetweenEvictionRunsMillis"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"30000"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=&nbsp;</span><span class="attribute-value"><font color="#0000ff">"numTestsPerEvictionRun"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"30"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"minEvictableIdleTimeMillis"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"1800000"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li></ol></div><pre style="display: none" class="xml" title="dbcp重连问题排查" pre_index="3" source_url="http://lc87624.iteye.com/blog/1734089" codeable_type="Blog" codeable_id="1734089" name="code">&nbsp;</pre>注：testOnBorrow只会发现当前连接失效，再创建一个连接供当前查询使用，而testWhileIdle会定时校验numTestsPerEvictionRun个连接，只要发现连接失效，就将其移除再重新创建。 </div>
<p>&nbsp;</p><img src ="http://www.blogjava.net/freeman1984/aggbug/400263.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2013-06-06 09:38 <a href="http://www.blogjava.net/freeman1984/archive/2013/06/06/400263.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>11g oracle 用户密码过期问题</title><link>http://www.blogjava.net/freeman1984/archive/2013/04/23/398301.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Tue, 23 Apr 2013 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2013/04/23/398301.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/398301.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2013/04/23/398301.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/398301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/398301.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 11g oracle 用户密码过期问题&nbsp;&nbsp;<a href='http://www.blogjava.net/freeman1984/archive/2013/04/23/398301.html'>阅读全文</a><img src ="http://www.blogjava.net/freeman1984/aggbug/398301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2013-04-23 17:25 <a href="http://www.blogjava.net/freeman1984/archive/2013/04/23/398301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ERROR 1049 (42000): Unknown database 'root' 处理</title><link>http://www.blogjava.net/freeman1984/archive/2013/03/29/397132.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 29 Mar 2013 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2013/03/29/397132.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/397132.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2013/03/29/397132.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/397132.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/397132.html</trackback:ping><description><![CDATA[本地启动mysql:<br />命令：mysql&nbsp; -u root -p root -P 8066 -v -S&nbsp; /opt/app/DataBase/mysql.sock <br />报错：ERROR 1049 (42000): Unknown database 'root'<br />解决办法：<br />命令的密码参数部分：-p root 修改为-proot 中间没有空格。<br /><br />即可！<img src ="http://www.blogjava.net/freeman1984/aggbug/397132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2013-03-29 11:01 <a href="http://www.blogjava.net/freeman1984/archive/2013/03/29/397132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql 1130 错误 处理</title><link>http://www.blogjava.net/freeman1984/archive/2013/03/29/397131.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 29 Mar 2013 02:57:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2013/03/29/397131.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/397131.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2013/03/29/397131.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/397131.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/397131.html</trackback:ping><description><![CDATA[<p><strong>解决远程连接mysql错误1130代码的方法 <br />转自：<a href="http://hi.baidu.com/qkcan/item/1527cf08663d388803ce1be2">http://hi.baidu.com/qkcan/item/1527cf08663d388803ce1be2</a>。其中加粗的部分必须执行<br /></strong><br />今天在用远程连接Mysql服务器的数据库，不管怎么弄都是连接不到，错误代码是1130，ERROR 1130: Host 192.168.2.159 is not allowed to connect to this MySQL server <br />猜想是无法给远程连接的用户权限问题。结果这样子操作mysql库，即可解决。在本机登入mysql后，更改 &#8220;mysql&#8221; 数据库里的 &#8220;user&#8221; 表里的 &#8220;host&#8221; 项，从&#8221;localhost&#8221;改称'%'。。<br />mysql -u root -p<br />mysql&gt;use mysql;<br />mysql&gt;select 'host' from user where user='root';<br />mysql&gt;update user set host = '%' where user ='root';<br />mysql&gt;<strong>flush privileges;<br /></strong>mysql&gt;select 'host'&nbsp;&nbsp; from user where user='root';<br />第一句是以权限用户root登录<br />第二句：选择mysql库<br />第三句：查看mysql库中的user表的host值（即可进行连接访问的主机/IP名称）<br />第四句：修改host值（以通配符%的内容增加主机/IP地址），当然也可以直接增加IP地址<br />第五句：刷新MySQL的系统权限相关表<br />第六句：再重新查看user表时，有修改。。<br />重起mysql服务即可完成。 </p>
<p>&nbsp;</p>
<p>============================</p>
<p>一、通过MySQL-Front或mysql administrator连接mysql的时候发生的这个错误<br /><br />ERROR 1130: Host ***.***.***.*** is not allowed to connect to this MySQL server<br /><br />说明所连接的用户帐号没有远程连接的权限，只能在本机(localhost)登录。<br /><br />需更改 mysql 数据库里的 user表里的 host项<br />把localhost改称%<br /><br />首先按下面的步骤登录Mysql服务器<br /><br />登录mysql需要切换到dos下的mysql的bin目录，进行如下操作：<br /><br />语法格式：mysql -h host_name -u user_name -p password&nbsp;&nbsp; （本机的话-h 和host_name可省）<br /><br />例如：<br /><br />C:\program files\mysql\mysql server 5.0\bin&gt;mysql -u root -p<br />Enter password:******<br />先输入用户名和密码登陆要求（-p），回车后等出现"Enter password:"，再输入密码回车，这样就可以<br />成功登陆mysql，否则将会登陆失败。<br /><br />登陆成功后会显示如下信息及Mysql标识符：<br /><br />Welcome to the MySQL monitor. Commands end with ; or \g.<br />Your MySQL connection id is 1 to server version: 5.0.1-nt<br /><br />Type 'help;' or '\h' for help. Type '\c' to clear the buffer.<br /><br />mysql&gt;<br /><br /><br />标识符"mysql&gt;"，当你看到这个出现在窗口的最左边的顶格时，这就是告诉你，你可以输入命令进行操作了。<br /><br />mysql&gt; \s 查看版本信息<br />mysql&gt; \q or mysql&gt; quit 退出mysql数据库服务器<br />mysql&gt; \h or mysql&gt; help 查看帮助（其他的数据库服务器相关命令）<br /><br />二、登录成功后可通过以下步骤对用户进行权限更改<br /><br />mysql&gt;use mysql;<br /><br />mysql&gt;update user set host = '%'&nbsp;&nbsp; where user ='root';<br /><br />mysql&gt;flush privileges;<br /><br />mysql&gt;select 'host','user' from user where user='root';<br /><br />mysql&gt;quit<br /><br /><br />退出后会回到DOS正常的提示符状态，此时可以通过远程连接Mysql了！</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>========================================</p>
<p>&nbsp;</p>
<p>&nbsp;</p>MySQL 用户帐号的修改 error 11302007-09-07 09:18 
<p>MySQL上的一个数据库要备份，装了个MySQL的gui工具。打开"MySQL Administrator"工具，填好用户名和密码却登录不了，老是报这个错&#8220;ERROR 1130: Host 'lijuan-' is not allowed to connect to this MySQL server&#8221;。网上查了下，有这两个方法解决： 解决方法：<br />1。 改表法。可能是你的帐号不允许从远程登陆，只能在localhost。这个时候只要在localhost的那台电脑，登入mysql后，更改 "mysql" 数据库里的 "user" 表里的 "host" 项，从"localhost"改称"%" <br />mysql -u root -pvmwaremysql&gt;use mysql;mysql&gt;update user set host = '%' where user = 'root';mysql&gt;select host, user from user; <br />2. 授权法。例如，你想myuser使用mypassword从任何主机连接到mysql服务器的话。 <br />GRANT ALL PRIVILEGES ON *.* TO IDENTIFIED BY 'mypassword' WITH GRANT OPTION; 如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器，并使用mypassword作为密码 GRANT ALL PRIVILEGES ON *.* TO IDENTIFIED BY 'mypassword' WITH GRANT OPTION; &nbsp;&nbsp;&nbsp;&nbsp; 我的mysql.user里root用户的host果然是localhost，先用改表法给localhost改成&#8220;％&#8221;，还是不行，仍然报1130的错误，又按&#8220;从任何主机连接到mysql服务器&#8221;方法授权，还是报一样的错，最后给自己的ip授权之后，终于登录上了。。。。 
<p>&nbsp;&nbsp;&nbsp;&nbsp; 乎乎。。。</p>
<p>mysql的ERROR 1045 在上面情况后如再出现客户段1045可在服务器执行如下</p>
<p>UPDATE user SET Password=PASSWORD('123456') where USER='myuser';<br />FLUSH PRIVILEGES;</p><img src ="http://www.blogjava.net/freeman1984/aggbug/397131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2013-03-29 10:57 <a href="http://www.blogjava.net/freeman1984/archive/2013/03/29/397131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle ORA-39212异常</title><link>http://www.blogjava.net/freeman1984/archive/2013/02/20/395438.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Wed, 20 Feb 2013 02:10:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2013/02/20/395438.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/395438.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2013/02/20/395438.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/395438.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/395438.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ORA-39212&nbsp;&nbsp;<a href='http://www.blogjava.net/freeman1984/archive/2013/02/20/395438.html'>阅读全文</a><img src ="http://www.blogjava.net/freeman1984/aggbug/395438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2013-02-20 10:10 <a href="http://www.blogjava.net/freeman1984/archive/2013/02/20/395438.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring jdbc(java类型和oracle类型的转换)</title><link>http://www.blogjava.net/freeman1984/archive/2013/01/06/393854.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Sun, 06 Jan 2013 03:09:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2013/01/06/393854.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/393854.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2013/01/06/393854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/393854.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/393854.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; spring在执行sql语句时，会根据用户提供的类型参数来进行sql参数的绑定，例如：Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->public&nbsp;int&nbsp;update(String&nbsp;sql,&nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/freeman1984/archive/2013/01/06/393854.html'>阅读全文</a><img src ="http://www.blogjava.net/freeman1984/aggbug/393854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2013-01-06 11:09 <a href="http://www.blogjava.net/freeman1984/archive/2013/01/06/393854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle BEQ类型的进程</title><link>http://www.blogjava.net/freeman1984/archive/2012/12/10/392735.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Mon, 10 Dec 2012 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2012/12/10/392735.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/392735.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2012/12/10/392735.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/392735.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/392735.html</trackback:ping><description><![CDATA[<br />
<div style="line-height: 1.3" id="detail" class="detail">
<p>
<div>最近有人问我这个问题,我以前在国外的一个认坛上看到这方面的介绍,在sqlplus中输入conn / as sysdba,这时候由sqlplus启动一个服务器进程，通过ps命令查看到这这个服务器进程的protocol=beq 而不是TCP，beq是bequeath protocol的简称，是一个sql*net protocol有点类似于IPC,仅仅是作为本地连接才能使，即客户机和服务器程序在同一个服务器上。beq可以在不需要listener的情况一下，建立一个专用连接。这个时候共享内存和信号灯都没有创建。<br />如下<br />oracle&nbsp;&nbsp;&nbsp; 4574&nbsp; 4573&nbsp; 0 17:05 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00:00:00 oracleslszy (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))<br /></div>
<p>其他远程的连接集成显示如下：<br />oracle&nbsp;&nbsp; 23520&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp; 0 15:25 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00:00:00 oracleslszy (LOCAL=NO)</p></div><img src ="http://www.blogjava.net/freeman1984/aggbug/392735.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2012-12-10 17:13 <a href="http://www.blogjava.net/freeman1984/archive/2012/12/10/392735.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 字符集的查看和修改</title><link>http://www.blogjava.net/freeman1984/archive/2012/10/15/389561.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Mon, 15 Oct 2012 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2012/10/15/389561.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/389561.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2012/10/15/389561.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/389561.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/389561.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转自：http://www.cnblogs.com/rootq/articles/2049324.html一、什么是Oracle字符集 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储，处理，检索数据。它使数据库工具，错误消息，排序...&nbsp;&nbsp;<a href='http://www.blogjava.net/freeman1984/archive/2012/10/15/389561.html'>阅读全文</a><img src ="http://www.blogjava.net/freeman1984/aggbug/389561.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2012-10-15 11:37 <a href="http://www.blogjava.net/freeman1984/archive/2012/10/15/389561.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在RedHat 5下安装Oracle 10g详解(转)</title><link>http://www.blogjava.net/freeman1984/archive/2012/09/14/387718.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 14 Sep 2012 05:26:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2012/09/14/387718.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/387718.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2012/09/14/387718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/387718.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/387718.html</trackback:ping><description><![CDATA[<strong><span style="font-size: small;">一、安装环境</span><br /></strong>我是在vmware里虚拟的RHEL5，分配的内存1G，SWAP分区1G，建议你最好把SWAP分区改成2G。否则安装时，到了测试的步骤会提示监测失败。（当然，如果你强行安装一样没问题）<br /><br /><strong><span style="font-size: small;">二、安装Oracle 10g Release2 前的配置</span></strong><br /><br /><strong>1. 安装Oracle 10g R2所需的软件包</strong><br /><br /><table style="width: 95%;" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1"><tbody><tr><td><p><code><span>#</span> cd <span>/</span>mnt<span>/</span>cdrom<span>/</span><span>Server</span><span>/</span><br /><span>#</span> rpm <span>-</span>Uvh setarch<span>-</span>2<span>*</span><br /><span>#</span> rpm <span>-</span>Uvh make<span>-</span>3<span>*</span><br /><span>#</span> rpm <span>-</span>Uvh glibc<span>-</span>2<span>*</span><br /><span>#</span> rpm <span>-</span>Uvh libaio<span>-</span>0<span>*</span><br /><span>#</span> rpm <span>-</span>Uvh compat<span>-</span>libstdc<span>+</span><span>+</span><span>-</span>33<span>-</span>3<span>*</span><br /><span>#</span> rpm <span>-</span>Uvh compat<span>-</span>gcc<span>-</span>34<span>-</span>3<span>*</span><br /><span>#</span> rpm <span>-</span>Uvh compat<span>-</span>gcc<span>-</span>34<span>-</span>c<span>+</span><span>+</span><span>-</span>3<span>*</span><br /><span>#</span> rpm <span>-</span>Uvh gcc<span>-</span>4<span>*</span><br /><span>#</span> rpm <span>-</span>Uvh libXp<span>-</span>1<span>*</span><br /><span>#</span> rpm <span>-</span>Uvh openmotif22<span>-</span><span>*</span><br /><span>#</span> rpm <span>-</span>Uvh compat<span>-</span>db<span>-</span>4<span>*</span><br /></code></p></td></tr></tbody></table><p>其中除了openmotif22-2.2.3-18和compat-db-4.2.52-5.1在第三张盘上，其余的包都在第一张盘上。</p><p><strong>2. 修改/etc/redhat-release文件</strong></p><p>因为Oracle 10g官方只支持到RHEL4为止，所以需要更改版本说明，编辑/etc/redhat-release文件,删除Red Hat Enterprise Linux Server release 5 (Tikanga)，改为redhat-4</p><p><strong>3.修改内核参数</strong></p><p>#vi /etc/sysctl.conf</p><table style="width: 95%;" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1"><tbody><tr><td><p><code><span>kernel<span>.</span>shmmni <span>=</span> 4096<br />kernel<span>.</span>sem <span>=</span> 250 32000 100 128<br />fs<span>.</span><span>file</span><span>-</span>max <span>=</span> 65536<br />net<span>.</span>ipv4<span>.</span>ip_local_port_range <span>=</span> 1024 65000<br />net<span>.</span>core<span>.</span>rmem_default<span>=</span>262144<br />net<span>.</span>core<span>.</span>rmem_max<span>=</span>262144<br />net<span>.</span>core<span>.</span>wmem_default<span>=</span>262144<br />net<span>.</span>core<span>.</span>wmem_max<span>=</span>262144</span></code></p></td></tr></tbody></table><p>使更改立即生效，使用下面的命令：</p><p>#sysctl -p</p><p><strong>4.建立安装Oracle需要的用户，组，及目录</strong></p><table style="width: 95%;" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1"><tbody><tr><td><p><code><span>#</span>groupadd oinstall<br /><span>#</span>groupadd dba<br /><span>#</span>groupadd oper<br /><span>#</span>useradd <span>-</span>g oinstall <span>-</span>G dba oracle<br /><span>#</span>passwd oracle<br /><br /><span>#</span>mkdir <span>/</span>oracle<br /><span>#</span>chown <span>-</span>R oracle<span>:</span>oinstall <span>/</span>oracle<br /><span>#</span>chmod <span>-</span>R 775 <span>/</span>oracle</code></p></td></tr></tbody></table><p>安装oracle的目录建议安装在一个单独的分区或者磁盘上。</p><p><strong>5.设置oracle用户的shell limit</strong></p><p>#vi /etc/security/limits.conf&nbsp;&nbsp;&nbsp;&nbsp; </p><table style="width: 95%;" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1"><tbody><tr><td><p><code><span>oracle soft nproc 2047<br />oracle hard nproc 16384<br />oracle soft nofile 1024<br />oracle hard nofile 65536</span></code></p></td></tr></tbody></table><p>接下来更改/etc/pam.d/login文件，添加下面的内容，使shell limit生效：</p><p>#vi /etc/pam.d/login</p><table style="width: 95%;" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1"><tbody><tr><td><p><code><span>session</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pam_limits<span>.</span>so</code></p></td></tr></tbody></table><p><strong>6.配置IP地址</strong></p><p>安装RHEL的时候最好采用静态IP地址，如果当时选择的是DHCP，现在需要更改/etc/sysconfig/network-scripts/ifcfg-eth0文件</p><p><table style="width: 95%;" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1"><tbody><tr><td><p><code><span style="font-family: NSimsun;"><span>[</span>root<span>@</span>TSM54<span>-</span>Test network<span>-</span>scripts<span>]</span><span>#</span> cat ifcfg<span>-</span>eth0<br /><span>#</span> Advanced Micro Devices <span>[</span>AMD<span>]</span> 79c970 <span>[</span>PCnet32 LANCE<span>]</span><br />DEVICE<span>=</span>eth0<br />BOOTPROTO<span>=</span>static<br />HWADDR<span>=</span>00<span>:</span>0C<span>:</span>29<span>:</span>4B<span>:</span>17<span>:</span>C4<br />ONBOOT<span>=</span>yes<br />IPADDR<span>=</span>192.168<span>.</span>68<span>.</span>98<br />NETMASK<span>=</span>255<span>.</span>255<span>.</span>255<span>.</span>0<br />GATEWAY<span>=</span>192.168<span>.</span>68<span>.</span>10</span></code></p></td></tr></tbody></table><p>&nbsp;</p><p><strong>7.配置oracle用户的环境变量</strong></p><p>下面的操作，该用oracle用户登陆执行了。</p><p>为了防止安装oracle时出现乱码，先把语言环境改为英文,在终端里输入:</p><table style="width: 95%;" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1"><tbody><tr><td><p><code><span>[</span>oracle<span>@</span>TSM54<span>-</span>TEST <span>~</span><span>]</span><span>$</span>export LC_CTYPE<span>=</span>en_US<span>.</span>UTF<span>-</span>8</code></p></td></tr></tbody></table><p>接下来，编辑/home/oracle目录下的.bash_profile文件，添加如下内容：</p><table style="width: 95%;" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1"><tbody><tr><td><p><code><span>export ORACLE_BASE<span>=</span><span>/</span>oracle<br />export ORACLE_HOME<span>=</span><span>$</span>ORACLE_BASE<span>/</span>product<span>/</span>10<span>.</span>2<span>.</span>0<span>/</span>db_1<br />export ORACLE_SID<span>=</span>orcl<br />export PATH<span>=</span><span>$</span>PATH<span>:</span><span>$</span>ORACLE_HOME<span>/</span>bin<br />export LD_LIBRARY_PATH<span>=</span><span>$</span>ORACLE_HOME<span>/</span>lib<span>:</span><span>/</span>lib<span>:</span><span>/</span>usr<span>/</span>lib<br />CLASSPATH<span>=</span><span>$</span>ORACLE_HOME<span>/</span>JRE<span>:</span><span>$</span>ORACLE_HOME<span>/</span>jlib<span>:</span><span>$</span>ORACLE_HOME<span>/</span>rdbms<span>/</span>jlib<br />export CLASSPATH</span></code></p><p><code><span><br />if <span>[</span> $USER <span>=</span> <span>"oracle"</span> <span>]</span><span>;</span> then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if <span>[</span> $SHELL <span>=</span> <span>"/bin/ksh"</span> <span>]</span><span>;</span> then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ulimit <span>-</span><span>p</span> 16384<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ulimit <span>-</span>n 65536<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ulimit <span>-</span><span>u</span> 16384 <span>-</span>n 65536<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br />fi<br /></span></code></p></td></tr></tbody></table><p> </p><p><strong><span style="font-size: small;">三.安装Oracle 10g</span></strong></p><p>我把10201_database_linux32.zip放在/opt目录下，并通过</p><p>#unzip 10201_database_linux32.zip解压，现在使用oracle用户到/opt/database目录下执行安装:</p><table style="width: 95%;" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1"><tbody><tr><td><p><code><span>[</span>oracle<span>@</span>TSM54<span>-</span>Test opt<span>]</span><span>$</span> cd <span>/</span>opt<span>/</span>database<span>/</span><br /><span>[</span>oracle<span>@</span>TSM54<span>-</span>Test database<span>]</span><span>$</span> ls<br />doc install response runInstaller stage welcome<span>.</span><span>html</span><br /><span>[</span>oracle<span>@</span>TSM54<span>-</span>Test database<span>]</span><span>$</span> <span>.</span><span>/</span>runInstaller<br /></code></p></td></tr></tbody></table><p>1.选择安装类型，这里我选择高级安装,如下图所示：</p><p><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175012.jpg" width="633" height="329" /></p><p>2.指定证书存放目录，如图所示：</p><p><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175019.jpg" width="579" height="311" /></p><p>3.选择安装的数据库类型及oracle所支持的语言，这里选择企业版,语言选择英文和简体中文,如下图所示：</p><p><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175033.jpg" width="563" height="328" /></p><p>4.指定oracle环境变量，安装路径。因为我们在.bash_profile中已经声明，所以这里会自动填充.如下图所示：</p><p><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175040.jpg" width="577" height="317" /></p><p>5.Oracle开始进行安装前的检查工作，如下图所示：</p><p><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175048.jpg" width="576" height="320" /></p><div>6.选择配置选项，如下图所示：</div><div><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175057.jpg" width="573" height="315" /></div><div> </div><div>7.选择创建的数据库模式，如下图所示：</div><div> </div><div><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175107.jpg" width="577" height="318" /></div><div> </div><div>8.指定数据库配置的相关选项（SID、字符集等），如下图所示：</div><div><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175115.jpg" width="576" height="315" /></div><div> </div><div>9.选择数据库管理选项，如下图所示：</div><div> </div><div><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175124.jpg" width="578" height="314" /></div><div> </div><div>10.指定数据库存储选项，如下图所示：</div><div><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175133.jpg" width="577" height="314" /></div><div> </div><div>11.指定数据库备份回复选项，如下图所示：</div><div> </div><div><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175143.jpg" width="566" height="308" /></div><div> </div><div>12. 指定数据库相关用户密码,如下图所示：</div><div><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175151.jpg" width="575" height="309" /></div><div> </div><div>13.显示安装概要，如下图所示：</div><div><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175203.jpg" width="579" height="310" /></div><div> </div><div>14.开始安装，如下图所示：</div><div><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175212.jpg" width="569" height="321" /></div><div> </div><div><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175221.jpg" width="569" height="320" /></div><div> </div><div><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175231.jpg" width="569" height="313" /></div><div> </div><div>15. 上面的窗口点击OK后，会出现下图显示的内容：</div><div>需要root权限执行</div><div>#/oracle/oraInventory/orainstRoot.sh</div><div>#/oracle/product/10.2.0/db_1/root.sh</div><div> </div><div><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175240.jpg" width="573" height="315" /></div><div> </div><div>16.安装结束，如下图所示：</div><div><img alt="" src="http://blogimg.chinaunix.net/blog/upfile2/080918175248.jpg" width="565" height="309" /></div><div> </div><div><strong>17.安装完成后，恢复语言环境以及版本信息</strong></div><div>#export <span style="font-family: NSimsun;">LC_CTYPE</span>=zh_CN.UTF-8</div><div>#vi /etc/redhat-release</div><div>Red Hat Enterprise Linux Server release 5 (Tikanga)</div><div> </div><div> </div><div><strong><span style="font-size: small;">四、后续</span></strong></div><div> </div><div><strong>1.安装完成后，首先应该启动监听器。</strong></div><div>监听器接受客户端的连接请求，并在验证证书后创建数据库连接。要使用OEM或iSQL*PLUS，必须先启动监听器。</div><div> </div><table style="width: 95%;" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1"><tbody><tr><td><p><code><span>[</span>oracle<span>@</span>TSM54<span>-</span>Test database<span>]</span><span>$</span> lsnrctl <span>start</span><br /><span>[</span>oracle<span>@</span>TSM54<span>-</span>Test database<span>]</span><span>$</span> lsnrctl stop<br /></code></p></td></tr></tbody></table><p><strong>2.使用Oracle Enterprise Manager 10g进行数据库控制</strong></p><p>启动和停止OEM的命令为：</p><p><table style="width: 95%;" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1"><tbody><tr><td><p><code><span style="font-family: NSimsun;"><span>[</span>oracle<span>@</span>TSM54<span>-</span>Test database<span>]</span><span>$</span>emctl <span>start</span> dbconsole<br /><span>[</span>oracle<span>@</span>TSM54<span>-</span>Test database<span>]</span><span>$</span>emctl stop dbconsole</span></code></p></td></tr></tbody></table><p>&nbsp;</p><p> </p><p>在web浏览器中，输入：</p><p><a href="http://192.168.68.98:1158/em">http://192.168.68.98:1158/em</a> （如果服务器没有进行DNS解析，则可以用IP地址）</p><p>用户名：<span style="color: rgb(0, 0, 255);">SYS</span></p><p>口令：&lt;<span style="color: rgb(0, 0, 255);">安装过程中建立的口令&gt;</span></p><p>连接为：<span style="color: rgb(0, 0, 255);">SYSDBA</span></p><p> </p><p><strong>3.使用iSQL*Plus访问数据库</strong></p><p>启动和停止iSQL*Plus命令：</p><table style="width: 95%;" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1"><tbody><tr><td><p><code><span>[</span>oracle<span>@</span>TSM54<span>-</span>Test database<span>]</span><span>$</span>isqlplusctl <span>start</span><br /><span>[</span>oracle<span>@</span>TSM54<span>-</span>Test database<span>]</span><span>$</span>isqlplusctl stop</code></p></td></tr></tbody></table><p>iSQL*Plus是历史悠久的SQL*Plus交互式工具的基于web的版本，用于访问数据库。要使用iSQL*Plus，请单击OEM控制台相关连接部分中的iSQL*Plus链接，或将浏览器指向安装过程中提供的iSQL*Plus URL。</p><p>在web浏览器中，输入：</p><p><a href="http://192.168.68.98:5560/isqlplus">http://192.168.68.98:5560/isqlplus</a></p><p>用户名：<span style="color: rgb(0, 0, 255);">SYSTEM</span></p><p>口令：&lt;<span style="color: rgb(0, 0, 255);">安装过程中创建的口令&gt;</span></p><p>连接标识：<span style="color: rgb(0, 0, 255);">orcl</span></p><p><strong>4.启动和停止数据库</strong></p><p>启动和停止数据库的最简单方法是从 OEM 控制台启动和停止。要从命令行执行此操作，请在以 oracle 身份登录后使用 SQL*Plus，如下所示：</p><p>启动：</p><pre>$ <span style="color: rgb(0, 0, 255);">sqlplus</span>

SQL*Plus:Release 10.1.0.2.0 - Production on Sun Jun 13 22:27:48 2004

Copyright (c) 1982, 2004, Oracle.All rights reserved.

Enter user-name:<span style="color: rgb(0, 0, 255);">/ as sysdba</span>
Connected to an idle instance.

SQL&gt; <span style="color: rgb(0, 0, 255);">startup</span>
ORACLE instance started.

Total System Global Area  188743680 bytes
Fixed Size                   778036 bytes
Variable Size             162275532 bytes
Database Buffers           25165824 bytes

Redo Buffers                 524288 bytes
Database mounted.
Database opened.
SQL&gt; <span style="color: rgb(0, 0, 255);">exit</span>
</pre><p>Shutdown:</p><pre>$ <span style="color: rgb(0, 0, 255);">sqlplus</span>

SQL*Plus:Release 10.1.0.2.0 - Production on Sun Jun 13 22:25:55 2004

Copyright (c) 1982, 2004, Oracle.All rights reserved.

Enter user-name:<span style="color: rgb(0, 0, 255);">/ as sysdba</span>

Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL&gt; <span style="color: rgb(0, 0, 255);">shutdown immediate</span>
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL&gt; <span style="color: rgb(0, 0, 255);">exit</span>
</pre><pre>注：本文的图是借用了<a href="http://www.ouyaoxiazai.com/article/24/239.html">http://www.ouyaoxiazai.com/article/24/239.html</a>里的图片。</pre><div><span style="font-size: small;"><strong>五、卸载ORACLE</strong></span></div><div> </div><div>1. 运行 $ORACLE_HOME/bin/localconfig delete<br />2. rm -rf $ORACLE_BASE/*<br />3. rm -f /etc/oraInst.loc /etc/oratab<br />4. rm -rf /etc/oracle<br />5. rm -f /etc/inittab.cssd<br />6. rm -f /usr/local/bin/coraenv /usr/local/bin/dbhome /usr/local/bin/oraenv</div><div>7. 删除oracle用户和组。</div><div> </div><div>注：卸载方法是来自google。我曾用此方法删除oracle 11g（安装11的时候选择的是ASM）。</div><div> </div><div> </div><div><span style="font-size: small;"><strong>六、关于Oracle 11g Release 1 的安装</strong></span></div><div> </div><div>Oracle 11gR1 已经支持RHEL5了，所以不用再更改redhat-release文件。</div><div>另外安装所依赖的包有如下：</div><div> </div><table style="width: 95%;" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1"><tbody><tr><td><p><code><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; binutils<span>-</span>2<span>.</span>17<span>.</span>50<span>.</span>0<span>.</span>6<span>-</span>2<span>.</span>el5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; compat<span>-</span>libstdc<span>+</span><span>+</span><span>-</span>33<span>-</span>3<span>.</span>2<span>.</span>3<span>-</span>61<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elfutils<span>-</span>libelf<span>-</span>0<span>.</span>125<span>-</span>3<span>.</span>el5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elfutils<span>-</span>libelf<span>-</span>devel<span>-</span>0<span>.</span>125<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; glibc<span>-</span>2<span>.</span>5<span>-</span>12<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; glibc<span>-</span>common<span>-</span>2<span>.</span>5<span>-</span>12<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; glibc<span>-</span>devel<span>-</span>2<span>.</span>5<span>-</span>12<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gcc<span>-</span>4<span>.</span>1<span>.</span>1<span>-</span>52<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gcc<span>-</span>c<span>+</span><span>+</span><span>-</span>4<span>.</span>1<span>.</span>1<span>-</span>52<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; libaio<span>-</span>0<span>.</span>3<span>.</span>106<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; libaio<span>-</span>devel<span>-</span>0<span>.</span>3<span>.</span>106 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; libgcc<span>-</span>4<span>.</span>1<span>.</span>1<span>-</span>52<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; libstdc<span>+</span><span>+</span><span>-</span>4<span>.</span>1<span>.</span>1 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; libstdc<span>+</span><span>+</span><span>-</span>devel<span>-</span>4<span>.</span>1<span>.</span>1<span>-</span>52<span>.</span>e15<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; make<span>-</span>3<span>.</span>81<span>-</span>1<span>.</span>1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sysstat<span>-</span>7<span>.</span>0<span>.</span>0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unixODBC<span>-</span>2<span>.</span>2<span>.</span>11<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unixODBC<span>-</span>devel<span>-</span>2<span>.</span>2<span>.</span>11</span></code></p></td></tr></tbody></table><p>其它的步骤就跟安装Oracle 10gR2 没有什么区别了。</p><img src ="http://www.blogjava.net/freeman1984/aggbug/387718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2012-09-14 13:26 <a href="http://www.blogjava.net/freeman1984/archive/2012/09/14/387718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xhost: unable to open display linux下安装oracle (转)</title><link>http://www.blogjava.net/freeman1984/archive/2012/05/22/378848.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Tue, 22 May 2012 08:02:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2012/05/22/378848.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/378848.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2012/05/22/378848.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/378848.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/378848.html</trackback:ping><description><![CDATA[<p>1、&nbsp;以root用户登录</p>
<p>输入命令xdpyinfo，记录下里面的name of display：后的字符串，如 name of display：127.0.0.1：1.0 </p>
<p>在执行xhost +命令（使得所有客户都可以访问）</p>
<p>返回信息为： <br />access control disabled,clients can connect from any host </p>
<p>如果xhost +不能执行，可以输入命令export DISPLAY=:0执行一下</p>
<p>再执行xhost +</p>
<p>xhost +&nbsp;ip （name表示那个ip机器可以使用该服务）</p>
<p>2、以oracle用户登录</p>
<p>如果前面root登录下执行xdpyinfo后的name of display:后的字符串是127.0.0.1:1.0</p>
<p>那么在该oracle用户下执行一下export DISPLAY=:1.0</p>
<p>然后再执行xdpyinfo命令，如果能出现信息说明你已经成功了</p>
<p>这样估计就可以解决linux下安装oracle出现的xhost问题</p><br /><br />虚拟机上测试成功<br />转自：<a href="http://blog.csdn.net/lishamao/article/details/6886025">http://blog.csdn.net/lishamao/article/details/6886025</a><img src ="http://www.blogjava.net/freeman1984/aggbug/378848.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2012-05-22 16:02 <a href="http://www.blogjava.net/freeman1984/archive/2012/05/22/378848.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle局部索引和全局索引</title><link>http://www.blogjava.net/freeman1984/archive/2012/05/08/377616.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Tue, 08 May 2012 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2012/05/08/377616.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/377616.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2012/05/08/377616.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/377616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/377616.html</trackback:ping><description><![CDATA[<div class="postText">
<div id="cnblogs_post_body">
<p>表可以按range，hash，list分区，表分区后，其上的索引和普通表上的索引有所不同，oracle对于分区表上的索引分为2类，即局部索引和全局索引，下面分别对这2种索引的特点和局限性做个总结。 <br />局部索引local index <br />1.&nbsp; 局部索引一定是分区索引，分区键等同于表的分区键，分区数等同于表的分区说，一句话，局部索引的分区机制和表的分区机制一样。 <br />2.&nbsp; 如果局部索引的索引列以分区键开头，则称为前缀局部索引。 <br />3.&nbsp; 如果局部索引的列不是以分区键开头，或者不包含分区键列，则称为非前缀索引。 <br />4.&nbsp; 前缀和非前缀索引都可以支持索引分区消除，前提是查询的条件中包含索引分区键。 <br />5.&nbsp; 局部索引只支持分区内的唯一性，无法支持表上的唯一性，因此如果要用局部索引去给表做唯一性约束，则约束中必须要包括分区键列。 <br />6.&nbsp; 局部分区索引是对单个分区的，每个分区索引只指向一个表分区，全局索引则不然，一个分区索引能指向n个表分区，同时，一个表分区，也可能指向n个索引分区， <br />对分区表中的某个分区做truncate或者move，shrink等，可能会影响到n个全局索引分区，正因为这点，局部分区索引具有更高的可用性。 <br />7.&nbsp; 位图索引只能为局部分区索引。 <br />8.&nbsp; 局部索引多应用于数据仓库环境中。 <br />全局索引global index <br />1.&nbsp; 全局索引的分区键和分区数和表的分区键和分区数可能都不相同，表和全局索引的分区机制不一样。 <br />2.&nbsp; 全局索引可以分区，也可以是不分区索引，全局索引必须是前缀索引，即全局索引的索引列必须是以索引分区键作为其前几列。 <br />3.&nbsp; 全局分区索引的索引条目可能指向若干个分区，因此，对于全局分区索引，即使只动，截断一个分区中的数据，都需要rebulid若干个分区甚 <br />至是整个索引。 <br />4.&nbsp; 全局索引多应用于oltp系统中。 <br />5.&nbsp; 全局分区索引只按范围或者散列hash分区，hash分区是10g以后才支持。 <br />6.&nbsp; oracle9i以后对分区表做move或者truncate的时可以用update global indexes语句来同步更新全局分区索引，用消耗一定资源来换取高度的可用性。 <br />7.&nbsp; 表用a列作分区，索引用b做局部分区索引，若where条件中用b来查询，那么oracle会扫描所有的表和索引的分区，成本会比分区更高，此时可以考虑用b做全局分区索引</p>
<p>分区索引字典 <br />DBA_PART_INDEXES 分区索引的概要统计信息，可以得知每个表上有哪些分区索引，分区索引的类新(local/global,) <br />Dba_ind_partitions每个分区索引的分区级统计信息 <br />Dba_indexesminusdba_part_indexes，可以得到每个表上有哪些非分区索引 <br />索引重建 <br />Alter index idx_name rebuild partition index_partition_name [online nologging] <br />需要对每个分区索引做rebuild，重建的时候可以选择online(不会锁定表),或者nologging建立索引的时候不生成日志，加快速度。 <br />Alter index rebuild idx_name [online nologging] <br />对非分区索引，只能整个index重建</p>
<p>本文来自CSDN博客，：<a href="http://blog.csdn.net/rabbitbug/archive/2009/09/15/4556638.aspx">http://blog.csdn.net/rabbitbug/archive/2009/09/15/4556638.aspx</a></p></div></div><img src ="http://www.blogjava.net/freeman1984/aggbug/377616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2012-05-08 15:35 <a href="http://www.blogjava.net/freeman1984/archive/2012/05/08/377616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 在package里面用dba_data_files（字典表）提示(Ora-00942 error:table or view does not exist)问题</title><link>http://www.blogjava.net/freeman1984/archive/2012/04/06/373438.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 06 Apr 2012 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2012/04/06/373438.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/373438.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2012/04/06/373438.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/373438.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/373438.html</trackback:ping><description><![CDATA[给当前用户赋予查看字典权限：GRANT SELECT ANY DICTIONARY TO current_user;<br />&nbsp;current_user为你当前的用户<br /><img src ="http://www.blogjava.net/freeman1984/aggbug/373438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2012-04-06 10:23 <a href="http://www.blogjava.net/freeman1984/archive/2012/04/06/373438.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle exp :EXP-00091 以及sqlplus乱码问题</title><link>http://www.blogjava.net/freeman1984/archive/2012/03/12/371732.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Mon, 12 Mar 2012 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2012/03/12/371732.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/371732.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2012/03/12/371732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/371732.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/371732.html</trackback:ping><description><![CDATA[<span style="color: #000000">對一個DBA或需使用exp,imp的普通用戶來說，在我們做exp的過程中可<font color="#ff0000"><span style="color: #000000">能經常會遇到EXP－00091 Exporting questionable statistics.這樣</span></font><font color="#ff0000"><span style="color: #000000">的EXP信息，其實它就是exp的error message，它產生的原因是因為我</span></font><font color="#ff0000"><span style="color: #000000">們exp工具所在的環境變量中的NLS_LANG與DB中的NLS_CHARACTERSET不</span></font><font color="#ff0000"><span style="color: #000000">一致。但需說明的是，exp-91這個error message對所生成的dump檔沒</span></font><font color="#ff0000"><span style="color: #000000">有影響，生成的dump檔還可以正常的imp（個人體會，不知道有沒有</span><br /><span style="color: #000000">錯），雖然它對我們的dump檔沒有影響，我個人還是不想它出現，大家也有同感吧， 。。下面我們就讓它消失吧</span></font><font color="#ff0000"><br /><br /><strong style="color: #000000">step 01</strong> 查看DB中的NLS_CHARACTERSET的值（提供兩種方法）： </font><br /></span><span style="color: #000000">select * from nls_database_parameters t where <br /></span><span style="color: #000000">t.parameter='NLS_CHARACTERSET' <br /></span><span style="color: #000000">or <br /></span><span style="color: #000000">select * from v$nls_parameters&nbsp; where <br /></span><span style="color: #000000">parameter='NLS_CHARACTERSET'; <br /></span><span style="color: #000000">SQL&gt; select * from v$nls_parameters where <br /></span><span style="color: #000000">parameter='NLS_CHARACTERSET'; <br /></span><span style="color: #000000">PARAMETER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE <br /></span><span style="color: #000000">-----------------------&nbsp; -------------------------<br /></span><span style="color: #000000">--------------------- <br /></span><span style="color: #000000">NLS_CHARACTERSET&nbsp;&nbsp;&nbsp; AL32UTF8<br /><br /></span><span style="color: #000000"><strong>step 02</strong> 根據step 01查出的NLS_CHARACTERSET（AL32UTF8）來設定<br />exp的環境變量： <br />&nbsp;<br />WINNT&gt; set NLS_LANG=AMERICAN_AMERICA.AL32UTF8 <br />LINUX&gt; export NLS_LANG=AMERICAN_AMERICA.AL32UTF8</span><span style="color: #000000">&nbsp;<br /><br />同样可以解决sqlplus显示乱码问题</span><img src ="http://www.blogjava.net/freeman1984/aggbug/371732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2012-03-12 15:47 <a href="http://www.blogjava.net/freeman1984/archive/2012/03/12/371732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle:  prompt,set feedback set define说明</title><link>http://www.blogjava.net/freeman1984/archive/2012/03/09/371570.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 09 Mar 2012 03:47:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2012/03/09/371570.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/371570.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2012/03/09/371570.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/371570.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/371570.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:  prompt,set feedback set define说明&nbsp;&nbsp;<a href='http://www.blogjava.net/freeman1984/archive/2012/03/09/371570.html'>阅读全文</a><img src ="http://www.blogjava.net/freeman1984/aggbug/371570.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2012-03-09 11:47 <a href="http://www.blogjava.net/freeman1984/archive/2012/03/09/371570.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 查看数据块大小</title><link>http://www.blogjava.net/freeman1984/archive/2012/02/06/369486.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Mon, 06 Feb 2012 08:35:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2012/02/06/369486.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/369486.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2012/02/06/369486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/369486.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/369486.html</trackback:ping><description><![CDATA[<font face="Arial">单个数据块的大小会影响表空文件（4*block_size）等的大小。查看方式如下：<br /></font><br /><br />1、 <span style="line-height: 150%; font-family: 宋体">在sqlplus窗口中执行：</span><span style="line-height: 150%; font-family: Arial" xml:lang="EN-US"><br />SQL&gt; show parameter db_block_size<br />NAME&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> TYPE&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> VALUE<br />------------------------------------ ----------- ------------------------------<br />db_block_size&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> integer&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>&nbsp;<wbr>8192</span> 
<p style="text-align: left; line-height: 150%; text-indent: -18pt; margin: 7.8pt 0cm 0pt;background: white" align="left"><span style="line-height: 150%; font-family: Arial" xml:lang="EN-US">2、 2、</span> <span style="line-height: 150%; font-family: 宋体">在pl/</span><span style="line-height: 150%; font-family: Arial" xml:lang="EN-US">SQL</span><span style="line-height: 150%; font-family: 宋体">窗口中执行：</span><span style="line-height: 150%; font-family: Arial" xml:lang="EN-US"><br /></span><span style="line-height: 150%; font-family: Arial" xml:lang="EN-US">select value from v$parameter where name='db_block_size'<br />-------------------------------<br />单个数据块的大小会影响表空文件等的大小。<br /></span></p><img src ="http://www.blogjava.net/freeman1984/aggbug/369486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2012-02-06 16:35 <a href="http://www.blogjava.net/freeman1984/archive/2012/02/06/369486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 数据类型(转载)</title><link>http://www.blogjava.net/freeman1984/archive/2011/12/01/365314.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Thu, 01 Dec 2011 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/12/01/365314.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/365314.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/12/01/365314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/365314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/365314.html</trackback:ping><description><![CDATA[<div id="cnblogs_post_body">
<p style="margin: 0in; font-size: 10pt">数据类型（datatype）是列（column）或存储过程中的一个属性。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; Oracle支持的数据类型可以分为三个基本种类：字符数据类型、数字数据类型以及表示其它数据的数据类型。</p>
<p style="margin: 0in; font-size: 10pt; font-weight: bold">&nbsp;&nbsp;&nbsp; 字符数据类型</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; CHAR CHAR数据类型存储固定长度的子符值。一个CHAR数据类型可以包括1到2000个字符。如果对CHAR没有明确地说明长度，它的默认长度则设置为1.如果对某个CHAR类型变量赋值，其长度小于规定的长度，那么Oracle自动用空格填充。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; VARCHAR2存储可变长度的字符串。虽然也必须指定一个VARCHAR2数据变量的长度，但是这个长度是指对该变量赋值的的最大长度而非实际赋值长度。不需要用空格填充。最多可设置为4000个字符。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 因为VARCHAR2数据类型只存储为该列所赋的字符（不加空格），所以VARCHAR2需要的存储空间比CHAR数据类型要小。</p>
<p style="margin: 0in; font-size: 10pt; font-weight: bold">&nbsp;&nbsp;&nbsp; Oracle推荐使用VARCHAR2</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; NCHAR和NVARCHAR2 NCHAR和NVARCHAR2数据类型分别存储固定长度与可变长度的字符数据，但是它们使用的是和数据库其他类型不同的字符集。在创建数据库时，需要指 定所使用的字符集，以便对数据库中数据进行编码。还可以指定一个辅助的字符集［即本地语言集（National Language Set，简称NLS）］。NCHAR和NVARCHAR2类型的列使用辅助字符集。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 在Oracle9i中，可以以字符而不是字节为单位来表示NCHAR和NVARCHAR2列的长度。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; LONG LONG数据类型可以存放2GB的字符数据，它是从早期版本中继承来的。现在如果想存储大容量的数据，Oracle推荐使用CLOB和NCLOB数据类型。在表和SQL语句中使用LONG类型有许多限制。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; CLOB和NCLOB CLOB和NCLOB数据类型可以存储多达4GB的字符数据。NCLOB数据类型可存储NLS数据。</p>
<p style="margin: 0in; font-size: 10pt; font-weight: bold">&nbsp;&nbsp;&nbsp; 数字数据类型</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; Oracle使用标准、可变长度的内部格式来存储数字。这个内部格式精度可以高达38位。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; NUMBER数据类型可以有两个限定符，如：</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; column NUMBER （ precision， scale）</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; precision表示数字中的有效位。如果没有指定precision的话，Oracle将使用38作为精度。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; scale表示数字小数点右边的位数，scale默认设置为0.　　如果把scale设成负数，Oracle将把该数字取舍到小数点左边的指定位数。</p>
<p style="margin: 0in; font-size: 10pt; font-weight: bold">&nbsp;&nbsp;&nbsp; 日期数据类型</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; Oracle标准日期格式为：DD-MON-YY&nbsp; HH：MI：SS</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 通过修改实例的参数NLS_DATE_FORMAT，可以改变实例中插入日期的格式。在一个会话期间，可以通过ALTER SESSION SQL命令来修改日期，或者通过使用SQL语句的TO_DATE表达式中的参数来更新一个特定值。</p>
<p style="margin: 0in; font-size: 10pt; font-weight: bold">&nbsp;&nbsp;&nbsp; 其它的数据类型</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; RAW和LONG RAW RAW和LONG RAW数据类型主要用于对数据库进行解释。指定这两种类型时，Oracle以位的形式来存储数据。RAW数据类型一般用于存储有特定格式的对象，如位图。 RAW数据类型可占用2KB的空间，而LONG RAW数据类型则可以占用2GB大小。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; ROWID ROWID是一种特殊的列类型，称之为伪列（pseudocolumn）。ROWID伪列在SQL SELECT语句中可以像普通列那样被访问。Oracle数据库中每行都有一个伪列。ROWID表示行的地址，ROWID伪列用ROWID数据类型定义。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; ROWID与磁盘驱动的特定位置有关，因此，ROWID是获得行的最快方法。但是，行的ROWID会随着卸载和重载数据库而发生变化，因此建议不要在事务 中使用ROWID伪列的值。例如，一旦当前应用已经使用完记录，就没有理由保存行的ROWID.不能通过任何SQL语句来设置标准的ROWID伪列的值。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 列或变量可以定义成ROWID数据类型，但是Oracle不能保证该列或变量的值是一个有效的ROWID.</p>
<p style="margin: 0in; font-size: 10pt; font-weight: bold">&nbsp;&nbsp;&nbsp; LOB</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; LOB（大型对象）数据类型，可以保存4GB的信息。LOB有以下3种类型：</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 。CLOB，只能存储字符数据</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 。NCLOB，保存本地语言字符集数据</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 。BLOB，以二进制信息保存数据</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 可以指定将一个LOB数据保存在Oracle数据库内，还是指向一个包含次数据的外部文件。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; LOB可以参与事务。管理LOB中的数据必须通过DBMS_LOB PL/SQL内置软件包或者OCI接口。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 为了便于将LONG数据类型转换成LOB，Oracle9i包含许多同时支持LOB和LONG的函数，还包括一个ALTER TABLE语句的的新选择，它允许将LONG数据类型自动转换成LOB.</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; BFILE</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; BFILE数据类型用做指向存储在Oracle数据库以外的文件的指针。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; XMLType</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 作为对XML支持的一部分，Oracle9i包含了一个新的数据类型XMLType.定义为XMLType的列将存储一个在字符LOB列中的XML文档。有许多内置的功能可以使你从文当中抽取单个节点，还可以在XMLType文档中对任何节点创建索引。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 用户自定义数据</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 从Oracle8以后，用户可以定义自己的复杂数据类型，它们由Oracle基本数据类型组合而成。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; AnyType、AnyData和AnyDataSet</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; Oracle包括3个新的数据类型，用于定义在现有数据类型之外的数据结构。其中每种数据类型必须用程序单元来定义，以便让Oracle9i知道如何处理这些类型的特定实现。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 类型转换</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; Oracle会自动将某些数据类型转换成其他的数据类型，转换取决于包括该值的SQL语句。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 数据转换还可以通过Oracle的类型转换函数显示地进行。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 连接与比较</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 在大多数平台上Oracle SQL中的连接操作符用两条竖线（||）表示。连接是将两个字符值连接。Oracle的自动类型转换功能使得两个数字值也可以进行连接。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; NULL</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; NULL值是关系数据库的重要特征之一。实际上，NULL不代表任何值，它表示没有值。如果要创建表的一个列，而这个列必须有值，那么应将它指定为NOT NULL，这表示该列不能包含NULL值。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 任何数据类型都可以赋予NULL值。NULL值引入了SQL运算的三态逻辑。如果比较的一方是NULL值，那么会出现3种状态：TURE、FALSE以及两者都不是。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; 因为NULL值不等于0或其他任何值，所以测试某个数据是否为NULL值只能通过关系运算符IS NULL来进行。</p>
<p style="margin: 0in; font-size: 10pt">&nbsp;&nbsp;&nbsp; NULL值特别适合以下情况：当一个列还未赋值时。如果选择不使用NULL值，那么必须对行的所有列都要赋值。这实际上也取消了某列不需要值的可能性，同时对它赋的值也很容易产生误解。这种情况则可能误导终端用户，并且导致累计操作的错误结果。<br />转自：<a href="http://www.cnblogs.com/cxd4321/archive/2008/04/14/1153201.html">http://www.cnblogs.com/cxd4321/archive/2008/04/14/1153201.html</a></p></div><img src ="http://www.blogjava.net/freeman1984/aggbug/365314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-12-01 17:13 <a href="http://www.blogjava.net/freeman1984/archive/2011/12/01/365314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate，spring管理事务中(transaction，JDBC connection，Hibernate Session的使用研究)（一）</title><link>http://www.blogjava.net/freeman1984/archive/2011/11/18/363984.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 18 Nov 2011 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/11/18/363984.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/363984.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/11/18/363984.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/363984.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/363984.html</trackback:ping><description><![CDATA[如果单独使用hibernate可参考上一篇文章<a href="http://www.blogjava.net/freeman1984/archive/2011/08/04/355808.html">http://www.blogjava.net/freeman1984/archive/2011/08/04/355808.html</a><br /><br /><strong>首先hibernate的Connection release mode有以下几种：<br /></strong>1 after_statement 2 after_transaction 3 on_close 其中after_statement 用在jta中 ，<span style="color: red"><strong>on_close 是3.1之前遗留的（也许是为spring留的-_-），也就是3.1之前默认是on_close ，但3.1之后默认如果单独使用hibernate是after_transaction，</strong></span>如果有第三方事务管理，就用第三方提供的默认值，spring就是默认使用了on_close。<br /><strong>在spring管理事务中我们看看系统启动后默认使用的配置：<br /></strong>1,ransaction strategy: org.springframework.orm.hibernate3.SpringTransactionFactory使用spring事务策略<br />2，hibernate内部 Automatic session close at end of transaction: disabled 因为已经交给spring了<br />3&nbsp;&nbsp; Connection release mode: auto 默认，也就是没有配置hibernate.connection.release_mode的时候，但是这里有地方需要注意：也就是前面提到的使用第三方策略时的问题：看一下代码： 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">String&nbsp;releaseModeName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;PropertiesHelper.getString(&nbsp;Environment.RELEASE_CONNECTIONS,&nbsp;properties,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">auto</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.info(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Connection&nbsp;release&nbsp;mode:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;releaseModeName&nbsp;);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConnectionReleaseMode&nbsp;releaseMode;<br /><img id="Codehighlighter1_246_311_Open_Image" onclick="this.style.display='none'; Codehighlighter1_246_311_Open_Text.style.display='none'; Codehighlighter1_246_311_Closed_Image.style.display='inline'; Codehighlighter1_246_311_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_246_311_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_246_311_Closed_Text.style.display='none'; Codehighlighter1_246_311_Open_Image.style.display='inline'; Codehighlighter1_246_311_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">auto</span><span style="color: #000000">"</span><span style="color: #000000">.equals(releaseModeName)&nbsp;)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_246_311_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_246_311_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red">releaseMode&nbsp;</span><span style="color: red">=</span><span style="color: red">&nbsp;transactionFactory.getDefaultReleaseMode();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" /></span></span><span style="color: #000000"><br /><img id="Codehighlighter1_320_663_Open_Image" onclick="this.style.display='none'; Codehighlighter1_320_663_Open_Text.style.display='none'; Codehighlighter1_320_663_Closed_Image.style.display='inline'; Codehighlighter1_320_663_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_320_663_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_320_663_Closed_Text.style.display='none'; Codehighlighter1_320_663_Open_Image.style.display='inline'; Codehighlighter1_320_663_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_320_663_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_320_663_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;releaseMode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ConnectionReleaseMode.parse(&nbsp;releaseModeName&nbsp;);<br /><img id="Codehighlighter1_494_659_Open_Image" onclick="this.style.display='none'; Codehighlighter1_494_659_Open_Text.style.display='none'; Codehighlighter1_494_659_Closed_Image.style.display='inline'; Codehighlighter1_494_659_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_494_659_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_494_659_Closed_Text.style.display='none'; Codehighlighter1_494_659_Open_Image.style.display='inline'; Codehighlighter1_494_659_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;releaseMode&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;ConnectionReleaseMode.AFTER_STATEMENT&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">connections.supportsAggressiveRelease()&nbsp;)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_494_659_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_494_659_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.warn(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Overriding&nbsp;release&nbsp;mode&nbsp;as&nbsp;connection&nbsp;provider&nbsp;does&nbsp;not&nbsp;support&nbsp;'after_statement'</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;releaseMode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ConnectionReleaseMode.AFTER_TRANSACTION;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>其中红色部分就是调用了spring提供的默认值，而spring的默认值：在jta和cmt中都默认使用的是after_statement<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_328_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_328_Open_Text.style.display='none'; Codehighlighter1_0_328_Closed_Image.style.display='inline'; Codehighlighter1_0_328_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_0_328_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_0_328_Closed_Text.style.display='none'; Codehighlighter1_0_328_Open_Image.style.display='inline'; Codehighlighter1_0_328_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_0_328_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_0_328_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Sets&nbsp;connection&nbsp;release&nbsp;mode&nbsp;"on_close"&nbsp;as&nbsp;default.<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;This&nbsp;was&nbsp;the&nbsp;case&nbsp;for&nbsp;Hibernate&nbsp;3.0;&nbsp;Hibernate&nbsp;3.1&nbsp;changed<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;it&nbsp;to&nbsp;"auto"&nbsp;(i.e.&nbsp;"after_statement"&nbsp;or&nbsp;"after_transaction").<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;However,&nbsp;for&nbsp;Spring's&nbsp;resource&nbsp;management&nbsp;(in&nbsp;particular&nbsp;for<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;HibernateTransactionManager),&nbsp;"on_close"&nbsp;is&nbsp;the&nbsp;better&nbsp;default.<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_384_428_Open_Image" onclick="this.style.display='none'; Codehighlighter1_384_428_Open_Text.style.display='none'; Codehighlighter1_384_428_Closed_Image.style.display='inline'; Codehighlighter1_384_428_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_384_428_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_384_428_Closed_Text.style.display='none'; Codehighlighter1_384_428_Open_Image.style.display='inline'; Codehighlighter1_384_428_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ConnectionReleaseMode&nbsp;getDefaultReleaseMode()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_384_428_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_384_428_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;ConnectionReleaseMode.ON_CLOSE;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div><br />而spring为什么要使用on_close ，而不是用after_transaction ,我们想想opensessioninview的原理也许能明白，session在view成还要使用，所以不能再transactio<span>n使用完后关闭JDBC connection，必须要在session之后，所以要使用on<strong>_close</strong></span><strong><span>（</span><span>也就是在on session(flush.auto，或者flush.Eagerly) 关闭）。这种情况hibernate内部还会在spring关闭JDBC connection后提示(费解，因为after transaction之后session没有关闭，但是&nbsp;Connection release mode配置的是on_close,session的关闭和&nbsp;Connection 的关闭都由spring来管理，hibernate就不知道了)，所以hibernate有好的提示如下(其实session，已经关闭。当然随着session的关闭jdbc链接释放回连接池)：</span><br /><span style="color: red">transaction completed on session with on_close connection release mode; be sure to cl</span></strong>ose the session to release JDBC resources!，<br /><br />。当然我们也可以使用after_transaction ，这种情况对使用编程式事务非常适用。<br />&nbsp;&nbsp;&nbsp;&nbsp;   <img src ="http://www.blogjava.net/freeman1984/aggbug/363984.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-11-18 11:25 <a href="http://www.blogjava.net/freeman1984/archive/2011/11/18/363984.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 无order by , 默认排序问题 以及oracle的问题</title><link>http://www.blogjava.net/freeman1984/archive/2011/10/20/361633.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Thu, 20 Oct 2011 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/10/20/361633.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/361633.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/10/20/361633.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/361633.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/361633.html</trackback:ping><description><![CDATA[<div>Oracle会根据具体的数据块的存储返回记录.<br />oracle数据库是没有默认排序的&nbsp;<br />要排序必须加上order&nbsp; by&nbsp;<br />因为oracle是按块进行读取数据的&nbsp;<br />如果数据按顺序存储，则可能使读取出来的数据是按顺序的，给用户误解为默认排序<br />oracle没有进行任何排序操作，rowid表示的是数据存放的数据块内部地址，如果没有要求排序，oracle会顺序的从数据块中读取符合条件的数据返回到客户端，不过看起来好像是按照rowid排序似的<br /><br />如果数据量足够大，即使相同的语句，都有可能不同的结果。<br />一般而言<br />表是堆表<br />所以是无序的<br />他是按照也即物理存放顺序来读取的<br />rowid 是自动随行生成的</div>
<div>&nbsp;</div>
<div>另：</div>
<div>oracle&nbsp;的rowid是啥意思<br />---------------------------------------------------------------<br /><br />rowid是数据库的一个伪列，建立表的时候数据库会自动为每个表建立ROWID列<br />用来唯一标识一行记录。<br />rowid是存储每条记录的实际物理地址，对记录的访问是基于ROWID。<br />---------------------------------------------------------------<br /><br />每条记录的物理地址,<br />对数据库中记录行的作快检索方式就是使用rowid来进行查找。<br />---------------------------------------------------------------<br /><br />唯一标识一行记录<br />select&nbsp;rowid,*&nbsp;from&nbsp;表名<br />试一下，你就明白了<br />---------------------------------------------------------------<br /><br />rowid就象是邮递员送信时要找的信封上的家庭地址一样,每个rowid都不会重复,oracle查找通过它可以更快地查找到数据.<br />---------------------------------------------------------------<br /><br />rowid是一个伪列,对应&nbsp;块号,行号,行的序号..<br />---------------------------------------------------------------<br />个人不是dba。上的文章是转载的，其他的东西请知道的补充下，对这一块有点迷惑。<br />关于order by的文章<br /><a href="http://blog.sina.com.cn/s/blog_6ff05a2c0100mlco.html">http://blog.sina.com.cn/s/blog_6ff05a2c0100mlco.html</a><br />关于有null的排序<br /><a href="http://blog.csdn.net/wh62592855/article/details/4813404">http://blog.csdn.net/wh62592855/article/details/4813404</a></div> <img src ="http://www.blogjava.net/freeman1984/aggbug/361633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-10-20 10:27 <a href="http://www.blogjava.net/freeman1984/archive/2011/10/20/361633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>事务和两阶段提交</title><link>http://www.blogjava.net/freeman1984/archive/2011/10/09/360269.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Sun, 09 Oct 2011 06:41:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/10/09/360269.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/360269.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/10/09/360269.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/360269.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/360269.html</trackback:ping><description><![CDATA[<p>&nbsp;</p><li>1 事务的ACID </li>
<p><br />事务是保证数据库从一个一致性的状态永久地变成另外一个一致性状态的根本，其中，ACID是事务的基本特性。</p>
<p>A是Atomicity，原子性。一个事务往往涉及到许多的子操作，原子性则保证这些子操作要么都做，要么都不做，而不至于出现事务的部分操作成功，而另外一部分操作没有成功。如果事务在执行的过程中发生错误，那么数据库将回滚到事务发生之前的状态。比如银行的转账服务，这个事务的最终结果一定是：某个账户的余额增加了x，而另外一个账户的余额减少了x，或者两个账户的余额未发生变化。而不会出现其他情况。<br /><span id="more-1183"></span><br />C是Consistency，一致性。一致性是指事务发生前和发生以后，都不会破坏数据库的约束关系，保证了数据库元素的正确性、有效性和完整性。这种约束关系可以是数据库内部的约束，比如数据库元素的值必须在一定的范围内，也可以是应用带来的约束，比如转账以后银行账户的余额不能为负数。</p>
<p>I是Isolation，隔离性。一个事务的操作在未提交以前，是不会被并行发生的其他事务访问到的。也就是说，数据库操作不会看到某个事务的中间操作结果，比如转账过程中，用户是不能查询到一个账户余额减少了，而另外一个账户余额未发生变化的情况。</p>
<p>D是Durability，持久性。事务完成以后，它对数据库的影响是永久性的，即使在数据库系统发生宕机或者其他故障的情况下，这种影响也会得到保持。</p>
<ul><li>2 两阶段提交 </li></ul>
<p>在分布式系统中，事务往往包含有多个参与者的活动，单个参与者上的活动是能够保证原子性的，而多个参与者之间原子性的保证则需要通过两阶段提交来实现，两阶段提交是分布式事务实现的关键。</p>
<p>很明显，两阶段提交保证了分布式事务的原子性，这些子事务要么都做，要么都不做。而数据库的一致性是由数据库的完整性约束实现的，持久性则是通过commit日志来实现的，不是由两阶段提交来保证的。至于两阶段提交如何保证隔离性，可以参考Large-scale Incremental Processing Using Distributed Transactions and Notifications中两阶段提交的具体实现。</p>
<p>两阶段提交的过程涉及到协调者和参与者。协调者可以看做成事务的发起者，同时也是事务的一个参与者。对于一个分布式事务来说，一个事务是涉及到多个参与者的。具体的两阶段提交的过程如下：</p>
<p>第一阶段：</p>
<p>首先，协调者在自身节点的日志中写入一条的日志记录，然后所有参与者发送消息prepare T，询问这些参与者（包括自身），是否能够提交这个事务；</p>
<p>参与者在接受到这个prepare T 消息以后，会根据自身的情况，进行事务的预处理，如果参与者能够提交该事务，则会将日志写入磁盘，并返回给协调者一个ready T信息，同时自身进入预提交状态状态；如果不能提交该事务，则记录日志，并返回一个not commit T信息给协调者，同时撤销在自身上所做的数据库改；</p>
<p>参与者能够推迟发送响应的时间，但最终还是需要发送的。</p>
<p>第二阶段：</p>
<p>协调者会收集所有参与者的意见，如果收到参与者发来的not commit T信息，则标识着该事务不能提交，协调者会将Abort T 记录到日志中，并向所有参与者发送一个Abort T 信息，让所有参与者撤销在自身上所有的预操作；</p>
<p>如果协调者收到所有参与者发来prepare T信息，那么协调者会将Commit T日志写入磁盘，并向所有参与者发送一个Commit T信息，提交该事务。若协调者迟迟未收到某个参与者发来的信息，则认为该参与者发送了一个VOTE_ABORT信息，从而取消该事务的执行。</p>
<p>参与者接收到协调者发来的Abort T信息以后，参与者会终止提交，并将Abort T 记录到日志中；如果参与者收到的是Commit T信息，则会将事务进行提交，并写入记录</p>
<p>一般情况下，两阶段提交机制都能较好的运行，当在事务进行过程中，有参与者宕机时，他重启以后，可以通过询问其他参与者或者协调者，从而知道这个事务到底提交了没有。当然，这一切的前提都是各个参与者在进行每一步操作时，都会事先写入日志。</p>
<p>唯一一个两阶段提交不能解决的困境是：当协调者在发出commit T消息后宕机了，而唯一收到这条命令的一个参与者也宕机了，这个时候这个事务就处于一个未知的状态，没有人知道这个事务到底是提交了还是未提交，从而需要数据库管理员的介入，防止数据库进入一个不一致的状态。当然，如果有一个前提是：所有节点或者网络的异常最终都会恢复，那么这个问题就不存在了，协调者和参与者最终会重启，其他节点也最终也会收到commit T的信息。</p>
<ul><li>3 日志 </li></ul>
<p>数据库日志保证了事务执行的原子性和持久性，日志类型可以分为redo log，undo log，undo/redo log。关于这几种日志形式的具体介绍，可以参照：</p>
<p>http://nosql-wiki.org/foswiki/bin/view/Main/TransactonLog<br />转载自：http://rdc.taobao.com/blog/cs/?p=1183</p><img src ="http://www.blogjava.net/freeman1984/aggbug/360269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-10-09 14:41 <a href="http://www.blogjava.net/freeman1984/archive/2011/10/09/360269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql数据库备份和还原常用的命令 .</title><link>http://www.blogjava.net/freeman1984/archive/2011/09/30/359858.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 30 Sep 2011 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/09/30/359858.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/359858.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/09/30/359858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/359858.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/359858.html</trackback:ping><description><![CDATA[<p><strong>备份MySQL数据库的命令</strong> </p>
<div class="hl-surround">
<div class="hl-main">mysqldump -hhostname -uusername -ppassword databasename &gt; backupfile.sql</div>
<div class="hl-main"><br /></div></div>
<p><strong>备份MySQL数据库为带删除表的格式</strong> <br />备份MySQL数据库为带删除表的格式，能够让该备份覆盖已有数据库而不需要手动删除原有数据库。</p>
<div class="hl-surround">
<div class="hl-main">mysqldump -&#8211;add-drop-table -uusername -ppassword databasename &gt; backupfile.sql</div>
<div class="hl-main"><br /></div></div>
<p><strong>直接将MySQL数据库压缩备份</strong> </p>
<div class="hl-surround">
<div class="hl-main">mysqldump -hhostname -uusername -ppassword databasename | gzip &gt; backupfile.sql.gz</div>
<div class="hl-main"><br /></div></div>
<p><strong>备份MySQL数据库某个(些)表</strong> </p>
<div class="hl-surround">
<div class="hl-main">mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 &gt; backupfile.sql</div>
<div class="hl-main"><br /></div></div>
<p><strong>同时备份多个MySQL数据库</strong> </p>
<div class="hl-surround">
<div class="hl-main">mysqldump -hhostname -uusername -ppassword &#8211;databases databasename1 databasename2 databasename3 &gt; multibackupfile.sql</div>
<div class="hl-main"><br /></div></div>
<p><strong>仅仅备份数据库结构</strong> </p>
<div class="hl-surround">
<div class="hl-main">mysqldump &#8211;no-data &#8211;databases databasename1 databasename2 databasename3 &gt; structurebackupfile.sql</div>
<div class="hl-main"><br /></div></div>
<p><strong>备份服务器上所有数据库</strong> </p>
<div class="hl-surround">
<div class="hl-main">mysqldump &#8211;all-databases &gt; allbackupfile.sql</div>
<div class="hl-main"><br /></div></div>
<p><strong>还原MySQL数据库的命令</strong> </p>
<div class="hl-surround">
<div class="hl-main">mysql -hhostname -uusername -ppassword databasename &lt; backupfile.sql</div>
<div class="hl-main"><br /></div></div>
<p><strong>还原压缩的MySQL数据库</strong> </p>
<div class="hl-surround">
<div class="hl-main">gunzip &lt; backupfile.sql.gz | mysql -uusername -ppassword databasename</div>
<div class="hl-main"><br /></div></div>
<p><strong>将数据库转移到新服务器</strong> </p>
<div class="hl-surround">
<div class="hl-main">mysqldump -uusername -ppassword databasename | mysql &#8211;host=*.*.*.* -C databasename<br />转自http://blog.csdn.net/bigbird2012/article/details/6142886</div></div><img src ="http://www.blogjava.net/freeman1984/aggbug/359858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-09-30 14:29 <a href="http://www.blogjava.net/freeman1984/archive/2011/09/30/359858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>临时表空间</title><link>http://www.blogjava.net/freeman1984/archive/2011/09/13/358552.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Tue, 13 Sep 2011 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/09/13/358552.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/358552.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/09/13/358552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/358552.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/358552.html</trackback:ping><description><![CDATA[<h2><span style="font-family: 黑体"><span style="font-size: large">临时表空间作用</span></span></h2>
<p style="text-indent: 21.75pt"><span style="font-size: small"><span style="font-family: Times New Roman">Oracle</span><span style="font-family: 宋体">临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。</span></span></p>
<p style="text-indent: 21.75pt"><span style="font-size: small"><span style="font-family: 宋体">重启数据库可以释放临时表空间，如果不能重启实例，而一直保持问题</span><span style="font-family: Times New Roman">sql</span><span style="font-family: 宋体">语句的执行，</span><span style="font-family: Times New Roman">temp</span><span style="font-family: 宋体">表空间会一直增长。直到耗尽硬盘空间。</span></span></p>
<p style="text-indent: 21.75pt"><span style="font-size: small"><span style="font-family: 宋体">网上有人猜测在磁盘空间的分配上，</span><span style="font-family: Times New Roman">oracle</span><span style="font-family: 宋体">使用的是贪心算法，如果上次磁盘空间消耗达到</span><span style="font-family: Times New Roman">1GB</span><span style="font-family: 宋体">，那么临时表空间就是</span><span style="font-family: Times New Roman">1GB</span><span style="font-family: 宋体">。也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。</span></span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体"><span style="font-size: small">临时表空间的主要作用：</span></span></p>
<p style="text-indent: 21.75pt"><span style="font-size: small"><span style="font-family: 宋体">索引</span><span style="font-family: Times New Roman">create</span><span style="font-family: 宋体">或</span><span style="font-family: Times New Roman">rebuild</span></span></p>
<p style="text-indent: 21.75pt"><span style="font-size: small"><span style="font-family: Times New Roman">Order by </span><span style="font-family: 宋体">或</span><span style="font-family: Times New Roman"> group by</span></span></p>
<p style="text-indent: 21.75pt"><span style="font-size: small"><span style="font-family: Times New Roman">Distinct </span><span style="font-family: 宋体">操作</span></span></p>
<p style="text-indent: 21.75pt"><span style="font-size: small"><span style="font-family: Times New Roman">Union </span><span style="font-family: 宋体">或</span><span style="font-family: Times New Roman"> intersect </span><span style="font-family: 宋体">或</span><span style="font-family: Times New Roman"> minus</span></span></p>
<p style="text-indent: 21.75pt"><span style="font-family: Times New Roman; font-size: small">Sort-merge joins</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: Times New Roman; font-size: small">analyze</span></p>
<h2><span style="font-family: 黑体"><span style="font-size: large">查看临时表空间大小</span></span></h2>
<p><strong><span style="font-family: 宋体; font-size: 9pt">查看临时表文件大小和已使用空间</span></strong></p>
<p><strong><span style="font-family: 宋体; color: green; font-size: 9pt">select</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> t1."Tablespace" "Tablespace", <br />t1."Total (G)" "Total (G)", <br />nvl(t2."Used (G)", </span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">0</span><span style="font-family: 宋体; color: black; font-size: 9pt">) "Used(G)", <br />t1."Total (G)" - nvl(t2."Used (G)", </span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">0</span><span style="font-family: 宋体; color: black; font-size: 9pt">) "Free (G)"<br /></span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"><br />(<br /></span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">select</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> tablespace_name "Tablespace", to_char((</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">sum</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">(bytes/</span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">1024</span><span style="font-family: 宋体; color: black; font-size: 9pt">/</span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">1024</span><span style="font-family: 宋体; color: black; font-size: 9pt">/</span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">1024</span><span style="font-family: 宋体; color: black; font-size: 9pt">)),</span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">'99,999,990.900'</span><span style="font-family: 宋体; color: black; font-size: 9pt">) "Total (G)" <br /></span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> dba_temp_files<br /></span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">group</span></strong> <strong><span style="font-family: 宋体; color: green; font-size: 9pt">by</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> tablespace_name<br /></span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">union</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"><br /></span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">select</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> tablespace_name "Tablespace", to_char((</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">sum</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">(bytes/</span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">1024</span><span style="font-family: 宋体; color: black; font-size: 9pt">/</span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">1024</span><span style="font-family: 宋体; color: black; font-size: 9pt">/</span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">1024</span><span style="font-family: 宋体; color: black; font-size: 9pt">)),</span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">'99,999,990.900'</span><span style="font-family: 宋体; color: black; font-size: 9pt">) "Total (G)"<br /></span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> dba_data_files<br /></span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">where</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> tablespace_name </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">like</span></strong> <span style="font-family: 宋体; color: #0000f0; font-size: 9pt">'TEMP%'</span><span style="font-family: 宋体; color: black; font-size: 9pt"><br /></span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">group</span></strong> <strong><span style="font-family: 宋体; color: green; font-size: 9pt">by</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> tablespace_name<br />) t1,<br />(<br /></span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">select</span></strong> <strong><span style="font-family: 宋体; color: green; font-size: 9pt">tablespace</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">, round(</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">sum</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">(blocks)*</span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">8</span><span style="font-family: 宋体; color: black; font-size: 9pt">/</span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">1024</span><span style="font-family: 宋体; color: black; font-size: 9pt">) "Used (G)" </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> v$sort_usage<br /></span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">group</span></strong> <strong><span style="font-family: 宋体; color: green; font-size: 9pt">by</span></strong> <strong><span style="font-family: 宋体; color: green; font-size: 9pt">tablespace</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"><br />) t2<br /></span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">where</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> t1."Tablespace"=t2.</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">tablespace</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">(+)</span></p>
<p><span style="font-size: 9pt">&nbsp;</span></p>
<p><span style="font-family: 宋体; font-size: 9pt">查看当前临死表使用空间大小与正在占用临时表空间的</span><span style="font-size: 9pt"><span style="font-family: Times New Roman">sql</span></span><span style="font-family: 宋体; font-size: 9pt">语句</span></p>
<p><strong><span style="font-family: 宋体; color: green; font-size: 9pt">select</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> sess.SID,&nbsp;segtype, blocks*</span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">8</span><span style="font-family: 宋体; color: black; font-size: 9pt">/</span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">1000</span><span style="font-family: 宋体; color: black; font-size: 9pt"> "MB" ,sql_text<br /></span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> v$sort_usage </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">sort</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">, v$session sess,v$sql </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">sql</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"><br />&nbsp;</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">where</span></strong> <strong><span style="font-family: 宋体; color: green; font-size: 9pt">sort</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">.SESSION_ADDR = sess.SADDR<br />&nbsp;</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">and</span></strong> <strong><span style="font-family: 宋体; color: green; font-size: 9pt">sql</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">.ADDRESS = sess.SQL_ADDRESS<br />&nbsp;</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">order</span></strong> <strong><span style="font-family: 宋体; color: green; font-size: 9pt">by</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> blocks </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">desc</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">;</span></p>
<p>&nbsp;</p>
<p><strong><span style="font-family: 宋体; color: green; font-size: 9pt">select</span></strong> <span style="font-family: 宋体; color: #0000f0; font-size: 9pt">'the '</span><span style="font-family: 宋体; color: black; font-size: 9pt"> || </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">name</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> || </span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">' temp tablespaces '</span><span style="font-family: 宋体; color: black; font-size: 9pt"> || tablespace_name ||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">' idle '</span><span style="font-family: 宋体; color: black; font-size: 9pt"> ||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; round(</span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">100</span><span style="font-family: 宋体; color: black; font-size: 9pt"> - (s.tot_used_blocks / s.total_blocks) * </span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">100</span><span style="font-family: 宋体; color: black; font-size: 9pt">, </span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">3</span><span style="font-family: 宋体; color: black; font-size: 9pt">) ||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">'% at '</span><span style="font-family: 宋体; color: black; font-size: 9pt"> || to_char(</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">sysdate</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">, </span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">'yyyymmddhh24miss'</span><span style="font-family: 宋体; color: black; font-size: 9pt">)<br />&nbsp;</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> (</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">select</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> d.tablespace_name tablespace_name,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nvl(</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">sum</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">(used_blocks), </span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">0</span><span style="font-family: 宋体; color: black; font-size: 9pt">) tot_used_blocks,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">sum</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">(blocks) total_blocks<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> v$sort_segment v, dba_temp_files d<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">where</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> d.tablespace_name = v.tablespace_name(+)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">group</span></strong> <strong><span style="font-family: 宋体; color: green; font-size: 9pt">by</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> d.tablespace_name) s,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v$database;</span></p>
<h2><span style="font-family: 黑体"><span style="font-size: large">修改临时文件大小</span></span></h2>
<p><strong><span style="font-family: 宋体; color: green; font-size: 9pt">select</span></strong> <span style="font-family: 宋体; color: #0000f0; font-size: 9pt">'ALTER database TEMPFILE&nbsp;'</span><span style="font-family: 宋体; color: black; font-size: 9pt"> || file_name || </span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">' resize 100M ;'</span><span style="font-family: 宋体; color: black; font-size: 9pt"><br />&nbsp;</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> dba_temp_files<br />&nbsp;</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">where</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> tablespace_name = </span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">'ONLYDWTEMP';</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">ALTER database TEMPFILE&nbsp;'/oradata/ONLYDWTEMP06.dbf' resize 100M ;</span></p>
<p><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">ALTER database TEMPFILE&nbsp;'/oradata/ONLYDWTEMP07.dbf' resize 100M ;</span></p>
<p><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">ALTER database TEMPFILE&nbsp;'/oradata/ONLYDWTEMP08.dbf' resize 100M ;</span></p>
<p><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">ALTER database TEMPFILE&nbsp;'/oradata/ONLYDWTEMP09.dbf' resize 100M ;</span></p>
<p><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">ALTER database TEMPFILE&nbsp;'/oradata/ONLYDWTEMP10.dbf' resize 100M ;</span></p>
<p><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">ALTER database TEMPFILE&nbsp;'/oradata/ONLYDWTEMP01.dbf' resize 100M ;</span></p>
<p><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">ALTER database TEMPFILE&nbsp;'/oradata/ONLYDWTEMP02.dbf' resize 100M ;</span></p>
<p><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">ALTER database TEMPFILE&nbsp;'/oradata/ONLYDWTEMP03.dbf' resize 100M ;</span></p>
<p><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">ALTER database TEMPFILE&nbsp;'/oradata/ONLYDWTEMP04.dbf' resize 100M ;</span></p>
<p><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">ALTER database TEMPFILE&nbsp;'/oradata/ONLYDWTEMP05.dbf' resize 100M ;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">SQL&gt; ALTER database TEMPFILE&nbsp;'/oradata/ONLYDWTEMP09.dbf' resize 100M ;</span></p>
<p>&nbsp;</p>
<p><span style="font-size: small"><span style="font-family: Times New Roman">ALTER database TEMPFILE&nbsp;'/oradata/ONLYDWTEMP09.dbf' resize 100M</span></span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">ORA-03297: file contains used data beyond requested RESIZE value</span></p>
<h2><span style="font-family: 黑体"><span style="font-size: large">创建新的临时表空间</span></span></h2>
<p><span style="font-family: Times New Roman; font-size: small">SQL&gt; create temporary tablespace TEMP1 TEMPFILE '/oradata/TEMP1_01.dbf' size 100M;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">Tablespace created</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">SQL&gt; create temporary tablespace TEMP2 TEMPFILE '/oradata/TEMP2_01.dbf' size 100M;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">Tablespace created</span></p>
<h2><span style="font-family: 黑体"><span style="font-size: large">将当前临时表空间指定为新的临时表空间</span></span></h2>
<p><span style="font-family: Times New Roman; font-size: small">SQL&gt; alter database default temporary tablespace TEMP1;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">Database altered</span></p>
<h2><span style="font-family: 黑体"><span style="font-size: large">删除旧的临时表空间</span></span></h2>
<p><span style="font-family: Times New Roman; font-size: small">SQL&gt; drop tablespace ONLYDWTEMP including contents and datafiles;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">Tablespace dropped</span></p>
<h2><span style="font-family: 黑体"><span style="font-size: large">检查当前用户的临时表空间</span></span></h2>
<p style="text-indent: 21.75pt"><span style="font-size: small"><span style="font-family: Times New Roman">9i</span><span style="font-family: 宋体">之前，如果一个数据库用户没有被指定默认临时表空间，那么</span><span style="font-family: Times New Roman">oracle</span><span style="font-family: 宋体">就会使用</span><span style="font-family: Times New Roman">system</span><span style="font-family: 宋体">表空间作为该用户的临时表空间，这是很危险的。在</span><span style="font-family: Times New Roman">9i</span><span style="font-family: 宋体">里边，</span><span style="font-family: Times New Roman">database</span><span style="font-family: 宋体">可以被指定一个默认临时表空间。这样如果数据库用户没有被明确指定临时表空间，</span><span style="font-family: Times New Roman">oracle9i</span><span style="font-family: 宋体">就会自动指定</span><span style="font-family: Times New Roman">database</span><span style="font-family: 宋体">的默认临时表空间作为该用户的临时表空间。</span></span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体"><span style="font-size: small">我们可以通过下面的语句来查询数据库的默认临时表空间。</span></span></p>
<p style="text-indent: 21.75pt"><strong><span style="font-family: 宋体; color: green; font-size: 9pt">select</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> * </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> database_properties </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">where</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> property_name = </span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">'DEFAULT_TEMP_TABLESPACE'</span><span style="font-family: 宋体; color: black; font-size: 9pt">;</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体; color: black; font-size: 9pt">如下语句可以查询数据库用户的临时表空间。</span></p>
<p style="text-indent: 21.75pt"><strong><span style="font-family: 宋体; color: green; font-size: 9pt">select</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> username,default_tablespace,temporary_tablespace </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> dba_users</span></p>
<p style="text-indent: 21.75pt"><span style="font-family: 宋体"><span style="font-size: small">如果删除了用户的临时表空间，而这个临时表空间又不是默认临时表空间（如果是数据库的默认临时表空间是删不掉的），用户的临时表空间不会自动转换到数据库的默认临时表空间上。这时如果使用该用户登陆，并执行查询用到临时空间，就会报错。解决方式就是将用户的临时表空间修改过来。</span></span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">SQL&gt; alter user CTL temporary tablespace TEMP1;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">User altered</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">SQL&gt; alter user ODS temporary tablespace TEMP2;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">User altered</span></p>
<p>&nbsp;</p>
<p><strong><span style="font-family: 宋体; color: green; font-size: 9pt">select</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> username,default_tablespace,temporary_tablespace </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> dba_users</span></p>
<table style="margin: auto auto auto 4.75pt; width: 258pt; border-collapse: collapse" border="0" cellspacing="0" cellpadding="0" width="344">
<tbody>
<tr style="height: 14.25pt">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 51pt; padding-right: 5.4pt;background: silver; height: 14.25pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" width="68">
<p align="center"><strong><span style="font-family: 宋体; font-size: 12pt">user</span></strong></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; padding-left: 5.4pt; width: 70pt; padding-right: 5.4pt;background: silver; height: 14.25pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" width="93">
<p align="center"><strong><span style="font-family: 宋体; font-size: 12pt">tablespace</span></strong></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; padding-left: 5.4pt; width: 137pt; padding-right: 5.4pt;background: silver; height: 14.25pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" width="183">
<p align="center"><strong><span style="font-family: 宋体; font-size: 12pt">temporary tablespace</span></strong></p></td></tr>
<tr style="height: 14.25pt">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 51pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="68">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">SCOTT</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 70pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="93">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">SYSTEM</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 137pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="183">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">ONLYDWTEMP</span></p></td></tr>
<tr style="height: 14.25pt">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 51pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="68">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">CTL</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 70pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="93">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">CTL</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 137pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="183">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">TEMP1</span></p></td></tr>
<tr style="height: 14.25pt">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 51pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="68">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">ODS</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 70pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="93">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">ODSD</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 137pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="183">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">TEMP2</span></p></td></tr></tbody></table>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">SQL&gt; drop tablespace TEMP2 including contents and datafiles;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">Tablespace dropped</span></p>
<p>&nbsp;</p>
<p><strong><span style="font-family: 宋体; color: green; font-size: 9pt">select</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> username,default_tablespace,temporary_tablespace </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> dba_users</span></p>
<table style="margin: auto auto auto 4.75pt; width: 258pt; border-collapse: collapse" border="0" cellspacing="0" cellpadding="0" width="344">
<tbody>
<tr style="height: 14.25pt">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 51pt; padding-right: 5.4pt;background: silver; height: 14.25pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" width="68">
<p align="center"><strong><span style="font-family: 宋体; font-size: 12pt">user</span></strong></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; padding-left: 5.4pt; width: 70pt; padding-right: 5.4pt;background: silver; height: 14.25pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" width="93">
<p align="center"><strong><span style="font-family: 宋体; font-size: 12pt">tablespace</span></strong></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; padding-left: 5.4pt; width: 137pt; padding-right: 5.4pt;background: silver; height: 14.25pt; border-top: windowtext 1pt solid; border-right: windowtext 1pt solid; padding-top: 0cm" width="183">
<p align="center"><strong><span style="font-family: 宋体; font-size: 12pt">temporary tablespace</span></strong></p></td></tr>
<tr style="height: 14.25pt">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 51pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="68">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">SCOTT</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 70pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="93">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">SYSTEM</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 137pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="183">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">ONLYDWTEMP</span></p></td></tr>
<tr style="height: 14.25pt">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 51pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="68">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">CTL</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 70pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="93">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">CTL</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 137pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="183">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">TEMP1</span></p></td></tr>
<tr style="height: 14.25pt">
<td style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 51pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="68">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">ODS</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 70pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="93">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">ODSD</span></p></td>
<td style="border-bottom: windowtext 1pt solid; border-left: #d4d0c8; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 137pt; padding-right: 5.4pt; height: 14.25pt; border-top: #d4d0c8; border-right: windowtext 1pt solid; padding-top: 0cm" width="183">
<p align="left"><span style="font-family: 宋体; font-size: 12pt">TEMP2</span></p></td></tr></tbody></table>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">SQL&gt; conn ods/ods@test_BI_DW</span></p>
<p><span style="font-family: Times New Roman; font-size: small">Connected to Oracle9i Enterprise Edition Release 9.2.0.8.0 </span></p>
<p><span style="font-family: Times New Roman; font-size: small">Connected as ods</span></p>
<p>&nbsp;</p>
<p><strong><span style="font-family: 宋体; color: green; font-size: 9pt">SQL&gt; select</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">&nbsp;do.object_name </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> dba_objects do, dba_objects db </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">order</span></strong> <strong><span style="font-family: 宋体; color: green; font-size: 9pt">by</span></strong> <span style="font-family: 宋体; color: #0000f0; font-size: 9pt">1</span><span style="font-family: 宋体; color: black; font-size: 9pt">;</span></p>
<p><span style="font-family: Times New Roman; font-size: small">Tablespace TEMP2 not found</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">SQL&gt; alter user ODS temporary tablespace TEMP1;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman; font-size: small">User altered</span></p>
<p>&nbsp;</p>
<p><span style="font-size: small"><span style="font-family: 宋体">以上的方法只是暂时释放了临时表空间的磁盘，是治标但不是治本的方法。真正的治本方法是找出数据库中消耗资源比较大的</span><span style="font-family: Times New Roman">sql</span><span style="font-family: 宋体">语句，然后对其进行优化处理。</span></span></p>
<p><strong><span style="font-family: 宋体; color: green; font-size: 9pt">Select</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> se.username,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; se.sid,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; su.</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">extents</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; su.blocks * to_number(rtrim(p.</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">value</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">)) </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">as</span></strong> <strong><span style="font-family: 宋体; color: green; font-size: 9pt">Space</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">tablespace</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; segtype,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sql_text<br />&nbsp;</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">from</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> v$sort_usage su, v$parameter p, v$session se, v$sql s<br />&nbsp;</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">where</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> p.</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">name</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> = </span><span style="font-family: 宋体; color: #0000f0; font-size: 9pt">'db_block_size'</span><span style="font-family: 宋体; color: black; font-size: 9pt"><br />&nbsp;&nbsp;</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">and</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> su.session_addr = se.saddr<br />&nbsp;&nbsp; </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">and</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> s.hash_value = su.sqlhash<br />&nbsp;&nbsp; </span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">and</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> s.address = su.sqladdr<br />&nbsp;</span><strong><span style="font-family: 宋体; color: green; font-size: 9pt">order</span></strong> <strong><span style="font-family: 宋体; color: green; font-size: 9pt">by</span></strong><span style="font-family: 宋体; color: black; font-size: 9pt"> se.username, se.sid</span></p><img src ="http://www.blogjava.net/freeman1984/aggbug/358552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-09-13 17:47 <a href="http://www.blogjava.net/freeman1984/archive/2011/09/13/358552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Oracle下创建database link和同义词(synonym)</title><link>http://www.blogjava.net/freeman1984/archive/2011/09/09/358372.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 09 Sep 2011 07:54:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/09/09/358372.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/358372.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/09/09/358372.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/358372.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/358372.html</trackback:ping><description><![CDATA[<p>物理上存放于网络的多个ORACLE数据库，逻辑上可以看成一个单一的大型数据库，用户可以通过网络对异地数据库中的数据进行存取，而服务器之间的协同处理对于工作站用户及应用程序而言是完全透明的，开发人员无需关心网络的链接细节、数据在网络节点中的具体分布情况和服务器间的协调工作过程。<br />数据库之间的链接建立在DATABASE LINK上。要创建一个DATABASE LINK，必须首先在建立链接的数据库上设置链接字符串，即配置一个远程数据库的本地网络服务名。<br />&nbsp;</p>
<p>数据库全局名称可以用以下命令查出：</p>
<p>SELECT * FROM GLOBAL_NAME;</p>
<p>修改可以用以下语句来修改参数值：</p>
<p>ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;</p>
<p>&lt;1&gt;、当数据库参数global_name=false时，就不要求数据库链接名称跟远端数据库名称一样。</p>
<p>oracle数据库之间进行连接通讯。<br />创建数据库链接的语法如下：<br />CREATE [PUBLIC] DATABASE LINK link</p>
<p>CONNECT TO username IDENTIFIED BY password</p>
<p>USING &#8216;connectstring&#8217;</p>
<p>其中：<br />--demona为用net8 easy config创建的连接字符串<br />目的方数据库的init.ora文件中的global_names设为false<br />重新启动数据库设置才能生效<br />或者用sys用户执行</p>
<p>注意：创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限，用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中（CREATE PUBLIC DATABASE LINK权限在DBA中）。</p>
<p>一个公用数据库链接对于数据库中的所有用户都是可用的，而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私有数据库链接是不可能的，一个数据库链接要么是公用的，要么是私有的。</p>
<p>创建数据库链接时，还可以使用缺省登录方式，即不指定远程数据库的用户名和密码：</p>
<p>create public database link zrhs_link</p>
<p>using &#8216;zrhs&#8217;;</p>
<p>在不指定用户名和口令的情况下，ORACLE使用当前的用户名和口令登录到远程数据库。</p>
<p>USING后面指定的是链接字符串，也就是远程数据库的网络服务名，这个服务名保存在TNSNAMES.ORA文件中，在该文件中定义了协议、主机名、端口和数据库名。</p>
<p>删除数据库链接的语句是：</p>
<p>DROP [PUBLIC] DATABASE LINK zrhs_link</p>
<p>数据库链接的引用</p>
<p>一般情况下引用数据库链接，可以直接将其放到调用的表名或视图名称后面，中间使用一个 @ 作为分割符：</p>
<p>SELECT * FROM <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#119;&#111;&#114;&#107;&#101;&#114;&#64;&#122;&#114;&#104;&#115;&#95;&#108;&#105;&#110;&#107;">worker@zrhs_link</a> ;</p>
<p>对于经常使用的数据库链接，可以建立一个本地的同义词，方便使用：</p>
<p>CREATE SYNONYM worker_syn FOR <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#119;&#111;&#114;&#107;&#101;&#114;&#64;&#122;&#114;&#104;&#115;&#95;&#108;&#105;&#110;&#107;">worker@zrhs_link</a> ;</p>
<p>还可以建立一个本地的远程视图，方便使用：</p>
<p>CREATE VIEW worker AS SELECT * FROM <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#119;&#111;&#114;&#107;&#101;&#114;&#64;&#122;&#114;&#104;&#115;&#95;&#108;&#105;&#110;&#107;">worker@zrhs_link</a> where&#8230; ;</p>
<p>现在本视图可与本地数据库中的任何其它视图一样对待，也可以授权给其它用户，访问此视图，但该用户必须有访问数据库链接的权限。</p>
<p>对于另外一种情况，所要访问的表不在数据库链接中指定的远程帐户下，但该帐户有访问该表的权限，那么我们在表名前要加上该表的用户名：</p>
<p>SELECT * FROM <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#99;&#97;&#109;&#101;&#108;&#46;&#119;&#111;&#114;&#107;&#101;&#114;&#64;&#122;&#114;&#104;&#115;&#95;&#108;&#105;&#110;&#107;">camel.worker@zrhs_link</a> ;</p>
<p>&lt;2&gt;、当数据库参数global_name=true时，那就要求数据库链接名称跟远端数据库名称一样<br />数据库全局名称可以用以下命令查出</p>
<p>SELECT * FROM GLOBAL_NAME;</p>
<p>atabase link(dblink)--数据库链路<br />创建dblink的语法：<br />sql&gt;create database link 数据库链路名<br />connect to 用户名 identified by 口令<br />using '主机字符串名';<br />如：<br />sql&gt;create database link ora9i.us.oracle.com ### 这里的us.oracle.com为oracle默认域名 ###<br />connect to scott identified by tiger<br />using 'sun';</p>
<p>1)dblink名必须与远程数据库的全局数据库名（global_name）相同；<br />2)用户名，口令为远程数据库用户名，口令;<br />3)主机字符串为本机tnsnames.ora中定义的串;<br />4)两个同名的数据库间不得建立dblink;<br />然后，你就可以通过dblink访问远程数据库了。<br />如：<br />sql&gt;select * from 表名@ora9i.us.oracle.com;<br />还可以建立快照(snapshot)通过dblink实现远程数据自动传输。</p>
<p>查看所有的数据库链接，进入系统管理员SQL&gt;操作符下，运行命令：</p>
<p>SQL&gt;select owner,object_name from dba_objects where object_type='DATABASE LINK';</p>
<p>&nbsp;</p>
<p>实际应用举例</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>oracle 数据库连接就像你在程序中建立一个到数据库的连接一样。</p>
<p>如果数据库不在本地主机,必须在$ORACLE_HOME/network/admin/tnsnames.ora中配置相应的tns，然后程序才能通过配置好的tns访问数据库，但是java通过thin方式访问oracle例外，可以采用在本地配置好的tns别名，也可以采用tns全解析名，采用别名等号后的全描述符；如下：</p>
<p>TESTCZ =<br />&nbsp;(DESCRIPTION =<br />&nbsp; (ADDRESS_LIST =<br />&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.9.12)(PORT = 1521))<br />&nbsp; )<br />&nbsp; (CONNECT_DATA =<br />&nbsp;&nbsp; (SERVICE_NAME = TESTCZ)<br />&nbsp; )<br />&nbsp;)</p>
<p>举例。</p>
<p>现在有两个数据库</p>
<p>adb，用户名和密码分别是adb/adb，在本地主机配置的tns名字是tns_a,所在主机a;</p>
<p>bdb，用户名和密码分别是bdb/bdb，在本地主机配置的tns名字是tns_b,所在主机b;</p>
<p>现在需要在adb上面建一个连接到bdb数据库的dblink;</p>
<p>方法1：</p>
<p>在a主机上编辑tnsnames.ora文件配置bdb数据库的tns别名tns_b，如下：</p>
<p>tns_b =<br />&nbsp;(DESCRIPTION =<br />&nbsp; (ADDRESS_LIST =<br />&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.9.12)(PORT = 1521))<br />&nbsp; )<br />&nbsp; (CONNECT_DATA =<br />&nbsp;&nbsp; (SERVICE_NAME = dbtestb)<br />&nbsp; )<br />&nbsp;)</p>
<p>然后创建数据库连接，如下：</p>
<p>create database link</p>
<p>connect to bdb identified by identified by bdb</p>
<p>using 'tns_b';</p>
<p>方法2：</p>
<p>如果没有权限修改tnsnames.ora，那么就没有办法建立到adb数据库的tns别名，那么就只能采用在创建dblink的时候，全写解析符号。创建dblink的方法如下：</p>
<p>create database link</p>
<p>connect to bdb identified by identified by bdb</p>
<p>using '(DESCRIPTION =<br />&nbsp; (ADDRESS_LIST =<br />&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.9.12)(PORT = 1521))<br />&nbsp; )<br />&nbsp; (CONNECT_DATA =<br />&nbsp;&nbsp; (SERVICE_NAME = dbtestb)<br />&nbsp; )<br />&nbsp;)';</p>
<p>创建好tns别名之后，可以采用sqlplus <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#117;&#115;&#101;&#114;&#110;&#97;&#109;&#101;&#47;&#112;&#97;&#115;&#115;&#119;&#111;&#114;&#100;&#64;&#116;&#110;&#115;&#110;&#97;&#109;&#101;">username/password@tnsname</a>来测试创建的tns别名是否正确。</p>
<p>我在生产系统中创建的一个dblink示例：</p>
<p>create database link NEW_DBLINK<br />&nbsp; connect to AIIPS identified by "1qaz2wsx"<br />&nbsp; using '(DESCRIPTION =<br />&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.193.12)(PORT = 1521))<br />&nbsp;&nbsp;&nbsp; )<br />&nbsp;&nbsp;&nbsp; (CONNECT_DATA =<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVICE_NAME = zjpub)<br />&nbsp;&nbsp;&nbsp; )<br />&nbsp; )';<br />然后访问就可以通过<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#116;&#97;&#98;&#108;&#101;&#110;&#97;&#109;&#101;&#64;&#78;&#69;&#87;&#95;&#68;&#66;&#76;&#73;&#78;&#75;">tablename@NEW_DBLINK</a>访问，也可以建立同义词访问：<br />create or replace synonym LINKTABLE_TABLENAME<br />&nbsp; for <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#68;&#69;&#86;&#79;&#80;&#69;&#82;&#46;&#84;&#95;&#82;&#79;&#85;&#84;&#95;&#82;&#65;&#73;&#78;&#49;&#77;&#73;&#78;&#85;&#84;&#69;&#64;&#68;&#66;&#76;&#73;&#78;&#75;&#49;&#48;&#95;&#48;&#95;&#54;&#52;&#95;&#50;&#49;&#53;&#46;&#82;&#69;&#71;&#82;&#69;&#83;&#83;&#46;&#82;&#68;&#66;&#77;&#83;&#46;&#68;&#69;&#86;&#46;&#85;&#83;&#46;&#79;&#82;&#65;&#67;&#76;&#69;&#46;&#67;&#79;&#77;">TABLENAME@<u><font color="#0000ff">NEW_DBLINK</font></u></a>;<br />然后访问就可以使用同义词例如：select *&nbsp; from LINKTABLE_TABLENAME<br />；<br />部分转载自：<a href="http://www.linuxidc.com/Linux/2010-05/26105.htm">http://www.linuxidc.com/Linux/2010-05/26105.htm</a></p><img src ="http://www.blogjava.net/freeman1984/aggbug/358372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-09-09 15:54 <a href="http://www.blogjava.net/freeman1984/archive/2011/09/09/358372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 闪回</title><link>http://www.blogjava.net/freeman1984/archive/2011/09/07/358196.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Wed, 07 Sep 2011 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/09/07/358196.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/358196.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/09/07/358196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/358196.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/358196.html</trackback:ping><description><![CDATA[flashback table与9i的flashback query相似，利用undo信息来恢复一个或者一些表到现在以前的一个时间点（一个快照）。Undo相关参数如下，需要确保AUM与足够的retention值。<br /><br />&nbsp; SQL&gt; show parameter undo<br />&nbsp; NAME TYPE VALUE<br />&nbsp; ------------------------------------ <br />&nbsp; undo_management string AUTO<br />&nbsp; undo_retention integer 900<br />&nbsp; undo_tablespace string UNDOTBS1<br />&nbsp; 首先要说明的是，flashback table不等于flashback query，所谓query，仅仅是查询以前的一个快照点而已，并不改变当前表的状态，而flashback table不一样，将改变当前表及附属对象一起回到以前的时间点。<br />&nbsp; 其实9i的flashback query在10g中也有了新的变化，10g中可以简单的利用以下语句实现flashback query，而不再需要象9i那样需要调用DBMS_FLASHBACK包。<br />&nbsp; SELECT * FROM TABLENAME AS OF TIMESTAMP<br />&nbsp; TO_TIMESTAMP('2003-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')<br />&nbsp; WHERE &#8230;&#8230;;<br /><br />&nbsp; 10g的flashback table有如下特性<br />&nbsp; &#183; 在线操作 <br />&nbsp; &#183; 恢复到指定时间点或者SCN的任何数据. <br />&nbsp; &#183; 自动恢复相关属性，如索引，触发器等 <br />&nbsp; &#183; 满足分布式的一致性 <br />&nbsp; &#183; 满足数据一致性，所有相关对象将自动一致 <br />&nbsp; 语法为：<br />&nbsp; FLASHBACK TABLE tablename TO TIMESTAMP (JUL-07-2003, 02:33:00) <br />&nbsp; FLASHBACK TABLE employee TO SCN 123456;<br />&nbsp; FLASHBACK TABLE t1 TO TIMESTAMP '2003-03-03 12:05:00' ENABLE TRIGGERS;<br />&nbsp; 其中ENABLE TRIGGERS表示触发器恢复之后为enable状态，而默认为disable状态。<br /><br />&nbsp; 注意：如果需要flashback一个表，需要保证<br />&nbsp; 需要有flashback any table的系统权限或者是该表的flashback对象权限。<br />&nbsp; 需要有该表的SELECT, INSERT, DELETE, ALTER权限<br />&nbsp; 必须保证该表ROW MOVEMENT<br /><br />&nbsp; 下面，我们用一个详细的例子来说明这个过程：<br />&nbsp; 16:16:51 SQL&gt; create user flash identified by flash;<br />&nbsp; User created.<br />&nbsp; 16:17:04 SQL&gt; grant connect,resource to flash;<br />&nbsp; Grant succeeded.<br />&nbsp; 16:17:19 SQL&gt; connect flash/flash;<br />&nbsp; Connected.<br />&nbsp; 16:26:35 SQL&gt; create table t1 as select * from all_objects;<br />&nbsp; Table created.<br />&nbsp; 16:37:24 SQL&gt; create table t2 as select * from t1;<br />&nbsp; Table created.<br /><br />&nbsp; 16:37:35 SQL&gt; select count(*) from t1;<br />&nbsp; COUNT(*)<br />&nbsp; ----------<br />&nbsp; 38949<br />&nbsp; 16:37:43 SQL&gt; select count(*) from t2;<br />&nbsp; COUNT(*)<br />&nbsp; ----------<br />&nbsp; 38949<br />&nbsp; 16:38:06 SQL&gt; create index inx_test1 on T1 (object_name);<br />&nbsp; Index created.<br />&nbsp; 16:39:55 SQL&gt; create index inx_test2 on T1 (object_id);<br />&nbsp; Index created.<br />&nbsp; 16:40:47 SQL&gt; select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;<br />&nbsp; TO_CHAR(SYSDATE,'YY<br />&nbsp; -------------------<br />&nbsp; 2004-04-06 16:41:18<br />&nbsp; 以上获得一个时间戳，假定我们要恢复该表到这个时间，那么以下对该表的操作都将被前滚。<br />&nbsp; 16:41:18 SQL&gt; drop index inx_test1;<br />&nbsp; Index dropped.<br />&nbsp; 16:41:33 SQL&gt; delete from t1;<br />&nbsp; 38949 rows deleted.<br />&nbsp; 16:41:46 SQL&gt; commit;<br />&nbsp; Commit complete.<br />&nbsp; 16:41:49 SQL&gt; truncate table t2;<br />&nbsp; Table truncated.<br /><br />&nbsp; 在以上的操作中，我们delete一个表，然后truncate一个表，下面，我们将来看看flashback table的效果，能恢复到什么程度<br />&nbsp; 16:37:55 SQL&gt; ALTER TABLE t1 ENABLE ROW MOVEMENT;<br />&nbsp; Table altered.<br />&nbsp; 16:38:03 SQL&gt; ALTER TABLE t2 ENABLE ROW MOVEMENT;<br />&nbsp; Table altered.<br /><br />&nbsp; 16:43:10 SQL&gt; flashback table t1 TO TIMESTAMP to_timestamp('2004-04-06 16:41:18','yyyy-mm-dd hh24:mi:ss');<br />&nbsp; Flashback complete.<br />&nbsp; 16:43:49 SQL&gt; flashback table t2 TO TIMESTAMP to_timestamp('2004-04-06 16:41:18','yyyy-mm-dd hh24:mi:ss');<br />&nbsp; flashback table t2 TO TIMESTAMP to_timestamp('2004-04-06 16:41:18','yyyy-mm-dd hh24:mi:ss')<br />&nbsp; *<br />&nbsp; ERROR at line 1:<br />&nbsp; ORA-01466: unable to read data - table definition has changed<br /><br />&nbsp; 我们可以发现，执行delete操作的表是可以恢复的，而执行truncate操作的表是不可以恢复的，这正好也说明了flashback table利用undo的结论。<br />&nbsp; 看看我们的结果：<br />&nbsp; SQL&gt; select count(*) from t1;<br />&nbsp; COUNT(*)<br />&nbsp; ----------<br />&nbsp; 38949<br />&nbsp; SQL&gt; select count(*) from t2;<br />&nbsp; COUNT(*)<br />&nbsp; ----------<br />&nbsp; 0<br /><br />&nbsp; SQL&gt; select t.index_name from user_indexes t where t.table_name='T1'; <br />&nbsp; INDEX_NAME<br />&nbsp; ------------------------------<br />&nbsp; INX_TEST2<br />&nbsp; 还可以看到，对于drop的索引，也是没有办法恢复的，因为drop并不记录undo，所以所谓索引的恢复，仅仅是相关索引树的改变而不能找回删除掉的索引。<br /><br />-----------------------其他<br />闪回某个字段的修改：首先我们在pl/sql里面邮件查看表最后的LAST_DDL_TIME，然后可以闪回到这个时间之前的每一个值。<br />update tablename t set t.columname=(select columname &nbsp;from <br />tablename &nbsp; as of&nbsp; timestamp to_date('2011-9-7 10:05:07','yyyy-mm-dd hh24:mi:ss') where id=t.id) <br /><br />有的闪回需要启动表的移动功能才能闪回<br />alter table tablename&nbsp; enable row movement;<br />flashback table tablename TO TIMESTAMP to_timestamp('2011-11-14 16:30:18','yyyy-mm-dd hh24:mi:ss');<br /><img src ="http://www.blogjava.net/freeman1984/aggbug/358196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-09-07 16:11 <a href="http://www.blogjava.net/freeman1984/archive/2011/09/07/358196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RMAN备份与恢复资料 </title><link>http://www.blogjava.net/freeman1984/archive/2011/08/27/357411.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Sat, 27 Aug 2011 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/08/27/357411.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/357411.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/08/27/357411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/357411.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/357411.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; sqlplus /nolog <br />&nbsp;&nbsp; conn /as sysdba<br />&nbsp;&nbsp; archive log list (查看数据库是否处于归档模式中) 
<p>&nbsp;&nbsp; 若为非归档,则修改数据库归档模式。<br />&nbsp;&nbsp; startup mount<br />&nbsp;&nbsp; alter database archivelog<br />&nbsp;&nbsp; alter database open</p>
<p>2.连接到target数据库</p>
<p>命令： connect target&nbsp; / (connect target <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#121;&#115;&#116;&#101;&#109;&#47;&#111;&#114;&#97;&#99;&#108;&#101;&#64;&#111;&#114;&#97;&#49;&#48;&#103;"><font color="#336699">system/oracle@ora10g</font></a>,如果数据库没有起来，也可要直接在rman命令下用startup进行启动数据库) <br />可以连接到target database.(rman 一边连接到target数据库，另外一边连接到control file(nocatalog mode),control file 中存储rman 的备份信息)</p>
<p>3.用list backupset 命令查看有没有备份的东西</p>
<p>4. 常用备份命令：<br />&nbsp;备份全库：<br />RMAN&gt; backup database plus archivelog delete input;&nbsp;&nbsp;&nbsp;&nbsp; (备份全库及控制文件、服务器参数文件与所有归档的重做日志，并删除旧的归档日志)<br />备份表空间：<br />RMAN&gt; backup tablespace system plus archivelog delete input;&nbsp;&nbsp;&nbsp;&nbsp; (备份指定表空间及归档的重做日志，并删除旧的归档日志)_<br />备份归档日志：<br />RMAN&gt; backup archivelog all delete input;</p>
<p><br />======================对整个数据库进行备份==================</p>
<p>1.对整个数据库进行全备份(full backup)。</p>
<p>&nbsp;&nbsp;&nbsp; 只要输入命令: backup database;</p>
<p>2.list backupset 查看备份的具体信息</p>
<p>List of Backup Sets<br />===================</p>
<p>BS Key&nbsp; Type LV Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Device Type Elapsed Time Completion Time<br />------- ---- -- ---------- ----------- ------------ ---------------<br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Full&nbsp;&nbsp;&nbsp; 6.80M&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DISK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00:00:02&nbsp;&nbsp;&nbsp;&nbsp; 06-DEC-08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BP Key: 1&nbsp;&nbsp; Status: AVAILABLE&nbsp; Compressed: NO&nbsp; Tag: TAG20081206T201041<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Piece Name: /home/oracle/flash_recovery_area/ORA10G/backupset/2008_12_06/o1_mf_ncsnf_TAG20081206T201041_4mntz78s_.bkp<br />&nbsp; Control File Included: Ckp SCN: 782019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ckp time: 06-DEC-08<br />&nbsp; SPFILE Included: Modification time: 06-DEC-08</p>
<p>BS(backupset), piece是一个文件，一个BS包含多个piece.</p>
<p>3.rman中缺省的参数，可以通过 show all ;<br />来进行查看(RMAN configuration parameters),我们在使用backup database命令中，可以把这些default value 用固定的值来进行替代.</p>
<p>4.我们可以把备份的文件才备份的目录中拷贝到磁带上，然后删除备份目录下面的备份文件，如果下次需要恢复的话，只要把文件重新拷回到用来的备份目录就可以了<br />5.查看control file 文件中的备份信息(因为我们做的备份是在nocatalog模式下),control file 在/u01/oracle/oradata/ora10g目录下,由于control file 是个二进制文件，要查看control file 文件中的内容，用strings control03.ctl,发现control03.ctl中有rman备份的信息了</p>
<p>&nbsp;<br />====================0级增量备份===============</p>
<p>概念：全备份和0级增量备份。全备份和0级增量备份几乎是一样的。唯一的区别，0级增量备份能作为增量备份的基础，而全备份不能作为增量备份的基础。其它方面完全一致</p>
<p>1.backup incremental level=0(leve 0) database;(增量为0的备份)<br />2.backup incremental level 1(level=1) database;(增量为1的备份)<br />&nbsp;<br />在上面的备份中，我们备份了datafile,controlfile和parameter file.没有备份的文件有归档日志，重做日志和口令文件没有备份.口令文件不需要备份，我们用orapw来创建一个</p>
<p>新的口令文件.rman 在nocatalog模式下，不能够对redo log file 进行备份</p>
<p><br />===================备份archivelog 在nocatalog模式下=================</p>
<p>命令:backup database plus archivelog delete input(delete input的意思在备份完成后，删除 archivelog文件，这个选项可要可不要，这个命令也可以用 backup incremental level=0(1,2...)来进行备份)</p>
<p><br />=======================备份表空间====================</p>
<p>backup tablespace tablespacename</p>
<p>如果我们不知道tablespace的名字，在rman中，可要通过report schema命令，来查看表空间的名字</p>
<p>MAN&gt; report schema;<br />Report of database schema</p>
<p>List of Permanent Datafiles<br />===========================<br />File Size(MB) Tablespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RB segs Datafile Name<br />---- -------- -------------------- ------- ------------------------<br />1&nbsp;&nbsp;&nbsp; 480&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SYSTEM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ***&nbsp;&nbsp;&nbsp;&nbsp; /home/oracle/oradata/ora10g/system01.dbf<br />2&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UNDOTBS1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ***&nbsp;&nbsp;&nbsp;&nbsp; /home/oracle/oradata/ora10g/undotbs01.dbf<br />3&nbsp;&nbsp;&nbsp; 250&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SYSAUX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ***&nbsp;&nbsp;&nbsp;&nbsp; /home/oracle/oradata/ora10g/sysaux01.dbf<br />4&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; USERS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ***&nbsp;&nbsp;&nbsp;&nbsp; /home/oracle/oradata/ora10g/users01.dbf<br />5&nbsp;&nbsp;&nbsp; 200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PERFSTAT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ***&nbsp;&nbsp;&nbsp;&nbsp; /home/oracle/oradata/ora10g/perfstat.dbf</p>
<p>List of Temporary Files<br />=======================<br />File Size(MB) Tablespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maxsize(MB) Tempfile Name<br />---- -------- -------------------- ----------- --------------------<br />1&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TEMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32767&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home/oracle/oradata/ora10g/temp01.dbf</p>
<p>========================备份控制文件====================</p>
<p>backup current controlfile</p>
<p>backup database include current controlfile</p>
<p>========================备份镜像========================</p>
<p>在rman的备份中有两种方式:备份集(backupset)和备份镜像(image copies).镜像备份主要是文件的拷贝:copy datafile ... to ...</p>
<p>我们在rman&gt;report schema;</p>
<p>Report of database schema</p>
<p>List of Permanent Datafiles<br />===========================<br />File Size(MB) Tablespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RB segs Datafile Name<br />---- -------- -------------------- ------- ------------------------<br />1&nbsp;&nbsp;&nbsp; 480&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SYSTEM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ***&nbsp;&nbsp;&nbsp;&nbsp; /home/oracle/oradata/ora10g/system01.dbf<br />2&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UNDOTBS1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ***&nbsp;&nbsp;&nbsp;&nbsp; /home/oracle/oradata/ora10g/undotbs01.dbf<br />3&nbsp;&nbsp;&nbsp; 250&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SYSAUX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ***&nbsp;&nbsp;&nbsp;&nbsp; /home/oracle/oradata/ora10g/sysaux01.dbf<br />4&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; USERS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ***&nbsp;&nbsp;&nbsp;&nbsp; /home/oracle/oradata/ora10g/users01.dbf<br />5&nbsp;&nbsp;&nbsp; 200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PERFSTAT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ***&nbsp;&nbsp;&nbsp;&nbsp; /home/oracle/oradata/ora10g/perfstat.dbf</p>
<p>List of Temporary Files<br />=======================<br />File Size(MB) Tablespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maxsize(MB) Tempfile Name<br />---- -------- -------------------- ----------- --------------------<br />1&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TEMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32767&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home/oracle/oradata/ora10g/temp01.dbf</p>
<p>rman&gt;copy datafile 5 to '/u01/rmanbak/tbso1bak.dbf';(copy 5 对应的schme:perfstat.dbf)</p>
<p>它会把tbs作为一个拷贝。我们用list backupset来看，不能够查看我们刚备份的 tbs01bak.dbf',因为它不是backupset. 我们用list copy 就能够查看我们刚才刚刚备份的文件</p>
<p>&nbsp;<br />=======================单命令与批命令=================</p>
<p>单命令: backup database;</p>
<p>批命令:</p>
<p>rman&gt; run{<br />&nbsp;2&gt; allocate channel cha1 type disk;<br />&nbsp;3&gt; backup<br />&nbsp;4&gt; format '/u01/rmanbak/full_%t'<br />&nbsp;5&gt; tag full-backup //标签可以顺便起，没关系<br />&nbsp;6&gt; database;<br />&nbsp;7&gt; release channel cha1;<br />&nbsp;8&gt;}</p>
<p>这个run中有3条命令，分别用分号来进行分割.</p>
<p>format:<br />%c：备份片的拷贝数(从1开始编号)；<br />%d：数据库名称；<br />%D：位于该月中的天数(DD)；<br />%M：位于该年中的月份(MM)；<br />%F：一个基于DBID唯一的名称，这个格式的形式为c-xxx-YYYYMMDD-QQ,其中xxx位该数据库的DBID，YYYYMMDD为日期，QQ是一个1-256的序列；<br />%n：数据库名称，并且会在右侧用x字符进行填充，使其保持长度为8；<br />%u：是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集产生一个唯一的名称；<br />%p：表示备份集中的备份片的编号，从1开始编号；<br />%U：是%u_%p_%c的简写形式，利用它可以为每一个备份片段(既磁盘文件)生成一个唯一的名称，这是最常用的命名方式；<br />%t：备份集时间戳;<br />%T:年月日格式(YYYYMMDD);</p>
<p>channel的概念：一个channel是rman于目标数据库之间的一个连接，"allocate channel"命令在目标数据库启动一个服务器进程，同时必须定义服务器进程执行备份和恢复操作使</p>
<p>用的I/O类型</p>
<p>通道控制命令可以用来:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 控制rman使用的OS资源<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 影响并行度<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定I/O带宽的限制值(设置 limit read rate 参数)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定备份片大小的限制(设置 limit kbytes)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定当前打开文件的限制值(设置 limit maxopenfiles)</p>
<p>&nbsp;<br />=================================RMAN一周典型备份方案============================</p>
<p>1.星期天晚上&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -level 0 backup performed(全备份)<br />2.星期一晚上&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -level 2 backup performed<br />3.星期二晚上&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -level 2 backup performed<br />4.星期三晚上&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -level 1 backup performed<br />5.星期四晚上&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -level 2 backup performed<br />6.星期五晚上&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -level 2 backup performed<br />7.星期六晚上&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -level 2 backup performed</p>
<p>&nbsp;<br />如果星期二需要恢复的话，只需要1+2,<br />如果星期四需要恢复的话，只需要1+4,<br />如果星期五需要恢复的话，只需要1+4+5,<br />如果星期六需要恢复的话，只需要1+4+5+6.</p>
<p>自动备份:备份脚本+crontab<br />&nbsp;bakl0<br />&nbsp;bakl1<br />&nbsp;bakl2</p>
<p>执行脚本:<br />rman target / msglog=bakl0.log cmdfile=bakl0 (/表示需要连接的目标数据库,msglog表示日志文件，cmdfile表示的是脚本文件)<br />rman target / msglog=bakl1.log cmdfile=bakl1<br />rman target / msglog=bakl2.log cmdfile=bakl2</p>
<p>实例：rman target <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#121;&#115;&#116;&#101;&#109;&#47;&#111;&#114;&#97;&#99;&#108;&#101;&#64;&#111;&#114;&#97;&#49;&#48;&#103;&#40;&#47;"><font color="#336699">system/oracle@ora10g(/</font></a>) msglog=/u01/rmanbak/bakl1.log cmdfile=/u01/rmanbak/bakl0 </p>
<p><br />完整的命令:/u01/oracle/product/10.2.0/bin/rman target <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#121;&#115;&#116;&#101;&#109;&#47;&#111;&#114;&#97;&#99;&#108;&#101;&#64;&#111;&#114;&#97;&#49;&#48;&#103;&#40;&#47;"><font color="#336699">system/oracle@ora10g(/</font></a>) msglog=/u01/rmanbak/bakl1.log cmdfile=/u01/rmanbak/bakl0 </p>
<p>&nbsp;<br />把备份脚本放到/u01/rmanbak/script目录下面,vi bakl0,bakl0的内容为:</p>
<p>run{<br />&nbsp;&nbsp;&nbsp; allocate channel cha1 type disk;<br />&nbsp;&nbsp;&nbsp; backup<br />&nbsp;&nbsp;&nbsp; incremental level&nbsp; 0<br />&nbsp;&nbsp;&nbsp; format '/u01/rmanbak/inc0_%u_%T'(u表示唯一的ID,大T是日期，小t是时间)<br />&nbsp;&nbsp;&nbsp; tag monday_inc0 //标签可以顺便起，没关系<br />&nbsp;&nbsp;&nbsp; database;<br />&nbsp;&nbsp;&nbsp; release channel cha1;<br />&nbsp;&nbsp;&nbsp; }<br />，类似就可以写出bakl1,bakl2相应的脚本.</p>
<p>&nbsp;<br />自动备份<br />crontab<br />crontab -e -u oracle(改命令的意思是编辑oracle用户的定时执行(-e,edit -u oracle,oracle用户))</p>
<p>分&nbsp; 时&nbsp; 日 月 星期(0代表星期天)<br />45 23&nbsp; *&nbsp; *&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; rman target / msglog=bakl0.log cmdfile=bakl0(星期天的23:45会以oracle用户的身份来执行命令)<br />45 23&nbsp; *&nbsp; *&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; rman target / msglog=bakl2.log cmdfile=bakl2<br />45 23&nbsp; *&nbsp; *&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; rman target / msglog=bakl2.log cmdfile=bakl2<br />45 23&nbsp; *&nbsp; *&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp; rman target / msglog=bakl1.log cmdfile=bakl1<br />45 23&nbsp; *&nbsp; *&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp; rman target / msglog=bakl2.log cmdfile=bakl2<br />45 23&nbsp; *&nbsp; *&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp; rman target / msglog=bakl2.log cmdfile=bakl2<br />45 23&nbsp; *&nbsp; *&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp; rman target / msglog=bakl2.log cmdfile=bakl2</p>
<p>然后启动crontab ,启动crontab的命令:<br />root&gt; service crond restart<br />&nbsp; <br />=======================RMAN恢复================</p>
<p>在非catalog模式下，备份的信息存储在controlfile文件中，如果controlfile文件发生毁坏，那么就不能能够进行恢复，<br />使用在备份的时候需要把controlfile也进行自动备份 <br />&nbsp;<br />RMAN&gt;show all;<br />using target database control file instead of recovery catalog<br />RMAN configuration parameters are:<br />CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default<br />CONFIGURE BACKUP OPTIMIZATION OFF; # default<br />CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default<br />CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default<br />CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default<br />CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default<br />CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default<br />CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default<br />CONFIGURE MAXSETSIZE TO UNLIMITED; # default<br />CONFIGURE ENCRYPTION FOR DATABASE OFF; # default<br />CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default<br />CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default<br />CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/home/oracle/product/10.20/dbs/snapcf_ora10g.f'; # default</p>
<p>其中CONFIGURE CONTROLFILE AUTOBACKUP OFF; 没有对controlfile进行 autobackup,使用我们需要运行下面命令来对controlfile进行自动备份<br />RMAN&gt; CONFIGURE CONTROLFILE AUTOBACKUP ON;</p>
<p>RMAN&gt; show all; </p>
<p>手动备份控制文件：<br />backup current controlfile</p>
<p><br />Dbid表示database的一个ID，将来用于恢复spfile和controlfile时候要用到.<br />RMAN&gt; connect target /<br />connected to target database: ORA10G (DBID=3988862108)<br />这个Dbid=3988862108<br />&nbsp;</p>
<p>RMAN&gt; list backup;查看以前备份的信息<br />RMAN&gt;delete backupset 24;//24代表backupset 的编号<br />RMAN&gt;backup format '/u01/rmanbak/full_%T_%U.bak' database plus archivelog;(进行一次全备份)</p>
<p>验证备份：<br />RMAN&gt; validate backupset 3;&nbsp; //3代表backupset的编号</p>
<p>口令文件丢失(不属于rman备份的范畴),我们只需要用一个命令来重建这个文件就可以了:<br />orapw file=orapwsid password=pass entries=5;&nbsp; //口令文件的路径:/u01/oracle/product/10.20/db_1/dbs目录下<br />oracle&gt; cd /u01/oracle/product/10.20/db_1/dbs<br />oracle&gt; rm orapwora10g;(文件删除，模拟丢失)<br />oracle&gt; orapwd file=orapwora10g password=oracle entries=5;(重新建立一个文件),entries的意思(DBA的用户最多有5个)</p>
<p>SPFILE丢失:<br />startup nomount;<br />set dbid 3988862108;<br />restore spfile from </p><br />转自：<a href="http://blog.csdn.net/newhappy2008/article/details/6546550">http://blog.csdn.net/newhappy2008/article/details/6546550</a><img src ="http://www.blogjava.net/freeman1984/aggbug/357411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-08-27 17:09 <a href="http://www.blogjava.net/freeman1984/archive/2011/08/27/357411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle冷备份 </title><link>http://www.blogjava.net/freeman1984/archive/2011/08/27/357410.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Sat, 27 Aug 2011 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/08/27/357410.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/357410.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/08/27/357410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/357410.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/357410.html</trackback:ping><description><![CDATA[<div class="article_content">
<p align="left">转自：<a href="http://blog.csdn.net/newhappy2008/article/details/6587143">http://blog.csdn.net/newhappy2008/article/details/6587143</a><br />一、冷备份</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;数据库在关闭状态下完成所有物理系统文件拷贝的过程，也称脱机备份</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;适合于非归档模式下，数据库处于一致性状态</p>
<p align="left">&nbsp;&nbsp;&nbsp;</p>
<p align="left">二、步骤&nbsp;&nbsp;&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;首先在运行的库中得到数据库运行的所有的物理文件位置，然后在计划内关闭数据库(shutdown)</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;再执行拷贝物理文家到备份路径或备份设备</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;备份完成后立即启动数据库让其提供正常的服务</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">三、冷备脚本的写法</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;首先应该在相关视图里查出数据库的数据文件，日志文件，控制文件，临时文件所在的位置</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;注意：不要直接把oradata下的cp就行了，因为生产库里各个文件通常分布在不同的磁盘，不同的地方，所以在去视图里获得真实路径&nbsp;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;--查看实例和数据库的相关信息</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;&nbsp;select&nbsp;instance_name,version,status,archiver,database_status&nbsp;from&nbsp;v$instance;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;INSTANCE_NAME&nbsp;&nbsp;&nbsp;&nbsp;VERSION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STATUS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARCHIVE DATABASE_STATUS</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;---------------- ----------------- ------------ ------- -----------------</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;orcl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10.2.0.1.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STOPPED ACTIVE</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;&nbsp;select&nbsp;dbid,name,log_mode&nbsp;from&nbsp;v$database;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBID&nbsp;NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOG_MODE</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;---------- --------- ------------</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;1242732291 ORCL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOARCHIVELOG</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;--查看数据文件及状态信息</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;&nbsp;select&nbsp;file_name,tablespace_name,status,online_status&nbsp;from&nbsp;dba_data_files;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;FILE_NAME&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;TABLESPACE STATUS&nbsp;&nbsp;&nbsp;&nbsp;ONLINE_</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;------------------------------------------------------- ---------- --------- -------</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/undotbs01.dbf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UNDOTBS1&nbsp;&nbsp;&nbsp;AVAILABLE ONLINE</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/system01.dbf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SYSTEM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AVAILABLE SYSTEM</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/sysaux01.dbf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SYSAUX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AVAILABLE ONLINE</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/users01.dbf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USERS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AVAILABLE ONLINE</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/example01.dbf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXAMPLE&nbsp;&nbsp;&nbsp;&nbsp;AVAILABLE ONLINE</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/tbs1_1.dbf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TBS1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AVAILABLE ONLINE</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/tbs1_2.dbf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TBS1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AVAILABLE ONLINE</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;--查看数据文件</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;&nbsp;select&nbsp;name&nbsp;from&nbsp;v$datafile;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;NAME</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;--------------------------------------------------------------------------------</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/system01.dbf</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/undotbs01.dbf</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/sysaux01.dbf</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/users01.dbf</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/example01.dbf</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/tbs1_1.dbf</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/tbs1_2.dbf</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;--查看临时文件</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;&nbsp;select&nbsp;name&nbsp;from&nbsp;v$tempfile;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;NAME</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;--------------------------------------------------------------------------------</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/temp01.dbf</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;--查看日志文件</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;&nbsp;select&nbsp;member&nbsp;from&nbsp;v$logfile;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;MEMBER</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;------------------------------------------------------------</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/redo2a.rdo</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/redo2b.rdo</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/redo1a.rdo</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/redo3a.rdo</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/redo3b.rdo</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/redo1b.rdo</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;--查看控制文件</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;&nbsp;select&nbsp;name&nbsp;from&nbsp;v$controlfile;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;NAME</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;------------------------------------------------------------</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/control01.ctl</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/u01/app/oracle/oradata/orcl/control02.ctl</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;--创建备份目录</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;&nbsp;ho mkdir&nbsp;/u01/app/oracle/coolbak</p>
<p align="left">&nbsp;&nbsp;&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;--使用连接符生成复制文件命令</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;&nbsp;select&nbsp;'ho cp '&nbsp;||&nbsp;name&nbsp;||&nbsp;' /u01/app/oracle/coolbak'&nbsp;from&nbsp;v$controlfile;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;'HOCP'||NAME||'/U01/APP/ORACLE/COOLBAK'</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------------------------------------------------</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;ho cp&nbsp;/u01/app/oracle/oradata/orcl/control01.ctl&nbsp;/u01/app/oracle/coolbak</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;ho cp&nbsp;/u01/app/oracle/oradata/orcl/control02.ctl&nbsp;/u01/app/oracle/coolbak</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;&nbsp;save&nbsp;/tmp/tmpbak.sql;&nbsp;&nbsp;&nbsp;--将上面的输入保存为tmpbak.sql</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;Created&nbsp;file&nbsp;/tmp/tmpbak.sql</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;&nbsp;ho vim&nbsp;/tmp/tmpbak.sql&nbsp;&nbsp;&nbsp;--编辑tmpbak.sql,将下面的内容输入到tmpbak.sql</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;feedback&nbsp;off</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;heading&nbsp;off</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;verify&nbsp;off</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;trimspool&nbsp;off</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;pagesize 0</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;linesize 200</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;define dir&nbsp;=&nbsp;'/u01/app/oracle/coolbak'</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;define script&nbsp;=&nbsp;'/tmp/coolbak.sql'</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;spool&nbsp;&amp;script</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;'ho cp '&nbsp;||&nbsp;name&nbsp;||&nbsp;' &amp;dir'&nbsp;from&nbsp;v$controlfile</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;all</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;'ho cp '&nbsp;||&nbsp;name&nbsp;||&nbsp;' &amp;dir'&nbsp;from&nbsp;v$datafile</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;all</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;'ho cp '&nbsp;||&nbsp;member&nbsp;||&nbsp;' &amp;dir'&nbsp;&nbsp;from&nbsp;v$logfile</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;all</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;'ho cp '&nbsp;||&nbsp;name&nbsp;||&nbsp;' &amp;dir'&nbsp;from&nbsp;v$tempfile</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;/</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;create&nbsp;pfile&nbsp;=&nbsp;'&amp;dir/initorcl.ora'&nbsp;from&nbsp;spfile;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;ho cp&nbsp;/u01/app/oracle/10g/dbs/orapworcl&nbsp;&amp;dir</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;spool&nbsp;off</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;shutdown&nbsp;immediate</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;&amp;script</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;ho rm&nbsp;&amp;script</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;startup</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;--执行tmpbak.sql</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;&nbsp;@/tmp/tmpbak.sql;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;--执行过程及数据库启动略</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;--启动后查看备份的文件</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;SQL&gt;&nbsp;ho ls&nbsp;/u01/app/oracle/coolbak</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;control01.ctl&nbsp;&nbsp;orapworcl&nbsp;&nbsp;&nbsp;redo2b.rdo&nbsp;&nbsp;&nbsp;&nbsp;system01.dbf&nbsp;&nbsp;&nbsp;users01.dbf</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;control02.ctl&nbsp;&nbsp;redo1a.rdo&nbsp;&nbsp;redo3a.rdo&nbsp;&nbsp;&nbsp;&nbsp;tbs1_1.dbf</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;example01.dbf&nbsp;&nbsp;redo1b.rdo&nbsp;&nbsp;redo3b.rdo&nbsp;&nbsp;&nbsp;&nbsp;tbs1_2.dbf</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;initorcl.ora&nbsp;&nbsp;&nbsp;redo2a.rdo&nbsp;&nbsp;sysaux01.dbf&nbsp;&nbsp;undotbs01.dbf</p>
<p align="left">&nbsp;</p>
<p align="left">四、总结</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;优点</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;冷备模式下概念易于理解，即将需要备份的文件复制到安全的位置</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;操作比较简单，不需要太多的干预</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;容易恢复到某个时间点上(只需将文件再拷贝回去)</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;能与归档方法相结合，作数据库&#8220;最新状态&#8221;的恢复。</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;缺点</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;备份时，数据库必须处于一致性关闭状态</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;只能提供到某一时间点的恢复</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;备份时速度比较慢，尤其是数据量大性能影响比较大</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不能实现基于表和用户级别的数据恢复</p></div><img src ="http://www.blogjava.net/freeman1984/aggbug/357410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-08-27 17:04 <a href="http://www.blogjava.net/freeman1984/archive/2011/08/27/357410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何处理Oracle中TEMP表空间满的问题？ </title><link>http://www.blogjava.net/freeman1984/archive/2011/08/27/357409.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Sat, 27 Aug 2011 08:52:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/08/27/357409.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/357409.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/08/27/357409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/357409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/357409.html</trackback:ping><description><![CDATA[<span id="ArticleTitle1_ArticleTitle1_lblTitle"><strong>如何处理Oracle中TEMP表空间满的问题？</strong></span> 
<p><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp; 选择自 <a id="ArticleTitle1_ArticleTitle1_AuthorLink" href="http://dev.csdn.net/user/hrb_qiuyb">hrb_qiuyb</a> 的 Blog </span></p>
<p><span style="font-family: 宋体">正常来说，在完成</span><span style="font-family: 'Courier New'">Select</span><span style="font-family: 宋体">语句、</span><span style="font-family: 'Courier New'">create index</span><span style="font-family: 宋体">等一些使用</span><span style="font-family: 'Courier New'">TEMP</span><span style="font-family: 宋体">表空间的排序操作后，</span><span style="font-family: 'Courier New'">Oracle</span><span style="font-family: 宋体">是会自动释放掉临时段</span><span style="font-family: 'Courier New'">a</span><span style="font-family: 宋体">的。但有些有侯我们则会遇到临时段没有被释放，</span><span style="font-family: 'Courier New'">TEMP</span><span style="font-family: 宋体">表空间几乎满的状况，甚至是我们重启了数据库仍没有解决问题。这个问题在论坛中也常被网友问到，下面我总结一下，给出几种处理方法。</span><span style="font-family: 'Courier New'"></span></p>
<p>&nbsp;</p>
<p><strong><span style="font-family: 宋体">法一</span></strong><span style="font-family: 宋体">、重启库</span></p>
<p>&nbsp;</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">库重启时，</span><span style="font-family: 'Courier New'">Smon</span><span style="font-family: 宋体">进程会完成临时段释放</span><span style="font-family: 'Courier New'">,TEMP</span><span style="font-family: 宋体">表空间的清理操作，不过很多的时侯我们的库是不允许</span><span style="font-family: 'Courier New'">down</span><span style="font-family: 宋体">的</span><span style="font-family: 'Courier New'">,</span><span style="font-family: 宋体">所以这种方法缺少了一点的应用机会，不过这种方法还是很好用的。</span></p>
<p>&nbsp;</p>
<p><strong><span style="font-family: 宋体">法二</span></strong><span style="font-family: 宋体">、</span><span style="font-family: 'Courier New'">Metalink</span><span style="font-family: 宋体">给出的一个方法</span></p>
<p>&nbsp;</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">修改一下</span><span style="font-family: 'Courier New'">TEMP</span><span style="font-family: 宋体">表空间的</span><span style="font-family: 'Courier New'">storage</span><span style="font-family: 宋体">参数，让</span><span style="font-family: 'Courier New'">Smon</span><span style="font-family: 宋体">进程观注一下临时段，从而达到清理和</span><span style="font-family: 'Courier New'">TEMP</span><span style="font-family: 宋体">表空间的目的。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 'Courier New'">SQL&gt;alter tablespace temp increase 1; <br />SQL&gt;alter tablespace temp increase 0;</span></p>
<p>&nbsp;</p>
<p><strong><span style="font-family: 宋体">法三</span></strong><span style="font-family: 宋体">、我常用的一个方法</span><span style="font-family: 'Courier New'">,</span><span style="font-family: 宋体">具体内容如下：</span></p>
<p>&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 36pt; text-indent: -36pt"><span style="font-family: 'Courier New'">1、 </span><span style="font-family: 宋体">使用如下语句</span><span style="font-family: 'Courier New'">a</span><span style="font-family: 宋体">查看一下认谁在用临时段</span></p>
<p><span style="color: black; font-family: 'Courier New'"></span>&nbsp;</p>
<p><span style="color: black; font-family: 'Courier New'">SELECT username,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sid,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serial#,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sql_address,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; machine,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; program,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tablespace,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; segtype,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; contents <br />&nbsp; FROM v$session se,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v$sort_usage su<br />&nbsp;WHERE se.saddr=su.session_addr&nbsp; &nbsp;&nbsp;&nbsp; </span></p>
<p>&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 36pt; text-indent: -36pt"><span style="color: black; font-family: 'Courier New'">2、<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp; </span></span><span style="color: black; font-family: 宋体">那些正在使用临时段的进程</span></p>
<p><span style="color: black; font-family: 'Courier New'">&nbsp;SQL&gt;Alter system kill session 'sid,serial#';</span></p>
<p>&nbsp;</p>
<p><span style="color: black; font-family: 'Courier New'">3</span><span style="color: black; font-family: 宋体">、把</span><span style="color: black; font-family: 'Courier New'">TEMP</span><span style="color: black; font-family: 宋体">表空间回缩一下</span></p>
<p><span style="font-family: 'Courier New'">&nbsp;</span><span style="color: black; font-family: 'Courier New'">SQL&gt;Alter tablespace TEMP coalesce;</span></p>
<p>&nbsp;</p>
<p><strong><span style="color: black; font-family: 宋体">法四</span></strong><span style="color: black; font-family: 宋体">、使用诊断事件的一种方法</span><span style="color: black; font-family: 'Courier New'">,</span><span style="color: black; font-family: 宋体">也是被我认为是&#8220;杀手锏&#8221;的一种方法</span></p>
<p>&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 36pt; text-indent: -36pt"><span style="font-family: 'Courier New'">1、 </span><span style="font-family: 宋体">确定</span><span style="font-family: 'Courier New'">TEMP</span><span style="font-family: 宋体">表空间的</span><span style="font-family: 'Courier New'">ts#</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 'Courier New'">SQL&gt;select ts#, name from sys.ts$ ; <br /><br />TS# NAME <br />----------------------- <br />0 SYSYEM <br />1 RBS <br />2 USERS <br />3* TEMP <br />4 TOOLS <br />5 INDX <br />6 DRSYS <br /><br /></span></p>
<p style="margin: 0cm 0cm 0pt 36pt; text-indent: -36pt"><span style="font-family: 'Courier New'">2、 </span><span style="font-family: 宋体">执行清理操作</span></p>
<p><span style="font-family: 'Courier New'"><br />SQL&gt;alter session set events 'immediate trace name DROP_SEGMENTS level 4' ; <br /><br /></span></p>
<p><span style="font-family: 宋体">说明：</span><span style="font-family: 'Courier New'"> <br />temp</span><span style="font-family: 宋体">表空间的</span><span style="font-family: 'Courier New'">TS# </span><span style="font-family: 宋体">为</span><span style="font-family: 'Courier New'"> 3*, So TS#+ 1= 4</span></p>
<p>&nbsp;</p>
<p><strong><span style="font-family: 宋体">其它</span></strong><span style="font-family: 宋体">：</span></p>
<p>&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><span style="font-family: 'Courier New'">1、 </span><span style="font-family: 宋体">出现如上问题的原因我认为可能是由于大的排序超出了</span><span style="font-family: 'Courier New'">TEMP</span><span style="font-family: 宋体">表空间的空间允许范围引起的。也可能包含着其它的异常的因素。</span></p>
<p>&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><span style="font-family: 'Courier New'">2、 </span><span style="font-family: 宋体">观注</span><span style="font-family: 'Courier New'">TEMP</span><span style="font-family: 宋体">等这些空间的状态是</span><span style="font-family: 'Courier New'">Dba</span><span style="font-family: 宋体">日常职责之一，我们可以通过</span><span style="font-family: 'Courier New'">Toad</span><span style="font-family: 宋体">、</span><span style="font-family: 'Courier New'">Object Browser</span><span style="font-family: 宋体">等这些工具办到，也可以用如下的语句：</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 'Courier New'">SELECT UPPER(F.TABLESPACE_NAME) "表空间名",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D.TOT_GROOTTE_MB "表空间大小(M)",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '990.99') "使用比",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F.TOTAL_BYTES "空闲空间(M)",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F.MAX_BYTES "最大块(M)"<br />&nbsp; FROM (SELECT TABLESPACE_NAME,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM SYS.DBA_FREE_SPACE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GROUP BY TABLESPACE_NAME) F,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SELECT DD.TABLESPACE_NAME,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM SYS.DBA_DATA_FILES DD<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GROUP BY DD.TABLESPACE_NAME) D<br />&nbsp;WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME<br />&nbsp;ORDER BY 4 DESC</span></p><img src ="http://www.blogjava.net/freeman1984/aggbug/357409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-08-27 16:52 <a href="http://www.blogjava.net/freeman1984/archive/2011/08/27/357409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>