﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-共同学习java-文章分类-数据库</title><link>http://www.blogjava.net/huanghuizz/category/14529.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 22 Jan 2008 08:49:27 GMT</lastBuildDate><pubDate>Tue, 22 Jan 2008 08:49:27 GMT</pubDate><ttl>60</ttl><item><title>探查“ORA-01000：超出最多允许打开的游标数” </title><link>http://www.blogjava.net/huanghuizz/articles/177000.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Tue, 22 Jan 2008 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/177000.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/177000.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/177000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/177000.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/177000.html</trackback:ping><description><![CDATA[<table style="text-align: left; 615px: " cellspacing="2" cellpadding="2">
    <tbody>
        <tr>
            <td style="vertical-align: top">
            <p><font size="2"><strong>诊断查询</strong><span> </span><br />
            以下 SQL 查询有助于诊断 <span style="font-family: times new roman">ORA-01000</span> 问题。要执行这些查询，需要以管理员身份登录数据库，或获得数据库管理员从那些 <font style="font-family: courier new">v$</font> 视图中进行选择的授权。</font></p>
            <font size="2"><strong>1. 检查数据库中的 OPEN_CURSORS 参数值。</strong><br />
            Oracle 使用 <font style="font-family: courier new">init.ora</font> 中的初始化参数 <font style="font-family: courier new">OPEN_CURSORS</font> 指定一个会话一次最多可以拥有的游标数。缺省值为 50。遗憾的是，此缺省值通常对 WebLogic Server 这样的系统来说过小。要获得数据库中 <font style="font-family: courier new">OPEN_CURSORS</font> 参数的值，可以使用以下查询：</font></td>
        </tr>
    </tbody>
</table>
<font size="2"></font>
<table cellspacing="2" cellpadding="2" border="1">
    <tbody>
        <tr>
            <td style="vertical-align: top; background-color: rgb(204,204,204)"><font size="2">SQL&gt; show parameter open_cursors; </font>
            <p><font size="2">NAME TYPE VALUE <br />
            ------------------------------------ ----------- --------------- <br />
            open_cursors integer 1000</font></p>
            <font size="2"></font></td>
        </tr>
    </tbody>
</table>
<br />
<table style="text-align: left; 615px: " cellspacing="2" cellpadding="2">
    <tbody>
        <tr>
            <td style="vertical-align: top">
            <p><font size="2">重要的是将 <font style="font-family: courier new">OPEN_CURSORS</font> 的值设置得足够大，以避免应用程序用尽所有打开的游标。应用程序不同，该值也不同。即便会话打开的游标数未达 <font style="font-family: courier new">OPEN_CURSORS</font> 指定的数量（即设置的值高于实际需要的值），也不会增加系统开销。</font></p>
            <font size="2"><strong>2. 获取打开的游标数</strong>。<br />
            下面的查询按降序显示用户&#8220;SCOTT&#8221;为每个会话打开的游标数。</font></td>
        </tr>
    </tbody>
</table>
<font size="2"></font>
<table cellspacing="2" cellpadding="2" border="1">
    <tbody>
        <tr>
            <td style="vertical-align: top; background-color: rgb(204,204,204)"><font size="2">SQL&gt; select o.sid, osuser, machine, count(*) num_curs<br />
            2 from v$open_cursor o, v$session s<br />
            3 where user_name = 'SCOTT' and o.sid=s.sid <br />
            4 group by o.sid, osuser, machine<br />
            5 order by num_curs desc; <br />
            SID OSUSER MACHINE NUM_CURS <br />
            ----------------------------------------------------- <br />
            217 m1 1000<br />
            96 m2 10 <br />
            411 m3 10 <br />
            50 test 9 </font></td>
        </tr>
    </tbody>
</table>
<br />
<table style="text-align: left; 615px: " cellspacing="2" cellpadding="2">
    <tbody>
        <tr>
            <td style="vertical-align: top"><font size="2">在 WebLogic Server 中使用连接池时，此查询中的 <font style="font-family: times new roman">user_name</font> 应为用于创建连接池的 <font style="font-family: times new roman">user_name</font>（假定是从连接池得到连接）。该查询结果还给出了计算机名称。请在查询结果中找出打开游标数量大的 <font style="font-family: times new roman">SID</font> 和运行 WebLogic Server 的计算机的名称。 </font>
            <p><font size="2">请注意，<font style="font-family: courier new">v$open_cursor</font> 可以跟踪会话中 <font style="font-family: times new roman">PARSED</font> 和 <font style="font-family: times new roman">NOT CLOSED</font> 的动态游标（使用 <font style="font-family: courier new">dbms_sql.open_cursor()</font> 打开的游标）。它不会跟踪未经分析（但已打开）的动态游标。在应用程序中使用动态游标并不常见。本模式的前提是未使用动态游标。 </font></p>
            <font size="2"><strong>3. 获取为游标执行的 SQL。</strong>使用在以上查询结果中找到的 SID 运行下面的查询：</font></td>
        </tr>
    </tbody>
</table>
<br />
<table cellspacing="2" cellpadding="2" border="1">
    <tbody>
        <tr>
            <td style="vertical-align: top; background-color: rgb(204,204,204)"><font size="2">SQL&gt; select q.sql_text <br />
            2 from v$open_cursor o, v$sql q<br />
            3 where q.hash_value=o.hash_value and o.sid = 217; </font>
            <p><font size="2">SQL_TEXT <br />
            ------------------------------------------------------------------------------------------------------------------------<br />
            select * from empdemo where empid='212' <br />
            select * from empdemo where empid='321' <br />
            select * from empdemo where empid='947' <br />
            select * from empdemo where empid='527' <br />
            ...</font></p>
            <font size="2"></font></td>
        </tr>
    </tbody>
</table>
<br />
<table style="text-align: left; 615px: " cellspacing="2" cellpadding="2">
    <tbody>
        <tr>
            <td style="vertical-align: top">
            <p><font size="2">结果将显示正在连接上执行的查询。它提供了一个入手点，让您可以反向跟踪到打开游标的来源。</font><a href="http://xhailiang.itpub.net/#TOP"><font size="2">返回页首</font></a></p>
            <p><font size="2"><strong>常见成因及解决办法</strong><span> </span><br />
            下面是查找问题成因及可能的解决办法的步骤。</font></p>
            <font size="2"><strong>代码惯例</strong><span> </span><br />
            此问题的最常见成因是未正常关闭 JDBC 对象。使用</font><a href="http://xhailiang.itpub.net/#Diagnostic_Queries"><font size="2">诊断查询</font></a><font size="2">中第三个查询的结果在应用程序代码中反向跟踪，确保将所有 JDBC 对象都正常关闭。BEA 建议在 <font style="font-family: courier new">finally</font> 块中显式关闭 Connection、Statement 和 ResultSet 等 JDBC 对象，以确保无论是在正常还是异常情况下都将所有 JDBC 对象关闭。下面是一个常规示例：</font></td>
        </tr>
    </tbody>
</table>
<br />
<table cellspacing="2" cellpadding="2" border="1">
    <tbody>
        <tr>
            <td style="vertical-align: top; background-color: rgb(204,204,204)"><font size="2">Connection conn = null; <br />
            Statement stmt = null; <br />
            ResultSet rs = null; </font>
            <p><font size="2">try { <br />
            conn = getConnection(); //Method getConnection will return a JDBC Connection <br />
            stmt = conn.createStatement();<br />
            rs = stmt.executeQuery("select * from empdemo"); <br />
            // do work <br />
            } catch (Exception e) { <br />
            // handle any exceptions<br />
            } finally { <br />
            try { <br />
            if(rs != null) <br />
            rs.close(); <br />
            } catch (SQLException rse) {}<br />
            try { <br />
            if(stmt != null) <br />
            stmt.close(); <br />
            } catch (SQLException sse) {}<br />
            try { <br />
            if(conn != null) <br />
            conn.close(); <br />
            } catch (SQLException cse) {}<br />
            }</font></p>
            <font size="2"></font></td>
        </tr>
    </tbody>
</table>
<br />
<table style="text-align: left; 615px: " cellspacing="2" cellpadding="2">
    <tbody>
        <tr>
            <td style="vertical-align: top"><font size="2">请避免采用任何放弃 JDBC 对象的代码惯例。下面的代码惯例在每个循环迭代中都获得一个新的 Connection、Statement 和 ResultSet，但它没有关闭每个迭代的 JDBC 对象。因此，它会导致 JDBC 对象泄漏。</font></td>
        </tr>
    </tbody>
</table>
<br />
<table cellspacing="2" cellpadding="2" border="1">
    <tbody>
        <tr>
            <td style="vertical-align: top; background-color: rgb(204,204,204)"><font size="2">Connection conn = null; <br />
            Statement stmt = null; <br />
            ResultSet rs = null; <br />
            String[] queries = new String[10]; <br />
            //Define queries </font>
            <p><font size="2">try { <br />
            for(int i = 0; i &lt; 10; i++) { <br />
            conn = getConnection(); <br />
            stmt = conn.createStatement(); <br />
            rs = stmt.executeQuery(queries[i]); <br />
            // do work <br />
            } <br />
            } catch (Exception e) { <br />
            // handle any exceptions<br />
            } finally { <br />
            try { <br />
            if(rs != null) <br />
            rs.close(); <br />
            } catch (SQLException rse) {}<br />
            try { <br />
            if(stmt != null) <br />
            stmt.close(); <br />
            } catch (SQLException sse) {}<br />
            try { <br />
            if(conn != null) <br />
            conn.close(); <br />
            } catch (SQLException cse) {}<br />
            }</font></p>
            </td>
        </tr>
    </tbody>
</table>
<br />
<table style="text-align: left; 615px: " cellspacing="2" cellpadding="2">
    <tbody>
        <tr>
            <td style="vertical-align: top"><font size="2">尽管根据 JDBC 规范的规定，关闭 Connection 时正常情况下也会将 Statement 和 ResultSet 关闭，但好的做法是：如果在一个 Connection 对象上创建了多个 Statement，则在使用完 Statement 和 ResultSet 后立即显式将它们关闭。如果未立即显式关闭 Statement 和 ResultSet，游标可能会积聚并在关闭 Connection 前超过数据库允许的最大数量。例如，在以下代码片断中，正常情况下通过 <font style="font-family: courier new">finally</font> 块关闭 Connection 时，也会将 ResultSet 和 Statement 关闭。不过，此代码片断在一个连接上创建了多个 Statement 和 ResultSet。因此在循环完成前，可能已发生&#8220;超出最多允许打开的游标数&#8221;问题。</font></td>
        </tr>
    </tbody>
</table>
<br />
<table cellspacing="2" cellpadding="2" border="1">
    <tbody>
        <tr>
            <td style="vertical-align: top; background-color: rgb(204,204,204)"><br />
            <font size="2">Connection conn = null; </font>
            <p><font size="2">try{ <br />
            conn = getConnection();</font></p>
            <p><font size="2">for(int i = 0; i &lt; NUM_STMT; i++) { <br />
            Statement stmt = null; <br />
            ResultSet rs = null; <br />
            <br />
            stmt = conn.createStatement(); <br />
            rs = stmt.executeQuery(/*some query*/); <br />
            //do work <br />
            } <br />
            } catch(SQLException e) { <br />
            // handle any exceptions<br />
            } finally { <br />
            try{ <br />
            if(conn != null) <br />
            conn.close(); <br />
            } catch(SQLException ignor) {}<br />
            }</font></p>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<br />
