﻿<?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-zhip-随笔分类-DataBase</title><link>http://www.blogjava.net/zhip/category/22826.html</link><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;冬去春来&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp&lt;strong&gt;&lt;font style="FONT-SIZE: 9pt; FILTER: shadow(color=#cccccc); COLOR: #0060f0; HEIGHT: 1px"&gt;郑重声明：本Blog纯属个人学习、工作需要，记录相关资料。请不要发表任何有人身攻击的言论，谢谢！！&lt;/font&gt;&lt;a href='Http://www.zhipsoft.cn' target='_blank'&gt;www.zhipsoft.cn&lt;/a&gt;     &lt;a href='Http://tryang.zhipsoft.cn' target='_blank'&gt;tryang.zhipsoft.cn&lt;/a&gt;     &lt;a href="Http://yang.zhipsoft.cn" target="_blank"&gt;yang.zhipsoft.cn&lt;/a&gt;&lt;/strong&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 01 Sep 2009 06:24:18 GMT</lastBuildDate><pubDate>Tue, 01 Sep 2009 06:24:18 GMT</pubDate><ttl>60</ttl><item><title>oracle SQL性能优化</title><link>http://www.blogjava.net/zhip/archive/2009/09/01/293411.html</link><dc:creator>zhip</dc:creator><author>zhip</author><pubDate>Tue, 01 Sep 2009 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/zhip/archive/2009/09/01/293411.html</guid><wfw:comment>http://www.blogjava.net/zhip/comments/293411.html</wfw:comment><comments>http://www.blogjava.net/zhip/archive/2009/09/01/293411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhip/comments/commentRss/293411.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhip/services/trackbacks/293411.html</trackback:ping><description><![CDATA[<font color="#ff0000">（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择最有效率的表名顺序(只在基于规则的优化器中有效)：</font> ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名，FROM子句中写在最后的表(基础表 driving table)将被最先处理，在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. <br />
<font color="#ff0000">（2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE子句中的连接顺序．：</font> ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. <br />
<font color="#ff0000">（3）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT子句中避免使用 &#8216; * &#8216;：</font> ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间<br />
<font color="#ff0000">（4）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 减少访问数据库的次数：</font> ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等；<br />
<font color="#ff0000">（5）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200</font> <br />
<font color="#ff0000">（6）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用DECODE函数来减少处理时间：</font>使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. <font color="#ff0000">（7）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 整合简单,无关联的数据库访问：</font>如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系) <br />
<font color="#ff0000">（8）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除重复记录：</font>最高效的删除重复记录方法 ( 因为使用了ROWID)例子： DELETE &nbsp;FROM &nbsp;EMP E &nbsp;WHERE &nbsp;E.ROWID &gt; (SELECT MIN(X.ROWID) <br />
FROM &nbsp;EMP X &nbsp;WHERE &nbsp;X.EMP_NO = E.EMP_NO); <br />
<font color="#ff0000">（9）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用TRUNCATE替代DELETE：</font>当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况) 而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短. (译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML) <br />
<font color="#ff0000">（10）&nbsp;尽量多使用COMMIT：</font>只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少: <br />
COMMIT所释放的资源: <br />
a. 回滚段上用于恢复数据的信息. <br />
b. 被程序语句获得的锁 <br />
c. redo log buffer 中的空间 <br />
d. ORACLE为管理上述3种资源中的内部花费<br />
<font color="#f70909">（11）&nbsp;用Where子句替换HAVING子句</font>：避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销. (非oracle中)on、where、having这三个都可以加条件的子句中，on是最先执行，where次之，having最后，因为on是先把不符合条件的记录过滤后才进行统计，它就可以减少中间运算要处理的数据，按理说应该速度是最快的，where也应该比having快点的，因为它过滤数据后才进行sum，在两个表联接时才用on的，所以在一个表的时候，就剩下where跟having比较了。在这单表查询统计的情况下，如果要过滤的条件没有涉及到要计算字段，那它们的结果是一样的，只是where可以使用rushmore技术，而having就不能，在速度上后者要慢如果要涉及到计算的字段，就表示在没计算之前，这个字段的值是不确定的，根据上篇写的工作流程，where的作用时间是在计算之前就完成的，而having就是在计算后才起作用的，所以在这种情况下，两者的结果会不同。在多表联接查询时，on比where更早起作用。系统首先根据各个表之间的联接条件，把多个表合成一个临时表后，再由where进行过滤，然后再计算，计算完后再由having进行过滤。由此可见，要想过滤条件起到正确的作用，首先要明白这个条件应该在什么时候起作用，然后再决定放在那里<br />
<font color="#ff0000">（12）&nbsp;减少对表的查询</font>：在含有子查询的SQL语句中,要特别注意减少对表的查询.例子： &nbsp;&nbsp;&nbsp;&nbsp; SELECT &nbsp;TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = ( SELECT TAB_NAME,DB_VER&nbsp;FROM &nbsp;TAB_COLUMNS &nbsp;WHERE &nbsp;VERSION = 604) <br />
<font color="#ff0000">（13）&nbsp;通过内部函数提高SQL效率.：</font>复杂的SQL往往牺牲了执行效率. 能够掌握上面的运用函数解决问题的方法在实际工作中是非常有意义的<br />
<font color="#ff0000">（14）&nbsp;使用表的别名(Alias)：</font>当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误. <br />
<font color="#ff0000">（15）&nbsp;用EXISTS替代IN、用NOT EXISTS替代NOT IN：</font>在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率. 在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS. 例子：（高效）SELECT * FROM &nbsp;EMP (基础表) &nbsp;WHERE &nbsp;EMPNO &gt; 0 &nbsp;AND &nbsp;EXISTS (SELECT &#8216;X' &nbsp;FROM DEPT &nbsp;WHERE &nbsp;DEPT.DEPTNO = EMP.DEPTNO &nbsp;AND &nbsp;LOC = &#8216;MELB') (低效)SELECT &nbsp;* FROM &nbsp;EMP (基础表) &nbsp;WHERE &nbsp;EMPNO &gt; 0 &nbsp;AND &nbsp;DEPTNO IN(SELECT DEPTNO &nbsp;FROM &nbsp;DEPT &nbsp;WHERE &nbsp;LOC = &#8216;MELB') <br />
<font color="#f70909">（16）&nbsp;识别'低效执行'的SQL语句：</font>虽然目前各种关于SQL优化的图形化工具层出不穷,但是写出自己的SQL工具来解决问题始终是一个最好的方法： SELECT &nbsp;EXECUTIONS , DISK_READS, BUFFER_GETS, <br />
ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio, <br />
ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run, <br />
SQL_TEXT <br />
FROM &nbsp;V$SQLAREA <br />
WHERE &nbsp;EXECUTIONS&gt;0 <br />
AND &nbsp;BUFFER_GETS &gt; 0 <br />
AND &nbsp;(BUFFER_GETS-DISK_READS)/BUFFER_GETS &lt; 0.8 <br />
ORDER BY &nbsp;4 DESC; <br />
<font color="#f70909">（17）&nbsp;用索引提高效率</font>：索引是表的一个概念部分,用来提高检索数据的效率，ORACLE使用了一个复杂的自平衡B-tree结构. 通常,通过索引查询数据比全表扫描要快. 当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引. 同样在联结多个表时使用索引也可以提高效率. 另一个使用索引的好处是,它提供了主键(primary key)的唯一性验证.。那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 通常, 在大型表中使用索引特别有效. 当然,你也会发现, 在扫描小表时,使用索引同样能提高效率. 虽然使用索引能得到查询效率的提高,但是我们也必须注意到它的代价. 索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本身也会被修改. 这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O . 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.。定期的重构索引是有必要的.： ALTER &nbsp;INDEX &lt;INDEXNAME&gt; REBUILD &lt;TABLESPACENAME&gt; <br />
<font color="#ff0000">（18）&nbsp;用EXISTS替换DISTINCT</font>：当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换, EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果. 例子： &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (低效): <br />
SELECT &nbsp;DISTINCT &nbsp;DEPT_NO,DEPT_NAME &nbsp;FROM &nbsp;DEPT D , EMP E WHERE &nbsp;D.DEPT_NO = E.DEPT_NO <br />
(高效): <br />
SELECT &nbsp;DEPT_NO,DEPT_NAME &nbsp;FROM &nbsp;DEPT D &nbsp;WHERE &nbsp;EXISTS ( SELECT &#8216;X' <br />
FROM &nbsp;EMP E &nbsp;WHERE&nbsp;E.DEPT_NO = D.DEPT_NO); <br />
<font color="#ff0000">（19）&nbsp;sql语句用大写的；</font>因为oracle总是先解析sql语句，把小写的字母转换成大写的再执行<br />
<font color="#ff0000">（20）&nbsp;在java代码中尽量少用连接符&#8220;＋&#8221;连接字符串！<br />
</font><font color="#ff0000">（21）&nbsp;避免在索引列上使用NOT</font> 通常，　我们要避免在索引列上使用NOT, NOT会产生在和在索引列上使用函数相同的影响. 当ORACLE&#8221;遇到&#8221;NOT,他就会停止使用索引转而执行全表扫描. <br />
<font color="#f70909">（22）&nbsp;避免在索引列上使用计算．</font><br />
WHERE子句中，如果索引列是函数的一部分．优化器将不使用索引而使用全表扫描． <br />
举例: <br />
低效： <br />
SELECT &#8230; FROM &nbsp;DEPT &nbsp;WHERE SAL * 12 &gt; 25000; <br />
高效: <br />
SELECT &#8230; FROM DEPT WHERE SAL &gt; 25000/12; <br />
<font color="#f70909">（23）&nbsp;用&gt;=替代&gt; 高效: <br />
</font>SELECT * FROM &nbsp;EMP &nbsp;WHERE &nbsp;DEPTNO &gt;=4 <br />
低效: <br />
SELECT * FROM EMP WHERE DEPTNO &gt;3 <br />
两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录. <br />
（24）<font color="#f70909">&nbsp;用UNION替换OR</font> (适用于索引列) 通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果. 对索引列使用OR将造成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低. 在下面的例子中, LOC_ID 和REGION上都建有索引. <br />
高效: <br />
SELECT LOC_ID , LOC_DESC , REGION <br />
FROM LOCATION <br />
WHERE LOC_ID = 10 <br />
UNION <br />
SELECT LOC_ID , LOC_DESC , REGION <br />
FROM LOCATION <br />
WHERE REGION = &#8220;MELBOURNE&#8221; <br />
低效: <br />
SELECT LOC_ID , LOC_DESC , REGION <br />
FROM LOCATION <br />
WHERE LOC_ID = 10 OR REGION = &#8220;MELBOURNE&#8221; <br />
如果你坚持要用OR, 那就需要返回记录最少的索引列写在最前面. <br />
（25）&nbsp;<font color="#f70909">用IN来替换OR</font> &nbsp; 这是一条简单易记的规则，但是实际的执行效果还须检验，在ORACLE8i下，两者的执行路径似乎是相同的．　低效: <br />
SELECT&#8230;. FROM LOCATION WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30 <br />
高效 <br />
SELECT&#8230; FROM LOCATION WHERE LOC_IN &nbsp;IN (10,20,30); <br />
（26）<font color="#ff0000">&nbsp;避免在索引列上使用IS NULL和IS NOT NULL 避免在索引中使用任何可以为空的列，ORACLE将无法使用该索引．对于单列索引，如果列包含空值，索引中将不存在此记录. 对于复合索引，如果每个列都为空，索引中同样不存在此记录.　如果至少有一个列不为空，则记录存在于索引中．举例: 如果唯一性索引建立在表的A列和B列上, 并且表中存在一条记录的A,B值为(123,null) , ORACLE将不接受下一条具有相同A,B值（123,null）的记录(插入). 然而如果所有的索引列都为空，ORACLE将认为整个键值为空而空不等于空. 因此你可以插入1000 条具有相同键值的记录,当然它们都是空! 因为空值不存在于索引列中,所以WHERE子句中对索引列进行空值比较将使ORACLE停用该索引. 低效: (索引失效) <br />
</font>SELECT &#8230; FROM &nbsp;DEPARTMENT &nbsp;WHERE &nbsp;DEPT_CODE IS NOT NULL; <br />
高效: (索引有效) <br />
SELECT &#8230; FROM &nbsp;DEPARTMENT &nbsp;WHERE &nbsp;DEPT_CODE &gt;=0; <br />
（27）&nbsp;<font color="#ff0000">总是使用索引的第一个列</font>：如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引. 这也是一条简单而重要的规则，当仅引用索引的第二个列时,优化器使用了全表扫描而忽略了索引<br />
（28）&nbsp;<font color="#f70909">用UNION-ALL 替换UNION ( 如果有可能的话)</font>：当SQL语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序. 如果用UNION ALL替代UNION, 这样排序就不是必要了. 效率就会因此得到提高. 需要注意的是，UNION ALL 将重复输出两个结果集合中相同记录. 因此各位还是要从业务需求分析使用UNION ALL的可行性. UNION 将对结果集合排序,这个操作会使用到SORT_AREA_SIZE这块内存. 对于这块内存的优化也是相当重要的. 下面的SQL可以用来查询排序的消耗量低效： <br />
SELECT &nbsp;ACCT_NUM, BALANCE_AMT <br />
FROM &nbsp;DEBIT_TRANSACTIONS <br />
WHERE TRAN_DATE = '31-DEC-95' <br />
UNION <br />
SELECT ACCT_NUM, BALANCE_AMT <br />
FROM DEBIT_TRANSACTIONS <br />
WHERE TRAN_DATE = '31-DEC-95' <br />
高效: <br />
SELECT ACCT_NUM, BALANCE_AMT <br />
FROM DEBIT_TRANSACTIONS <br />
WHERE TRAN_DATE = '31-DEC-95' <br />
UNION ALL <br />
SELECT ACCT_NUM, BALANCE_AMT <br />
FROM DEBIT_TRANSACTIONS <br />
WHERE TRAN_DATE = '31-DEC-95' <br />
<font color="#ee3d11">（29）</font><font color="#ff0000">&nbsp;用WHERE替代ORDER BY</font>： ORDER BY 子句只在两种严格的条件下使用索引. <br />
ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序. <br />
ORDER BY中所有的列必须定义为非空. <br />
WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列. 例如: <br />
表DEPT包含以下列: <br />
DEPT_CODE PK NOT NULL <br />
DEPT_DESC NOT NULL <br />
DEPT_TYPE NULL 低效: (索引不被使用) <br />
SELECT DEPT_CODE&nbsp;FROM &nbsp;DEPT &nbsp;ORDER BY &nbsp;DEPT_TYPE <br />
高效: (使用索引) <br />
SELECT DEPT_CODE &nbsp;FROM &nbsp;DEPT &nbsp;WHERE &nbsp;DEPT_TYPE &gt; 0 <br />
<font color="#f73809">（30）</font>&nbsp;<font color="#ff3300">避免改变索引列的类型.:</font> 当比较不同数据类型的数据时, ORACLE自动对列进行简单的类型转换. 假设 EMPNO是一个数值类型的索引列. <br />
SELECT &#8230; &nbsp;FROM EMP &nbsp;WHERE &nbsp;EMPNO = &#8216;123' <br />
实际上,经过ORACLE类型转换, 语句转化为: <br />
SELECT &#8230; &nbsp;FROM EMP &nbsp;WHERE &nbsp;EMPNO = TO_NUMBER(&#8216;123') <br />
幸运的是,类型转换没有发生在索引列上,索引的用途没有被改变. <br />
现在,假设EMP_TYPE是一个字符类型的索引列. <br />
SELECT &#8230; &nbsp;FROM EMP &nbsp;WHERE EMP_TYPE = 123 <br />
这个语句被ORACLE转换为: <br />
SELECT &#8230; &nbsp;FROM EMP &nbsp;WHERETO_NUMBER(EMP_TYPE)=123 <br />
因为内部发生的类型转换, 这个索引将不会被用到! 为了避免ORACLE对你的SQL进行隐式的类型转换, 最好把类型转换用显式表现出来. 注意当字符和数值比较时, ORACLE会优先转换数值类型到字符类型<br />
<font color="#f70909">（31）</font>&nbsp;<font color="#ff0000">需要当心的WHERE子句:</font> 某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子. <br />
在下面的例子里, (1)&#8216;!=' 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中. (2) &#8216;||'是字符连接函数. 就象其他函数那样, 停用了索引. (3) &#8216;+'是数学函数. 就象其他数学函数那样, 停用了索引. (4)相同的索引列不能互相比较,这将会启用全表扫描. <br />
<font color="#ff0000">（32）&nbsp;a. 如果检索数据量超过30%的表中记录数.使用索引将没有显著的效率提高.</font> <br />
b. 在特定情况下, 使用索引也许会比全表扫描慢, 但这是同一个数量级上的区别. 而通常情况下,使用索引比全表扫描要块几倍乃至几千倍! <br />
<font color="#ff0000">（33）&nbsp;避免使用耗费资源的操作:</font> 带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 <br />
执行耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序. 通常, 带有UNION, MINUS , INTERSECT的SQL语句都可以用其他方式重写. 如果你的数据库的SORT_AREA_SIZE调配得好, 使用UNION , MINUS, INTERSECT也是可以考虑的, 毕竟它们的可读性很强<br />
<font color="#ff0000">（34）&nbsp;优化GROUP BY:</font> 提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉.下面两个查询返回相同结果但第二个明显就快了许多. 低效: <br />
SELECT JOB , AVG(SAL) <br />
FROM EMP <br />
GROUP JOB <br />
HAVING JOB = &#8216;PRESIDENT' <br />
OR JOB = &#8216;MANAGER' <br />
高效: <br />
SELECT JOB , AVG(SAL) <br />
FROM EMP <br />
WHERE JOB = &#8216;PRESIDENT' <br />
OR JOB = &#8216;MANAGER' <br />
GROUP JOB&nbsp;
<style type="text/css">.quote{margin:5px 20px;border:1px solid #CCCCCC;padding:5px; background:#F3F3F3 }
body{boder:0px}</style>
<style type="text/css">.quote{margin:5px 20px;border:1px solid #CCCCCC;padding:5px; background:#F3F3F3 }
body{boder:0px}</style>
<img src ="http://www.blogjava.net/zhip/aggbug/293411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhip/" target="_blank">zhip</a> 2009-09-01 10:36 <a href="http://www.blogjava.net/zhip/archive/2009/09/01/293411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改Oracle最大远程链接数的方法</title><link>http://www.blogjava.net/zhip/archive/2009/03/18/260580.html</link><dc:creator>zhip</dc:creator><author>zhip</author><pubDate>Wed, 18 Mar 2009 12:14:00 GMT</pubDate><guid>http://www.blogjava.net/zhip/archive/2009/03/18/260580.html</guid><wfw:comment>http://www.blogjava.net/zhip/comments/260580.html</wfw:comment><comments>http://www.blogjava.net/zhip/archive/2009/03/18/260580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhip/comments/commentRss/260580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhip/services/trackbacks/260580.html</trackback:ping><description><![CDATA[<p>1、以sysdba身份登陆PL/SQL 或者 Worksheet<br />
2、查询目前链接数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show parameter open_links;<br />
3、更改链接数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alter system set open_links=30 scope=spfile;<br />
4、重启Oracle服务或重启Oracle服务器</p>
<p>&nbsp;</p>
 <img src ="http://www.blogjava.net/zhip/aggbug/260580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhip/" target="_blank">zhip</a> 2009-03-18 20:14 <a href="http://www.blogjava.net/zhip/archive/2009/03/18/260580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 10g 在window 下的安装手记（附件-图）</title><link>http://www.blogjava.net/zhip/archive/2008/05/20/201566.html</link><dc:creator>zhip</dc:creator><author>zhip</author><pubDate>Tue, 20 May 2008 01:24:00 GMT</pubDate><guid>http://www.blogjava.net/zhip/archive/2008/05/20/201566.html</guid><wfw:comment>http://www.blogjava.net/zhip/comments/201566.html</wfw:comment><comments>http://www.blogjava.net/zhip/archive/2008/05/20/201566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhip/comments/commentRss/201566.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhip/services/trackbacks/201566.html</trackback:ping><description><![CDATA[&nbsp; <span style="color: red"><strong><a title="附件下载" href="http://www.blogjava.net/Files/zhip/Oracle10g-install.rar" target="_blank"><span style="color: red"><strong>（详见附件）</strong></span></a></strong></span>
<h1 style="text-align: center" align="center">Oracle 10g <span style="font-family: 宋体">在</span>window <span style="font-family: 宋体">下的安装</span></h1>
<h2>1.<span style="font-family: 黑体">数据库概述</span></h2>
<p style="text-indent: 21pt">Oracle <span style="font-family: 宋体">应用服务器</span> 10g <span style="font-family: 宋体">是集成的、基于标准的软件平台，</span>Oracle Application Server 10g <span style="font-family: 宋体">是继</span> Oracle9i Application Server (Oracle9iAS) Release 2.0 version 9.0.2 <span style="font-family: 宋体">和</span> version 9.0.3 <span style="font-family: 宋体">之后的最新版本</span> Oracle <span style="font-family: 宋体">应用服务器。</span></p>
<h2>2.<span style="font-family: 黑体">安装类型</span></h2>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr style="height: 22.15pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 22.15pt" valign="top" width="91">
            <p style="text-align: center" align="center"><strong><span style="font-family: 宋体">安装类型</span></strong></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 22.15pt" valign="top" width="477">
            <p style="text-align: center" align="center"><strong><span style="font-family: 宋体">说明</span></strong></p>
            </td>
        </tr>
        <tr style="height: 44.3pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 44.3pt" valign="top" width="91">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">企业版</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 44.3pt" valign="top" width="477">
            <p><span style="font-family: 宋体">安装许可的数据库部件，包括除了标准版的所有部件外的附加选件，如数据库配置，管理工作，数据仓库，事务处理等。</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="91">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">标准版</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="477">
            <p><span style="font-family: 宋体">安装一组管理工作，分布，复制，</span>Web<span style="font-family: 宋体">功能及商业就用</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="91">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">个人版</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="477">
            <p><span style="font-family: 宋体">安装与标准版类似的部件，但只允许单用户使用。此外，不包括真实的应用集群（ＲＡＣ</span>&nbsp;<span style="font-family: 宋体">）等</span>.</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="91">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">定制</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="477">
            <p><span style="font-family: 宋体">允许选择需要的独立部件，满足专门应用要求。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<h2>3.<span style="font-family: 黑体">硬件要求</span></h2>
<p>Oracle 10G 32<span style="font-family: 宋体">位在</span>window <span style="font-family: 宋体">环境下对硬件的要求</span></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="91">
            <p style="text-align: center" align="center"><strong><span style="font-family: 宋体">硬件要求</span></strong></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="477">
            <p style="text-align: center" align="center"><strong><span style="font-family: 宋体">说明</span></strong></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="91">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">物理内存</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="477">
            <p><span style="font-family: 宋体">最小为</span>256MB <span style="font-family: 宋体">，建议</span>512<span style="font-family: 宋体">ＭＢ以上</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="91">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">虚拟内存</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="477">
            <p><span style="font-family: 宋体">物理内存的两倍</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="91">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">硬盘空间</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="477">
            <p><span style="font-family: 宋体">基本安装需在</span>2.04GB</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="91">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">视频适配器</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="477">
            <p>256<span style="font-family: 宋体">色</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="91">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">处理器主频</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="477">
            <p>550MHz<span style="font-family: 宋体">以上</span></p>
            </td>
        </tr>
    </tbody>
</table>
<h2>4.<span style="font-family: 黑体">软件要求</span></h2>
<p>Oracle 10G 32<span style="font-family: 宋体">位在</span>window <span style="font-family: 宋体">环境下对软件的要求</span></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="91">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">软件要求</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="477">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">说明</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="91">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">处理器</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="477">
            <p>Intel(x86) AMD64 <span style="font-family: 宋体">与</span>Intel EM64T</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="91">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">操作系统</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="477">
            <p>Windows 2000 sp1 <span style="font-family: 宋体">或更高版本</span></p>
            <p>Windows 2003</p>
            <p>Windows <span style="font-family: 宋体">专业版</span></p>
            <p>Windows <span style="font-family: 宋体">不支持</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 68.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="91">
            <p style="text-align: center" align="center"><span style="font-family: 宋体">网络协议</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 357.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="477">
            <p><span style="font-family: 宋体">支持</span>TCP/IP,<span style="font-family: 宋体">带</span>SSL<span style="font-family: 宋体">的</span>TCP/IP<span style="font-family: 宋体">及命名管理</span></p>
            </td>
        </tr>
    </tbody>
</table>
<h2>5.<span style="font-family: 黑体">数据库安装</span></h2>
<p><span style="font-family: 宋体">插入光盘后如果安装程序没有自动启动，双击光盘中的</span>setup.exe <span style="font-family: 宋体">文件图标即可启动安装程序</span>(<span style="font-family: 宋体">如下图</span>)</p>
<p><span style="font-family: 宋体">基本安装是用于常规的数据安装方法。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">全局数据库名：是用于标识数据库的名称。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">数据库口令：数据库管理员</span>(sys<span style="font-family: 宋体">，</span>system<span style="font-family: 宋体">，</span>sysman)<span style="font-family: 宋体">的口令（不能为空）。</span></p>
<p><span style="font-family: 宋体">高级安装用于特定数据库的安装。</span></p>
<p><span style="font-family: 宋体">选择高级安装，点击下一步</span></p>
<p><span style="font-family: 宋体">在选择了安装方法</span>(<span style="font-family: 宋体">高级安装</span>)<span style="font-family: 宋体">之后点击下一步，进入选择数据库安装类型界面（如图）</span></p>
<p><br style="page-break-before: always" clear="all" />
</p>
<p style="text-align: left" align="left"><span style="font-family: 宋体">选择了数据库的安装类型之后，下一步（如图）指定</span>Oracle <span style="font-family: 宋体">目录信息</span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体">名称是用于安装完数据库之后在开始菜单程序中显示的名称。路径是用于保存数据库的路径（建议默认）下一步</span></p>
<p><span style="font-family: 宋体">开始数据库安装条件的查询，当检查完成之后点击下一步（时间较长）</span></p>
<p><span style="font-family: 宋体">创建数据库是在安装完数据库软件之后就自动开始创建数据库。仅安装数据库，是仅安装数据实例并不创建数据库（在安装完之后再进行创建数据库）。选择创建数据库，点击下一步</span>(<span style="font-family: 宋体">如图</span>)</p>
<p><span style="font-family: 宋体">根据数据库的使用情况选择数据库的配置，并下一步（如图）</span></p>
<p><span style="font-family: 宋体">输入数据库名及</span>SID<span style="font-family: 宋体">。</span></p>
<p><span style="font-family: 宋体">字符集选择框是用于设置数据库存储的数据以哪种字符集存储数据，建议（简体中文），否则在特定情况下，读取到的数据会出现乱码。继续点击下一步（如图）</span></p>
<p><span style="font-family: 宋体">下一步</span>(<span style="font-family: 宋体">如图</span>)</p>
<p><span style="font-family: 宋体">用于设置数据库文件的存储位置</span>.<span style="font-family: 宋体">下一步（如图）</span></p>
<p><span style="font-family: 宋体">下一步</span></p>
<p><span style="font-family: 宋体">输入数据库方案的口令</span>(<span style="font-family: 宋体">不能为空</span>)<span style="font-family: 宋体">，下一步</span>(<span style="font-family: 宋体">如图</span>)</p>
<p><span style="font-family: 宋体">点击安装，开始安装数据库</span></p>
<p><span style="font-family: 宋体">这一步可以需要较长时间，直到提示安装结束。</span></p>
<span style="font-size: 10.5pt; font-family: 'Times New Roman'"><br style="page-break-before: always" clear="all" />
</span>
<h2>6.<span style="font-family: 黑体">客户端配置连接数据库</span></h2>
<p><span style="font-family: 宋体">安装</span>Oracle <span style="font-family: 宋体">客户端</span>(<span style="font-family: 宋体">略</span>,<span style="font-family: 宋体">参照数据库安装</span>)<span style="font-family: 宋体">。</span></p>
<p><span style="font-family: 宋体">选择　</span>Oracle <span style="font-family: 宋体">网络配置工具</span> Net Configuration Assistant</p>
<p><span style="font-family: 宋体">启动</span>Net Configuration Assistant <span style="font-family: 宋体">如下图</span></p>
<p><span style="font-family: 宋体">选择本地</span>Net <span style="font-family: 宋体">服务名配置，下一步</span></p>
<p><span style="font-family: 宋体">选择添加，下一步</span></p>
<p><span style="font-family: 宋体">输入服务器</span>Oracle <span style="font-family: 宋体">的</span>SID,</p>
<p><span style="font-family: 宋体">下一步</span></p>
<p><span style="font-family: 宋体">选择网络连接方式，建议选择</span>TCP,<span style="font-family: 宋体">下一步</span></p>
<p><span style="font-family: 宋体">填写数据库的ＩＰ地址，如果在安装数据库时未改变数据库的端口，则选择使用标准商品号，如果改变了，请选择使用另一个端口号</span>,<span style="font-family: 宋体">并填写端口号</span></p>
<p><span style="font-family: 宋体">下一步</span>.</p>
<p><span style="font-family: 宋体">选择是，进行测试，然后下一步</span></p>
<p><span style="font-family: 宋体">如果提示测试成功，如果未测试成功，请查看前面的配置信息是否有误，下一步</span></p>
<p><span style="font-family: 宋体">输入本地的服务名，下一步</span></p>
<p><span style="font-family: 宋体">下一步</span></p>
<p><span style="font-family: 宋体">配置完成。</span></p><img src ="http://www.blogjava.net/zhip/aggbug/201566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhip/" target="_blank">zhip</a> 2008-05-20 09:24 <a href="http://www.blogjava.net/zhip/archive/2008/05/20/201566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将Oracle数据库操作模式改为共享服务器模式--调整ORACLE内存设置--修改Oracle最大连接数(附件-图)</title><link>http://www.blogjava.net/zhip/archive/2008/05/20/201554.html</link><dc:creator>zhip</dc:creator><author>zhip</author><pubDate>Tue, 20 May 2008 01:02:00 GMT</pubDate><guid>http://www.blogjava.net/zhip/archive/2008/05/20/201554.html</guid><wfw:comment>http://www.blogjava.net/zhip/comments/201554.html</wfw:comment><comments>http://www.blogjava.net/zhip/archive/2008/05/20/201554.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhip/comments/commentRss/201554.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhip/services/trackbacks/201554.html</trackback:ping><description><![CDATA[<br />
&nbsp; <span style="color: red"><strong><a href="http://www.blogjava.net/Files/zhip/Oracle.rar"><span style="color: red"><strong>（详见附件--下载）</strong></span></a></strong></span>
<p style="margin-left: 36pt; text-indent: -36pt; tab-stops: list 36.0pt"><strong><span style="font-size: 14pt">一、<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-size: 14pt; font-family: 宋体">将数据库操作模式改为共享服务器模式</span></strong></p>
<p><strong><span style="font-family: 宋体">注：在</span>Oracle</strong><strong><span style="font-family: 宋体">数据库服务器本机操作。</span></strong></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">1、&nbsp;<span style="font-family: 宋体">点击开始，从程序菜单选择&#8220;</span>Database Configuration Assistant<span style="font-family: 宋体">&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">2、&nbsp;<span style="font-family: 宋体">进入&#8220;欢迎使用&#8221;界面后，点击&#8220;下一步&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">3、&nbsp;<span style="font-family: 宋体">进入&#8220;步骤</span>1<span style="font-family: 宋体">（共</span>4<span style="font-family: 宋体">步）：操作&#8221;界面后，选择&#8220;在数据库中配置数据库选项&#8221;，点击&#8220;下一步&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">4、&nbsp;<span style="font-family: 宋体">进入&#8220;步骤</span>2<span style="font-family: 宋体">（共</span>4<span style="font-family: 宋体">步）：数据库&#8221;界面后，选择可用数据库（本机</span>Oracle<span style="font-family: 宋体">数据库服务名），点击&#8220;下一步&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">5、&nbsp;<span style="font-family: 宋体">进入&#8220;步骤</span>3<span style="font-family: 宋体">（共</span>4<span style="font-family: 宋体">步）：数据库特性&#8221;界面后，点击&#8220;下一步&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">6、&nbsp;<span style="font-family: 宋体">进入&#8220;步骤</span>4<span style="font-family: 宋体">（共</span>4<span style="font-family: 宋体">步）：数据库连接选项&#8221;界面后，选择&#8220;共享服务器模式&#8221;，点击&#8220;编辑共享连接参数</span>&#8230;<span style="font-family: 宋体">&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">7、&nbsp;<span style="font-family: 宋体">进入&#8220;共享服务器模式&#8221;界面后，协议选择为</span>TCP<span style="font-family: 宋体">；调度程序数设置为</span>5<span style="font-family: 宋体">；每个调度程序的最大连接数设置为</span>100<span style="font-family: 宋体">；最大调度程序数设置为</span>5<span style="font-family: 宋体">；最大服务器进程数设置为</span>600<span style="font-family: 宋体">，点击&#8220;确定&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">8、&nbsp;<span style="font-family: 宋体">返回到&#8220;步骤</span>4<span style="font-family: 宋体">（共</span>4<span style="font-family: 宋体">步）：数据库连接选项&#8221;界面后，点击&#8220;完成&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">9、&nbsp;<span style="font-family: 宋体">系统弹出&#8220;重新启动数据库&#8221;提示，点击&#8220;是&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">10、<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">进入&#8220;概要&#8221;界面后，点击&#8220;确定&#8221;，数据库配置正在进行</span>&#8230;<span style="font-family: 宋体">如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">11、<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">系统弹出&#8220;数据库配置已成功完成。是否要执行其他操作？&#8221;提示，点击&#8220;否&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">12、<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">数据库操作模式改为共享服务器模式已完成！</span></p>
<p style="margin-left: 36pt; text-indent: -36pt; tab-stops: list 36.0pt"><strong><span style="font-size: 14pt">二、<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-size: 14pt; font-family: 宋体">调整</span></strong><strong><span style="font-size: 14pt">ORACLE</span></strong><strong><span style="font-size: 14pt; font-family: 宋体">内存设置</span></strong></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">1、&nbsp;<span style="font-family: 宋体">点击开始，从程序菜单选择&#8220;</span>Enterprise Manager Console<span style="font-family: 宋体">&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">2、&nbsp;<span style="font-family: 宋体">进入&#8220;登录&#8221;界面后，选择&#8220;独立启动&#8221;，点击&#8220;确定&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">3、&nbsp;<span style="font-family: 宋体">进入&#8220;独立&#8221;界面后，选择需要调整内存的数据库，并双击，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">4、&nbsp;<span style="font-family: 宋体">进入&#8220;数据库连接信息&#8221;界面后，输入用户名、口令、选择连接身份为&#8220;</span>SYSDBA<span style="font-family: 宋体">&#8221;，点击&#8220;确定&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">5、&nbsp;<span style="font-family: 宋体">双击打开&#8220;例程&#8221;，点选&#8220;配置&#8221;，再选择界面右侧的&#8220;内存&#8221;选项卡，将</span>SGA<span style="font-family: 宋体">中的&#8220;</span>SGA<span style="font-family: 宋体">的最大大小&#8221;改为</span>512<span style="font-family: 宋体">，</span>PGA<span style="font-family: 宋体">中的&#8220;总计</span>PGA<span style="font-family: 宋体">目标&#8221;改为</span>128<span style="font-family: 宋体">，点击&#8220;应用&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">6、&nbsp;<span style="font-family: 宋体">进入&#8220;关闭选项&#8221;界面后，选择&#8220;立即&#8221;，点击&#8220;确定&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">7、&nbsp;<span style="font-family: 宋体">系统正在关闭数据库等相关操作，处理完成后提示&#8220;处理已完成&#8221;，点击&#8220;关闭&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">8、&nbsp;<span style="font-family: 宋体">将</span>SGA<span style="font-family: 宋体">中的&#8220;共享池&#8221;改为</span>256<span style="font-family: 宋体">；&#8220;缓冲区高速缓存&#8221;改为</span>48<span style="font-family: 宋体">；大型池改为</span>128<span style="font-family: 宋体">；&#8220;</span>Java<span style="font-family: 宋体">池&#8221;改为</span>64<span style="font-family: 宋体">，再次点击&#8220;应用&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">9、&nbsp;<span style="font-family: 宋体">进入&#8220;关闭选项&#8221;界面后，选择&#8220;立即&#8221;，点击&#8220;确定&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">10、<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">系统正在关闭数据库等相关操作，处理完成后提示&#8220;处理已完成&#8221;，点击&#8220;关闭&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">11、<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Oracle<span style="font-family: 宋体">内存设置调整完毕！</span></p>
<p style="margin-left: 36pt; text-indent: -36pt; tab-stops: list 36.0pt"><strong><span style="font-size: 14pt">三、<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-size: 14pt; font-family: 宋体">修改</span></strong><strong><span style="font-size: 14pt">Oracle</span></strong><strong><span style="font-size: 14pt; font-family: 宋体">最大连接数的方法</span></strong></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">1、&nbsp;<span style="font-family: 宋体">进入&#8220;</span>SQL*Plus Worksheet<span style="font-family: 宋体">&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">2、&nbsp;<span style="font-family: 宋体">点击&#8220;改变数据库连接</span>&#8230;<span style="font-family: 宋体">&#8221;按钮，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">3、&nbsp;<span style="font-family: 宋体">进入&#8220;数据库连接信息&#8221;界面，输入用户名、口令、需要修改最大连接数的数据库服务名，连接身份选择&#8220;</span>SYSDBA<span style="font-family: 宋体">&#8221;，点击&#8220;确定&#8221;，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">4、&nbsp;<span style="font-family: 宋体">输入指令&#8220;</span><strong><span style="font-family: 宋体">show parameter processes;</span></strong><span style="font-family: 宋体">&#8221;并执行，查看目前最大连接数，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">5、&nbsp;<span style="font-family: 宋体">输入指令&#8220;</span><strong><span style="font-family: 宋体">alter system set processes=600 scope=spfile;</span></strong><span style="font-family: 宋体">&#8221;并执行，修改最大连接数为</span>600<span style="font-family: 宋体">，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">6、&nbsp;<span style="font-family: 宋体">输入指令&#8220;</span><strong><span style="font-family: 宋体">create pfile from spfile;</span></strong><span style="font-family: 宋体">&#8221;并执行，创建</span>Profile<span style="font-family: 宋体">，如下图所示。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">7、&nbsp;<span style="font-family: 宋体">关闭&#8220;</span>Enterprise Manager Console<span style="font-family: 宋体">&#8221;，重启</span>Oracle<span style="font-family: 宋体">服务或重启</span>Oracle<span style="font-family: 宋体">数据库服务器</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">8、&nbsp;<span style="font-family: 宋体">重复操作</span>1<span style="font-family: 宋体">、</span>2<span style="font-family: 宋体">、</span>3<span style="font-family: 宋体">、</span>4<span style="font-family: 宋体">步，确认最大连接数修改成功。</span></p>
  <img src ="http://www.blogjava.net/zhip/aggbug/201554.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhip/" target="_blank">zhip</a> 2008-05-20 09:02 <a href="http://www.blogjava.net/zhip/archive/2008/05/20/201554.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改Oracle最大连接数</title><link>http://www.blogjava.net/zhip/archive/2008/05/16/200769.html</link><dc:creator>zhip</dc:creator><author>zhip</author><pubDate>Fri, 16 May 2008 00:46:00 GMT</pubDate><guid>http://www.blogjava.net/zhip/archive/2008/05/16/200769.html</guid><wfw:comment>http://www.blogjava.net/zhip/comments/200769.html</wfw:comment><comments>http://www.blogjava.net/zhip/archive/2008/05/16/200769.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/zhip/comments/commentRss/200769.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhip/services/trackbacks/200769.html</trackback:ping><description><![CDATA[<p>1、修改Oracle最大连接数的方法<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; a、以sysdba身份登陆PL/SQL 或者 Worksheet<br />
&nbsp;&nbsp; b、查询目前连接数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show parameter processes;<br />
&nbsp;&nbsp; c、更改系统连接数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alter system set processes=1000 scope=spfile;<br />
&nbsp;&nbsp; d、创建pfile<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create pfile from spfile;<br />
&nbsp;&nbsp; e、重启Oracle服务或重启Oracle服务器</p>
<p>2、查询Oracle游标使用情况的方法<br />
&nbsp;&nbsp; select * from v$open_cursor where user_name = 'TRAFFIC'；<br />
3、查询Oracle会话的方法<br />
&nbsp;&nbsp; select * from v$session<br />
</p>
  <img src ="http://www.blogjava.net/zhip/aggbug/200769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhip/" target="_blank">zhip</a> 2008-05-16 08:46 <a href="http://www.blogjava.net/zhip/archive/2008/05/16/200769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.Exception: 数据查询错误:ORA-01000: maximum open cursors exceeded</title><link>http://www.blogjava.net/zhip/archive/2007/07/31/133577.html</link><dc:creator>zhip</dc:creator><author>zhip</author><pubDate>Tue, 31 Jul 2007 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/zhip/archive/2007/07/31/133577.html</guid><wfw:comment>http://www.blogjava.net/zhip/comments/133577.html</wfw:comment><comments>http://www.blogjava.net/zhip/archive/2007/07/31/133577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhip/comments/commentRss/133577.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhip/services/trackbacks/133577.html</trackback:ping><description><![CDATA[<p>在java应用中,我们会经常用oracle jdbc.在开发中我们有时候会遇到(ORA-01000: maximum open cursors </p>
<p>exceeded)的错误。在ITPUB上juant曾发过一篇帖子:http://www.itpub.net/showthread.php?</p>
<p>s=&amp;threadid=122832&amp;perpage=15&amp;pagenumber=1</p>
<p>[TIP]关于Java开发中使用Oracle数据库的一点注意事项（原创） </p>
<p>很多朋友在Java开发中，使用Oracle数据库的时候，经常会碰到有ORA-01000: maximum open cursors exceeded.的</p>
<p>错误。 </p>
<p>实际上，这个错误的原因，主要还是代码问题引起的。 <br>ora-01000: maximum open cursors exceeded. <br>表示已经达到一个进程打开的最大游标数。 </p>
<p>这样的错误很容易出现在Java代码中的主要原因是：Java代码在执行conn.createStatement()和</p>
<p>conn.prepareStatement()的时候，实际上都是相当与在数据库中打开了一个cursor。尤其是，如果你的</p>
<p>createStatement和prepareStatement是在一个循环里面的话，就会非常容易出现这个问题。因为游标一直在不停的打</p>
<p>开，而且没有关闭。 </p>
<p>一般来说，我们在写Java代码的时候，createStatement和prepareStatement都应该要放在循环外面，而且使用了这些</p>
<p>Statment后，及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后，如果不需要使用结果集</p>
<p>（ResultSet）的数据，就马上将Statment关闭。 </p>
<p>对于出现ORA-01000错误这种情况，单纯的加大open_cursors并不是好办法，那只是治标不治本。实际上，代码中的隐</p>
<p>患并没有解除。 <br>而且，绝大部分情况下，open_cursors只需要设置一个比较小的值，就足够使用了，除非有非常特别的要求。</p>
<p>&nbsp;</p>
<p>对这个问题专门研究了一下，并写了测试程序，首先说一些测试环境，我们的数据库最大可打开的cursor设置为600，操</p>
<p>作的数据库表的记录数为30条记录。为了模拟同时打开600cursor，也就是说有600个statement在运行，必须用到java</p>
<p>的多线程。下面是测试程序：</p>
<p>public class StatementTest extends Thread{<br>&nbsp; private Connection conn;<br>&nbsp; public StatementTest(Connection conn) {<br>&nbsp;&nbsp;&nbsp; this.conn = conn;<br>&nbsp;&nbsp;&nbsp; start();<br>&nbsp; }<br>&nbsp; <br>&nbsp; public void run(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp; String strSQL = "SELECT * FROM&nbsp; TestTable"<br>&nbsp;&nbsp; Statement stmt = conn.createStatement();<br>&nbsp;&nbsp; ResultSet rs = stmt.executeQuery(strSQL);<br>&nbsp;&nbsp; int i = 0;<br>&nbsp;&nbsp; while(rs.next()){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("----"+i+"------");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = i+1;<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; rs.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stmt.close();&nbsp;&nbsp; <br>&nbsp;&nbsp; <br>&nbsp;} catch (Exception e) {<br>&nbsp;&nbsp; // TODO: handle exception<br>&nbsp;&nbsp; e.printStackTrace();<br>&nbsp;}<br>&nbsp; <br>&nbsp; } </p>
<p><br>&nbsp; public static void main(String args[]){<br>&nbsp;&nbsp;&nbsp; try{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection conn = DBConnection.getConnection();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i = 0;i &lt; 800;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new StatementTest(conn);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; }catch(Exception e){<br>&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp; }<br>&nbsp;<br>}</p>
<img src ="http://www.blogjava.net/zhip/aggbug/133577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhip/" target="_blank">zhip</a> 2007-07-31 15:12 <a href="http://www.blogjava.net/zhip/archive/2007/07/31/133577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Mysql 百万级数据优化资料</title><link>http://www.blogjava.net/zhip/archive/2007/05/27/120325.html</link><dc:creator>zhip</dc:creator><author>zhip</author><pubDate>Sun, 27 May 2007 10:30:00 GMT</pubDate><guid>http://www.blogjava.net/zhip/archive/2007/05/27/120325.html</guid><wfw:comment>http://www.blogjava.net/zhip/comments/120325.html</wfw:comment><comments>http://www.blogjava.net/zhip/archive/2007/05/27/120325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhip/comments/commentRss/120325.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhip/services/trackbacks/120325.html</trackback:ping><description><![CDATA[<p>一、我们可以且应该优化什么？
<p>硬件
<p>操作系统/软件库
<p>SQL服务器(设置和查询)
<p>应用编程接口(API)
<p>应用程序
<p>--------------------------------------------------------------------------------
<p>二、优化硬件
<p>如果你需要庞大的数据库表(&gt;2G)，你应该考虑使用64位的硬件结构，像Alpha、Sparc或即将推出的IA64。因为MySQL内部使用大量64位的整数，64位的CPU将提供更好的性能。
<p>对大数据库，优化的次序一般是RAM、快速硬盘、CPU能力。
<p>更多的内存通过将最常用的键码页面存放在内存中可以加速键码的更新。
<p>如果不使用事务安全(transaction-safe)的表或有大表并且想避免长文件检查，一台UPS就能够在电源故障时让系统安全关闭。
<p>对于数据库存放在一个专用服务器的系统，应该考虑1G的以太网。延迟与吞吐量同样重要。
<p>--------------------------------------------------------------------------------
<p>三、优化磁盘
<p>为系统、程序和临时文件配备一个专用磁盘，如果确是进行很多修改工作，将更新日志和事务日志放在专用磁盘上。<br>低寻道时间对数据库磁盘非常重要。对与大表，你可以估计你将需要log(行数)/log(索引块长度/3*2/(键码长度 + 数据指针长度))+1次寻到才能找到一行。对于有500000行的表，索引Mediun int类型的列，需要log(500000) / log(1024/3*2/(3 + 2))+1=4次寻道。上述索引需要500000*7*3/2=5.2M的空间。实际上，大多数块将被缓存，所以大概只需要1-2次寻道。<br>然而对于写入（如上），你将需要4次寻道请求来找到在哪里存放新键码，而且一般要2次寻道来更新索引并写入一行。<br>对于非常大的数据库，你的应用将受到磁盘寻道速度的限制，随着数据量的增加呈N log N数据级递增。<br>将数据库和表分在不同的磁盘上。在MySQL中，你可以为此而使用符号链接。<br>条列磁盘(RAID 0)将提高读和写的吞吐量。<br>带镜像的条列(RAID 0+1)将更安全并提高读取的吞吐量。写入的吞吐量将有所降低。<br>不要对临时文件或可以很容易地重建的数据所在的磁盘使用镜像或RAID(除了RAID 0)。<br>在Linux上，在引导时对磁盘使用命令hdparm -m16 -d1以启用同时读写多个扇区和DMA功能。这可以将响应时间提高5~50%。<br>在Linux上，用async (默认)和noatime挂载磁盘(mount)。<br>对于某些特定应用，可以对某些特定表使用内存磁盘，但通常不需要。
<p>--------------------------------------------------------------------------------
<p>四、优化操作系统
<p>不要交换区。如果内存不足，增加更多的内存或配置你的系统使用较少内存。<br>不要使用NFS磁盘(会有NFS锁定的问题)。<br>增加系统和MySQL服务器的打开文件数量。(在safe_mysqld脚本中加入ulimit -n #)。<br>增加系统的进程和线程数量。<br>如果你有相对较少的大表，告诉文件系统不要将文件打碎在不同的磁道上(Solaris)。<br>使用支持大文件的文件系统(Solaris)。<br>选择使用哪种文件系统。在Linux上的Reiserfs对于打开、读写都非常快。文件检查只需几秒种。
<p>--------------------------------------------------------------------------------
<p>五、选择应用编程接口
<p>PERL<br>可在不同的操作系统和数据库之间移植。<br>适宜快速原型。<br>应该使用DBI/DBD接口。<br>PHP<br>比PERL易学。<br>使用比PERL少的资源。<br>通过升级到PHP4可以获得更快的速度。<br>C<br>MySQL的原生接口。<br>较快并赋予更多的控制。<br>低层，所以必须付出更多。<br>C++<br>较高层次，给你更多的时间来编写应用。<br>仍在开发中<br>ODBC<br>运行在Windows和Unix上。<br>几乎可在不同的SQL服务器间移植。<br>较慢。MyODBC只是简单的直通驱动程序，比用原生接口慢19%。<br>有很多方法做同样的事。很难像很多ODBC驱动程序那样运行，在不同的领域还有不同的错误。<br>问题成堆。Microsoft偶尔还会改变接口。<br>不明朗的未来。(Microsoft更推崇OLE而非ODBC)<br>ODBC<br>运行在Windows和Unix上。<br>几乎可在不同的SQL服务器间移植。<br>较慢。MyODBC只是简单的直通驱动程序，比用原生接口慢19%。<br>有很多方法做同样的事。很难像很多ODBC驱动程序那样运行，在不同的领域还有不同的错误。<br>问题成堆。Microsoft偶尔还会改变接口。<br>不明朗的未来。(Microsoft更推崇OLE而非ODBC)<br>JDBC<br>理论上可在不同的操作系统何时据库间移植。<br>可以运行在web客户端。<br>Python和其他<br>可能不错，可我们不用它们。
<p>--------------------------------------------------------------------------------
<p>六、优化应用
<p>应该集中精力解决问题。<br>在编写应用时，应该决定什么是最重要的：<br>速度<br>操作系统间的可移植性<br>SQL服务器间的可移植性<br>使用持续的连接。.<br>缓存应用中的数据以减少SQL服务器的负载。<br>不要查询应用中不需要的列。<br>不要使用SELECT * FROM table_name...<br>测试应用的所有部分，但将大部分精力放在在可能最坏的合理的负载下的测试整体应用。通过以一种模块化的方式进行，你应该能用一个快速&#8220;哑模块&#8221;替代找到的瓶颈，然后很容易地标出下一个瓶颈。<br>如果在一个批处理中进行大量修改，使用LOCK TABLES。例如将多个UPDATES或DELETES集中在一起。
<p>--------------------------------------------------------------------------------
<p>七、应该使用可移植的应用
<p>Perl DBI/DBD<br>ODBC<br>JDBC<br>Python(或其他有普遍SQL接口的语言)<br>你应该只使用存在于所有目的SQL服务器中或可以很容易地用其他构造模拟的SQL构造。www.mysql.com上的Crash-me页可以帮助你。<br>为操作系统/SQL服务器编写包装程序来提供缺少的功能。
<p>--------------------------------------------------------------------------------
<p>八、如果你需要更快的速度，你应该：
<p>找出瓶颈(CPU、磁盘、内存、SQL服务器、操作系统、API或应用)并集中全力解决。<br>使用给予你更快速度/灵活性的扩展。<br>逐渐了解SQL服务器以便能为你的问题使用可能最快的SQL构造并避免瓶颈。<br>优化表布局和查询。<br>使用复制以获得更快的选择(select)速度。<br>如果你有一个慢速的网络连接数据库，使用压缩客户/服务器协议。<br>不要害怕时应用的第一个版本不能完美地移植，在你解决问题时，你总是可以在以后优化它。
<p>--------------------------------------------------------------------------------
<p>九、优化MySQL
<p>挑选编译器和编译选项。<br>位你的系统寻找最好的启动选项。<br>通读MySQL参考手册并阅读Paul DuBios的《MySQL》一书。(已有中文版-译注)<br>多用EXPLAIN SELECT、SHOW VARIABLES、SHOW STATUS和SHOW PROCESSLIST。<br>了解查询优化器的工作原理。<br>优化表的格式。<br>维护你的表(myisamchk、CHECK TABLE、 OPTIMIZE TABLE)<br>使用MySQL的扩展功能以让一切快速完成。<br>如果你注意到了你将在很多场合需要某些函数，编写MySQL UDF函数。<br>不要使用表级或列级的GRANT，除非你确实需要。<br>购买MySQL技术支持以帮助你解决问题憨笑
<p>--------------------------------------------------------------------------------
<p>十、编译和安装MySQL
<p>通过位你的系统挑选可能最好的编译器，你通常可以获得10-30%的性能提高。<br>在Linux/Intel平台上，用pgcc(gcc的奔腾芯片优化版)编译MySQL。然而，二进制代码将只能运行在Intel奔腾CPU上。<br>对于一种特定的平台，使用MySQL参考手册上推荐的优化选项。<br>一般地，对特定CPU的原生编译器(如Sparc的Sun Workshop)应该比gcc提供更好的性能，但不总是这样。<br>用你将使用的字符集编译MySQL。<br>静态编译生成mysqld的执行文件(用--with-mysqld-ldflags=all-static)并用strip sql/mysqld整理最终的执行文件。<br>注意，既然MySQL不使用C++扩展，不带扩展支持编译MySQL将赢得巨大的性能提高。<br>如果操作系统支持原生线程，使用原生线程(而不用mit-pthreads)。<br>用MySQL基准测试来测试最终的二进制代码。
<p>--------------------------------------------------------------------------------
<p>十一、维护
<p>如果可能，偶尔运行一下OPTIMIZE table，这对大量更新的变长行非常重要。<br>偶尔用myisamchk -a更新一下表中的键码分布统计。记住在做之前关掉MySQL。<br>如果有碎片文件，可能值得将所有文件复制到另一个磁盘上，清除原来的磁盘并拷回文件。<br>如果遇到问题，用myisamchk或CHECK table检查表。<br>用mysqladmin -i10 precesslist extended-status监控MySQL的状态。<br>用MySQL GUI客户程序，你可以在不同的窗口内监控进程列表和状态。<br>使用mysqladmin debug获得有关锁定和性能的信息。
<p>--------------------------------------------------------------------------------
<p>十二、优化SQL
<p>扬SQL之长，其它事情交由应用去做。使用SQL服务器来做：
<p>找出基于WHERE子句的行。<br>JOIN表<br>GROUP BY<br>ORDER BY<br>DISTINCT
<p>不要使用SQL来做：
<p>检验数据(如日期)<br>成为一只计算器
<p>技巧：
<p>明智地使用键码。<br>键码适合搜索，但不适合索引列的插入/更新。<br>保持数据为数据库第三范式，但不要担心冗余信息或这如果你需要更快的速度，创建总结表。<br>在大表上不做GROUP BY，相反创建大表的总结表并查询它。<br>UPDATE table set count=count+1 where key_column=constant非常快。<br>对于大表，或许最好偶尔生成总结表而不是一直保持总结表。<br>充分利用INSERT的默认值。
<p>--------------------------------------------------------------------------------
<p>十三、不同SQL服务器的速度差别（以秒计）
<p>+--------------------------+--------+---------+<br>|通过键码读取2000000行： | NT | Linux |<br>+--------------------------+--------+---------+<br>|mysql | 367 | 249 |<br>+--------------------------+--------+---------+<br>|mysql_odbc | 464 | |<br>+--------------------------+--------+---------+　<br>|db2_odbc | 1206 | |<br>+--------------------------+--------+---------+　<br>|informix_odbc | 121126 | |<br>+--------------------------+--------+---------+　<br>|ms-sql_odbc 　 | 1634 | |<br>+--------------------------+--------+---------+<br>|oracle_odbc | 20800 | |<br>+--------------------------+--------+---------+　<br>|solid_odbc | 877 　 | |<br>+--------------------------+--------+---------+<br>|sybase_odbc | 17614 | |<br>+--------------------------+--------+---------+　
<p>+--------------------------+--------+---------+　<br>|插入350768行： | NT | Linux |<br>+--------------------------+--------+---------+<br>|mysql | 381 | 206 |<br>+--------------------------+--------+---------+<br>|mysql_odbc | 619 　 | |<br>+--------------------------+--------+---------+<br>|db2_odbc | 3460 　| |<br>+--------------------------+--------+---------+<br>|informix_odbc | 2692 　| |<br>+--------------------------+--------+---------+<br>|ms-sql_odbc | 4012 　| |<br>+--------------------------+--------+---------+<br>|oracle_odbc | 11291 | |<br>+--------------------------+--------+---------+　<br>|solid_odbc | 1801 　| |<br>+--------------------------+--------+---------+<br>|sybase_odbc | 4802 　| |<br>+--------------------------+--------+---------+
<p>在上述测试中，MySQL配置8M高速缓存运行，其他数据库以默认安装运行。
<p>--------------------------------------------------------------------------------
<p>十四、重要的MySQL启动选项
<p>back_log 如果需要大量新连接，修改它。<br>thread_cache_size 如果需要大量新连接，修改它。<br>key_buffer_size 索引页池，可以设成很大。<br>bdb_cache_size BDB表使用的记录和键吗高速缓存。<br>table_cache 如果有很多的表和并发连接，修改它。<br>delay_key_write 如果需要缓存所有键码写入，设置它。<br>log_slow_queries 找出需花大量时间的查询。<br>max_heap_table_size 用于GROUP BY<br>sort_buffer 用于ORDER BY和GROUP BY<br>myisam_sort_buffer_size 用于REPAIR TABLE<br>join_buffer_size 在进行无键吗的联结时使用。
<p>--------------------------------------------------------------------------------
<p>十五、优化表
<p>MySQL拥有一套丰富的类型。你应该对每一列尝试使用最有效的类型。<br>ANALYSE过程可以帮助你找到表的最优类型：SELECT * FROM table_name PROCEDURE ANALYSE()。<br>对于不保存NULL值的列使用NOT NULL，这对你想索引的列尤其重要。<br>将ISAM类型的表改为MyISAM。<br>如果可能，用固定的表格式创建表。<br>不要索引你不想用的东西。<br>利用MySQL能按一个索引的前缀进行查询的事实。如果你有索引INDEX(a,b)，你不需要在a上的索引。<br>不在长CHAR/VARCHAR列上创建索引，而只索引列的一个前缀以节省存储空间。CREATE TABLE table_name (hostname CHAR(255) not null, index(hostname(10)))<br>对每个表使用最有效的表格式。<br>在不同表中保存相同信息的列应该有同样的定义并具有相同的列名。
<p>--------------------------------------------------------------------------------
<p>十六、MySQL如何次存储数据
<p>数据库以目录存储。<br>表以文件存储。<br>列以变长或定长格式存储在文件中。对BDB表，数据以页面形式存储。<br>支持基于内存的表。<br>数据库和表可在不同的磁盘上用符号连接起来。<br>在Windows上，MySQL支持用.sym文件内部符号连接数据库。
<p>--------------------------------------------------------------------------------
<p>十七、MySQL表类型
<p>HEAP表：固定行长的表，只存储在内存中并用HASH索引进行索引。<br>ISAM表：MySQL 3.22中的早期B-tree表格式。<br>MyIASM：IASM表的新版本，有如下扩展：<br>二进制层次的可移植性。<br>NULL列索引。<br>对变长行比ISAM表有更少的碎片。<br>支持大文件。<br>更好的索引压缩。<br>更好的键吗统计分布。<br>更好和更快的auto_increment处理。<br>来自Sleepcat的Berkeley DB(BDB)表：事务安全(有BEGIN WORK/COMMIT|ROLLBACK)。
<p>--------------------------------------------------------------------------------
<p>十八、MySQL行类型（专指IASM/MyIASM表）
<p>如果所有列是定长格式(没有VARCHAR、BLOB或TEXT)，MySQL将以定长表格式创建表，否则表以动态长度格式创建。<br>定长格式比动态长度格式快很多并更安全。<br>动态长度行格式一般占用较少的存储空间，但如果表频繁更新，会产生碎片。<br>在某些情况下，不值得将所有VARCHAR、BLOB和TEXT列转移到另一个表中，只是获得主表上的更快速度。<br>利用myiasmchk（对ISAM，pack_iasm），可以创建只读压缩表，这使磁盘使用率最小，但使用慢速磁盘时，这非常不错。压缩表充分地利用将不再更新的日志表
<p>--------------------------------------------------------------------------------
<p>十九、MySQL高速缓存（所有线程共享，一次性分配）
<p>键码缓存：key_buffer_size，默认8M。<br>表缓存：table_cache，默认64。<br>线程缓存：thread_cache_size，默认0。<br>主机名缓存：可在编译时修改，默认128。<br>内存映射表：目前仅用于压缩表。<br>注意：MySQL没有运行高速缓存，而让操作系统处理。
<p>--------------------------------------------------------------------------------
<p>二十、MySQL缓存区变量（非共享，按需分配）
<p>sort_buffer：ORDER BY/GROUP BY<br>record_buffer：扫描表。<br>join_buffer_size：无键联结<br>myisam_sort_buffer_size：REPAIR TABLE<br>net_buffer_length:对于读SQL语句并缓存结果。<br>tmp_table_size：临时结果的HEAP表大小。
<p>--------------------------------------------------------------------------------
<p>二十一、MySQL表高速缓存工作原理
<p>每个MyISAM表的打开实例(instance)使用一个索引文件和一个数据文件。如果表被两个线程使用或在同一条查询中使用两次，MyIASM将共享索引文件而是打开数据文件的另一个实例。<br>如果所有在高速缓存中的表都在使用，缓存将临时增加到比表缓存尺寸大些。如果是这样，下一个被释放的表将被关闭。<br>你可以通过检查mysqld的Opened_tables变量以检查表缓存是否太小。如果该值太高，你应该增大表高速缓存。
<p>--------------------------------------------------------------------------------
<p>二十二、MySQL扩展/优化-提供更快的速度
<p>使用优化的表类型（HEAP、MyIASM或BDB表）。<br>对数据使用优化的列。<br>如果可能使用定长行。<br>使用不同的锁定类型（SELECT HIGH_PRIORITY，INSERT LOW_PRIORITY）<br>Auto_increment<br>REPLACE (REPLACE INTO table_name VALUES (...))<br>INSERT DELAYED<br>LOAD DATA INFILE / LOAD_FILE()<br>使用多行INSERT一次插入多行。<br>SELECT INTO OUTFILE<br>LEFT JOIN, STRAIGHT JOIN<br>LEFT JOIN ，结合IS NULL<br>ORDER BY可在某些情况下使用键码。<br>如果只查询在一个索引中的列，将只使用索引树解决查询。<br>联结一般比子查询快（对大多数SQL服务器亦如此）。<br>LIMIT<br>SELECT * from table1 WHERE a &gt; 10 LIMIT 10,20<br>DELETE * from table1 WHERE a &gt; 10 LIMIT 10<br>foo IN (常数列表) 高度优化。<br>GET_LOCK()/RELEASE_LOCK()<br>LOCK TABLES<br>INSERT和SELECT可同时运行。<br>UDF函数可装载进一个正在运行的服务器。<br>压缩只读表。<br>CREATE TEMPORARY TABLE<br>CREATE TABLE .. SELECT<br>带RAID选项的MyIASM表将文件分割成很多文件以突破某些文件系统的2G限制。<br>Delay_keys<br>复制功能
<p>--------------------------------------------------------------------------------
<p>二十二、MySQL何时使用索引
<p>对一个键码使用&gt;, &gt;=, =, &lt;, &lt;=, IF NULL和BETWEEN<br>SELECT * FROM table_name WHERE key_part1=1 and key_part2 &gt; 5;<br>SELECT * FROM table_name WHERE key_part1 IS NULL;
<p>当使用不以通配符开始的LIKE<br>SELECT * FROM table_name WHERE key_part1 LIKE 'jani%'
<p>在进行联结时从另一个表中提取行时<br>SELECT * from t1,t2 where t1.col=t2.key_part
<p>找出指定索引的MAX()或MIN()值<br>SELECT MIN(key_part2),MAX(key_part2) FROM table_name where key_part1=10
<p>一个键码的前缀使用ORDER BY或GROUP BY<br>SELECT * FROM foo ORDER BY key_part1,key_part2,key_part3
<p>在所有用在查询中的列是键码的一部分时间<br>SELECT key_part3 FROM table_name WHERE key_part1=1
<p>--------------------------------------------------------------------------------
<p>二十三、MySQL何时不使用索引
<p>如果MySQL能估计出它将可能比扫描整张表还要快时，则不使用索引。例如如果key_part1均匀分布在1和100之间，下列查询中使用索引就不是很好：<br>SELECT * FROM table_name where key_part1 &gt; 1 and key_part1 &lt; 90
<p>如果使用HEAP表且不用=搜索所有键码部分。
<p>在HEAP表上使用ORDER BY。
<p>如果不是用键码第一部分<br>SELECT * FROM table_name WHERE key_part2=1
<p>如果使用以一个通配符开始的LIKE<br>SELECT * FROM table_name WHERE key_part1 LIKE '%jani%'
<p>搜索一个索引而在另一个索引上做ORDER BY<br>SELECT * from table_name WHERE key_part1 = # ORDER BY key2
<p>--------------------------------------------------------------------------------
<p>二十四、学会使用EXPLAIN
<p>对于每一条你认为太慢的查询使用EXPLAIN!
<p>mysql&gt; explain select t3.DateOfAction, t1.TransactionID<br>-&gt; from t1 join t2 join t3<br>-&gt; where t2.ID = t1.TransactionID and t3.ID = t2.GroupID<br>-&gt; order by t3.DateOfAction, t1.TransactionID;<br>+-------+--------+---------------+---------+---------+------------------+------+---------------------------------+<br>| table | type | possible_keys | key | key_len | ref | rows | Extra |<br>+-------+--------+---------------+---------+---------+------------------+------+---------------------------------+<br>| t1 | ALL | NULL | NULL | NULL | NULL | 11 | Using temporary; Using filesort |<br>| t2 | ref | ID | ID | 4 | t1.TransactionID | 13 | |<br>| t3 | eq_ref | PRIMARY | PRIMARY | 4 | t2.GroupID | 1 | |<br>+-------+--------+---------------+---------+---------+------------------+------+---------------------------------+
<p>ALL和范围类型提示一个潜在的问题。
<p>--------------------------------------------------------------------------------
<p>二十五、学会使用SHOW PROCESSLIST
<p>使用SHOW processlist来发现正在做什么：<br>+----+-------+-----------+----+---------+------+--------------+-------------------------------------+<br>| Id | User | Host | db | Command | Time | State | Info |<br>+----+-------+-----------+----+---------+------+--------------+-------------------------------------+<br>| 6 | monty | localhost | bp | Query | 15 | Sending data | select * from station,station as s1 |<br>| 8 | monty | localhost | | Query | 0 | | show processlist |<br>+----+-------+-----------+----+---------+------+--------------+-------------------------------------+
<p>在mysql或mysqladmin中用KILL来杀死溜掉的线程。<br>--------------------------------------------------------------------------------
<p>二十六、如何知晓MySQL解决一条查询
<p>运行项列命令并试图弄明白其输出：<br>SHOW VARIABLES;<br>SHOW COLUMNS FROM ...\G<br>EXPLAIN SELECT ...\G<br>FLUSH STATUS;<br>SELECT ...;<br>SHOW STATUS;
<p>--------------------------------------------------------------------------------
<p>二十七、MySQL非常不错
<p>日志<br>在进行很多连接时，连接非常快。<br>同时使用SELECT和INSERT的场合。<br>在不把更新与耗时太长的选择结合时。<br>在大多数选择/更新使用唯一键码时。<br>在使用没有长时间冲突锁定的多个表时。<br>在用大表时(MySQL使用一个非常紧凑的表格式)。
<p>--------------------------------------------------------------------------------
<p>二十八、MySQL应避免的事情
<p>用删掉的行更新或插入表，结合要耗时长的SELECT。<br>在能放在WHERE子句中的列上用HAVING。<br>不使用键码或键码不够唯一而进行JOIN。<br>在不同列类型的列上JOIN。<br>在不使用=匹配整个键码时使用HEAP表。<br>在MySQL监控程序中忘记在UPDATE或DELETE中使用一条WHERE子句。如果想这样做，使用mysql客户程序的--i-am-a-dummy选项。
<p>--------------------------------------------------------------------------------
<p>二十九、MySQL各种锁定
<p>内部表锁定<br>LOCK TABLES（所有表类型适用）<br>GET LOCK()/RELEASE LOCK()<br>页面锁定（对BDB表）<br>ALTER TABLE也在BDB表上进行表锁定<br>LOCK TABLES允许一个表有多个读者和一个写者。<br>一般WHERE锁定具有比READ锁定高的优先级以避免让写入方干等。对于不重要的写入方，可以使用LOW_PRIORITY关键字让锁定处理器优选读取方。<br>UPDATE LOW_PRIORITY SET value=10 WHERE id=10;
<p>--------------------------------------------------------------------------------
<p>三十、给MySQL更多信息以更好地解决问题的技巧
<p>注意你总能去掉(加注释)MySQL功能以使查询可移植：
<p>SELECT /*! SQL_BUFFER_RESULTS */ ...<br>SELECT SQL_BUFFER_RESULTS ...<br>将强制MySQL生成一个临时结果集。只要所有临时结果集生成后，所有表上的锁定均被释放。这能在遇到表锁定问题时或要花很长时间将结果传给客户端时有所帮助。<br>SELECT SQL_SMALL_RESULT ... GROUP BY ...<br>告诉优化器结果集将只包含很少的行。<br>SELECT SQL_BIG_RESULT ... GROUP BY ...<br>告诉优化器结果集将包含很多行。<br>SELECT STRAIGHT_JOIN ...<br>强制优化器以出现在FROM子句中的次序联结表。<br>SELECT ... FROM table_name [USE INDEX (index_list) | IGNORE INDEX (index_list)] table_name2<br>强制MySQL使用/忽略列出的索引。
<p>--------------------------------------------------------------------------------
<p>三十一、事务的例子
<p>MyIASM表如何进行事务处理:<br>mysql&gt; LOCK TABLES trans READ, customer WRITE;<br>mysql&gt; select sum(value) from trans where customer_id=some_id;<br>mysql&gt; update customer set total_value=sum_from_previous_statement<br>where customer_id=some_id;<br>mysql&gt; UNLOCK TABLES;
<p>BDB表如何进行事务:<br>mysql&gt; BEGIN WORK;<br>mysql&gt; select sum(value) from trans where customer_id=some_id;<br>mysql&gt; update customer set total_value=sum_from_previous_statement<br>where customer_id=some_id;<br>mysql&gt; COMMIT;
<p>注意你可以通过下列语句回避事务:<br>UPDATE customer SET value=value+new_value WHERE customer_id=some_id;
<p>--------------------------------------------------------------------------------
<p>三十二、使用REPLACE的例子
<p>REPLACE的功能极像INSERT，除了如果一条老记录在一个唯一索引上具有与新纪录相同的值，那么老记录在新纪录插入前则被删除。不使用
<p>SELECT 1 FROM t1 WHERE key=#<br>IF found-row<br>LOCK TABLES t1<br>DELETE FROM t1 WHERE key1=#<br>INSERT INTO t1 VALUES (...)<br>UNLOCK TABLES t1;<br>ENDIF
<p>而用<br>REPLACE INTO t1 VALUES (...)
<p>--------------------------------------------------------------------------------
<p>三十三、一般技巧
<p>使用短主键。联结表时使用数字而非字符串。<br>当使用多部分键码时，第一部分应该时最常用的部分。<br>有疑问时，首先使用更多重复的列以获得更好地键码压缩。<br>如果在同一台机器上运行MySQL客户和服务器，那么在连接MySQL时则使用套接字而不是TCP/IP（这可以提高性能7.5%）。可在连接MySQL服务器时不指定主机名或主机名为localhost来做到。<br>如果可能，使用--skip-locking(在某些OS上为默认)，这将关闭外部锁定并将提高性能。<br>使用应用层哈希值而非长键码：<br>SELECT * FROM table_name WHERE hash=MD5(concat(col1,col2)) AND<br>col_1='constant' AND col_2='constant'
<p>在文件中保存需要以文件形式访问的BLOB，在数据库中只保存文件名。<br>删除所有行比删除一大部分行要快。<br>如果SQL不够快，研究一下访问数据的较底层接口。
<p>--------------------------------------------------------------------------------
<p>三十四、使用MySQL 3.23的好处
<p>MyISAM：可移植的大表格式<br>HEAP：内存中的表<br>Berkeley DB：支持事务的表。<br>众多提高的限制<br>动态字符集<br>更多的STATUS变量<br>CHECK和REPAIR表<br>更快的GROUP BY和DISTINCT<br>LEFT JOIN ... IF NULL的优化<br>CREATE TABLE ... SELECT<br>CREATE TEMPORARY table_name (...)<br>临时HEAP表到MyISAM表的自动转换<br>复制<br>mysqlhotcopy脚本
<p>--------------------------------------------------------------------------------
<p>三十五、正在积极开发的重要功能
<p>改进事务处理<br>失败安全的复制<br>正文搜索<br>多个表的删除(之后完成多个表的更新)<br>更好的键码缓存<br>原子RENAME (RENAME TABLE foo as foo_old, foo_new as foo)<br>查询高速缓存<br>MERGE TABLES<br>一个更好的GUI客户程序
<p>MySQL优化简明指南
<p>--------------------------------------------------------------------------------
<p>2004-05-25
<p>一、在编译时优化MySQL<br>如果你从源代码分发安装MySQL，要注意，编译过程对以后的目标程序性能有重要的影响，不同的编译方式可能得到类似的目标文件，但性能可能相差很大，因此，在编译安装MySQL适应仔细根据你的应用类型选择最可能好的编译选项。这种定制的MySQL可以为你的应用提供最佳性能。
<p>技巧：选用较好的编译器和较好的编译器选项，这样应用可提高性能10-30%。（MySQL文档如是说）
<p>1.1、使用pgcc（Pentium GCC)编译器<br>该编译器（<a href="http://www.goof.com/pcg/）针对运行?...继谙低成杓频摹?"><font color=#1a8bc8>http://www.goof.com/pcg/）针对运行?...继谙低成杓频摹?</font></a>
<p>1.2、仅使用你想使用的字符集编译MySQL<br>MySQL目前提供多达24种不同的字符集，为全球用户以他们自己的语言插入或查看表中的数据。却省情况下，MySQL安装所有者这些字符集，热然而，最好的选择是指选择一种你需要的。如，禁止除Latin1字符集以外的所有其它字符集：
<p>--------------------------------------------------------------------------------<br>%&gt;./configure -with-extra-charsets=none [--other-configuration-options]<br>--------------------------------------------------------------------------------
<p>1.3、将mysqld编译成静态执行文件<br>将mysqld编译成静态执行文件而无需共享库也能获得更好的性能。通过在配置时指定下列选项，可静态编译mysqld。
<p>--------------------------------------------------------------------------------<br>%&gt;./configure -with-mysqld-ldflags=-all-static [--other-configuration-options]<br>--------------------------------------------------------------------------------
<p>1.4、配置样本<br>下列配置命令常用于提高性能：
<p>--------------------------------------------------------------------------------<br>%&gt;CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared<br>--------------------------------------------------------------------------------
<p>二、调整服务器<br>确保运用正确的编译固然重要，但这只是成功的第一步，配置众多的MySQL变量同样对服务器的正常运行起关键作用。你可以将这些变量的赋值存在一个配置文件中，以确保它们在每次启动MySQL时均起作用，这个配置文件就是my.cnf文件。
<p>MySQL已经提供了几个my.cnf文件的样本，可在/usr/local/mysqld/share/mysql/目录下找到。这些文件分别命名为 my-small.cnf、 my-medium.cnf、my-large.cnf和my-huge.cnf，规模说明可在描述配置文件适用的系统类型标题中找到。如果在只有相当少内存的系统上运行MySQL，而且只是偶尔的用一下，那么my-small.cnf会比较理想，因为它命令mysqld只使用最少的资源。类似地，如果你计划构建电子商务超市，而且系统拥有2G内存，那么你可能要用到mysql-huge.cnf文件了。
<p>为了利用这些文件中的一个，你需要复制一个最适合需求的文件，改名为my.cnf。你可以选择使用配置文件三种作用范围的一种：
<p>Global：将my.cnf文件复制到服务器的/etc目录下，这使得配置文件中的变量作用于全局，即对所有服务器上的MySQL数据库服务器有效。<br>Local：将my.cnf文件复制到[MYSQL-INSTALL-DIR]/var/目录下，使得my.cnf作用于特定的服务器。[MYSQL-INSTALL-DIR]表示MySQL安装目录。<br>User：你可以再限制作用于特定的用户，将my.cnf复制到用户的根目录下。<br>究竟如何设置my.cnf中的这些变量呢？更进一步说，你可以设置哪一个变量。虽然所用变量对MySQL服务器相对通用，每一个变量与MySQL的的某些组件有更特定的关系。如变量max_connects归在mysqld类别下。执行下列命令即可知道：
<p>--------------------------------------------------------------------------------<br>%&gt;/usr/local/mysql/libexec/mysqld --help<br>--------------------------------------------------------------------------------
<p>它显示大量的选项及与mysqld相关的变量。你可以很容易地在该行文字之下找出变量：
<p>--------------------------------------------------------------------------------<br>Possible variables for option --set-variable (-O) are<br>--------------------------------------------------------------------------------
<p>然后你可以如下设置my.cnf中的那些变量：
<p>--------------------------------------------------------------------------------<br>set-variable = max_connections=100<br>--------------------------------------------------------------------------------
<p>它设置MySQL服务器的最大并发连接数为100。要确保在my.cnf文件中的[mysqld]标题下插入变量设置。<br>三、表类型
<p>很多MySQL用户可能很惊讶，MySQL确实为用户提供5种不同的表类型，称为DBD、HEAP、ISAM、MERGE和MyIASM。DBD归为事务安全类，而其他为非事务安全类。
<p>3.1、事务安全
<p>DBD<br>Berkeley DB(DBD)表是支持事务处理的表，由Sleepycat软件公司(<a href="http://www.sleepycat.com)开发。它提供mysql用户期待已久的功能-事务控制。事务控制在任何数据库系统中都是一个极有价值的功能，因为它们确保一组命令能成功地执行。/"><font color=#1a8bc8>http://www.sleepycat.com)开发。它提供MySQL用户期待已久的功能-事务控制。事务控制在任何数据库系统中都是一个极有价值的功能，因为它们确保一组命令能成功地执行。</font></a>
<p>3.2、非事务安全
<p>HEAP
<p>HEAP表是MySQL中存取数据最快的表。这是因为他们使用存储在动态内存中的一个哈希索引。另一个要点是如果MySQL或服务器崩溃，数据将丢失。
<p>ISAM
<p>ISAM表是早期MySQL版本的缺省表类型，直到MyIASM开发出来。建议不要再使用它。
<p>MERGE
<p>MERGE是一个有趣的新类型，在3.23.25之后出现。一个MERGE表实际上是一个相同MyISAM表的集合，合并成一个表，主要是为了效率原因。这样可以提高速度、搜索效率、修复效率并节省磁盘空间。
<p>MyIASM
<p>这是MySQL的缺省表类型。它基于IASM代码，但有很多有用的扩展。MyIASM比较好的原因：
<p>MyIASM表小于IASM表，所以使用较少资源。<br>MyIASM表在不同的平台上二进制层可移植。<br>更大的键码尺寸，更大的键码上限。<br>3.3、指定表类型
<p>你可在创建表时指定表的类型。下例创建一个HEAP表：
<p>--------------------------------------------------------------------------------
<p>mysql&gt;CREATE TABLE email_addresses TYPE=HEAP (<br>-&gt;email char(55) NOT NULL,<br>-&gt;name char(30) NOT NULL,<br>-&gt;PRIMARY KEY(email) );
<p>--------------------------------------------------------------------------------
<p>BDB表需要一些配置工作，参见http://www.mysql.com/doc/B/D/BDB_overview.html。
<p>3.4、更多的表类型
<p>为了使MySQL管理工作更有趣，即将发布的MySQL 4.0将提供两种新的表类型，称为Innobase和Gemeni。
<p>4、优化工具
<p>MySQL服务器本身提供了几条内置命令用于帮助优化。
<p>4.1、SHOW
<p>你可能有兴趣知道MySQL服务器究竟更了什么，下列命令给出一个总结：
<p>--------------------------------------------------------------------------------<br>mysql&gt;show status;<br>--------------------------------------------------------------------------------
<p>它给出了一个相当长的状态变量及其值的列表。有些变量包含了异常终止客户的数量、异常终止连接的数量、连接尝试的次数、最大并发连接数和大量其他有用的信息。这些信息对找出系统问题和低效极具价值。<br>SHOW还能做更多的事情。它可以显示关于日志文件、特定数据库、表、索引、进程和权限表中有价值的信息。详见MySQL手册。
<p>4.2、EXPLAIN
<p>当你面对SELECT语句时，EXPLAIN解释SELECT命令如何被处理。这不仅对决定是否应该增加一个索引，而且对决定一个复杂的Join如何被MySQL处理都是有帮助的。
<p>4.3、OPTIMIZE
<p>OPTIMIZE语句允许你恢复空间和合并数据文件碎片，对包含变长行的表进行了大量更新和删除后，这样做特别重要。OPTIMIZE目前只工作于MyIASM和BDB表。</p>
<img src ="http://www.blogjava.net/zhip/aggbug/120325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhip/" target="_blank">zhip</a> 2007-05-27 18:30 <a href="http://www.blogjava.net/zhip/archive/2007/05/27/120325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Oracle使用经验技巧</title><link>http://www.blogjava.net/zhip/archive/2007/05/27/120323.html</link><dc:creator>zhip</dc:creator><author>zhip</author><pubDate>Sun, 27 May 2007 10:26:00 GMT</pubDate><guid>http://www.blogjava.net/zhip/archive/2007/05/27/120323.html</guid><wfw:comment>http://www.blogjava.net/zhip/comments/120323.html</wfw:comment><comments>http://www.blogjava.net/zhip/archive/2007/05/27/120323.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhip/comments/commentRss/120323.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhip/services/trackbacks/120323.html</trackback:ping><description><![CDATA[1、模糊匹配时忽略大小写<br>select * from table where lower(name) like lower('%a%');<br><br>2、去除某一列的尾部空格<br>update table_name set column_name=trim(column_name);<br>
<img src ="http://www.blogjava.net/zhip/aggbug/120323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhip/" target="_blank">zhip</a> 2007-05-27 18:26 <a href="http://www.blogjava.net/zhip/archive/2007/05/27/120323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>各种常见java_sql_SQLException归纳</title><link>http://www.blogjava.net/zhip/archive/2007/05/11/116723.html</link><dc:creator>zhip</dc:creator><author>zhip</author><pubDate>Fri, 11 May 2007 05:25:00 GMT</pubDate><guid>http://www.blogjava.net/zhip/archive/2007/05/11/116723.html</guid><wfw:comment>http://www.blogjava.net/zhip/comments/116723.html</wfw:comment><comments>http://www.blogjava.net/zhip/archive/2007/05/11/116723.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhip/comments/commentRss/116723.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhip/services/trackbacks/116723.html</trackback:ping><description><![CDATA[<table id=article499ab7690100034q cellSpacing=0 cellPadding=0 border=0>
    <tbody>
        <tr>
            <td align=middle>
            <table cellSpacing=0 cellPadding=0 border=0>
                <tbody>
                    <tr>
                        <td class=up id=articleTitle499ab7690100034q>
                        <div class="sysBr500 title" id=commentText499ab7690100034q>各种常见java.sql.SQLException归纳</div>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
        <tr id=articleBody499ab7690100034q>
            <td class=aBody>
            <table cellSpacing=0 cellPadding=0 align=center border=0>
                <tbody>
                    <tr>
                        <td class=author><span class=time></span></td>
                    </tr>
                </tbody>
            </table>
            <table class=dashed cellSpacing=0 cellPadding=0 align=center border=0>
                <tbody>
                    <tr>
                        <td></td>
                    </tr>
                </tbody>
            </table>
            <table class=aSize cellSpacing=0 cellPadding=0 align=center border=0>
                <tbody>
                    <tr>
                        <td align=right><style>.A_font_change_big {
                        FONT-SIZE: 16px; LINE-HEIGHT: 27px
                        }
                        .A_font_change_big A {
                        FONT-SIZE: 16px; LINE-HEIGHT: 27px
                        }
                        .A_font_change_mid {
                        FONT-SIZE: 14px; LINE-HEIGHT: 24px
                        }
                        .A_font_change_mid A {
                        FONT-SIZE: 14px; LINE-HEIGHT: 24px
                        }
                        .A_font_change_sml {
                        FONT-SIZE: 12px; LINE-HEIGHT: 21px
                        }
                        .A_font_change_sml A {
                        FONT-SIZE: 12px; LINE-HEIGHT: 21px
                        }
                        </style></td>
                    </tr>
                </tbody>
            </table>
            <table class=description cellSpacing=0 cellPadding=0 align=center border=0>
                <tbody>
                    <tr>
                        <td align=middle>
                        <div class="sysBr500 text" id=articleText499ab7690100034q align=left>
                        <div>java.sql.SQLException错误，将英文原文一并列出，以供查阅！</div>
                        <div>ORA-00904:&nbsp;&nbsp;&nbsp; invalid column name 无效列名</div>
                        <div>ORA-00942: 　table or view does not exist 表或者视图不存在</div>
                        <div>ORA-01400: 　cannot insert NULL into () 不能将空值插入</div>
                        <div>ORA-00936:　缺少表达式</div>
                        <div>ORA-00933:　SQL 命令未正确结束</div>
                        <div>ORA-01722:　无效数字：（一般可能是企图将字符串类型的值填入数字型而造成）</div>
                        <div>ORA-06530:&nbsp; ACCESS_INTO_NULL　<br>Your&nbsp; program&nbsp; attempts&nbsp; to&nbsp; assign&nbsp; values&nbsp; to&nbsp; the&nbsp; attributes&nbsp; of&nbsp; an&nbsp; uninitialized&nbsp; (atomically&nbsp; null)&nbsp; object.<br>企图将值写入未初化对象的属性</div>
                        <div>ORA-06592:&nbsp; CASE_NOT_FOUND<br>None&nbsp; of&nbsp; the&nbsp; choices&nbsp; in&nbsp; the&nbsp; WHEN&nbsp; clauses&nbsp; of&nbsp; a&nbsp; CASE&nbsp; statement&nbsp; is&nbsp; selected,&nbsp; and&nbsp; there&nbsp; is&nbsp; no&nbsp; ELSE&nbsp; clause.<br>case语句格式有误，没有分支语句</div>
                        <div>ORA-06531:&nbsp; COLLECTION_IS_NULL<br>Your&nbsp; program&nbsp; attempts&nbsp; to&nbsp; apply&nbsp; collection&nbsp; methods&nbsp; other&nbsp; than&nbsp; EXISTS&nbsp; to&nbsp; an&nbsp; uninitialized&nbsp; (atomically&nbsp; null)&nbsp;</div>
                        <div>nested&nbsp; table&nbsp; or&nbsp; varray,&nbsp; or&nbsp; the&nbsp; program&nbsp; attempts&nbsp; to&nbsp; assign&nbsp; values&nbsp; to&nbsp; the&nbsp; elements&nbsp; of&nbsp; an&nbsp; uninitialized&nbsp; nested&nbsp;</div>
                        <div>table&nbsp; or&nbsp; varray.<br>企图将集合填入未初始化的嵌套表中</div>
                        <div>ORA-06511:&nbsp; CURSOR_ALREADY_OPEN<br>Your&nbsp; program&nbsp; attempts&nbsp; to&nbsp; open&nbsp; an&nbsp; already&nbsp; open&nbsp; cursor.&nbsp; A&nbsp; cursor&nbsp; must&nbsp; be&nbsp; closed&nbsp; before&nbsp; it&nbsp; can&nbsp; be&nbsp; reopened.&nbsp; A</div>
                        <div>&nbsp;cursor&nbsp; FOR&nbsp; loop&nbsp; automatically&nbsp; opens&nbsp; the&nbsp; cursor&nbsp; to&nbsp; which&nbsp; it&nbsp; refers.&nbsp; So,&nbsp; your&nbsp; program&nbsp; cannot&nbsp; open&nbsp; that&nbsp; cursor</div>
                        <div>&nbsp;inside&nbsp; the&nbsp; loop.<br>企图打开已经打开的指针．指针已经打开，要再次打开必须先关闭．</div>
                        <div>ORA-00001:&nbsp; DUP_VAL_ON_INDEX<br>Your&nbsp; program&nbsp; attempts&nbsp; to&nbsp; store&nbsp; duplicate&nbsp; values&nbsp; in&nbsp; a&nbsp; database&nbsp; column&nbsp; that&nbsp; is&nbsp; constrained&nbsp; by&nbsp; a&nbsp; unique&nbsp; index.<br>数据库字段存储重复，主键唯一值冲突</div>
                        <div>ORA-01001:&nbsp; INVALID_CURSOR　无效指针<br>Your&nbsp; program&nbsp; attempts&nbsp; an&nbsp; illegal&nbsp; cursor&nbsp; operation&nbsp; such&nbsp; as&nbsp; closing&nbsp; an&nbsp; unopened&nbsp; cursor.<br>非法指针操作，例如关闭未打开的指针</div>
                        <div>ORA-01722:&nbsp; INVALID_NUMBER　无效数字<br>In&nbsp; a&nbsp; SQL&nbsp; statement,&nbsp; the&nbsp; conversion&nbsp; of&nbsp; a&nbsp; character&nbsp; string&nbsp; into&nbsp; a&nbsp; number&nbsp; fails&nbsp; because&nbsp; the&nbsp; string&nbsp; does&nbsp; not&nbsp;</div>
                        <div>represent&nbsp; a&nbsp; valid&nbsp; number.&nbsp; (In&nbsp; procedural&nbsp; statements,&nbsp; VALUE_ERROR&nbsp; is&nbsp; raised.)&nbsp; This&nbsp; exception&nbsp; is&nbsp; also&nbsp; raised&nbsp;</div>
                        <div>when&nbsp; the&nbsp; LIMIT-clause&nbsp; expression&nbsp; in&nbsp; a&nbsp; bulk&nbsp; FETCH&nbsp; statement&nbsp; does&nbsp; not&nbsp; evaluate&nbsp; to&nbsp; a&nbsp; positive&nbsp; number.<br>在sql语句中，字符数字类型转换错误，无法将字符串转化成有效数字．此错误也可能因为在limit从句表达式中fetch语句无法对应指定数字</div>
                        <div>ORA-01017:&nbsp; LOGIN_DENIED　拒绝访问<br>Your&nbsp; program&nbsp; attempts&nbsp; to&nbsp; log&nbsp; on&nbsp; to&nbsp; Oracle&nbsp; with&nbsp; an&nbsp; invalid&nbsp; username&nbsp; and/or&nbsp; password.<br>企图用无效的用户名或密码登录oracle</div>
                        <div>ORA-01403:&nbsp; NO_DATA_FOUND&nbsp; 无数据发现<br>A&nbsp; SELECT&nbsp; INTO&nbsp; statement&nbsp; returns&nbsp; no&nbsp; rows,&nbsp; or&nbsp; your&nbsp; program&nbsp; references&nbsp; a&nbsp; deleted&nbsp; element&nbsp; in&nbsp; a&nbsp; nested&nbsp; table&nbsp; or&nbsp;</div>
                        <div>an&nbsp; uninitialized&nbsp; element&nbsp; in&nbsp; an&nbsp; index-by&nbsp; table.&nbsp; SQL&nbsp; aggregate&nbsp; functions&nbsp; such&nbsp; as&nbsp; AVG&nbsp; and&nbsp; SUM&nbsp; always&nbsp; return&nbsp; a&nbsp;</div>
                        <div>value&nbsp; or&nbsp; a&nbsp; null.&nbsp; So,&nbsp; a&nbsp; SELECT&nbsp; INTO&nbsp; statement&nbsp; that&nbsp; calls&nbsp; an&nbsp; aggregate&nbsp; function&nbsp; never&nbsp; raises&nbsp; NO_DATA_FOUND.&nbsp;</div>
                        <div>The&nbsp; FETCH&nbsp; statement&nbsp; is&nbsp; expected&nbsp; to&nbsp; return&nbsp; no&nbsp; rows&nbsp; eventually,&nbsp; so&nbsp; when&nbsp; that&nbsp; happens,&nbsp; no&nbsp; exception&nbsp; is&nbsp; raised.<br>&nbsp;&nbsp;<br>ORA-01012:&nbsp; NOT_LOGGED_ON&nbsp;&nbsp; 未登录<br>Your&nbsp; program&nbsp; issues&nbsp; a&nbsp; database&nbsp; call&nbsp; without&nbsp; being&nbsp; connected&nbsp; to&nbsp; Oracle.<br>程序发送数据库命令，但未与oracle建立连接<br>&nbsp;&nbsp;<br>ORA-06501:&nbsp; PROGRAM_ERROR&nbsp; 程序错误<br>PL/SQL&nbsp; has&nbsp; an&nbsp; internal&nbsp; problem.<br>pl/sql系统问题<br>&nbsp;&nbsp;<br>ORA-06504:&nbsp; ROWTYPE_MISMATCH&nbsp; 行类型不匹配<br>The&nbsp; host&nbsp; cursor&nbsp; variable&nbsp; and&nbsp; PL/SQL&nbsp; cursor&nbsp; variable&nbsp; involved&nbsp; in&nbsp; an&nbsp; assignment&nbsp; have&nbsp; incompatible&nbsp; return&nbsp; types.&nbsp;</div>
                        <div>For&nbsp; example,&nbsp; when&nbsp; an&nbsp; open&nbsp; host&nbsp; cursor&nbsp; variable&nbsp; is&nbsp; passed&nbsp; to&nbsp; a&nbsp; stored&nbsp; subprogram,&nbsp; the&nbsp; return&nbsp; types&nbsp; of&nbsp; the&nbsp;</div>
                        <div>actual&nbsp; and&nbsp; formal&nbsp; parameters&nbsp; must&nbsp; be&nbsp; compatible.&nbsp;</div>
                        <div>&nbsp;&nbsp;<br>ORA-30625:&nbsp; SELF_IS_NULL&nbsp;&nbsp;<br>Your&nbsp; program&nbsp; attempts&nbsp; to&nbsp; call&nbsp; a&nbsp; MEMBER&nbsp; method&nbsp; on&nbsp; a&nbsp; null&nbsp; instance.&nbsp; That&nbsp; is,&nbsp; the&nbsp; built-in&nbsp; parameter&nbsp; SELF&nbsp;</div>
                        <div>(which&nbsp; is&nbsp; always&nbsp; the&nbsp; first&nbsp; parameter&nbsp; passed&nbsp; to&nbsp; a&nbsp; MEMBER&nbsp; method)&nbsp; is&nbsp; null.<br>&nbsp;&nbsp;<br>ORA-06500:&nbsp; STORAGE_ERROR&nbsp; 存储错误<br>PL/SQL&nbsp; runs&nbsp; out&nbsp; of&nbsp; memory&nbsp; or&nbsp; memory&nbsp; has&nbsp; been&nbsp; corrupted.<br>PL/SQL运行内存溢出或内存冲突<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>ORA-06533:&nbsp; SUBSCRIPT_BEYOND_COUNT&nbsp;&nbsp; 子句超出数量<br>Your&nbsp; program&nbsp; references&nbsp; a&nbsp; nested&nbsp; table&nbsp; or&nbsp; varray&nbsp; element&nbsp; using&nbsp; an&nbsp; index&nbsp; number&nbsp; larger&nbsp; than&nbsp; the&nbsp; number&nbsp; of&nbsp;</div>
                        <div>elements&nbsp; in&nbsp; the&nbsp; collection.<br>&nbsp;&nbsp;<br>ORA-06532:&nbsp; SUBSCRIPT_OUTSIDE_LIMIT&nbsp;&nbsp; 子句非法数量<br>Your&nbsp; program&nbsp; references&nbsp; a&nbsp; nested&nbsp; table&nbsp; or&nbsp; varray&nbsp; element&nbsp; using&nbsp; an&nbsp; index&nbsp; number&nbsp; (-1&nbsp; for&nbsp; example)&nbsp; that&nbsp; is&nbsp;</div>
                        <div>outside&nbsp; the&nbsp; legal&nbsp; range.<br>&nbsp;&nbsp;<br>ORA-01410:&nbsp; SYS_INVALID_ROWID&nbsp;&nbsp; 无效的字段名<br>&nbsp;The&nbsp; conversion&nbsp; of&nbsp; a&nbsp; character&nbsp; string&nbsp; into&nbsp; a&nbsp; universal&nbsp; rowid&nbsp; fails&nbsp; because&nbsp; the&nbsp; character&nbsp; string&nbsp; does&nbsp; not&nbsp;</div>
                        <div>represent&nbsp; a&nbsp; valid&nbsp; rowid.&nbsp;<br>&nbsp;&nbsp;<br>ORA-00051:&nbsp; TIMEOUT_ON_RESOURCE&nbsp;&nbsp;&nbsp; 资源等待超时<br>A&nbsp; time-out&nbsp; occurs&nbsp; while&nbsp; Oracle&nbsp; is&nbsp; waiting&nbsp; for&nbsp; a&nbsp; resource.&nbsp;<br>&nbsp;&nbsp;<br>ORA-01422:&nbsp; TOO_MANY_ROWS&nbsp;&nbsp;&nbsp; 返回超过一行<br>A&nbsp; SELECT&nbsp; INTO&nbsp; statement&nbsp; returns&nbsp; more&nbsp; than&nbsp; one&nbsp; row.<br>&nbsp;&nbsp;<br>ORA-06502:&nbsp; VALUE_ERROR&nbsp;&nbsp; 值错误<br>An&nbsp; arithmetic,&nbsp; conversion,&nbsp; truncation,&nbsp; or&nbsp; size-constraint&nbsp; error&nbsp; occurs.&nbsp; For&nbsp; example,&nbsp; when&nbsp; your&nbsp; program&nbsp; selects&nbsp;</div>
                        <div>a&nbsp; column&nbsp; value&nbsp; into&nbsp; a&nbsp; character&nbsp; variable,&nbsp; if&nbsp; the&nbsp; value&nbsp; is&nbsp; longer&nbsp; than&nbsp; the&nbsp; declared&nbsp; length&nbsp; of&nbsp; the&nbsp; variable,&nbsp;</div>
                        <div>PL/SQL&nbsp; aborts&nbsp; the&nbsp; assignment&nbsp; and&nbsp; raises&nbsp; VALUE_ERROR.&nbsp; In&nbsp; procedural&nbsp; statements,&nbsp; VALUE_ERROR&nbsp; is&nbsp; raised&nbsp; if&nbsp; the&nbsp;</div>
                        <div>conversion&nbsp; of&nbsp; a&nbsp; character&nbsp; string&nbsp; into&nbsp; a&nbsp; number&nbsp; fails.&nbsp; (In&nbsp; SQL&nbsp; statements,&nbsp; INVALID_NUMBER&nbsp; is&nbsp; raised.)&nbsp;<br>&nbsp;&nbsp;<br>ORA-01476:&nbsp; ZERO_DIVIDE&nbsp; 除0错误<br>Your&nbsp; program&nbsp; attempts&nbsp; to&nbsp; divide&nbsp; a&nbsp; number&nbsp; by&nbsp; zero.&nbsp;</div>
                        <br><span class=bright-subject><strong>用尽的 Resultset <br></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.sql.SQLException: 用尽的 Resultset<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原因 ：忘了写rs.next()，rs.next()的作用就是使指向记录集的指针往下移动一行，如果有记录的话则返回真，否则返回否<br><br></span></div>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/zhip/aggbug/116723.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhip/" target="_blank">zhip</a> 2007-05-11 13:25 <a href="http://www.blogjava.net/zhip/archive/2007/05/11/116723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>