﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-金鳞-文章分类-Oracle</title><link>http://www.cnitblog.com/chenxin9821/category/8671.html</link><description>目标-&gt;软件测试架构师</description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 19:05:15 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 19:05:15 GMT</pubDate><ttl>60</ttl><item><title>Oracle Profile 使用详解 (转)</title><link>http://www.cnitblog.com/chenxin9821/articles/67701.html</link><dc:creator>金鳞</dc:creator><author>金鳞</author><pubDate>Sun, 25 Jul 2010 04:51:00 GMT</pubDate><guid>http://www.cnitblog.com/chenxin9821/articles/67701.html</guid><wfw:comment>http://www.cnitblog.com/chenxin9821/comments/67701.html</wfw:comment><comments>http://www.cnitblog.com/chenxin9821/articles/67701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chenxin9821/comments/commentRss/67701.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chenxin9821/services/trackbacks/67701.html</trackback:ping><description><![CDATA[<div><font color=#0000ff>一、目的：</font></div>
<div style="TEXT-INDENT: 21pt"><font color=#0000ff><strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">Oracle</strong>系统中的<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>可以用来对用户所能使用的数据库资源进行限制，使用Create <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">Profile</strong>命令创建一个<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">Profile</strong>，用它来实现对数据库资源的限制使用，如果把该<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>分配给用户，则该用户所能使用的数据库资源都在该<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>的限制之内。 </font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>&nbsp;</font></div>
<div><font color=#0000ff>二、条件：</font></div>
<div style="TEXT-INDENT: 21pt"><font color=#0000ff>创建<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>必须要有CREATE <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">PROFILE</strong>的系统权限。</font></div>
<div style="TEXT-INDENT: 21pt"><font color=#0000ff>为用户指定资源限制，必须：</font></div>
<div style="TEXT-INDENT: 21pt"><font color=#0000ff>1．动态地使用alter system或使用初始化参数resource_limit使资源限制生效。该改变对密码资源无效，密码资源总是可用。 </font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>SQL&gt; show parameter resource_limit</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>NAME<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>------------------------------------ ----------- ------------------------------</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>resource_limit<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean&nbsp;&nbsp;&nbsp;&nbsp; FALSE</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>SQL&gt; alter system set resource_limit=true;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>系统已更改。</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>SQL&gt; show parameter resource_limit;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>NAME<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>------------------------------------ ----------- ------------------------------</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>resource_limit<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;boolean&nbsp;&nbsp;&nbsp;&nbsp; TRUE</span></font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>SQL&gt;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>&nbsp;</font></div>
<div style="TEXT-INDENT: 21pt"><font color=#0000ff>2．使用create <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>创建一个定义对数据库资源进行限制的<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>。</font></div>
<div style="TEXT-INDENT: 21pt"><font color=#0000ff>3．使用create user 或alter user命令把<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>分配给用户。</font></div>
<div><font color=#0000ff>&nbsp;</font></div>
<div><font color=#0000ff>三、语法：</font></div>
<pre><font color=#0000ff size=2><span>&nbsp;&nbsp;&nbsp;&nbsp; CREATE <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">PROFILE</strong> <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong></span></font></pre>
<pre style="TEXT-INDENT: 30pt"><font color=#0000ff size=2>LIMIT { resource_parameters</font></pre>
<pre><font color=#0000ff size=2><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | password_parameters</span></font></pre>
<pre><font color=#0000ff size=2><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></font></pre>
<pre><font color=#0000ff size=2><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ resource_parameters</span></font></pre>
<pre><font color=#0000ff size=2><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;| password_parameters</span></font></pre>
<pre><font color=#0000ff size=2><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]... ;</span></font></pre>
<pre><font color=#0000ff size=2>&nbsp;</font></pre>
<div><font color=#0000ff>&lt;resource_parameters&gt; </font></div>
<pre><font color=#0000ff size=2>{ { SESSIONS_PER_USER</font></pre>
<pre><font color=#0000ff size=2>&nbsp;| CPU_PER_SESSION</font></pre>
<pre><font color=#0000ff size=2>&nbsp;| CPU_PER_CALL</font></pre>
<pre><font color=#0000ff size=2>&nbsp;| CONNECT_TIME</font></pre>
<pre><font color=#0000ff size=2>&nbsp;| IDLE_TIME</font></pre>
<pre><font color=#0000ff size=2>&nbsp;| LOGICAL_READS_PER_SESSION</font></pre>
<pre><font color=#0000ff size=2>&nbsp;| LOGICAL_READS_PER_CALL</font></pre>
<pre><font color=#0000ff size=2>&nbsp;| COMPOSITE_LIMIT</font></pre>
<pre><font color=#0000ff size=2>&nbsp;}</font></pre>
<pre><font color=#0000ff size=2>&nbsp;{ integer | UNLIMITED | DEFAULT }</font></pre>
<pre><font color=#0000ff size=2>| PRIVATE_SGA</font></pre>
<pre><font color=#0000ff size=2>&nbsp;{ integer [ K | M ] | UNLIMITED | DEFAULT }</font></pre>
<pre><font color=#0000ff size=2>}</font></pre>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>&nbsp;</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>&lt; password_parameters &gt;</font></div>
<pre><font color=#0000ff size=2>{ { FAILED_LOGIN_ATTEMPTS</font></pre>
<pre><font color=#0000ff size=2>&nbsp;| PASSWORD_LIFE_TIME</font></pre>
<pre><font color=#0000ff size=2>&nbsp;| PASSWORD_REUSE_TIME</font></pre>
<pre><font color=#0000ff size=2>&nbsp;| PASSWORD_REUSE_MAX</font></pre>
<pre><font color=#0000ff size=2>&nbsp;| PASSWORD_LOCK_TIME</font></pre>
<pre><font color=#0000ff size=2>&nbsp;| PASSWORD_GRACE_TIME</font></pre>
<pre><font color=#0000ff size=2>&nbsp;}</font></pre>
<pre><font color=#0000ff size=2>&nbsp;{ expr | UNLIMITED | DEFAULT }</font></pre>
<pre><font color=#0000ff size=2>| PASSWORD_VERIFY_FUNCTION</font></pre>
<pre><font color=#0000ff size=2><span>&nbsp;&nbsp;&nbsp;&nbsp; { function | NULL | DEFAULT }</span></font></pre>
<div><font color=#0000ff>}</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt"><font color=#0000ff>&nbsp;</font></div>
<div><font color=#0000ff>四、语法解释：</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong></span>：配置文件的名称。<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">Oracle</strong>数据库以以下方式强迫资源限制：</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</span>．如果用户超过了connect_time或idle_time的会话资源限制，数据库就回滚当前事务，并结束会话。用户再次执行命令，数据库则返回一个错误，</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</span>．如果用户试图执行超过其他的会话资源限制的操作，数据库放弃操作，回滚当前事务并立即返回错误。用户之后可以提交或回滚当前事务，必须结束会话。 </font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>提示：可以将一条分成多个段，如1小时(1/24天)来限制时间，可以为用户指定资源限制，但是数据库只有在参数生效后才会执行限制。 </font></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Unlimited</span>：分配该<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>的用户对资源使用无限制，当使用密码参数时，unlimited意味着没有对参数加限制。 </font></div>
<div><font color=#0000ff>&nbsp;</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default</span>：指定为default意味着忽略对<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>中的一些资源限制，Default <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>初始定义对资源不限制，可以通过alter <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>命令来改变。 </font></div>
<div><font color=#0000ff>&nbsp;</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource_parameter</span>部分</font></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session_per_user</span>：指定限制用户的并发会话的数目。</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cpu_per_session</span>：指定会话的CPU时间限制，单位为百分之一秒。 </font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cpu_per_call</span>：指定一次调用（解析、执行和提取）的CPU时间限制，单位为百分之一秒。</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connect_time</span>：指定会话的总的连接时间，以分钟为单位。</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Idle_time</span>：指定会话允许连续不活动的总的时间，以分钟为单位，超过该时间，会话将断开。但是长时间运行查询和其他操作的不受此限制。 </font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Logical_reads_per_session</span>：指定一个会话允许读的数据块的数目，包括从内存和磁盘读的所有数据块。 </font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Logical_read_per_call</span>：指定一次执行SQL（解析、执行和提取）调用所允许读的数据块的最大数目。</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Private_sga</span>：指定一个会话可以在共享池（SGA）中所允许分配的最大空间，以字节为单位。（该限制只在使用共享服务器结构时才有效，会话在SGA中的私有空间包括私有的SQL和PL/SQL，但不包括共享的SQL和PL/SQL）。</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Composite_limit</span>：指定一个会话的总的资源消耗，以service units单位表示。<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">Oracle</strong>数据库以有利的方式计算cpu_per_session，connect_time，logical_reads_per_session和private-sga总的service units</font></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></div>
<div><font color=#0000ff>&nbsp;</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password_parameter</span>部分：</font></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Failed_login_attempts</span>：指定在帐户被锁定之前所允许尝试登陆的的最大次数。</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password_life_time</span>：指定同一密码所允许使用的天数。如果同时指定了password_grace_time参数，如果在grace period内没有改变密码，则密码会失效，连接数据库被拒绝。如果没有设置password_grace_time参数，默认值unlimited将引发一个数据库警告，但是允许用户继续连接。</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password_reuse_time</span>和password_reuse_max：这两个参数必须互相关联设置，password_reuse_time指定了密码不能重用前的天数，而password_reuse_max则指定了当前密码被重用之前密码改变的次数。两个参数都必须被设置为整数。</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</span>．如果为这两个参数指定了整数，则用户不能重用密码直到密码被改变了password_reuse_max指定的次数以后在password_reuse_time指定的时间内。</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>如：password_reuse_time=30，password_reuse_max=10，用户可以在30天以后重用该密码，要求密码必须被改变超过10次。 </font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</span>．如果指定了其中的一个为整数，而另一个为unlimited，则用户永远不能重用一个密码。</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</span>．如果指定了其中的一个为default，<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">Oracle</strong>数据库使用定义在<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>中的默认值，默认情况下，所有的参数在<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>中都被设置为unlimited，如果没有改变<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>默认值，数据库对该值总是默认为unlimited。</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</span>．如果两个参数都设置为unlimited，则数据库忽略他们。</font></div>
<div><font color=#0000ff>&nbsp;</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password_lock_time</span>：指定登陆尝试失败次数到达后帐户的缩定时间，以天为单位。</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password_grace_time</span>：指定宽限天数，数据库发出警告到登陆失效前的天数。如果数据库密码在这中间没有被修改，则过期会失效。</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password_verify_function</span>：该字段允许将复杂的PL/SQL密码验证脚本做为参数传递到create <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>语句。<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">Oracle</strong>数据库提供了一个默认的脚本，但是自己可以创建自己的验证规则或使用第三方软件验证。 对Function名称，指定的是密码验证规则的名称，指定为Null则意味着不使用密码验证功能。如果为密码参数指定表达式，则该表达式可以是任意格式，除了数据库标量子查询。 </font></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></div>
<div><font color=#0000ff>五、举例：</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</span>．创建一个<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>：</font></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong> new_<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong></font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; limit password_reuse_max 10</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password_reuse_time 30;</font></span></div>
<div><font color=#0000ff>&nbsp;</font></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</span>．设置<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>资源限制：</font></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong> app_user limit</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessions_per_user unlimited</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cpu_per_session unlimited</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cpu_per_call 3000</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connect_time 45</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logical_reads_per_session default </font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logical_reads_per_call 1000</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private_sga 15k</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; composite_limit 5000000;</font></span></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>总的resource cost不超过五百万service units。计算总的resource cost的公式由alter resource cost语句来指定。</font></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</span>．设置密码限制<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong>：</font></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong> app_users2 limit</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; failed_login_attempts 5</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password_life_time 60</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password_reuse_time 60</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password_reuse_max 5</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password_verify_function verify_function</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password_lock_time 1/24</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password_grace_time 10;</font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></div>
<div><font color=#0000ff><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</span>．将配置文件分配给用户：</font></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt; alter user dinya <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong> app_user;</font></span></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><font color=#0000ff>用户已更改。</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><font color=#0000ff>SQL&gt;</font></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></div>
<div><span><font color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL&gt; alter user dinya <strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">profile</strong> default;</font></span></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><font color=#0000ff>用户已更改。</font></div>
<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><font color=#0000ff>SQL&gt;</font></div>
<div><font color=#0000ff>&nbsp;</font></div>
<strong><span style="FONT-WEIGHT: normal; FONT-SIZE: 10.5pt"><font color=#0000ff><strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">Oracle</strong>&#174; Database SQL Reference</font></span></strong><span style="FONT-SIZE: 10.5pt"><br><font color=#0000ff><strong><span style="FONT-WEIGHT: normal">10<em>g</em> Release 1 (10.1)</span></strong><br>Part Number B10759-01</font></span><font color=#0000ff>&nbsp;</font>
<div id=c_jquery_test style="DISPLAY: none"></div>
<script type=text/javascript>
if ($ != jQuery) {
$ = jQuery.noConflict();
}
</script>
<img src ="http://www.cnitblog.com/chenxin9821/aggbug/67701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chenxin9821/" target="_blank">金鳞</a> 2010-07-25 12:51 <a href="http://www.cnitblog.com/chenxin9821/articles/67701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 备份命令</title><link>http://www.cnitblog.com/chenxin9821/articles/66609.html</link><dc:creator>金鳞</dc:creator><author>金鳞</author><pubDate>Thu, 10 Jun 2010 03:36:00 GMT</pubDate><guid>http://www.cnitblog.com/chenxin9821/articles/66609.html</guid><wfw:comment>http://www.cnitblog.com/chenxin9821/comments/66609.html</wfw:comment><comments>http://www.cnitblog.com/chenxin9821/articles/66609.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/chenxin9821/comments/commentRss/66609.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chenxin9821/services/trackbacks/66609.html</trackback:ping><description><![CDATA[<h3><a href="http://ayaya.javaeye.com/blog/173960"><u><font color=#000000>oracle 备份命令</font></u></a></h3>
<div class=blog_content>导出 EXP USER/PASSWORD@ODBC FILE=C：\***.DMP ROWS=N //不保存数据； <br>导出 EXP USER/PASSWORD@ODBC FILE=C：\***.DMP&nbsp;&nbsp; //保存数据； <br>导出 EXP USER/PASSWORD@ODBC FILE=C：\***.DMP full=y //全部导出； <br><br>导入 imp user/password@odbc file=c:\***.dmp full=y ignore=y; <br><br><br>Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件，imp命令可以把dmp文件从本地导入到远处的数据库服务器中。 利用这个功能可以构建两个相同的数据库，一个用来测试，一个用来正式使用。 <br><br>执行环境：可以在SQLPLUS.EXE或者DOS（命令行）中执行， <br>DOS中可以执行时由于 在oracle 8i 中 安装目录\ora81\BIN被设置为全局路径， <br>该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。 <br>oracle用java编写，SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。 <br>SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类，完成导入导出功能。 <br><br>下面介绍的是导入导出的实例。 <br>数据导出： <br>1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中 <br>&nbsp;&nbsp; exp system/manager@TEST file=d:\daochu.dmp full=y <br>2 将数据库中system用户与sys用户的表导出 <br>&nbsp;&nbsp; exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys) <br>3 将数据库中的表inner_notify、notify_staff_relat导出 <br>&nbsp;&nbsp;&nbsp; exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat) <br><br>4 将数据库中的表table1中的字段filed1以"00"打头的数据导出 <br>&nbsp;&nbsp; exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\" <br><br>上面是常用的导出，对于压缩，既用winzip把dmp文件可以很好的压缩。 <br>也可以在上面命令后面 加上 compress=y 来实现。 <br><br>数据的导入 <br>1 将D:\daochu.dmp 中的数据导入 TEST数据库中。 <br>&nbsp;&nbsp; imp system/manager@TEST file=d:\daochu.dmp <br>&nbsp;&nbsp; imp aichannel/aichannel@HUST full=y file=file= d:\data\newsmgnt.dmp ignore=y <br>&nbsp;&nbsp; 上面可能有点问题，因为有的表已经存在，然后它就报错，对该表就不进行导入。 <br>&nbsp;&nbsp; 在后面加上 ignore=y 就可以了。 <br>2 将d:\daochu.dmp中的表table1 导入 <br>imp system/manager@TEST file=d:\daochu.dmp tables=(table1) <br><br>基本上上面的导入导出够用了。不少情况要先是将表彻底删除，然后导入。 <br><br>注意： <br>操作者要有足够的权限，权限不够它会提示。 <br>数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。 <br><br>附录一： <br>给用户增加导入数据权限的操作 <br>第一,启动sql*puls <br>第二，以system/manager登陆 <br>第三，create user 用户名 IDENTIFIED BY 密码 （如果已经创建过用户，这步可以省略） <br>第四，GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW , <br>&nbsp;&nbsp; DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字 <br>第五, 运行-cmd-进入dmp文件所在的目录, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imp userid=system/manager full=y file=*.dmp <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或者 imp userid=system/manager full=y file=filename.dmp <br><br>执行示例: <br>F:\Work\Oracle_Data\backup&gt;imp userid=test/test full=y file=inner_notify.dmp <br><br>屏幕显示 <br>Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2006 <br>(c) Copyright 2000 Oracle Corporation. All rights reserved. <br><br>连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production <br>With the Partitioning option <br>JServer Release 8.1.7.0.0 - Production <br><br>经由常规路径导出由EXPORT:V08.01.07创建的文件 <br>已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入 <br>导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换) <br>. 正在将AICHANNEL的对象导入到 AICHANNEL <br>. . 正在导入表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "INNER_NOTIFY"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4行被导入 <br>准备启用约束条件... <br>成功终止导入，但出现警告。 <br><br><br>附录二： <br>Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的. <br>先建立import9.par, <br>然后，使用时命令如下：imp parfile=/filepath/import9.par <br>例 import9.par 内容如下： <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROMUSER=TGPMS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TOUSER=TGPMS2&nbsp;&nbsp;&nbsp;&nbsp; （注：把表的拥有者由FROMUSER改为TOUSER，FROMUSER和TOUSER的用户可以不同）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROWS=Y <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INDEXES=Y <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GRANTS=Y <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CONSTRAINTS=Y <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BUFFER=409600 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file==/backup/ctgpc_20030623.dmp <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log==/backup/import_20030623.log <br><br><br><br>备份是对数据库中数据的复制，它有两种类型：物理备份和逻辑备份。 <br>导致数据库操作中止的故障包括4种类型：语句故障、用户进程故障、实例故障、和介质故障。 <br>Oracle提供了导入和导出实用程序来实现数据库的逻辑备份。 <br>导出实用程序将数据库中的数据备份成一个二进制文件，即导出转储文件。导入实用程序将备份文件中的数据导入到Oracle数据库中。 <br>导入和导出实用程序通过命令行参数、交互提示符和参数文件等方式来调用。 <br>导入和导出实用程序均提供4种方式的操作：表方式、用户方式、表空间方式和全部数据库方式。 <br>数据库可在两种方式下工作：非归档日志方式和归档日志方式。 <br>1、导出实用程序将数据库中的对象定义和数据备份到一个操作系统二进制文件中，该文件称为导出转储文件(Export Dump Files)，其默认扩展名是.dmp。 <br>导出实用程序语法： <br>exp username/password [PARMETER=value]... <br>可以使用以下命令显示导出实用程序的参数说明。 <br>C:\&gt; emp help=y <br><br>2、导入实用程序将导出的转储文件导入数据库。 <br>导入实用程序语法： <br>imp username/password [PARMETER=value]... <br>可以使用以下命令显示导入实用程序的参数说明。 <br>C:\&gt; imp help=y <br>导入的方式取决于导出的方式，即如果是表方式导出，则必须以表方式导入。 <br><br>示例1：查看所有有效的归档日志文件存储目录。 <br>select dest_id,dest_name,status,destination from V$ARCHIVE_DEST where status='VALID'; <br><br><br><br>后序部分： <br><br>如何删除表中的重复记录？ <br>例句： <br>DELETE FROM table_name a WHERE rowid &gt; ( SELECT min(rowid) FROM table_name b WHERE b.pk_column_1 = a.pk_column_1 and b.pk_column_2= a.pk_column_2 ); <br><br>Rem ===================================================================================== <br>Rem 1.查看所有用户： <br>Rem ===================================================================================== <br>select * from dba_users;--sys和system用户有权限执行 <br>select * from all_users; <br>select * from user_users; <br><br>Rem ===================================================================================== <br>Rem 2.查看用户系统权限： <br>Rem ===================================================================================== <br>select * from dba_sys_privs;--系统权限有643个 <br>select * from all_sys_privs; <br>select * from user_sys_privs; <br><br>Rem ===================================================================================== <br>Rem 3.查看用户对象权限： <br>Rem ===================================================================================== <br>select * from dba_tab_privs; <br>select * from all_tab_privs; <br>select * from user_tab_privs; <br>Rem ===================================================================================== <br>Rem 4.查看所有角色： <br>Rem ===================================================================================== <br>select * from dba_roles; <br><br>Rem ===================================================================================== <br>Rem 5.查看用户所拥有的角色： <br>Rem ===================================================================================== <br>select * from dba_role_privs; <br>select * from user_role_privs; <br><br>Rem ===================================================================================== <br>Rem 6.查看用户有哪些权限 <br>Rem ===================================================================================== <br>select granted_role from user_role_privs <br>union <br>select privilege from user_sys_privs; <br><br><br>Rem ===================================================================================== <br>Rem 7.查看当前用户每个表占用空间的大小： <br>Rem ===================================================================================== <br>&nbsp;&nbsp; Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name <br><br>Rem ===================================================================================== <br>Rem 8.查看每个表空间占用空间的大小： <br>Rem ===================================================================================== <br>&nbsp;&nbsp;&nbsp; Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name </div>
转载自：<a href="http://ayaya.javaeye.com/blog/173960">http://ayaya.javaeye.com/blog/173960</a>
<img src ="http://www.cnitblog.com/chenxin9821/aggbug/66609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chenxin9821/" target="_blank">金鳞</a> 2010-06-10 11:36 <a href="http://www.cnitblog.com/chenxin9821/articles/66609.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>toad 中文文档 (转)</title><link>http://www.cnitblog.com/chenxin9821/articles/65934.html</link><dc:creator>金鳞</dc:creator><author>金鳞</author><pubDate>Tue, 11 May 2010 05:42:00 GMT</pubDate><guid>http://www.cnitblog.com/chenxin9821/articles/65934.html</guid><wfw:comment>http://www.cnitblog.com/chenxin9821/comments/65934.html</wfw:comment><comments>http://www.cnitblog.com/chenxin9821/articles/65934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chenxin9821/comments/commentRss/65934.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chenxin9821/services/trackbacks/65934.html</trackback:ping><description><![CDATA[<div class=pgcontent>
<p>toad 中文文档</p>
<p>目录</p>
<p>一．Toad功能综述<br>二．系统需求<br>三．安装指南<br>四．快速入门<br>1． Schema browser的用法简介<br>2． <span class=caps>SQL </span>Editor的使用介绍<br>3． Procedure Editor的用法介绍<br>4． 如何进行PLSQL的debug<br>5． 如何使用SQLab Xpert优化SQL<br>6． 如何使用SQL Modeler来编写查询<br>7． 如何使用Toad的DBA方面的功能</p>
<p>一、 Toad功能综述</p>
<p>在Oracle应用程序的开发过程中，访问数据库对象和编写SQL程序是一件乏味且耗费时间的工作，对数据库进行日常管理也是需要很多SQL脚本才能完成的。Quest Software为此提供了高效的Oracle应用开发工具-Toad（Tools of Oracle Application Developers）。在Toad的新版本中，还加入了DBA模块，可以帮助DBA完成许多日常管理工作。它最大的特点就是简单易用，访问速度快。使用Toad，我们可以通过一个图形化的用户界面快速访问数据库，完成复杂的SQL和PL/SQL代码编辑和测试工作。Toad由Oracle开发专家专门为开发人员而设计，是一个功能强大、结构紧凑的专业化PL/SQL开发环境。<br>Toad 主要具有如下特点：<br>模式浏览：<br>模式浏览功能可以让我们快速访问数据字典，浏览数据库中的表、索引、存储过程。Toad 提供对数据库的快速访问，使用极为方便，用户界面简洁，结构安排合理。当我们点击一个单独的数据库对象，Toad立即显示此对象的详细信息。例如，当我们点一个数据库的表，所有和此表相关的索引、约束、存储过程、SQL语句以及和其他表的相互引用关系都在同一界面显示出来。为了简化操作，用户可以在浏览窗口操作数据库对象。</p>
<p><span class=caps>SQL </span>编辑器：<br><span class=caps>SQL </span>编辑器的主要功能是编辑、运行和调整SQL语句。TOAD 的高级编辑窗口包括众多的特性来提高开发人员编写SQL语句的产品化程度。例如，简单地生成代码模板，在编写SQL前自动发现包的内容和列的名字等等。<br><span class=caps>SQL</span>编辑器包括一个编辑窗口和运行结果窗口，允许开发人员在编辑的过程中测试运行结果。SQL编辑器中不仅包括标准的编辑命令，也包括一些增强的功能，如快速查询表中的字段、将SQL语句的内容格式化等等。这个窗口可以处理大到4GB 的内容，对大的开发项目来说非常有用。便捷的书签可以让开发人员非常容易地找到相关位置。在运行结果窗口可提供用户定义的配置功能，支持LONG 和LONG <span class=caps>RAW</span>列，可以将数据卸出到磁盘、打印数据、编辑数据等等。</p>
<p>存储过程编辑器：<br>存储过程编辑器的主要功能是编辑、编译、测试、调试存储过程和触发器。TOAD提供语法标识、错误标识和其他很多易于使用的功能，如在弹出窗口显示表名、列名和Oracle函数。和其他的 PL/SQL 编辑工具不同，TOAD 允许在一个文件中操作多个数据库对象，可以编译一个对象、编译多个对象、编译到当前光标、从光标开始编译。在运行出现错误时，存储过程停止到有问题的语句。用户可以使用快捷方式或模板来快速编写PL/SQL,也可以根据需要生成自己的模板。使用Toad可以非常方便地进行编辑工作，可如设置书签、取消注释、格式化SQL语句等等。</p>
<p>PL/SQL Debugger选项：<br>Toad 提供简单易用的PL/SQL 调试功能，可以节省开发人员在大型项目中用于开发和测试的宝贵时间，提高应用开发的质量。在存储过程开发的过程中，Toad可以逐行编辑、调试和运行代码。运行时可以根据需要输入参数，观察相关参数的变化来检查存储过程的正确性。在调式过程中，Toad 可以通过窗口显示所有的断点、参数, 调用堆栈和输出参数。使用Toad，非常容易检测到存储过程的错误，开发人员可以一步一步运行PL/SQL语句来识别问题。调试会话可以和其他程序会话同时进行。</p>
<p>SQLab Xpert Option：<br>帮助开发人员优化SQL，为他们提供各种优化模式下SQL执行计划，并且能够给出优化的建议，能够比较各种模式下实际的SQL运行结果，帮助开发人员真正高速地开发高效地代码。</p>
<p>Toad还可以外挂一些别的产品，比如PL/Formatter, RevealNet Knowledge Base , <span class=caps>SQL </span>Impact等，这些都能够和Toad紧密集成，共同提供了一个完美的集成开发环境。新版本还新增加了DBA模块，更加拓广了Toad这个产品的适用范围。</p>
<p>二、系统要求：<br>客户端：<br>&#252; Windows 95 / 98 / NT/2000中英文均可<br>&#252; 完整安装的SQL*Net 2.0或者Net8<br>&#252; 磁盘：一般安装需要20M左右的空间，根据所选择模块的不同和安装方式的不同，最少也要5M的磁盘空间（从网络服务器读取）<br>&#252; 内存：Windows 9x/Me:16M 内存；Windows NT/2000: Min 32M]<br>&#252; Tuning模块需要额外的25M空间</p>
<p>服务器端：<br>&#252; Oracle 7.3 或者更高，在任何硬件平台上。<br>&#252; 需要一个DBA用户帐号</p>
<p>三．安装：<br>1． 三种安装方式的选择：<br>a) <span class=caps>TOAD</span> and Personal Configuration Files to PC<br>默认安装选择，完成一个完整的Client端的安装，把所有需要的文件拷贝到本地Toad目录。<br>绝大多数用户应该选择使用这个安装方式。<br>b) Personal Config Files to PC, read <span class=caps>TOAD</span> from Network Server<br>从网络服务器读取Toad程序，在本地计算机安装一些自定义的文件，并且创建到服务器文件的快捷方式，一般不推荐使用这个方式，而且要求网络服务器已经配置。<br>c) <span class=caps>TOAD</span> to Network Server<br>把Toad安装到网络服务器上，以便这样别的用户能够进行Personal Config Files to PC, read <span class=caps>TOAD</span> from Network Server这种方式的安装。<br>2． 根据需要使用到的特性，需要运行一些脚本(都在Toad\temps目录下)<br>&#252; 如果需要用Toad来查看执行计划，必须运行脚本PrepToad.sql或者notoad.sql<br>n 如果希望专门建立一个Toad 用户来存放Toad需要使用的对象的话，就运行preptoad.sql。<br>n 如果希望在当前连接用户模式下建立toad需要使用的对象的话，就运行notoad.sql。<br>n 注意，如果是选择了专门建立toad这个用户的话，需要先修改一下脚本，指定用户的默认表空间和临时表空间。<br>&#252; 需要使用Oracle8i 的Profile analyzer，必须运行ToadProfiler.sql<br>&#252; 需要加强Toad的安全性，必须运行ToadSecurity.sql</p>
<p>四、Toad使用快速入门<br>1． Schema Browser：<br>Schema browser是Toad的极为有特色的模块。在schema browser的帮助下，可以方便的浏览数据库内部的各类数据库对象，比如表，索引，序列，存储过程等，而且可以方便的倒出DDL语句和进行各种修改，重建工作。定位到某一类对象上，这列对象允许的操作都会自动列出来。<br>特色：<br>l 支持Oracle数据库里面所有对象的新建、查看、修改，集成了几乎对所有数据库对象的管理所需要的功能。<br>l 按照 模式-&gt;对象类别 <del>&gt;对象</del>&gt;对象可操作属性 -&gt; 对象本身的详细信息和对象相关的信息 来组织，非常有条理，容易定位对象，也能够看到所有你需要的对象的相关信息。<br>l 对于表：<br>i. 完备的建表向导，不用输入冗长的语法，更加全面地替你考虑。<br>ii. 可以修改表的各种逻辑和物理属性，修改列的属性，增加列，删除列(在Oracle8i里面)，修改表的物理存储属性，Truncate，Drop等。<br>iii. 可以生成建表的完整的DDl语句，包括存储信息，权限信息，约束，索引和触发器等，而这些手工很难做到。<br>iv. 可以方便的对表进行分析，查看表地所有信息，可以有条件的倒出表里面的数据，并且保存为sql语句。<br>v. 可以方便的对表进行重组，可以完成exp/imp作不到的事情，而且更少地人工参与，更加安全。</p>
<p>l 对于视图，存储过程：<br>i. 可以保存建立视图、存储过程的语句为文本，<br>ii. 重新编译失效的视图，存储过程，修改视图的定义语句等。方便的查看存储过程的代码，相互依赖关系，权限信息等保存为文本等。<br>l 回滚段，<br>i. 简洁明了的online，offline状态，方便地online/offline操作<br>ii. 详细的回滚段物理信息和当前状态。<br>iii. 可以方便的修改物理存储属性</p>
<p>l 表空间：<br>i. Tablespace Map；直观的显示数据物理的在表空间上的分布<br>ii. 直观的查看各个表空间的利用率、剩余空间、破碎情况等信息<br>iii. 可以进行各种alter操作：online, offline, 增加数据文件，改变数据文件大小，改变物理存储属性等<br>l 对其他数据库对象也有完备的操作支持。</p>
<p>2． <span class=caps>SQL </span>Editor:<br>a) 激活SQL Editor的三种方式：<br>i. 连接到数据库之后，Toad自动打开SQL Editor这个窗口。<br>ii. 点击总工具栏上最左边的那个按钮<br>iii. 从菜单栏：Database -&gt; <span class=caps>SQL </span>Editor<br>b) 特点：<br>l 允许同时打开多个编辑窗口，同时编辑多个SQL语句<br>l 支持同时连接到多个数据库，同时对多个数据库进行操作<br>l 允许编辑SQL，PLSQL，JAVA，HTML和文本<br>l 使用书签功能，可以在大量SQL语句里，快速定位某个语句所在位置<br>l <span class=caps>SQL </span>Editor本身具有强大的编辑功能，非常方便编辑SQL语句。<br>l 强大的快捷键支持和工具栏快速按钮的支持，更加高效编写(很多快捷键可以自己定义，在View <del>&gt;options </del>&gt;<span class=caps>SQL </span>Editor里面)<br>l 能够根据前面的条件，智能推测需要输入的代码，可以做到某种程度的代码智能填充<br>l 把鼠标定位到表/视图/存储过程名称之上，按F4，可以打开对象描述窗口，方便的查看表和视图的定义，存储过程的源代码，<br>l 非常容易对SQL语句的分析其执行计划：单击工具栏上的 按钮就可以看到Explain Plan的结果<br>l 支持部分SQL*Plus命令，可以方便的执行大量的为SQL*Plus编写的数据库脚本<br>l 可以通过SQLab xpert来对当前SQL语句进行全面的分析，给出各种合理的调优意见，只需要单击工具栏上的Tuning按钮：<br>l 可以方便的保存，打开和运行SQL脚本<br>l 支持对查询结果进行修改，<br>l 可以把查询结果以多种格式保存起来，可以保存为HTML，纯文本，XLS等多种格式<br>l 很容易的得到SQL函数的列表和用法描述（Show <span class=caps>SQL</span> help Window 按钮）<br>l 可以查看SQL语句的执行情况：通过下方的AutoTrace窗口 ，看到SQL语句的实际执行结果和执行效率。<br>l 支持历史SQL(F8) ：可以方便的查询以前执行过的SQL，不用反复重新输入。<br>l 可以执行匿名块，存储过程，从下方的窗口看到DBMS_OUTPUT的结果，如：</p>
<p>3． Stored Procedure Editor<br>a) 打开存储过程编写器的几个途径：<br>l 单击总菜单栏上的第三个按钮：<br>l 点击Database &#8211; &gt; Procedure Editor ，<br>l 可以通过Schema browser来调用<br>b) 一些特点和优点：<br>1． 强大的自定义设置：从保留字的显示方式，到自动替换，到各种快捷键的定义等等，用得越熟越顺手。<br>2．<br>3． 自动用不同颜色显示SQL和PL/SQL关键字，语法清晰明了，可根据自己的习惯来具体定制各类关键字的具体显示方式。可以自定义存储过程得模板，在新建存储过程的时候，自动生成程序的框架可以方便的调用Schema Browser，把鼠标定位于某个对象上，F4，Schema Browser打开该对象的详细描述，帮助顺利快速开发程序。支持代码自动更正，如输入ndf，自动替换成NO_DATA_FOUND，输入the自动替换成the，类似的自动替换还可以自己修改和添加。<br>7． 方便的左边行号显示，单击左边行号就可以实现调试断点的增加/删除<br>8． 对各种快捷键的支持，不但包括常见的编辑操作，还可以有自己定义的PLSQL块的支持（自己定义快捷方式）。如可以定义CTRL+SHIFT+D:弹出所有PLSQL Block的类型，可以自己选择。<br>9． 可以在一个集成开发环境里面，一边编码，一边调试，不用多处切换<br>10． 方便的同时打开多个存储过程，通过页面快速切换<br>11． 快速编译存储过程，快速定位错误所在，自己选择是否同时编译依赖的存储过程<br>12． 内置对PL/Formatter，可以用PL/Formatter对存储过程进行格式化，并且可以提供存储过程的概要分析和修改建议<br>PL/Formatter可以对现有的存储过程进行高速的格式化，使所有的存储过程都符合同样的编写标准，这样既有利于提高程序的可读性，避免不同人写的模块的风格上的很差异。<br>PL/Formatter 还有助于提高程序的模块化，增强程序的结构清晰度，增强SQL的共用性。<br>PL/Formatter 还可以帮助完成PL/SQL和Oracle版本之间的管理。</p>
<p>13． 内置RevealNet Knowledge Base，单击鼠标右键就可以打开，快速得到技术上的支持，解决技术难题<br>nPL/SQL:<br>n包含整个开发过程中可能遇到问题的答案<br>nCode Library:大量的严谨的PL/SQL代码例子和现成过程，完全源代码提供<br>n各种错误处理模块可供参考，各类字符日期函数<br>n包含1400多个主题<br>nAdmin：<br>n解答DBA日常工作中80%的常见问题，覆盖2400多个主题<br>n从网络到性能优化，从备份恢复到Error message,一应俱全<br>例子：遇到失效的存储过程怎么办？<br>4. 如何对存储过程进行Debug？<br>u 需要Toad单独的Debug Option(Standard Version 没有这个选项)<br>u 要用Toad对存储过程进行debug，必须安装Oracle的系统包：dbms_debug，而且必须安装Oracle Probe <span class=caps>API</span> v2.0 或者更高的版本。<br>u 集成在Stored Precedure Editor里面，可以一边编写一边调试，大大提高开发效率<br>u 打开Procedure Editor后，Debug菜单激活，可以开始进行Debug工作。<br>u 允许对存储过程进行逐行调试、断点调试,也支持对触发器进行调试。<br>u 可以有断点支持，支持Watch变量，允许运行时改变变量的值<br>u 允许对多层调用的Debug支持<br>调试步骤具体举例：<br>1． 点击菜单栏的第三个按钮： ，打开Procedure Editor<br>2． 点击Procedure Editor的菜单栏的 按钮，调出需要调试的存储过程<br>3． 单击工具栏上的按钮 ，输入需要传入的参数，如果不需要传入参数，可以直接单击工具栏上的按钮： ，直接开始调试，如下图输入传入参数：</p>
<p>4． 单击菜单栏的按钮： ，可以单步跟踪，也可以定义一个断点，直接运行到断点在单步执行，在存储过程运行的过程中，当前语句会高亮度显示，并且把鼠标指针定位到变量上，Toad自动显示该变量的当前值。</p>
<p>5． 可以随时中止程序的执行，只要点Debug -&gt;Halt Execution，或者菜单栏上的按钮 ，就可以中止程序的执行<br>6． 当碰到一个存储过程调用另外一个存储过程的时候，可以选择跳过(Step Over) ，这样就直接运行那个被调用的存储过程，返回调用结果，继续这个存储过程的调试，也可以选择Trace Into ，这样就打开被调用的存储过程，进一步深入调试那个被调用的子存储过程。如果需要保持Debug信息，在编译的时候应该选择Compile Dependencies with Debug Information，就是Procedure Editor工具栏最右边的那个按钮 。<br>7． 支持对变量实时追踪：使用Watch：<br>可以在运行前，或者运行过程中对某个变量进行实时跟踪：Add Watch，把鼠标定位到该变量上，然后点击Debug -&gt;Add Watch At Cursor，该变量就会出现在Debug状态窗口上，而且实时反应该变量的当前值。如上图中的变量v_empname。可以运行时刻修改<br>8． 断点支持：<br>单击存储过程需要加断点的地方的行号，该行颜色变红，输入参数，单击执行按钮 ，可以直接运行到断点处，可以不必逐行追踪，更加高效率的进行调试。<br>Debug Option还支持条件断点，只有当满足条件的时候才会在那个地方停止，否则就好像不存在这个断点一样继续运行。</p>
<p>? 注意DBMS_OUTPUT.PUT_LINE的结果只有当程序执行完成以后才会出现，在程序执行过程中是没有结果的。</p>
<p>4． 如何用SQLab Xpert对存储过程进行调优？<br>我们知道，Oralce数据库的优化，最主要的步骤就在于SQL的优化。而在没有专门的工具（如Toad）的帮助下，进行SQL优化是一件非常困难和乏味的事情，并且需要对Oracle的深入理解和高超的Oracle调优技巧。使用Toad的SQLab Xpert Tuning模块，可以使我们普通开发人员也能够非常快速，精确的对SQL进行专家级的分析<br>在SQL Editor和Procedure Editor里面，选中需要调试的SQL语句（SQLab Xpert只能调试Select,Insert, Update,Delete语句），复制到SQL Editor里面，然后点击工具栏上的调优按钮 ，Toad会自动打开SQLab xpert 窗口，捕获当前的SQL语句，并且把它转化为符合explain plan格式的语句。<br>第一次打开Xpert的时候，Toad会提示你，需要安装一些Server端的表、视图和包等对象，可以把表存储到某个指定的表空间(如Tools)里面。可以简单的按照提示一步一步做就可以了。如果系统设定不允许Job的话（Job_queue_process=0）,Toad提示有些部件不会现在安装，可以忽略。安装完成以后，可以选择让某些非DBA用户也可以使用Toad的SQLab Xpert调优功能。<br>安装完成以后，Toad会提示你一些关于优化目标方面的问题，你可以选择每次优化都可以重新设定，或者一次设定，以后一直使用这个设定。当然如果需要，还是可以更改的，在SQLab Option xpert的窗口的Administration和Preference下面重新设定。<br>例子：<br>下面这个SQL语句涉及到多表之间的关联，有一定的复杂性，我们可以借助Toad的SQLab Xpert Option来帮助分析：<br>select a.name. b.name, c.emp_name<br>from dep a, manager b,emp c<br>where a.dep_no=c.DEP_NO<br>and b.manag_id=c.manag_id<br>and c.emp_no=3<br>我们把这个SQL复制到SQL Editor里面，单击上面的调优按钮，Toad打开SQLab Xpert Option窗口。<br>如下图：</p>
<p>从上面的图中我们可以方面的看到：在各种优化模式下，该SQL语句的执行计划分别是什么样的，Toad给出了每一种执行计划的具体每一个步骤，每个步骤的成本，该表涉及的相关的数据等，如果SQL存取的表还没有经过分析，Toad会以红色警告显示，并且很方便的帮助你对该表进行分析，收集统计数据，重建索引等，以有助于优化器作出最好的选择。可以把当前的分析结果保存到它的资料库里边，以备以后再次调用之需。<br>我们还可以求助与SQLab 的自动优化功能：点击Original <span class=caps>SQL</span>下面的auto tune按钮，Toad会对执行结果按照tkprof进行分析（当然，这需要你在initsid.ora里面设置好utl_file_dir，如果服务器是在Unix机器上的话，还需要通过FTP方式得到Trace文件，有一些小小的设置）。<br>自动优化非常高效的对所有执行计划进行实际运行比较，并且给出实际执行的时间的对比，如下图：</p>
<p>我们还可以让Toad给出实际的优化建议：点击Original <span class=caps>SQL</span>,单击下面的Advice按钮，Toad根据对SQL的分析和执行结果给出合理的建议：<br>如：<br>1． 把表和索引分别放到两个不同的表空间，因为我们在创建表，加上约束的时候没有指定USING <span class=caps>INDEX</span>子句，所以表和索引都建立在了用户的默认表空间上了。<br>2． 对表EMP，DEP和MANAGER进行分析，收集最新的统计数据，有利于CBO得到最优的执行计划<br>3． 在合适的列上创建索引：EMP的manag_id和dep_no。当表中存在大量的数据的时候，这样可以大大减少由于全表扫描带来的成本。</p>
<p>5． <span class=caps>SQL </span>Modeler：<br><span class=caps>SQL </span>Modeler可以帮助开发人员很容易的写出各种复杂的SQL语句，只需通过简单的拖动鼠标，就能够写出复杂的SQL语句来。<br>打开SQL Modeler的几个途径：<br>i. 菜单栏 Database -&gt; <span class=caps>SQL </span>Modeler ，打开窗口<br>ii. 单击工具栏第四个按钮 ，打开SQL Modeler窗口<br>窗口由三个主要部分组成：<br>n 表选择区域：最右边的那个部分，用来选择From子句中用到的表。拖动到左边的区域或者双击就选择了该表。<br>n 表模型区域：用来图形化的显示选择的表和表之间的关联关系。<br>n 生成SQL区域：这里显示用图形化方式创建的查询对应的SQL语句，</p>
<p>在SQL Modeler里面，还支持对生成的SQL进行Explain Plan，调试SQL的性能，运行SQL，看是否得到了希望的结果，保存生成的语句，或者把语句粘贴到SQL Editor里面。</p>
<p>有了SQL Modeler的帮助，即使是初级的程序员也能编写出复杂而又高效的SQL查询来。<br>比如下面的例子；</p>
<p>生成步骤：<br>1． 选出表emp, dep, manager<br>2． 用鼠标拖住emp的emp_name和emp_no, dep的name,manager的name<br>3． 双击criteria窗口的emp_no condition列，弹出窗口，输入查询条件，比如emp_no=3<br>4． 由于结果里面不希望emp_no出现，双击emp_no列的visible，设置为false<br>5． 这样就出来了需要的查询，现在可以运行查询得到结果，对查询SQL进行分析，或者在SQL Editor里面打开这个SQL，或者保存为SQL Model文件，或者再进一步处理，比如加排序， 汇总等。</p>
<p><span class=caps>DBA</span>方面的功能：<br>Toad在DBA日常管理方面的能力是非常强大的，可以帮助DBA安全快速地完成许多日常工作，还有Toad特有的一些小工具能完成一些普通方法很难做到的功能。下面大概讲述了各个常用模块的主要功能：<br>a) Database Monitor<br>提供直观的Oracle数据库运行状况，包括下面这些详细信息：<br>可以看到逻辑IO，物理IO，各个状态的session数目，SGA的利用率，共享池的使用状况，各类事件的等待状况，以及各类事件随着时间的变化情况<br>b) Instance Monitor<br>i. 可以用来检查本地tnsnames.ora文件里面定义的所有节点、Listener和数据库的运行状态和版本等相关信息。<br>ii. 可以远程启动、关闭数据库（如果设置了password验证方式）<br>c) Unix Monitor：<br>i. 可以监控Unix机器的运行状况比如详细的机器启动时间，CPU利用率，主要的进程以及这些进程占用的资源，主要的磁盘IO等。<br>d) Trace/Kill session<br>i. 方便的查看所有的连接用户相关信息：比如终端，程序，连接时间等<br>ii. 对某个用户进行跟踪，查看用户执行的SQL语句，查看语句的执行计划，<br>iii. 方便的查阅系统的Lock对象，有没有什么等待别的事务释放锁的情况，并能够轻易查出等待什么用户的什么事件结束，那个用户执行的是什么SQL。<br>iv. 查看回滚段的使用状态，什么用户，什么语句，使用的什么回滚段，多少读写量等<br>e) Oracle Parameter<br>i. 可以方便的查看Oracle系统的参数：是否默认值，参数作用的简要描述，是否可以用alter session/alter system来动态改变，对于那些可以动态改变的参数，可以双击鼠标来进行修改</p>
<p>f) <span class=caps>NLS</span>_PARAMETER:<br>i. 方便的查看session，instance，database一级的NLS参数值，<br>ii. 可以动态修改session的NLS参数值</p>
<p>g) Extents<br>i. 可以查看某个用户下的表和索引的详细的存储情况，<br>ii. 发现那些占用大量空间的表和索引，可以考虑使用相应的对策，比如分区<br>iii. 发现那些即将达到max_extents的表和索引并可以及时纠正<br>iv. 发现那些索引和表处于同一个表空间的情况，并可以及时纠正。</p>
<p>h) Tablespace<br>i. 直观的查看每个表空间的利用率，总空间，已使用空间，剩余可是用空间以及默认存储参数，和表空间是否需要整理等信息<br>ii. 查看每个表空间的状态，组成的数据文件， 以及每个数据文件的详细信息<br>iii. 查看每个表空间里面存在的对象和这些对象的详细存储特性<br>i) Tablespace Map：<br>i. 图形化的显示表空间里面各个表/索引所占用的空间，各个segment的大小，segment是否连续等信息，非常直观<br>ii.<br>j) Server Statistics:<br>i. 可以非常直观的看到系统总体运行情况，迅速定位系统瓶颈所在<br>ii. 可以查看系统范围内各类等待事件的状况，查看每个连接会话的状况，<br>k) Pinned Code：<br>i. 我们知道，频繁执行的大的存储过程最好Pin起来，这样可以避免被Oracle在内存不足的情况下换出内存，避免动态加载，也避免flush shared pool的时候被清出内存。<br>ii. 根据每个模块的大小，执行次数，决定是否要把某个存储过程PIN起来。一个按钮就搞定了。<br>l) Control Files:<br>可以查看当前系统有哪几个控制文件，以及控制文件内部记录的详细信息。<br>（实际上就是V$CONTROLFILE, V$CONTROLFILE_RECORD_SECTION）<br>m) Redo Log Manager:<br>i. 可以方便的查看LOG的组，当前日志，每个组里面的成员名字，大小，方便的增加、删除log组，切换当前日志，对日志归档进行具体的控制。<br>ii. 可以在这个界面里完成几乎所有的对redo log的操作。<br>n) Repair chained rows:<br>i. Chained rows影响系统性能，处于系统性能的考虑，需要把chained rows修复成普通的表的行。使用repaie chained rows,就可以比较容易的做到这一点。选择需要分析的表，然后分析一下，看有没有chained rows，如果有，点击repair，Toad就帮你把那些chained rows给修复了。<br>o) Identify Space Deficits<br>如果系统出现1659,1653错误，就是一个不合格的DBA。但是要即时预见这些错误，还是有一定的难度的。有了Toad的这个小工具之后，一点某个表空间，就知道这个表空间里面的剩余自由空间是否允许任何表能够扩展到下一个extent。并能够在发现问题之后，直接改正问题。</p>
<p>p) Estimate Table/Index Size<br>i. 数据库的物理规划中，表/索引的存储子句的定义是非常重要的，影响系统。但是没有什么工具的话，要为表定义合理的存储子句也不容易。<br>ii. 在Toad里面，专门有工具帮助你合理定义表/索引的存储情况：<br>1. 自己可以定义将来表中需要存储的数据的数目<br>2. 多种估计方式：<br>a) 根据对已有的数据的分析来定义表的大小（最精确，但是比较慢）<br>b) 根据表定义数据类型来定义表的大小<br>c) 根据数据字典中以前分析过的数据来估计大小（需要近期分析过该表）</p>
<p>q) Analyze All Tables<br>i. 基于CBO的SQL需要CBO提供最优化的执行路径来提高程序的执行效率，但是假如对表进行大量的DML操作之后，不及时更新表的统计数据，这时候CBO就不能选择最为有效的执行路径，导致程序执行效率低。<br>ii. 手工分析表比较麻烦，一个一个做。<br>iii. 用Toad的Analyze Alltables这个工具，可以一次分析整个模式下面的所有表，有丰富的控制选项，包括是采用估计还是完全，是否同时分析索引，估计的话，采用多大的百分比等。<br>r) Rebuild Table<br>i. 当表中的数据被反复大量的DML之后，而且PCTFREE和PCTUSED定义的不合理的情况下，表可能会变得非常破碎，占用大量的extent，索引也会相当破碎，导致效率相当低下。<br>ii. 传统的方式是通过exp/imp来解决这个问题，但是步骤实在比较麻烦，手工操作也有一定的危险性。<br>iii. 使用Rebuild Table工具，轻松搞定，而且可以手工修改一些通过EXP/IMP无法修改的参数，比如freelists ,freelists group, tablespace，initial等，还能够更改列的名字。<br>s) Relocate Index<br>i. 我们知道，表和索引一般都需要分开存放到不同的表空间，这样比较便于管理，性能上也会有一定的提高，因为可以对表和索引同时存取。<br>ii. 但是实际上很多时候，由于这样那样的原因，常常忽略了索引单独存放这个基本概念，比如建立主键约束的时候没有加USING <span class=caps>INDEX</span>子句，后来disable/enable了主键约束/唯一性约束等，都会导致把索引直接存放到和表同一个表空间里面。<br>iii. 手工发现这些索引，再逐个移动非常麻烦，容易出错，在Toad里面，就很容易根据用户/表空间来发现那些不恰当存放的索引，可以批量移动这些索引，并且允许重新定义索引的存储子句。<br>t) Generate Schema s：<br>i. 可以用来生成整个用户下所有/部分对象的DDL语句。可以把结果保存为sql语句或者保存为TOAD的自定义格式。<br>ii. 可以用来复制表结构，（EXP/IMP有非常严重的缺陷，就是从一个大的数据库倒出的表结构，无法导入到一个小的数据库里面，因为里面包含了原来表的存储信息，即使选择rows=N，也要在导入数据库里面占用相当大的空间）<br>u) Compare Schema：<br>i. 在开发的时候，有时候同时在几个开发库上开发，但是最后两个库的结构不完全一样，很难比较<br>ii. 用TOAD的这个功能，可以对两个数据库的模式（用户）下面的所有对象（包括存储过程）进行比较，可以选择具体的比较内容。<br>iii. 可以通过直接打开两个到各自数据库的连接，或者根据Toad generate schame s生成的文件进行对比。<br>iv. 可以直接生成同步两个数据库的sql脚本，给出汇总的区别简要和详细报告等。</p>
<p><del>-</del> — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — &#8211;<br>几乎是学习TOAD的唯一中文使用说明，我再也找不到比这个更好的了，特跟大家分享。<br>转载的，找不到出处了。如果原作者有意见的话，我就把这个删掉好了^_^<br></p>
<br><a href="http://yung.blog.dongfeng.net/222.html">http://yung.blog.dongfeng.net/222.html</a></div>
<img src ="http://www.cnitblog.com/chenxin9821/aggbug/65934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chenxin9821/" target="_blank">金鳞</a> 2010-05-11 13:42 <a href="http://www.cnitblog.com/chenxin9821/articles/65934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于oracle 10g中参数optimizer_mode的测试（转载）</title><link>http://www.cnitblog.com/chenxin9821/articles/65684.html</link><dc:creator>金鳞</dc:creator><author>金鳞</author><pubDate>Wed, 28 Apr 2010 09:00:00 GMT</pubDate><guid>http://www.cnitblog.com/chenxin9821/articles/65684.html</guid><wfw:comment>http://www.cnitblog.com/chenxin9821/comments/65684.html</wfw:comment><comments>http://www.cnitblog.com/chenxin9821/articles/65684.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chenxin9821/comments/commentRss/65684.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chenxin9821/services/trackbacks/65684.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 关于oracle 10g中参数optimizer_mode的测试今天，在资料上看到如下内容：screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel...&nbsp;&nbsp;<a href='http://www.cnitblog.com/chenxin9821/articles/65684.html'>阅读全文</a><img src ="http://www.cnitblog.com/chenxin9821/aggbug/65684.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chenxin9821/" target="_blank">金鳞</a> 2010-04-28 17:00 <a href="http://www.cnitblog.com/chenxin9821/articles/65684.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle的优化器(Optimizer) (CBO优化)  </title><link>http://www.cnitblog.com/chenxin9821/articles/65673.html</link><dc:creator>金鳞</dc:creator><author>金鳞</author><pubDate>Wed, 28 Apr 2010 07:01:00 GMT</pubDate><guid>http://www.cnitblog.com/chenxin9821/articles/65673.html</guid><wfw:comment>http://www.cnitblog.com/chenxin9821/comments/65673.html</wfw:comment><comments>http://www.cnitblog.com/chenxin9821/articles/65673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/chenxin9821/comments/commentRss/65673.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/chenxin9821/services/trackbacks/65673.html</trackback:ping><description><![CDATA[<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>Oracle的优化器(Optimizer) (CBO优化)<br>Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是由优化器(Optimizer)来完成的。不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的。相信你一定会用Pl/sql Developer、Toad等工具去看一个语句的执行计划,不过你可能对Rule、Choose、First rows、All rows这几项有疑问,因为我当初也是这样的,那时我也疑惑为什么选了以上的不同的项,执行计划就变了? </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>1、优化器的优化方式 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>Oracle的优化器共有两种的优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO)。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>A、RBO方式：优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>B、CBO方式：依词义可知,它是看语句的代价(Cost)了,这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小 、有少行、每行的长度等信息。这些统计信息起初在库内是没有的,是你在做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些我们应及时更新这些信息。在Oracle8及以后的版本,Oracle列推荐用CBO的方式。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>我们要明了,不一定走索引就是优的 ,比如一个表只有两行数据,一次IO就可以完成全表的检索,而此时走索引时则需要两次IO,这时对这个表做全表扫描(full table scan)是最好的。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>2、优化器的优化模式(Optermizer Mode) </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>优化模式包括Rule,Choose,First rows,All rows这四种方式,也就是我们以上所提及的。如下我解释一下： </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>Rule:不用多说,即走基于规则的方式。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>Choolse:这是我们应观注的,默认的情况下Oracle用的便是这种方式。指的是当一个表或或索引有统计信息,则走CBO的方式,如果表或索引没统计信息,表又不是特别的小,而且相应的列有索引时,那么就走索引,走RBO的方式。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>First Rows:它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>All Rows:也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走基于规则的方式。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>3、如何设定选用哪种优化模式 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>a、Instance级别 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>我们可以通过在init&lt;SID&gt;.ora文件中设定OPTIMIZER_MODE=RULE、OPTIMIZER_MODE=CHOOSE、OPTIMIZER_MODE=FIRST_ROWS、OPTIMIZER_MODE=ALL_ROWS去选用3所提的四种方式,如果你没设定OPTIMIZER_MODE参数则默认用的是Choose这种方式。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>B、Sessions级别 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>通过SQL&gt; ALTER SESSION SET OPTIMIZER_MODE=&lt;Mode&gt;;来设定。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>C、语句级别 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>这些需要用到Hint,比如: </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>SQL&gt; SELECT /*+ RULE */ a.userid, </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>2 b.name, </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>3 b.depart_name </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>4 FROM tf_f_yhda a, </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>5 tf_f_depart b </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>6 WHERE a.userid=b.userid; </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>4、为什么有时一个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢？如何解决呢 ？ </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>A、不走索引大体有以下几个原因 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>♀你在Instance级别所用的是all_rows的方式 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>♀你的表的统计信息(最可能的原因) </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>♀你的表很小,上文提到过的,Oracle的优化器认为不值得走索引。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>B、解决方法 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>♀可以修改init&lt;SID&gt;.ora中的OPTIMIZER_MODE这个参数,把它改为Rule或Choose,重起数据库。也可以使用4中所提的Hint. </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>♀删除统计信息 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>SQL&gt;analyze table table_name delete statistics; </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>♀表小不走索引是对的,不用调的。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>5、其它相关 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>A、如何看一个表或索引是否是统计信息 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>SQL&gt;SELECT * FROM user_tables </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>2 WHERE table_name=&lt;table_name&gt; </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>3 AND num_rows is not null; </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>SQL&gt;SELECT * FROM user_indexes </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>2 WHERE table_name=&lt;table_name&gt; </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>3 AND num_rows is not null; </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>b、如果我们先用CBO的方式,我们应及时去更新表和索引的统计信息,以免生形不切合实的执行计划。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>SQL&gt; ANALYZE TABLE table_name COMPUTE STATISTICS; </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>SQL&gt; ANALYZE INDEX index_name ESTIMATE STATISTICS; </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>具体的ANALYZE语句请参照Oracle8i/9i 的refrence文档。</font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>--------------------------------------------------------------------</font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>有关CBO优化的几个问题</font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>--------------------------------------------------------------------</font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>如何使用CostBased优化器优化查询操作？ </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>Oracle 提供了基于成本（CostBased）和基于规则（RuleBased）两种优化器，简称为CBO和RBO，用于确定查询操作的执行计划。CostBased优化器将计算各种执行计划的开销，然后选出最低成本的执行计划。可使用下列方法选择使用CBO： </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>1.在INIT.ORA文件中设置参数OPTIMIZER_MODE=choose； </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>2.在Session级设置OPTIMIZER_GOAL=FIRST_ROWS或ALL_ROWS。</font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>3、在查询语句中使用Hint，包括CHOOSE、ALL_ROWS、FIRST_ROWS等。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>为什么我的执行计划不是最好的？ </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>CBO是依赖于表的一些统计信息来选择出最低成本的执行计划，当这些统计信息不准确时，产生的计划便可能不是最佳的。因而应使用ANALYZE命令及时对表进行分析统计。 </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>我的查询上周的性能很好，为什么现在查询速度很慢？ </font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>这是由于执行计划被改变而造成的，下列因素将会改变一个执行计划：</font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>1、INIT.ORA文件中的参数OPTIMIZER_MODE被改变；</font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>2、表上定义或改变了并行查询度；</font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>3、使用ANALYZE命令重新分析了表，而且使用了ESTIMATE方式，这种方式选择不同的百分比可产生不同的分析结果；</font></p>
<p><font style="FONT-SIZE: 12pt; COLOR: #000000" color=#ffff66 size=1>4、DB_FILE_MULTIBLOCK_READ_COUNT参数被修改；5、SORT_AREA_SIZE参数被修改。<br><br>转载自：<a href="http://jiluola.blog.sohu.com/71922562.html">http://jiluola.blog.sohu.com/71922562.html</a><br></font></p>
<img src ="http://www.cnitblog.com/chenxin9821/aggbug/65673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/chenxin9821/" target="_blank">金鳞</a> 2010-04-28 15:01 <a href="http://www.cnitblog.com/chenxin9821/articles/65673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>