<table style="text-align: left; 615px: " cellspacing="2" cellpadding="2">
    <tbody>
        <tr>
            <td style="vertical-align: top"><a href="http://xhailiang.itpub.net/#TOP"><font size="2">返回页首</font></a><br />
            <br />
            <font size="2"><strong>语句缓存</strong><br />
            为提高性能，WebLogic Server 提供了一种功能，让您可以在使用连接池时将预处理语句和可调用语句载入缓存。当 WebLogic Server 将预处理语句或可调用语句载入缓存时，在许多情况下，DBMS 将为每个打开的语句都保留游标。因此，语句缓存可能是&#8220;超出最多允许打开的游标数&#8221;问题的成因。&#8220;语句缓存大小&#8221;属性决定在每个连接池实例中为每个连接缓存的预处理和可调用语句的总数。如果缓存的语句过多，可能会导致超过数据库服务器上打开游标数的上限。 </font>
            <p><font size="2">请注意，各版本 WebLogic Server 的缺省语句缓存大小是有差异的。示例： </font></p>
            <ul>
                <li><font size="2">在 WebLogic Server 6.1 中，缺省的预处理语句缓存大小为 0 (</font><a href="http://e-docs.bea.com/wls/docs61/adminguide/jdbc.html#1133404"><font size="2">http://e-docs.bea.com/wls/docs61/adminguide/jdbc.html#1133404</font></a><font size="2"> (English))。</font>
                <li><font size="2">在 WebLogic Server 7.0 中，非 XA 和 XA 预处理语句的缺省缓存大小为 5/语句 (</font><a href="http://e-docs.bea.com/wls/docs70/adminguide/jdbc.html#1144702"><font size="2">http://e-docs.bea.com/wls/docs70/adminguide/jdbc.html#1144702</font></a><font size="2"> (English))。 </font>
                <li><font size="2">在 WebLogic Server 8.1 中，预处理语句和可调用语句的缺省缓存大小合计为 10 (</font><a href="http://e-docs.bea.com/wls/docs81/ConsoleHelp/jdbc_connection_pools.html#1107805"><font size="2">http://e-docs.bea.com/wls/docs81/ConsoleHelp/jdbc_connection_pools.html#1107805</font></a><font size="2"> (English))。 </font>
                <li><font size="2">此外，在不同的 WebLogic Server 版本中，语句缓存的连接池属性名称和缓存算法的可配置性是不同的（有关详细信息，请参阅文档）。因此，如果最近对旧版本 WebLogic Server 进行了升级，语句缓存的行为变化可能会影响打开游标的数量。请将这种情况考虑在内。 </font></li>
            </ul>
            <p><font size="2">要确定&#8220;超出最多允许打开的游标数&#8221;问题是否与语句缓存有关，可以通过将语句缓存大小设置为 0 将此功能关闭或减少缓存大小，再确认是否仍会出现错误。如果在减少缓存大小后问题没有发生，则说明连接池原有的语句缓存过大或 DBMS 中打开游标数的上限过低。可能需要考虑调整其中的一个值。如果发现连接上打开的游标数持续增加，但在将语句缓存大小设置为 0 后没有出现这种现象，则可能说明存在游标泄漏问题。这可能是由使用的 JDBC 驱动程序所致，也可能是 WebLogic Server 本身的一个错误。请尝试使用其它 JDBC 驱动程序。如果使用其它 JDBC 驱动程序后仍发生同样的问题，请将此问题报告给 BEA，这样支持工程师可以对问题做进一步探查，以确定该问题是否为 WebLogic Server 自身的一个错误。 </font></p>
            <p><a href="http://xhailiang.itpub.net/#TOP"><font size="2">返回页首</font></a><font size="2"> </font></p>
            <p><font size="2"><strong>数据库驱动程序</strong><span> </span><br />
            &#8220;超出最多允许打开的游标数&#8221;问题的另一个可能成因是 JDBC 驱动程序有问题。为分清问题是驱动程序问题还是 WebLogic 连接池问题，如果有可重现的测试案例，可以尝试执行以下步骤。</font></p>
            <p><font size="2"><strong>1. 直接从驱动程序获取连接。</strong><br />
            在测试案例中，绕过 WebLogic 连接池直接从驱动程序获取 JDBC 连接。但请不要关闭连接，只需让它们以数组或某种其它结构形式保持打开状态，然后确认游标泄漏是否仍然存在。不关闭连接是因为要模拟使用连接池时的行为。使用连接池时，<font style="font-family: courier new">connection.close()</font> 并未真正地关闭物理连接，而是将连接返回到池中。</font></p>
            <font size="2"><strong>2. 尝试使用其它 JDBC 驱动程序。</strong><br />
            可以尝试使用其它供应商的 JDBC 驱动程序或升级版的驱动程序，然后确认问题是否仍然存在。可以使用元数据来验证所使用的驱动程序是否正确。示例代码与下面的类似：</font></td>
        </tr>
    </tbody>
</table>
<br />
<table cellspacing="2" cellpadding="2" border="1">
    <tbody>
        <tr>
            <td style="vertical-align: top; background-color: rgb(204,204,204)"><font size="2">Connection conn = getConnection(); <br />
            DatabaseMetaData dmd = conn.getMetaData();<br />
            System.out.println("JDBC Driver Name is " + dmd.getDriverName()); <br />
            System.out.println("JDBC Driver Version is " + dmd.getDriverVersion()); </font></td>
        </tr>
    </tbody>
</table>
<br />
<table style="text-align: left; 615px: " cellspacing="2" cellpadding="2">
    <tbody>
        <tr>
            <td style="vertical-align: top">
            <p><font size="2"><strong>3. XA 驱动程序错误</strong>。<br />
            如果使用的是 Oracle XA 驱动程序，并且数据库中出现了大量类似&#8220;<em>SELECT count (*) FROM SYS.DBA_PENDING_TRANSACTIONS</em>&#8221;的查询，则可能是 Oracle XA 驱动程序存在游标泄漏问题。在有关 MetaLink 的案例 3151681 中有对此问题的描述，并且版本 10.1.0.2 中已修正了该问题。<br />
            此外，在使用 XA 驱动程序时，请确保按在 </font><a href="http://e-docs.bea.com/wls/docs81/jta/thirdpartytx.html#1075181"><font size="2">http://e-docs.bea.com/wls/docs81/jta/thirdpartytx.html#1075181</font></a><font size="2"> (English) 中所述，在 Database Server 上启用 XA（例如，<font style="font-family: courier new">grant select on dba_pending_transactions to public</font>）。 </font></p>
            <p><font size="2">如果问题是 JDBC 驱动程序问题，但又不得不使用该驱动程序，一种以变通方式解决游标泄漏问题的方法是不时重设 WebLogic 连接池，或收缩连接池。有关重设或收缩连接池的方法，请参阅 WebLogic 文档（如果是 8.1 版本，该文档位于 </font><a href="http://e-docs.bea.com/wls/docs81/ConsoleHelp/domain_jdbcconnectionpool_control.html"><font size="2">http://e-docs.bea.com/wls/docs81/ConsoleHelp/domain_jdbcconnectionpool_control.html</font></a><font size="2"> (Enlish)）。 </font></p>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/177000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2008-01-22 13:20 <a href="http://www.blogjava.net/huanghuizz/articles/177000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle IMP 命令详解</title><link>http://www.blogjava.net/huanghuizz/articles/168991.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Thu, 20 Dec 2007 04:46:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/168991.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/168991.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/168991.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/168991.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/168991.html</trackback:ping><description><![CDATA[<p class="postText" align="left"><font size="2">1. 获取帮助 </font></p>
<div twffan="done">
<pre><font size="2"> imp help=y</font></pre>
</div>
<p class="postText" align="left"><font size="2">2. 导入一个完整数据库</font></p>
<div twffan="done">
<pre><font size="2"> imp system/manager file=bible_db log=dible_db full=y ignore=y</font></pre>
</div>
<p class="postText" align="left"><font size="2">3. 导入一个或一组指定用户所属的全部表、索引和其他对象</font></p>
<div twffan="done">
<pre><font size="2"> imp system/manager file=seapark log=seapark fromuser=seapark imp </font></pre>
<pre><font size="2"> system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)</font></pre>
</div>
<p class="postText" align="left"><font size="2">4. 将一个用户所属的数据导入另一个用户</font></p>
<div twffan="done">
<pre><font size="2"> imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy</font></pre>
<pre><font size="2"> imp system/manager file=tank log=tank fromuser=(seapark,amy)</font></pre>
<pre><font size="2"> touser=(seapark1, amy1)</font></pre>
</div>
<p class="postText" align="left"><font size="2">5. 导入一个表</font></p>
<div twffan="done">
<pre><font size="2"> imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)</font></pre>
</div>
<p class="postText" align="left"><font size="2">6. 从多个文件导入</font></p>
<div twffan="done">
<pre><font size="2"> imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4) </font></pre>
<pre><font size="2">log=paycheck, filesize=1G full=y</font></pre>
</div>
<p class="postText" align="left"><font size="2">7. 使用参数文件</font></p>
<div twffan="done">
<pre><font size="2"> imp system/manager parfile=bible_tables.par</font></pre>
</div>
<blockquote class="postText">
<p align="left"><font size="2">bible_tables.par参数文件：</font></p>
</blockquote>
<div twffan="done">
<pre><font size="2"> #Import the sample tables used for the Oracle8i Database Administrator's </font></pre>
<pre><font size="2">Bible. fromuser=seapark touser=seapark_copy file=seapark log=seapark_import</font></pre>
</div>
<p class="postText" align="left"><font size="2">8. 增量导入</font></p>
<div twffan="done">
<pre><font size="2"> imp system./manager inctype= RECTORE FULL=Y FILE=A</font></pre>
<pre>
<pre>
<div class="diaryContent" id="diary650062" twffan="done">
<h5 class="postTitle"><a href="http://blog.csdn.net/adijava/archive/2004/07/28/54573.aspx"><font color="#007799">Oracle imp/exp</font></a> </h5>
<p class="postText" align="left"><font face="Verdana" size="2">C:Documents and Settingsadministrator&gt;exp help=y</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">Export: Release 9.2.0.1.0 - Production on 星期三 7月 28 17:04:43 2004</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.</font></p>
<p class="postText" align="left"><font size="2"> </font></p>
<p class="postText" align="left"><font face="Verdana" size="2">通过输入 EXP 命令和用户名/口令，您可以<br />
后接用户名/口令的命令:</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">例程: EXP SCOTT/TIGER</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">或者，您也可以通过输入跟有各种参数的 EXP 命令来控制&#8220;导出&#8221;<br />
按照不同参数。要指定参数，您可以使用关键字:</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)<br />
例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)<br />
或 TABLES=(T1: P1,T1: P2)，如果 T1 是分区表</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">USERID 必须是命令行中的第一个参数。</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">关键字  说明(默认)        关键字      说明(默认)<br />
--------------------------------------------------------------------------<br />
USERID   用户名/口令           FULL         导出整个文件 (N)<br />
BUFFER   数据缓冲区大小         OWNER     所有者用户名列表<br />
FILE       输出文件 (EXPDAT.DMP)  TABLES       表名称列表<br />
COMPRESS   导入到一个区 (Y) RECORDLENGTH IO 记录的长度<br />
GRANTS  导出权限 (Y)           INCTYPE      增量导出类型<br />
INDEXES    导出索引 (Y)         RECORD       跟踪增量导出 (Y)<br />
DIRECT     直接路径 (N)            TRIGGERS     导出触发器 (Y)<br />
LOG        屏幕输出的日志文件  STATISTICS   分析对象 (ESTIMATE)<br />
ROWS    导出数据行 (Y)        PARFILE      参数文件名<br />
CONSISTENT 交叉表的一致性 (N) CONSTRAINTS  导出的约束条件 (Y)</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">OBJECT_CONSISTENT    只在对象导出期间设置为读的事务处理 (N)<br />
FEEDBACK             每 x 行的显示进度 (0)<br />
FILESIZE             每个转储文件的最大大小<br />
FLASHBACK_SCN        用于将会话快照设置回以前状态的 SCN<br />
FLASHBACK_TIME       用于获取最接近指定时间的 SCN 的时间<br />
QUERY                用于导出表的子集的 select 子句<br />
RESUMABLE            遇到与空格相关的错误时挂起 (N)<br />
RESUMABLE_NAME       用于标识可恢复语句的文本字符串<br />
RESUMABLE_TIMEOUT    RESUMABLE 的等待时间<br />
TTS_FULL_CHECK       对 TTS 执行完整的或部分相关性检查<br />
TABLESPACES          要导出的表空间列表<br />
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)<br />
TEMPLATE             调用 iAS 模式导出的模板名</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">在没有警告的情况下成功终止导出。<br />
==================================================</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">C:Documents and Settingsadministrator&gt;imp help=y</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">Import: Release 9.2.0.1.0 - Production on 星期三 7月 28 17:06:54 2004</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.</font></p>
<p class="postText" align="left"><font size="2"> </font></p>
<p class="postText" align="left"><font face="Verdana" size="2">可以通过输入 IMP 命令和您的用户名/口令<br />
后接用户名/口令的命令:</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">例程: IMP SCOTT/TIGER</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">或者, 可以通过输入 IMP 命令和各种参数来控制&#8220;导入&#8221;<br />
按照不同参数。要指定参数，您可以使用关键字:</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)<br />
例程: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N<br />
或 TABLES=(T1: P1,T1: P2)，如果 T1 是分区表</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">USERID 必须是命令行中的第一个参数。</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">关键字  说明（默认）        关键字      说明（默认）<br />
--------------------------------------------------------------------------<br />
USERID   用户名/口令           FULL         导入整个文件 (N)<br />
BUFFER   数据缓冲区大小         FROMUSER     所有人用户名列表<br />
FILE     输入文件 (EXPDAT.DMP)    TOUSER       用户名列表<br />
SHOW     只列出文件内容 (N) TABLES      表名列表<br />
IGNORE   忽略创建错误 (N)    RECORDLENGTH  IO 记录的长度<br />
GRANTS  导入权限 (Y)           INCTYPE      增量导入类型<br />
INDEXES 导入索引 (Y)          COMMIT       提交数组插入 (N)<br />
ROWS    导入数据行 (Y)        PARFILE      参数文件名<br />
LOG      屏幕输出的日志文件   CONSTRAINTS  导入限制 (Y)<br />
DESTROY                覆盖表空间数据文件 (N)<br />
INDEXFILE              将表/索引信息写入指定的文件<br />
SKIP_UNUSABLE_INDEXES  跳过不可用索引的维护 (N)<br />
FEEDBACK               每 x 行显示进度 (0)<br />
TOID_NOVALIDATE        跳过指定类型 ID 的验证<br />
FILESIZE               每个转储文件的最大大小<br />
STATISTICS             始终导入预计算的统计信息<br />
RESUMABLE            在遇到有关空间的错误时挂起 (N)<br />
RESUMABLE_NAME         用来标识可恢复语句的文本字符串<br />
RESUMABLE_TIMEOUT      RESUMABLE 的等待时间<br />
COMPILE                编译过程, 程序包和函数 (Y)<br />
STREAMS_CONFIGURATION  导入 Streams 的一般元数据 (Y)<br />
STREAMS_INSTANITATION  导入 Streams 的实例化元数据 (N)</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">下列关键字仅用于可传输的表空间<br />
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)<br />
TABLESPACES 将要传输到数据库的表空间<br />
DATAFILES 将要传输到数据库的数据文件<br />
TTS_OWNERS 拥有可传输表空间集中数据的用户</font></p>
<p class="postText" align="left"><font face="Verdana" size="2">成功终止导入，但出现警告。</font></p>
<p class="postText" align="left"><font size="2"></font></p>
<p class="postText" align="left"><font size="2"></font></p>
<p class="postText" align="left"><font size="2"></font></p>
<h2 class="diaryTitle" align="left"><font size="2">oracle的imp和exp的一些用法- -</font></h2>
<p class="postText" align="left"><font size="2">                                       </font></p>
<p class="postText" align="left"><font size="2"></font></p>
<p class="postText" align="left"><font size="2">Oracle8i/9i EXP/IMP使用经验  <br />
一、8i EXP常用选项 </font></p>
<p class="postText" align="left"><font size="2">1、FULL，这个用于导出整个数据库，在ROWS=N一起使用时，可以导出整个数据库的结构。例如： </font></p>
<p class="postText" align="left"><font size="2">exp sys file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y </font></p>
<p class="postText" align="left"><font size="2">2、BUFFER和FEEDBACK，在导出比较多的数据时，我会考虑设置这两个参数。例如： </font></p>
<p class="postText" align="left"><font size="2">exp new file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT </font></p>
<p class="postText" align="left"><font size="2">3、FILL和LOG，这两个参数分别指定备份的DMP名称和LOG名称，包括文件名和目录，例子见上面。 </font></p>
<p class="postText" align="left"><font size="2">需要说明的是，EXP可以直接备份到磁带中，即使用FILE=/dev/rmt0(磁带设备名)，但是一般我们都不这么做，原因有二：一、这样做的速度会慢很多，二、现在一般都是使用磁带库的，不建议直接对磁带进行操作。至于没有使用磁带库的朋友可以考虑和UNIX的TAR结合使用。 </font></p>
<p class="postText" align="left"><font size="2">如果你真想使用EXP直接到磁带，你可以参考Metalink文章&#8220;EXPORTING TO TAPE ON UNIX SYSTEMS&#8221;（文档号：30428.1），该文中有详细解释。 </font></p>
<p class="postText" align="left"><font size="2">4、COMPRESS参数将在导出的同时合并碎块，尽量把数据压缩到initial的EXTENT里，默认是N，一般建议使用。DIRECT参数将告诉EXP直接读取数据，而不像传统的EXP那样，使用SELECT来读取表中的数据，这样就减少了SQL语句处理过程。一般也建议使用。不过有些情况下DIRECT参数是无法使用的。 </font></p>
<p class="postText" align="left"><font size="2">5、如何使用SYSDBA执行EXP/IMP？ </font></p>
<p class="postText" align="left"><font size="2">这是一个很现实的问题，有时候我们需要使用SYSDBA来执行EXP/IMP，如进行传输表空间的EXP/IMP，以及在9i下用SYS用户来执行EXP/IMP时，都需要使用SYSDBA才可。我们可以使用下面方式连入EXP/IMP： </font></p>
<p class="postText" align="left"><font size="2">exp "'sys/sys as sysdba'" file=1.dmp tables=gototop.t rows=n </font></p>
<p class="postText" align="left"><font size="2">6、QUERY参数后面跟的是where条件，值得注意的是，整个where子句需要使用""括起来，where子句的写法和SELECT中相同，如果是UNIX平台所有"和'都需要使用u26469屏蔽它们的特殊含义： </font></p>
<p class="postText" align="left"><font size="2">exp gototop/gototop file=1.dmp log=1.log tables=cyx.t query="where c1=20 and c2=gototop" </font></p>
<p class="postText" align="left"><font size="2">如果是windows平台，则使用下面的格式： </font></p>
<p class="postText" align="left"><font size="2">exp </font><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#99;&#47;&#99;&#64;&#110;&#99;&#110;"><font color="#007799" size="2">c/c@ncn</font></a><font size="2"> file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'""" </font></p>
<p class="postText" align="left"><font size="2">二、8i IMP常用选项 </font></p>
<p class="postText" align="left"><font size="2">1、FROMUSER和TOUSER，使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。 </font></p>
<p class="postText" align="left"><font size="2">2、IGNORE、GRANTS和INDEXES，其中IGNORE参数将忽略表的存在，继续导入，这个对于需要调整表的存储参数时很有用，我们可以先根据实际情况用合理的存储参数建好表，然后直接导入数据。而GRANTS和INDEXES则表示是否导入授权和索引，如果想使用新的存储参数重建索引，或者为了加快到入速度，我们可以考虑将INDEXES设为N，而GRANTS一般都是Y。 </font></p>
<p class="postText" align="left"><font size="2">另外一个EXP/IMP都有的参数是PARFILE，它是用来定义EXP/IMP的参数文件，也就是说，上面的参数都可以写在一个参数文件中，但我们一般很少使用。 </font></p>
<p class="postText" align="left"><font size="2">三、Oracle9i EXP功能描述 </font></p>
<p class="postText" align="left"><font size="2">Oracle9i EXP在原有的基础上新增了部分新的参数，按功能主要分为以下几个部分： </font></p>
<p class="postText" align="left"><font size="2">1、OBJECT_CONSISTENT - 用于设置EXP对象为只读以保持对象的一致性。默认是N。 </font></p>
<p class="postText" align="left"><font size="2">2、FLASHBACK_SCN和FLASHBACK_TIME - 用于支持FLASHBACK功能而新增。 </font></p>
<p class="postText" align="left"><font size="2">3、RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用于支持RESUMABLE空间分配而新增。 </font></p>
<p class="postText" align="left"><font size="2">4、TTS_FULL_CHECK - 用于在传输表空间时使用依赖性检查。 </font></p>
<p class="postText" align="left"><font size="2">5、TEMPLATE - 用于支持iAS。 </font></p>
<p class="postText" align="left"><font size="2">6、TABLESPACES - 设置表空间导出模式。个人觉得对于一般用户而言，这个才是新增参数中最实用的一个，可以让用户在原来的FULL、OWNER、TABLES的基础上多了一种选择，使得EXP更加灵活。 </font></p>
<p class="postText" align="left"><font size="2">四、不同版本的EXP/IMP问题？ </font></p>
<p class="postText" align="left"><font size="2">一般来说，从低版本导入到高版本问题不大，麻烦的是将高版本的数据导入到低版本中，在Oracle9i之前，不同版本Oracle之间的EXP/IMP可以通过下面的方法来解决： </font></p>
<p class="postText" align="left"><font size="2">1、在高版本数据库上运行底版本的catexp.sql； </font></p>
<p class="postText" align="left"><font size="2">2、使用低版本的EXP来导出高版本的数据； </font></p>
<p class="postText" align="left"><font size="2">3、使用低版本的IMP将数据库导入到底版本数据库中； </font></p>
<p class="postText" align="left"><font size="2">4、在高版本数据库上重新运行高版本的catexp.sql脚本。 </font></p>
<p class="postText" align="left"><font size="2">但在9i中，上面的方法并不能解决问题。如果直接使用底版本EXP/IMP会出现如下错误： </font></p>
<p class="postText" align="left"><font size="2">EXP-00008: ORACLE error %lu encountered </font></p>
<p class="postText" align="left"><font size="2">ORA-00904: invalid column name </font></p>
<p class="postText" align="left"><font size="2">这已经是一个公布的BUG，需要等到Oracle10.0才能解决，BUG号为2261，你可以到METALINK上去查看有关此BUG的详细信息。 </font></p>
<p class="postText" align="left"><font size="2">BUG归BUG，我们的工作还是要做，在没有Oracle的支持之前，我们就自己解决。在Oracle9i中执行下面的SQL重建exu81rls视图即可。 </font></p>
<p class="postText" align="left"><font size="2">CREATE OR REPLACE view exu81rls  </font></p>
<p class="postText" align="left"><font size="2">(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)  </font></p>
<p class="postText" align="left"><font size="2">AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,  </font></p>
<p class="postText" align="left"><font size="2">decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')  </font></p>
<p class="postText" align="left"><font size="2">|| decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')  </font></p>
<p class="postText" align="left"><font size="2">|| decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')  </font></p>
<p class="postText" align="left"><font size="2">|| decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),  </font></p>
<p class="postText" align="left"><font size="2">r.check_opt, r.enable_flag,  </font></p>
<p class="postText" align="left"><font size="2">DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)  </font></p>
<p class="postText" align="left"><font size="2">from user$ u, obj$ o, rls$ r  </font></p>
<p class="postText" align="left"><font size="2">where u.user# = o.owner#  </font></p>
<p class="postText" align="left"><font size="2">and r.obj# = o.obj#  </font></p>
<p class="postText" align="left"><font size="2">and (uid = 0 or  </font></p>
<p class="postText" align="left"><font size="2">uid = o.owner# or  </font></p>
<p class="postText" align="left"><font size="2">exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')  </font></p>
<p class="postText" align="left"><font size="2">)  </font></p>
<p class="postText" align="left"><font size="2">/  </font></p>
<p class="postText" align="left"><font size="2">grant select on sys.exu81rls to public;  </font></p>
<p class="postText" align="left"><font size="2">/  </font></p>
<p class="postText" align="left"><font size="2">五、其他问题 </font></p>
<p class="postText" align="left"><font size="2">本文只讨论了Oracle8i和9i中的EXP/IMP的一些情况，对于之前的版本，在8.0.X中，除了QUERY参数不能用外，其它差别不大。针对没有QUERY的情况，我们可以先在数据库中使用查询条件建立临时中间表，然后使用EXP导出这个中间表即可。至于Oracle7因为目前使用的人较少，gototop不打算在此做详细解释了，如果读者朋友有需求，你可以参考Metalink文档：&#8220;Overview of Export and Import in Oracle7&#8221;（文档号：61949.1）。关于EXP/IMP的详细参数信息你可以通过EXP/IMP HELP=Y来获得。 </font></p>
<p class="postText" align="left"><font size="2">另外关于传输表空间的更多信息可以参考下面的Metelink文档，本文不再详述。 </font></p>
<p class="postText" align="left"><font size="2">[NOTE:77523.1] Transportable Tablespaces -- An Example to setup and use.  </font></p>
<p class="postText" align="left"><font size="2">[NOTE:100698.1] Perform tablespace point-in-time recovery using Transportable Tablespace.  </font></p>
<p class="postText" align="left"><font size="2">在进行并行EXP/IMP的时候，如果IMP过程建索引的话不建议同时运行5个以上的IMP，如果你想加快速度</font></p>
</div>
</pre>
</pre>
</div>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/168991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2007-12-20 12:46 <a href="http://www.blogjava.net/huanghuizz/articles/168991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle的exp、imp使用指南</title><link>http://www.blogjava.net/huanghuizz/articles/157687.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Fri, 02 Nov 2007 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/157687.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/157687.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/157687.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/157687.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/157687.html</trackback:ping><description><![CDATA[一. 导出工具 exp<br />
&nbsp;<br />
&nbsp; 通过输入 EXP 命令和用户名/口令，您可以后接用户名/口令的命令:<br />
例程: EXP SCOTT/TIGER<br />
或者，您也可以通过输入跟有各种参数的 EXP 命令来控制&#8220;导出&#8221;按照不同参数。要指定参数，您可以使用关键字:<br />
格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)或 TABLES=(T1: P1,T1: P2)，如果 T1 是分区表<br />
USERID 必须是命令行中的第一个参数。<br />
关键字&nbsp; 说明(默认)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
USERID&nbsp;&nbsp; 用户名/口令&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
FULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 导出整个文件 (N)<br />
BUFFER&nbsp;&nbsp; 数据缓冲区大小&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
OWNER&nbsp;&nbsp;&nbsp;&nbsp; 所有者用户名列表<br />
FILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输出文件 (EXPDAT.DMP)&nbsp; <br />
TABLES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表名称列表<br />
COMPRESS&nbsp;&nbsp; 导入到一个区 (Y) <br />
RECORDLENGTH IO 记录的长度<br />
GRANTS 导出权限 (Y)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
INCTYPE&nbsp;&nbsp; 增量导出类型<br />
INDEXES&nbsp;&nbsp;&nbsp; 导出索引 (Y)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
RECORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 跟踪增量导出 (Y)<br />
DIRECT&nbsp;&nbsp;&nbsp;&nbsp; 直接路径 (N)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
TRIGGERS&nbsp;&nbsp;&nbsp;&nbsp; 导出触发器 (Y)LOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
屏幕输出的日志文件&nbsp; STATISTICS&nbsp;&nbsp; <br />
分析对象 (ESTIMATE)ROWS&nbsp;&nbsp;&nbsp; <br />
导出数据行 (Y)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
PARFILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数文件名<br />
CONSISTENT 交叉表的一致性 (N) <br />
CONSTRAINTS&nbsp; 导出的约束条件 (Y)<br />
OBJECT_CONSISTENT&nbsp;&nbsp;&nbsp; 只在对象导出期间设置为读的事务处理 (N)<br />
FEEDBACK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每 x 行的显示进度 (0)<br />
FILESIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个转储文件的最大大小<br />
FLASHBACK_SCN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用于将会话快照设置回以前状态的 <br />
SCNFLASHBACK_TIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用于获取最接近指定时间的 SCN 的时间<br />
QUERY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用于导出表的子集的 select 子句<br />
RESUMABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 遇到与空格相关的错误时挂起 (N)<br />
RESUMABLE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用于标识可恢复语句的文本字符串<br />
RESUMABLE_TIMEOUT&nbsp;&nbsp;&nbsp; RESUMABLE 的等待时间<br />
TTS_FULL_CHECK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对 TTS 执行完整的或部分相关性检查<br />
TABLESPACES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要导出的表空间列表<br />
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)<br />
TEMPLATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调用 iAS 模式导出的模板名
<p>1、FULL，这个用于导出整个数据库，在ROWS=N一起使用时，可以导出整个数据库的结构。例如：</p>
<p>exp sys file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y</p>
<p>2、BUFFER和FEEDBACK，在导出比较多的数据时，考虑设置这两个参数。例如：</p>
<p>exp new file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT</p>
<p>3、FILL和LOG，这两个参数分别指定备份的DMP名称和LOG名称，包括文件名和目录，例子见上面。</p>
<p>4. exp没有indexfile这个参数</p>
<p>5.使用direct=y参数限制是库里有大字段(LOB类型的数据)就不能用,使用了QUERY时也不能用DIRECT</p>
<p><br />
需要说明的是，EXP可以直接备份到磁带中，即使用FILE=/dev/rmt0(磁带设备名)，但是一般我们都不这么做，原因有二：一、这样做的速度会慢很多，二、现在一般都是使用磁带库的，不建议直接对磁带进行操作。至于没有使用磁带库的朋友可以考虑和UNIX的TAR结合使用。</p>
<p>如果你真想使用EXP直接到磁带，你可以参考Metalink文章&#8220;EXPORTING TO TAPE ON UNIX SYSTEMS&#8221;（文档号：30428.1），该文中有详细解释。</p>
<p>4、COMPRESS参数将在导出的同时合并碎块，尽量把数据压缩到initial的EXTENT里，默认是N，一般建议使用。DIRECT参数将告诉EXP直接读取数据，而不像传统的EXP那样，使用SELECT来读取表中的数据，这样就减少了SQL语句处理过程。一般也建议使用。不过有些情况下DIRECT参数是无法使用的。</p>
<p>二.导入工具 imp</p>
<p>可以通过输入 IMP 命令和您的用户名/口令后接用户名/口令的命令:<br />
例程: IMP SCOTT/TIGER<br />
或者, 可以通过输入 IMP 命令和各种参数来控制&#8220;导入&#8221;按照不同参数。要指定参数，您可以使用关键字:<br />
格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)例程: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N或 TABLES=(T1: P1,T1: P2)，如果 T1 是分区表<br />
USERID 必须是命令行中的第一个参数。<br />
关键字&nbsp; 说明（默认）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
USERID&nbsp;&nbsp; 用户名/口令&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
FULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 导入整个文件 (N)<br />
BUFFER&nbsp;&nbsp; 数据缓冲区大小&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
FROMUSER&nbsp;&nbsp;&nbsp;&nbsp; 所有人用户名列表<br />
FILE&nbsp;&nbsp;&nbsp;&nbsp; 输入文件 (EXPDAT.DMP)&nbsp;&nbsp;&nbsp; <br />
TOUSER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用户名列表<br />
SHOW&nbsp;&nbsp;&nbsp;&nbsp; 只列出文件内容 (N) <br />
TABLES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表名列表<br />
IGNORE&nbsp;&nbsp; 忽略创建错误 (N)&nbsp;&nbsp;&nbsp; <br />
RECORDLENGTH&nbsp; IO 记录的长度<br />
GRANTS&nbsp; 导入权限 (Y)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
INCTYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 增量导入类型<br />
INDEXES 导入索引 (Y)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
COMMIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提交数组插入 (N)<br />
ROWS&nbsp;&nbsp;&nbsp; 导入数据行 (Y)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
PARFILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数文件名<br />
LOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 屏幕输出的日志文件&nbsp;&nbsp; <br />
CONSTRAINTS&nbsp; 导入限制 (Y)<br />
DESTROY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 覆盖表空间数据文件 (N)<br />
INDEXFILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将表/索引信息写入指定的文件<br />
SKIP_UNUSABLE_INDEXES&nbsp; 跳过不可用索引的维护 (N)<br />
FEEDBACK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每 x 行显示进度 (0)<br />
TOID_NOVALIDATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 跳过指定类型 ID 的验证<br />
FILESIZE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个转储文件的最大大小<br />
STATISTICS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 始终导入预计算的统计信息<br />
RESUMABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在遇到有关空间的错误时挂起 (N)<br />
RESUMABLE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用来标识可恢复语句的文本字符串<br />
RESUMABLE_TIMEOUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RESUMABLE 的等待时间COMPILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编译过程, 程序包和函数 (Y)<br />
STREAMS_CONFIGURATION&nbsp; 导入 Streams 的一般元数据 (Y)<br />
STREAMS_INSTANITATION&nbsp; 导入 Streams 的实例化元数据 (N)<br />
下列关键字仅用于可传输的表空间<br />
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)<br />
TABLESPACES 将要传输到数据库的表空间<br />
DATAFILES 将要传输到数据库的数据文件<br />
TTS_OWNERS 拥有可传输表空间集中数据的用户</p>
<p>1、FROMUSER和TOUSER，使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。</p>
<p>2、IGNORE、GRANTS和INDEXES，其中IGNORE参数将忽略表的存在，继续导入，这个对于需要调整表的存储参数时很有用，我们可以先根据实际情况用合理的存储参数建好表，然后直接导入数据。而GRANTS和INDEXES则表示是否导入授权和索引，如果想使用新的存储参数重建索引，或者为了加快到入速度，我们可以考虑将INDEXES设为N，而GRANTS一般都是Y。</p>
<p>另外一个EXP/IMP都有的参数是PARFILE，它是用来定义EXP/IMP的参数文件，也就是说，上面的参数都可以写在一个参数文件中，但我们一般很少使用。</p>
<p>三、Oracle9i EXP功能描述</p>
<p>Oracle9i EXP在原有的基础上新增了部分新的参数，按功能主要分为以下几个部分：</p>
<p>1、OBJECT_CONSISTENT - 用于设置EXP对象为只读以保持对象的一致性。默认是N。</p>
<p>2、FLASHBACK_SCN和FLASHBACK_TIME - 用于支持FLASHBACK功能而新增。</p>
<p>3、RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用于支持RESUMABLE空间分配而新增。</p>
<p>4、TTS_FULL_CHECK - 用于在传输表空间时使用依赖性检查。</p>
<p>5、TEMPLATE - 用于支持iAS。</p>
<p>6、TABLESPACES - 设置表空间导出模式。个人觉得对于一般用户而言，这个才是新增参数中最实用的一个，可以让用户在原来的FULL、OWNER、TABLES的基础上多了一种选择，使得EXP更加灵活。</p>
<p>FAQ:<br />
&nbsp; 如何使用SYSDBA执行EXP/IMP？</p>
<p>这是一个很现实的问题，有时候我们需要使用SYSDBA来执行EXP/IMP，如进行传输表空间的EXP/IMP，以及在9i下用SYS用户来执行EXP/IMP时，都需要使用SYSDBA才可。我们可以使用下面方式连入EXP/IMP：</p>
<p>exp <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#85;&#83;&#69;&#82;&#73;&#68;&#61;&#47;&#64;&#49;&#48;&#46;&#50;&#52;&#57;&#46;&#50;&#46;&#49;&#56;&#47;&#60;&#83;&#73;&#68;">USERID=/@10.249.2.18/&lt;SID</a>&gt; file=1.dmp tables=gototop.t rows=n<br />
然后当&nbsp; Username: / as sysdba</p>
<p>6、QUERY参数后面跟的是where条件，值得注意的是，整个where子句需要使用""括起来，where子句的写法和SELECT中相同，如果是UNIX平台所有"和'都需要使用\u26469屏蔽它们的特殊含义：</p>
<p>exp gototop/gototop file=1.dmp log=1.log tables=cyx.t query="where c1=20 and c2=gototop"</p>
<p>如果是windows平台，则使用下面的格式：</p>
<p>exp <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#99;&#47;&#99;&#64;&#110;&#99;&#110;">c/c@ncn</a> file=c.dmp log=c.log tables=t query="""where and """</p>
<p>&nbsp; 不同版本的EXP/IMP问题？</p>
<p>一般来说，从低版本导入到高版本问题不大，麻烦的是将高版本的数据导入到低版本中，在Oracle9i之前，不同版本Oracle之间的EXP/IMP可以通过下面的方法来解决：</p>
<p>1、在高版本数据库上运行底版本的catexp.sql；</p>
<p>2、使用低版本的EXP来导出高版本的数据；</p>
<p>3、使用低版本的IMP将数据库导入到底版本数据库中；</p>
<p>4、在高版本数据库上重新运行高版本的catexp.sql脚本。</p>
<p>但在9i中，上面的方法并不能解决问题。如果直接使用底版本EXP/IMP会出现如下错误：</p>
<p>EXP-00008: ORACLE error %lu encountered</p>
<p>ORA-00904: invalid column name</p>
<p>这已经是一个公布的BUG，需要等到Oracle10.0才能解决，BUG号为2261，你可以到METALINK上去查看有关此BUG的详细信息。</p>
<p>BUG归BUG，我们的工作还是要做，在没有Oracle的支持之前，我们就自己解决。在Oracle9i中执行下面的SQL重建exu81rls视图即可。</p>
<p>CREATE OR REPLACE view exu81rls&nbsp; </p>
<p>(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)&nbsp; </p>
<p>AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,&nbsp; </p>
<p>decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')&nbsp; </p>
<p>|| decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')&nbsp; </p>
<p>|| decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')&nbsp; </p>
<p>|| decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),&nbsp; </p>
<p>r.check_opt, r.enable_flag,&nbsp; </p>
<p>DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)&nbsp; </p>
<p>from user$ u, obj$ o, rls$ r&nbsp; </p>
<p>where u.user# = o.owner#&nbsp; </p>
<p>and r.obj# = o.obj#&nbsp; </p>
<p>and (uid = 0 or&nbsp; </p>
<p>uid = o.owner# or&nbsp; </p>
<p>exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')&nbsp; </p>
<p>)&nbsp; </p>
<p>/&nbsp; </p>
<p>grant select on sys.exu81rls to public;&nbsp; </p>
<p>/&nbsp; </p>
<p>导入工具imp可能出现的问题</p>
<p>(1) 数据库对象已经存在<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据库对象已经存在, 按缺省的imp参数, 则会导入失败<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果用了参数ignore=y, 会把exp文件内的数据内容导入<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果表有唯一关键字的约束条件, 不合条件将不被导入<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果表没有唯一关键字的约束条件, 将引起记录重复<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
(2) 数据库对象有主外键约束<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不符合主外键约束时, 数据会导入失败&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解决办法: 先导入主表, 再导入依存表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disable目标导入对象的主外键约束, 导入数据后, 再enable它们<br />
(3)&nbsp; 权限不够<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
(4)&nbsp; 导入大表( 大于80M ) 时, 存储分配失败<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 导入时, 如果不存在连续一个大数据块, 则会导入失败.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 导出80M以上的大表时, 记得compress= N, 则不会引起这种错误.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
(5) imp和exp使用的字符集不同<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 导入完成后再改回来.</p>
<p>(6) imp和exp版本不能往上兼容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imp可以成功导入低版本exp生成的文件, 不能导入高版本exp生成的文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根据情况我们可以用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ imp <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#117;&#115;&#101;&#114;&#110;&#97;&#109;&#101;&#47;&#112;&#97;&#115;&#115;&#119;&#111;&#114;&#100;&#64;&#99;&#111;&#110;&#110;&#101;&#99;&#116;&#95;&#115;&#116;&#114;&#105;&#110;&#103;">username/password@connect_string</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说明: connect_string 是在/ORACLE_HOME/network/admin/tnsnames.ora<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义的本地或者远端数据库的名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p><br />
&nbsp; 其他问题</p>
<p>本文只讨论了Oracle8i和9i中的EXP/IMP的一些情况，对于之前的版本，在8.0.X中，除了QUERY参数不能用外，其它差别不大。针对没有QUERY的情况，我们可以先在数据库中使用查询条件建立临时中间表，然后使用EXP导出这个中间表即可。至于Oracle7因为目前使用的人较少，gototop不打算在此做详细解释了，如果读者朋友有需求，你可以参考Metalink文档：&#8220;Overview of Export and Import in Oracle7&#8221;（文档号：61949.1）。关于EXP/IMP的详细参数信息你可以通过EXP/IMP HELP=Y来获得。</p>
<p>另外关于传输表空间的更多信息可以参考下面的Metelink文档，本文不再详述。</p>
<p>[NOTE:77523.1] Transportable Tablespaces -- An Example to setup and use.&nbsp; </p>
<p>[NOTE:100698.1] Perform tablespace point-in-time recovery using Transportable Tablespace.&nbsp; </p>
<p>在进行并行EXP/IMP的时候，如果IMP过程建索引的话不建议同时运行5个以上的IMP，如果你想加快速度，可以在IMP的时候不建索引，这样只要内存允许，可以多跑几个，然后是SQL脚本创建需要的索引。<br />
</p>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/157687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2007-11-02 10:52 <a href="http://www.blogjava.net/huanghuizz/articles/157687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fc5 下成功安装Oracle 10g</title><link>http://www.blogjava.net/huanghuizz/articles/89166.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Wed, 20 Dec 2006 15:42:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/89166.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/89166.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/89166.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/89166.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/89166.html</trackback:ping><description><![CDATA[1&gt; 创建下列组和用户<br />      groupadd oinstall<br />      groupadd dba<br /><br />      useradd -g oinstall -G dba oracle<br />       passwd oracle （在这个命令的执行过程中，会要求用户输入两次密码）<br /><br />2&gt;解压文件<br />     gunzip ship.db.lnx32.cpio.gz<br />     cpio -idcmv &lt; ship.db.lnx32.cpio<br /><br />3&gt; 用oracle登陆系统<br />4&gt;改显示语言<br />     export LANG=en_US<br />5&gt;安装oracle 10g<br />     ./runInstaller -ignoreSysprereqs<br />     正常安装<br /><br />6&gt;安装过程中修改<br />     oracle_home中的bin下的gennttab<br />      如下：<br />       LIB=`echo ${TtoLIB}  | sed 's/ /\n/g' | grep "^${T}:" | awk -F: '{print $2}'`<br />       INI=`echo ${TtoINI}  | sed 's/ /\n/g' | grep "^${T}:" | awk -F: '{print $2}'`<br />       BAS=`echo ${TtoBAS} | sed 's/ /\n/g' | grep "^${T}:" | awk -F: '{print $2}'`<br />7&gt;ok<img src ="http://www.blogjava.net/huanghuizz/aggbug/89166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-12-20 23:42 <a href="http://www.blogjava.net/huanghuizz/articles/89166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle10g 数据泵 备份和恢复</title><link>http://www.blogjava.net/huanghuizz/articles/78942.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Fri, 03 Nov 2006 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/78942.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/78942.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/78942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/78942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/78942.html</trackback:ping><description><![CDATA[
		<p>
				<font face="verdana, arial, helvetica" size="2">
						<span class="javascript" id="text1247614" style="FONT-SIZE: 12px">一：备份<br />1。data pump包括下面几个部件：<br />The command-line clients, expdp and impdp<br /><br />The DBMS_DATAPUMP PL/SQL package (also known as the Data Pump API)<br /><br />The DBMS_METADATA PL/SQL package (also known as the Metadata API)<br /><br />2。expdp, impdp和原先的exp,imp不兼容，也就是用exp导出的文件用impdp是无法导入的。<br /><br />3。data pump不支持XML schemas<br /><br />4。使用前必须要先创建目录：<br />SQL&gt; CREATE DIRECTORY dpump_dir as '/oracle/oradata/ORCL10/pumpdata';<br /><br />5。给导入导出的用户赋予目录的读写权限：<br />SQL&gt; GRANT READ, WRITE ON DIRECTORY dpump_dir TO scott;<br /><br />6。设置操作系统环境变量：<br />export DATA_PUMP_DIR=dpump_dir<br /><br />7。执行datapump export<br />[zhangleyi@as software]$ expdp scott/tiger schemas=wanyan dumpfile=wanyan_db165_200611031630.dmp DIRECTORY=dpump_dir<br /><br />Export: Release 10.1.0.2.0 - Production on Thursday, 26 February, 2004 22:08<br /><br />Copyright (c) 2003, Oracle. All rights reserved.<br /><br />Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production<br />With the Partitioning, OLAP and Data Mining options<br />Starting "SCOTT"."SYS_EXPORT_TABLE_01": scott/******** tables=emp dumpfile=emp.dmp DIRECTORY=dpump_dir <br />Estimate in progress using BLOCKS method...<br />Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA<br />Total estimation using BLOCKS method: 64 KB<br />Processing object type TABLE_EXPORT/TABLE/TABLE<br />Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX<br />Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT<br />Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS<br />Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS<br />Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT<br />. . exported "SCOTT"."EMP" 7.820 KB 14 rows<br />Master table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded<br />******************************************************************************<br />Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is:<br />/oracle/oradata/ORCL10/pumpdata/emp.dmp<br />Job "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed at 22:09<br /><br />二，恢复：<br />impdp wanyan/wanyan dumpfile=emp.dmp directory=dump_dir logfile=emp.log</span>
						<br />
						<br />处理对象类型 TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA<br />. . 导入了 "WANYAN"."WY_B_USER"                        80.75 MB  376099 行<br />. . 导入了 "WANYAN"."TEMP_INSIGHT"                     40.24 MB  537133 行<br />. . 导入了 "WANYAN"."temp_user"                        26.20 MB  534528 行<br />. . 导入了 "WANYAN"."WY_D_TEMPLATE"                    9.368 MB    2223 行<br />. . 导入了 "WANYAN"."WY_B_SURVEY"                      2.568 MB     953 行<br />. . 导入了 "WANYAN"."WY_B_BLOG"                        182.8 KB      22 行<br />. . 导入了 "WANYAN"."WY_D_ANSWERDETAIL"                441.8 KB    6021 行<br />. . 导入了 "WANYAN"."WY_D_ANSWER"                      342.1 KB    5919 行<br />. . 导入了 "WANYAN"."WY_D_GROUP"                       143.2 KB      20 行<br />. . 导入了 "WANYAN"."WY_B_ARTICLE"                     74.09 KB      42 行<br />. . 导入了 "WANYAN"."WY_D_EXAMRESULT"                  58.05 KB     269 行<br />. . 导入了 "WANYAN"."WY_D_INBOX"                       61.48 KB     424 行<br />. . 导入了 "WANYAN"."WY_D_KEYWORDS"                    44.06 KB    2532 行<br />. . 导入了 "WANYAN"."WY_D_SENDBOX"                     61.82 KB     442 行<br />. . 导入了 "WANYAN"."WY_B_ADMINUSER"                   8.140 KB       8 行<br />. . 导入了 "WANYAN"."WY_B_COLUMN"                      11.38 KB      20 行<br />. . 导入了 "WANYAN"."WY_B_COMMENT"                     31.37 KB     217 行<br />. . 导入了 "WANYAN"."WY_B_ROLE"                        6.031 KB       7 行<br />. . 导入了 "WANYAN"."WY_D_ATTENTION"                   6.367 KB      20 行<br />. . 导入了 "WANYAN"."WY_D_COMMEND"                     7.625 KB      12 行<br />. . 导入了 "WANYAN"."WY_D_MAILTEMPLATES"               14.55 KB      11 行<br />. . 导入了 "WANYAN"."WY_D_PREVIEW"                     7.476 KB       7 行<br />. . 导入了 "WANYAN"."WY_D_SOURCE"                      9.375 KB     120 行<br />. . 导入了 "WANYAN"."WY_D_USERSCORERECORD"             8.164 KB      21 行<br />. . 导入了 "WANYAN"."WY_R_FRIENDBLOG"                  5.992 KB       1 行<br />. . 导入了 "WANYAN"."WY_R_GROUPMEMBER"                 20.98 KB     246 行<br />. . 导入了 "WANYAN"."WY_R_GROUPNOTE"                   27.80 KB     191 行<br />. . 导入了 "WANYAN"."WY_R_ROLE_PERMISSION"             20.46 KB     441 行<br />. . 导入了 "WANYAN"."WY_D_COMMONMESSAGE"                   0 KB       0 行<br />. . 导入了 "WANYAN"."WY_D_INVITATION"                      0 KB       0 行</font>
		</p>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/78942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-11-03 16:20 <a href="http://www.blogjava.net/huanghuizz/articles/78942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决 oracle EXP-00091: Exporting questionable statistics. 问题</title><link>http://www.blogjava.net/huanghuizz/articles/78647.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Thu, 02 Nov 2006 04:42:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/78647.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/78647.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/78647.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/78647.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/78647.html</trackback:ping><description><![CDATA[
		<div style="FONT-SIZE: 12px">EXP-00091 Exporting questionable statistics <br />  <br />Cause: Export was able to export statistics, but the statistics may not be useable. The statistics are questionable because one or more of the following happened during export: a row error occurred, client character set or NCHARSET does not match with the server, a query clause was specified on export, only certain partitions or subpartitions were exported, or a fatal error occurred while processing a table. <br />  <br />Action: To export non-questionable statistics, change the client character set or NCHARSET to match the server, export with no query clause, or export complete tables. If desired, import parameters can be supplied so that only non-questionable statistics will be imported, and all questionable statistics will be recalculated.<br /><br />解决：<br />linux下的oracle用户的环境变量语言集和oralce数据库中的环境变量语言集不相同。<br />查看oracle的环境变量语言集：<br />数据库服务器字符集：<br />select * from nls_database_parameters<br />客户端字符集：<br />select * from nls_instance_parameters<br /><br />将oracle用户的环境变量语言集改成和数据库服务器字符集一样。<br /> export NLS_LANG=american_america.ZHS16GBK</div>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/78647.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-11-02 12:42 <a href="http://www.blogjava.net/huanghuizz/articles/78647.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle数据库使用及命名规则的详解</title><link>http://www.blogjava.net/huanghuizz/articles/71500.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Sat, 23 Sep 2006 15:21:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/71500.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/71500.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/71500.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/71500.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/71500.html</trackback:ping><description><![CDATA[
		<font color="#333333">公司已建立的或待建立的网站，如：中文站（CHINA），国际站（ALIBABA），华商站（CHINESE）等。 <br />　　OLPS <br />　　　　Online process system，在线处理系统，即我们的会员可以浏览的网站所连接的数据库，也是我们所说的前台。 <br />　　BOPS <br />　　　　Back Office process system，后台处理系统，即我们的网站的发布系统。 <br />　　BZO <br />　　　　Business Object(?)，公司网站低层JAVA对象，主要负责与数据库打交道。 <br />　　<b>一、 命名约定 </b><br />　　１． 是指数据库、数据库对象如TABLE、SEQUENCE、PROCEDURE、COLUMN等的命名约定； <br />　　２． 命名富有意义英文词汇，除个别通用的（见列表），要避免使用缩写），多个单词组成的，中间以下划线分割； <br />　　３． 除数据库名称长度为1－8个字符，其余为1－30个字符，Database link名称也不要超过30个字符； <br />　　４． 命名只能使用英文字母，数字和下划线； <br />　　５． 避免使用Oracle的保留字如level、关键字如type（见列表）； <br />　　６． 名表之间相关列名尽量同名； <br />　　７． 数据库的命名：网上数据库命名为“OLPS”＋表示站点（SITE，以下同）的2－4个字符，后台数据库命名为“BOPS”＋表示站点的2－4个字符。测试数据库命名为“OLPS|BOPS”＋“TEST”，　开发数据库命名为“OLPS|BOPS”+“TEST”，用模式（SCHEMA／USER）的不同来区分不同的站点。 <br />　　８． INDEX命名：table_name+column_name+index_type(1 byte)+idx,各部分以下划线（_）分割。多单词组成的column　name，取前几个单词首字母，加末单词组成column_name。如：sample表member_id上的index: sample_mid_idx 　 news表title上的unique index:news_titile_uidx； <br />　　９． SEQUENCE命名：seq_+table_name； <br />　　<b>二、 注释说明 </b><br />　　１． 本注释说明主要用于PL/SQL程序及其它SQL文件，其它可作参考； <br />　　２． SQLPLUS接受的注释有三种： <br />　　??　这儿是注释 <br />　　／＊　这儿是注释　＊／ <br />　　REM　这儿是注释 <br />　　３． 开始注释，类似JAVAK中的开始注释，主要列出文件名，编写日期，版权说明，程序功能以及修改记录： <br />　　REM <br />　　REM　$Header: filename, version, created date,auther <br />　　REM <br />　　REM Copyright <br />　　REM <br />　　REM FUNCTION <br />　　REM function explanation <br />　　REM <br />　　REM NOTES <br />　　REM <br />　　REM MODIFIED　（yy/mm/dd） <br />　　REM who when - for what, recently goes first <br />　　４． 块注释，如表注释，PROCEDURE注释等，同JAVA: <br />　　/* <br />　　* This table is for TrustPass <br />　　* mainly store the information <br />　　* of TrustPass members <br />　　*/ <br />　　５． 单行注释，如列注释： <br />　　login_id VARCHAR2(32) NOT NULL, -- 会员标识 <br />　　<br />　　<b>三、 缩进 </b><br />　　低级别语句在高级别语句后的，一般缩进4个空格： <br />　　DECLARE <br />　　v_MemberId VARCHAR2(32), <br />　　BEGIN <br />　　SELECT admin_member_id INTO v_MemberId <br />　　FROM company <br />　　WHERE id = 10; <br />　　DBMS_OUTPUT.PUT_LINE(v_MemberId); <br />　　END; <br />　　<br />　　同一语句不同部分的缩进，如果为sub statement，则通常为2个空格，如果与上一句某部分有密切联系的，则缩至与其对齐： <br />　　BEGIN <br />　　FOR v_TmpRec IN <br />　　(SELECT login_id, <br />　　gmt_created, -- here indented as column above <br />　　satus <br />　　FROM member -- sub statement <br />　　WHERE site = 'china' <br />　　AND country='cn' ) <br />　　LOOP <br />　　NULL; <br />　　END LOOP; <br />　　END; <br />　　<b>四、 断行 </b><br />　　• 一行最长不能超过80字符 <br />　　• 同一语句不同字句之间 <br />　　• 逗号以后空格 <br />　　• 其他分割符前空格 <br />　　SELECT　offer_name <br />　　||',' <br />　　||offer_count as offer_category, <br />　　id <br />　　FROM category <br />　　WHERE super_category_id_1 = 0; <br />　　<b>五、 大小写 </b><br />　　属于ORACLE的关键字大小，表名、列名等小写。 <br />　　<b>六、 列类型的选择 </b><br />　　• 用CHAR(1)代替布尔值； <br />　　• 应尽量使用VARCHAR2代替CHAR类型； <br />　　• VARCHAR(2)最多4000字符； <br />　　• DATE精确到微秒，而非天； <br />　　• 使用CLOB代替LONG，BLOB代替LONG　RAW； <br />　　• ORACLE只有NUMBER一种数据类型，使用时请给定长度； <br />　　<b>七、 主键选择 </b><br />　　选择有意义的，不太长且能唯一标识记录行的列做主键，没有这种列时，才考虑使用SEQUENCE做主健。 <br />　　<b>八、 列长度的选择 </b><br />　　应当根据实际需要选择列长度。有对应web 页面的，与页面上对应列长度一致。 <br />　　<br />　　对数据的验证除数据库端实现外还要尽可能在表现层控制。 <br />　　<b>九、 使用SQL语句的约定 </b><br />　　１． 尽量避免在循环中使用SQL语句。 <br />　　２． 避免在WHERE字句中对列施以函数: <br />　　SELECT　＊　 <br />　　FROM　service_promotion <br />　　WHERE TO_CHAR(gmt_modified,’yyyy-mm-dd’) <br />　　= ‘20001-09-01’; <br />　　　　而应使用： <br />　　SELECT * <br />　　FROM service_promotion <br />　　WHERE gmt_modified <br />　　&gt;= TO_DATE(‘2001-9-01’,’yyyy-mm-dd’) <br />　　AND gmt_modified <br />　　&lt; TO_DATE(‘2001-9-02’,’yyyy-mm-dd’); <br />　　<br />　　３． 避免使用数据库的类型自动转换功能： <br />　　SELECT * FROM category <br />　　WHERE id = ‘123’; -- id’s type is number <br />　　４． 避免无效的连接: <br />　　SELECT count(*) <br />　　FROM offer a, count_by_email b <br />　　WHERE a.email(+) = b.email; <br />　　５． 连接（join）时要使用别名: <br />　　SELECT a.*,b.offer_count(*) <br />　　FROM offer a, count_by_email b <br />　　WHERE a.email(+) = b.email; <br />　　6. 取TABLE 的META信息： <br />　　SELECT * <br />　　FROM table_name <br />　　WHERE rowid is null (or rownum = 1 or pk = impossible_value); <br />　　可考虑使用： <br />　　SELECT * <br />　　FROM table_name <br />　　WHERE 1 = 0 ; <br />　　<br />　　<br />　　<br />　　<b>十、 关于ALIBABA表的约定 </b><br />　　如果使用ALIBABA　BZO，设表至少有如下字段： <br />　　site VARCHAR2(32) <br />　　gmt_create DATE <br />　　gmt_modified DATE <br />　　如果从IdBizObject继承，则还有一个NUMBER型的列，通常是主键，并与某一个SEQUENCECF　对应；如果从StrIdBizObject继承，则还有一个VARCHAR2型的列。 <br />　　<b>十一、 列值约定 </b><br />　　１． 有固定值列表的列，如status, action, site, 其值取小写； <br />　　２． 应尽可能选择数字来代表固定值列表中的值，相应的列定义为NUMBER型； <br />　　３． 用CHAR（1）表示布尔值的取大写：“Y”，“N”。 <br />　　<b>十二、 关于表重复属性的定义 </b><br />　　不能有多择一的重复属性列； <br />　　<br />　　对于能多选的重复属性列，如果不做查询列并且重复次数较多，应使用ID_VARRAY代替，如要用作查询列，重复次数多的，应另建一表，次数少的且列值为二择一时，应使用NUMBER类型，加位操作。 <br />　　<b>十三、 数据修改约定 </b><br />　　发现Production环境中数据有误，需要改正的，应在RA　TERMINAL上提交数据更新表单，由数据库操作员在当日17时前修改完毕。 <br />　　<br />　　数据库更程序更新的结构变动及数据更新，类似处理。 <br />　　<br />　　提交SQTT测试需要准备数据或更新结构的，暂时先写入测试请求中，由SQTT同志MAIL（注明测试请求表单链接即可）通过数据库操作员修改数据库。待内部网TEAM增加新的表单后，测试请求分开提交。 <br />　　<b>十四、 数据库设计流程 </b><br />　　在新项目设计阶段会议，应有DBA参加。在SCHEMA确定以后方可开始编码。 <br />　　<br />　　缩写字列表： <br />　　payment pymt <br />　　my trade activity mta <br />　　<br />　　特殊字列表： <br />　　ACCESS DECIMAL INITIAL ON START <br />　　ADD NOT INSERT ONLINE SUCCESSFUL <br />　　ALL DEFAULT INTEGER OPTION SYNONYM <br />　　ALTER DELETE INTERSECT OR SYSDATE <br />　　AND DESC INTO ORDER TABLE <br />　　ANY DISTINCT IS PCTFREE THEN <br />　　AS DROP LEVEL PRIOR TO <br />　　ASC ELSE LIKE PRIVILEGES TRIGGER <br />　　AUDIT EXCLUSIVE LOCK PUBLIC UID <br />　　BETWEEN EXISTS LONG RAW UNION <br />　　BY FILE MAXEXTENTS RENAME UNIQUE <br />　　FROM FLOAT MINUS RESOURCE UPDATE <br />　　CHAR FOR MLSLABEL REVOKE USER <br />　　CHECK SHARE MODE ROW VALIDATE <br />　　CLUSTER GRANT MODIFY ROWID VALUES <br />　　COLUMN GROUP NOAUDIT ROWNUM VARCHAR <br />　　COMMENT HAVING NOCOMPRESS ROWS VARCHAR2 <br />　　COMPRESS IDENTIFIED NOWAIT SELECT VIEW <br />　　CONNECT IMMEDIATE NULL SESSION WHENEVER <br />　　CREATE IN NUMBER SET WHERE <br />　　CURRENT INCREMENT OF SIZE WITH <br />　　DATE INDEX OFFLINE SMALLINT <br />　　<br />　　CHAR VARHCAR VARCHAR2 NUMBER DATE LONG <br />　　CLOB BLOB BFILE <br />　　INTEGER DECIMAL <br />　　SUM COUNT GROUPING AVERAGE <br />　　TYPE </font>
		<br />
