??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲视频国产精品,亚洲精品无码久久久久APP,久久亚洲免费视频http://www.tkk7.com/zhip/category/22826.html&nbsp;&nbsp;&nbsp;&nbsp;冬去春来<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp<strong><font style="FONT-SIZE: 9pt; FILTER: shadow(color=#cccccc); COLOR: #0060f0; HEIGHT: 1px">郑重声明Q本BlogU属个h学习、工作需要,记录相关资料。请不要发表M有hw攻ȝa论,谢谢Q!</font><a target='_blank'>www.zhipsoft.cn</a> <a target='_blank'>tryang.zhipsoft.cn</a> <a target="_blank">yang.zhipsoft.cn</a></strong>zh-cnTue, 01 Sep 2009 06:24:18 GMTTue, 01 Sep 2009 06:24:18 GMT60oracle SQL性能优化http://www.tkk7.com/zhip/archive/2009/09/01/293411.htmlzhipzhipTue, 01 Sep 2009 02:36:00 GMThttp://www.tkk7.com/zhip/archive/2009/09/01/293411.htmlhttp://www.tkk7.com/zhip/comments/293411.htmlhttp://www.tkk7.com/zhip/archive/2009/09/01/293411.html#Feedback0http://www.tkk7.com/zhip/comments/commentRss/293411.htmlhttp://www.tkk7.com/zhip/services/trackbacks/293411.htmlQ?Q?nbsp;     选择最有效率的表名序(只在Z规则的优化器中有?Q?/font> ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名QFROM子句中写在最后的?基础?driving table)被最先处理,在FROM子句中包含多个表的情况下,你必选择记录条数最的表作为基表。如果有3个以上的表连接查? 那就需要选择交叉?intersection table)作ؓ基础? 交叉表是指那个被其他表所引用的表.
Q?Q?nbsp;     WHERE子句中的q接序Q: ORACLE采用自下而上的顺序解析WHERE子句,Ҏ(gu)q个原理,表之间的q接必须写在其他WHERE条g之前, 那些可以qo掉最大数量记录的条g必须写在WHERE子句的末?
Q?Q?nbsp;     SELECT子句中避免?‘ * ‘Q?/font> ORACLE在解析的q程? 会将'*' 依次转换成所有的列名, q个工作是通过查询数据字典完成? q意味着耗费更多的时?br /> Q?Q?nbsp;     减少讉K数据库的ơ数Q?/font> ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, l定变量 , L据块{;
Q?Q?nbsp;     在SQL*Plus , SQL*Forms和Pro*C中重新设|ARRAYSIZE参数, 可以增加每次数据库访问的索数据量 ,gؓ200
Q?Q?nbsp;     使用DECODE函数来减处理时_使用DECODE函数可以避免重复扫描相同记录或重复连接相同的? Q?Q?nbsp;     整合?无关联的数据库访问:如果你有几个单的数据库查询语?你可以把它们整合C个查询中(即它们之间没有关系)
Q?Q?nbsp;     删除重复记录Q?/font>最高效的删除重复记录方?( 因ؓ使用了ROWID)例子Q?DELETE  FROM  EMP E  WHERE  E.ROWID > (SELECT MIN(X.ROWID)
FROM  EMP X  WHERE  X.EMP_NO = E.EMP_NO);
Q?Q?nbsp;     用TRUNCATE替代DELETEQ?/font>当删除表中的记录?在通常情况? 回滚D?rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状?准确地说是恢复到执行删除命o之前的状? 而当q用TRUNCATE? 回滚D不再存放Q何可被恢复的信息.当命令运行后,数据不能被恢?因此很少的资源被调用,执行旉也会很短. (译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)
Q?0Q?nbsp;量多用COMMITQ?/font>只要有可?在程序中量多用COMMIT, q样E序的性能得到提高,需求也会因为COMMIT所释放的资源而减?
COMMIT所释放的资?
a. 回滚D上用于恢复数据的信?
b. 被程序语句获得的?
c. redo log buffer 中的I间
d. ORACLE为管理上q?U资源中的内部花?br /> Q?1Q?nbsp;用Where子句替换HAVING子句Q避免用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集q行qo. q个处理需要排?总计{操? 如果能通过WHERE子句限制记录的数?那就能减这斚w的开销. (非oracle?on、where、havingq三个都可以加条件的子句中,on是最先执行,whereơ之Qhaving最后,因ؓon是先把不W合条g的记录过滤后才进行统计,它就可以减少中间q算要处理的数据Q按理说应该速度是最快的Qwhere也应该比having快点的,因ؓ它过滤数据后才进行sumQ在两个表联接时才用on的,所以在一个表的时候,剩下where跟having比较了。在q单表查询统计的情况下,如果要过滤的条g没有涉及到要计算字段Q那它们的结果是一LQ只是where可以使用rushmore技术,而having׃能,在速度上后者要慢如果要涉及到计的字段Q就表示在没计算之前Q这个字D늚值是不确定的Q根据上写的工作流E,where的作用时间是在计之前就完成的,而having是在计后才v作用的,所以在q种情况下,两者的l果会不同。在多表联接查询Ӟon比where更早起作用。系l首先根据各个表之间的联接条Ӟ把多个表合成一个时表后,再由whereq行qoQ然后再计算Q计完后再由havingq行qo。由此可见,要想qo条g起到正确的作用,首先要明白这个条件应该在什么时候v作用Q然后再军_攑֜那里
Q?2Q?nbsp;减少对表的查?/font>Q在含有子查询的SQL语句?要特别注意减对表的查询.例子Q?     SELECT  TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = ( SELECT TAB_NAME,DB_VER FROM  TAB_COLUMNS  WHERE  VERSION = 604)
Q?3Q?nbsp;通过内部函数提高SQL效率.Q?/font>复杂的SQL往往牺牲了执行效? 能够掌握上面的运用函数解决问题的Ҏ(gu)在实际工作中是非常有意义?br /> Q?4Q?nbsp;使用表的别名(Alias)Q?/font>当在SQL语句中连接多个表? 请用表的别名ƈ把别名前~于每个Column?q样一?可以减解析的旉q减那些由Column歧义引v的语法错?
Q?5Q?nbsp;用EXISTS替代IN、用NOT EXISTS替代NOT INQ?/font>在许多基于基表的查询?Z满一个条?往往需要对另一个表q行联接.在这U情况下, 使用EXISTS(或NOT EXISTS)通常提高查询的效率. 在子查询?NOT IN子句执行一个内部的排序和合q? 无论在哪U情况下,NOT IN都是最低效?(因ؓ它对子查询中的表执行了一个全表遍?. Z避免使用NOT IN ,我们可以把它改写成外q接(Outer Joins)或NOT EXISTS. 例子Q(高效QSELECT * FROM  EMP (基础?  WHERE  EMPNO > 0  AND  EXISTS (SELECT ‘X'  FROM DEPT  WHERE  DEPT.DEPTNO = EMP.DEPTNO  AND  LOC = ‘MELB') (低效)SELECT  * FROM  EMP (基础?  WHERE  EMPNO > 0  AND  DEPTNO IN(SELECT DEPTNO  FROM  DEPT  WHERE  LOC = ‘MELB')
Q?6Q?nbsp;识别'低效执行'的SQL语句Q?/font>虽然目前各种关于SQL优化的图形化工具层出不穷,但是写出自己的SQL工具来解决问题始l是一个最好的Ҏ(gu)Q?SELECT  EXECUTIONS , DISK_READS, BUFFER_GETS,
ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio,
ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,
SQL_TEXT
FROM  V$SQLAREA
WHERE  EXECUTIONS>0
AND  BUFFER_GETS > 0
AND  (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8
ORDER BY  4 DESC;
Q?7Q?nbsp;用烦引提高效?/font>Q烦引是表的一个概念部?用来提高索数据的效率QORACLE使用了一个复杂的自^衡B-treel构. 通常,通过索引查询数据比全表扫描要? 当ORACLE扑և执行查询和Update语句的最佌\径时, ORACLE优化器将使用索引. 同样在联l多个表时用烦引也可以提高效率. 另一个用烦引的好处?它提供了主键(primary key)的唯一性验?。那些LONG或LONG RAW数据cd, 你可以烦引几乎所有的? 通常, 在大型表中用烦引特别有? 当然,你也会发? 在扫描小表时,使用索引同样能提高效? 虽然使用索引能得到查询效率的提高,但是我们也必L意到它的代h(hun). 索引需要空间来存储,也需要定期维? 每当有记录在表中增减或烦引列被修Ҏ(gu), 索引本n也会被修? q意味着每条记录的INSERT , DELETE , UPDATEؓ此多付出4 , 5 ơ的盘I(y)/O . 因ؓ索引需要额外的存储I间和处?那些不必要的索引反而会使查询反应时间变?。定期的重构索引是有必要?Q?ALTER  INDEX <INDEXNAME> REBUILD <TABLESPACENAME>
Q?8Q?nbsp;用EXISTS替换DISTINCTQ当提交一个包含一对多表信?比如部门表和雇员?的查询时,避免在SELECT子句中用DISTINCT. 一般可以考虑用EXIST替换, EXISTS 使查询更?因ؓRDBMS核心模块在子查询的条g一旦满_,立刻q回l果. 例子Q?       (低效):
SELECT  DISTINCT  DEPT_NO,DEPT_NAME  FROM  DEPT D , EMP E WHERE  D.DEPT_NO = E.DEPT_NO
(高效):
SELECT  DEPT_NO,DEPT_NAME  FROM  DEPT D  WHERE  EXISTS ( SELECT ‘X'
FROM  EMP E  WHERE E.DEPT_NO = D.DEPT_NO);
Q?9Q?nbsp;sql语句用大写的Q?/font>因ؓoracleL先解析sql语句Q把写的字母{换成大写的再执行
Q?0Q?nbsp;在java代码中尽量少用连接符“Q?#8221;q接字符Ԍ
Q?1Q?nbsp;避免在烦引列上用NOT 通常Q 我们要避免在索引列上使用NOT, NOT会生在和在索引列上使用函数相同的媄? 当ORACLE”遇到”NOT,他就会停止用烦引{而执行全表扫?
Q?2Q?nbsp;避免在烦引列上用计.
WHERE子句中,如果索引列是函数的一部分Q优化器不使用索引而用全表扫描.
举例:
低效Q?
SELECT … FROM  DEPT  WHERE SAL * 12 > 25000;
高效:
SELECT … FROM DEPT WHERE SAL > 25000/12;
Q?3Q?nbsp;?gt;=替代> 高效:
SELECT * FROM  EMP  WHERE  DEPTNO >=4
低效:
SELECT * FROM EMP WHERE DEPTNO >3
两者的区别在于, 前者DBMS直接蟩到第一个DEPT{于4的记录而后者将首先定位到DEPTNO=3的记录ƈ且向前扫描到W一个DEPT大于3的记?
Q?4Q?font color="#f70909"> 用UNION替换OR
(适用于烦引列) 通常情况? 用UNION替换WHERE子句中的OR会起到较好的效? 对烦引列使用OR造成全表扫描. 注意, 以上规则只针对多个烦引列有效. 如果有column没有被烦? 查询效率可能会因Z没有选择OR而降? 在下面的例子? LOC_ID 和REGION上都建有索引.
高效:
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE LOC_ID = 10
UNION
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE REGION = “MELBOURNE”
低效:
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE LOC_ID = 10 OR REGION = “MELBOURNE”
如果你坚持要用OR, 那就需要返回记录最的索引列写在最前面.
Q?5Q?nbsp;用IN来替换OR   q是一条简单易记的规则Q但是实际的执行效果q须验,在ORACLE8i下,两者的执行路径g是相同的Q 低效:
SELECT…. FROM LOCATION WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30
高效
SELECT… FROM LOCATION WHERE LOC_IN  IN (10,20,30);
Q?6Q?font color="#ff0000"> 避免在烦引列上用IS NULL和IS NOT NULL 避免在烦引中使用M可以为空的列QORACLE无法用该索引Q对于单列烦引,如果列包含空|索引中将不存在此记录. 对于复合索引Q如果每个列都ؓI,索引中同样不存在此记? 如果臛_有一个列不ؓI,则记录存在于索引中.举例: 如果唯一性烦引徏立在表的A列和B列上, q且表中存在一条记录的A,Bgؓ(123,null) , ORACLE不接受下一条具有相同A,B|123,nullQ的记录(插入). 然而如果所有的索引列都为空QORACLE认为整个键gؓI空不等于空. 因此你可以插?000 条具有相同键值的记录,当然它们都是I? 因ؓIg存在于烦引列?所以WHERE子句中对索引列进行空值比较将使ORACLE停用该烦? 低效: (索引失效)
SELECT … FROM  DEPARTMENT  WHERE  DEPT_CODE IS NOT NULL;
高效: (索引有效)
SELECT … FROM  DEPARTMENT  WHERE  DEPT_CODE >=0;
Q?7Q?nbsp;L使用索引的第一个列Q如果烦引是建立在多个列? 只有在它的第一个列(leading column)被where子句引用?优化器才会选择使用该烦? q也是一条简单而重要的规则Q当仅引用烦引的W二个列?优化器用了全表扫描而忽略了索引
Q?8Q?nbsp;用UNION-ALL 替换UNION ( 如果有可能的?Q当SQL语句需要UNION两个查询l果集合?q两个结果集合会以UNION-ALL的方式被合ƈ, 然后在输出最l结果前q行排序. 如果用UNION ALL替代UNION, q样排序׃是必要了. 效率׃因此得到提高. 需要注意的是,UNION ALL 重复输Z个结果集合中相同记录. 因此各位q是要从业务需求分析用UNION ALL的可行? UNION 对l果集合排序,q个操作会用到SORT_AREA_SIZEq块内存. 对于q块内存的优化也是相当重要的. 下面的SQL可以用来查询排序的消耗量低效Q?
SELECT  ACCT_NUM, BALANCE_AMT
FROM  DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
UNION
SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
高效:
SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
UNION ALL
SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
Q?9Q?/font> 用WHERE替代ORDER BYQ?ORDER BY 子句只在两种严格的条件下使用索引.
ORDER BY中所有的列必d含在相同的烦引中q保持在索引中的排列序.
ORDER BY中所有的列必d义ؓ非空.
WHERE子句使用的烦引和ORDER BY子句中所使用的烦引不能ƈ? 例如:
表DEPT包含以下?
DEPT_CODE PK NOT NULL
DEPT_DESC NOT NULL
DEPT_TYPE NULL 低效: (索引不被使用)
SELECT DEPT_CODE FROM  DEPT  ORDER BY  DEPT_TYPE
高效: (使用索引)
SELECT DEPT_CODE  FROM  DEPT  WHERE  DEPT_TYPE > 0
Q?0Q?/font> 避免改变索引列的cd.: 当比较不同数据类型的数据? ORACLE自动对列q行单的cd转换. 假设 EMPNO是一个数值类型的索引?
SELECT …  FROM EMP  WHERE  EMPNO = ‘123'
实际?l过ORACLEcd转换, 语句转化?
SELECT …  FROM EMP  WHERE  EMPNO = TO_NUMBER(‘123')
q运的是,cd转换没有发生在烦引列?索引的用途没有被改变.
现在,假设EMP_TYPE是一个字W类型的索引?
SELECT …  FROM EMP  WHERE EMP_TYPE = 123
q个语句被ORACLE转换?
SELECT …  FROM EMP  WHERETO_NUMBER(EMP_TYPE)=123
因ؓ内部发生的类型{? q个索引不会被用到! Z避免ORACLE对你的SQLq行隐式的类型{? 最好把cd转换用显式表现出? 注意当字W和数值比较时, ORACLE会优先{换数值类型到字符cd
Q?1Q?/font> 需要当心的WHERE子句: 某些SELECT 语句中的WHERE子句不用烦? q里有一些例?
在下面的例子? (1)‘!=' 不使用索引. C, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表? (2) ‘||'是字W连接函? p其他函数那样, 停用了烦? (3) ‘+'是数学函? p其他数学函数那样, 停用了烦? (4)相同的烦引列不能互相比较,q将会启用全表扫?
Q?2Q?nbsp;a. 如果索数据量过30%的表中记录数.使用索引没有显著的效率提高.
b. 在特定情况下, 使用索引也许会比全表扫描? 但这是同一个数量上的区别. 而通常情况?使用索引比全表扫描要块几倍乃臛_千?
Q?3Q?nbsp;避免使用耗费资源的操? 带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎
执行耗费资源的排?SORT)功能. DISTINCT需要一ơ排序操? 而其他的臛_需要执行两ơ排? 通常, 带有UNION, MINUS , INTERSECT的SQL语句都可以用其他方式重写. 如果你的数据库的SORT_AREA_SIZE调配得好, 使用UNION , MINUS, INTERSECT也是可以考虑? 毕竟它们的可L很?br /> Q?4Q?nbsp;优化GROUP BY: 提高GROUP BY 语句的效? 可以通过不需要的记录在GROUP BY 之前qo?下面两个查询q回相同l果但第二个明显快了许? 低效:
SELECT JOB , AVG(SAL)
FROM EMP
GROUP JOB
HAVING JOB = ‘PRESIDENT'
OR JOB = ‘MANAGER'
高效:
SELECT JOB , AVG(SAL)
FROM EMP
WHERE JOB = ‘PRESIDENT'
OR JOB = ‘MANAGER'
GROUP JOB 

zhip 2009-09-01 10:36 发表评论
]]>
修改Oracle最大远E链接数的方?/title><link>http://www.tkk7.com/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.tkk7.com/zhip/archive/2009/03/18/260580.html</guid><wfw:comment>http://www.tkk7.com/zhip/comments/260580.html</wfw:comment><comments>http://www.tkk7.com/zhip/archive/2009/03/18/260580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zhip/comments/commentRss/260580.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zhip/services/trackbacks/260580.html</trackback:ping><description><![CDATA[<p>1、以sysdbaw䆾登陆PL/SQL 或?Worksheet<br /> 2、查询目前链接数<br />       show parameter open_links;<br /> 3、更攚w接数<br />       alter system set open_links=30 scope=spfile;<br /> 4、重启Oracle服务或重启Oracle服务?/p> <p> </p> <img src ="http://www.tkk7.com/zhip/aggbug/260580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zhip/" target="_blank">zhip</a> 2009-03-18 20:14 <a href="http://www.tkk7.com/zhip/archive/2009/03/18/260580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 10g 在window 下的安装手记Q附?图)http://www.tkk7.com/zhip/archive/2008/05/20/201566.htmlzhipzhipTue, 20 May 2008 01:24:00 GMThttp://www.tkk7.com/zhip/archive/2008/05/20/201566.htmlhttp://www.tkk7.com/zhip/comments/201566.htmlhttp://www.tkk7.com/zhip/archive/2008/05/20/201566.html#Feedback0http://www.tkk7.com/zhip/comments/commentRss/201566.htmlhttp://www.tkk7.com/zhip/services/trackbacks/201566.htmlQ详见附Ӟ

Oracle 10g ?/span>window 下的安装

1.数据库概q?/span>

Oracle 应用服务?/span> 10g 是集成的、基于标准的软gq_Q?/span>Oracle Application Server 10g Oracle9i Application Server (Oracle9iAS) Release 2.0 version 9.0.2 ?/span> version 9.0.3 之后的最新版?/span> Oracle 应用服务器?/span>

2.安装cd

安装cd

说明

企业?/span>

安装许可的数据库部gQ包括除了标准版的所有部件外的附加选gQ如数据库配|,理工作Q数据仓库,事务处理{?/span>

标准?/span>

安装一l管理工作,分布Q复ӞWeb功能及商业就?/span>

个h?/span>

安装与标准版cM的部Ӟ但只允许单用户用。此外,不包括真实的应用集群QRQE Q等.

定制

允许选择需要的独立部gQ满专门应用要求?/span>

3.g要求

Oracle 10G 32位在window 环境下对g的要?/span>

g要求

说明

物理内存

最ؓ256MB Q徏?/span>512Q以上

虚拟内存

物理内存的两?/span>

盘I间

基本安装需?/span>2.04GB

视频适配?/span>

256?/span>

处理器主?/span>

550MHz以上

4.软g要求

Oracle 10G 32位在window 环境下对软g的要?/span>

软g要求

说明

处理?/span>

Intel(x86) AMD64 ?/span>Intel EM64T

操作pȝ

Windows 2000 sp1 或更高版?/span>

Windows 2003

Windows 专业?/span>

Windows 不支?/span>

|络协议

支持TCP/IP,?/span>SSL?/span>TCP/IP及命名管?/span>

5.数据库安?/span>

插入光盘后如果安装程序没有自动启动,双击光盘中的setup.exe 文g图标卛_启动安装E序(如下?/span>)

基本安装是用于常规的数据安装Ҏ(gu)?/span>

全局数据库名Q是用于标识数据库的名称?/span>

数据库口令:数据库管理员(sysQ?/span>systemQ?/span>sysman)的口令(不能为空Q?/span>

高安装用于特定数据库的安装?/span>

选择高安装Q点M一?/span>

在选择了安装方?/span>(高安装)之后点击下一步,q入选择数据库安装类型界面(如图Q?/span>


选择了数据库的安装类型之后,下一步(如图Q指?/span>Oracle 目录信息

名称是用于安装完数据库之后在开始菜单程序中昄的名U。\径是用于保存数据库的路径Q徏议默认)下一?/span>

开始数据库安装条g的查询,当检查完成之后点M一步(旉较长Q?/span>

创徏数据库是在安装完数据库Y件之后就自动开始创建数据库。仅安装数据库,是仅安装数据实例q不创徏数据库(在安装完之后再进行创建数据库Q。选择创徏数据库,点击下一?/span>(如图)

Ҏ(gu)数据库的使用情况选择数据库的配置Qƈ下一步(如图Q?/span>

输入数据库名?/span>SID?/span>

字符集选择框是用于讄数据库存储的数据以哪U字W集存储数据Q徏议(体中文)Q否则在特定情况下,d到的数据会出Cؕ码。l点M一步(如图Q?/span>

下一?/span>(如图)

用于讄数据库文件的存储位置.下一步(如图Q?/span>

下一?/span>

输入数据库方案的口o(不能为空)Q下一?/span>(如图)

点击安装Q开始安装数据库

q一步可以需要较长时_直到提示安装l束?/span>


6.客户端配|连接数据库

安装Oracle 客户?/span>(?/span>,参照数据库安?/span>)?/span>

选择 Oracle |络配置工具 Net Configuration Assistant

启动Net Configuration Assistant 如下?/span>

选择本地Net 服务名配|,下一?/span>

选择dQ下一?/span>

输入服务?/span>Oracle ?/span>SID,

下一?/span>

选择|络q接方式Q徏议选择TCP,下一?/span>

填写数据库的QP地址Q如果在安装数据库时未改变数据库的端口,则选择使用标准商品P如果改变了,请选择使用另一个端口号,q填写端口号

下一?/span>.

选择是,q行试Q然后下一?/span>

如果提示试成功Q如果未试成功Q请查看前面的配|信息是否有误,下一?/span>

输入本地的服务名Q下一?/span>

下一?/span>

配置完成?/span>



zhip 2008-05-20 09:24 发表评论
]]>
Oracle数据库操作模式改为共享服务器模式--调整ORACLE内存讄--修改Oracle最大连接数(附g-?http://www.tkk7.com/zhip/archive/2008/05/20/201554.htmlzhipzhipTue, 20 May 2008 01:02:00 GMThttp://www.tkk7.com/zhip/archive/2008/05/20/201554.htmlhttp://www.tkk7.com/zhip/comments/201554.htmlhttp://www.tkk7.com/zhip/archive/2008/05/20/201554.html#Feedback0http://www.tkk7.com/zhip/comments/commentRss/201554.htmlhttp://www.tkk7.com/zhip/services/trackbacks/201554.html   Q详见附?-下蝲Q?/strong>

一?span style="font: 7pt 'Times New Roman'">    数据库操作模式改ؓ׃n服务器模?/span>

注:?/span>Oracle数据库服务器本机操作?/span>

1?nbsp;点击开始,从程序菜单选择“Database Configuration Assistant”Q如下图所C?/span>

2?nbsp;q入“Ƣ迎使用”界面后,点击“下一?#8221;Q如下图所C?/span>

3?nbsp;q入“步骤1Q共4步)Q操?#8221;界面后,选择“在数据库中配|数据库选项”Q点?#8220;下一?#8221;Q如下图所C?/span>

4?nbsp;q入“步骤2Q共4步)Q数据库”界面后,选择可用数据库(本机Oracle数据库服务名Q,点击“下一?#8221;Q如下图所C?/span>

5?nbsp;q入“步骤3Q共4步)Q数据库Ҏ(gu)?#8221;界面后,点击“下一?#8221;Q如下图所C?/span>

6?nbsp;q入“步骤4Q共4步)Q数据库q接选项”界面后,选择“׃n服务器模?#8221;Q点?#8220;~辑׃nq接参数”Q如下图所C?/span>

7?nbsp;q入“׃n服务器模?#8221;界面后,协议选择?/span>TCPQ调度程序数讄?/span>5Q每个调度程序的最大连接数讄?/span>100Q最大调度程序数讄?/span>5Q最大服务器q程数设|ؓ600Q点?#8220;定”Q如下图所C?/span>

8?nbsp;q回?#8220;步骤4Q共4步)Q数据库q接选项”界面后,点击“完成”Q如下图所C?/span>

9?nbsp;pȝ弹出“重新启动数据?#8221;提示Q点?#8220;?#8221;Q如下图所C?/span>

10?span style="font: 7pt 'Times New Roman'">              q入“概要”界面后,点击“定”Q数据库配置正在q行如下图所C?/span>

11?span style="font: 7pt 'Times New Roman'">              pȝ弹出“数据库配|已成功完成。是否要执行其他操作Q?#8221;提示Q点?#8220;?#8221;Q如下图所C?/span>

12?span style="font: 7pt 'Times New Roman'">              数据库操作模式改为共享服务器模式已完成!

二?span style="font: 7pt 'Times New Roman'">    调整ORACLE内存讄

1?nbsp;点击开始,从程序菜单选择“Enterprise Manager Console”Q如下图所C?/span>

2?nbsp;q入“d”界面后,选择“独立启动”Q点?#8220;定”Q如下图所C?/span>

3?nbsp;q入“独立”界面后,选择需要调整内存的数据库,q双击,如下图所C?/span>

4?nbsp;q入“数据库连接信?#8221;界面后,输入用户名、口令、选择q接w䆾?#8220;SYSDBA”Q点?#8220;定”Q如下图所C?/span>

5?nbsp;双击打开“例程”Q点?#8220;配置”Q再选择界面右侧?#8220;内存”选项卡,?/span>SGA中的“SGA的最大大?#8221;改ؓ512Q?/span>PGA中的“总计PGA目标”改ؓ128Q点?#8220;应用”Q如下图所C?/span>

6?nbsp;q入“关闭选项”界面后,选择“立即”Q点?#8220;定”Q如下图所C?/span>

7?nbsp;pȝ正在关闭数据库等相关操作Q处理完成后提示“处理已完?#8221;Q点?#8220;关闭”Q如下图所C?/span>

8?nbsp;?/span>SGA中的“׃n?#8221;改ؓ256Q?#8220;~冲区高速缓?#8221;改ؓ48Q大型池改ؓ128Q?#8220;Java?#8221;改ؓ64Q再ơ点?#8220;应用”Q如下图所C?/span>

9?nbsp;q入“关闭选项”界面后,选择“立即”Q点?#8220;定”Q如下图所C?/span>

10?span style="font: 7pt 'Times New Roman'">              pȝ正在关闭数据库等相关操作Q处理完成后提示“处理已完?#8221;Q点?#8220;关闭”Q如下图所C?/span>

11?span style="font: 7pt 'Times New Roman'">              Oracle内存讄调整完毕Q?/span>

三?span style="font: 7pt 'Times New Roman'">    修改Oracle最大连接数的方?/span>

1?nbsp;q入“SQL*Plus Worksheet”Q如下图所C?/span>

2?nbsp;点击“改变数据库连?/span>…”按钮Q如下图所C?/span>

3?nbsp;q入“数据库连接信?#8221;界面Q输入用户名、口令、需要修Ҏ(gu)大连接数的数据库服务名,q接w䆾选择“SYSDBA”Q点?#8220;定”Q如下图所C?/span>

4?nbsp;输入指o“show parameter processes;”q执行,查看目前最大连接数Q如下图所C?/span>

5?nbsp;输入指o“alter system set processes=600 scope=spfile;”q执行,修改最大连接数?/span>600Q如下图所C?/span>

6?nbsp;输入指o“create pfile from spfile;”q执行,创徏ProfileQ如下图所C?/span>

7?nbsp;关闭“Enterprise Manager Console”Q重?/span>Oracle服务或重?/span>Oracle数据库服务器

8?nbsp;重复操作1?/span>2?/span>3?/span>4步,认最大连接数修改成功?/span>



zhip 2008-05-20 09:02 发表评论
]]>
修改Oracle最大连接数http://www.tkk7.com/zhip/archive/2008/05/16/200769.htmlzhipzhipFri, 16 May 2008 00:46:00 GMThttp://www.tkk7.com/zhip/archive/2008/05/16/200769.htmlhttp://www.tkk7.com/zhip/comments/200769.htmlhttp://www.tkk7.com/zhip/archive/2008/05/16/200769.html#Feedback3http://www.tkk7.com/zhip/comments/commentRss/200769.htmlhttp://www.tkk7.com/zhip/services/trackbacks/200769.html1、修改Oracle最大连接数的方?br />   
   a、以sysdbaw䆾登陆PL/SQL 或?Worksheet
   b、查询目前连接数
      show parameter processes;
   c、更改系l连接数
      alter system set processes=1000 scope=spfile;
   d、创建pfile
      create pfile from spfile;
   e、重启Oracle服务或重启Oracle服务?/p>

2、查询Oracle游标使用情况的方?br />    select * from v$open_cursor where user_name = 'TRAFFIC'Q?br /> 3、查询Oracle会话的方?br />    select * from v$session



zhip 2008-05-16 08:46 发表评论
]]>
java.lang.Exception: 数据查询错误:ORA-01000: maximum open cursors exceededhttp://www.tkk7.com/zhip/archive/2007/07/31/133577.htmlzhipzhipTue, 31 Jul 2007 07:12:00 GMThttp://www.tkk7.com/zhip/archive/2007/07/31/133577.htmlhttp://www.tkk7.com/zhip/comments/133577.htmlhttp://www.tkk7.com/zhip/archive/2007/07/31/133577.html#Feedback0http://www.tkk7.com/zhip/comments/commentRss/133577.htmlhttp://www.tkk7.com/zhip/services/trackbacks/133577.html在java应用?我们会经常用oracle jdbc.在开发中我们有时候会遇到(ORA-01000: maximum open cursors

exceeded)的错误。在ITPUB上juant曑֏q一帖?http://www.itpub.net/showthread.php?

s=&threadid=122832&perpage=15&pagenumber=1

[TIP]关于Java开发中使用Oracle数据库的一Ҏ(gu)意事(原创Q?

很多朋友在Java开发中Q用Oracle数据库的时候,l常会碰到有ORA-01000: maximum open cursors exceeded.?/p>

错误?

实际上,q个错误的原因,主要q是代码问题引v的?
ora-01000: maximum open cursors exceeded.
表示已经辑ֈ一个进E打开的最大游标数?

q样的错误很Ҏ(gu)出现在Java代码中的主要原因是:Java代码在执行conn.createStatement()?/p>

conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是Q如果你?/p>

createStatement和prepareStatement是在一个@环里面的话,׃非常Ҏ(gu)出现q个问题。因为游标一直在不停的打

开Q而且没有关闭?

一般来_我们在写Java代码的时候,createStatement和prepareStatement都应该要攑֜循环外面Q而且使用了这?/p>

Statment后,及时关闭。最好是在执行了一ơexecuteQuery、executeUpdate{之后,如果不需要用结果集

QResultSetQ的数据Q就马上Statment关闭?

对于出现ORA-01000错误q种情况Q单U的加大open_cursorsq不是好办法Q那只是L不治本。实际上Q代码中的隐

(zhn)ƈ没有解除?
而且Q绝大部分情况下Qopen_cursors只需要设|一个比较小的|p够用了Q除非有非常特别的要求?/p>

 

对这个问题专门研I了一下,q写了测试程序,首先说一些测试环境,我们的数据库最大可打开的cursor讄?00Q操

作的数据库表的记录数?0条记录。ؓ了模拟同时打开600cursorQ也是说有600个statement在运行,必须用到java

的多U程。下面是试E序Q?/p>

public class StatementTest extends Thread{
  private Connection conn;
  public StatementTest(Connection conn) {
    this.conn = conn;
    start();
  }
 
  public void run(){
      try {
   String strSQL = "SELECT * FROM  TestTable"
   Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery(strSQL);
   int i = 0;
   while(rs.next()){
      System.out.println("----"+i+"------");
      i = i+1;
   }
   rs.close();
        stmt.close();  
  
 } catch (Exception e) {
   // TODO: handle exception
   e.printStackTrace();
 }
 
  }


  public static void main(String args[]){
    try{
      Connection conn = DBConnection.getConnection();
     
      for(int i = 0;i < 800;i++){
    
       new StatementTest(conn);
      }
     }catch(Exception e){
 e.printStackTrace();
     }      

  }
 
}



zhip 2007-07-31 15:12 发表评论
]]>
[转]Mysql 百万U数据优化资?/title><link>http://www.tkk7.com/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.tkk7.com/zhip/archive/2007/05/27/120325.html</guid><wfw:comment>http://www.tkk7.com/zhip/comments/120325.html</wfw:comment><comments>http://www.tkk7.com/zhip/archive/2007/05/27/120325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zhip/comments/commentRss/120325.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zhip/services/trackbacks/120325.html</trackback:ping><description><![CDATA[<p>一、我们可以且应该优化什么? <p>g <p>操作pȝ/软g? <p>SQL服务?讄和查? <p>应用~程接口(API) <p>应用E序 <p>-------------------------------------------------------------------------------- <p>二、优化硬? <p>如果你需要庞大的数据库表(>2G)Q你应该考虑使用64位的gl构Q像Alpha、Sparc或即推出的IA64。因为MySQL内部使用大量64位的整数Q?4位的CPU提供更好的性能? <p>对大数据库,优化的次序一般是RAM、快速硬盘、CPU能力? <p>更多的内存通过最常用的键码页面存攑֜内存中可以加速键码的更新? <p>如果不用事务安?transaction-safe)的表或有大表q且想避免长文g查,一台UPSp够在甉|故障时让pȝ安全关闭? <p>对于数据库存攑֜一个专用服务器的系l,应该考虑1G的以太网。gq与吞吐量同样重要? <p>-------------------------------------------------------------------------------- <p>三、优化磁? <p>为系l、程序和临时文g配备一个专用磁盘,如果是q行很多修改工作Q将更新日志和事务日志放在专用磁盘上?br>低寻道时间对数据库磁盘非帔R要。对与大表,你可以估计你需要log(行数)/log(索引块长?3*2/(键码长度 + 数据指针长度))+1ơ寻到才能找C行。对于有500000行的表,索引Mediun intcd的列Q需要log(500000) / log(1024/3*2/(3 + 2))+1=4ơ寻道。上q烦引需?00000*7*3/2=5.2M的空间。实际上Q大多数块将被缓存,所以大概只需?-2ơ寻道?br>然而对于写入(如上Q,你将需?ơ寻道请求来扑ֈ在哪里存放新键码Q而且一般要2ơ寻道来更新索引q写入一行?br>对于非常大的数据库,你的应用受到磁盘寻道速度的限Ӟ随着数据量的增加呈N log N数据U递增?br>数据库和表分在不同的磁盘上。在MySQL中,你可以ؓ此而用符号链接?br>条列盘(RAID 0)提高读和写的吞吐量?br>带镜像的条列(RAID 0+1)更安全q提高读取的吞吐量。写入的吞吐量将有所降低?br>不要对时文件或可以很容易地重徏的数据所在的盘使用镜像或RAID(除了RAID 0)?br>在Linux上,在引导时对磁盘用命令hdparm -m16 -d1以启用同时读写多个扇区和DMA功能。这可以响应时间提?~50%?br>在Linux上,用async (默认)和noatime挂蝲盘(mount)?br>对于某些特定应用Q可以对某些特定表用内存磁盘,但通常不需要? <p>-------------------------------------------------------------------------------- <p>四、优化操作系l? <p>不要交换区。如果内存不I增加更多的内存或配置你的pȝ使用较少内存?br>不要使用NFS盘(会有NFS锁定的问??br>增加pȝ和MySQL服务器的打开文g数量?在safe_mysqld脚本中加入ulimit -n #)?br>增加pȝ的进E和U程数量?br>如果你有相对较少的大表,告诉文gpȝ不要文件打在不同的磁道上(Solaris)?br>使用支持大文件的文gpȝ(Solaris)?br>选择使用哪种文gpȝ。在Linux上的Reiserfs对于打开、读写都非常快。文件检查只需几秒U? <p>-------------------------------------------------------------------------------- <p>五、选择应用~程接口 <p>PERL<br>可在不同的操作系l和数据库之间移植?br>适宜快速原型?br>应该使用DBI/DBD接口?br>PHP<br>比PERL易学?br>使用比PERL的资源?br>通过升到PHP4可以获得更快的速度?br>C<br>MySQL的原生接口?br>较快q赋予更多的控制?br>低层Q所以必M出更多?br>C++<br>较高层次Q给你更多的旉来编写应用?br>仍在开发中<br>ODBC<br>q行在Windows和Unix上?br>几乎可在不同的SQL服务器间UL?br>较慢。MyODBC只是单的直通驱动程序,比用原生接口?9%?br>有很多方法做同样的事。很隑փ很多ODBC驱动E序那样q行Q在不同的领域还有不同的错误?br>问题成堆。Microsoft偶尔q会改变接口?br>不明朗的未来?Microsoft更推崇OLE而非ODBC)<br>ODBC<br>q行在Windows和Unix上?br>几乎可在不同的SQL服务器间UL?br>较慢。MyODBC只是单的直通驱动程序,比用原生接口?9%?br>有很多方法做同样的事。很隑փ很多ODBC驱动E序那样q行Q在不同的领域还有不同的错误?br>问题成堆。Microsoft偶尔q会改变接口?br>不明朗的未来?Microsoft更推崇OLE而非ODBC)<br>JDBC<br>理论上可在不同的操作pȝ何时据库间移植?br>可以q行在web客户端?br>Python和其?br>可能不错Q可我们不用它们? <p>-------------------------------------------------------------------------------- <p>六、优化应? <p>应该集中_֊解决问题?br>在编写应用时Q应该决定什么是最重要的:<br>速度<br>操作pȝ间的可移植?br>SQL服务器间的可UL?br>使用持箋的连接?<br>~存应用中的数据以减SQL服务器的负蝲?br>不要查询应用中不需要的列?br>不要使用SELECT * FROM table_name...<br>试应用的所有部分,但将大部分精力放在在可能最坏的合理的负载下的测试整体应用。通过以一U模块化的方式进行,你应该能用一个快?#8220;哑模?#8221;替代扑ֈ的瓶颈,然后很容易地标出下一个瓶颈?br>如果在一个批处理中进行大量修改,使用LOCK TABLES。例如将多个UPDATES或DELETES集中在一赗? <p>-------------------------------------------------------------------------------- <p>七、应该用可UL的应? <p>Perl DBI/DBD<br>ODBC<br>JDBC<br>Python(或其他有普遍SQL接口的语a)<br>你应该只使用存在于所有目的SQL服务器中或可以很Ҏ(gu)地用其他构造模拟的SQL构造。www.mysql.com上的Crash-me可以帮助你?br>为操作系l?SQL服务器编写包装程序来提供~少的功能? <p>-------------------------------------------------------------------------------- <p>八、如果你需要更快的速度Q你应该Q? <p>扑և瓉(CPU、磁盘、内存、SQL服务器、操作系l、API或应?q中全力解冟?br>使用l予你更快速度/灉|性的扩展?br>逐渐了解SQL服务器以便能Z的问题用可能最快的SQL构造ƈ避免瓉?br>优化表布局和查询?br>使用复制以获得更快的选择(select)速度?br>如果你有一个慢速的|络q接数据库,使用压羃客户/服务器协议?br>不要x时应用的第一个版本不能完地ULQ在你解决问题时Q你L可以在以后优化它? <p>-------------------------------------------------------------------------------- <p>?ji)、优化MySQL <p>挑选编译器和编译选项?br>位你的系l寻找最好的启动选项?br>通读MySQL参考手册ƈ阅读Paul DuBios的《MySQL》一书?已有中文?译注)<br>多用EXPLAIN SELECT、SHOW VARIABLES、SHOW STATUS和SHOW PROCESSLIST?br>了解查询优化器的工作原理?br>优化表的格式?br>l护你的?myisamchk、CHECK TABLE?OPTIMIZE TABLE)<br>使用MySQL的扩展功能以让一切快速完成?br>如果你注意到了你在很多场合需要某些函敎ͼ~写MySQL UDF函数?br>不要使用表或列U的GRANTQ除非你实需要?br>购买MySQL技术支持以帮助你解决问题憨W? <p>-------------------------------------------------------------------------------- <p>十、编译和安装MySQL <p>通过位你的系l挑选可能最好的~译器,你通常可以获得10-30%的性能提高?br>在Linux/Intelq_上,用pgcc(gcc的奔腾芯片优化版)~译MySQL。然而,二进制代码将只能q行在Intel奔腾CPU上?br>对于一U特定的q_Q用MySQL参考手册上推荐的优化选项?br>一般地Q对特定CPU的原生编译器(如Sparc的Sun Workshop)应该比gcc提供更好的性能Q但不Lq样?br>用你用的字符集编译MySQL?br>静态编译生成mysqld的执行文??-with-mysqld-ldflags=all-static)q用strip sql/mysqld整理最l的执行文g?br>注意Q既然MySQL不用C++扩展Q不带扩展支持编译MySQL赢得巨大的性能提高?br>如果操作pȝ支持原生U程Q用原生线E?而不用mit-pthreads)?br>用MySQL基准试来测试最l的二进制代码? <p>-------------------------------------------------------------------------------- <p>十一、维? <p>如果可能Q偶运行一下OPTIMIZE tableQ这对大量更新的变长行非帔R要?br>偶尔用myisamchk -a更新一下表中的键码分布l计。记住在做之前关掉MySQL?br>如果有碎片文Ӟ可能值得所有文件复制到另一个磁盘上Q清除原来的盘q拷回文件?br>如果遇到问题Q用myisamchk或CHECK table查表?br>用mysqladmin -i10 precesslist extended-status监控MySQL的状态?br>用MySQL GUI客户E序Q你可以在不同的H口内监控进E列表和状态?br>使用mysqladmin debug获得有关锁定和性能的信息? <p>-------------------------------------------------------------------------------- <p>十二、优化SQL <p>扬SQL之长Q其它事情交由应用去做。用SQL服务器来做: <p>扑ևZWHERE子句的行?br>JOIN?br>GROUP BY<br>ORDER BY<br>DISTINCT <p>不要使用SQL来做Q? <p>验数?如日?<br>成ؓ一只计器 <p>技巧: <p>明智C用键码?br>键码适合搜烦Q但不适合索引列的插入/更新?br>保持数据为数据库W三范式Q但不要担心冗余信息或这如果你需要更快的速度Q创建ȝ表?br>在大表上不做GROUP BYQ相反创建大表的ȝ表ƈ查询它?br>UPDATE table set count=count+1 where key_column=constant非常快?br>对于大表Q或许最好偶生成ȝ表而不是一直保持ȝ表?br>充分利用INSERT的默认倹{? <p>-------------------------------------------------------------------------------- <p>十三、不同SQL服务器的速度差别Q以U计Q? <p>+--------------------------+--------+---------+<br>|通过键码d2000000行: | 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>在上q测试中QMySQL配置8M高速缓存运行,其他数据库以默认安装q行? <p>-------------------------------------------------------------------------------- <p>十四、重要的MySQL启动选项 <p>back_log 如果需要大量新q接Q修改它?br>thread_cache_size 如果需要大量新q接Q修改它?br>key_buffer_size 索引|Q可以设成很大?br>bdb_cache_size BDB表用的记录和键吗高速缓存?br>table_cache 如果有很多的表和q发q接Q修改它?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 在进行无键吗的联l时使用? <p>-------------------------------------------------------------------------------- <p>十五、优化表 <p>MySQL拥有一套丰富的cd。你应该Ҏ(gu)一列尝试用最有效的类型?br>ANALYSEq程可以帮助你找到表的最优类型:SELECT * FROM table_name PROCEDURE ANALYSE()?br>对于不保存NULL值的列用NOT NULLQ这对你想烦引的列尤光要?br>ISAMcd的表改ؓMyISAM?br>如果可能Q用固定的表格式创徏表?br>不要索引你不想用的东ѝ?br>利用MySQL能按一个烦引的前缀q行查询的事实。如果你有烦引INDEX(a,b)Q你不需要在a上的索引?br>不在长CHAR/VARCHAR列上创徏索引Q而只索引列的一个前~以节省存储空间。CREATE TABLE table_name (hostname CHAR(255) not null, index(hostname(10)))<br>Ҏ(gu)个表使用最有效的表格式?br>在不同表中保存相同信息的列应该有同样的定义ƈh相同的列名? <p>-------------------------------------------------------------------------------- <p>十六、MySQL如何ơ存储数? <p>数据库以目录存储?br>表以文g存储?br>列以变长或定长格式存储在文g中。对BDB表,数据以页面Ş式存储?br>支持Z内存的表?br>数据库和表可在不同的盘上用W号q接h?br>在Windows上,MySQL支持?sym文g内部W号q接数据库? <p>-------------------------------------------------------------------------------- <p>十七、MySQL表类? <p>HEAP表:固定行长的表Q只存储在内存中q用HASH索引q行索引?br>ISAM表:MySQL 3.22中的早期B-tree表格式?br>MyIASMQIASM表的新版本,有如下扩展:<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)QMySQL以定长表格式创Q否则表以动态长度格式创建?br>定长格式比动态长度格式快很多q更安全?br>动态长度行格式一般占用较?yu)的存储I间Q但如果表频J更斎ͼ会生碎片?br>在某些情况下Q不值得所有VARCHAR、BLOB和TEXT列{Ud另一个表中,只是获得主表上的更快速度?br>利用myiasmchkQ对ISAMQpack_iasmQ,可以创徏只读压羃表,qɼ盘使用率最,但用慢速磁盘时Q这非常不错。压~表充分地利用将不再更新的日志表 <p>-------------------------------------------------------------------------------- <p>十九(ji)、MySQL高速缓存(所有线E共享,一ơ性分配) <p>键码~存Qkey_buffer_sizeQ默?M?br>表缓存:table_cacheQ默?4?br>U程~存Qthread_cache_sizeQ默??br>L名缓存:可在~译时修改,默认128?br>内存映射表:目前仅用于压~表?br>注意QMySQL没有q行高速缓存,而让操作pȝ处理? <p>-------------------------------------------------------------------------------- <p>二十、MySQL~存区变量(非共享,按需分配Q? <p>sort_bufferQORDER BY/GROUP BY<br>record_bufferQ扫描表?br>join_buffer_sizeQ无键联l?br>myisam_sort_buffer_sizeQREPAIR TABLE<br>net_buffer_length:对于读SQL语句q缓存结果?br>tmp_table_sizeQ时结果的HEAP表大? <p>-------------------------------------------------------------------------------- <p>二十一、MySQL表高速缓存工作原? <p>每个MyISAM表的打开实例(instance)使用一个烦引文件和一个数据文件。如果表被两个线E用或在同一条查询中使用两次QMyIASM共享烦引文件而是打开数据文g的另一个实例?br>如果所有在高速缓存中的表都在使用Q缓存将临时增加到比表缓存尺寸大些。如果是q样Q下一个被释放的表被关闭?br>你可以通过查mysqld的Opened_tables变量以检查表~存是否太小。如果该值太高,你应该增大表高速缓存? <p>-------------------------------------------------------------------------------- <p>二十二、MySQL扩展/优化-提供更快的速度 <p>使用优化的表cdQHEAP、MyIASM或BDB表)?br>Ҏ(gu)据用优化的列?br>如果可能使用定长行?br>使用不同的锁定类型(SELECT HIGH_PRIORITYQINSERT LOW_PRIORITYQ?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 Q结合IS NULL<br>ORDER BY可在某些情况下用键码?br>如果只查询在一个烦引中的列Q将只用烦引树解决查询?br>联结一般比子查询快Q对大多数SQL服务器亦如此Q?br>LIMIT<br>SELECT * from table1 WHERE a > 10 LIMIT 10,20<br>DELETE * from table1 WHERE a > 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表将文g分割成很多文件以H破某些文gpȝ?G限制?br>Delay_keys<br>复制功能 <p>-------------------------------------------------------------------------------- <p>二十二、MySQL何时使用索引 <p>对一个键码?gt;, >=, =, <, <=, IF NULL和BETWEEN<br>SELECT * FROM table_name WHERE key_part1=1 and key_part2 > 5;<br>SELECT * FROM table_name WHERE key_part1 IS NULL; <p>当用不以通配W开始的LIKE<br>SELECT * FROM table_name WHERE key_part1 LIKE 'jani%' <p>在进行联l时从另一个表中提取行?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能估计出它将可能比扫描整张表q要快时Q则不用烦引。例如如果key_part1均匀分布??00之间Q下列查询中使用索引׃是很好:<br>SELECT * FROM table_name where key_part1 > 1 and key_part1 < 90 <p>如果使用HEAP表且不用=搜烦所有键码部分? <p>在HEAP表上使用ORDER BY? <p>如果不是用键码第一部分<br>SELECT * FROM table_name WHERE key_part2=1 <p>如果使用以一个通配W开始的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> explain select t3.DateOfAction, t1.TransactionID<br>-> from t1 join t2 join t3<br>-> where t2.ID = t1.TransactionID and t3.ID = t2.GroupID<br>-> 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和范围类型提CZ个潜在的问题? <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来杀L掉的U程?br>-------------------------------------------------------------------------------- <p>二十六、如何知晓MySQL解决一条查? <p>q行列命oq试囑ּ明白其输出:<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>在进行很多连接时Q连接非常快?br>同时使用SELECT和INSERT的场合?br>在不把更C耗时太长的选择l合时?br>在大多数选择/更新使用唯一键码时?br>在用没有长旉冲突锁定的多个表时?br>在用大表?MySQL使用一个非常紧凑的表格?? <p>-------------------------------------------------------------------------------- <p>二十八、MySQL应避免的事情 <p>用删掉的行更新或插入表,l合要耗时长的SELECT?br>在能攑֜WHERE子句中的列上用HAVING?br>不用键码或键码不够唯一而进行JOIN?br>在不同列cd的列上JOIN?br>在不使用=匚w整个键码时用HEAP表?br>在MySQL监控E序中忘记在UPDATE或DELETE中用一条WHERE子句。如果想q样做,使用mysql客户E序?-i-am-a-dummy选项? <p>-------------------------------------------------------------------------------- <p>二十?ji)、MySQL各种锁定 <p>内部表锁?br>LOCK TABLESQ所有表cd适用Q?br>GET LOCK()/RELEASE LOCK()<br>面锁定Q对BDB表)<br>ALTER TABLE也在BDB表上q行表锁?br>LOCK TABLES允许一个表有多个读者和一个写者?br>一般WHERE锁定h比READ锁定高的优先U以避免让写入方q等。对于不重要的写入方Q可以用LOW_PRIORITY关键字让锁定处理器优选读取方?br>UPDATE LOW_PRIORITY SET value=10 WHERE id=10; <p>-------------------------------------------------------------------------------- <p>三十、给MySQL更多信息以更好地解决问题的技? <p>注意你总能L(加注?MySQL功能以查询可移植: <p>SELECT /*! SQL_BUFFER_RESULTS */ ...<br>SELECT SQL_BUFFER_RESULTS ...<br>强制MySQL生成一个时结果集。只要所有时结果集生成后,所有表上的锁定均被释放。这能在遇到表锁定问题时或要花很长时间将l果传给客户端时有所帮助?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> LOCK TABLES trans READ, customer WRITE;<br>mysql> select sum(value) from trans where customer_id=some_id;<br>mysql> update customer set total_value=sum_from_previous_statement<br>where customer_id=some_id;<br>mysql> UNLOCK TABLES; <p>BDB表如何进行事?<br>mysql> BEGIN WORK;<br>mysql> select sum(value) from trans where customer_id=some_id;<br>mysql> update customer set total_value=sum_from_previous_statement<br>where customer_id=some_id;<br>mysql> COMMIT; <p>注意你可以通过下列语句回避事务:<br>UPDATE customer SET value=value+new_value WHERE customer_id=some_id; <p>-------------------------------------------------------------------------------- <p>三十二、用REPLACE的例? <p>REPLACE的功能极像INSERTQ除了如果一条老记录在一个唯一索引上具有与新纪录相同的|那么老记录在新纪录插入前则被删除。不使用 <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>使用短主键。联l表时用数字而非字符丌Ӏ?br>当用多部分键码ӞW一部分应该时最常用的部分?br>有疑问时Q首先用更多重复的列以获得更好地键码压~?br>如果在同一台机器上q行MySQL客户和服务器Q那么在q接MySQL时则使用套接字而不是TCP/IPQ这可以提高性能7.5%Q。可在连接MySQL服务器时不指定主机名或主机名为localhost来做到?br>如果可能Q?-skip-locking(在某些OS上ؓ默认)Q这关闭外部锁定ƈ提高性能?br>使用应用层哈希D非镉K码:<br>SELECT * FROM table_name WHERE hash=MD5(concat(col1,col2)) AND<br>col_1='constant' AND col_2='constant' <p>在文件中保存需要以文g形式讉K的BLOBQ在数据库中只保存文件名?br>删除所有行比删除一大部分行要快?br>如果SQL不够快,研究一下访问数据的较底层接口? <p>-------------------------------------------------------------------------------- <p>三十四、用MySQL 3.23的好? <p>MyISAMQ可UL的大表格?br>HEAPQ内存中的表<br>Berkeley DBQ支持事务的表?br>众多提高的限?br>动态字W集<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>p|安全的复?br>正文搜烦<br>多个表的删除(之后完成多个表的更新)<br>更好的键码缓?br>原子RENAME (RENAME TABLE foo as foo_old, foo_new as foo)<br>查询高速缓?br>MERGE TABLES<br>一个更好的GUI客户E序 <p>MySQL优化明指? <p>-------------------------------------------------------------------------------- <p>2004-05-25 <p>一、在~译时优化MySQL<br>如果你从源代码分发安装MySQLQ要注意Q编译过E对以后的目标程序性能有重要的影响Q不同的~译方式可能得到cM的目标文Ӟ但性能可能相差很大Q因此,在编译安装MySQL适应仔细Ҏ(gu)你的应用cd选择最可能好的~译选项。这U定制的MySQL可以Z的应用提供最x能? <p>技巧:选用较好的编译器和较好的~译器选项Q这样应用可提高性能10-30%。(MySQL文档如是_ <p>1.1、用pgccQPentium GCC)~译?br>该编译器Q?a ><font color=#1a8bc8>http://www.goof.com/pcg/Q针对运?...l谙低成杓频?</font></a> <p>1.2、仅使用你想使用的字W集~译MySQL<br>MySQL目前提供多达24U不同的字符集,为全球用户以他们自己的语a插入或查看表中的数据。却省情况下QMySQL安装所有者这些字W集Q热然而,最好的选择是指选择一U你需要的。如Q禁止除Latin1字符集以外的所有其它字W集Q? <p>--------------------------------------------------------------------------------<br>%>./configure -with-extra-charsets=none [--other-configuration-options]<br>-------------------------------------------------------------------------------- <p>1.3、将mysqld~译成静态执行文?br>mysqld~译成静态执行文件而无需׃n库也能获得更好的性能。通过在配|时指定下列选项Q可静态编译mysqld? <p>--------------------------------------------------------------------------------<br>%>./configure -with-mysqld-ldflags=-all-static [--other-configuration-options]<br>-------------------------------------------------------------------------------- <p>1.4、配|样?br>下列配置命o常用于提高性能Q? <p>--------------------------------------------------------------------------------<br>%>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>保q用正确的编译固焉要,但这只是成功的第一步,配置众多的MySQL变量同样Ҏ(gu)务器的正常运行v关键作用。你可以这些变量的赋值存在一个配|文件中Q以保它们在每ơ启动MySQL时均起作用,q个配置文g是my.cnf文g? <p>MySQL已经提供了几个my.cnf文g的样本,可在/usr/local/mysqld/share/mysql/目录下找到。这些文件分别命名ؓ my-small.cnf?my-medium.cnf、my-large.cnf和my-huge.cnfQ规模说明可在描q配|文仉用的系l类型标题中扑ֈ。如果在只有相当内存的pȝ上运行MySQLQ而且只是偶尔的用一下,那么my-small.cnf会比较理惻I因ؓ它命令mysqld只用最的资源。类似地Q如果你计划构徏?sh)子商务市Q而且pȝ拥有2G内存Q那么你可能要用到mysql-huge.cnf文g了? <p>Z利用q些文g中的一个,你需要复制一个最适合需求的文gQ改名ؓmy.cnf。你可以选择使用配置文g三种作用范围的一U: <p>GlobalQ将my.cnf文g复制到服务器?etc目录下,q得配|文件中的变量作用于全局Q即Ҏ(gu)有服务器上的MySQL数据库服务器有效?br>LocalQ将my.cnf文g复制到[MYSQL-INSTALL-DIR]/var/目录下,使得my.cnf作用于特定的服务器。[MYSQL-INSTALL-DIR]表示MySQL安装目录?br>UserQ你可以再限制作用于特定的用Pmy.cnf复制到用L根目录下?br>I竟如何讄my.cnf中的q些变量呢?更进一步说Q你可以讄哪一个变量。虽然所用变量对MySQL服务器相寚w用Q每一个变量与MySQL的的某些lg有更特定的关pR如变量max_connects归在mysqldcd下。执行下列命令即可知道: <p>--------------------------------------------------------------------------------<br>%>/usr/local/mysql/libexec/mysqld --help<br>-------------------------------------------------------------------------------- <p>它显C大量的选项及与mysqld相关的变量。你可以很容易地在该行文字之下找出变量: <p>--------------------------------------------------------------------------------<br>Possible variables for option --set-variable (-O) are<br>-------------------------------------------------------------------------------- <p>然后你可以如下设|my.cnf中的那些变量Q? <p>--------------------------------------------------------------------------------<br>set-variable = max_connections=100<br>-------------------------------------------------------------------------------- <p>它设|MySQL服务器的最大ƈ发连接数?00。要保在my.cnf文g中的[mysqld]标题下插入变量设|?br>三、表cd <p>很多MySQL用户可能很惊ӞMySQL实为用h?U不同的表类型,UCؓDBD、HEAP、ISAM、MERGE和MyIASM。DBD归ؓ事务安全c,而其他ؓ非事务安全类? <p>3.1、事务安? <p>DBD<br>Berkeley DB(DBD)表是支持事务处理的表Q由Sleepycat软g公司(<a ><font color=#1a8bc8>http://www.sleepycat.com)开发。它提供MySQL用户期待已久的功?事务控制。事务控制在M数据库系l中都是一个极有h(hun)值的功能Q因为它们确保一l命令能成功地执行?/font></a> <p>3.2、非事务安全 <p>HEAP <p>HEAP表是MySQL中存取数据最快的表。这是因Z们用存储在动态内存中的一个哈希烦引。另一个要Ҏ(gu)如果MySQL或服务器崩溃Q数据将丢失? <p>ISAM <p>ISAM表是早期MySQL版本的缺省表cdQ直到MyIASM开发出来。徏议不要再使用它? <p>MERGE <p>MERGE是一个有的新类型,?.23.25之后出现。一个MERGE表实际上是一个相同MyISAM表的集合Q合q成一个表Q主要是Z效率原因。这样可以提高速度、搜索效率、修复效率ƈ节省盘I间? <p>MyIASM <p>q是MySQL的缺省表cd。它ZIASM代码Q但有很多有用的扩展。MyIASM比较好的原因Q? <p>MyIASM表小于IASM表,所以用较?yu)资源?br>MyIASM表在不同的^C二进制层可移植?br>更大的键码尺寸,更大的键码上限?br>3.3、指定表cd <p>你可在创时指定表的类型。下例创Z个HEAP表: <p>-------------------------------------------------------------------------------- <p>mysql>CREATE TABLE email_addresses TYPE=HEAP (<br>->email char(55) NOT NULL,<br>->name char(30) NOT NULL,<br>->PRIMARY KEY(email) ); <p>-------------------------------------------------------------------------------- <p>BDB表需要一些配|工作,参见http://www.mysql.com/doc/B/D/BDB_overview.html? <p>3.4、更多的表类? <p>Z使MySQL理工作更有,卛_发布的MySQL 4.0提供两U新的表cdQ称为Innobase和Gemeni? <p>4、优化工? <p>MySQL服务器本w提供了几条内置命o用于帮助优化? <p>4.1、SHOW <p>你可能有兴趣知道MySQL服务器究竟更了什么,下列命ol出一个ȝQ? <p>--------------------------------------------------------------------------------<br>mysql>show status;<br>-------------------------------------------------------------------------------- <p>它给Z一个相当长的状态变量及其值的列表。有些变量包含了异常l止客户的数量、异常终止连接的数量、连接尝试的ơ数、最大ƈ发连接数和大量其他有用的信息。这些信息对扑ևpȝ问题和低效极具h(hun)倹{?br>SHOWq能做更多的事情。它可以昄关于日志文g、特定数据库、表、烦引、进E和权限表中有h(hun)值的信息。详见MySQL手册? <p>4.2、EXPLAIN <p>当你面对SELECT语句ӞEXPLAIN解释SELECT命o如何被处理。这不仅对决定是否应该增加一个烦引,而且对决定一个复杂的Join如何被MySQL处理都是有帮助的? <p>4.3、OPTIMIZE <p>OPTIMIZE语句允许你恢复空间和合ƈ数据文g片Q对包含变长行的表进行了大量更新和删除后Q这样做特别重要。OPTIMIZE目前只工作于MyIASM和BDB表?/p> <img src ="http://www.tkk7.com/zhip/aggbug/120325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zhip/" target="_blank">zhip</a> 2007-05-27 18:30 <a href="http://www.tkk7.com/zhip/archive/2007/05/27/120325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Oracle使用l验技?/title><link>http://www.tkk7.com/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.tkk7.com/zhip/archive/2007/05/27/120323.html</guid><wfw:comment>http://www.tkk7.com/zhip/comments/120323.html</wfw:comment><comments>http://www.tkk7.com/zhip/archive/2007/05/27/120323.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/zhip/comments/commentRss/120323.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zhip/services/trackbacks/120323.html</trackback:ping><description><![CDATA[1、模p匹配时忽略大小?br>select * from table where lower(name) like lower('%a%');<br><br>2、去除某一列的NI格<br>update table_name set column_name=trim(column_name);<br> <img src ="http://www.tkk7.com/zhip/aggbug/120323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zhip/" target="_blank">zhip</a> 2007-05-27 18:26 <a href="http://www.tkk7.com/zhip/archive/2007/05/27/120323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>各种常见java_sql_SQLException归纳http://www.tkk7.com/zhip/archive/2007/05/11/116723.htmlzhipzhipFri, 11 May 2007 05:25:00 GMThttp://www.tkk7.com/zhip/archive/2007/05/11/116723.htmlhttp://www.tkk7.com/zhip/comments/116723.htmlhttp://www.tkk7.com/zhip/archive/2007/05/11/116723.html#Feedback0http://www.tkk7.com/zhip/comments/commentRss/116723.htmlhttp://www.tkk7.com/zhip/services/trackbacks/116723.html
各种常见java.sql.SQLException归纳
java.sql.SQLException错误Q将英文原文一q列出,以供查阅Q?/div>
ORA-00904:    invalid column name 无效列名
ORA-00942:  table or view does not exist 表或者视图不存在
ORA-01400:  cannot insert NULL into () 不能空值插?/div>
ORA-00936: ~少表达?/div>
ORA-00933: SQL 命o未正结?/div>
ORA-01722: 无效数字Q(一般可能是企图字W串cd的值填入数字型而造成Q?/div>
ORA-06530:  ACCESS_INTO_NULL 
Your  program  attempts  to  assign  values  to  the  attributes  of  an  uninitialized  (atomically  null)  object.
企图值写入未初化对象的属?/div>
ORA-06592:  CASE_NOT_FOUND
None  of  the  choices  in  the  WHEN  clauses  of  a  CASE  statement  is  selected,  and  there  is  no  ELSE  clause.
case语句格式有误Q没有分支语?/div>
ORA-06531:  COLLECTION_IS_NULL
Your  program  attempts  to  apply  collection  methods  other  than  EXISTS  to  an  uninitialized  (atomically  null) 
nested  table  or  varray,  or  the  program  attempts  to  assign  values  to  the  elements  of  an  uninitialized  nested 
table  or  varray.
企图集合填入未初始化的嵌套表中
ORA-06511:  CURSOR_ALREADY_OPEN
Your  program  attempts  to  open  an  already  open  cursor.  A  cursor  must  be  closed  before  it  can  be  reopened.  A
 cursor  FOR  loop  automatically  opens  the  cursor  to  which  it  refers.  So,  your  program  cannot  open  that  cursor
 inside  the  loop.
企图打开已经打开的指针.指针已经打开Q要再次打开必须先关闭.
ORA-00001:  DUP_VAL_ON_INDEX
Your  program  attempts  to  store  duplicate  values  in  a  database  column  that  is  constrained  by  a  unique  index.
数据库字D存储重复,主键唯一值冲H?/div>
ORA-01001:  INVALID_CURSOR 无效指针
Your  program  attempts  an  illegal  cursor  operation  such  as  closing  an  unopened  cursor.
非法指针操作Q例如关闭未打开的指?/div>
ORA-01722:  INVALID_NUMBER 无效数字
In  a  SQL  statement,  the  conversion  of  a  character  string  into  a  number  fails  because  the  string  does  not 
represent  a  valid  number.  (In  procedural  statements,  VALUE_ERROR  is  raised.)  This  exception  is  also  raised 
when  the  LIMIT-clause  expression  in  a  bulk  FETCH  statement  does  not  evaluate  to  a  positive  number.
在sql语句中,字符数字cd转换错误Q无法将字符串{化成有效数字Q此错误也可能因为在limit从句表达式中fetch语句无法对应指定数字
ORA-01017:  LOGIN_DENIED 拒绝讉K
Your  program  attempts  to  log  on  to  Oracle  with  an  invalid  username  and/or  password.
企图用无效的用户名或密码doracle
ORA-01403:  NO_DATA_FOUND  无数据发?br>A  SELECT  INTO  statement  returns  no  rows,  or  your  program  references  a  deleted  element  in  a  nested  table  or 
an  uninitialized  element  in  an  index-by  table.  SQL  aggregate  functions  such  as  AVG  and  SUM  always  return  a 
value  or  a  null.  So,  a  SELECT  INTO  statement  that  calls  an  aggregate  function  never  raises  NO_DATA_FOUND. 
The  FETCH  statement  is  expected  to  return  no  rows  eventually,  so  when  that  happens,  no  exception  is  raised.
  
ORA-01012:  NOT_LOGGED_ON   未登?br>Your  program  issues  a  database  call  without  being  connected  to  Oracle.
E序发送数据库命oQ但未与oracle建立q接
  
ORA-06501:  PROGRAM_ERROR  E序错误
PL/SQL  has  an  internal  problem.
pl/sqlpȝ问题
  
ORA-06504:  ROWTYPE_MISMATCH  行类型不匚w
The  host  cursor  variable  and  PL/SQL  cursor  variable  involved  in  an  assignment  have  incompatible  return  types. 
For  example,  when  an  open  host  cursor  variable  is  passed  to  a  stored  subprogram,  the  return  types  of  the 
actual  and  formal  parameters  must  be  compatible. 
  
ORA-30625:  SELF_IS_NULL  
Your  program  attempts  to  call  a  MEMBER  method  on  a  null  instance.  That  is,  the  built-in  parameter  SELF 
(which  is  always  the  first  parameter  passed  to  a  MEMBER  method)  is  null.
  
ORA-06500:  STORAGE_ERROR  存储错误
PL/SQL  runs  out  of  memory  or  memory  has  been  corrupted.
PL/SQLq行内存溢出或内存冲H?br>      
ORA-06533:  SUBSCRIPT_BEYOND_COUNT   子句出数量
Your  program  references  a  nested  table  or  varray  element  using  an  index  number  larger  than  the  number  of 
elements  in  the  collection.
  
ORA-06532:  SUBSCRIPT_OUTSIDE_LIMIT   子句非法数量
Your  program  references  a  nested  table  or  varray  element  using  an  index  number  (-1  for  example)  that  is 
outside  the  legal  range.
  
ORA-01410:  SYS_INVALID_ROWID   无效的字D名
 The  conversion  of  a  character  string  into  a  universal  rowid  fails  because  the  character  string  does  not 
represent  a  valid  rowid. 
  
ORA-00051:  TIMEOUT_ON_RESOURCE    资源{待时
A  time-out  occurs  while  Oracle  is  waiting  for  a  resource. 
  
ORA-01422:  TOO_MANY_ROWS    q回过一?br>A  SELECT  INTO  statement  returns  more  than  one  row.
  
ORA-06502:  VALUE_ERROR   值错?br>An  arithmetic,  conversion,  truncation,  or  size-constraint  error  occurs.  For  example,  when  your  program  selects 
a  column  value  into  a  character  variable,  if  the  value  is  longer  than  the  declared  length  of  the  variable, 
PL/SQL  aborts  the  assignment  and  raises  VALUE_ERROR.  In  procedural  statements,  VALUE_ERROR  is  raised  if  the 
conversion  of  a  character  string  into  a  number  fails.  (In  SQL  statements,  INVALID_NUMBER  is  raised.) 
  
ORA-01476:  ZERO_DIVIDE  ?错误
Your  program  attempts  to  divide  a  number  by  zero. 

用尽?Resultset
         java.sql.SQLException: 用尽?Resultset
         原因 Q忘了写rs.next()Qrs.next()的作用就是指向记录集的指针往下移动一行,如果有记录的话则q回真,否则q回?br>


zhip 2007-05-11 13:25 发表评论
]]>
վ֩ģ壺 ޾Ʒ| AVƬ߲Ψ| ҹžƵ߹ۿ | ѿվ߿| wwwһwww| ֻۿ߹ۿ| ƷһƵ | 99þ޾ƷѶ| ѴƬ߹ۿyw| һѿ| ľƷAVƬ| Ƶ| AV˵ù| ˿Ƶ| ձַȫ߹ۿ| ƬƵۿ| ƷѾƷ| 91ۺ| һѲƵƬ| ҳƵվ| õ߳| ޴ɫƵ| Ůɫһ| avƬ쿴| ŮߵƵѹۿڵ| ޳AVַ| ŮӰԺҪ| һëƬƵѹۿ| +ɫ++| þþ뾫Ʒպ | Ļ߹ۿƵ| ߹ۿƵ| ޹| ŮܳƵ| ûɫվ| ޹һɾþþƷۺ| ޾ƷƬ| wwwѲƵ| Ů18Ƶ| AVһ| ޾Ʒ|