<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_潇湘隐者</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/57955/rss</id><updated>2012-05-24T15:11:42Z</updated><author><name>潇湘隐者</name><uri>http://www.cnblogs.com/kerrycode/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kerrycode/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/57955/rss"/><entry><id>http://www.cnblogs.com/kerrycode/archive/2012/05/24/2517210.html</id><title type="text">ORACLE数据库查看执行计划</title><summary type="text">基于ORACLE的应用系统很多性能问题，是由应用系统SQL性能低劣引起的，所以，SQL的性能优化很重要，分析与优化SQL的性能我们一般通过查看该SQL的执行计划，本文就如何看懂执行计划，以及如何通过分析执行计划对SQL进行优化做相应说明。一、什么是执行计划（explain plan）执行计划：一条查询语句在ORACLE中的执行过程或访问路径的描述。二、如何查看执行计划1: 在PL/SQL下按F5查看执行计划。第三方工具toad等。很多人以为PL/SQL的执行计划只能看到基数、优化器、耗费等基本信息，其实这个可以在PL/SQL工具里面设置的。可以看到很多其它信息，如下所示2: 在SQL*PLUS</summary><published>2012-05-24T14:28:00Z</published><updated>2012-05-24T14:28:00Z</updated><author><name>潇湘隐者</name><uri>http://www.cnblogs.com/kerrycode/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kerrycode/archive/2012/05/24/2517210.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kerrycode/archive/2012/05/24/2517210.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;基于ORACLE的应用系统很多性能问题，是由应用系统SQL性能低劣引起的，所以，SQL的性能优化很重要，分析与优化SQL的性能我们一般通过查看该SQL的执行计划，本文就如何看懂执行计划，以及如何通过分析执行计划对SQL进行优化做相应说明。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;一、什么是执行计划（explain plan）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;执行计划：一条查询语句在ORACLE中的执行过程或访问路径的描述。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;二、如何查看执行计划&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;1: 在PL/SQL下按F5查看执行计划。第三方工具toad等。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;很多人以为PL/SQL的执行计划只能看到基数、优化器、耗费等基本信息，其实这个可以在PL/SQL工具里面设置的。可以看到很多其它信息，如下所示&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242225566838.jpg"&gt;&lt;span style="color: #333333; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: inline; border: 0px;" title="clip_image002" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242226034160.jpg" alt="clip_image002" width="682" height="515" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;2: 在SQL*PLUS(PL/SQL的命令窗口和SQL窗口均可)下执行下面步骤&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt; SQL&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;EXPLAIN &lt;span style="color: #0000ff;"&gt;PLAN&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FOR&lt;/span&gt;&lt;br/&gt;          &lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; SCOTT.EMP;  &lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;要解析的SQL脚本&lt;/span&gt;&lt;br/&gt; SQL&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;(DBMS_XPLAN.DISPLAY);&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242226085267.jpg"&gt;&lt;span style="color: #333333; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: inline; border: 0px;" title="clip_image004" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242226136691.jpg" alt="clip_image004" width="609" height="348" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242226186097.jpg"&gt;&lt;span style="color: #333333; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: inline; border: 0px;" title="clip_image006" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242226246026.jpg" alt="clip_image006" width="616" height="312" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;3: 在SQL*PLUS下(有些命令在PL/SQL下无效)执行如下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;SQL&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; TIMING &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;控制显示执行时间统计数据&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;SQL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; AUTOTRACE &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; EXPLAIN 　 &lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;这样设置包含执行计划、脚本数据输出，没有统计信息&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;SQL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;执行需要查看执行计划的SQL语句&lt;br/&gt;&lt;br/&gt;SQL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; AUTOTRACE &lt;span style="color: #0000ff;"&gt;OFF&lt;/span&gt; 　 &lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;不生成AUTOTRACE报告，这是缺省模式&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;SQL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; AUTOTRACE &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; 　 &lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;这样设置包含执行计划、统计信息、以及脚本数据输出&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;SQL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;执行需要查看执行计划的SQL语句&lt;br/&gt;&lt;br/&gt;SQL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; AUTOTRACE &lt;span style="color: #0000ff;"&gt;OFF&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;SQL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; AUTOTRACE TRACEONLY 　&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;这样设置会有执行计划、统计信息，不会有脚本数据输出&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;SQL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;执行需要查看执行计划的SQL语句&lt;br/&gt;&lt;br/&gt;SQL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; AUTOTRACE TRACEONLY STAT     &lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;这样设置只包含有统计信息&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;SQL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;执行需要查看执行计划的SQL语句&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;参考文档：SQLPlus User&amp;rsquo;s Guide and Reference Release 11.1&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242226319726.jpg"&gt;&lt;span style="color: #333333; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: inline; border: 0px;" title="clip_image008" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242226396949.jpg" alt="clip_image008" width="661" height="365" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;注意：PL/SQL Developer 工具并不完全支持所有的SQL*Plus命令，像SET AUTOTRACE ON 就如此，在PL/SQL Developer工具下执行此命令会报错&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;SQL&amp;gt; SET AUTOTRACE ON;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Cannot SET AUTOTRACE&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;4：SQL_TRACE可以作为参数在全局启用，也可以通过命令形式在具体SESSION启用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;4.1 在全局启用，在参数文件（pfile/spfile)中指定SQL_TRACE =true，在全局启用SQL_TRACE时会导致所有进程活动被跟踪，包括后台进程以及用户进程，通常会导致比较严重的性能问题，所以在生产环境要谨慎使用。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;提示：通过在全局启用SQL_TRACE， 我们可以跟踪到所有后台进程的活动，很多在文档中的抽象说明，通过跟踪文件的实时变化，我们可以清晰的看到各个进程间的紧密协调。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;4.2在当前SESSION级别设置，通过跟踪当前进程可以发现当前操作的后台数据库递归活动（这在研究数据库新特性时尤其有效），研究SQL执行时，发现后台&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;错误等。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;SQL&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; SESSION &lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; SQL_TRACE&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;TRUE;&lt;br/&gt;&lt;br/&gt;SQL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; SCOTT.EMP;&lt;br/&gt;&lt;br/&gt;SQL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; SESSION &lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; SQL_TRACE &lt;span style="color: #808080;"&gt;=&lt;/span&gt;FALSE;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;&lt;span style="line-height: 19px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;那么此时如何查看相关信息？不管你在SQL*PLUS抑或PL/SQL DEVELOPER工具里面执行上面脚本过后都看不到什么信息，你可以通过下面脚本查询到trace日志信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; T.VALUE &lt;span style="color: #808080;"&gt;||&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;/&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt; &lt;span style="color: #808080;"&gt;||&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;LOWER&lt;/span&gt;(&lt;span style="color: #ff00ff;"&gt;RTRIM&lt;/span&gt;(I.INSTANCE, CHR(&lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;))) &lt;span style="color: #808080;"&gt;||&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;_ora_&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt; &lt;span style="color: #808080;"&gt;||&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;P.SPID &lt;/span&gt;&lt;span style="color: #808080;"&gt;||&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;.trc&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; TRACE_FILE_NAME&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;( &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt; P.SPID&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; V$MYSTAT M, V$SESSION S, V$PROCESS P&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; M.STATISTIC# &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #808080;"&gt;AND&lt;/span&gt; S.SID &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; M.SID&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;AND&lt;/span&gt; P.ADDR &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; S.PADDR&lt;br/&gt;&lt;br/&gt;) P,&lt;br/&gt;&lt;br/&gt;( &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt; T.INSTANCE&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; V$THREAD T, V$PARAMETER V&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; V.NAME &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;thread&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #808080;"&gt;AND&lt;/span&gt; (V.VALUE &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt; &lt;span style="color: #808080;"&gt;OR&lt;/span&gt; T.THREAD# &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TO_NUMBER(V.VALUE))&lt;br/&gt;&lt;br/&gt;) I,&lt;br/&gt;&lt;br/&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; VALUE &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; V$PARAMETER &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; NAME&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;user_dump_dest&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;) T&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;&lt;span style="line-height: 19px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242226467302.jpg"&gt;&lt;span style="color: #333333; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px; border-color: initial; border-style: initial;" title="clip_image010" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242226539367.jpg" alt="clip_image010" width="552" height="362" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;TKPROF的帮助信息如下&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #000000;"&gt;TKPROF 选项   &lt;br/&gt;选项                                          说明  &lt;br/&gt;TRACEFILE                               跟踪输出文件的名称  &lt;br/&gt;OUTPUTFILE                              已设置格式的文件的名称  &lt;br/&gt;SORT&lt;/span&gt;=&lt;span style="color: #000000;"&gt;option                             语句的排序顺序  &lt;br/&gt;PRINT&lt;/span&gt;=&lt;span style="color: #000000;"&gt;n                                 打印前 n 个语句  &lt;br/&gt;EXPLAIN&lt;/span&gt;=&lt;span style="color: #000000;"&gt;user/password                   以指定的用户名运行 EXPLAIN PLAN  &lt;br/&gt;INSERT&lt;/span&gt;=&lt;span style="color: #000000;"&gt;filename                         生成 INSERT 语句  &lt;br/&gt;SYS&lt;/span&gt;=&lt;span style="color: #000000;"&gt;NO                                  忽略作为用户 sys 运行的递归 SQL 语句  &lt;br/&gt;AGGREGATE&lt;/span&gt;=&lt;span style="color: #800000; font-weight: bold;"&gt;[&lt;/span&gt;&lt;span style="color: #800000;"&gt;Y|N&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;]&lt;/span&gt;                         如果指定 AGGREGATE =&lt;span style="color: #000000;"&gt; NO TKPROF 不聚集相同   &lt;br/&gt;                                        SQL 文本的多个用户  &lt;br/&gt;RECORD&lt;/span&gt;=&lt;span style="color: #000000;"&gt;filename                         记录在跟踪文件中发现的语句  &lt;br/&gt;TABLE&lt;/span&gt;=&lt;span style="color: #000000;"&gt;schema.tablename                  将执行计划放入指定的表而不是缺省的PLAN_TABLE   &lt;br/&gt;    &lt;br/&gt;可以在操作系统中键入 tkprof 以获得所有可用选项和输出的列表  &lt;br/&gt;注 排序选项有   &lt;br/&gt;    &lt;br/&gt;排序                                    选项说明  &lt;br/&gt;prscnt execnt fchcnt             调用分析执行提取的次数  &lt;br/&gt;prscpu execpu fchcpu             分析执行提取所占用的 CPU 时间  &lt;br/&gt;prsela exela fchela              分析执行提取所占用的时间  &lt;br/&gt;prsdsk exedsk fchdsk             分析执行提取期间的磁盘读取次数  &lt;br/&gt;prsqry exeqry fchqry             分析执行提取期间用于持续读取的缓冲区数  &lt;br/&gt;prscu execu fchcu                分析执行提取期间用于当前读取的缓冲区数  &lt;br/&gt;prsmis exemis                    分析执行期间库高速缓存未命中的次数  &lt;br/&gt;exerow fchrow                    分析执行期间处理的行数  &lt;br/&gt;userid                           分析游标的用户的用户 ID   &lt;br/&gt;    &lt;br/&gt;TKPROF 统计数据  &lt;br/&gt; Count: 执行调用数  &lt;br/&gt; CPU: CPU 的使用秒数  &lt;br/&gt; Elapsed: 总共用去的时间  &lt;br/&gt; Disk: 物理读取次数  &lt;br/&gt; Query: 持续读取的逻辑读取数  &lt;br/&gt; Current: 当前模式下的逻辑读取数  &lt;br/&gt; Rows: 已处理行数   &lt;br/&gt;TKPROF 统计信息   &lt;br/&gt;统计             含义  &lt;br/&gt;Count     分析或执行语句的次数以及为语句发出的提取调用数  &lt;br/&gt;CPU       每个阶段的处理时间以秒为单位如果在共享池中找到该语句对于分析阶段为 &lt;/span&gt;0&lt;span style="color: #000000;"&gt;  &lt;br/&gt;Elapsed   占用时间以秒为单位通常不是非常有用因为其它进程影响占用时间  &lt;br/&gt;Disk      从数据库文件读取的物理数据块如果该数据被缓冲则该统计可能很低  &lt;br/&gt;Query     为持续读取检索的逻辑缓冲区通常用于 SELECT 语句  &lt;br/&gt;Current   在当前模式下检索的逻辑缓冲区通常用于 DML 语句   &lt;br/&gt;Rows      外部语句所处理的行对于 SELECT 语句在提取阶段显示它对于 DML 语句在执行阶段显示它   &lt;br/&gt;    &lt;br/&gt;Query 和Current 的总和为所访问的逻辑缓冲区的总数 &lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;执行下面命令：tkprof D:\ORACLE\PRODUCT\10.2.0\DB_1\RDBMS\TRACE/wgods_ora_3940.trc h:\out.txtoutputfile explain=etl/etl&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/20120524222658508.jpg"&gt;&lt;span style="color: #333333; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: inline; border: 0px;" title="clip_image012" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242227038834.jpg" alt="clip_image012" width="727" height="112" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;&lt;span style="line-height: 19px;"&gt;执行上面命令后，可以查看生成的文本文件&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('9234828e-d88f-4d38-8eb5-a4e7bfbd3882')"&gt;&lt;div id="cnblogs_code_open_9234828e-d88f-4d38-8eb5-a4e7bfbd3882" class="cnblogs_code_hide"&gt;TKPROF: Release 10.2.0.1.0 - Production on 星期三 5月 23 16:56:41 2012&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;Copyright (c) &lt;/span&gt;1982, 2005,&lt;span style="color: #000000;"&gt; Oracle.  All rights reserved.&lt;br/&gt;&lt;br/&gt;Trace file: D:\ORACLE\PRODUCT\&lt;/span&gt;10.2.0&lt;span style="color: #000000;"&gt;\DB_1\RDBMS\TRACE/wgods_ora_3940.trc&lt;br/&gt;Sort options: default&lt;br/&gt;&lt;br/&gt;********************************************************************************&lt;br/&gt;count    &lt;/span&gt;=&lt;span style="color: #000000;"&gt; number of times OCI procedure was executed&lt;br/&gt;cpu      &lt;/span&gt;=&lt;span style="color: #000000;"&gt; cpu time in seconds executing &lt;br/&gt;elapsed  &lt;/span&gt;=&lt;span style="color: #000000;"&gt; elapsed time in seconds executing&lt;br/&gt;disk     &lt;/span&gt;=&lt;span style="color: #000000;"&gt; number of physical reads of buffers from disk&lt;br/&gt;query    &lt;/span&gt;=&lt;span style="color: #000000;"&gt; number of buffers gotten for consistent read&lt;br/&gt;current  &lt;/span&gt;=&lt;span style="color: #000000;"&gt; number of buffers gotten in current mode (usually for update)&lt;br/&gt;rows     &lt;/span&gt;=&lt;span style="color: #000000;"&gt; number of rows processed by the fetch or execute call&lt;br/&gt;********************************************************************************&lt;br/&gt;&lt;br/&gt;ALTER SESSION SET SQL_TRACE &lt;/span&gt;=&lt;span style="color: #000000;"&gt; TRUE&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;call     count       cpu    elapsed       disk      query    current        rows&lt;br/&gt;------- ------  -------- ---------- ---------- ---------- ----------  ----------&lt;br/&gt;Parse        &lt;/span&gt;0      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;Execute      &lt;/span&gt;1      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;Fetch        &lt;/span&gt;0      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;------- ------  -------- ---------- ---------- ---------- ----------  ----------&lt;br/&gt;total        &lt;/span&gt;1      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;Misses in library cache during parse: &lt;/span&gt;0&lt;span style="color: #000000;"&gt;&lt;br/&gt;Misses in library cache during execute: &lt;/span&gt;1&lt;span style="color: #000000;"&gt;&lt;br/&gt;Optimizer mode: CHOOSE&lt;br/&gt;Parsing user id: &lt;/span&gt;89&lt;span style="color: #000000;"&gt;  (ETL)&lt;br/&gt;********************************************************************************&lt;br/&gt;&lt;br/&gt;begin :id :&lt;/span&gt;= sys.dbms_transaction.local_transaction_id&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&lt;span style="color: #008000;"&gt; end;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;call     count       cpu    elapsed       disk      query    current        rows&lt;br/&gt;------- ------  -------- ---------- ---------- ---------- ----------  ----------&lt;br/&gt;Parse        &lt;/span&gt;2      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;Execute      &lt;/span&gt;2      0.00       0.00          0          0          0           2&lt;span style="color: #000000;"&gt;&lt;br/&gt;Fetch        &lt;/span&gt;0      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;------- ------  -------- ---------- ---------- ---------- ----------  ----------&lt;br/&gt;total        &lt;/span&gt;4      0.00       0.00          0          0          0           2&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;Misses in library cache during parse: &lt;/span&gt;0&lt;span style="color: #000000;"&gt;&lt;br/&gt;Optimizer mode: CHOOSE&lt;br/&gt;Parsing user id: &lt;/span&gt;89&lt;span style="color: #000000;"&gt;  (ETL)&lt;br/&gt;********************************************************************************&lt;br/&gt;&lt;br/&gt;SELECT * &lt;br/&gt;FROM&lt;br/&gt; SCOTT.EMP&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;call     count       cpu    elapsed       disk      query    current        rows&lt;br/&gt;------- ------  -------- ---------- ---------- ---------- ----------  ----------&lt;br/&gt;Parse        &lt;/span&gt;2      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;Execute      &lt;/span&gt;1      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;Fetch        &lt;/span&gt;1      0.00       0.00          0          7          0          14&lt;span style="color: #000000;"&gt;&lt;br/&gt;------- ------  -------- ---------- ---------- ---------- ----------  ----------&lt;br/&gt;total        &lt;/span&gt;4      0.00       0.00          0          7          0          14&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;Misses in library cache during parse: &lt;/span&gt;1&lt;span style="color: #000000;"&gt;&lt;br/&gt;Optimizer mode: CHOOSE&lt;br/&gt;Parsing user id: &lt;/span&gt;89&lt;span style="color: #000000;"&gt;  (ETL)&lt;br/&gt;&lt;br/&gt;Rows     Execution Plan&lt;br/&gt;-------  ---------------------------------------------------&lt;br/&gt;      &lt;/span&gt;0&lt;span style="color: #000000;"&gt;  SELECT STATEMENT   MODE: CHOOSE&lt;br/&gt;      &lt;/span&gt;0&lt;span style="color: #000000;"&gt;   TABLE ACCESS   MODE: ANALYZED (FULL) OF 'EMP' (TABLE)&lt;br/&gt;&lt;br/&gt;********************************************************************************&lt;br/&gt;&lt;br/&gt;ALTER SESSION SET SQL_TRACE &lt;/span&gt;=&lt;span style="color: #000000;"&gt; FALSE&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;call     count       cpu    elapsed       disk      query    current        rows&lt;br/&gt;------- ------  -------- ---------- ---------- ---------- ----------  ----------&lt;br/&gt;Parse        &lt;/span&gt;1      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;Execute      &lt;/span&gt;1      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;Fetch        &lt;/span&gt;0      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;------- ------  -------- ---------- ---------- ---------- ----------  ----------&lt;br/&gt;total        &lt;/span&gt;2      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;Misses in library cache during parse: &lt;/span&gt;1&lt;span style="color: #000000;"&gt;&lt;br/&gt;Optimizer mode: CHOOSE&lt;br/&gt;Parsing user id: &lt;/span&gt;89&lt;span style="color: #000000;"&gt;  (ETL)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;********************************************************************************&lt;br/&gt;&lt;br/&gt;OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS&lt;br/&gt;&lt;br/&gt;call     count       cpu    elapsed       disk      query    current        rows&lt;br/&gt;------- ------  -------- ---------- ---------- ---------- ----------  ----------&lt;br/&gt;Parse        &lt;/span&gt;5      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;Execute      &lt;/span&gt;5      0.00       0.00          0          0          0           2&lt;span style="color: #000000;"&gt;&lt;br/&gt;Fetch        &lt;/span&gt;1      0.00       0.00          0          7          0          14&lt;span style="color: #000000;"&gt;&lt;br/&gt;------- ------  -------- ---------- ---------- ---------- ----------  ----------&lt;br/&gt;total       &lt;/span&gt;11      0.00       0.00          0          7          0          16&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;Misses in library cache during parse: &lt;/span&gt;2&lt;span style="color: #000000;"&gt;&lt;br/&gt;Misses in library cache during execute: &lt;/span&gt;1&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS&lt;br/&gt;&lt;br/&gt;call     count       cpu    elapsed       disk      query    current        rows&lt;br/&gt;------- ------  -------- ---------- ---------- ---------- ----------  ----------&lt;br/&gt;Parse        &lt;/span&gt;0      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;Execute      &lt;/span&gt;0      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;Fetch        &lt;/span&gt;0      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;------- ------  -------- ---------- ---------- ---------- ----------  ----------&lt;br/&gt;total        &lt;/span&gt;0      0.00       0.00          0          0          0           0&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;Misses in library cache during parse: &lt;/span&gt;0&lt;br/&gt;&lt;br/&gt;    6&lt;span style="color: #000000;"&gt;  user  SQL statements in session.&lt;br/&gt;    &lt;/span&gt;0&lt;span style="color: #000000;"&gt;  internal SQL statements in session.&lt;br/&gt;    &lt;/span&gt;6&lt;span style="color: #000000;"&gt;  SQL statements in session.&lt;br/&gt;    &lt;/span&gt;1&lt;span style="color: #000000;"&gt;  statement EXPLAINed in this session.&lt;br/&gt;********************************************************************************&lt;br/&gt;Trace file: D:\ORACLE\PRODUCT\&lt;/span&gt;10.2.0&lt;span style="color: #000000;"&gt;\DB_1\RDBMS\TRACE/wgods_ora_3940.trc&lt;br/&gt;Trace file compatibility: &lt;/span&gt;10.01.00&lt;span style="color: #000000;"&gt;&lt;br/&gt;Sort options: default&lt;br/&gt;&lt;br/&gt;       &lt;/span&gt;1&lt;span style="color: #000000;"&gt;  session in tracefile.&lt;br/&gt;       &lt;/span&gt;6&lt;span style="color: #000000;"&gt;  user  SQL statements in trace file.&lt;br/&gt;       &lt;/span&gt;0&lt;span style="color: #000000;"&gt;  internal SQL statements in trace file.&lt;br/&gt;       &lt;/span&gt;6&lt;span style="color: #000000;"&gt;  SQL statements in trace file.&lt;br/&gt;       &lt;/span&gt;4&lt;span style="color: #000000;"&gt;  unique SQL statements in trace file.&lt;br/&gt;       &lt;/span&gt;1&lt;span style="color: #000000;"&gt;  SQL statements EXPLAINed using schema:&lt;br/&gt;           ETL.prof$plan_table&lt;br/&gt;             Default table was used.&lt;br/&gt;             Table was created.&lt;br/&gt;             Table was dropped.&lt;br/&gt;      &lt;/span&gt;58&lt;span style="color: #000000;"&gt;  lines in trace file.&lt;br/&gt;       &lt;/span&gt;0  elapsed seconds in trace file.&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;4.3跟踪其它用户的进程，在很多时候我们需要跟踪其它用户的进程，而不是当前用户，可以通过ORACLE提供的系统包&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION来完成。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;例如：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; SID, SERIAL#, USERNAME &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; V$SESSION &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; USERNAME &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;ETL&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt; DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(&lt;span style="color: #800000; font-weight: bold;"&gt;61&lt;/span&gt;,&lt;span style="color: #800000; font-weight: bold;"&gt;76&lt;/span&gt;&lt;span style="color: #000000;"&gt;,TRUE);&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt; DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(&lt;span style="color: #800000; font-weight: bold;"&gt;61&lt;/span&gt;,&lt;span style="color: #800000; font-weight: bold;"&gt;76&lt;/span&gt;,FALSE);&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;&lt;span style="line-height: 19px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;5 利用10046事件&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; SESSION &lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; TRACEFILE_IDENTIFIER &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;10046&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; SESSION &lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; EVENTS&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;10046 trace name context forever, level 8&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; SCOTT.EMP;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; SESSION &lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; EVENTS &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;10046 trace name context off&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;br/&gt;然后你可以用脚本查看追踪文件的位置&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; T.VALUE &lt;span style="color: #808080;"&gt;||&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;/&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt; &lt;span style="color: #808080;"&gt;||&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;LOWER&lt;/span&gt;(&lt;span style="color: #ff00ff;"&gt;RTRIM&lt;/span&gt;(I.INSTANCE, CHR(&lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;))) &lt;span style="color: #808080;"&gt;||&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;_ora_&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt; &lt;span style="color: #808080;"&gt;||&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;P.SPID &lt;/span&gt;&lt;span style="color: #808080;"&gt;||&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;.trc&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; TRACE_FILE_NAME&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;( &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt; P.SPID&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; V$MYSTAT M, V$SESSION S, V$PROCESS P&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; M.STATISTIC# &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #808080;"&gt;AND&lt;/span&gt; S.SID &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; M.SID&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;AND&lt;/span&gt; P.ADDR &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; S.PADDR&lt;br/&gt;&lt;br/&gt;) P,&lt;br/&gt;&lt;br/&gt;( &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt; T.INSTANCE&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; V$THREAD T, V$PARAMETER V&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; V.NAME &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;thread&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #808080;"&gt;AND&lt;/span&gt; (V.VALUE &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt; &lt;span style="color: #808080;"&gt;OR&lt;/span&gt; T.THREAD# &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TO_NUMBER(V.VALUE))&lt;br/&gt;&lt;br/&gt;) I,&lt;br/&gt;&lt;br/&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; VALUE &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; V$PARAMETER &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; NAME&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;user_dump_dest&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) T&lt;br/&gt;&lt;br/&gt;查询结果为wgods_ora_28279.trc文件， 但是去相应目录却没有找到对应的追踪文件，而是如下trace文件：wgods_ora_28279_10046.trc&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;6 利用10053事件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;&amp;nbsp; 有点类似10046，在此略过、&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;7 系统视图&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;通过下面一些系统视图，你可以看到一些零散的执行计划的相关信息，有兴趣的话可以多去研究一下。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; V$SQL_PLAN&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; V$RSRC_PLAN_CPU_MTH&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; V$SQL_PLAN_STATISTICS&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; V$SQL_PLAN_STATISTICS_ALL&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; V$SQLAREA_PLAN_HASH&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; V$RSRC_PLAN_HISTORY&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;三、看懂执行计划&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;1.执行顺序&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;执行顺序的原则是：由上至下，从右向左&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;由上至下：在执行计划中一般含有多个节点，相同级别(或并列)的节点，靠上的优先执行，靠下的后执行&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;从右向左：在某个节点下还存在多个子节点，先从最靠右的子节点开始执行。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;当然，你在PL/SQL工具中也可以通过它提供的功能来查看执行顺序。如下图所示：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242227116646.jpg"&gt;&lt;span style="color: #333333; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: inline; border: 0px;" title="clip_image014" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242227181426.jpg" alt="clip_image014" width="674" height="274" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;2.执行计划中字段解释&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242227269521.jpg"&gt;&lt;span style="color: #333333; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: inline; border: 0px;" title="clip_image016" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242227389803.jpg" alt="clip_image016" width="724" height="681" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;SQL&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;名词解释：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;recursive calls 递归调用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;db block gets 从buffer cache中读取的block的数量&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;当前请求的块数目，当前模式块意思就是在操作中正好提取的块数目，而不是在一致性读的情况下而产生的&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;正常情况下，一个查询提取的块是在查询查询开始的那个时间点上存在的数据库，当前块是在这个时候存在&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;数据块，而不是这个时间点之前或者之后的的数据块数目。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 14px;"&gt;consistent gets  从buffer cache中读取的undo数据的block的数量&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;&lt;span style="font-family: 宋体;"&gt;数据请求总数在回滚段Buffer中的数据一致性读所需要的数据块，，这里的&lt;/span&gt;概念是在你处理你这个操作的时&lt;/span&gt;&lt;span style="font-size: 14px;"&gt;侯需要在一致性读状态上处理多个块，这些块产生的主要原因是因为你在查询过程中，由于其它会话对数据 块进行操作，而对所要查询的块有了修改，但是由于我们的查询是在这些修改之前调用的，所要需要对回滚 段中的数据块的前映像进行查询，以保证数据的一致性。这样就产生了一致性读。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="text-align: right;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;physical reads 物理读 就是从磁盘上读取数据块的数量。其产生的主要原因是：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;1：在数据库高速缓存中不存在这些块。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;2：全表扫描&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;3：磁盘排序&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;redo size &amp;nbsp;DML生成的redo的大小&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;sorts (memory) 在内存执行的排序量&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;sorts (disk)  &amp;nbsp;在磁盘执行的排序量&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;2091 bytes sent via SQL*Net to client 从SQL*Net向客户端发送了2091字节的数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;416 bytes received via SQL*Net from client客户端向SQL*Net发送了416字节的数据。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;参考文档：SQLPlus User&amp;rsquo;s Guide and Reference Release 11.1&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242227579250.jpg"&gt;&lt;span style="color: #333333; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: inline; border: 0px;" title="clip_image018" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205242228162743.jpg" alt="clip_image018" width="550" height="477" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;db block gets 、 consistent gets 、 physical reads这三者的关系可以概括为：逻辑读指的是ORACLE从内存读到的数据块块数量，一般来说是：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;consistent gets + db block gets. 当在内存中找不到所需要的数据块的话，就需要从磁盘中获取，于是就产生了物理读。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;3.具体内容查看&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;1&amp;gt; Plan hash Value&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;这一行是这一条语句的的hash值，我们知道ORACLE对每一条ORACLE语句产生的执行计划放在SHARE POOL里面，第一次要经过硬解析，产生hash值。下次再执行时比较hash值，如果相同就不会执行硬解析。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;2&amp;gt; COST&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;COST没有单位，是一个相对值，是SQL以CBO方式解析执行计划时，供ORACLE来评估CBO成本，选择执行计划用的。没有明确的含义，但是在对比是就非常有用。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;公式：COST=（Single Block I/O COST + MultiBlock I/O Cost + CPU Cost）/ Sreadtim&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;3&amp;gt; 对上面执行计划列字段的解释：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Id: 执行序列，但不是执行的先后顺序。执行的先后根据Operation缩进来判断（采用最右最上最先执行的原则看层次关系，在同一级如果某个动作没有子ID就最先执行。一般按缩进长度来判断，缩进最大的最先执行，如果有2行缩进一样，那么就先执行上面的。）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Operation：当前操作的内容。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Name：操作对象&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Rows：也就是10g版本以前的Cardinality(基数)，Oracle估计当前操作的返回结果集行数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Bytes：表示执行该步骤后返回的字节数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Cost（CPU）：表示执行到该步骤的一个执行成本，用于说明SQL执行的代价。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Time：Oracle 估计当前操作的时间。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;4.谓词说明：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Predicate Information (identified by operation id):&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;---------------------------------------------------&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;2 - filter("B"."MGR" IS NOT NULL)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;4 - access("A"."EMPNO" = "B"."MGR")&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Access: 表示这个谓词条件的值将会影响数据的访问路劲（全表扫描还是索引）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Filter：表示谓词条件的值不会影响数据的访问路劲，只起过滤的作用。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;在谓词中主要注意access，要考虑谓词的条件，使用的访问路径是否正确。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;5、 动态分析&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;如果在执行计划中有如下提示：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Note&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;------------&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;-dynamic sampling used for the statement&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;这提示用户CBO当前使用的技术，需要用户在分析计划时考虑到这些因素。 当出现这个提示，说明当前表使用了动态采样。我们从而推断这个表可能没有做过分析。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;这里会出现两种情况：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;（1） 如果表没有做过分析，那么CBO可以通过动态采样的方式来获取分析数据，也可以或者正确的执行计划。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;（2） 如果表分析过，但是分析信息过旧，这时CBO就不会在使用动态采样，而是使用这些旧的分析数据，从而可能导致错误的执行计划。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;四、表访问方式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;1.Full Table Scan (FTS) 全表扫描&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;2.Index Lookup 索引扫描&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;There are 5 methods of index lookup:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;index unique scan --索引唯一扫描&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;通过唯一索引查找一个数值经常返回单个ROWID，如果存在UNIQUE或PRIMARY KEY约束（它保证了语句只存取单行的话），ORACLE&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;经常实现唯一性扫描&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Method for looking up a single key value via a unique index. always returns a single value, You must supply AT LEAST the leading column of the index to access data via the index. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;index range scan --索引局部扫描&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Index range scan is a method for accessing a range values of a particular column. AT LEAST the leading column of the index must be supplied to access data via the index. Can be used for range operations (e.g. &amp;gt; &amp;lt; &amp;lt;&amp;gt; &amp;gt;= &amp;lt;= between) .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;使用一个索引存取多行数据，在唯一索引上使用索引范围扫描的典型情况是在谓词(WHERE 限制条件)中使用了范围操作符号（如&amp;gt;, &amp;lt; &amp;lt;&amp;gt;, &amp;gt;=, &amp;lt;=,BWTEEN)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;index full scan --索引全局扫描&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Full index scans are only available in the CBO as otherwise we are unable to determine whether a full scan would be a good idea or not. We choose an index Full Scan when we have statistics that indicate that it is going to be more efficient than a Full table scan and a sort. For example we may do a Full index scan when we do an unbounded scan of an index and want the data to be ordered in the index order.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;index fast full scan --索引快速全局扫描，不带order by情况下常发生&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Scans all the block in the index, Rows are not returned in sorted order, Introduced in 7.3 and requires V733_PLANS_ENABLED=TRUE and CBO, may be hinted using INDEX_FFS hint, uses multiblock i/o, can be executed in parallel, can be used to access second column of concatenated indexes. This is because we are selecting all of the index. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;index skip scan --索引跳跃扫描，where条件列是非索引的前提情况下常发生&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Index skip scan finds rows even if the column is not the leading column of a concatenated index. It skips the first column(s) during the search.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;3.Rowid 物理ID扫描&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;This is the quickest access method available.Oracle retrieves the specified block and extracts the rows it is interested in. --Rowid扫描是最快的访问数据方式&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kerrycode/aggbug/2517210.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kerrycode/archive/2012/05/24/2517210.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kerrycode/archive/2012/05/17/2506947.html</id><title type="text">ORACLE数据库链接</title><summary type="text">在ORACLE里面，远程数据访问，像查询、更新等可以通过Database Link来实现。数据库连接需要在建立Database Link的两台机子上都运行Oracle Net(以前叫SQL*NET 和NET 8)。 语法如下1 Database Link 的创建：有两个数据库服务器A/B, 其中A的IP地址为172.20.36.245， 服务器B为本机。服务器B上的数据库实例名为ORCL，在本机上的服务监听配置上有服务器A上实例配置：BIWG_TEST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.36.245)(PORT =</summary><published>2012-05-17T14:43:00Z</published><updated>2012-05-17T14:43:00Z</updated><author><name>潇湘隐者</name><uri>http://www.cnblogs.com/kerrycode/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kerrycode/archive/2012/05/17/2506947.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kerrycode/archive/2012/05/17/2506947.html"/><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;在ORACLE里面，远程数据访问，像查询、更新等可以通过Database Link来实现。数据库连接需要在建立Database Link的两台机子上&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;都运行Oracle Net(以前叫SQL*NET 和NET 8)。 语法如下&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;1 Database Link 的创建：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;有两个数据库服务器A/B, 其中A的IP地址为172.20.36.245， 服务器B为本机。服务器B上的数据库实例名为ORCL，在本机上的服务监听配置上有服务器A上实例配置：&lt;/span&gt;&lt;/p&gt;&lt;div&gt;BIWG_TEST =&lt;br/&gt;&lt;br/&gt;(DESCRIPTION =&lt;br/&gt;&lt;br/&gt;(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.36.245)(PORT = 1521))&lt;br/&gt;&lt;br/&gt;(CONNECT_DATA =&lt;br/&gt;&lt;br/&gt;(SERVER = DEDICATED)&lt;br/&gt;&lt;br/&gt;(SERVICE_NAME = biwg)&lt;br/&gt;)&lt;br/&gt;)&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;实例BIWG_TEST的账号为 WGODS 、 密码为WGODS。&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;下面开始在本机上创建DB Links &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;方法1：&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=CREATE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;CREATE&lt;/a&gt; &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=PUBLIC&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;PUBLIC&lt;/a&gt; &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=DATABASE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;DATABASE&lt;/a&gt; LINK WGODS.ORACLE.COM &lt;br/&gt;&lt;br/&gt;&lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=CONNECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;CONNECT&lt;/a&gt; &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=TO&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;TO&lt;/a&gt; WGODS IDENTIFIED &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=BY&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;BY&lt;/a&gt; WGODS &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=USING&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;USING&lt;/a&gt; '&lt;span style="color: #8b0000;"&gt;BIWG&lt;/span&gt;'&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;CREATE [PUBLIC] DATABASE LINK 数据库链接名 CONNECT TO 用户名 IDENTIFIED BY 密码 USING '本地配置的数据的实例名';&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[public]的意思是：public是全局db link，即该数据库上所有用户都能查询，要sys或者system用户来创建(当然有sysdba权限的用户也可以的)；如果不使用public就是私有db link，只有创建该db link的用户能查询&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;查看连接是否成功&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt; * &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt; DUAL@WGODS.ORACLE.COM &lt;br/&gt;&lt;br/&gt;&lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt; * &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt; REF.TR_WGG_GDAREA_INFO@WGODS.ORACLE.COM &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;方法2：可以不配置服务。&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=CREATE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;CREATE&lt;/a&gt; &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=PUBLIC&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;PUBLIC&lt;/a&gt; &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=DATABASE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;DATABASE&lt;/a&gt; LINK REMOTE_DEVE_HOST&lt;br/&gt;&lt;br/&gt;&lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=CONNECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;CONNECT&lt;/a&gt; &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=TO&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;TO&lt;/a&gt; WGODS IDENTIFIED &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=BY&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;BY&lt;/a&gt; WGODS &lt;br/&gt;&lt;br/&gt;&lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=USING&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;USING&lt;/a&gt; '&lt;span style="color: #8b0000;"&gt;(DESCRIPTION =&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;(ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.36.245)(PORT = 1521))&lt;br/&gt;&lt;br/&gt;(CONNECT_DATA =&lt;br/&gt;&lt;br/&gt;(SERVER = DEDICATED)&lt;br/&gt;&lt;br/&gt;(SERVICE_NAME = biwg)&lt;br/&gt;&lt;br/&gt;)&lt;br/&gt;)'&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;不建议使用这个实现。感觉没有上面方法来的方便&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;查看连接是否成功&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt; * &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt; DUAL@WGODS.ORACLE.COM &lt;br/&gt;&lt;br/&gt;&lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt; * &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt; REF.TR_WGG_GDAREA_INFO@WGODS.ORACLE.COM &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;2 查看当前数据有哪些Database Link？&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt; * &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt; DBA_OBJECTS &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHERE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHERE&lt;/a&gt; OBJECT_TYPE = '&lt;span style="color: #8b0000;"&gt;DATABASE LINK&lt;/span&gt;'&lt;br/&gt;&lt;br/&gt;&lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt; * &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt; DBA_DB_LINKS;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;3 如何返回数据库的GLOBAL_NAME?&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SQL&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SQL&lt;/a&gt;&amp;gt; SHOW PARAMETER GLOBAL_NAME;&lt;br/&gt;&lt;br/&gt;NAME TYPE &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=VALUE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;VALUE&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #008000;"&gt;------------------------------------ ----------- ------------------------------&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;global_names boolean &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FALSE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FALSE&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;或&lt;br/&gt;&lt;br/&gt;&lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt; * &lt;a style="color: #0000ff;" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt; GLOBAL_NAME&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;该参数为TRUE时，你在本地建立的DBLINK名称必须和远程的GLOBAL_NAME一致才行。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;4 删除Database Link&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;DROP [PUBLIC] DATABASE LINK REMOTE_DEVE_HOST;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;会报如下错误： ORA-02024: 未找到数据库连接&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;DROP PUBLIC DATABASE LINK REMOTE_DEVE_HOST;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;正常执行删除Database Link。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;5 设置GLOBAL_NAME值对Database Link的影响&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;SQL&amp;gt; ALTER SYSTEM SET GLOBAL_NAMES = TRUE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;System altered&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;CREATE PUBLIC DATABASE LINK REMOTE_DB&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;CONNECT TO WGODS IDENTIFIED BY WGODS USING 'BIWG'&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;SELECT * FROM DUAL@REMOTE_DB&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;此时报错：ORA-02085:数据库连接 XXXX 到 XXXX&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;SQL&amp;gt; ALTER SYSTEM SET GLOBAL_NAMES = FALSE;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;System altered&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;修改参数值为FALSE后，查询就正常了、&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;6 在DB Link中执行查询会有些限制。你应该避免使用connect by, start with, 以及prior关键字。一些查询使用了这些关键字会很正常， 但是大部分查询会失败&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;7 如何查询&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;SELECT &amp;hellip;&amp;hellip; FROM 表名@数据库链接名&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;8 DB LINK的使用原则（工作中以及网上收集整理的，仅供参考）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;8.1.生产尽量不要使用db link，虽然方便，但这样不利于数据库安全管理&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;8.2.在10g中，BLOB，CLOB在db link中是查不到的，含这种数据类型的，要配合建view使用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;8.3.我们经常可以使用synonym来做一些配置，以提高易读性和安全性&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;8.4.被建立了db link的user，最好不要修改密码，若修改密码要重建db link&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;8.5.db link是单向的&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;8.6 数据库链接名，建议使用SID.SCHEMA的形式，这样方便有多个db link时的识别(建议，个人习惯，非强制性)&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kerrycode/aggbug/2506947.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kerrycode/archive/2012/05/17/2506947.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kerrycode/archive/2012/05/16/2505584.html</id><title type="text">ORA-12154： TNS：could not resolve the connect identifier specified</title><summary type="text">在安装ORACLE安装的时候，报如下错误：ORA-12154： TNS：could not resolve the connect identifier specified。如下图所示： 折腾了很久才找到罪魁祸首：原来在安装数据库时，设置用户密码的时候里面包含了@符号，引起了这个错误，这个错误倒是有点诡异，应该是ORACLE连接DB时就把口令@后面的串当连接字用了。所以切记注意这个，否则很难发现问题。</summary><published>2012-05-16T15:48:00Z</published><updated>2012-05-16T15:48:00Z</updated><author><name>潇湘隐者</name><uri>http://www.cnblogs.com/kerrycode/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kerrycode/archive/2012/05/16/2505584.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kerrycode/archive/2012/05/16/2505584.html"/><content type="html">&lt;p&gt;&lt;font size="2" face="宋体"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="宋体"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;font size="2" face="宋体"&gt;在安装ORACLE安装的时候，报如下错误：ORA-12154： TNS：could not resolve the connect identifier specified。如下图所示：&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205162348134088.jpg"&gt;&lt;font color="#333333" size="2" face="宋体"&gt;&lt;/font&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205162348156955.jpg"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205162348171707.jpg" width="398" height="169" /&gt;&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="宋体"&gt;折腾了很久才找到罪魁祸首：原来在安装数据库时，设置用户密码的时候里面包含了@符号，引起了这个错误，这个错误倒是有点诡异，应该是ORACLE连接DB时就把口令@后面的串当连接字用了。所以切记注意这个，否则很难发现问题。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="宋体"&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kerrycode/aggbug/2505584.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kerrycode/archive/2012/05/16/2505584.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kerrycode/archive/2012/05/16/2505548.html</id><title type="text">Win2003 设置远程连接限制数</title><summary type="text">在开发过程中，很多同事需要连接到一台Win2003服务器，但是连接人数超过了10个，就连接不上了。想设置一下连接限制数，可以如下操作：1：在运行里面输入gpedit.msc后，弹出"本地计算机"策略2：如上所示，选择设置限制连接数量后，在TS允许的最大连接数里设置一个连接数即可。</summary><published>2012-05-16T15:21:00Z</published><updated>2012-05-16T15:21:00Z</updated><author><name>潇湘隐者</name><uri>http://www.cnblogs.com/kerrycode/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kerrycode/archive/2012/05/16/2505548.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kerrycode/archive/2012/05/16/2505548.html"/><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在开发过程中，很多同事需要连接到一台Win2003服务器，但是连接人数超过了10个，就连接不上了。想设置一下连接限制数，可以如下操作：&lt;/p&gt;&lt;p&gt;1：在运行里面输入gpedit.msc后，弹出"本地计算机"策略&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205162320583233.jpg"&gt;&lt;img style="display: inline; border-width: 0px;" title="clip_image002" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205162321168908.jpg" alt="clip_image002" width="869" height="345" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;2：如上所示，选择设置限制连接数量后，在TS允许的最大连接数里设置一个连接数即可。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205162321247494.jpg"&gt;&lt;img style="display: inline; border-width: 0px;" title="clip_image004" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205162321291982.jpg" alt="clip_image004" width="423" height="447" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kerrycode/aggbug/2505548.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kerrycode/archive/2012/05/16/2505548.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kerrycode/archive/2012/05/15/2502622.html</id><title type="text">Rhel-Server 5.5 安装ORACLE10</title><summary type="text">VMWARE + REDHAT + ORA10先说一下环境，操作系统为Microsoft Windows Server 2003，安装的是虚拟机VMware Workstation Version 7.1.2 build-301548，虚拟机上选择安装的是Redhat Enterprise Linux 5。1：安装虚拟机工具：虚拟机工具是VMware虚拟机中自带的一种增强工具，相当于VirtualBox中的增强功能（Sun VirtualBox Guest Additions），可以大幅度的增强虚拟机和主机的交互能力，和显著提供虚拟机的性能。比如，安装虚拟机工具后，虚拟机的显示效果会增强。另一</summary><published>2012-05-15T15:44:00Z</published><updated>2012-05-15T15:44:00Z</updated><author><name>潇湘隐者</name><uri>http://www.cnblogs.com/kerrycode/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kerrycode/archive/2012/05/15/2502622.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kerrycode/archive/2012/05/15/2502622.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;VMWARE + REDHAT + ORA10&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;先说一下环境，操作系统为Microsoft Windows Server 2003，安装的是虚拟机VMware Workstation Version 7.1.2 build-301548，虚拟机上选择安装的是Redhat Enterprise Linux 5。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;1：安装虚拟机工具：虚拟机工具是VMware虚拟机中自带的一种增强工具，相当于VirtualBox中的增强功能（Sun VirtualBox Guest Additions），可以大幅度的增强虚拟机和主机的交互能力，和显著提供虚拟机的性能。比如，安装虚拟机工具后，虚拟机的显示效果会增强。另一个最明显的好处是，比如主机是Windows，虚拟机是Linux，由于文件系统的不同，两者不能进行性文件的直接交换。但是有了虚拟机工具之后，可以把Windows下的一个文件夹挂载到Linux文件系统下，这样就方便了文件的交换。还有就是鼠标也可在虚拟机与主机之前自由移动（不用再按CTRL+ALT），且虚拟机屏幕也可实现全屏化如下所示：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/20120515233339424.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image002" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152333485596.jpg" alt="clip_image002" width="389" height="492" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;关于如何安装虚拟机工作，在虚拟机最下面也会有一行提示，如下图所示，可以直接点击安装虚拟机工具。如下&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152333528231.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: inline; border-width: 0px;" title="clip_image004" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152333525690.jpg" alt="clip_image004" width="244" height="17" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152333596916.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image006" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152334041437.jpg" alt="clip_image006" width="589" height="385" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;你也可以通过下面方法进行安装：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;1. 启动虚拟机中的Linux后，（注意必须是启动虚拟机后）。选择菜单里的VM选项，里面有一个子项是Install VMware Tools，选定它。开始安装&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152334101889.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image008" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152334175000.jpg" alt="clip_image008" width="337" height="278" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;2. 选择菜单VM下Settings，弹出下面窗口，选定镜像文件。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152334278927.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image010" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152334353642.jpg" alt="clip_image010" width="660" height="575" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;3. 进入终端命令窗口：执行mount /dev/cdrom /mnt/cdrom 注意有时会报：mount:mount point /mnt/cdrom does not exist. 需要在目录mnt下创建cdrom目录后（mkdir cdrom），然后执行挂载光驱&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;4. 进入mnt/cdrom目录，你会看到VMwareTools-8.4.4-301548.tar.gz文件，把它拷贝到tmp文件目录下，执行命令：tar xzvf VMwareTools-8.4.4-301548.tar.gz 后解压生成一个文件夹vmware－tools-distrib：，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;5. 在文件夹里面找到vmware-install.pl文件，在命令窗口执行./vmware-install.pl命令后按提示安装。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;6. VMware-tools已经安装成功了，此时你在目录/mnt/下会看到一个hgfs目录。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;二：如何实现主机与虚拟机之间的文件共享&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;如果你安装好虚拟机工具后，这个就非常简单了。在VM菜单里进行，选择setting子项，再选择Options。在窗体的左半部分是不是看到了Shared Folders这么一项，选择Always enable或Enabled until next power off or suspend，选择Add，选择要与客户Linux进行共享的文件夹。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152334443207.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image012" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152334563971.jpg" alt="clip_image012" width="661" height="574" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152335013409.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image014" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152335051028.jpg" alt="clip_image014" width="430" height="424" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;现在已经完成了所有的工作了，在/mnt/hgfs下你会看到添加的文件夹。在windows下向指定的share folders写文件，在Linux客户机里面就能够看到，同样在Linux上写文件在Windows下也能够看到，并且可以修改。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;接下来就开始正式安装数据库了，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;1. 检查和安装必要的软件包&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;[root&lt;span style="color: #800080;"&gt;@localhost&lt;/span&gt; /]&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;rpm -qa|grep binutils&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;binutils&lt;/span&gt;-&lt;span style="color: #800000;"&gt;2.17&lt;/span&gt;.&lt;span style="color: #800000;"&gt;50.0&lt;/span&gt;.&lt;span style="color: #800000;"&gt;6&lt;/span&gt;-&lt;span style="color: #800000;"&gt;14&lt;/span&gt;.el5&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;检查是否安装了包： &lt;/span&gt;&lt;a name="RichViewCheckpoint0"&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;libXp-1.0.0-8.1.el5.i386.rpm，否则后面安装ORACLE会出错的（当然还有检查一些必须的包）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;2. 配置hosts文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;在hosts加入一行：你的主机IP 你的主机名 然后保存退出。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;[root@localhost /]# vi etc/hosts&lt;br/&gt;&lt;br/&gt;10.30.38.166 localhost.localdomain localhost&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;2 配置内核参数等信息：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;编辑etc/sysctl.conf, 你可以看到里面已经有部分内核参数了&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt; Controls the maximum shared segment size, in bytes&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;kernel&lt;/span&gt;.shmmax = &lt;span style="color: #800000;"&gt;4294967295&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt; Controls the maximum number of shared memory segments, in pages&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;kernel&lt;/span&gt;.shmall = &lt;span style="color: #800000;"&gt;268435456&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;我们需要编辑添加的还有如下一些参数&lt;br/&gt;&lt;br/&gt;kernel&lt;/span&gt;.shmmax=&lt;span style="color: #800000;"&gt;536870912&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;kernel&lt;/span&gt;.shmmni=&lt;span style="color: #800000;"&gt;4096&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;kernel&lt;/span&gt;.sem=&lt;span style="color: #800000;"&gt;250&lt;/span&gt; &lt;span style="color: #800000;"&gt;32000&lt;/span&gt; &lt;span style="color: #800000;"&gt;100&lt;/span&gt; &lt;span style="color: #800000;"&gt;128&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;fs&lt;/span&gt;.file-max=&lt;span style="color: #800000;"&gt;65536&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;net&lt;/span&gt;.ipv4.ip_local_port_range=&lt;span style="color: #800000;"&gt;1024&lt;/span&gt; &lt;span style="color: #800000;"&gt;65500&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;net&lt;/span&gt;.core.rmem_default=&lt;span style="color: #800000;"&gt;4194304&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;net&lt;/span&gt;.core.wmem_default=&lt;span style="color: #800000;"&gt;262144&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;net&lt;/span&gt;.core.rmem_max=&lt;span style="color: #800000;"&gt;4194304&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;net&lt;/span&gt;.core.wmem_max=&lt;span style="color: #800000;"&gt;262144&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Shmmax 最大共享内存2GB 物理内存如果小的话可以设置成 536870912.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Shmmni 最小共享内存 4096KB. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Shmall 所有内存大小. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;网上查了一下可以用如下一些命令查看内核参数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;1. /sbin/sysctl -a | grep shm&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;2. /sbin/sysctl -a | grep sem&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;3. /sbin/sysctl -a | grep file-max&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;4. /sbin/sysctl -a | grep ip_local_port_range&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;5. /sbin/sysctl -a | grep rmem_default&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;6. /sbin/sysctl -a | grep rmem_max&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;7. /sbin/sysctl -a | grep wmem_default&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;8. /sbin/sysctl -a | grep wmem_max&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;三：为ORACLE用户设置Shell脚本限制：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[root@localhost /]# vi /etc/security/limits.conf&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152335104088.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image016" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/20120515233515495.jpg" alt="clip_image016" width="519" height="378" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[root@localhost /]# vi etc/pam.d/login&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;添加&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;session required /lib/security/pam_limits.so&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;四：修改bash和ksh的默认配置文件以及cshell的默认登录脚本&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[root@localhost /]# vi etc/profile&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;添加如下脚本&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; [&lt;span style="color: #ff00ff;"&gt;\$USER="oracle"&lt;/span&gt;&lt;span style="color: #000000;"&gt;]; then&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; [&lt;span style="color: #ff00ff;"&gt;\$SHELL="/bin/ksh"&lt;/span&gt;&lt;span style="color: #000000;"&gt;]; then&lt;br/&gt;&lt;br/&gt;ulimit &lt;/span&gt;-p 16384&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;ulimit &lt;/span&gt;-n 65536&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;ulimit &lt;/span&gt;-u 16384 -n 65536&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;fi&lt;br/&gt;&lt;br/&gt;umask &lt;/span&gt;022&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;注意红色部分，由于没有空格，造成后面错误&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;[root&lt;span style="color: #800080;"&gt;@localhost&lt;/span&gt; /]&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt; vi etc/csh.log&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (\&lt;span style="color: #800080;"&gt;$USER&lt;/span&gt; == &lt;span style="color: #000000; font-weight: bold;"&gt;"&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;oracle&lt;/span&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;) then&lt;br/&gt;&lt;br/&gt;limit maxproc &lt;/span&gt;&lt;span style="color: #800000;"&gt;16384&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;limit descriptor &lt;/span&gt;&lt;span style="color: #800000;"&gt;65536&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff;"&gt;umask&lt;/span&gt; &lt;span style="color: #800000;"&gt;022&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;endif&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;五：创建ORACLE用户组，以及安装目录&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;[root&lt;span style="color: #800080;"&gt;@localhost&lt;/span&gt; sbin]&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt; groupadd oinstall&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;[root&lt;/span&gt;&lt;span style="color: #800080;"&gt;@localhost&lt;/span&gt; sbin]&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt; groupadd dba&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;[root&lt;/span&gt;&lt;span style="color: #800080;"&gt;@localhost&lt;/span&gt; sbin]&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt; useradd -m -g oinstall -G dba oracle&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;[root&lt;/span&gt;&lt;span style="color: #800080;"&gt;@localhost&lt;/span&gt; sbin]&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt; cd /&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;[root&lt;/span&gt;&lt;span style="color: #800080;"&gt;@localhost&lt;/span&gt; /]&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt; mkdir -p /home/oracle&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;[root&lt;/span&gt;&lt;span style="color: #800080;"&gt;@localhost&lt;/span&gt; /]&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt; chown -R oracle:oinstall /home/oracle&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;[root&lt;/span&gt;&lt;span style="color: #800080;"&gt;@localhost&lt;/span&gt; /]&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt; chmod -R 775 /home/oracle&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;六：安装JDK1.6 版本&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;结果安装完后，我查看JDK的版本，发现居然是JDK1.4.2&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[root@localhost /]# java -version&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;java version "1.4.2"&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;gij (GNU libgcj) version 4.1.2 20080704 (Red Hat 4.1.2-48)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;Copyright (C) 2006 Free Software Foundation, Inc.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;This is free software; see the source for copying conditions. There is NO&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;查看自带的JDK的相关信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[root@localhost /]# locate jdk&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;/usr/include/xulrunner-sdk-1.9/java/jdk_java_lang_String.h&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[root@localhost /]# rpm -qa | grep gcj&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;java-1.4.2-gcj-compat-1.4.2.0-40jpp.115&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;libgcj-4.1.2-48.el5&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;卸载自带的JDK的信息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[root@localhost /]# rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;卸载rmp安装的JDK版本&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[root@localhost /]#rpm -qa | grep jd&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[root@localhost /]#rpm -e --nodeps jkd-1.4.2*******&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;安装JDK 1.6的步骤如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;1：我把jdk-6u31-linux-i586.bin从WINDOW 2003的目录，拷贝到共享目录\kerryshare&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;2：把jdk安装包从kerryshare拷贝到/usr/java/目录&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[root@localhost /]# cp /mnt/hgfs/kerryshare/jdk-6u31-linux-i586.bin /usr/java/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;3：修改权限，解压jdk安装包&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[root@localhost /]#chmod +x jdk-6u31-linux-i586.bin &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[root@localhost /]#./jdk-6u31-linux-i586.bin&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;4：设置环境变量&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;设置etc/profile文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;JAVA_HOME = /usr/java/jdk1.6.0_31&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;CLASS_PATH =.$JAVA_HOME/lib.tools.jar&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;PATH=$JAVA_HOME/bin:$PATH&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;export JAVA_HOME CLASS_PATH PATH&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;重启后（如果你不想重新系统，可以用命令source /etc/profile使配置文件立即生效）查看配置的环境变量，$JAVA_HOME, $CLASS_PATH 发现是空的问题，仔细检查尝试后，发现居然是JAVA_HOME变量为空，后来的检查后发现=左右存在空格，删除空格后就OK了&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;如果需要JDK在所有的用户中使用，可以这样配置，在/etc/profile.d/java.sh 中配置上面的内容&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;JAVA_HOME=/usr/java/jdk1.6.0_31&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;CLASS_PATH=.$JAVA_HOME/lib.tools.jar&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;PATH=$JAVA_HOME/bin:$PATH&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;export JAVA_HOME CLASS_PATH PATH&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;5：删除tmp目录jdk安装包以及解压后的文件夹&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;六：设置ORACLE环境变量&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;首先用su - oracle 切换到oracle账号下，然后在.bash_profile文件设置一些环境变量，如下所示&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #000000;"&gt;export PATH&lt;br/&gt;&lt;br/&gt;export JAVA_HOME&lt;/span&gt;=/usr/java/jdk1.&lt;span style="color: #800000;"&gt;6&lt;/span&gt;.&lt;span style="color: #000000;"&gt;0_31&lt;br/&gt;&lt;br/&gt;export ORACLE_BASE&lt;/span&gt;=/home/&lt;span style="color: #000000;"&gt;oracle&lt;br/&gt;&lt;br/&gt;export ORACLE_HOME&lt;/span&gt;=&lt;span style="color: #800080;"&gt;$ORACLE_BASE&lt;/span&gt;/product/&lt;span style="color: #000000;"&gt;dbhome_1&lt;br/&gt;&lt;br/&gt;export ORACLE_SID&lt;/span&gt;=&lt;span style="color: #000000;"&gt;wgods&lt;br/&gt;&lt;br/&gt;export ORACLE_OWNER&lt;/span&gt;=&lt;span style="color: #000000;"&gt;oracle&lt;br/&gt;&lt;br/&gt;export PATH&lt;/span&gt;=&lt;span style="color: #800080;"&gt;$ORACLE_HOME&lt;/span&gt;/bin:&lt;span style="color: #800080;"&gt;$PATH&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;export PATH&lt;/span&gt;=&lt;span style="color: #800080;"&gt;$JAVA_HOME&lt;/span&gt;/bin:&lt;span style="color: #800080;"&gt;$PATH&lt;/span&gt;:&lt;span style="color: #800080;"&gt;$ORACLE_HOME&lt;/span&gt;/Apache/Apache/&lt;span style="color: #000000;"&gt;bin&lt;br/&gt;&lt;br/&gt;LD_LIBRARY_PATH&lt;/span&gt;=&lt;span style="color: #800080;"&gt;$ORACLE_HOME&lt;/span&gt;/lib:lib:/usr/lib:/usr/&lt;span style="color: #0000ff;"&gt;local&lt;/span&gt;/&lt;span style="color: #000000;"&gt;lib&lt;br/&gt;&lt;br/&gt;export LD_LIBRARY_PATH&lt;br/&gt;&lt;br/&gt;CLASSPATH&lt;/span&gt;=&lt;span style="color: #800080;"&gt;$ORACLE_HOME&lt;/span&gt;/JRE:&lt;span style="color: #800080;"&gt;$ORACLE_HOME&lt;/span&gt;/jlib:&lt;span style="color: #800080;"&gt;$ORACLE_HOME&lt;/span&gt;/rdbms/&lt;span style="color: #000000;"&gt;jlib&lt;br/&gt;&lt;br/&gt;export CLASSPATH&lt;/span&gt;=&lt;span style="color: #800080;"&gt;$CLASSPATH&lt;/span&gt;:&lt;span style="color: #800080;"&gt;$ORACLE_HOME&lt;/span&gt;/network/&lt;span style="color: #000000;"&gt;jlib&lt;br/&gt;&lt;br/&gt;export ORA_NLS33&lt;/span&gt;=&lt;span style="color: #800080;"&gt;$ORACLE_HOME&lt;/span&gt;/ocommon/nls/admin/data&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;七：把下载的安装文件10201_database_linux32.zip放到共享目录kerryshare下，然后把文件复制到tmp目录下&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;oracle@localhost /]$ cp -r /mnt/hgfs/kerryshare/10201_database_linux32.zip /tmp&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;输入命令&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;oracle@localhost /]$ unzip /tmp/10201_database_linux32.zip&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;查看安装的帮助信息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152335199019.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image018" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152335245110.jpg" alt="clip_image018" width="586" height="441" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152335331677.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image020" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152335446868.jpg" alt="clip_image020" width="586" height="521" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;执行如下操作&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152335545321.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image022" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152336008248.jpg" alt="clip_image022" width="588" height="439" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;提示检查操作系统版本，必须是redhat-3,redhat-4， 不支持redhat-5版本。因为oracle 的官方只支持到REDHAT4为止，所以要修改版本说明。把Red Hat Enterprise Linux Server release 5.4 (Tikanga)这一行注释掉，前面加上一行Red Hat Enterprise Linux Server release 4 (Tikanga)。当然ORACLE安装完成后要修改回来。Red Hat Enterprise Linux Server release 4 (Tikanga) 必须为redhat-release文件的第一行，否则安装时还会报警告。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152336149304.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image024" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152336237441.jpg" alt="clip_image024" width="591" height="525" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;在终端命令输入&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;[root@localhost database]# xhost + localhost&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;localhost being added to access control list&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;上述问题解决&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;如果缺少了包&lt;/span&gt;&lt;a name="RichViewCheckpoint1"&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;libXp-1.0.0-8.1.el5.i386.rpm，就会报如下错误&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/20120515233633845.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image026" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152336432787.jpg" alt="clip_image026" width="583" height="506" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152336518439.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image030" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152336589664.jpg" alt="clip_image030" width="588" height="506" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/20120515233706376.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image032" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152337169909.jpg" alt="clip_image032" width="650" height="510" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152337263836.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image034" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/20120515233742233.jpg" alt="clip_image034" width="651" height="510" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152337536013.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image036" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152338017596.jpg" alt="clip_image036" width="652" height="512" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152338118557.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image038" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152338189368.jpg" alt="clip_image038" width="653" height="509" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: small;"&gt;&lt;span style="line-height: 19px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152339058908.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image042" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152339199092.jpg" alt="clip_image042" width="653" height="511" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152339276248.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image044" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152339365258.jpg" alt="clip_image044" width="655" height="516" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152339463645.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image046" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152340029.jpg" alt="clip_image046" width="654" height="516" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152340171522.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image048" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152340317004.jpg" alt="clip_image048" width="654" height="514" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152340403505.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image050" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152340519907.jpg" alt="clip_image050" width="647" height="513" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152341003900.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image052" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/20120515234111826.jpg" alt="clip_image052" width="648" height="513" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152341206521.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image054" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/20120515234133957.jpg" alt="clip_image054" width="648" height="515" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152341447326.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image056" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152342007768.jpg" alt="clip_image056" width="650" height="509" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152342132237.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image058" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152342228455.jpg" alt="clip_image058" width="650" height="514" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/20120515234230105.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image060" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152342398134.jpg" alt="clip_image060" width="652" height="526" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152342527827.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image062" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152343004493.jpg" alt="clip_image062" width="650" height="506" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152343133978.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image064" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152343247457.jpg" alt="clip_image064" width="653" height="518" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152343309371.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image066" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152343367631.jpg" alt="clip_image066" width="554" height="374" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152343419545.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image068" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152343471459.jpg" alt="clip_image068" width="552" height="413" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152343543731.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image070" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152344014150.jpg" alt="clip_image070" width="589" height="441" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/201205152344088375.jpg"&gt;&lt;span style="color: #000000; font-family: 宋体; font-size: small;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image072" src="http://images.cnblogs.com/cnblogs_com/kerrycode/201205/2012051523442185.jpg" alt="clip_image072" width="647" height="508" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kerrycode/aggbug/2502622.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kerrycode/archive/2012/05/15/2502622.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kerrycode/archive/2012/05/13/2454614.html</id><title type="text">ORACLE约束总结</title><summary type="text">你对ORACLE约束的了解如何？比较模糊还是相当透彻？如果你对下面几个问题了如指掌的话，恭喜你，你已经对约束掌握得比较好了，不用看这篇文章了。ORACLE的约束有啥功能作用？ 有哪些类型约束（不同版本ORACLE是否不同）？视图有约束吗？约束是否会影响SQL性能？ 约束信息存储在哪些系统视图、数据字典中？约束能否修改名称？能否禁用约束？延迟约束有啥好处.......约束定义约束是强加在表上的规则或条件。确保数据库满足业务规则。保证数据的完整性。当对表进行DML或DDL操作时，如果此操作会造成表中的数据违反约束条件或规则的话，系统就会拒绝执行这个操作。约束可以是列一级别的 也可以是表级别的。定义</summary><published>2012-05-13T00:36:00Z</published><updated>2012-05-13T00:36:00Z</updated><author><name>潇湘隐者</name><uri>http://www.cnblogs.com/kerrycode/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kerrycode/archive/2012/05/13/2454614.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kerrycode/archive/2012/05/13/2454614.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;你对ORACLE约束的了解如何？比较模糊还是相当透彻？如果你对下面几个问题了如指掌的话，恭喜你，你已经对约束掌握得比较好了，不用看这篇文章了。ORACLE的约束有啥功能作用？ 有哪些类型约束（不同版本ORACLE是否不同）？视图有约束吗？约束是否会影响SQL性能？ 约束信息存储在哪些系统视图、数据字典中？约束能否修改名称？能否禁用约束？延迟约束有啥好处.......&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;&lt;strong&gt;约束定义&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;约束是强加在表上的规则或条件。确保数据库满足业务规则。保证数据的完整性。当对表进行DML或DDL操作时，如果此操作会造成表中的数据违反约束条件或规则的话，系统就会拒绝执行这个操作。约束可以是列一级别的 也可以是表级别的。定义约束时没有给出约束的名字，ORACE系统将为该约束自动生成一个名字，其格式为SYS_Cn，其中n为自然数(强烈建议各位在创建表或增加约束时，给约束定义名称。).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;约束功能&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;约束的功能：实现一些业务规则，防止无效的垃圾数据进入数据库，维护数据库的完整性(完整性指正确性与一致性)。从而使数据库的开发和维护都更加容易。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;约束分类&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="font-family: 宋体; font-size: 12px;"&gt;约束分为6类： 非空（NOT NULL）约束、 唯一（UNIQUE）约束、主键（PRIMARY KEY）约束、外键（FOREIGN KEY）约束、条件（CHECK）约束、REF约束。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;非空（NOT NULL）约束：顾名思义，所约束的列不能为NULL值。否则就会报错&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;唯一（UNIQUE）约束：在表中每一行中所定义的这列或这些列的值都不能相同。必须保证唯一性。否则就会违法约束条件。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 主键（PRIMARY KEY）约束：唯一的标识表中的每一行，不能重复，不能为空。 创建主键或唯一约束后，ORACLE会自动创建一个与约束同名的索引（UNIQUENES为UNIQUE唯一索引）。需要注意的是：每个表只能有且有一个主键约束。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;外键（FOREIGN KEY）约束：用来维护从表（Child Table）和主表（Parent Table）之间的引用完整性. 外键约束是个有争议性的约束，&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;它一方面能够维护数据库的数据一致性，数据的完整性。防止错误的垃圾数据入库； 另外一方面它会增加表插入、更新等SQL性能的额外开销，不少系统里面通过业务逻辑控制来取消外键约束。例如在数据仓库中，就推荐禁用外键约束。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;条件（CHECK）约束：表中每行都要满足该约束条件。条件约束既可以在表一级定义也可以在列一级定义。在一列上可以定义任意多个条件约束。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;REF约束的定义：REF column by definition references an object in another object type or in a relational table. A REF constraint lets you further describe the relationship between the REF column and the object it references.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; ORACLE 11 数据库的约束类型如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/73542/2012041723214331.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;ORACLE 10 数据库的约束类型如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://pic002.cnblogs.com/images/2012/73542/2012041723220731.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;在oracle 官方文档http://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_1037.htm下&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;C&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;(check constraint on a table)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;P&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;(primary key)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;U&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;(unique key)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;R&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;(referential integrity)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;V&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;(with check option, on a view)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;O&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;(with read only, on a view)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;a href="http://docs.oracle.com/cd/B28359_01/server.111/b28286/clauses002.htm"&gt;http://docs.oracle.com/cd/B28359_01/server.111/b28286/clauses002.htm&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;a href="http://docs.oracle.com/cd/B28359_01/server.111/b28320/statviews_1044.htm#REFRN20047"&gt;http://docs.oracle.com/cd/B28359_01/server.111/b28320/statviews_1044.htm#REFRN20047&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;C&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;Check constraint on a table&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;P&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;Primary key&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;U&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;Unique key&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;R&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;Referential integrity&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;V&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;With check option, on a view&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;O&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;With read only, on a view&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;H&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;Hash expression&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;F&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;Constraint that involves a REF column&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;S&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;Supplemental logging&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;对于H、S类型，尚不清楚情况，而且从上面我在11g数据库实验结果看，也没发现这两种类型。(有了解的朋友可以告知一二)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt; 约束命名规范&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 约束名称建议自己定义一套命名规则，否则使用系统生成的约束名，很难能把它和对应的表、字段联系起来。&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 非空约束 NN_表名_列名 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 唯一约束 UK_表名_列名&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 主键约束 PK_表名&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 外键约束 FK_表名_列名&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 条件约束 CK_表名_列名&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 默认约束 DF_表名_列名&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;如果约束名称超过32位长度，建议应该缩写表名，而不应用NN_表名_数字。不过具体视情况而定，很多时候 DF_表名_列名 这样命名，往往超出了32字符。所以有时候需要缩写表面或是采用其它规则。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;约束操作&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;约束管理&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; &amp;nbsp;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;创建各类约束&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;先看一下如何创建主键约束&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt; "DM"."DEPT" &lt;br/&gt;(    &lt;br/&gt;               "DEPTNO"     &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NUMBER&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;,&lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;KEY&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;br/&gt;               "DNAME"      &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR2&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;14&lt;/span&gt;&lt;span style="color: #000000;"&gt;), &lt;br/&gt;               "LOC"        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR2&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;13&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;br/&gt;)   TABLESPACE "TBS_DM_DAT" ;&lt;br/&gt;  &lt;br/&gt;COMMENT &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt; "DM"."DEPT" &lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;部门表&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;                    &lt;br/&gt;                                                             &lt;br/&gt;COMMENT &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;COLUMN&lt;/span&gt; "DM"."DEPT"."DEPTNO"        &lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;  &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;部门编号&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;    &lt;br/&gt;                                                             &lt;br/&gt;COMMENT &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;COLUMN&lt;/span&gt; "DM"."DEPT"."DNAME"         &lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;  &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;部门名称&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;    &lt;br/&gt;                                                             &lt;br/&gt;COMMENT &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; CLOUMN "DM"."DEPT"."LOC"           &lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;  &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;部门所在地方&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;此时它的约束名称是系统创建的。如图所示：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041723335746.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;如果我们以下面的脚本创建，此时约束如下所示&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt; "DM"."DEPT" &lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;span style="color: #000000;"&gt;(    &lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt;                "DEPTNO"         　 &lt;span style="color: #0000ff;"&gt;NUMBER&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;,&lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;), &lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt;                "DNAME"         &lt;span style="color: #0000ff;"&gt;VARCHAR2&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;14&lt;/span&gt;&lt;span style="color: #000000;"&gt;)　 , &lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt;                "LOC"             　&lt;span style="color: #0000ff;"&gt;VARCHAR2&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;13&lt;/span&gt;&lt;span style="color: #000000;"&gt;)　 , &lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt;                &lt;span style="color: #0000ff;"&gt;CONSTRAINT&lt;/span&gt; "PK_DEPT" &lt;span style="color: #0000ff;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;KEY&lt;/span&gt; ("DEPTNO") USING &lt;span style="color: #0000ff;"&gt;INDEX&lt;/span&gt;&lt;span style="color: #000000;"&gt; TABLESPACE TBS_DM_IN&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; &lt;span style="color: #000000;"&gt;)   TABLESPACE "TBS_DM_DAT" ;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt;  &lt;br/&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;   &lt;br/&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;   &lt;br/&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt; COMMENT &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt; "DM"."DEPT" &lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;部门表&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt; COMMENT &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;COLUMN&lt;/span&gt; "DM"."DEPT"."DEPTNO"        　 &lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;  &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;部门编号&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt; COMMENT &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;COLUMN&lt;/span&gt; "DM"."DEPT"."DNAME"            &lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;  &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;部门名称&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt; COMMENT &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; CLOUMN "DM"."DEPT"."LOC"              &lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt;  &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;部门所在地方&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;   &lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img style="font-family: 宋体; font-size: 12px;" src="http://pic002.cnblogs.com/images/2012/73542/2012041723343612.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;如果一个表的约束类型比较多，你会看到一堆SYS_CN这样的约束，如果不仔细核对后面的字段，很难一眼看出约束类型、约束对应字段。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px; color: #ff00ff;"&gt;主键约束的限制&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;文档原文如下：&lt;/span&gt; &lt;span style="font-family: 宋体; font-size: 12px; line-height: 18px;"&gt;(翻译在下)&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; Restrictions on Primary Key Constraints Primary constraints are subject to the following restrictions:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;A table or view can have only one primary key.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 一个表或视图有且只有一个主键&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;None of the columns in the primary key can be LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIMESTAMP WITH TIME ZONE, or user-defined type. However, the primary key can contain a column of TIMESTAMP WITH LOCAL TIME ZONE.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 主键字段不能为LOB、LOG、LOG RAW、VARRAY、NESTED TABLE、BFILE、REF、TIMESTAMP WITH TIME ZONE或用户定义类型。然而它可以包含TIMESTAMP WITH LOCAL TIME ZONE类型的字段。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;The size of the primary key cannot exceed approximately one database block.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 主键大小不能超过一个数据块大小。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;A composite primary key cannot have more than 32 columns.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 主键组合键不能超过32列。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;You cannot designate the same column or combination of columns as both a primary key and a unique key.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 你不能指定一列或组合列既是主键又是唯一键。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;You cannot specify a primary key when creating a subview in an inheritance hierarchy. The primary key can be specified only for the top-level (root) view.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 创建一个继承层次结构中的子视图时，你不能指定一个主键。主键可以唯一指定的顶层（根）视图。&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt; 外键约束&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; ALTER TABLE childTable&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;ADD CONSTRAINT FK_xxxx_xxx&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;FOREIGH KEY(columnName)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;REFERENCES parentTalbe(primaryKeyColumn) [ON DELETE CASCADE|SET NULL];&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;ON DELETE SET NULL子句：当主表中的一行数据被删除时，Oracle系统会自动地将所有从表中依赖于它的数据记录的外键改成空值；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;ON DELETE CASCADE：当主表中的一行数据被删除时，Oracle系统会自动地将所有从表中依赖于它的数据记录删除；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px; color: #ff00ff;"&gt;注：如果在外键定义中使用了ON DELETE SET NULL 或ON DELETE CASCADE，无论删除操作是在父表这一端还是子表这一端都不会产生违反引用完整性的问题，但是却留下了安全隐患。这两个子句要谨慎使用，只有在不得已时使用，谨记谨记！！！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;外键约束对DML与DDL的影响：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;INSERT：只有操作是在子表或从表这一端时才会产生违反引用完整性约束的问题，父表则不然。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;DELETE：只有操作是在父表或主表这一端时才会产生违反引用完整性约束的问题，子表则不然。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;UPDATE：子表父表直接操作都会违反引用完整性约束。两种解决方法：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;1）先更新子表的引用列为空，再更新父表的主键的列的值，然后把子表的引用列更新成新的父表的值；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;2）使用ON DELETE SET NULL，先更新父表，然后将子表外键为空的记录更新为新的值。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;DDL语句：DROP TABLE与TRUNCATE TABLE，操作父表，违反引用完整性约束，子表则不然。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;外键约束的限制：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;Restrictions on Foreign Key Constraints Foreign key constraints are subject to the following restrictions:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;None of the columns in the foreign key can be of LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIMESTAMP WITH TIME ZONE, or user-defined type. However, the primary key can contain a column of TIMESTAMP WITH LOCAL TIME ZONE.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;外键字段不能为LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIMESTAMP WITH TIME ZONE, or user-defined type类型，主键可以包含数据类型为TIMESTAMP WITH LOCAL TIME ZONE的字段。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;The referenced unique or primary key constraint on the parent table or view must already be defined.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;引用唯一或主键约束，必须是父表中已经定义的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;A composite foreign key cannot have more than 32 columns.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;外键的组合列不能超过32列。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;The child and parent tables must be on the same database. To enable referential integrity constraints across nodes of a distributed database, you must use database triggers. See CREATE TRIGGER.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 字表和父表必须在同一个数据库。分布式数据库中，外键不能跨节点，但触发器可以&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;If either the child or parent object is a view, then the constraint is subject to all restrictions on view constraints. See "View Constraints".&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;You cannot define a foreign key constraint in a CREATE TABLE statement that contains an AS subquery clause. Instead, you must create the table without the constraint and then add it later with an ALTER TABLE statement.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 你不能在CREATE TABLE语句中包含AS子查询子句定义一个外键约束。相反，你必须创建一个没有约束的表，然后添加ALTER TABLE语句。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;加上一些类似其它约束的限制．&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041723372121.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;条件约束&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041723375980.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;非空约束&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 非空约束的限制：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 1： 你不能在视图约束上指定字段为NULL或NOT NULL值&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 2： 你不能指定一个对象的属性为NULL或NOT NULL。相反，而应使用的IS [NOT]&amp;nbsp;NULL条件CHECK约束&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 条件约束中的条件与查询语句中的条件相同，但是不能包括以下内容：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 1）CURRVAL,NETXTVAL,LEVEL和ROWNUM这样的伪列（PSEUDOCOLUMNS）；&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 2）引用其它行中值的查询语句；&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 3）SYSDATE,USER,USERENV和UID的函数调用。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 文档原文如下：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; Restrictions on NOT NULL Constraints NOT NULL constraints are subject to the following restrictions:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;You cannot specify NULL or NOT NULL in a view constraint.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;You cannot specify NULL or NOT NULL for an attribute of an object. Instead, use a CHECK constraint with the IS [NOT] NULL condition.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041723390688.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;唯一约束&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;唯一约束的限制：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;文档原文如下：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; Restrictions on Unique Constraints Unique constraints are subject to the following restrictions:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;None of the columns in the unique key can be of LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, OBJECT, REF, TIMESTAMP WITH TIME ZONE, or user-defined type. However, the unique key can contain a column of TIMESTAMP WITH LOCAL TIME ZONE.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 当字段类型为LOB、LOG、LONG RAW、 VARRAY、NESTED TABLE、OBJECT、REF、TIMESTAMP、用户定义类型时，不能在字段上定义唯一性约束。当数据类型为TIMESTAMP WITH LOCAL TIME ZONE&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;A composite unique key cannot have more than 32 columns.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 组合字段定义的唯一索引，字段个数不能超过32个&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;You cannot designate the same column or combination of columns as both a primary key and a unique key.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 你不能指定同一字段或组合字段即为主键又是唯一键&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;You cannot specify a unique key when creating a subview in an inheritance hierarchy. The unique key can be specified only for the top-level (root) view.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041723400679.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt; 约束管理&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt; 删除约束&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt; DM.EMP&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;DROP&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;CONSTRAINT&lt;/span&gt;&lt;span style="color: #000000;"&gt; SYS_C00115525;&lt;br/&gt;&lt;br/&gt;CASCADE子句用来删除存在有完整性关系的约束。当然你也可以用如下语法&lt;br /&gt;&lt;br /&gt;&lt;span data-mce-=""&gt;&lt;span style="color: #333399;"&gt;ALTER TABLE&lt;/span&gt; DM.EMP&lt;/span&gt;&lt;br /&gt;&lt;span data-mce-=""&gt;&lt;span style="color: #000080;"&gt;DROP UNIQUE &lt;/span&gt;(COMM);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;添加约束&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #000000;"&gt;添加非空约束&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt; DM.EMP&lt;br/&gt;MODIFY(MGR &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CONSTRAINT&lt;/span&gt; CK_EMP_MGR &lt;span style="color: #808080;"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;br/&gt;添加其他约束&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt; DM.EMP&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ADD&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;CONSTRAINT&lt;/span&gt; CK_EMP_SAL &lt;span style="color: #0000ff;"&gt;CHECK&lt;/span&gt;(SAL &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt; &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; SAL &lt;span style="color: #808080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;20000&lt;/span&gt;);&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt; 重命名约束&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt; &lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt; METAONE.T1&lt;br/&gt;RENAME &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CONSTRAINT&lt;/span&gt; SYS_C0059699 &lt;span style="color: #0000ff;"&gt;TO&lt;/span&gt; PK_T1&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;约束维护&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;禁用约束&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt; 表 DISABLE &lt;span style="color: #0000ff;"&gt;CONSTRAINT&lt;/span&gt; 约束名 &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;CASCADE&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt; DM.EMP&lt;br/&gt;DISABLE &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CONSTRAINT&lt;/span&gt;&lt;span style="color: #000000;"&gt; UK_EMP_COMM;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt; TEST DISABLE &lt;span style="color: #0000ff;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;KEY&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;CASCADE&lt;/span&gt;;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;参数CASCADE子句用来关闭存在有完整性关系的约束，比如DISABLE一个主键，如果没有CASCADE子句就会出错，此时使用CASCADE子句DISABLE主键可以将该主键与相关外键一起DISABLE掉。&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;使用的情况：例如在数据库系统中大规模装入数据时，为了系统的效率您不得不牺牲数据的一致性来关闭一些约束，甚至删除一些约束&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;将主表主键禁止的同时，也将禁止依赖于此主键的外键禁止了．&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 使用上面脚本禁用约束的时候会删除索引，如果你想禁用约束的时候，保留索引，可以使用如下脚本(当然你再启用约束的时候会重新重建索引，这对大表显然开销相当大)&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt; DM.EMP&lt;br/&gt;DISABLE &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CONSTRAINT&lt;/span&gt; UK_EMP_COMM KEEP &lt;span style="color: #0000ff;"&gt;INDEX&lt;/span&gt;;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;启用约束&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; 如果关闭主键约束时使用了CASCADE，此时使用ENABLE不会将主键约束与外键约束同时打开，只能对主键约束与外键约束分别使用ENABLE CONSTRAINT 子句打开。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;推迟约束&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; Deferring Constraint Checks&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;当前事务的Constraint Checks全部推迟&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; SET CONSTRAINTS ALL DEFERRED;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; SET CONSTRAINT XXX DEFERRED;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;当前会话的Constraint Checks．&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; ALTER SSSSION SET CONSTRAINTS ALL deferred;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt; ALTER SSSSION SET CONSTRAINT xxx deferred;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 楷体; font-size: 14px;"&gt;约束信息&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBA_CONSTRAINTS;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; ALL_CONSTRAINTS;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; USER_CONSTRAINTS;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; DBA_CONS_COLUMNS;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; ALL_CONS_COLUMNS;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; USER_CONS_COLUMNS;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;约束有四种状态：ENABLE、VALID、INVALID、DISABLE&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;约束的检查机制&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;IMMEDIATE语句级：Oracle performs its constraint checking after the statement has been completely executed.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;DEFERRED(事务级)：&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;A constraint is deferred if the system checks that it is satisfied only on commit. If a deferred constraint is violated, then commit causes the transaction to rollback;(推迟到事务提交时才检查约束,谨慎使用)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&lt;strong&gt;使用约束建议&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 关于约束的使用建议，网上有这么一些建议，我觉得挺有用的。大家可以参考一下&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1、如果在Oracle提供的几种约束和自定义的程序（触发器、过程或函数）两者之间有选择化，应尽可能使用Oracle的约束；&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2、应该在创建表的时候就定义好所需的各种Oracle约束。如果没有的话，应尽可能早地加上所需要的Oracle约束，这样会使系统更可靠，更容易维护；（这个视具体情况而言）&lt;br /&gt;&amp;nbsp; &amp;nbsp; 3、Oracle系统进行过多的约束检查会大大的降低Oracle数据库系统的效率；&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;&lt;span style="font-size: 12px; line-height: 18px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kerrycode/aggbug/2454614.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kerrycode/archive/2012/05/13/2454614.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kerrycode/archive/2012/04/23/2466980.html</id><title type="text">ORA-27125: unable to create shared memory segment</title><summary type="text">平台环境：Linux Red Hat Enterprise Linux Server release 6.0 (Santiago)数据库版本：Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi安装好ORALCE数据库后，启动数据库就会报如下错误参考http://www.eygle.com/archives/2011/12/hugepageshugetl.html 文章，说跟hugetbl有关，只需按如下操作[root@DB-Server ~]#id oracle uid=501(oracle) gid=502(oin</summary><published>2012-04-23T11:38:00Z</published><updated>2012-04-23T11:38:00Z</updated><author><name>潇湘隐者</name><uri>http://www.cnblogs.com/kerrycode/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kerrycode/archive/2012/04/23/2466980.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kerrycode/archive/2012/04/23/2466980.html"/><content type="html">&lt;p&gt;平台环境：Linux Red Hat Enterprise Linux Server release 6.0 (Santiago)&lt;/p&gt;&lt;p&gt;数据库版本：Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi&lt;/p&gt;&lt;p&gt;&lt;br /&gt;安装好ORALCE数据库后，启动数据库就会报如下错误&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012042319345847.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;参考&lt;a href="http://www.eygle.com/archives/2011/12/hugepageshugetl.html"&gt;http://www.eygle.com/archives/2011/12/hugepageshugetl.html&lt;/a&gt; 文章，说跟hugetbl有关，只需按如下操作&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;[root&lt;span style="color: #800080;"&gt;@DB&lt;/span&gt;-Server ~]&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;id oracle&lt;/span&gt;&lt;br/&gt; uid=&lt;span style="color: #800000;"&gt;501&lt;/span&gt;(oracle) gid=&lt;span style="color: #800000;"&gt;502&lt;/span&gt;(oinstall) groups=&lt;span style="color: #800000;"&gt;502&lt;/span&gt;(oinstall),&lt;span style="color: #800000;"&gt;501&lt;/span&gt;&lt;span style="color: #000000;"&gt;(dba)&lt;br/&gt;&lt;br/&gt;[root&lt;/span&gt;&lt;span style="color: #800080;"&gt;@DB&lt;/span&gt;-Server ~]&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;echo 501 &amp;gt; /proc/sys/vm/hugetlb_shm_group&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;然后重启数据库，问题解决，但是我发现数据库服务器重启后，这个问题又会重现，又必须处理上述命令，才能成功启动数据库。治标不治本&lt;/p&gt;&lt;p&gt;参考&lt;a href="http://wiki.debian.org/Hugepages"&gt;http://wiki.debian.org/Hugepages&lt;/a&gt;后，其实只须在/etc/sysctl.conf下设置一下hugetlb_shm_group即可一劳永逸的解决这个问题：&lt;/p&gt;&lt;p&gt;vm.hugetlb_shm_group&amp;nbsp; = 501&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kerrycode/aggbug/2466980.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kerrycode/archive/2012/04/23/2466980.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kerrycode/archive/2012/04/17/2454507.html</id><title type="text">用SYS本地登录或远程登录引起ORA-01031错误</title><summary type="text">"历史总是上演惊人的相似", 在技术开发过程中，你也会总会碰到惊人相似的问题，这段时间我就碰到了”ORA-01031:insufficient privileges 权限不足”这个错误多次，一次是自己，一次是同事碰到的，顺便整理了下这个知识点。情况一：如果数据库实例安装在服务器A上，你用管理员权限Administrator登录后，使用SQL&gt; conn system/manage as sysdba登录 没有问题。但是如果你在服务器A上建立一个etl账号，使它率属于Remote Desktop Users 和Users 组，如下所示：此时你用sys账号登录数据库时，就</summary><published>2012-04-17T14:18:00Z</published><updated>2012-04-17T14:18:00Z</updated><author><name>潇湘隐者</name><uri>http://www.cnblogs.com/kerrycode/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kerrycode/archive/2012/04/17/2454507.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kerrycode/archive/2012/04/17/2454507.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;"历史总是上演惊人的相似", 在技术开发过程中，你也会总会碰到惊人相似的问题，这段时间我就碰到了&amp;rdquo;ORA-01031:insufficient privileges &amp;nbsp;权限不足&amp;rdquo;这个错误多次，一次是自己，一次是同事碰到的，顺便整理了下这个知识点。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;情况一：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;如果数据库实例安装在服务器A上，你用管理员权限Administrator登录后，使用SQL&amp;gt; conn system/manage as sysdba登录 没有问题。但是如果你在服务器A上建立一个etl账号，使它率属于Remote Desktop Users 和Users 组，如下所示：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041722035076.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;此时你用sys账号登录数据库时，就会报ORA-01031:insufficient privileges错误，退出etl账号，用管理员登录给etl账号赋予率属于Oracle DBA Group的权限&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041722043749.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;然后用etl账号登录，问题解决了，如果你赋予etl账号管理员组权限，但是没有ora_dba权限，如下所示， 结果会怎样？答案是依然会报权限不足的错误&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041722052647.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;情况二：此时我在远程机器B上，我使用sys账号远程登录时报ORA-01031:insufficient privileges或ORA-01017: invalid username/password; logon denied错误。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;首先去检查下sqlnet.ora文件下是否有SQLNET.AUTHENTICATION_SERVICES= (NTS)设置，如何已经配置了这个选项。那么我们接下来检查下一下密码文件参数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041722074237.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;很明显密码文件存在，如果查询没有记录，则说明密码文件不存在，需要重建密码文件，有时候我们确实是sysdba的权限，为什么登录却提示你的权限不够叻?这里的问题可能出现在密码文件里，由于你的密码文件缺损或者不存在，而ORALCE实例对sysdba的权限是根据这个密码文件来判断的，为什么这样做呢？如果我们的数据库没有OPEN，那么对于的一些动态视图是不能打开的，所以ORACLE必须把这些用户的口令和USERNAME放在一个独立的文件里，这样在数据库还不是OPEN的状况写，有个地方判断了。使用orapwd命令重建密码文件。orapwd命令的用法如下。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041722102826.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;接下来查看系统参数remote_login_passwordfile&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041722105711.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;如果VALUE值不是EXCLUSIVE，那么需要设置参数remote_login_passwordfile的值为EXCLUSIVE，有一次我检查配置了上述所有配置后，发现都符合，在远程用SQL*PLUS登录后，居然报如下错误&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041722111819.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;ORA-01017: invalid username/password; logon denied错误，很是纳闷，仔细检查了所有配置后，最后发现居然是服务器B的Guest账号被禁用了（如下所示）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041722113792.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family: 宋体; font-size: 12px;"&gt;启用了Guest账号，然后在机器A上用sys账号登录，此时又报ORA-01031: insufficient privileges，赶紧给Guest账号添加ora_dba用户组，问题解决了。&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kerrycode/aggbug/2454507.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kerrycode/archive/2012/04/17/2454507.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kerrycode/archive/2012/04/12/2442908.html</id><title type="text">SQL语言艺术实践篇——局外思考</title><summary type="text">今天有个同事问我一个问题，描述如下： 有一个日志信息表，对应同一个ID，可能有一条、两条、三条不同状态的记录。例如ID= 10001的日志记录可能有三条，一条记录状态为正确， 一条记录状态为错误， 一条记录状态是未知。也有可能只有其中一条记录或两条，现在的问题是，对应同一日志ID，我们只需要取一条记录，取数规则是：1：如果有状态为正确、错误、未知三条记录，我们只取状态为正确的记录。2：如果只有状态为正确、错误状态两条记录的，我们只取状态为正确的记录3：如果只有状态为错误、未知记录两条记录的，我们只取状态为错误的记录4：如果只有状态为正确、未知记录两条记录的，我们只取状态为正确的记录5：如果只有</summary><published>2012-04-11T16:22:00Z</published><updated>2012-04-11T16:22:00Z</updated><author><name>潇湘隐者</name><uri>http://www.cnblogs.com/kerrycode/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kerrycode/archive/2012/04/12/2442908.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kerrycode/archive/2012/04/12/2442908.html"/><content type="html">&lt;p&gt;今天有个同事问我一个问题，描述如下： 有一个日志信息表，对应同一个ID，可能有一条、两条、三条不同状态的记录。例如ID= 10001的日志记录可能有三条，一条记录状态为正确， 一条记录状态为错误， 一条记录状态是未知。也有可能只有其中一条记录或两条，现在的问题是，对应同一日志ID，我们只需要取一条记录，取数规则是：&lt;br /&gt;1：如果有状态为正确、错误、未知三条记录，我们只取状态为正确的记录。&lt;br /&gt;2：如果只有状态为正确、错误状态两条记录的，我们只取状态为正确的记录&lt;br /&gt;3：如果只有状态为错误、未知记录两条记录的，我们只取状态为错误的记录&lt;br /&gt;4：如果只有状态为正确、未知记录两条记录的，我们只取状态为正确的记录&lt;br /&gt;5：如果只有一种状态的记录，我们就取这条状态的记录。&lt;/p&gt;&lt;p&gt;归纳起来就是状态的优先级别为：正确 &amp;gt; 错误 &amp;gt; 未知。&lt;/p&gt;&lt;p&gt;下面我们简化模拟一下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt; TEST &lt;br/&gt;(&lt;br/&gt;         ID                  　 &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NUMBER&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;) ,&lt;br/&gt;         STATUS             &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NUMBER&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)  ,&lt;br/&gt;         STATUS_NAM  &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;12&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&lt;br/&gt;         &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CONSTRAINT&lt;/span&gt; PK_TEST  &lt;span style="color: #0000ff;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;KEY&lt;/span&gt;&lt;span style="color: #000000;"&gt;(ID, STATUS)&lt;br/&gt;)&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('20233341-fa09-4a1c-b0d3-bf34173eead3')"&gt;&lt;div id="cnblogs_code_open_20233341-fa09-4a1c-b0d3-bf34173eead3" class="cnblogs_code_hide"&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; TEST (ID, STATUS, STATUS_NAM)&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;values&lt;/span&gt; (&lt;span style="color: #800000; font-weight: bold;"&gt;1001&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;正确&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; TEST (ID, STATUS, STATUS_NAM)&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;values&lt;/span&gt; (&lt;span style="color: #800000; font-weight: bold;"&gt;1001&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;错误&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; TEST (ID, STATUS, STATUS_NAM)&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;values&lt;/span&gt; (&lt;span style="color: #800000; font-weight: bold;"&gt;1001&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;未知&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; TEST (ID, STATUS, STATUS_NAM)&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;values&lt;/span&gt; (&lt;span style="color: #800000; font-weight: bold;"&gt;1002&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;正确&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; TEST (ID, STATUS, STATUS_NAM)&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;values&lt;/span&gt; (&lt;span style="color: #800000; font-weight: bold;"&gt;1002&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;错误&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; TEST (ID, STATUS, STATUS_NAM)&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;values&lt;/span&gt; (&lt;span style="color: #800000; font-weight: bold;"&gt;1003&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;正确&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; TEST (ID, STATUS, STATUS_NAM)&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;values&lt;/span&gt; (&lt;span style="color: #800000; font-weight: bold;"&gt;1003&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;未知&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; TEST (ID, STATUS, STATUS_NAM)&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;values&lt;/span&gt; (&lt;span style="color: #800000; font-weight: bold;"&gt;1004&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;错误&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt;&lt;span style="color: #000000;"&gt; TEST (ID, STATUS, STATUS_NAM)&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;values&lt;/span&gt; (&lt;span style="color: #800000; font-weight: bold;"&gt;1004&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;未知&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;);&lt;/div&gt;&lt;/div&gt;&lt;p&gt;（有兴趣的可以先自己试试，然后看下文解决方法）&lt;/p&gt;&lt;p&gt;刚考虑这个问题，确实有点头大，问题逻辑比较复杂，想用一条SQL写出来，确实比较头大。当时头脑中被逻辑给搅晕了：三条记录时过滤出一条记录，两条记录时过滤出一条记录，只有一条记录时......。觉得一条SQL实现比较不太现实，可能要借助自定义函数来实现这个功能，当时，另外一个同事迅速给出了一个方案。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; ID,  &lt;span style="color: #ff00ff;"&gt;CASE&lt;/span&gt;   &lt;span style="color: #0000ff;"&gt;WHEN&lt;/span&gt; &lt;span style="color: #808080;"&gt;EXISTS&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; TEST T1 &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; T1.ID &lt;span style="color: #808080;"&gt;=&lt;/span&gt; T.ID &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; STATUS_NAM &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;正确&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;THEN&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt; &lt;br/&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt;                    &lt;span style="color: #0000ff;"&gt;WHEN&lt;/span&gt; &lt;span style="color: #808080;"&gt;EXISTS&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; TEST T2 &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; T2.ID &lt;span style="color: #808080;"&gt;=&lt;/span&gt; T.ID &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; STATUS_NAM &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;错误&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;THEN&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt;                    &lt;span style="color: #0000ff;"&gt;WHEN&lt;/span&gt; &lt;span style="color: #808080;"&gt;EXISTS&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; TEST T3 &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; T3.ID &lt;span style="color: #808080;"&gt;=&lt;/span&gt; T.ID &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; STATUS_NAM &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;未知&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;THEN&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt;              &lt;span style="color: #0000ff;"&gt;END&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt; STATUS&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;5&lt;/span&gt;  &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; TEST T&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;6&lt;/span&gt;  &lt;span style="color: #0000ff;"&gt;GROUP&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; ID&lt;/div&gt;&lt;p&gt;给人眼前一亮，居然可以这样处理，其实我们换个思维来考虑，不管这个日志ID有几条记录，我只需要一条记录，那么我可以使用ROW_NUMBER函数对ID字段分组，然后取其中的一条ROWNUM，而我可以给三个状态值恰好按：正确&amp;mdash;&amp;mdash;》1、 错误&amp;mdash;&amp;mdash;》2、未知&amp;mdash;&amp;mdash;》3，那么我只需要对记录按状态排序，取序号为1的记录即可。脚本如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt; ID, STATUS, STATUS_NAM&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt; ID,&lt;br/&gt;               ROW_NUMBER() &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;OVER&lt;/span&gt;(PARTITION &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; ID &lt;span style="color: #0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; STATUS) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt; ROWNUMS,&lt;br/&gt;               STATUS,&lt;br/&gt;               STATUS_NAM&lt;br/&gt;          &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt; TEST)&lt;br/&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; ROWNUMS &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041200211890.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/73542/2012041200213643.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;刚好这阵子正好看过《SQL语言艺术》，有一章节就讲：战略大于战术，有时候解决问题，仅仅需要站在局外思考(Think Outside)，不要因为太关注问题本身而受到干扰。我们需要大胆的思维，站得跟远一些。试着从大局的角度来看待问题。这样就能让问题迎刃而解。其实我刚开始一直想不到什么方法，就是因为自己没有跳出固定思维的模式，老在怎么从3条记录取一条、二条取一条、一条记录就取单条记录的思维模式里面，没有跳出SQL，而从业务逻辑思考。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kerrycode/aggbug/2442908.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kerrycode/archive/2012/04/12/2442908.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kerrycode/archive/2012/04/09/2437758.html</id><title type="text">Task Scheduler 介绍</title><summary type="text">Task Scheduler 的描叙：使用户可以在此计算机上配置和计划自动任务，此服务还托管多个Windows系统关键任务。如果此服务被停止或禁用，这些任务将无法再按计划的时间运行。如果此服务被禁用，则明确依赖它的所有服务将无法启动。这个命令有点类似于Linux下的crontab 等后台命令。可以通过它在Window 平台自动备份数据库等任务。这个命令依赖于Remote Procedure Call(RPC)系统组件（Windows XP/2000/2003下）， 在VISTA、WIN7下必须依赖Remote Procedure Call(RPC)、Windows Event Log两个系统组</summary><published>2012-04-09T14:20:00Z</published><updated>2012-04-09T14:20:00Z</updated><author><name>潇湘隐者</name><uri>http://www.cnblogs.com/kerrycode/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kerrycode/archive/2012/04/09/2437758.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kerrycode/archive/2012/04/09/2437758.html"/><content type="html">&lt;div&gt;&lt;span style="font-family: 'Times New Roman'; "&gt;Task Scheduler 的描叙：使用户可以在此计算机上配置和计划自动任务，此服务还托管多个Windows系统关键任务。如果此服务被停止或禁用，这些任务将无法再按计划的时间运行。如果此服务被禁用，则明确依赖它的所有服务将无法启动。这个命令有点类似于Linux下的crontab 等后台命令。可以通过它在Window 平台自动备份数据库等任务。这个命令依赖于Remote Procedure Call(RPC)系统组件（Windows XP/2000/2003下）， 在VISTA、WIN7下必须依赖Remote Procedure Call(RPC)、Windows Event Log两个系统组件。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Times New Roman'; "&gt;启动Task Scheduler（Win2003下）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Times New Roman'; "&gt;1：你可以在开始菜单&amp;#8212;&amp;#8212;运行里面输入：services.msc 命令进入服务窗口，亦可以通过控制面板&amp;#8212;&amp;#8212;管理工具&amp;#8212;&amp;#8212;服务，进入服务，&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Times New Roman'; "&gt;&amp;nbsp; &amp;nbsp;手动对Task Scheduler服务进行启动。&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/kerrycode/2012-4-8-01.jpg" width="408" height="424" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;2：也可以通过命令形式启用服务。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/kerrycode/2012-4-8-02.jpg" width="642" height="241" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;用dos打开task scheduler服务：sc start schedule 。schedule是服务名称，而Task Scheduler是显示名称。&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;停止Task Scheduler（Window 2003下）&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;1：你可以在开始菜单&amp;#8212;&amp;#8212;运行里面输入：services.msc 命令进入服务窗口，亦可以通过控制面板&amp;#8212;&amp;#8212;管理工具&amp;#8212;&amp;#8212;服务，进入服务，&lt;/div&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;手动对Task Scheduler服务进行停止。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/kerrycode/2012-4-8-03.jpg" width="409" height="423" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&amp;nbsp; 2：也可以通过命令形式停止服务。（Windows 2003）&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/kerrycode/2012-4-8-04.jpg" width="622" height="201" alt="" /&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="color: #ff00ff; "&gt;【注意】在WIN7 和 VISTA下Task Scheduler该服务无法被禁用。如果此服务被禁用，任何依赖它的服务将无法启动。已经不单是以前操作系统的计划任务调度管理器了&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;查看Task Scheduler服务状态&lt;/div&gt;&lt;p&gt;直接通过上面的服务窗口查看，可以用命令：sc query schedule查看&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/kerrycode/2012-4-8-05.jpg" width="596" height="188" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;创建Task Scheduler服务&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;sc create Schedule binPath= &amp;nbsp;"%SystemRoot%\System32\svchost.exe -k netsvcs" type= share start= auto displayname= "Task Scheduler" depend= RpcSs&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/kerrycode/2012-4-8-06.jpg" width="646" height="171" alt="" /&gt;&lt;/p&gt;&lt;p&gt;不过我在删除该服务后，运行上面命令后，启动task scheduler服务时出现错误2：系统找不到指定的文件。折腾了很久，网上也搜索了很多资料，依然没有解决问题，不知道哪位同仁解决过此类问题。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;删除Task Scheduler服务&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;使用命令 sc delete schedule 删除Task Scheduler服务（Window 2003下）。一般建议先停止服务，然后使用删除命令。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/kerrycode/2012-4-8-07.jpg" width="514" height="108" alt="" /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;执行后可以看见Task Scheduler服务变成禁用状态了。&lt;/div&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/kerrycode/2012-4-8-08.jpg" width="369" height="100" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Windows 7 下执行结果如下：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://images.cnblogs.com/cnblogs_com/kerrycode/2012-4-8-07.jpg" width="514" height="108" alt="" /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;SCHTASKS /parameter [arguments]&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;描述: schtasks.exe是安排命令和程序定期运行或在指定时间内运行。从计划表中添加和删除任务，按需要启动和停止任务，显示和更改计划任务。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; 允许管理员创建、删除、查询、更改、运行和中止&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; 本地或远程系统上的计划系统。替代 AT.exe。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;参数列表:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /Create &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 创建新计划任务。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /Delete &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 删除计划任务。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /Query &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;显示所有计划任务。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /Change &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 更改计划任务属性。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /Run &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;立即运行计划任务。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /End &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;中止当前正在运行的计划任务。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;显示帮助/用法。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;示例:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; SCHTASKS&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; SCHTASKS /?&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; SCHTASKS /Run /?&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; SCHTASKS /End /?&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; SCHTASKS /Create /?&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; SCHTASKS /Delete /?&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; SCHTASKS /Query &amp;nbsp;/?&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; SCHTASKS /Change /?&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;sc命令详解，可以在dos下面直接输入sc，即可得到sc命令的帮助文档，各种详细参数配置。如下所示：&lt;/div&gt;&lt;div&gt;C:\Documents and Settings\Administrator&amp;gt;sc&lt;/div&gt;&lt;div&gt;描述:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SC 是用于与&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 服务控制管理器和服务进行通信的命令行程序。&lt;/div&gt;&lt;div&gt;用法:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sc &amp;lt;server&amp;gt; [command] [service name] &amp;lt;option1&amp;gt; &amp;lt;option2&amp;gt;...&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 选项 &amp;lt;server&amp;gt; 的格式为 "\\ServerName"&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 可以键入 "sc [command]" 以获得命令的进一步帮助&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 命令:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; query-----------查询服务的状态， 或&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 枚举服务类型的状态。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; queryex---------查询服务的扩展状态， 或&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 枚举服务类型的状态。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; start-----------启动服务。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pause-----------向服务发送 PAUSE 控制请求。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; interrogate-----向服务发送 INTERROGATE 控制请求。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue--------向服务发送 CONTINUE 控制请求。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; stop------------向服务发送 STOP 请求。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; config----------更改服务的配置(永久)。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; description-----更改服务的描述。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; failure---------更改服务失败时所进行的操作。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sidtype---------更改服务的服务 SID 类型。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qc--------------查询服务的配置信息。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qdescription----查询服务的描述。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qfailure--------查询服务失败时所进行的操作。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qsidtype--------查询服务的服务 SID 类型。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; delete----------(从注册表)删除服务。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; create----------创建服务(将其添加到注册表)。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; control---------向服务发送控制。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sdshow----------显示服务的安全描述符。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sdset-----------设置服务的安全描述符。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; showsid---------显示与&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 任意名称相对应的服务 SID 字符串。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GetDisplayName--获取服务的 DisplayName。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GetKeyName------获取服务的 ServiceKeyName。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EnumDepend------枚举服务的依存关系。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 下列命令不要求服务名称:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sc &amp;lt;server&amp;gt; &amp;lt;command&amp;gt; &amp;lt;option&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; boot------------(ok | bad) 表明是否将最后一次启动&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 保存为最后一次的正确启动配置&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Lock------------锁定服务数据库&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; QueryLock-------查询 SCManager 数据库的 LockStatus&lt;/div&gt;&lt;div&gt;示例:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sc start MyService&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;是否要查看 QUERY 和 QUERYEX 命令的帮助? [ y | n ]:&lt;/div&gt;&lt;div&gt;y&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;QUERY 和 QUERYEX 选项:&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 如果查询命令带服务名称，将返回&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 该服务的状态。其他选项不适合这种&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 情况。如果查询命令不带参数或&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 带下列选项之一，将枚举此服务。&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; type= &amp;nbsp; &amp;nbsp;要枚举的服务的类型(driver, service, all)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;默认 = service)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; state= &amp;nbsp; 要枚举的服务的状态 (inactive, all)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(默认 = active)\n"&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; bufsize= 枚举缓冲区的大小(以字节计)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(默认 = 4096)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; ri= &amp;nbsp; &amp;nbsp; &amp;nbsp;开始枚举的恢复索引号\n"&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(默认 = 0)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; group= &amp;nbsp; 要枚举的服务组&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(默认 = all groups)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;句法示例&lt;/div&gt;&lt;div&gt;sc query &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 枚举活动服务和驱动程序的状态&lt;/div&gt;&lt;div&gt;sc query messenger &amp;nbsp; &amp;nbsp; &amp;nbsp;- 显示信使服务的状态&lt;/div&gt;&lt;div&gt;sc queryex messenger &amp;nbsp; &amp;nbsp;- 显示信使服务的扩展状态&lt;/div&gt;&lt;div&gt;sc query type= driver &amp;nbsp; - 仅枚举活动驱动程序&lt;/div&gt;&lt;div&gt;sc query type= service &amp;nbsp;- 仅枚举 Win32 服务&lt;/div&gt;&lt;div&gt;sc query state= all &amp;nbsp; &amp;nbsp; - 枚举所有服务和驱动程序&lt;/div&gt;&lt;div&gt;sc query bufsize= 50 &amp;nbsp; &amp;nbsp;- 枚举缓冲区为 50 字节&lt;/div&gt;&lt;div&gt;sc query ri= 14 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 枚举时恢复索引 = 14&lt;/div&gt;&lt;div&gt;sc queryex group= \"\" &amp;nbsp;- 枚举不在组内的活动服务&lt;/div&gt;&lt;div&gt;sc query type= service type= interact - 枚举所有不活动服务&lt;/div&gt;&lt;div&gt;sc query type= driver group= NDIS &amp;nbsp; &amp;nbsp; - 枚举所有 NDIS 驱动程序&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/kerrycode/aggbug/2437758.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kerrycode/archive/2012/04/09/2437758.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