<img src ="http://www.blogjava.net/huanghuizz/aggbug/71500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-09-23 23:21 <a href="http://www.blogjava.net/huanghuizz/articles/71500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle ORA-00257: ORA-16014:和ORA-00312: 归档日志闪回恢复区写满 解决</title><link>http://www.blogjava.net/huanghuizz/articles/68902.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Mon, 11 Sep 2006 02:39:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/68902.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/68902.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/68902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/68902.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/68902.html</trackback:ping><description><![CDATA[问题：<br />      ORA-16014: log 1 sequence# 1085 not archived, no available destinations<br />      ORA-00312: online log 1 thread 1: '/usr/app/oracle/oradata/wanyan/redo01.log'<br />      <br />原因：<br />      归档日志闪回恢复区的2G都被写满了!<br /><br />解决：<br />     据数据库目前可用存储空间为200GB、FLASH_RECOVERY_AREA空间为2GB的实际情况，把FLASH_RECOVERY_AREA的空间修改为20GB。<br /><br />   alter system set DB_RECOVERY_FILE_DEST_SIZE=20g;<br /><br />相关解决方案路径：<br />      <a href="http://edu.cnzz.cn/NewsInfo/29556.aspx">http://edu.cnzz.cn/NewsInfo/29556.aspx</a><img src ="http://www.blogjava.net/huanghuizz/aggbug/68902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-09-11 10:39 <a href="http://www.blogjava.net/huanghuizz/articles/68902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 10g RMAN的备份 恢复</title><link>http://www.blogjava.net/huanghuizz/articles/68363.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Thu, 07 Sep 2006 11:57:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/68363.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/68363.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/68363.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/68363.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/68363.html</trackback:ping><description><![CDATA[
		<p>注意事项：<br />1 rman的保存格式前后要一样.<br />2 archive 的格式也要和原来一样。</p>
		<p>oracle 10g</p>
		<p>[oracle@standby oracle]$ rman target /</p>
		<p>
				<br />启动归档<br />SQL&gt;alter database archivelog;</p>
		<p>System altered.</p>
		<p>SQL&gt; archive log list;<br />Database log mode              No Archive Mode<br />Automatic archival             Disabled<br />Archive destination            USE_DB_RECOVERY_FILE_DEST<br />Oldest online log sequence     7<br />Current log sequence           9<br />SQL&gt;</p>
		<p>重启数据库，归档就会自动启动。</p>
		<p>启动自动备份控制文件</p>
		<p>RMAN&gt; configure controlfile autobackup on;</p>
		<p>new RMAN configuration parameters:<br />CONFIGURE CONTROLFILE AUTOBACKUP ON;<br />new RMAN configuration parameters are successfully stored</p>
		<p>
				<br />RMAN&gt; configure channel device type disk format 'F:\backup\%U';</p>
		<p>new RMAN configuration parameters:<br />CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   'F:\backup\%U';<br />new RMAN configuration parameters are successfully stored</p>
		<p>
				<br />SQL&gt; select name from v$datafile;</p>
		<p>NAME<br />---------------------------------------------------<br />F:\ORACLE\PRODUCT.1.0\ORADATA\TEST\SYSTEM01.DBF<br />F:\ORACLE\PRODUCT.1.0\ORADATA\TEST\UNDOTBS01.DBF<br />F:\ORACLE\PRODUCT.1.0\ORADATA\TEST\SYSAUX01.DBF<br />F:\ORACLE\PRODUCT.1.0\ORADATA\TEST\USERS01.DBF</p>
		<p>
				<br />确定原控制文件的路径<br />SQL&gt; select name from v$controlfile;</p>
		<p>查看log位置</p>
		<p>SQL&gt;select name from V$ARCHIVED_LOG；</p>
		<p>查看log的信息<br />SQL&gt;select * from v$log_history;</p>
		<p>插入数据<br />SQL&gt; select * from ttt;</p>
		<p>NAME       EMAIL<br />---------- ----------<br />aa         <a href="mailto:aa@abc.com">aa@abc.com</a><br />bb         <a href="mailto:bb@abc.com">bb@abc.com</a><br />cc         <a href="mailto:cc@abc.com">cc@abc.com</a></p>
		<p>RMAN备份，</p>
		<p>RMAN&gt;backup database;</p>
		<p>再插入数据<br />SQL&gt; select * from ttt;</p>
		<p>NAME       EMAIL<br />---------- ----------<br />aa         <a href="mailto:aa@abc.com">aa@abc.com</a><br />bb         <a href="mailto:bb@abc.com">bb@abc.com</a><br />cc         <a href="mailto:cc@abc.com">cc@abc.com</a><br />dd         <a href="mailto:dd@abc.com">dd@abc.com</a></p>
		<p>用DBCA删除 数据库和相关数据文件。<br />再重新建个相同实例名的SID，再开始恢复。</p>
		<p>配置RMAN<br />RMAN&gt; configure channel device type disk format 'F:\backup\%U';  //注意和原来的格式一样。</p>
		<p>new RMAN configuration parameters:<br />CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   'F:\backup\%U';<br />new RMAN configuration parameters are successfully stored</p>
		<p>
				<br />先需要从自动备份中恢复控制文件<br />RMAN&gt; startup nomount;</p>
		<p>RMAN&gt; restore controlfile to '/opt/oracle/oradata/control01.ctl' from autobackup;</p>
		<p>重建本地认证文件<br />C:\&gt;orapwd file=F:\oracle\product.1.0\Db_1\DATABASE\PWDtest.ORA password=123456 entries=2;</p>
		<p>RMAN&gt;shutdown immediate</p>
		<p>RMAN&gt; startup mount</p>
		<p>database is already started<br />RMAN-00571: ===========================================================<br />RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============<br />RMAN-00571: ===========================================================<br />RMAN-03002: failure of startup command at 08/03/2005 20:00:30<br />RMAN-06189: current DBID 1863531774 does not match target mounted database (1862908416)</p>
		<p>RMAN&gt;</p>
		<p>重新设置DBID</p>
		<p>RMAN&gt; set DBID=1862908416</p>
		<p>executing command: SET DBID</p>
		<p>
				<br />你可能需要修改spfile文件,如果文件位置改变。</p>
		<p>SQL&gt; shutdown immediate;<br />ORA-01507: database not mounted</p>
		<p>
				<br />ORACLE instance shut down.<br />SQL&gt; create spfile from pfile;</p>
		<p>File created.</p>
		<p>SQL&gt; startup mount;<br />ORACLE instance started.</p>
		<p>RMAN&gt; restore database;</p>
		<p>
				<br />转入SQLPLUS，sys登陆sqlplus<br />SQL&gt; recover database using backup controlfile until cancel;<br />ORA-00279: change 356534 generated at 08/02/2005 19:14:40 needed for thread 1<br />ORA-00289: suggestion :<br />F:\ORACLE\PRODUCT.1.0\FLASH_RECOVERY_AREA\TEST\ARCHIVELOG05_08_03\O1_MF_1_<br />2_%U_.ARC<br />ORA-00280: change 356534 for thread 1 is in sequence #2</p>
		<p>
				<br />Specify log: {&lt;RET&gt;=suggested | filename | AUTO | CANCEL}<br />cancel            //因为log丢失，此步选cancel<br />Media recovery cancelled.</p>
		<p>
				<br />SQL&gt; alter database open resetlogs;</p>
		<p>Database altered.</p>
		<p>SQL&gt; select * from ttt;</p>
		<p>NAME       EMAIL<br />---------- ----------<br />aa         <a href="mailto:aa@abc.com">aa@abc.com</a><br />bb         <a href="mailto:bb@abc.com">bb@abc.com</a><br />cc         <a href="mailto:cc@abc.com">cc@abc.com</a></p>
		<p>SQL&gt;</p>
		<p>数据回来了，但是由于归档和redo log丢了，丢失一部分数据。</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
				<br />情况二 数据库崩溃，但是还剩下归档和redo log是好的。</p>
		<p>
				<br />启动归档<br />SQL&gt;alter database archivelog;</p>
		<p>System altered.</p>
		<p>SQL&gt; archive log list;<br />Database log mode              No Archive Mode<br />Automatic archival             Disabled<br />Archive destination            USE_DB_RECOVERY_FILE_DEST<br />Oldest online log sequence     7<br />Current log sequence           9<br />SQL&gt;</p>
		<p>重启数据库，归档就会自动启动。</p>
		<p>启动自动备份控制文件</p>
		<p>RMAN&gt; configure controlfile autobackup on;</p>
		<p>new RMAN configuration parameters:<br />CONFIGURE CONTROLFILE AUTOBACKUP ON;<br />new RMAN configuration parameters are successfully stored</p>
		<p>配置RMAN的格式和存储位置。<br />RMAN&gt; configure channel device type disk format 'F:\backup\%U';</p>
		<p>new RMAN configuration parameters:<br />CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   'F:\backup\%U';<br />new RMAN configuration parameters are successfully stored</p>
		<p>查看数据文件的位置<br />SQL&gt; select name from v$datafile;</p>
		<p>
				<br />确定原控制文件的路径<br />SQL&gt; select name from v$controlfile;</p>
		<p>查看log位置</p>
		<p>SQL&gt;select name from V$ARCHIVED_LOG；</p>
		<p>查看log的信息<br />SQL&gt;select * from v$log_history;</p>
		<p>插入数据<br />SQL&gt; select * from sss;</p>
		<p>AA         BB         CC<br />---------- ---------- ---<br />aa         bb         cc<br />aa         jj         mm<br />vv         ss         tt</p>
		<p>完全备份数据库<br />RMAN&gt;backup data</p>
		<p>再插入数据</p>
		<p>SQL&gt; select * from sss;</p>
		<p>AA         BB         CC<br />---------- ---------- ---<br />aa         bb         cc<br />aa         jj         mm<br />vv         ss         tt<br />mm         mm         mm</p>
		<p>
				<br />用DBCA删除数据库，删除相关的数据文件，保留redo log和归档日志。</p>
		<p>再用DBCA重建一个SID一样的数据库。</p>
		<p>RMAN&gt;startup</p>
		<p>配置RMAN<br />RMAN&gt; configure channel device type disk format 'F:\backup\%U';  //注意和原来的格式一样。</p>
		<p>new RMAN configuration parameters:<br />CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   'F:\backup\%U';<br />new RMAN configuration parameters are successfully stored</p>
		<p>
				<br />RMAN&gt;startup nomount<br />RMAN&gt;restore controlfile to '/opt/oracle/oradata/control01.ctl' from autobackup;<br />再copy几份和原来一样的路径文件名。</p>
		<p>RMAN&gt;shutdown immediate</p>
		<p>RMAN&gt; startup mount</p>
		<p>connected to target database (not started)<br />Oracle instance started<br />RMAN-00571: ===========================================================<br />RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============<br />RMAN-00571: ===========================================================<br />RMAN-03002: failure of startup command at 08/03/2005 19:55:46<br />ORA-01991: invalid password file 'F:\oracle\product.1.0\Db_1\DATABASE\PWDtest.ORA'</p>
		<p>
				<br />重建本地认证文件<br />C:\&gt;orapwd file=F:\oracle\product.1.0\Db_1\DATABASE\PWDtest.ORA password=123456 entries=2;</p>
		<p>RMAN&gt;shutdown immediate</p>
		<p>RMAN&gt; startup mount</p>
		<p>database is already started<br />RMAN-00571: ===========================================================<br />RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============<br />RMAN-00571: ===========================================================<br />RMAN-03002: failure of startup command at 08/03/2005 20:00:30<br />RMAN-06189: current DBID 1863531774 does not match target mounted database (1862908416)</p>
		<p>RMAN&gt;</p>
		<p>重新设置DBID</p>
		<p>RMAN&gt; set DBID=1862908416</p>
		<p>executing command: SET DBID</p>
		<p>RMAN&gt; startup mount</p>
		<p>database is already started</p>
		<p>RMAN&gt; restore database;</p>
		<p>
				<br />RMAN&gt; recover database;</p>
		<p>Starting recover at 03-8月 -05<br />using channel ORA_DISK_1</p>
		<p>starting media recovery</p>
		<p>archive log thread 1 sequence 1 is already on disk as file F:\ORACLE\PRODUCT.1.0\FLASH_RECOVERY_AREA\TEST\ARCHIVELOG\<br />2005_08_03\O1_MF_1_1_1H2D39KL_.ARC<br />archive log thread 1 sequence 2 is already on disk as file F:\ORACLE\PRODUCT.1.0\ORADATA\TEST\REDO02.LOG<br />archive log thread 1 sequence 3 is already on disk as file F:\ORACLE\PRODUCT.1.0\ORADATA\TEST\REDO03.LOG<br />archive log thread 1 sequence 4 is already on disk as file F:\ORACLE\PRODUCT.1.0\ORADATA\TEST\REDO01.LOG<br />archive log filename=F:\ORACLE\PRODUCT.1.0\FLASH_RECOVERY_AREA\TEST\ARCHIVELOG05_08_03\O1_MF_1_1_1H2D39KL_.ARC thr<br />ead=1 sequence=1<br />archive log filename=F:\ORACLE\PRODUCT.1.0\ORADATA\TEST\REDO02.LOG thread=1 sequence=2<br />archive log filename=F:\ORACLE\PRODUCT.1.0\ORADATA\TEST\REDO03.LOG thread=1 sequence=3<br />archive log filename=F:\ORACLE\PRODUCT.1.0\ORADATA\TEST\REDO01.LOG thread=1 sequence=4<br />media recovery complete<br />Finished recover at 03-8月 -05</p>
		<p>RMAN&gt;</p>
		<p>
				<br />由于控制文件是用备份还原的需要resetlogs打开。<br />SQL&gt; alter database open resetlogs;</p>
		<p>
				<br />SQL&gt; select * from sss;</p>
		<p>AA         BB         CC<br />---------- ---------- ---<br />aa         bb         cc<br />aa         jj         mm<br />vv         ss         tt<br />mm         mm         mm  //此行数据回来了,说明没有丢数据.</p>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/68363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-09-07 19:57 <a href="http://www.blogjava.net/huanghuizz/articles/68363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 用户授权需谨慎</title><link>http://www.blogjava.net/huanghuizz/articles/68188.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Thu, 07 Sep 2006 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/68188.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/68188.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/68188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/68188.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/68188.html</trackback:ping><description><![CDATA[
		<p>看到 <a href="http://www.itpub.net/503880.html">有人提问关于授权的问题</a>. 不由得想多说几句. Oracle 9i 以及以下版本的数据库,默认的数据库角色有些不太合理的地方. DBA 管理的过程中,如果不太注意的话,可能会带来麻烦或者潜在的隐忧. 比如最常见的 CONNECT 角色. </p>
		<pre>User =&gt; FOO has been granted the following privileges
