﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-海水正蓝-随笔分类-Oracle</title><link>http://www.blogjava.net/xiaohuzi2008/category/53151.html</link><description>面朝大海，春暖花开</description><language>zh-cn</language><lastBuildDate>Thu, 06 Jun 2013 17:04:53 GMT</lastBuildDate><pubDate>Thu, 06 Jun 2013 17:04:53 GMT</pubDate><ttl>60</ttl><item><title>oracle 监听无法启动</title><link>http://www.blogjava.net/xiaohuzi2008/archive/2013/05/30/399967.html</link><dc:creator>小胡子</dc:creator><author>小胡子</author><pubDate>Thu, 30 May 2013 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/xiaohuzi2008/archive/2013/05/30/399967.html</guid><wfw:comment>http://www.blogjava.net/xiaohuzi2008/comments/399967.html</wfw:comment><comments>http://www.blogjava.net/xiaohuzi2008/archive/2013/05/30/399967.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaohuzi2008/comments/commentRss/399967.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaohuzi2008/services/trackbacks/399967.html</trackback:ping><description><![CDATA[<div><p style="text-indent:2em">oracle监听不能启动的问题及处理过程！</p> <p style="text-indent:2em">oracle环境如下：</p> <p style="text-indent:2em">SQL&gt; select * from V$version</p> <p style="text-indent:2em">2 ;</p> <p style="text-indent:2em">BANNER</p> <p style="text-indent:2em">----------------------------------------------------------------</p> <p style="text-indent:2em">Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod</p> <p style="text-indent:2em">PL/SQL Release 10.2.0.1.0 - Production</p> <p style="text-indent:2em">CORE 10.2.0.1.0 Production</p> <p style="text-indent:2em">TNS for 32-bit Windows: Version 10.2.0.1.0 - Production</p> <p style="text-indent:2em">NLSRTL Version 10.2.0.1.0 - Production</p> <p style="text-indent:2em">出错过程回忆：在此之前用windows优化大师对系统注册表进行了修复！</p> <p style="text-indent:2em">Q：<strong><span style="color:#3333ff; background-color:#ffffff">链接oracle时报错：ORA-12541: TNS: 无监听程序</span></strong></p> <p style="text-indent:2em">A：</p> <p style="text-indent:2em">1〉查看监听有没有启动：</p> <p style="text-indent:2em">一：运行<span style="color:#ff0000">lsnrctl</span></p> <p style="text-indent:2em"><span style="color:#3333ff"><strong>C:\Documents and Settings\Admin&gt;lsnrctl</strong></span></p> <p style="text-indent:2em">LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-4月 -2007 09:</p> <p style="text-indent:2em">1:43</p> <p style="text-indent:2em">Copyright (c) 1991, 2005, Oracle. All rights reserved.</p> <p style="text-indent:2em">欢迎来到LSNRCTL, 请键入"help"以获得信息。</p> <p style="text-indent:2em">二：查看<span style="color:#ff0000">stauts</span></p> <p style="text-indent:2em"><span style="color:#6600cc"><strong>LSNRCTL&gt; status</strong></span></p> <p style="text-indent:2em">正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))</p> <p style="text-indent:2em">TNS-12541: TNS: 无监听程序</p> <p style="text-indent:2em">TNS-12560: TNS: 协议适配器错误</p> <p style="text-indent:2em">TNS-00511: 无监听程序</p> <p style="text-indent:2em">32-bit Windows Error: 2: No such file or directory</p> <p style="text-indent:2em">正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=zxt)(PORT=1521)))</p> <p style="text-indent:2em">TNS-12541: TNS: 无监听程序</p> <p style="text-indent:2em">TNS-12560: TNS: 协议适配器错误</p> <p style="text-indent:2em">TNS-00511: 无监听程序</p> <p style="text-indent:2em">32-bit Windows Error: 61: Unknown error</p> <p style="text-indent:2em">三：发现监听没有启动，现在启动监听</p> <p style="text-indent:2em"><strong><span style="color:#6600cc">LSNRCTL&gt; start</span></strong></p> <p style="text-indent:2em">启动tnslsnr: 请稍候...</p> <p style="text-indent:2em">Failed to start service, error 3.</p> <p style="text-indent:2em">TNS-12560: TNS: 协议适配器错误</p> <p style="text-indent:2em">TNS-00530: 协议适配器错误</p> <p style="text-indent:2em">2〉<span style="color:#ff0000">发现监听启动不起来，估计是注册表有点问题，登录注册表</span></p> <p style="text-indent:2em">C:\Documents and Settings\Admin&gt;regedit</p> <p style="text-indent:2em">进入注册表到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleOraDb10g_home1TNSListener</p> <p style="text-indent:2em">发现ImagePath关键值没有了，增加可扩充字符串值，取名为ImagePathImagePath，编辑字符串的数值数据为：<span style="color:#ff0000">G:\oracle\product\10.2.0\db_2\BIN\TNSLSNR</span>（对应oracle的TNSLSNR的位置） ，退出注册表。</p> <p style="text-indent:2em">3〉启动监听</p> <p style="text-indent:2em">LSNRCTL&gt; start</p> <p style="text-indent:2em">启动tnslsnr: 请稍候...</p> <p style="text-indent:2em">TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production</p> <p style="text-indent:2em">系统参数文件为d:\oracle\product\10.2.0\db_1\network\admin\listener.ora</p> <p style="text-indent:2em">写入d:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息</p> <p style="text-indent:2em">监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))</p> <p style="text-indent:2em">监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=zxt)(PORT=1521)))</p> <p style="text-indent:2em">正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))</p> <p style="text-indent:2em">LISTENER 的 STATUS</p> <p style="text-indent:2em">------------------------</p> <p style="text-indent:2em">别名 LISTENER</p> <p style="text-indent:2em">版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ</p> <p style="text-indent:2em">ction</p> <p style="text-indent:2em">启动日期 20-4月 -2007 09:41:29</p> <p style="text-indent:2em">正常运行时间 0 天 0 小时 0 分 3 秒</p> <p style="text-indent:2em">跟踪级别 off</p> <p style="text-indent:2em">安全性 ON: Local OS Authentication</p> <p style="text-indent:2em">SNMP OFF</p> <p style="text-indent:2em">监听程序参数文件 d:\oracle\product\10.2.0\db_1\network\admin\listener.o</p> <p style="text-indent:2em">ra</p> <p style="text-indent:2em">监听程序日志文件 d:\oracle\product\10.2.0\db_1\network\log\listener.log</p> <p style="text-indent:2em">监听端点概要...</p> <p style="text-indent:2em">(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))</p> <p style="text-indent:2em">(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=zxt)(PORT=1521)))</p> <p style="text-indent:2em">服务摘要..</p> <p style="text-indent:2em">服务 "PLSExtProc" 包含 1 个例程。</p> <p style="text-indent:2em">例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...</p> <p style="text-indent:2em">命令执行成功</p> <p style="text-indent:2em">4&gt;监听启动成功后尝试登录</p> <p style="text-indent:2em">C:\Documents and Settings\Admin&gt;sqlplus zxt@orcl</p> <p style="text-indent:2em">SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 4月 20 09:42:33 2007</p> <p style="text-indent:2em">Copyright (c) 1982, 2005, Oracle. All rights reserved.</p> <p style="text-indent:2em">输入口令:</p> <p style="text-indent:2em">连接到:</p> <p style="text-indent:2em">Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production</p> <p style="text-indent:2em">With the Partitioning, OLAP and Data Mining options</p> <p style="text-indent:2em">登录成功！</p> <p style="text-indent:2em">总结：估计是windows优化大师或者别的工具在修复注册表时候删掉了ImagePath字段，补上后就可以了！</p> <p style="text-indent:2em">补充：登录sqlplus时报</p> <p style="text-indent:2em">ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务错误！</p> <p style="text-indent:2em">处理办法：</p> <p style="text-indent:2em">1〉oracle_home\NETWORK\ADMIN\tnsnames.ora中修改(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))</p> <p style="text-indent:2em">为(ADDRESS = (PROTOCOL = TCP)(HOST = 本地计算机名)(PORT = 1521))，保存即可。</p> <p style="text-indent:2em">2〉有的人介绍oracle_home\NETWORK\ADMIN\sqlnet.ora中修改SQLNET.AUTHENTICATION_SERVICES = (NTS)为</p> <p style="text-indent:2em">SQLNET.AUTHENTICATION_SERVICES = (NONE)</p> <p style="text-indent:2em">这2种方法，第一个最佳！</p></div><img src ="http://www.blogjava.net/xiaohuzi2008/aggbug/399967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaohuzi2008/" target="_blank">小胡子</a> 2013-05-30 14:03 <a href="http://www.blogjava.net/xiaohuzi2008/archive/2013/05/30/399967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】ora-04031 无法分配共享内存</title><link>http://www.blogjava.net/xiaohuzi2008/archive/2012/12/29/393626.html</link><dc:creator>小胡子</dc:creator><author>小胡子</author><pubDate>Sat, 29 Dec 2012 14:35:00 GMT</pubDate><guid>http://www.blogjava.net/xiaohuzi2008/archive/2012/12/29/393626.html</guid><wfw:comment>http://www.blogjava.net/xiaohuzi2008/comments/393626.html</wfw:comment><comments>http://www.blogjava.net/xiaohuzi2008/archive/2012/12/29/393626.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaohuzi2008/comments/commentRss/393626.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaohuzi2008/services/trackbacks/393626.html</trackback:ping><description><![CDATA[<div><div><p>错误&#8221;ora-04031 无法分配XXX字节的共享内存(XXX)&#8221;的解决办法：</p> <p><strong>oracle 9i:</strong><br /> sys用户以sysdba身份登录<br /> 先查看当前shared_pool_size值<br /> sql&gt;show parameter shared_pool_size;<br /> 然后<br /> sql&gt;alter system set shared_pool_size=&#8217;比原先值适当增加&#8217; scope=spfile;<br /> 然后<br /> sql&gt;shutdown immediate<br /> sql&gt;startup</p> <p><strong>oracle 10g:</strong><br /> oracle 10g shared_pool_size默认值为0，也就是系统自动管理shared pool内存，这时可以适当增加shared_pool_reserved_size的值,仍然让系统自动管理这部分内存</p> <p>sql&gt;alter system set shared_pool_reserved_size=&#8217;比原先值适当增加&#8217; scope=spfile;<br /> sql&gt;shutdown immediate<br /> sql&gt;startup</p></div>原文出自：http://openwares.net/database/cant_alloc_share_memory.html</div><img src ="http://www.blogjava.net/xiaohuzi2008/aggbug/393626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaohuzi2008/" target="_blank">小胡子</a> 2012-12-29 22:35 <a href="http://www.blogjava.net/xiaohuzi2008/archive/2012/12/29/393626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】详解Oracle临时表的几种用法及意义</title><link>http://www.blogjava.net/xiaohuzi2008/archive/2012/12/24/393384.html</link><dc:creator>小胡子</dc:creator><author>小胡子</author><pubDate>Mon, 24 Dec 2012 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/xiaohuzi2008/archive/2012/12/24/393384.html</guid><wfw:comment>http://www.blogjava.net/xiaohuzi2008/comments/393384.html</wfw:comment><comments>http://www.blogjava.net/xiaohuzi2008/archive/2012/12/24/393384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaohuzi2008/comments/commentRss/393384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaohuzi2008/services/trackbacks/393384.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">在这里我们总结了Oracle临时表的集中用法，临时表创建之后基本不占用表空间，如果你没有指定临时表存放的表空的时候，你插入到临时表的数据是存在系统的临时表空间中。</span></div><br /><div><p>Oracle临时表可以说是提高数据库处理性能的好方法，在没有必要存储时，只存储在Oracle临时表空间中。希望本文能对大家有所帮助。</p> <p><strong>1 、前言</strong></p> <p>目前所有使用 Oracle 作为数据库支撑平台的应用，大部分数据量比较庞大的系统，即表的数据量一般情况下都是在百万级以上的数据量。</p> <p>当然在 Oracle  中创建分区是一种不错的选择，但是当你发现你的应用有多张表关联的时候，并且这些表大部分都是比较庞大，而你关联的时候发现其中的某一张或者某几张表关联 之后得到的结果集非常小并且查询得到这个结果集的速度非常快，那么这个时候我考虑在 Oracle 中创建&#8220;临时表&#8221;。</p> <p>我对临时表的理解：在 Oracle  中创建一张表，这个表不用于其他的什么功能，主要用于自己的软件系统一些特有功能才用的，而当你用完之后表中的数据就没用了。 Oracle  的临时表创建之后基本不占用表空间，如果你没有指定临时表(包括临时表的索引)存放的表空的时候，你插入到临时表的数据是存放在 ORACLE  系统的临时表空间中( TEMP )。</p> <p><strong>2 、临时表的创建</strong></p> <p>创建Oracle 临时表，可以有两种类型的临时表：</p> <p>会话级的临时表</p> <p>事务级的临时表 。</p> <p>1) 会话级的临时表因为这这个临时表中的数据和你的当前会话有关系，当你当前SESSION  不退出的情况下，临时表中的数据就还存在，而当你退出当前SESSION  的时候，临时表中的数据就全部没有了，当然这个时候你如果以另外一个SESSION 登陆的时候是看不到另外一个SESSION  中插入到临时表中的数据的。即两个不同的SESSION 所插入的数据是互不相干的。当某一个SESSION  退出之后临时表中的数据就被截断(truncate table ，即数据清空)了。会话级的临时表创建方法：</p></div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">Create</span><span style="color: #000000; ">&nbsp;Global&nbsp;</span><span style="color: #0000FF; ">Temporary</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">Table</span><span style="color: #000000; ">&nbsp;Table_Name&nbsp;&nbsp;<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;(Col1&nbsp;Type1,Col2&nbsp;Type2<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />)&nbsp;</span><span style="color: #0000FF; ">On</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">Commit</span><span style="color: #000000; ">&nbsp;Preserve&nbsp;Rows&nbsp;; <br /></span></div><br /><div>举例：</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">create</span><span style="color: #000000; ">&nbsp;global&nbsp;</span><span style="color: #0000FF; ">temporary</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">table</span><span style="color: #000000; ">&nbsp;Student&nbsp;&nbsp;<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;(Stu_id&nbsp;</span><span style="color: #000000; font-weight: bold; ">Number</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">5</span><span style="color: #000000; ">),&nbsp;&nbsp;<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Class_id&nbsp;</span><span style="color: #000000; font-weight: bold; ">Number</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">5</span><span style="color: #000000; ">),&nbsp;&nbsp;<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Stu_Name&nbsp;</span><span style="color: #000000; font-weight: bold; ">Varchar2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">8</span><span style="color: #000000; ">),&nbsp;&nbsp;<br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Stu_Memo&nbsp;</span><span style="color: #000000; font-weight: bold; ">varchar2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">200</span><span style="color: #000000; ">))&nbsp;</span><span style="color: #0000FF; ">on</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">Commit</span><span style="color: #000000; ">&nbsp;Preserve&nbsp;Rows&nbsp;; <br /></span></div><br /><div>2) 事务级临时表是指该临时表与事务相关，当进行事务提交或者事务回滚的时候，临时表中的数据将自行被截断，其他的内容和会话级的临时表的一致(包括退出SESSION 的时候，事务级的临时表也会被自动截断)。事务级临时表的创建方法：</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">Create</span><span style="color: #000000; ">&nbsp;Global&nbsp;</span><span style="color: #0000FF; ">Temporary</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">Table</span><span style="color: #000000; ">&nbsp;Table_Name&nbsp;&nbsp;<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;(Col1&nbsp;Type1,Col2&nbsp;Type2<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />)&nbsp;</span><span style="color: #0000FF; ">On</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">Commit</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">Delete</span><span style="color: #000000; ">&nbsp;Rows&nbsp;; <br /></span></div><br /><div>举例：</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">create</span><span style="color: #000000; ">&nbsp;global&nbsp;</span><span style="color: #0000FF; ">temporary</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">table</span><span style="color: #000000; ">&nbsp;Classes&nbsp;&nbsp;<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;(Class_id&nbsp;</span><span style="color: #000000; font-weight: bold; ">Number</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">5</span><span style="color: #000000; ">),&nbsp;&nbsp;<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Class_Name&nbsp;</span><span style="color: #000000; font-weight: bold; ">Varchar2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">8</span><span style="color: #000000; ">),&nbsp;&nbsp;<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Class_Memo&nbsp;</span><span style="color: #000000; font-weight: bold; ">varchar2</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">200</span><span style="color: #000000; ">))&nbsp;</span><span style="color: #0000FF; ">on</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">Commit</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">delete</span><span style="color: #000000; ">&nbsp;Rows&nbsp;; <br /></span></div><br /><div><p>3) 两中类型临时表的区别</p> <p>会话级临时表采用 on commit preserve rows ;而事务级则采用 on commit delete rows  ;用法上，会话级别只有当会话结束临时表中的数据才会被截断，而且事务级临时表则不管是 commit 、 rollback  或者是会话结束，临时表中的数据都将被截断</p> <p>4 )什么时候使用临时表</p> <p>1 )、当某一个 SQL 语句关联的表在 2 张及以上，并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中</p> <p>2 )、程序执行过程中可能需要存放一些临时的数据，这些数据在整个程序的会话过程中都需要用的等等。</p> <p>3 . 例子：略</p> <p>4 .临时表的不足之处</p> <p>1 )不支持 lob 对象，这也许是设计者基于运行效率的考虑，但实际应用中确实需要此功能时就无法使用临时表了。</p> <p>2 )不支持主外键关系</p> <p>所以，由于以上原因，我们可以自己创建临时表，以弥补 oracle 临时表的不足之处</p> <p>上面的都是本人经过测试的，但下面是在网上搜索到的方法，本人具体没有测试过，不过觉得可行性很强，有时间测试下</p> <p><strong>创建方法：</strong></p> <p>1 、以常规表的形式创建临时数据表的表结构，但要在每一个表的主键中加入一个 SessionID 列以区分不同的会话。(可以有 lob 列和主外键)</p> <p>2 、写一个用户注销触发器，在用户结束会话的时候删除本次会话所插入的所有记录 (SessionID 等于本次会话 ID 的记录 ) 。</p> <p>3 、程序写入数据时，要顺便将当前的会话 ID(SessionID) 写入表中。</p> <p>4 、程序读取数据时，只读取与当前会话 ID 相同的记录即可。</p> <p><strong>功能增强的扩展设计：</strong></p> <p>1 、可以在数据表上建立一个视图，视图对记录的筛选条件就是当前会话的SessionID 。</p> <p>2 、数据表中的SessionID 列可以通过Trigger 实现，以实现对应用层的透明性。</p> <p>3 、高级用户可以访问全局数据，以实现更加复杂的功能。</p> <p><strong>扩展临时表的优点：</strong></p> <p>1 、实现了与Oracle 的基于会话的临时表相同的功能。</p> <p>2 、支持SDO_GEOMETRY 等lob 数据类型。</p> <p>3 、支持表间的主外键连接，且主外键连接也是基于会话的。</p> <p>4 、高级用户可以访问全局数据，以实现更加复杂的功能</p></div><br />原文出自：<div>http://database.51cto.com/art/201001/180851.htm</div><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/xiaohuzi2008/aggbug/393384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaohuzi2008/" target="_blank">小胡子</a> 2012-12-24 10:08 <a href="http://www.blogjava.net/xiaohuzi2008/archive/2012/12/24/393384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>