====================================================================
        ROLE =&gt; CONNECT which contains =&gt;
        SYS PRIV =&gt; ALTER SESSION 		grantable =&gt; NO
        SYS PRIV =&gt; CREATE CLUSTER 		grantable =&gt; NO
        SYS PRIV =&gt; CREATE DATABASE LINK 	grantable =&gt; NO
        SYS PRIV =&gt; CREATE SEQUENCE 		grantable =&gt; NO
        SYS PRIV =&gt; CREATE SESSION 		grantable =&gt; NO
        SYS PRIV =&gt; CREATE SYNONYM 		grantable =&gt; NO
        SYS PRIV =&gt; CREATE TABLE 		grantable =&gt; NO
        SYS PRIV =&gt; CREATE VIEW 		grantable =&gt; NO</pre>
		<p>这里面的 ALTER SESSION 就是一个问题. 恶意的用户很容易利用这个权限给系统带来麻烦.举两个例子,一个是 修改当前 Session 的 cursor_sharing 参数值为 FORCE ,然后提交可触发 Oracle Bug 的查询(cursor_sharing 在 FORCE 模式下 Bug 很多) , 很容易让数据库崩溃. 或者恶意用户提交 alter session set hash_area_size ... 的修改语句, 给自己设定一个超大的 HASH_AREA_SIZE , 再提交一定的查询,也会给系统性能造成很糟糕的影响.</p>
		<p>这个 CONNECT 角色在 Oracle 10g 中已经修改了,只有 create session 的权限. </p>
		<div class="entry-more" id="more">
				<p>再来一个角色的问题. 比如 REOURCE 角色, 包含的权限如下所示:</p>
				<pre>User =&gt; FOO has been granted the following privileges
====================================================================
        ROLE =&gt; RESOURCE which contains =&gt;
        SYS PRIV =&gt; CREATE CLUSTER 			grantable =&gt; NO
        SYS PRIV =&gt; CREATE INDEXTYPE 		grantable =&gt; NO
        SYS PRIV =&gt; CREATE OPERATOR 			grantable =&gt; NO
        SYS PRIV =&gt; CREATE PROCEDURE 		grantable =&gt; NO
        SYS PRIV =&gt; CREATE SEQUENCE 			grantable =&gt; NO
        SYS PRIV =&gt; CREATE TABLE 			grantable =&gt; NO
        SYS PRIV =&gt; CREATE TRIGGER 			grantable =&gt; NO
        SYS PRIV =&gt; CREATE TYPE 			grantable =&gt; NO
        SYS PRIV =&gt; UNLIMITED TABLESPACE 		grantable =&gt; NO</pre>
				<p>注意是包含 UNLIMITED TABLESPACE 权限的(<strong>实际上是隐含的一个权限,Oracle为什么这样做,没有明确的文档说明,在 10g 中为了向后兼容,也是这样的.</strong>), 恶意用户利用这个造成麻烦很容易:在 SYSTEM 建立一个足够大的表即可让数据库宕机.<br /></p>
		</div>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/68188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-09-07 10:07 <a href="http://www.blogjava.net/huanghuizz/articles/68188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用SQL语句词典</title><link>http://www.blogjava.net/huanghuizz/articles/68187.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Thu, 07 Sep 2006 02:06:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/68187.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/68187.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/68187.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/68187.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/68187.html</trackback:ping><description><![CDATA[
		<font size="2">  Q0.创建用户 <br />   【前提】 <br />   你必须有CREATE USER系统权限。当你使用CREATE USER语句创建一个新用户后，该用户的权 <br />   限是空的，要登录到ORACLE该用户必须有CREATE SESSION 系统权限。因此在创建用户之后 <br />   ，你至少应该授予用户CREATE SESSION 权限。 <br />    <br />   【示例】 <br />    <br />   创建一个用户的例子 <br />    <br />   如果你创建一个新用户使用PASSWORD EXPIRE项，在尝试登陆ORACLE之前该用户的密码必须 <br />   改变。你可以创建该用户使用以下语句： <br />    <br />   CREATE USER sidney <br />   IDENTIFIED BY welcome <br />   DEFAULT TABLESPACE cases_ts <br />   QUOTA 10M ON cases_ts <br />   TEMPORARY TABLESPACE temp_ts <br />   QUOTA 5M ON system <br />   PROFILE engineer <br />   PASSWORD EXPIRE; <br />    <br />   该用户有以下特征： <br />   密码：welcome <br />   缺省表空间： cases_ts,有10M的使用权。 <br />   临时表空间： temp_ts <br />   在系统表空间SYSTEM有5M的使用权。 <br />   使用数据库资源定义在配置文件engineer中。 <br />   一个过期密码，在登陆ORACLE之前该用户的密码必须改变。 <br />    <br />   【关键字和参数】 <br />   user <br />   标识要被创建的用户名称。 <br />    <br />   IDENTIFIED <br />   IDENTIFIED 项让你指出ORACLE如何鉴别该用户。 <br />    <br />   BY password <br />   BY password 项让你创建一个本地用户并指出该用户必须使用指定密码登录ORACLE。 <br />   密码只包含单字节字符。 <br />    <br />   DEFAULT TABLESPACE <br />   指出所创用户的缺省表空间。如果你忽略该项，缺省值是SYSTEM表空间。 <br />    <br />   TEMPORARY TABLESPACE <br />   指出所创用户的临时表空间。如果你忽略该项，缺省值是SYSTEM表空间。 <br />    <br />   QUOTA <br />   使用QUOTA项指定允许用户使用的表空间大小，以K或M为单位的整数值。 <br />   一个用户可以拥有多个表空间的多个QUOTA值。 <br />    <br />   UNLIMITED <br />   允许用户无限制的使用表空间。 <br />    <br />   PROFILE <br />   指你想给用户分配哪个配置文件。配置文件限制用户使用数据库的资源量。如果忽略该 <br />   项，ORACLE为用户指定缺省配置文件。 <br />    <br />   PASSWORD EXPIRE <br />   指定用户密码的过期。这个设置迫使用户（或DBA）在登录到ORACLE之前必须修改密码 <br />   。 <br />    <br />   Q1.怎样创建表？ <br />    <br />   A. CREATE TABLE ROYAL_MTABLE <br />    <br />   ( <br />    <br />   RM_INT_FIELD INTEGER, <br />    <br />   RM_STR_FIELD VARCHAR2(64) <br />    <br />   ) <br />    <br />   CREATE TABLE ROYAL_DTABLE <br />    <br />   ( <br />    <br />   RD_INT_FIELD INTEGER, <br />    <br />   RD_STR_FIELD VARCHAR2(32) <br />    <br />   ) <br />    <br />   Q2.怎样删除表？ <br />    <br />   A. DROP TABLE ROYAL_DTABLE; <br />    <br />   Q3.怎样创建视图？ <br />    <br />   A. CREATE OR REPLACE VIEW ROYAL_MDVIEW AS <br />    <br />   SELECT T1.RM_STR_FIELD AS F1, T2.RD_STR_FIELD AS F2 FROM ROYAL_MTABLE T1, ROYAL_DTABLE T2 <br />    <br />   WHERE T1.RM_INT_FIELD = T2.RM_INT_FIELD <br />    <br />   Q4.怎样删除视图？ <br />    <br />   A. DROP VIEW ROYAL_MDVIEW; <br />    <br />   Q5.怎样给表添加字段？ <br />    <br />   A. ALTER TABLE ROYAL_DTABLE ADD RM_INT_FIELD INTEGER; <br />    <br />   Q6.怎样删除表中某个字段？ <br />    <br />   A. ALTER TABLE ROYAL_DTABLE DROP COLUMN RM_INT_FIELD; <br />    <br />   Q7.怎样给某个字段添加约束？ <br />    <br />   A. ALTER TABLE ROYAL_MTABLE MODIFY RM_STR_FIELD NOT NULL; <br />    <br />   Q8.怎样去除某个字段上的约束？ <br />    <br />   A. ALTER TABLE ROYAL_MTABLE MODIFY RM_STR_FIELD NULL; <br />    <br />   Q9.怎样给表加上主键？ <br />    <br />   A. ALTER TABLE ROYAL_MTABLE ADD CONSTRAINT PK_ROYAL_MTABLE PRIMARY KEY (RM_INT_FIELD); <br />    <br />   Q10.怎样删除表的主键？ <br />    <br />   A. ALTER TABLE ROYAL_MTABLE DROP CONSTRAINT PK_ROYAL_MTABLE CASCADE; <br />    <br />   Q11.怎样给表添加一个外键？ <br />    <br />   A. ALTER TABLE ROYAL_DTABLE ADD CONSTRAINT FK_ROYAL_DTABLE FOREIGN KEY (RM_INT_FIELD) REFERENCES ROYAL_MTABLE (RM_INT_FIELD) ON DELETE CASCADE; <br />    <br />   Q12.怎样删除表的一个外键？ <br />    <br />   A. ALTER TABLE ROYAL_DTABLE DROP CONSTRAINT FK_ROYAL_DTABLE; <br />    <br />   Q13.怎样给字段加上CHECK？ <br />    <br />   A. ALTER TABLE ROYAL_MTABLE ADD CONSTRAINT CHK_RM_STR_FIELD CHECK (RM_STR_FIELD IN ('Y','N')); <br />    <br />   Q14.怎样去掉字段上的CHECK？ <br />    <br />   A. ALTER TABLE ROYAL_MTABLE DROP CONSTRAINT CHK_RM_STR_FIELD; <br />    <br />   Q15.怎样给字段设置默认值？ <br />    <br />   A. ALTER TABLE ROYAL_DTABLE MODIFY RD_STR_FIELD DEFAULT 'ROYAL'; <br />    <br />   Q16.怎样移去字段的默认值？ <br />    <br />   A. ALTER TABLE ROYAL_DTABLE MODIFY RD_STR_FIELD DEFAULT NULL; <br />    <br />   Q17.怎样创建索引？ <br />    <br />   A. CREATE UNIQUE INDEX IDX_ROYAL_DTABLE ON ROYAL_DTABLE (RM_INT_FIELD); <br />    <br />   Q18.怎样删除索引？ <br />    <br />   A. DROP INDEX IDX_ROYAL_DTABLE; <br />    <br />   Q19.怎样创建用户？ <br />    <br />   A. CREATE USER TESTUSER IDENTIFIED EXTERNALLY DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP PROFILE DEFAULT; <br />    <br />   Q20.怎样删除用户？ <br />    <br />   A. DROP USER TESTUSER CASCADE; <br />    <br />   Q21.怎样将对象权限（object privileges）授予用户？ <br />    <br />   A. GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON ROYAL_MTABLE TO TESTUSER; <br />    <br />   GRANT INSERT, UPDATE, DELETE ON ROYAL_DTABLE TO TESTUSER; <br />    <br />   GRANT SELECT, ALTER ON ROYAL_DTABLE TO TESTUSER WITH GRANT OPTION; <br />    <br />   Q22.怎样从用户收回对象权限？ <br />    <br />   A. REVOKE SELECT, INSERT, UPDATE, DELETE, ALTER ON ROYAL_DTABLE FROM TESTUSER; <br />    <br />   Q23.怎样将角色权限（role privileges）授予用户？ <br />    <br />   A. GRANT CONNECT TO TESTUSER WITH ADMIN OPTION; <br />    <br />   GRANT DBA TO TESTUSER; <br />    <br />   Q24.怎样从用户收回角色权限？ <br />    <br />   A. REVOKE DBA FROM TESTUSER; <br />    <br />   Q25.怎样将系统权限（system privileges）授予用户？ <br />    <br />   A. GRANT ALTER ANY TABLE TO TESTUSER WITH ADMIN OPTION; <br />    <br />   Q26.怎样从用户收回系统权限？ <br />    <br />   A. REVOKE ALTER ANY TABLE FROM TESTUSER; <br />    <br />   Q27.怎样创建序列？ <br />    <br />   A. CREATE SEQUENCE RM_INT_FIELD_SEQ <br />    <br />   MINVALUE 1 <br />    <br />   MAXVALUE 999999999999999999999999999 <br />    <br />   START WITH 1 <br />    <br />   INCREMENT BY 1 <br />    <br />   CACHE 10 <br />    <br />   ORDER; <br />    <br />   Q28.怎样删除序列？ <br />    <br />   A. DROP SEQUENCE RM_INT_FIELD_SEQ; <br />    <br />   Q29.怎样获取序列值？ <br />    <br />   A. SELECT RM_INT_FIELD_SEQ.NEXTVAL FROM DUAL; <br />    <br />   Q30.怎样创建角色？ <br />    <br />   A. CREATE ROLE TESTROLE; <br />    <br />   Q31.怎样删除角色？ <br />    <br />   A. DROP ROLE TESTROLE; <br />    <br />   Q32.怎样将对象权限（object privileges）授予角色？ <br />    <br />   A. GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON ROYAL_MTABLE TO TESTROLE; <br />    <br />   Q33.怎样从角色收回对象权限？ <br />    <br />   A. REVOKE SELECT, INSERT, UPDATE, DELETE, ALTER ON ROYAL_MTABLE FROM TESTROLE; <br />    <br />   Q34.怎样将角色权限（role privileges）授予角色？ <br />    <br />   A. GRANT DBA TO TESTROLE; <br />    <br />   Q35.怎样从角色收回角色权限？ <br />    <br />   A. REVOKE DBA FROM TESTROLE; <br />    <br />   Q36.怎样将系统权限（system privileges）授予角色？ <br />    <br />   A. GRANT CREATE TABLE TO TESTROLE; <br />    <br />   Q37.怎样从角色收回系统权限？ <br />    <br />   A. REVOKE CREATE TABLE FROM TESTROLE; <br />    <br />   Q38.不等于条件有哪几种写法？（茴香豆问题:)） <br />    <br />   A. SELECT * FROM ROYAL_MTABLE WHERE RM_STR_FIELD != 'Y'; <br />    <br />   SELECT * FROM ROYAL_MTABLE WHERE RM_STR_FIELD ^= 'Y'; <br />    <br />   SELECT * FROM ROYAL_MTABLE WHERE RM_STR_FIELD &lt;&gt; 'Y'; <br />    <br />   Q39.like子句的用法？ <br />    <br />   A. SELECT * FROM ROYAL_DTABLE WHERE RD_STR_FIELD LIKE '%Y%'; <br />    <br />   SELECT * FROM ROYAL_DTABLE WHERE RD_STR_FIELD LIKE '_Y%'; <br />    <br />   Q40.请举出一个where子查询简单例子？ <br />    <br />   A. SELECT * FROM ROYAL_DTABLE WHERE RM_INT_FIELD IN (SELECT RM_INT_FIELD FROM ROYAL_MTABLE WHERE RM_STR_FIELD NOT IN ('Y','B')); <br />    <br />   Q41.Oracle常用字符串处理函数有哪些？ <br />    <br />   A. || 连接两个字符串； LENGTH 字符串长度； TRIM/LTRIM/RTRIM 截断串左（右）指定字符串（包括空串）； LOWER/UPPER 将字符串转换为小/大写，等等。 <br />    <br />   例如：SELECT RM_INT_FIELD||'--'||RM_STR_FIELD||'YES' FROM ROYAL_MTABLE; <br />    <br />   Q42.Oracle支持哪些数字处理函数？ <br />    <br />   A. Oracle支持所有常用数字函数，包括（但不限于）+、-、*、/、ABS、COS、EXP、LN、LOG、MOD、POWER、ROUND、SIN、SINH、SQRT、TAN、TRUNC、AVG、COUNT、MAX、MIN、SUM、GREATEST、LEAST等等。 <br />    <br />   例如： <br />    <br />   SELECT GREATEST(3, 4, 5)*4 FROM DUAL; <br />    <br />   SELECT POWER(2,3) FROM DUAL; <br />    <br />   Q43.怎样取得数据库服务器当前日期、时间？ <br />    <br />   A. SELECT SYSDATE FROM DUAL; <br />    <br />   SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI:SS') FROM DUAL; <br />    <br />   Q44.怎样将字符串转换为日期、时间格式？ <br />    <br />   A. SELECT TO_DATE('2002-11-27', 'YYYY-MM-DD') FROM DUAL; <br />    <br />   SELECT TO_DATE('2002-11-27 09:28:55', 'YYYY-MM-DD HH:MI:SS') FROM DUAL; <br />    <br />   Q45.常用日期函数有哪些？ <br />    <br />   A. NEXT_DAY LAST_DAY ADD_MONTHS MONTHS_BETWEEN等等。 <br />    <br />   例如：SELECT LAST_DAY(SYSDATE) FROM DUAL; <br />    <br />   Q46.能给出一个DECODE函数用法的例子吗？ <br />    <br />   A. DECODE函数的格式为DECODE(value, if1, then1, if2, then2...,else)。假设表ROYAL_DTABLE中有如下数据： <br />    <br />   RD_INT_FIELD RD_STR_FIELD RM_INT_FIELD <br />   -------------------------------------- <br />   1 royal 1 <br />   2 bill 2 <br />   3 joy 1 <br />    <br />   请观察如下SQL语句输出结果。 <br />   SELECT DECODE(RD_STR_FIELD, 'royal', 'royaltest', 'bill', 'billgates', RD_STR_FIELD) AS DC FROM ROYAL_DTABLE; <br />   DC <br />   --------- <br />   royaltest <br />   billgates <br />   joy <br />    <br />   Q47.能给出一个group by、having和order by用法的例子吗？ <br />    <br />   A. SQL&gt; SELECT * FROM ROYAL_MTABLE; <br />    <br />   RM_INT_FIELD RM_STR_FIELD <br />   ------------------------- <br />   1 Y <br />   2 N <br />   3 Y <br />    <br />   SQL&gt; SELECT * FROM ROYAL_DTABLE; <br />    <br />   RD_INT_FIELD RD_STR_FIELD RM_INT_FIELD <br />   -------------------------------------- <br />   1 royal 1 <br />   2 bill 2 <br />   3 joy 1 <br />    <br />   SQL&gt; SELECT RM_INT_FIELD, SUM(RD_INT_FIELD) FROM ROYAL_DTABLE GROUP BY RM_INT_FIELD HAVING SUM(RD_INT_FIELD) &gt;= 2 ORDER BY SUM(RD_INT_FIELD) ASC; <br />    <br />   RM_INT_FIELD SUM(RD_INT_FIELD) <br />   ------------------------------ <br />   2 2 <br />   1 4 <br />    <br />   Q48.Oracle有哪些常用数据字典？ <br />    <br />   A. USER_TABLES(TABS)、USER_TAB_COLUMNS(COLS)、USER_VIEWS、USER_SEQUENCES(SEQ)、USER_CONSTRAINTS、USER_CONS_COLUMNS、USER_TAB_COMMENTS、USER_COL_COMMENTS、USER_INDEXES(IND)、USER_IND_COLUMNS、USER_USERS、DBA_USERS、ALL_USERS、USER_TABLESPACES等等。 <br />    <br />   例如：SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_NAME = 'FK_ROYAL_DTABLE'; <br />    <br />   Q49.怎样将日期、时间插入date型字段中？ <br />    <br />   A. INSERT INTO ROYAL_MTABLE (RM_INT_FIELD, RM_STR_FIELD, RM_DATE_FIELD) VALUES (9, 'Y', TO_DATE('2002-05-23', 'YYYY-MM-DD')); <br />    <br />   INSERT INTO ROYAL_MTABLE (RM_INT_FIELD, RM_STR_FIELD, RM_DATE_FIELD) VALUES (10, 'Y', TO_DATE('2002-10-10 8:23:33', 'YYYY-MM-DD HH:MI:SS')); <br />    <br />   Q50.能介绍一下connect by的用法吗？ <br />    <br />   A. connect by子句提供了遍历“树”的手段。 <br />    <br />   假设有这样一个表：CREATE TABLE ROYAL_TREETABLE (ID INTEGER, PARENT_ID INTEGER, NAME VARCHAR2(32)); <br />    <br />   表中有如下数据： <br />    <br />   ID PARENT_ID NAME <br />   ----------------- <br />   2 1 AAA <br />   3 1 BBB <br />   4 2 CCC <br />   5 2 DDD <br />   6 4 EEE <br />   8 7 GGG <br />    <br />   假如我们现在需要从NAME = 'EEE'的记录开始，向上查找所有有父子关系的记录，可执行如下SQL语句： <br />    <br />   SELECT * FROM ROYAL_TREETABLE START WITH NAME = 'EEE' CONNECT BY ID = PRIOR PARENT_ID; <br />    <br />   ID PARENT_ID NAME <br />   ----------------- <br />   6 4 EEE <br />   4 2 CCC <br />   2 1 AAA </font>
		<br />
<img src ="http://www.blogjava.net/huanghuizz/aggbug/68187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-09-07 10:06 <a href="http://www.blogjava.net/huanghuizz/articles/68187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Oracle数据库10g中跟踪SQL</title><link>http://www.blogjava.net/huanghuizz/articles/66034.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Sun, 27 Aug 2006 14:08:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/66034.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/66034.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/66034.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/66034.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/66034.html</trackback:ping><description><![CDATA[在具有许多活跃用户的繁忙生产环境中，跟踪SQL会话是费时且十分复杂的，因为在任何使用连接池的多层系统中处理SQL语句可能要涉及多个进程，或者甚至是不同的实例。 <br /><br />　　利用Oracle数据库10g，Oralce通过一个新的内置软件包DBMS_MONITOR合理化了SQL的跟踪，这个软件包中包含以前无书面记载的跟踪工具（如DBMS_SUPPORT软件包）的功能。现在，您可以轻松地从头到尾--从客户机到中间层再到后端--跟踪任何用户的会话，并且基于特定的客户ID、模块或动作生成跟踪文件。 <br /><br />　　此外，Oracle数据库10g包含一种新的实用程序trcsess，它可以让您基于会话ID或模块名称之类的条件，有选择地从大量跟踪文件中抽取出跟踪数据，并将它们保存到一个文件中。该实用程序在共享服务器配置中特别有用，因为调度程序可能把每一个用户请求传递给不同的共享服务器进程，从而为任何给定的会话产生多个跟踪文件。与通过大量跟踪文件发掘信息不同，Oracle数据库10g的trcsess可以让您获得关于单一用户会话的整合后的跟踪信息。 <br /><br />　　<b>开始</b><br /><br />　　和Oracle数据库的以前版本一样，跟踪文件将被输出到由服务器的初始化文件（或spfile）的user_dump_dest参数指定的目录中。默认的位置取决于操作系统；例如，对于使用DBCA的Microsoft Windows平台，默认位置是$ORACLE_BASE\instance_name\admin\udump，其中instance_ name是Oracle实例的名称。您可以通过使用以下改变会话命令来动态地更改该参数： <br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1"><tbody><tr><td>alter session set user_dump_dest="c:\kflosstrace";</td></tr></tbody></table><br />　　您还可以把您自己的标记添加到跟踪文件名中，以便您能够更容易地找到生成的文件。为此，可以在启动跟踪之前设置tracefile_identifier初始化参数：<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1"><tbody><tr><td>alter session set <br />tracefile_identifier ="kfloss_test";</td></tr></tbody></table><br />　　通过该命令生成的跟踪文件带有您设置的附加在文件名后的字符串值。尽管这些改变会话命令都不是必要的，但是它们都会使查找跟踪会话的结果更容易。 <br /><br />　　现在，我们已经设置了这些参数，那么让我们看看新的跟踪软件包和Oracle企业管理器的界面。让我们使用新的DBMS_MONITOR软件包通过模块名称和客户机名称来建立一个跟踪。 <br /><br />　　<b>用DBMS_MONITOR建立跟踪</b><br /><br />　　DBMS_MONITOR包具有多个例程，用于启用和禁用统计数据集合，以及用于根据会话ID进行跟踪、或者基于服务名称、模块名称和动作名称的组合进行跟踪。（它们三者从层次结构上是关联的：您不能在不指定模块和服务名称的情况下指定一个动作，但是您可以只指定服务名称，或者只指定服务名称和模块名称）。 模块名称和动作名称（如果有的话）都来自于应用程序代码内部。例如，Oracle电子商务套件应用程序在代码中提供了模块名称和动作名称，这样您就可以在任何Oralce企业管理器页面中通过名称来识别它们。 （PL/SQL开发人员可以通过使用DBMS_APPLICATION_INFO包设置模块名称和动作名称，把一些调用嵌入到他们的应用程序中）。 <br /><br />　　请注意，设置模块、动作及其他参数（如client_id）将不造成对数据库的往返操作--这些例程携带来自应用程序的所有调用。 <br /><br />　　服务名称由用于连接该服务的连接字符串来确定。未与特定服务关联的用户会话将由sys$users处理（sys$background是后台进程的默认服务）。由于我们具有一个服务和一个模块名称，因而我们可以启动对该模块的跟踪，如下所示： <br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1"><tbody><tr><td>SQL&gt; exec dbms_monitor.serv_mod_act_trace_enable<br />(service_name=&gt;'testenv', module_name=&gt;'product_update');</td></tr></tbody></table><br />　　PL/SQL过程已成功完成。<br /><br />　　我们可以启动对客户机的跟踪：<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1"><tbody><tr><td>SQL&gt; exec dbms_monitor.client_id_trace_enable<br />(client_id=&gt;'kimberly');</td></tr></tbody></table><br />　　PL/SQL过程已成功完成。<br /><br />　　请注意，所有这些设置都是永久性的--所有与该服务和模块关联的会话都会被跟踪，而不仅仅是跟踪当前会话。 <br /><br />　　为了基于会话ID跟踪SQL，可以查看Oracle企业管理器的Top Sessions页面，或者像您当前做的那样查询V$SESSION视图。<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1"><tbody><tr><td>SQL&gt; select sid, serial#, username <br />from v$session;<br />SID SERIAL# USERNAME<br />------ ------- ------------<br />133 4152 SYS<br />137 2418 SYSMAN<br />139 53 KIMBERLY<br />140 561 DBSNMP<br />141 4 DBSNMP<br />. . .<br />168 1<br />169 1<br />170 1<br />28 rows selected.</td></tr></tbody></table><br />　　通过会话ID(SID)和序号，您可以使用DBMS_MONITOR只对下面的会话启用跟踪：<br /><br />SQL&gt; exec dbms_monitor.session_trace_enable(139); <br /><br />　　PL/SQL过程已成功完成。<br /><br />　　该序号默认为该SID的当前序号（除非另外指定），因此如果那就是您想跟踪的会话和序号，那么您就不必查看更多的内容了。还有，默认情况下，WAITS设置为true而BINDS设置为false，因此上面的语法实际上与下面的语法效果相同：<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1"><tbody><tr><td>SQL&gt; exec dbms_monitor.session_trace_enable<br />(session_id=&gt;139, serial_num=&gt;53, waits=&gt;true, binds=&gt;false);</td></tr></tbody></table><br />　　请注意，WAITS和BINDS是相同的参数，您在过去可能已经使用DBMS_SUPPORT和10046事件对它们进行了设置。 <br /><br />　　如果您正在一个生产环境中工作，那么此时您最好重新运行出错的SQL或应用程序，并且相应地创建跟踪文件。 <br /><br />　　<b>用企业管理器建立跟踪</b><br /><br />　　通过Oracle企业管理器建立跟踪从Top Consumers页面（可以通过Additional Monitoring Links区域中的Performance页面得到，如图1所示）开始。该页面显示服务、模块、客户和动作对系统资源的当前使用情况。 <br /><br /><a href="http://dev.yesky.com/TLimages/picview/?/imagelist/06/31/5k51u76e4zu9.jpg" target="_blank"><img style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" alt="点击放大此图片" src="http://dev.yesky.com/imagelist/06/31/5k51u76e4zu9s.jpg" border="1" /></a><br />图1：Oracle企业管理器的Top Consumers页面 <br /><br />　　您可以单击Top Services、Top Modules、Top Actions、Top Clients或Top Sessions选项卡，来查看这些类别的顶级消费者中每一种的详细信息，随后您可以通过这些页面中的每一个页面轻松启用（或禁用）SQL跟踪。从页面上的列表中简单地选择项目，然后单击启用SQL跟踪（Enable SQL Trace）开始跟踪（当您完成跟踪时，单击禁用按钮）。 <br /><br />　　您还可以启用（或禁用）这些页面上列出的任何项目的统计数据集合。（DBMS_MONITOR还提供了用于启用和禁用数据集合的例程）。 <br /><br />　　<b>分析跟踪结果</b><br /><br />　　获取关于Kimberly Floss的图书的信息<br /><br />　　无论您是使用DBMS_MONITOR或者是使用Oracle企业管理器建立跟踪，您都将使用trcsess 命令行工具来整合跟踪文件。单击Oracle企业管理器中的查看SQL跟踪（View SQL Trace）按钮显示一个页面，其中显示了您将用于整合所有跟踪文件的语法。 <br /><br />　　要确保用双引号括住字符串，并在文件名后添加一个".trc"扩展名；否则，TKPROF将不会把它作为一个文件名来接受。在执行该命令之前，找到在user_dump_dest（或者，如果您没有更改该参数名，则在\udump）中指定的目录。 <br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1"><tbody><tr><td>C:\...\udump&gt; trcsess output="kfloss.trc" service="testenv" <br />module="product update" <br />action="batch insert"</td></tr></tbody></table><br />　　随后，您可以对整合的跟踪文件运行TKPROF，以生成一份报告。 <br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1"><tbody><tr><td>C:\...\udump&gt; tkprof kfloss.trc <br />output=kfloss_trace_report SORT=(EXEELA, PRSELA, FCHELA)</td></tr></tbody></table><br />　　如果您不终止跟踪，那么运行该服务和模块的每一个会话都会被跟踪。因此，当您完成跟踪时，要确保通过使用Oralce企业管理器或DBMS_MONITOR包来终止跟踪。<img src ="http://www.blogjava.net/huanghuizz/aggbug/66034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-08-27 22:08 <a href="http://www.blogjava.net/huanghuizz/articles/66034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中Decode()函数使用技巧</title><link>http://www.blogjava.net/huanghuizz/articles/65497.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Thu, 24 Aug 2006 05:17:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/65497.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/65497.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/65497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/65497.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/65497.html</trackback:ping><description><![CDATA[ DECODE函数是ORACLE <a class="bluekey" href="http://www.yesky.com/key/697/595697.html" target="_blank">PL/S</a>QL是功能强大的函数之一，目前还只有ORACLE公司的SQL提供了此函数，其他数据库厂商的SQL实现还没有此功能。DECODE有什么用途呢？ 先构造一个例子，假设我们想给智星职员加工资，其标准是：工资在8000元以下的将加20％；工资在8000元以上的加15％，通常的做法是，先选出记录中的工资字段值? select salary into var-salary from employee，然后对变量var-salary用if-then-else或choose case之类的流控制语句进行判断。 如果用DECODE函数，那么我们就可以把这些流控制语句省略，通过SQL语句就可以直接完成。如下：select decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2,salary from employee 是不是很简洁？ DECODE的语法：DECODE(value,if1,then1,if2,then2,if3,then3,...,else)，表示如果value等于if1时，DECODE函数的结果返回then1,...,如果不等于任何一个if值，则返回else。初看一下，DECODE 只能做等于测试，但刚才也看到了，我们通过一些函数或计算替代value，是可以使DECODE函数具备大于、小于或等于功能。 
<p>　　decode()函数使用技巧</p><p>　　·软件环境:</p><p>　　1、Windows NT4.0+ORACLE 8.0.4</p><p>　　2、ORACLE安装路径为:C:\ORANT</p><p>　　·<a class="bluekey" href="http://www.yesky.com/key/2956/412956.html" target="_blank">含义</a>解释:</p><p>　　decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)</p><p>　　该函数的含义如下:</p><p>　　IF 条件=值1 THEN</p><p>　　RETURN(翻译值1)</p><p>　　ELSIF 条件=值2 THEN</p><p>　　RETURN(翻译值2)</p><p>　　......</p><p>　　ELSIF 条件=值n THEN</p><p>　　RETURN(翻译值n)</p><p>　　ELSE</p><p>　　RETURN(缺省值)</p><p>　　END IF</p><p>　　· <a class="bluekey" href="http://www.yesky.com/key/3160/338160.html" target="_blank">使用方法</a>:</p><p>　　1、比较大小</p><p>　　select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值</p><p>　　sign()函数根据某个值是0、正数还是负数，分别返回0、1、-1</p><p>　　例如:</p><p>　　变量1=10，变量2=20</p><p>　　则sign(变量1-变量2)返回-1，decode解码结果为“变量1”，达到了取较小值的目的。</p><p>　　2、表、<a class="bluekey" href="http://www.yesky.com/key/1918/276918.html" target="_blank">视图</a>结构转化</p><p>　　现有一个商品销售表sale，表结构为:</p><p>　　month　　　 char(6)　　　　　 --月份</p><p>　　sell　　　　number(10,2)　　　--月销售金额</p><p>　　现有数据为:</p><p>　　200001　　1000</p><p>　　200002　　<a class="bluekey" href="http://www.yesky.com/key/69/505069.html" target="_blank">1100</a></p><p>　　200003　　1200</p><p>　　200004　　1300</p><p>　　200005　　1400</p><p>　　200006　　1500</p><p>　　200007　　1600</p><p>　　200101　　1100</p><p>　　200202　　1200</p><p>　　200301　　1300</p><p>　　想要转化为以下结构的数据:</p><p>　　year　　　char(4)　　　　　 --年份</p><p>　　month1　　number(10,2)　　　--1月销售金额</p><p>　　month2　　number(10,2)　　　--2月销售金额</p><p>　　month3　　number(10,2)　　　--3月销售金额</p><p>　　month4　　number(10,2)　　　--4月销售金额</p><p>　　month5　　number(10,2)　　　--5月销售金额</p><p>　　month6　　number(10,2)　　　--6月销售金额</p><p>　　month7　　number(10,2)　　　--7月销售金额</p><p>　　month8　　number(10,2)　　　--8月销售金额</p><p>　　month9　　number(10,2)　　　--9月销售金额</p><p>　　month10　　number(10,2)　　　--10月销售金额</p><p>　　month11　　number(10,2)　　　--11月销售金额</p><p>　　month12　　number(10,2)　　　--12月销售金额</p><p>　　结构转化的SQL语句为:</p><p>　　create or replace view</p><p>　　v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)</p><p>　　as</p><p>　　select</p><p>　　substrb(month,1,4),</p><p>　　sum(decode(substrb(month,5,2),'01',sell,0)),</p><p>　　sum(decode(substrb(month,5,2),'02',sell,0)),</p><p>　　sum(decode(substrb(month,5,2),'03',sell,0)),</p><p>　　sum(decode(substrb(month,5,2),'04',sell,0)),</p><img src ="http://www.blogjava.net/huanghuizz/aggbug/65497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-08-24 13:17 <a href="http://www.blogjava.net/huanghuizz/articles/65497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>