﻿<?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-&lt;b style="font-size:28px"&gt;Derek.&lt;font style='color:red'&gt;Guo&lt;/font&gt; BLOG&lt;/b&gt;-随笔分类-DATABASE</title><link>http://www.blogjava.net/envoydada/category/32101.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 05 Jul 2010 21:34:09 GMT</lastBuildDate><pubDate>Mon, 05 Jul 2010 21:34:09 GMT</pubDate><ttl>60</ttl><item><title>Mongodb Import Export Tools</title><link>http://www.blogjava.net/envoydada/archive/2010/07/05/325305.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Mon, 05 Jul 2010 09:52:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/07/05/325305.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/325305.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/07/05/325305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/325305.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/325305.html</trackback:ping><description><![CDATA[<span style="color: #4c3a2c; font-family: helvetica, arial, sans-serif; font-size: 13px; line-height: 17px; ">
<h1 id="title-heading" class="pagetitle" style="margin-top: 0.125em !important; margin-right: 0px !important; margin-bottom: 0.125em !important; margin-left: 0px !important; line-height: 2; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18pt; color: #4c3a2c !important; text-decoration: none !important; width: 950px; "><span id="title-text" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><a href="http://www.mongodb.org/display/DOCS/Import+Export+Tools" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; ">Import Export Tools</a></span></h1>
<div id="content" class="page view" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; clear: left; ">
<table cellspacing="2" cellpadding="5" style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; font-size: 10pt; line-height: 1.3; color: #000000; font-weight: normal; clear: left; width: 950px; ">
    <tbody style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
        <tr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 10pt; line-height: 1.3; color: #000000; font-weight: normal; ">
            <td valign="top" align="left" width="78%" class="pagecontent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 10pt; line-height: 1.3; color: #000000; font-weight: normal; padding-right: 20px; ">
            <div class="wiki-content" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 10pt; line-height: 13pt; ">
            <div class="panelMacro" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; overflow-x: hidden; overflow-y: hidden; ">
            <table class="noteMacro" style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; clear: left; background-color: #ffffce; text-align: left; padding-top: 0px; padding-right: 20px; padding-bottom: 0px; padding-left: 20px; width: 632px; ">
                <colgroup style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><col width="24" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><col style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "></colgroup>
                <tbody style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
                    <tr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; ">
                        <td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 1em; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 14px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; border-width: initial; border-color: initial; "><img src="http://www.mongodb.org/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /></td>
                        <td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 1em; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 14px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; border-width: initial; border-color: initial; ">These tool just work with the raw data (the documents in the collection); they do not save, or load, the metadata like the defined indexes or (capped) collection properties. You will need to (re)create those yourself in a separate step, before loading that data. Vote&nbsp;<a href="http://jira.mongodb.org/browse/SERVER-808" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none; color: #003366; ">here</a>&nbsp;to change this.</td>
                    </tr>
                </tbody>
            </table>
            </div>
            <h3 style="margin-top: 20px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; color: #003366; text-decoration: none !important; "><a name="ImportExportTools-mongoimport" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; width: 20px; height: 20px; text-indent: 20px; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); background-repeat: no-repeat no-repeat; "></a>mongoimport</h3>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">This utility takes a single file that contains 1 JSON/CSV/TSV string per line and inserts it. You have to specify a database and a collection.</p>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">options:
            --help                  produce help message
            -v [ --verbose ]        be more verbose (include multiple times <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> more
            <span class="Apple-tab-span" style="white-space:pre">			</span>    verbosity e.g. -vvvvv)
            -h [ --host ] arg       mongo host to connect to (<span class="code-quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #009100; background-color: inherit; ">"left,right"</span> <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> pairs)
            -d [ --db ] arg         database to use
            -c [ --collection ] arg collection to use (some commands)
            -u [ --username ] arg   username
            -p [ --password ] arg   password
            --dbpath arg            directly access mongod data files in the given path,
            <span class="Apple-tab-span" style="white-space:pre">			</span>    instead of connecting to a mongod instance - needs to
            <span class="Apple-tab-span" style="white-space:pre">			</span>    lock the data directory, so cannot be used <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> a
            <span class="Apple-tab-span" style="white-space:pre">			</span>    mongod is currently accessing the same path
            --directoryperdb        <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> dbpath specified, each db is in a separate
            directory
            -f [ --fields ] arg     comma seperated list of field names e.g. -f name,age
            --fieldFile arg         file with fields names - 1 per line
            --ignoreBlanks          <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> given, empty fields in csv and tsv will be ignored
            --type arg              type of file to <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">import</span>.  <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">default</span>: json (json,csv,tsv)
            --file arg              file to <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">import</span> from; <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> not specified stdin is used
            --drop                  drop collection first
            --headerline            CSV,TSV only - use first line as headers
            </pre>
            </div>
            </div>
            <h3 style="margin-top: 20px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; color: #003366; text-decoration: none !important; "><a name="ImportExportTools-mongoexport" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; width: 20px; height: 20px; text-indent: 20px; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); background-repeat: no-repeat no-repeat; "></a>mongoexport</h3>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">This utility takes a collection and exports to either JSON or CSV. You can specify a filter for the query, or a list of fields to output.</p>
            <div class="panelMacro" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; overflow-x: hidden; overflow-y: hidden; ">
            <table class="noteMacro" style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; clear: left; background-color: #ffffce; text-align: left; padding-top: 0px; padding-right: 20px; padding-bottom: 0px; padding-left: 20px; width: 632px; ">
                <colgroup style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><col width="24" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><col style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "></colgroup>
                <tbody style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
                    <tr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; ">
                        <td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 1em; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 14px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; border-width: initial; border-color: initial; "><img src="http://www.mongodb.org/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /></td>
                        <td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 1em; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 14px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; border-width: initial; border-color: initial; ">Neither JSON nor TSV/CSV can represent all data types. Please be careful not to lose or change data (types) when using this. For full fidelity please use mongodump.</td>
                    </tr>
                </tbody>
            </table>
            </div>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">If you want to output CSV, you have to specify the fields in the order you want them.</p>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">Example</p>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">options:
            --help                  produce help message
            -v [ --verbose ]        be more verbose (include multiple times <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> more
            <span class="Apple-tab-span" style="white-space:pre">			</span>    verbosity e.g. -vvvvv)
            -h [ --host ] arg       mongo host to connect to (<span class="code-quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #009100; background-color: inherit; ">"left,right"</span> <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> pairs)
            -d [ --db ] arg         database to use
            -c [ --collection ] arg collection to use (some commands)
            -u [ --username ] arg   username
            -p [ --password ] arg   password
            --dbpath arg            directly access mongod data files in the given path,
            <span class="Apple-tab-span" style="white-space:pre">			</span>    instead of connecting to a mongod instance - needs to
            <span class="Apple-tab-span" style="white-space:pre">			</span>    lock the data directory, so cannot be used <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> a
            <span class="Apple-tab-span" style="white-space:pre">			</span>    mongod is currently accessing the same path
            --directoryperdb        <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> dbpath specified, each db is in a separate
            directory
            -q [ --query ] arg      query filter, as a JSON string
            -f [ --fields ] arg     comma seperated list of field names e.g. -f name,age
            --csv                   export to csv instead of json
            -o [ --out ] arg        output file; <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> not specified, stdout is used
            </pre>
            </div>
            </div>
            <h3 style="margin-top: 20px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; color: #003366; text-decoration: none !important; "><a name="ImportExportTools-mongodump" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; width: 20px; height: 20px; text-indent: 20px; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); background-repeat: no-repeat no-repeat; "></a>mongodump</h3>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">This takes a database and outputs it in a binary representation. This is mostly used for doing hot backups of a database.</p>
            <div class="panelMacro" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; overflow-x: hidden; overflow-y: hidden; ">
            <table class="noteMacro" style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; clear: left; background-color: #ffffce; text-align: left; padding-top: 0px; padding-right: 20px; padding-bottom: 0px; padding-left: 20px; width: 632px; ">
                <colgroup style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><col width="24" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><col style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "></colgroup>
                <tbody style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
                    <tr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; ">
                        <td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 1em; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 14px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; border-width: initial; border-color: initial; "><img src="http://www.mongodb.org/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /></td>
                        <td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 1em; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 14px; padding-right: 0px; padding-bottom: 14px; padding-left: 0px; border-width: initial; border-color: initial; ">If you're using sharding and try to migrate data this way, this will dump shard configuration information and overwrite configurations upon restore.</td>
                    </tr>
                </tbody>
            </table>
            </div>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">options:
            --help                   produce help message
            -v [ --verbose ]         be more verbose (include multiple times <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> more
            <span class="Apple-tab-span" style="white-space:pre">			</span>     verbosity e.g. -vvvvv)
            -h [ --host ] arg        mongo host to connect to (<span class="code-quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #009100; background-color: inherit; ">"left,right"</span> <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> pairs)
            -d [ --db ] arg          database to use
            -c [ --collection ] arg  collection to use (some commands)
            -u [ --username ] arg    username
            -p [ --password ] arg    password
            --dbpath arg             directly access mongod data files in the given path,
            <span class="Apple-tab-span" style="white-space:pre">			</span>     instead of connecting to a mongod instance - needs
            <span class="Apple-tab-span" style="white-space:pre">			</span>     to lock the data directory, so cannot be used <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> a
            <span class="Apple-tab-span" style="white-space:pre">				</span>     mongod is currently accessing the same path
            --directoryperdb         <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> dbpath specified, each db is in a separate
            directory
            -o [ --out ] arg (=dump) output directory
            </pre>
            </div>
            </div>
            <h4 style="margin-top: 14px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12pt; color: #003366; text-decoration: none !important; "><a name="ImportExportTools-Example%3ADumpingEverything" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; width: 20px; height: 20px; text-indent: 20px; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); background-repeat: no-repeat no-repeat; "></a>Example: Dumping Everything</h4>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">To dump all of the collections in all of the databases, run&nbsp;<tt style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">mongodump</tt>&nbsp;with just the&nbsp;<tt style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">--host</tt>:</p>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">$ ./mongodump --host prod.example.com
            connected to: prod.example.com
            all dbs
            DATABASE: log    to   dump/log
            log.errors to dump/log/errors.bson
            713 objects
            log.analytics to dump/log/analytics.bson
            234810 objects
            DATABASE: blog    to    dump/blog
            blog.posts to dump/log/blog.posts.bson
            59 objects
            DATABASE: admin    to    dump/admin
            </pre>
            </div>
            </div>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">You'll then have a folder called "dump" in your current directory.</p>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">If you're running&nbsp;<tt style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">mongod</tt>&nbsp;locally on the default port, you can just do:</p>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">$ ./mongodump
            </pre>
            </div>
            </div>
            <h4 style="margin-top: 14px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12pt; color: #003366; text-decoration: none !important; "><a name="ImportExportTools-Example%3ADumpingaSingleCollection" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; width: 20px; height: 20px; text-indent: 20px; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); background-repeat: no-repeat no-repeat; "></a>Example: Dumping a Single Collection</h4>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">If we just want to dump a single collection, we can specify it and get a single .bson file.</p>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">$ ./mongodump --db blog --collection posts
            connected to: 127.0.0.1
            DATABASE: blog        to     dump/blog
            blog.posts to dump/blog/posts.bson
            59 objects
            </pre>
            </div>
            </div>
            <h3 style="margin-top: 20px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; color: #003366; text-decoration: none !important; "><a name="ImportExportTools-mongorestore" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-decoration: none !important; color: #4c3a2c !important; width: 20px; height: 20px; text-indent: 20px; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); background-repeat: no-repeat no-repeat; "></a>mongorestore</h3>
            <p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-size: 10pt; line-height: 13pt; color: #4c3a2c !important; font-weight: normal; text-decoration: none !important; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; max-width: 800px; ">This takes the output from mongodump and restores it.</p>
            <div class="code panel" style="margin-top: 10px; margin-right: 20px; margin-bottom: 10px; margin-left: 20px; color: black; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; overflow-x: auto; overflow-y: auto; border-left-color: #6699cc; ">
            <div class="codeContent panelContent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ffffff; color: #000000; padding-top: 0px; padding-right: 12px; padding-bottom: 0px; padding-left: 12px; text-align: left; font-size: 0.95em; background-position: initial initial; background-repeat: initial initial; ">
            <pre class="code-java" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; overflow-x: auto; overflow-y: auto; white-space: pre-wrap; font-family: 'Courier New', Courier, monospace; line-height: 1.3; ">usage: ./mongorestore [options] [directory or filename to restore from]
            options:
            --help                  produce help message
            -v [ --verbose ]        be more verbose (include multiple times <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> more
            <span class="Apple-tab-span" style="white-space:pre">			</span>    verbosity e.g. -vvvvv)
            -h [ --host ] arg       mongo host to connect to (<span class="code-quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #009100; background-color: inherit; ">"left,right"</span> <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">for</span> pairs)
            -d [ --db ] arg         database to use
            -c [ --collection ] arg collection to use (some commands)
            -u [ --username ] arg   username
            -p [ --password ] arg   password
            --dbpath arg            directly access mongod data files in the given path,
            <span class="Apple-tab-span" style="white-space:pre">				</span>    instead of connecting to a mongod instance - needs to
            <span class="Apple-tab-span" style="white-space:pre">				</span>    lock the data directory, so cannot be used <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> a
            <span class="Apple-tab-span" style="white-space:pre">			</span>    mongod is currently accessing the same path
            --directoryperdb        <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">if</span> dbpath specified, each db is in a separate
            directory
            --drop                  drop each collection before <span class="code-keyword" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #000091; background-color: inherit; ">import</span>
            --objcheck              validate object before inserting</pre>
            </div>
            </div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</div>
</span>
<img src ="http://www.blogjava.net/envoydada/aggbug/325305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-07-05 17:52 <a href="http://www.blogjava.net/envoydada/archive/2010/07/05/325305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mongodb dbshell Reference</title><link>http://www.blogjava.net/envoydada/archive/2010/07/05/325266.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Mon, 05 Jul 2010 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/07/05/325266.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/325266.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/07/05/325266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/325266.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/325266.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Command Line                                    --help                                    Show            command line options                                              ...&nbsp;&nbsp;<a href='http://www.blogjava.net/envoydada/archive/2010/07/05/325266.html'>阅读全文</a><img src ="http://www.blogjava.net/envoydada/aggbug/325266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-07-05 11:15 <a href="http://www.blogjava.net/envoydada/archive/2010/07/05/325266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转mongodb入门</title><link>http://www.blogjava.net/envoydada/archive/2010/06/23/324266.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Wed, 23 Jun 2010 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/06/23/324266.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/324266.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/06/23/324266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/324266.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/324266.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 获取数据库下载数据库, 解包, 运行mongod:$ bin/mongod连接数据库现在我们通过数据库的shell来实际操作一下。（注意：任何编程语言都可以通过合适的驱动进行类似的操作.只不过shell的方式更方便交互操作。）运行MongoDB JavaScript shell:$ bin/mongo(默认情况下shell将连接本...&nbsp;&nbsp;<a href='http://www.blogjava.net/envoydada/archive/2010/06/23/324266.html'>阅读全文</a><img src ="http://www.blogjava.net/envoydada/aggbug/324266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-06-23 15:40 <a href="http://www.blogjava.net/envoydada/archive/2010/06/23/324266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mongodb Dynamic querys select</title><link>http://www.blogjava.net/envoydada/archive/2010/06/23/324255.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Wed, 23 Jun 2010 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/06/23/324255.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/324255.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/06/23/324255.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/324255.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/324255.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find()<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;name&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">INSERT</span><span style="color: #000000; ">&nbsp;INOT&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;(`name`,&nbsp;`age`)&nbsp;</span><span style="color: #0000FF; ">values</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">25</span><span style="color: #000000; ">)<br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">insert</span><span style="color: #000000; ">({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">25</span><span style="color: #000000; ">})<br />
<br />
<br />
</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;you&nbsp;want&nbsp;</span><span style="color: #0000FF; ">add</span><span style="color: #000000; ">&nbsp;a&nbsp;&nbsp;</span><span style="color: #0000FF; ">column</span><span style="color: #000000; ">&nbsp;`email`&nbsp;</span><span style="color: #0000FF; ">on</span><span style="color: #000000; ">&nbsp;MySQL,you&nbsp;must&nbsp;:<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">ALTER</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">TABLE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&#8230;.<br />
But&nbsp;</span><span style="color: #808080; ">in</span><span style="color: #000000; ">&nbsp;Mongo,you&nbsp;can&nbsp;just:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">insert</span><span style="color: #000000; ">({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">25</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">email</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foo@bar.com</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">DELETE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.remove({})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">DELETE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;age&nbsp;</span><span style="color: #808080; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">30</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.remove({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;{$lt&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">30</span><span style="color: #000000; ">}})<br />
<br />
$gt&nbsp;:&nbsp;</span><span style="color: #808080; ">&gt;</span><span style="color: #000000; ">&nbsp;;&nbsp;$gte&nbsp;:&nbsp;</span><span style="color: #808080; ">&gt;=</span><span style="color: #000000; ">&nbsp;;&nbsp;$lt&nbsp;:&nbsp;</span><span style="color: #808080; ">&lt;</span><span style="color: #000000; ">&nbsp;;&nbsp;$lte&nbsp;:&nbsp;</span><span style="color: #808080; ">&lt;=</span><span style="color: #000000; ">&nbsp;;&nbsp;$ne&nbsp;:&nbsp;</span><span style="color: #808080; ">!=</span><span style="color: #000000; "><br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">UPDATE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">SET</span><span style="color: #000000; ">&nbsp;`age`&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">36</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;`name`&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">update</span><span style="color: #000000; ">({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">},&nbsp;{$</span><span style="color: #0000FF; ">set</span><span style="color: #000000; ">&nbsp;:&nbsp;{</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">36</span><span style="color: #000000; ">}})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">UPDATE</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">SET</span><span style="color: #000000; ">&nbsp;`age`&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;`age`&nbsp;</span><span style="color: #808080; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">3</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;`name`&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">update</span><span style="color: #000000; ">({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">},&nbsp;{$inc&nbsp;:&nbsp;{</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">3</span><span style="color: #000000; ">}})<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;See&nbsp;more&nbsp;@&nbsp;http:</span><span style="color: #808080; ">//</span><span style="color: #000000; ">www.mongodb.org</span><span style="color: #808080; ">/</span><span style="color: #000000; ">display</span><span style="color: #808080; ">/</span><span style="color: #000000; ">DOCS</span><span style="color: #808080; ">/</span><span style="color: #000000; ">Updating<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">COUNT</span><span style="color: #000000; ">(</span><span style="color: #808080; ">*</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;`name`&nbsp;</span><span style="color: #808080; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foobar</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">}).</span><span style="color: #FF00FF; ">count</span><span style="color: #000000; ">() 或 db.user.count({name:'foobar'});<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;limit&nbsp;</span><span style="color: #800000; font-weight: bold; ">10</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find().skip(</span><span style="color: #800000; font-weight: bold; ">10</span><span style="color: #000000; ">).limit(</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; ">)<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;`age`&nbsp;</span><span style="color: #808080; ">IN</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #800000; font-weight: bold; ">25</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #800000; font-weight: bold; ">35</span><span style="color: #000000; ">,</span><span style="color: #800000; font-weight: bold; ">45</span><span style="color: #000000; ">)<br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;{$</span><span style="color: #808080; ">in</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">[</span><span style="color: #FF0000; ">25,&nbsp;35,&nbsp;45</span><span style="color: #FF0000; ">]</span><span style="color: #000000; ">}})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #808080; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">ORDER</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">BY</span><span style="color: #000000; ">&nbsp;age&nbsp;</span><span style="color: #0000FF; ">DESC</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find().sort({</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #808080; ">-</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">DISTINCT</span><span style="color: #000000; ">(name)&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;age&nbsp;</span><span style="color: #808080; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">distinct</span><span style="color: #000000; ">(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,&nbsp;{</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">age</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">:&nbsp;{$lt&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; ">}})<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;name,&nbsp;</span><span style="color: #FF00FF; ">sum</span><span style="color: #000000; ">(marks)&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">GROUP</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">BY</span><span style="color: #000000; ">&nbsp;name<br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.</span><span style="color: #0000FF; ">group</span><span style="color: #000000; ">({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">key</span><span style="color: #000000; ">&nbsp;:&nbsp;{</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;true},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cond:&nbsp;{</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">name</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">foo</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reduce:&nbsp;</span><span style="color: #0000FF; ">function</span><span style="color: #000000; ">(obj,prev)&nbsp;{&nbsp;prev.msum&nbsp;</span><span style="color: #808080; ">+=</span><span style="color: #000000; ">&nbsp;obj.marks;&nbsp;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initial:&nbsp;{msum&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">0</span><span style="color: #000000; ">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
<br />
<br />
MySQL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; ">&nbsp;name&nbsp;</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; ">&nbsp;age&nbsp;</span><span style="color: #808080; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; "><br />
Mongo:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;db.</span><span style="color: #FF00FF; ">user</span><span style="color: #000000; ">.find(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">this.age&nbsp;&lt;&nbsp;20</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">,&nbsp;{name&nbsp;:&nbsp;</span><span style="color: #800000; font-weight: bold; ">1</span><span style="color: #000000; ">})</span></div>
<img src ="http://www.blogjava.net/envoydada/aggbug/324255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-06-23 14:13 <a href="http://www.blogjava.net/envoydada/archive/2010/06/23/324255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql常用的hint</title><link>http://www.blogjava.net/envoydada/archive/2010/04/08/317718.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Thu, 08 Apr 2010 06:24:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/04/08/317718.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/317718.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/04/08/317718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/317718.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/317718.html</trackback:ping><description><![CDATA[<p>mysql常用的hint</p>
<p>对于经常使用oracle的朋友可能知道，oracle的hint功能种类很多，对于优化sql语句提供了很多方法。同样，在mysql里，也有类似的hint功能。下面介绍一些常用的。</p>
<p>强制索引 <strong>FORCE INDEX</strong></p>
<p>SELECT * FROM TABLE1 FORCE INDEX (FIELD1) &#8230;</p>
<p>以上的SQL语句只使用建立在FIELD1上的索引，而不使用其它字段上的索引。</p>
<p>忽略索引 <strong>IGNORE INDEX</strong></p>
<p>SELECT * FROM TABLE1 IGNORE INDEX (FIELD1, FIELD2) &#8230;</p>
<p>在上面的SQL语句中，TABLE1表中FIELD1和FIELD2上的索引不被使用。</p>
<p>关闭查询缓冲 <strong>SQL_NO_CACHE</strong></p>
<p>SELECT SQL_NO_CACHE field1, field2 FROM TABLE1;</p>
<p>有一些SQL语句需要实时地查询数据，或者并不经常使用（可能一天就执行一两次）,这样就需要把缓冲关了,不管这条SQL语句是否被执行过，服务器都不会在缓冲区中查找，每次都会执行它。</p>
<p>强制查询缓冲 <strong>SQL_CACHE</strong></p>
<p>SELECT SQL_CALHE * FROM TABLE1;</p>
<p>如果在my.ini中的query_cache_type设成2，这样只有在使用了SQL_CACHE后，才使用查询缓冲。</p>
<p>优先操作 <strong>HIGH_PRIORITY</strong></p>
<p>HIGH_PRIORITY可以使用在select和insert操作中，让MYSQL知道，这个操作优先进行。</p>
<p>SELECT HIGH_PRIORITY * FROM TABLE1;</p>
<p>滞后操作 <strong>LOW_PRIORITY</strong></p>
<p>LOW_PRIORITY可以使用在insert和update操作中，让mysql知道，这个操作滞后。</p>
<p>update LOW_PRIORITY table1 set field1= where field1= &#8230;</p>
<p>延时插入 <strong>INSERT DELAYED</strong></p>
<p>INSERT DELAYED INTO table1 set field1= &#8230;</p>
<p>INSERT DELAYED INTO，是客户端提交数据给MySQL，MySQL返回OK状态给客户端。而这是并不是已经将数据插入表，而是存储在内存里面等待排队。当mysql有空余时，再插入。另一个重要的好处是，来自许多客户端的插入被集中在一起，并被编写入一个块。这比执行许多独立的插入要快很多。坏处是，不能返回自动递增的ID，以及系统崩溃时，MySQL还没有来得及插入数据的话，这些数据将会丢失。</p>
<p>强制连接顺序 <strong>STRAIGHT_JOIN</strong></p>
<p>SELECT TABLE1.FIELD1, TABLE2.FIELD2 FROM TABLE1 STRAIGHT_JOIN TABLE2 WHERE &#8230;</p>
<p>由上面的SQL语句可知，通过STRAIGHT_JOIN强迫MySQL按TABLE1、TABLE2的顺序连接表。如果你认为按自己的顺序比MySQL推荐的顺序进行连接的效率高的话，就可以通过STRAIGHT_JOIN来确定连接顺序。</p>
<p>强制使用临时表 <strong>SQL_BUFFER_RESULT</strong></p>
<p>SELECT SQL_BUFFER_RESULT * FROM TABLE1 WHERE &#8230;</p>
<p>当我们查询的结果集中的数据比较多时，可以通过SQL_BUFFER_RESULT.选项强制将结果集放到临时表中，这样就可以很快地释放MySQL的表锁（这样其它的SQL语句就可以对这些记录进行查询了），并且可以长时间地为客户端提供大记录集。</p>
<p>分组使用临时表 <strong>SQL_BIG_RESULT</strong>和<strong>SQL_SMALL_RESULT</strong></p>
<p>SELECT SQL_BUFFER_RESULT FIELD1, COUNT(*) FROM TABLE1 GROUP BY FIELD1;</p>
<p>一般用于分组或DISTINCT关键字，这个选项通知MySQL，如果有必要，就将查询结果放到临时表中，甚至在临时表中进行排序。SQL_SMALL_RESULT比起SQL_BIG_RESULT差不多，很少使用。</p>
 <img src ="http://www.blogjava.net/envoydada/aggbug/317718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-04-08 14:24 <a href="http://www.blogjava.net/envoydada/archive/2010/04/08/317718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql innodb引擎优化</title><link>http://www.blogjava.net/envoydada/archive/2010/04/08/317716.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Thu, 08 Apr 2010 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2010/04/08/317716.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/317716.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2010/04/08/317716.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/317716.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/317716.html</trackback:ping><description><![CDATA[&nbsp;
<p><strong><span style="font-size: 8pt; color: black; font-family: 宋体"><span style="font-size: 10pt"><span style="color: #000000">介绍：</span></span></span></strong><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">给</span><span style="font-size: 8pt; color: black; font-family: Verdana">MySQL</span><span style="font-size: 8pt; color: black">提供了具有提交，回滚和崩溃恢复能力的事务安全（</span><span style="font-size: 8pt; color: black; font-family: Verdana">ACID</span><span style="font-size: 8pt; color: black">兼容）存储引擎。</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">锁定在行级并且也在</span><span style="font-size: 8pt; color: black; font-family: Verdana">SELECT</span><span style="font-size: 8pt; color: black">语句提供一个</span><span style="font-size: 8pt; color: black; font-family: Verdana">Oracle</span><span style="font-size: 8pt; color: black">风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">中扩大锁定的需要，因为在</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">中行级锁定适合非常小的空间。</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">也支持</span><span style="font-size: 8pt; color: black; font-family: Verdana">FOREIGN KEY</span><span style="font-size: 8pt; color: black">强制。在</span><span style="font-size: 8pt; color: black; font-family: Verdana">SQL</span><span style="font-size: 8pt; color: black">查询中，你可以自由地将</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">类型的表与其它</span><span style="font-size: 8pt; color: black; font-family: Verdana">MySQL</span><span style="font-size: 8pt; color: black">的表的类型混合起来，甚至在同一个查询中也可以混合。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　</span><span style="font-size: 8pt; color: black; font-family: Verdana">Innodb </span><span style="font-size: 8pt; color: black">的创始人：</span></span></span></span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black; font-family: Verdana">Heikki Tuuri<br />
</span><span style="font-size: 8pt; color: black">　</span><span style="font-size: 8pt; color: black; font-family: Verdana">Heikki Tuuri</span><span style="font-size: 8pt; color: black">在Ｉｎｎｏｄｂ的Ｂｕｇ社区里也是很活跃的，如果遇到Ｂｕｇ也可以直接提到社区，得到作者的解答。</span></span></span></span></p>
<p><strong><span style="font-size: 8pt; color: black; font-family: 宋体"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">为什么要学习Ｉｎｎｏｄｂ的调优：</span></span></span></span></strong><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　目前来说：</span><span style="font-size: 8pt; color: black; font-family: Verdana">InnoDB</span><span style="font-size: 8pt; color: black">是为</span><span style="font-size: 8pt; color: black; font-family: Verdana">Mysql</span><span style="font-size: 8pt; color: black">处理巨大数据量时的最大性能设计。它的</span><span style="font-size: 8pt; color: black; font-family: Verdana">CPU</span><span style="font-size: 8pt; color: black">效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中</span><span style="font-size: 8pt; color: black; font-family: Verdana">Innodb</span><span style="font-size: 8pt; color: black">是倍受青睐的。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　另一方面，在数据库的复制操作中</span><span style="font-size: 8pt; color: black; font-family: Verdana">Innodb</span><span style="font-size: 8pt; color: black">也是能保证</span><span style="font-size: 8pt; color: black; font-family: Verdana">master</span><span style="font-size: 8pt; color: black">和</span><span style="font-size: 8pt; color: black; font-family: Verdana">slave</span><span style="font-size: 8pt; color: black">数据一致有一定的作用。</span></span></span></span></p>
<p><strong><span style="font-size: 8pt; color: black; font-family: 宋体"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">参数调优内容：</span></span></span></span></strong><strong><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span></strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　</span><span style="font-size: 8pt; color: black; font-family: Verdana">1. </span><span style="font-size: 8pt; color: black">内存利用方面</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　</span><span style="font-size: 8pt; color: black; font-family: Verdana">2. </span><span style="font-size: 8pt; color: black">日值控制方面</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　</span><span style="font-size: 8pt; color: black; font-family: Verdana">3.</span><span style="font-size: 8pt; color: black">　文件</span><span style="font-size: 8pt; color: black; font-family: Verdana">IO</span><span style="font-size: 8pt; color: black">分配，空间占用方面</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　</span><span style="font-size: 8pt; color: black; font-family: Verdana">4. </span><span style="font-size: 8pt; color: black">其它相关参数</span></span></span></span></p>
<p><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-size: 8pt; color: black; font-family: 宋体">１</span></strong><strong><span style="font-size: 8pt; color: black; font-family: Verdana">.</span></strong><strong><span style="font-size: 8pt; color: black; font-family: 宋体">内存利用方面：</span></strong></span></span></span><strong><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span></strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">首先介绍一个</span><span style="font-size: 8pt; color: black; font-family: Verdana">Innodb</span><span style="font-size: 8pt; color: black">最重要的参数：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-family: Verdana">innodb_buffer_pool_size</span></strong><br />
</span></span></span></span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　这个参数和</span><span style="font-size: 8pt; color: black; font-family: Verdana">MyISAM</span><span style="font-size: 8pt; color: black">的</span><span style="font-size: 8pt; color: black; font-family: Verdana">key_buffer_size</span><span style="font-size: 8pt; color: black">有相似之处，但也是有差别的。这个参数主要缓存</span><span style="font-size: 8pt; color: black; font-family: Verdana">innodb</span><span style="font-size: 8pt; color: black">表的索引，数据，插入数据时的缓冲。为</span><span style="font-size: 8pt; color: black; font-family: Verdana">Innodb</span><span style="font-size: 8pt; color: black">加速优化首要参数。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">　　该参数分配内存的原则：这个参数默认分配只有</span><span style="font-size: 8pt; color: black; font-family: Verdana">8M</span><span style="font-size: 8pt; color: black">，可以说是非常小的一个值。如果是一个专用ＤＢ服务器，那么他可以占到内存的</span><span style="font-size: 8pt; color: black; font-family: Verdana">70%-80%</span><span style="font-size: 8pt; color: black">。这个参数不能动态更改，所以分配需多考虑。分配过大，会使</span><span style="font-size: 8pt; color: black; font-family: Verdana">Swap</span><span style="font-size: 8pt; color: black">占用过多，致使</span><span style="font-size: 8pt; color: black; font-family: Verdana">Mysql</span><span style="font-size: 8pt; color: black">的查询特慢。如果你的数据比较小，那么可分配是你的数据大小＋１０％左右做为这个参数的值。例如：数据大小为５０Ｍ</span><span style="font-size: 8pt; color: black; font-family: Verdana">,</span><span style="font-size: 8pt; color: black">那么给这个值分配</span><span style="font-size: 8pt; color: black; font-family: Verdana">innodb_buffer_pool_size</span><span style="font-size: 8pt; color: black">＝６４Ｍ</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-family: Verdana">innodb_buffer_pool_size=4G</span></strong><br />
</span></span></span></span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">这个参数分配值的使用情况可以根据</span><strong><span style="font-size: 8pt; color: black; font-family: Verdana">show innodb status"G;</span></strong><span style="font-size: 8pt; color: black">中的</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<strong><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">----------------------</span></span></span></span></strong><strong><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-family: Verdana">BUFFER POOL AND MEMORY</span></strong><br />
<strong><span style="font-family: Verdana">----------------------</span></strong><br />
<strong><span style="font-family: Verdana">Total memory allocated 4668764894;</span></strong></span></span></span></strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"> <br />
</span></span></span></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">去确认使用情况。</span></span></span></span></p>
<p><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">第二个：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<strong><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_additional_mem_pool</span></span></span></span></strong></span><strong><span style="font-size: 8pt; color: black; font-family: 宋体"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">：</span></span></span></span></strong><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">作用：用来存放</span><span style="font-size: 8pt; color: black; font-family: Verdana">Innodb</span><span style="font-size: 8pt; color: black">的内部目录</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">这个值不用分配太大，系统可以自动调。不用设置太高。通常比较大数据设置</span><span style="font-size: 8pt; color: black; font-family: Verdana">16</span><span style="font-size: 8pt; color: black">Ｍ够用了，如果表比较多，可以适当的增大。如果这个值自动增加，会在</span><span style="font-size: 8pt; color: black; font-family: Verdana">error log</span><span style="font-size: 8pt; color: black">有中显示的。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">分配原则：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">用</span><strong><span style="font-size: 8pt; color: black; font-family: Verdana">show innodb status"G;</span></strong><span style="font-size: 8pt; color: black">去查看运行中的ＤＢ是什么状态（参考</span><span style="font-size: 8pt; color: black; font-family: Verdana">BUFFER POOL AND MEMORY</span><span style="font-size: 8pt; color: black">段中），然后可以调整到适当的值。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">----------------------<br />
BUFFER POOL AND MEMORY<br />
----------------------<br />
Total memory allocated 4668764894; in additional pool allocated 16777216<br />
</span></span></span></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">参考：</span></span></span></span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black; font-family: Verdana">in additional pool allocated 16777216<br />
</span><span style="font-size: 8pt; color: black">根据你的参数情况，可以适当的调整。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-family: Verdana">innodb_additional_mem_pool=16M</span></strong> </span></span></span></span></p>
<p><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">２</span><span style="font-size: 8pt; color: black; font-family: Verdana">.</span><span style="font-size: 8pt; color: black">关于日值方面：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-family: Verdana">innodb_log_file_size</span></strong><br />
</span></span></span></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">作用：指定日值的大小</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">分配原则：几个日值成员大小加起来差不多和你的</span><span style="font-size: 8pt; color: black; font-family: Verdana">innodb_buffer_pool_size</span><span style="font-size: 8pt; color: black">相等。上限为每个日值上限大小为</span><span style="font-size: 8pt; color: black; font-family: Verdana">4G</span><span style="font-size: 8pt; color: black; font-family: Verdana">.</span><span style="font-size: 8pt; color: black">一般控制在几个ＬＯＧ文件相加大小在２Ｇ以内为佳。具体情况还需要看你的事务大小，数据大小为依据。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">说明：这个值分配的大小和数据库的写入速度，事务大小，异常重启后的恢复有很大的关系。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong><span style="font-family: Verdana">innodb_log_file_size=256M</span></strong> </span></span></span></span></p>
<p><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-family: Verdana"><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_log_files_in_group<br />
</span></span></span></strong></span></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">作用：指定你有几个日值组。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">分配原则：　一般我们可以用２－３个日值组。默认为两个。</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_log_files_in_group=3</span> </span></span></span></span></p>
<p><span><br />
<strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana"><span style="font-size: 12pt"><span style="font-family: Verdana">innodb_log_buffer_size</span>：</span></span><br />
</span></span></span></strong></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="color: black">作用：事务在内存中的缓冲。</span><br />
分配原则：控制在<span style="color: black; font-family: Verdana">2-8M.</span>这个值不用太多的。他里面的内存一般一秒钟写到磁盘一次。具体写入方式和你的事务提交方式有关。在Ｏｒａｃｌｅ等数据库了解这个，一般最大指定为３Ｍ比较合适。<br />
参考：<span style="color: black; font-family: Verdana">Innodb_os_log_written(show global status </span>可以拿到)<br />
如果这个值增长过快，可以适当的增加innodb_log_buffer_size<br />
另外如果你需要处理大理的ＴＥＸＴ，或是ＢＬＯＢ字段，可以考虑增加这个参数的值。<br />
<span style="color: black">设置方法：</span></span></span></span><span style="color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_log_buffer_size=3M</span> </span></span></span></span></span></span></p>
<p><span><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 10pt"><strong>innodb_flush_logs_at_trx_commit</strong></span><br />
</span></span></span></strong></span><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span>作用：控制事务的提交方式<br />
</span><span style="font-size: 8pt; color: black">分配原则：这个参数只有３个值，０，１，２请确认一下自已能接受的级别。默认为１，主库请不要更改了。</span></span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">性能更高的可以设置为０或是２，但会丢失一秒钟的事务。</span></span></span></span></span><span><br />
<span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">说明：</span></span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">这个参数的设置对Ｉｎｎｏｄｂ的性能有很大的影响，所以在这里给多说明一下。</span></span></span></span></span><span><br />
<span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">当这个值为</span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black; font-family: Verdana">1</span><span style="font-size: 8pt; color: black">时：</span><span style="font-size: 8pt; color: black; font-family: Verdana">innodb </span><span style="font-size: 8pt; color: black">的事务</span><span style="font-size: 8pt; color: black; font-family: Verdana">LOG</span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span>在每次提交后写入日值文件，并对日值做刷新到磁盘。这个可以做到不丢任何一个事务。<br />
当这个值为</span><span style="font-size: 8pt; color: black; font-family: Verdana">2</span><span style="font-size: 8pt; color: black">时：在每个提交，日志缓冲被写到文件，但不对日志文件做到磁盘操作的刷新</span><span style="font-size: 8pt; color: black; font-family: Verdana">,</span><span style="font-size: 8pt; color: black">在对日志文件的刷新在值为</span><span style="font-size: 8pt; color: black; font-family: Verdana">2</span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span>的情况也每秒发生一次。但需要注意的是，由于进程调用方面的问题，并不能保证每秒１００％的发生。从而在性能上是最快的。但操作系统崩溃或掉电才会删除最后一秒的事务。<br />
当这个值为</span><span style="font-size: 8pt; color: black; font-family: Verdana">0</span><span style="font-size: 8pt; color: black">时：日志缓冲每秒一次地被写到日志文件，并且对日志文件做到磁盘操作的刷新，但是在一个事务提交不做任何操作。</span><span style="font-size: 8pt; color: black; font-family: Verdana">mysqld</span><span style="font-size: 8pt; color: black">进程的崩溃会删除崩溃前最后一秒的事务。</span></span></span></span></span></p>
<p><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">从以上分析，当这个值不为１时，可以取得较好的性能，但遇到异常会有损失，所以需要根据自已的情况去衡量。</span></span></span></span></span></p>
<p><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_flush_logs_at_trx_commit=1</span> </span></span></span></strong></span></p>
<p><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black; font-family: Verdana">3.</span><span style="font-size: 8pt; color: black">　文件</span><span style="font-size: 8pt; color: black; font-family: Verdana">IO</span><span style="font-size: 8pt; color: black">分配，空间占用方面</span></span></span></span></strong><span><br />
<strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_file_per_table</span><br />
</span></span></span></strong><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">作用：使每个<span style="color: black; font-family: Verdana">Innodb</span>的表，有自已独立的表空间。如删除文件后可以回收那部分空间。<br />
<span style="color: black">分配原则：只有使用不使用。但ＤＢ还需要有一个公共的表空间。</span></span></span></span><span style="color: black; font-family: Verdana"><br />
</span><span style="color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_file_per_table=1</span> </span></span></span></strong></span></p>
<p><span><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_file_io_threads<br />
</span></span></span></strong></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="color: black">作用：文件读写ＩＯ数，这个参数只在</span><span style="color: black; font-family: Verdana">Windows</span><span style="color: black">上起作用。在</span><span style="color: black; font-family: Verdana">LINUX</span>上只会等于４<br />
<span style="color: black">设置方法：</span></span></span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_file_io_threads=4</span> </span></span></span></strong></span></p>
<p><span><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_open_files<br />
</span></span></span></strong></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="color: black">作用：限制</span><span style="color: black; font-family: Verdana">Innodb</span>能打开的表的数据。<br />
<span style="color: black">分配原则：如果库里的表特别多的情况，请增加这个。这个值默认是３００。</span></span></span></span><span style="color: black; font-family: Verdana"><br />
</span><span style="color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">设置方法：</span></span></span></span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
<span style="font-family: Verdana"><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_open_files=800 </span></span></span></strong></span></span><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-size: 8pt; color: black">请适当的增加</span><span style="font-size: 8pt; color: black; font-family: Verdana">table_cache </span></span></span></span></strong></p>
<p><span><br />
<strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">4. </span>其它相关参数</span></span></span></strong></span><span style="font-size: 8pt; color: black; font-family: Verdana"><br />
</span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="color: black"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">这里说明一个比较重要的参数：</span></span></span></span><span style="color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana">innodb_flush_method</span><br />
</span></span></span></span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="color: black">作用：Ｉｎｎｏｄｂ和系统打交道的一个ＩＯ模型</span><br />
分配原则：<span style="color: black; font-family: Verdana">Windows</span>不用设置。<br />
Ｕｎｉｘ可以设置：fsync() or O_SYNC/O_DSYNC<br />
如果系统可以禁止系统的Ｃａｃｈｅ那就把他禁了。<br />
Ｌｉｎｕｘ可以选择：O_DIRECT <br />
直接写入磁盘，禁止系统Ｃａｃｈｅ了<br />
<span style="color: black">设置方法：</span></span></span></span><span style="color: black; font-family: Verdana"><br />
</span></span></span><span style="font-size: 8pt; color: black; font-family: Verdana"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="font-family: Verdana"><strong>innodb_flush_method=O_DIRECT</strong></span> </span></span></span></span></p>
<p><span><strong><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_max_dirty_pages_pct <br />
</span></span></span></strong></span><span style="font-size: 8pt; color: black"><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><span style="color: black">作用：控制</span><span style="color: black; font-family: Verdana">Innodb</span><span style="color: black">的脏页在缓冲中在那个百分比之下，值在范围</span><span style="color: black; font-family: Verdana">1-100,</span>默认为90.<br />
这个参数的另一个用处：当Ｉｎｎｏｄｂ的内存分配过大，致使Ｓｗａｐ占用严重时，可以适当的减小调整这个值，使达到Ｓｗａｐ空间释放出来。建义：这个值最大在９０％，最小在１５％。太大，缓存中每次更新需要致换数据页太多，太小，放的数据页太小，更新操作太慢。<br />
<span style="color: black">设置方法：</span></span></span></span><span style="color: black; font-family: Verdana"><br />
<span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">innodb_max_dirty_pages_pct</span></span></span></span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt">＝90<br />
动态更改需要有Ｓｕｐｅｒ权限：<br />
</span></span></span></span></span><span><span style="font-size: 10pt"><span style="color: #000000"><span style="font-size: 10pt"><strong>set global innodb_max_dirty_pages_pct=50;</strong> </span></span></span></span></p>
  <img src ="http://www.blogjava.net/envoydada/aggbug/317716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2010-04-08 14:15 <a href="http://www.blogjava.net/envoydada/archive/2010/04/08/317716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 10g Recycle Bin</title><link>http://www.blogjava.net/envoydada/archive/2008/06/18/208808.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Wed, 18 Jun 2008 03:12:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2008/06/18/208808.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/208808.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2008/06/18/208808.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/208808.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/208808.html</trackback:ping><description><![CDATA[<p>在Oracle 10g数据库中，引入了一个回收站(Recycle Bin)的数据库对象。 </p>
<p>回收站，从原理上来说就是一个数据字典表，放置用户Drop掉的数据库对象信息。用户进行Drop操作的对象并没有被数据库删除，仍然会占用空间。除非是由于用户手工进行Purge或者因为存储空间不够而被数据库清掉。数据库有了这样的功能，能够减少很多不必要的麻烦。常常看到开发人员误把表删除，急急忙忙找DBA 来想办法的情况。相信随着10G的大范围应用，这种情形应该比较少见了，我们可以充分利用10g的闪回(FLASHBACK)功能来避免大量的人工误操作。</p>
<p>DBA管理上的相关信息可以从USER_recyclebin(DBA_recyclebin)中获取。 </p>
<p>为了便于测试,我们创建了一个表空间Foo,大小为1M,创建了一个用户Foo,默认的表空间为Foo. </p>
<blockquote>
<pre>SQL&gt; CONNECT foo/foo;
Connected.
SQL&gt; SELECT table_name FROM user_tables;
no rows selected
SQL&gt;
SQL&gt; DESC user_recyclebin
Name                                      Null?    Type
----------------------------------------- -------- -------------------
OBJECT_NAME                               NOT NULL VARCHAR2(30)
ORIGINAL_NAME                                      VARCHAR2(32)
OPERATION                                          VARCHAR2(9)
TYPE                                               VARCHAR2(25)
TS_NAME                                            VARCHAR2(30)
CREATETIME                                         VARCHAR2(19)
DROPTIME                                           VARCHAR2(19)
DROPSCN                                            NUMBER
PARTITION_NAME                                     VARCHAR2(32)
CAN_UNDROP                                         VARCHAR2(3)
CAN_PURGE                                          VARCHAR2(3)
RELATED                                   NOT NULL NUMBER
BASE_OBJECT                               NOT NULL NUMBER
PURGE_OBJECT                              NOT NULL NUMBER
SPACE                                              NUMBER
SQL&gt;
</pre>
</blockquote>user_recyclebin大多是自解释的,相对比较容易理解.
<blockquote>
<pre>SQL&gt; SELECT object_name FROM user_recyclebin;
no rows selected
SQL&gt;
SQL&gt; SELECT object_name FROM user_recyclebin;
no rows selected
SQL&gt; CREATE TABLE foo AS SELECT * FROM DUAL;
Table created.
SQL&gt; SELECT table_name FROM user_tables;
TABLE_NAME
----------------------------------------------
FOO
SQL&gt; DROP TABLE foo;
Table dropped.
SQL&gt; SELECT table_name FROM user_tables;
no rows selected
SQL&gt; SHOW recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO              BIN$V3f/oYUITrCEF2cotS5JaA==$0 TABLE        2004-10-30:14:37:39
SQL&gt;
</pre>
</blockquote>SQL*Plus命令SHOW recyclebin等价于这条SQL:
<blockquote>
<pre>SQL&gt; SELECT original_name, object_name, TYPE, droptime FROM user_recyclebin;
ORIGINAL_NAME   OBJECT_NAME                    TYPE       DROPTIME
--------------- ------------------------------ ---------- --------------------
FOO             BIN$V3f/oYUITrCEF2cotS5JaA==$0 TABLE      2004-10-30:14:37:39
SQL&gt;
SQL&gt; DESC "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
Name                                      Null?    Type
----------------------------------------- -------- ----------------
DUMMY                                              VARCHAR2(1)
SQL&gt;
</pre>
</blockquote>
<p>当一个表被删除并移动到"回收站"中，它的名字要进行一些转换。这样的目的显而易见是为了避免同类对象名称的重复。(这一点和Windows操作系统的回收站不同，Windows中的回收站经过了特殊的处理，操作系统文件可以重名。) </p>
<p>转换后的名字格式如下:</p>
<blockquote>
<pre>BIN$unique_id$version </pre>
</blockquote>
<ul>
    <li>其中BIN代表RecycleBin
    <li>unique_id是数据库中该对象的唯一标志，26个字符长度
    <li>version表示该对象的版本号</li>
</ul>
<blockquote>注：在10g beta 版本中，名字格式如下：
<pre>RB$$objn$object_type$version
</pre>
其中的RB,代表Recycle Bin. objn为表的目录对象号. object_type表示对象类型. version表示版本号. 由数据库指定。</blockquote>下面我们验证一下回收站里数据库对象名字的唯一性:
<blockquote>
<pre>SQL&gt;  CREATE TABLE foo AS SELECT * FROM DUAL;
Table created.
SQL&gt; SELECT table_name FROM user_tables;
TABLE_NAME
------------------------------------------------------------
FOO
SQL&gt; DROP TABLE foo;
Table dropped.
SQL&gt; SHOW recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO              BIN$VL+ZsqVlQF6R2nYnwAqtvw==$0 TABLE        2004-10-30:15:01:42
FOO              BIN$V3f/oYUITrCEF2cotS5JaA==$0 TABLE        2004-10-30:14:37:39
SQL&gt;
</pre>
</blockquote>
<p>能看出来，虽然源表名字相同，在回收站里的对象名字是不同的。 </p>
<h2>针对Recycle Bin对象的操作</h2>
<p>已经放到回收站里的表是不能用drop 命令删除的(注意对象名字上的双引号)： </p>
<blockquote>
<pre>SQL&gt; DROP table "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
2  /
DROP table "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
*
ERROR at line 1:
ORA-38301: can not perform DDL/DML over objects in Recycle Bin
SQL&gt;
</pre>
</blockquote>如果要清掉该对象,使用purge命令：
<blockquote>
<pre>SQL&gt; PURGE table "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
2  /
Table purged.
SQL&gt; SELECT object_name, original_name FROM user_recyclebin;
OBJECT_NAME                    ORIGINAL_NAME
------------------------------ ---------------
BIN$VL+ZsqVlQF6R2nYnwAqtvw==$0 FOO
SQL&gt;
</pre>
</blockquote>对象已经清掉。如果直接清空所有的Recycle Bin中的对象：
<blockquote>
<pre>SQL&gt; PURGE RECYCLEBIN;
Recyclebin purged.
SQL&gt; SELECT object_name, original_name FROM user_recyclebin;
no rows selected
SQL&gt;
</pre>
</blockquote>恢复表，用回闪表的功能：
<blockquote>
<pre>SQL&gt; FLASHBACK TABLE foo TO BEFORE DROP;
Flashback complete.
SQL&gt;SELECT table_name FROM user_tables;
TABLE_NAME
------------------------------------------------------------
FOO
SQL&gt;
</pre>
</blockquote>
<blockquote>注:在10g Beta版本中，使用Undrop命令来做到这一点.</blockquote>有的时候，可能同一个名字的表被删除到回收站中:
<blockquote>
<pre>SQL&gt; DROP TABLE FOO;
Table dropped.
SQL&gt; SHOW RECYCLEBIN
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO              BIN$lfTbzOjISXaw8u0BIO7pNA==$0 TABLE        2004-10-30:15:18:03
SQL&gt;  CREATE TABLE foo AS SELECT * FROM DUAL;
Table created.
SQL&gt; DROP TABLE foo;
Table dropped.
SQL&gt; SHOW RECYCLEBIN
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO              BIN$J63QaUaKTmC1glat+imjeg==$0 TABLE        2004-10-30:15:18:50
FOO              BIN$lfTbzOjISXaw8u0BIO7pNA==$0 TABLE        2004-10-30:15:18:03
SQL&gt; FLASHBACK TABLE FOO TO BEFORE DROP;
Flashback complete.
SQL&gt; SHOW RECYCLEBIN
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO              BIN$lfTbzOjISXaw8u0BIO7pNA==$0 TABLE        2004-10-30:15:18:03
SQL&gt;
</pre>
</blockquote>
<p>默认的恢复是第一个被删除的FOO表。如果要恢复指定的表，可以在FLASHBACK TABLE 后面加上指定的RECYCLEBIN 参数指定其他的名字: </p>
<blockquote>
<pre>SQL&gt; FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP;
FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP
*
ERROR at line 1:
ORA-38312: original name is used by an existing object
SQL&gt; FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP
2  RENAME TO foo2;
Flashback complete.
SQL&gt;
</pre>
</blockquote>
<img src ="http://www.blogjava.net/envoydada/aggbug/208808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2008-06-18 11:12 <a href="http://www.blogjava.net/envoydada/archive/2008/06/18/208808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中分区表的使用</title><link>http://www.blogjava.net/envoydada/archive/2008/06/16/208221.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Mon, 16 Jun 2008 01:27:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2008/06/16/208221.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/208221.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2008/06/16/208221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/208221.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/208221.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在大型的企业应用或企业级的数据库应用中，要处理的数据量通常可以达到几十到几百GB，有的甚至可以到TB级。 虽然存储介质和数据处理技术的发展也很快，但是仍然不能满足用户的需求，为了使用户的大量的数据在读写操作和查询中速度更快，Oracle提供了对表和索引进行分区的技术，以改善大型应用系统的性能。<br />
<br />
使用分区的优点：<br />
&nbsp;&nbsp;&nbsp; 1、增强可用性：如果表的某个分区出现故障，表在其他分区的数据仍然可用；<br />
&nbsp;&nbsp;&nbsp; 2、维护方便：如果表的某个分区出现故障，需要修复数据，只修复该分区即可；<br />
&nbsp;&nbsp;&nbsp; 3、均衡I/O：可以把不同的分区映射到磁盘以平衡I/O，改善整个系统性能；<br />
&nbsp;&nbsp;&nbsp; 4、改善查询性能：对分区对象的查询可以仅搜索自己关心的分区，提高检索速度。<br />
<br />
&nbsp;&nbsp;&nbsp; Oracle数据库提供对表或索引的分区方法有三种：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、范围分区<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、Hash分区（散列分区）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、复合分区<br />
<br />
&nbsp;&nbsp;&nbsp; 下面将以实例的方式分别对这三种分区方法来说明分区表的使用。为了测试方便，我们先建三个表空间。<br />
create tablespace dinya_space01<br />
datafile '/test/demo/oracle/demodata/dinya01.dnf' size 50M<br />
<br />
create tablespace dinya_space01<br />
datafile '/test/demo/oracle/demodata/dinya02.dnf' size 50M<br />
<br />
create tablespace dinya_space01<br />
datafile '/test/demo/oracle/demodata/dinya03.dnf' size 50M<br />
<br />
&nbsp;<br />
1&nbsp;&nbsp;分区表的创建：1.1&nbsp;&nbsp;&nbsp;&nbsp; 范围分区<br />
&nbsp;&nbsp;&nbsp; 范围分区就是对数据表中的某个值的范围进行分区，根据某个值的范围，决定将该数据存储在哪个分区上。如根据序号分区，根据业务记录的创建日期进行分区等。<br />
<br />
&nbsp;&nbsp;&nbsp; 需求描述：有一个物料交易表，表名：material_transactions。该表将来可能有千万级的数据记录数。要求在建该表的时候使用分区表。这时候我们可以使用序号分区三个区，每个区中预计存储三千万的数据，也可以使用日期分区，如每五年的数据存储在一个分区上。<br />
<br />
根据交易记录的序号分区建表：<br />
SQL&gt; create table dinya_test<br />
&nbsp; 2&nbsp; (<br />
&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_id number primary key,<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_id number(8) not null,<br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_description varchar2(300),<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_date date&nbsp; not null<br />
&nbsp; 7&nbsp; )<br />
&nbsp; 8&nbsp; partition by range (transaction_id)<br />
&nbsp; 9&nbsp; (<br />
&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_01 values less than(30000000) tablespace dinya_space01,<br />
&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_02 values less than(60000000) tablespace dinya_space02,<br />
&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_03 values less than(maxvalue) tablespace dinya_space03<br />
&nbsp;13&nbsp; );<br />
<br />
Table created.<br />
<br />
SQL&gt;<br />
<br />
建表成功，根据交易的序号，交易ID在三千万以下的记录将存储在第一个表空间dinya_space01中，分区名为:par_01，在三千万到六千万之间的记录存储在第二个表空间：dinya_space02中，分区名为：par_02，而交易ID在六千万以上的记录存储在第三个表空间dinya_space03中，分区名为par_03.<br />
<br />
根据交易日期分区建表：<br />
SQL&gt; create table dinya_test<br />
&nbsp; 2&nbsp; (<br />
&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_id number primary key,<br />
&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_id number(8) not null,<br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_description varchar2(300),<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_date date not null&nbsp;&nbsp; <br />
&nbsp; 7&nbsp; )<br />
&nbsp; 8&nbsp; partition by range (transaction_date)<br />
&nbsp; 9&nbsp; (<br />
&nbsp;10&nbsp; partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')) tablespace dinya_space01,<br />
&nbsp;11&nbsp; partition part_02 values less than(to_date('2010-01-01','yyyy-mm-dd')) tablespace dinya_space02,<br />
&nbsp;12&nbsp; partition part_03 values less than(maxvalue) tablespace dinya_space03<br />
&nbsp;13&nbsp; );<br />
<br />
Table created.<br />
<br />
SQL&gt;<br />
<br />
这样我们就分别建了以交易序号和交易日期来分区的分区表。每次插入数据的时候，系统将根据指定的字段的值来自动将记录存储到制定的分区（表空间）中。<br />
<br />
&nbsp;&nbsp;&nbsp; 当然，我们还可以根据需求，使用两个字段的范围分布来分区，如partition by range ( transaction_id ,transaction_date),分区条件中的值也做相应的改变，请读者自行测试。<br />
<br />
&nbsp;<br />
1.2&nbsp;&nbsp;&nbsp;Hash分区（散列分区）<br />
&nbsp;&nbsp;&nbsp; 散列分区为通过指定分区编号来均匀分布数据的一种分区类型，因为通过在I/O设备上进行散列分区，使得这些分区大小一致。如将物料交易表的数据根据交易ID散列地存放在指定的三个表空间中：<br />
SQL&gt; create table dinya_test<br />
&nbsp; 2&nbsp; (<br />
&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_id number primary key,<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_id number(8) not null,<br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_description varchar2(300),<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_date date<br />
&nbsp; 7&nbsp; )<br />
&nbsp; 8&nbsp; partition by hash(transaction_id)<br />
&nbsp; 9&nbsp; (<br />
&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_01 tablespace dinya_space01,<br />
&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_02 tablespace dinya_space02,<br />
&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_03 tablespace dinya_space03<br />
&nbsp;13&nbsp; );<br />
<br />
Table created.<br />
<br />
SQL&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 建表成功，此时插入数据，系统将按transaction_id将记录散列地插入三个分区中，这里也就是三个不同的表空间中。<br />
<br />
1.3&nbsp;&nbsp;&nbsp;&nbsp;复合分区<br />
&nbsp;&nbsp;&nbsp; 有时候我们需要根据范围分区后，每个分区内的数据再散列地分布在几个表空间中，这样我们就要使用复合分区。复合分区是先使用范围分区，然后在每个分区内再使用散列分区的一种分区方法，如将物料交易的记录按时间分区，然后每个分区中的数据分三个子分区，将数据散列地存储在三个指定的表空间中：<br />
SQL&gt; create table dinya_test<br />
&nbsp; 2&nbsp; (<br />
&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_id number primary key,<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_id number(8) not null,<br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item_description varchar2(300),<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transaction_date date<br />
&nbsp; 7&nbsp; )<br />
&nbsp; 8&nbsp; partition by range(transaction_date)subpartition by hash(transaction_id)<br />
&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)<br />
&nbsp;10&nbsp; (<br />
&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_01 values less than(to_date('2006-01-01','yyyy-mm-dd')),<br />
&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_02 values less than(to_date('2010-01-01','yyyy-mm-dd')),<br />
&nbsp;13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partition part_03 values less than(maxvalue)<br />
&nbsp;14&nbsp; );<br />
<br />
Table created.<br />
<br />
SQL&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 该例中，先是根据交易日期进行范围分区，然后根据交易的ID将记录散列地存储在三个表空间中。<br />
<br />
&nbsp;<br />
2&nbsp;&nbsp;&nbsp;&nbsp;分区表操作<br />
以上了解了三种分区表的建表方法，下面将使用实际的数据并针对按日期的范围分区来测试分区表的数据记录的操作。<br />
2.1&nbsp;&nbsp;&nbsp;&nbsp; 插入记录：<br />
SQL&gt; insert into dinya_test values(1,12,'BOOKS',sysdate);<br />
1 row created.<br />
SQL&gt; insert into dinya_test values(2,12, 'BOOKS',sysdate+30);<br />
1 row created.<br />
SQL&gt; insert into dinya_test values(3,12, 'BOOKS',to_date('2006-05-30','yyyy-mm-dd'));<br />
1 row created.<br />
SQL&gt; insert into dinya_test values(4,12, 'BOOKS',to_date('2007-06-23','yyyy-mm-dd'));<br />
1 row created.<br />
SQL&gt; insert into dinya_test values(5,12, 'BOOKS',to_date('2011-02-26','yyyy-mm-dd'));<br />
1 row created.<br />
SQL&gt; insert into dinya_test values(6,12, 'BOOKS',to_date('2011-04-30','yyyy-mm-dd'));<br />
1 row created.<br />
SQL&gt; commit;<br />
Commit complete.<br />
SQL&gt;<br />
&nbsp;&nbsp;&nbsp; 按上面的建表结果，2006年前的数据将存储在第一个分区part_01上，而2006年到2010年的交易数据将存储在第二个分区part_02上，2010年以后的记录存储在第三个分区part_03上。<br />
2.2&nbsp;&nbsp;&nbsp;&nbsp; 查询分区表记录：<br />
SQL&gt; select * from dinya_test partition(part_01);<br />
TRANSACTION_ID&nbsp;&nbsp;&nbsp; ITEM_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEM_DESCRIPTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRANSACTION_DATE<br />
-------------------------------------------------------------------------------- <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2005-1-14 14:19:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2005-2-13 14:19:<br />
SQL&gt;<br />
<br />
SQL&gt; select * from dinya_test partition(part_02);<br />
TRANSACTION_ID&nbsp;&nbsp;&nbsp;&nbsp; ITEM_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEM_DESCRIPTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRANSACTION_DATE<br />
-------------------------------------------------------------------------------- <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2006-5-30<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2007-6-23<br />
SQL&gt;<br />
<br />
SQL&gt; select * from dinya_test partition(part_03);<br />
TRANSACTION_ID&nbsp;&nbsp;&nbsp;&nbsp; ITEM_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ITEM_DESCRIPTION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRANSACTION_DATE<br />
-------------------------------------------------------------------------------- <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2011-2-26<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2011-4-30<br />
SQL&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 从查询的结果可以看出，插入的数据已经根据交易时间范围存储在不同的分区中。这里是指定了分区的查询，当然也可以不指定分区，直接执行select * from dinya_test查询全部记录。在也检索的数据量很大的时候，指定分区会大大提高检索速度。<br />
<br />
2.3&nbsp;&nbsp;&nbsp;&nbsp; 更新分区表的记录：<br />
SQL&gt; update dinya_test partition(part_01) t set t.item_description='DESK' where t.transaction_id=1;<br />
1 row updated.<br />
<br />
SQL&gt; commit;<br />
Commit complete.<br />
SQL&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 这里将第一个分区中的交易ID=1的记录中的item_description字段更新为&#8220;DESK&#8221;，可以看到已经成功更新了一条记录。但是当更新的时候指定了分区，而根据查询的记录不在该分区中时，将不会更新数据，请看下面的例子：<br />
<br />
SQL&gt; update dinya_test partition(part_01) t set t.item_description='DESK' where t.transaction_id=6;<br />
<br />
0 rows updated.<br />
<br />
SQL&gt; commit;<br />
<br />
Commit complete.<br />
<br />
SQL&gt;<br />
<br />
指定了在第一个分区中更新记录，但是条件中限制交易ID为6，而查询全表，交易ID为6的记录在第三个分区中，这样该条语句将不会更新记录。<br />
<br />
2.4&nbsp;&nbsp;&nbsp;&nbsp; 删除分区表记录：<br />
SQL&gt; delete from dinya_test partition(part_02) t where t.transaction_id=4;<br />
1 row deleted.<br />
<br />
SQL&gt; commit;<br />
Commit complete.<br />
<br />
SQL&gt;<br />
<br />
上面例子删除了第二个分区part_02中的交易记录ID为4的一条记录，和更新数据相同，如果指定了分区，而条件中的数据又不在该分区中时，将不会删除任何数据。<br />
<br />
&nbsp;<br />
3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分区表索引的使用：<br />
分区表和一般表一样可以建立索引，分区表可以创建局部索引和全局索引。当分区中出现许多事务并且要保证所有分区中的数据记录的唯一性时采用全局索引。<br />
3.1&nbsp;&nbsp;&nbsp;&nbsp; 局部索引分区的建立：<br />
SQL&gt; create index dinya_idx_t on dinya_test(item_id)<br />
&nbsp; 2&nbsp; local<br />
&nbsp; 3&nbsp; (<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp; partition idx_1 tablespace dinya_space01,<br />
&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp; partition idx_2 tablespace dinya_space02,<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp; partition idx_3 tablespace dinya_space03<br />
&nbsp; 7&nbsp; );<br />
<br />
Index created.<br />
<br />
看查询的执行计划，从下面的执行计划可以看出，系统已经使用了索引：<br />
SQL&gt; select * from dinya_test partition(part_01) t where t.item_id=12;<br />
Execution Plan<br />
----------------------------------------------------------<br />
&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=187)<br />
&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; TABLE ACCESS (BY LOCAL INDEX ROWID) OF 'DINYA_TEST' (Cost=2 Card=1 Bytes=187)<br />
&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; INDEX (RANGE SCAN) OF 'DINYA_IDX_T' (NON-UNIQUE) (Cost=1 Card=1)<br />
<br />
Statistics<br />
----------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; recursive calls<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; db block gets<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp; consistent gets<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp; physical reads<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; redo size<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 334&nbsp; bytes sent via SQL*Net to client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 309&nbsp; bytes received via SQL*Net from client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp; SQL*Net roundtrips to/from client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp; sorts (memory)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; sorts (disk)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp; rows processed<br />
<br />
SQL&gt;<br />
<br />
&nbsp;<br />
3.2&nbsp;&nbsp;&nbsp;&nbsp; 全局索引分区的建立。<br />
全局索引建立时global 子句允许指定索引的范围值，这个范围值为索引字段的范围值：<br />
SQL&gt; create index dinya_idx_t on dinya_test(item_id)<br />
&nbsp; 2&nbsp; global partition by range(item_id)<br />
&nbsp; 3&nbsp; (<br />
&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp; partition idx_1 values less than (1000) tablespace dinya_space01,<br />
&nbsp; 5&nbsp;&nbsp;&nbsp; &nbsp;partition idx_2 values less than (10000) tablespace dinya_space02,<br />
&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp; partition idx_3 values less than (maxvalue) tablespace dinya_space03<br />
&nbsp; 7&nbsp; );<br />
<br />
Index created.<br />
<br />
SQL&gt; <br />
<br />
&nbsp;&nbsp;&nbsp; 本例中对表的item_id字段建立索引分区，当然也可以不指定索引分区名直接对整个表建立索引，如：<br />
SQL&gt; create index dinya_idx_t on dinya_test(item_id);<br />
Index created.<br />
<br />
SQL&gt; <br />
<br />
&nbsp;&nbsp;&nbsp; 同样的，对全局索引根据执行计划可以看出索引已经可以使用：<br />
SQL&gt; select * from dinya_test t where t.item_id=12;<br />
Execution Plan<br />
----------------------------------------------------------<br />
&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=3 Bytes=561)<br />
&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'DINYA_TEST' (Cost&nbsp;=2 Card=3 Bytes=561)<br />
&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; INDEX (RANGE SCAN) OF 'DINYA_IDX_T' (NON-UNIQUE) (Cost=1 Card=3)<br />
<br />
Statistics<br />
----------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp; recursive calls<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; db block gets<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10&nbsp; consistent gets<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; physical reads<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; redo size<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 420&nbsp; bytes sent via SQL*Net to client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 309&nbsp; bytes received via SQL*Net from client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp; SQL*Net roundtrips to/from client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp; sorts (memory)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; sorts (disk)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp; rows processed<br />
SQL&gt;<br />
<br />
4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分区表的维护：<br />
&nbsp;&nbsp;&nbsp; 了解了分区表的建立、索引的建立、表和索引的使用后，在应用的还要经常对分区进行维护和管理。日常维护和管理的内容包括：增加一个分区，合并一个分区及删除分区等等。下面以范围分区为例说明增加、合并、删除分区的一般操作：<br />
4.1&nbsp;&nbsp;&nbsp;&nbsp; 增加一个分区:<br />
SQL&gt; alter table dinya_test <br />
&nbsp; 2&nbsp; add partition part_04 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace dinya_space03;<br />
<br />
Table altered.<br />
<br />
SQL&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 增加一个分区的时候，增加的分区的条件必须大于现有分区的最大值，否则系统将提示ORA-14074 partition bound must collate higher than that of the last partition 错误。<br />
<br />
&nbsp;&nbsp;&nbsp; <br />
4.2&nbsp;&nbsp;&nbsp;&nbsp; 合并一个分区：<br />
SQL&gt; alter table dinya_test merge partitions part_01,part_02 into partition part_02;<br />
<br />
Table altered.<br />
<br />
SQL&gt; <br />
<br />
&nbsp;&nbsp;&nbsp; 在本例中将原有的表的part_01分区和part_02分区进行了合并，合并后的分区为part_02,如果在合并的时候把合并后的分区定为part_01的时候，系统将提示ORA-14275 cannot reuse lower-bound partition as resulting partition 错误。<br />
<br />
&nbsp;<br />
4.3&nbsp;&nbsp;&nbsp;&nbsp; 删除分区：<br />
SQL&gt; alter table dinya_test drop partition part_01;<br />
<br />
Table altered.<br />
<br />
SQL&gt;<br />
<br />
&nbsp;&nbsp;&nbsp; 删除分区表的一个分区后，查询该表的数据时显示，该分区中的数据已全部丢失，所以执行删除分区动作时要慎重，确保先备份数据后再执行，或将分区合并。<br />
<br />
5&nbsp;&nbsp;&nbsp;&nbsp;总结：<br />
&nbsp;&nbsp;&nbsp; 需要说明的是，本文在举例说名分区表事务操作的时候，都指定了分区，因为指定了分区，系统在执行的时候则只操作该分区的记录，提高了数据处理的速度。不要指定分区直接操作数据也是可以的。在分区表上建索引及多索引的使用和非分区表一样。此外，因为在维护分区的时候可能对分区的索引会产生一定的影响，可能需要在维护之后重建索引，相关内容请参考分区表索引部分的文档。
<img src ="http://www.blogjava.net/envoydada/aggbug/208221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2008-06-16 09:27 <a href="http://www.blogjava.net/envoydada/archive/2008/06/16/208221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE CTXCAT-CATSEARCH</title><link>http://www.blogjava.net/envoydada/archive/2008/06/12/207472.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Thu, 12 Jun 2008 10:38:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2008/06/12/207472.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/207472.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2008/06/12/207472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/207472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/207472.html</trackback:ping><description><![CDATA[<h2 class="CM1"><a name="CCREF0103"><font face="Arial, Helvetica, sans-serif" color="#330099">CATSEARCH</font></a></h2>
<p>Use the <code>CATSEARCH</code> operator to search <code>CTXCAT</code> indexes. Use this operator in the <code>WHERE</code> clause of a <code>SELECT</code> statement.</p>
<p class="BP">The grammar of this operator is called CTXCAT. You can also use the CONTEXT grammar if your search criteria requires special functionality, <br />
such as thesaurus, fuzzy matching, proximity searching or stemming. To utilize the CONTEXT grammar, <br />
use the Query Template Specification in the <code>text_query</code> parameter as described in this section.</p>
<h3 class="CMS"><font face="Arial, Helvetica, sans-serif" color="#330099">About Performance</font></h3>
<p class="BP">You use the <code>CATSEARCH</code> operator with a <code>CTXCAT</code> index mainly to improve mixed query performance. You specify your text query condition with <code>text_query</code> and your structured condition with <code>structured_query</code>.</p>
<p class="BP">Internally, Oracle Text uses a combined b-tree index on text and structured columns to quickly produce results satisfying the query.</p>
<h3 class="CMS"><font face="Arial, Helvetica, sans-serif" color="#330099">Limitation</font></h3>
<p class="BP">This operator does not support functional invocation.</p>
<h3 class="CMS"><font face="Arial, Helvetica, sans-serif" color="#330099">Syntax</font></h3>
<pre class="CE">CATSEARCH(
[<em class="Italic">schema</em>.]<em class="Italic">column</em>,
text_query       VARCHAR2,
structured_query VARCHAR2,
</pre>
<pre class="CE">RETURN NUMBER; </pre>
<dl class="A1">
<dt class="A1"><font face="Arial, Helvetica, sans-serif" size="-1"><strong>[schema.]column</strong></font> </dt></dl>
<p class="BP">Specify the text column to be searched on. This column must have a <code>CTXCAT</code> index associated with it.</p>
<p class="A1"><font face="Arial, Helvetica, sans-serif" size="-1"><strong>text_query</strong></font> </p>
<p class="BP">Specify one of the following to define your search in <code>column</code>.</p>
<ul class="LB1">
    <li class="LB1" type="disc"><a href="http://ewp.rpi.edu/hartford/webgen/appdocs/oracle/doc/text.920/a96518/csql.htm#29433">CATSEARCH query operations</a>
    <li class="LB1" type="disc"><a href="http://ewp.rpi.edu/hartford/webgen/appdocs/oracle/doc/text.920/a96518/csql.htm#29376">Query Template Specification</a> (for using CONTEXT grammar) </li>
</ul>
<p><font face="Arial, Helvetica, sans-serif" color="#330099">CATSEARCH query operations</font><!--/toc=h4--></p>
<p class="BP">The <code>CATSEARCH</code> operator supports only the following query operations:</p>
<ul class="LB1">
    <li class="LB1" type="disc">Logical AND
    <li class="LB1" type="disc">Logical OR (|)
    <li class="LB1" type="disc">Logical NOT (-)
    <li class="LB1" type="disc">" " (quoted phrases)
    <li class="LB1" type="disc">Wildcarding </li>
</ul>
<p class="BP">These operators have the following syntax:</p>
<p>
<table class="Informal" dir="ltr" title="" style="width: 779px; height: 526px" cellspacing="0" cellpadding="3" rules="groups" width="779" summary="" border="1" frame="hsides">
    <thead>
        <tr class="Informal">
            <th class="Informal" valign="bottom" scope="col" align="left"><font face="Arial, Helvetica, sans-serif"><strong>Operation</strong></font></th>
            <th class="Informal" valign="bottom" scope="col" align="left"><font face="Arial, Helvetica, sans-serif"><strong>Syntax</strong></font></th>
            <th class="Informal" valign="bottom" scope="col" align="left"><font face="Arial, Helvetica, sans-serif"><strong>Description of Operation</strong></font></th>
        </tr>
    </thead>
    <tbody>
        <tr class="Informal" valign="top" align="left">
            <td class="Informal">
            <p class="TB">Logical AND</p>
            </td>
            <td class="Informal">
            <p class="TB">a b c</p>
            </td>
            <td class="Informal">
            <p class="TB">Returns rows that contain a, b and c.</p>
            </td>
        </tr>
        <tr class="Informal" valign="top" align="left">
            <td class="Informal">
            <p class="TB">Logical OR</p>
            </td>
            <td class="Informal">
            <p class="TB">a | b | c</p>
            </td>
            <td class="Informal">
            <p class="TB">Returns rows that contain a, b, or c.</p>
            </td>
        </tr>
        <tr class="Informal" valign="top" align="left">
            <td class="Informal">
            <p class="TB">Logical NOT</p>
            </td>
            <td class="Informal">
            <p class="TB">a - b</p>
            </td>
            <td class="Informal">
            <p class="TB">Returns rows that contain a and not b.</p>
            </td>
        </tr>
        <tr class="Informal" valign="top" align="left">
            <td class="Informal">
            <p class="TB">hyphen with no space</p>
            </td>
            <td class="Informal">
            <p class="TB">a-b</p>
            </td>
            <td class="Informal">
            <p class="TB">Hyphen treated as a regular character. </p>
            <p class="TB">For example, if the hyphen is defined as skipjoin, words such as <em class="Italic">web-site</em> are treated as the single query term <em class="Italic">website</em>. </p>
            <p class="TB">Likewise, if the hyphen is defined as a printjoin, words such as <em class="Italic">web-site</em> are treated as <em class="Italic">web site</em> in the <code>CTXCAT</code> query language.</p>
            </td>
        </tr>
        <tr class="Informal" valign="top" align="left">
            <td class="Informal">
            <p class="TB">" "</p>
            </td>
            <td class="Informal">
            <p class="TB">"a b c"</p>
            </td>
            <td class="Informal">
            <p class="TB">Returns rows that contain the phrase "a b c". </p>
            <p class="TB">For example, entering "Sony CD Player" means return all rows that contain this sequence of words.</p>
            </td>
        </tr>
        <tr class="Informal" valign="top" align="left">
            <td class="Informal">
            <p class="TB">( )</p>
            </td>
            <td class="Informal">
            <p class="TB">(A B) | C</p>
            </td>
            <td class="Informal">
            <p class="TB">Parentheses group operations. This query is equivalent to the <code>CONTAINS</code> query (A &amp;B) | C.</p>
            </td>
        </tr>
        <tr class="Informal" valign="top" align="left">
            <td class="Informal">
            <p class="TB">wildcard </p>
            <p class="TB">(right and double truncated)</p>
            </td>
            <td class="Informal">
            <p class="TB">term* </p>
            <p class="TB">a*b</p>
            </td>
            <td class="Informal">
            <p class="TB">The wildcard character matches zero or more characters. </p>
            <p class="TB">For example, <em class="Italic">do*</em> matches <em class="Italic">dog</em>, and <em class="Italic">gl*s</em> matches <em class="Italic">glass</em>. </p>
            <p class="TB">Left truncation not supported. </p>
            <p class="TB">Note: Oracle recommends that you create a prefix index if your application uses wildcard searching. You set prefix indexing with the <a href="http://ewp.rpi.edu/hartford/webgen/appdocs/oracle/doc/text.920/a96518/cdatadic.htm#34699">BASIC_WORDLIST</a> preference.</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<h5 class="H4"><font face="Arial, Helvetica, sans-serif" color="#330099">Query Template Specification</font><!--/toc=h4--></h5>
<p class="BP">You specify a marked-up string that specifies a query based on the CONTEXT grammar. <br />
Use the following tags and attribute values which are case sensitive:</p>
<p>
<table class="Informal" dir="ltr" title="" style="width: 770px; height: 286px" cellspacing="0" cellpadding="3" rules="groups" width="770" summary="" border="1" frame="hsides">
    <thead>
        <tr class="Informal">
            <th class="Informal" valign="bottom" scope="col" align="left"><font face="Arial, Helvetica, sans-serif"><strong>TAG</strong></font></th>
            <th class="Informal" valign="bottom" scope="col" align="left"><font face="Arial, Helvetica, sans-serif"><strong>Description</strong></font></th>
            <th class="Informal" valign="bottom" scope="col" align="left"><font face="Arial, Helvetica, sans-serif"><strong>Possible Values</strong></font></th>
        </tr>
    </thead>
    <tbody>
        <tr class="Informal" valign="top" align="left">
            <td class="Informal">
            <p class="TB">&lt;query&gt; &lt;/query&gt;</p>
            </td>
            <td class="Informal">
            <p class="TB">Signals that this query be interpreted as a query template.</p>
            </td>
            <td class="Informal"></td>
        </tr>
        <tr class="Informal" valign="top" align="left">
            <td class="Informal">
            <p class="TB">&lt;textquery&gt; &lt;/textquery&gt;</p>
            </td>
            <td class="Informal">
            <p class="TB">Specify the query string.</p>
            </td>
            <td class="Informal"></td>
        </tr>
        <tr class="Informal" valign="top" align="left">
            <td class="Informal">
            <p class="TB">grammar=</p>
            </td>
            <td class="Informal">
            <p class="TB">Specify the grammar of the query.</p>
            </td>
            <td class="Informal">
            <p class="TB">CONTEXT </p>
            <p class="TB">CTXCAT</p>
            </td>
        </tr>
        <tr class="Informal" valign="top" align="left">
            <td class="Informal">
            <p class="TB">&lt;score&gt;&lt;/score&gt;</p>
            </td>
            <td class="Informal">
            <p class="TB">Specify the score preference</p>
            </td>
            <td class="Informal"></td>
        </tr>
        <tr class="Informal" valign="top" align="left">
            <td class="Informal">
            <p class="TB">datatype=</p>
            </td>
            <td class="Informal">
            <p class="TB">Specify the type of number returned as score.</p>
            </td>
            <td class="Informal">
            <p class="TB">INTEGER </p>
            <p class="TB">FLOAT</p>
            </td>
        </tr>
    </tbody>
</table>
<br />
<font face="Arial, Helvetica, sans-serif" size="-1"><strong>structured_query</strong></font> </p>
<p class="BP">Specify the structured conditions and the <code>ORDER</code> <code>BY</code> clause. <br />
There must exist an index for any column you specify. For example, if you specify <code>'category_id=1 order by bid_close'</code>, <br />
you must have an index for <code>'category_id, bid_close'</code> as specified with <code>CTX_DDL</code>.<code>ADD_INDEX</code>.</p>
<p class="BP">With <code>structured_query</code>, you can use standard SQL syntax with only the following operators:</p>
<ul class="LB1">
    <li class="LB1" type="disc">=
    <li class="LB1" type="disc">&lt;=
    <li class="LB1" type="disc">&gt;=
    <li class="LB1" type="disc">&gt;
    <li class="LB1" type="disc">&lt;
    <li class="LB1" type="disc">IN
    <li class="LB1" type="disc">BETWEEN </li>
</ul>
<p class="LB1">
<table class="Note" dir="ltr" title="This is a layout table to format a note" style="width: 364px; height: 105px" cellspacing="0" cellpadding="0" width="364" summary="This is a layout table to format a note" border="0">
    <tbody>
        <tr class="Note">
            <td class="Note">
            <hr />
            <font face="Arial, Helvetica, sans-serif"><strong class="NH">Note:</strong></font>
            <p class="NB">You cannot use parentheses () in the <code>structured_query</code> parameter.</p>
            <hr />
            </td>
        </tr>
    </tbody>
</table>
</p>
<h3 class="CMS"><font face="Arial, Helvetica, sans-serif" color="#330099">Examples</font><!--toc=h4-"28208"--></h3>
<h5 class="H4"><font face="Arial, Helvetica, sans-serif" color="#330099">Create the Table</font><!--/toc=h4--></h5>
<p class="BP">The following statement creates the table to be indexed.</p>
<pre class="CE">CREATE TABLE auction (category_id number primary key, title varchar2(20),bid_close date);
</pre>
<p class="BP">The following table inserts the values into the table:</p>
<p class="BP">INSERT INTO auction values(1, 'Sony CD Player', '20-FEB-2000');<br />
INSERT INTO auction values(2, 'Sony CD Player', '24-FEB-2000');<br />
INSERT INTO auction values(3, 'Pioneer DVD Player', '25-FEB-2000');<br />
INSERT INTO auction values(4, 'Sony CD Player', '25-FEB-2000');<br />
INSERT INTO auction values(5, 'Bose Speaker', '22-FEB-2000');<br />
INSERT INTO auction values(6, 'Tascam CD Burner', '25-FEB-2000');<br />
INSERT INTO auction values(7, 'Nikon digital camera', '22-FEB-2000');<br />
INSERT INTO auction values(8, 'Canon digital camera', '26-FEB-2000');<br />
<!--toc=h4-"28248"--></p>
<h5 class="H4"><font face="Arial, Helvetica, sans-serif" color="#330099">Create the CTXCAT Index</font><!--/toc=h4--></h5>
<p class="BP">The following statements create the <code>CTXCAT</code> index:</p>
<pre class="CE"><span style="color: red">
<pre class="CE">begin
ctx_ddl.create_index_set('auction_iset');
ctx_ddl.add_index('auction_iset','bid_close');
end; <br />
</pre>
<pre class="CE">CREATE INDEX auction_titlex ON auction(title) INDEXTYPE IS CTXCAT PARAMETERS ('index set auction_iset'); </pre>
</span></pre>
<pre class="CE">A typical query with <code>CATSEARCH</code> might include a structured clause as follows to </pre>
<pre class="CE">find all rows that contain the word <em class="Italic">camera</em> ordered by <code>bid_close</code>:</pre>
<pre class="CE">SELECT * FROM auction WHERE CATSEARCH(title, 'camera', 'order by bid_close
desc')&gt; 0;
CATEGORY_ID TITLE                BID_CLOSE
----------- -------------------- ---------
8 Canon digital camera 26-FEB-00
7 Nikon digital camera 22-FEB-00
</pre>
<p class="BP">The following query finds all rows that contain the phrase <em class="Italic">Sony CD Player</em> and that have a bid close date of February 20, 2000:</p>
<pre class="CE">SELECT * FROM auction WHERE CATSEARCH(title, '"Sony CD Player"', 'bid_close=''20-FEB-00''')&gt; 0;
CATEGORY_ID TITLE                BID_CLOSE
----------- -------------------- ---------
1 Sony CD Player       20-FEB-00
</pre>
<pre class="CE">The following query finds all rows with the terms <em class="Italic">Sony</em> and <em class="Italic">CD</em> and <em class="Italic">Player</em>:</pre>
<pre class="CE">SELECT * FROM auction WHERE CATSEARCH(title, 'Sony CD Player', 'order by bid_close desc')&gt; 0;
CATEGORY_ID TITLE                BID_CLOSE
----------- -------------------- ---------
4 Sony CD Player       25-FEB-00
2 Sony CD Player       24-FEB-00
1 Sony CD Player       20-FEB-00
</pre>
<pre class="CE">The following query finds all rows with the term <em class="Italic">CD</em> and not <em class="Italic">Player</em>:</pre>
<pre class="CE">SELECT * FROM auction WHERE CATSEARCH(title, 'CD - Player', 'order by bid_close
desc')&gt; 0;
CATEGORY_ID TITLE                BID_CLOSE
----------- -------------------- ---------
6 Tascam CD Burner     25-FEB-00
</pre>
<p class="BP">The following query finds all rows with the terms <em class="Italic">CD</em> or <em class="Italic">DVD</em> or <em class="Italic">Speaker</em>:</p>
<pre class="CE">SELECT * FROM auction WHERE CATSEARCH(title, 'CD | DVD | Speaker', 'order by bid_close desc')&gt; 0;
CATEGORY_ID TITLE                BID_CLOSE
----------- -------------------- ---------
3 Pioneer DVD Player   25-FEB-00
4 Sony CD Player       25-FEB-00
6 Tascam CD Burner     25-FEB-00
2 Sony CD Player       24-FEB-00
5 Bose Speaker         22-FEB-00
1 Sony CD Player       20-FEB-00</pre>
<pre class="CE">&nbsp;</pre>
<pre class="CE">
<p><span style="color: #333399">&nbsp;&nbsp;&nbsp; --创建索引集<br />
&nbsp;&nbsp;&nbsp; ctx_ddl.create_index_set('CIRCLE_INDEX_SET');<br />
&nbsp;&nbsp;&nbsp; ctx_ddl.add_index('CIRCLE_INDEX_SET','CREATETIME');<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; --创建停用词列表<br />
&nbsp;&nbsp;&nbsp; ctx_ddl.create_stoplist('TAG_STOPLIST', 'BASIC_STOPLIST');<br />
&nbsp;&nbsp;&nbsp; --添加停用词<br />
&nbsp;&nbsp;&nbsp; ctx_ddl.add_stopword('TAG_STOPLIST','游戏');<br />
&nbsp;&nbsp;&nbsp; --删除停用词<br />
&nbsp;&nbsp;&nbsp; ctx_ddl.remove_stopword('TAG_STOPLIST','游戏');<br />
&nbsp;&nbsp;&nbsp; --删除停用词列表<br />
&nbsp;&nbsp;&nbsp; ctx_ddl.drop_stoplist('TAG_STOPLIST');<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; --查询ctx_stoplists和ctx_stopwords 视图<br />
&nbsp;&nbsp; SELECT * FROM ctx_stoplists;<br />
&nbsp;&nbsp; SELECT * FROM ctx_stopwords;<br />
&nbsp;&nbsp; --查看系统默认参数项<br />
&nbsp;&nbsp; SELECT * FROM ctx_parameters;<br />
&nbsp;&nbsp; --查看索引集视图<br />
&nbsp;&nbsp; SELECT * FROM ctx_index_sets</span></p>
<p><span style="color: #333399">&nbsp;&nbsp;&nbsp; --创建全文索引<br />
&nbsp;&nbsp;&nbsp; CREATE INDEX CTXCAT_CIRCLE_TAG ON CIRCLE(TAG) INDEXTYPE IS CTXSYS.CTXCAT;<br />
&nbsp;&nbsp;&nbsp; --带停用词创建索引<br />
&nbsp;&nbsp;&nbsp; create index CTXCAT_CIRCLE_TAG on CIRCLE(TAG) indextype is CTXSYS.CTXCAT<br />
&nbsp;&nbsp;&nbsp; parameters ('stoplist TAG_STOPLIST');<br />
&nbsp;&nbsp;&nbsp; --带索引集创建所以<br />
&nbsp;&nbsp;&nbsp; CREATE INDEX CTXCAT_CIRCLE_TAG ON CIRCLE(TAG) INDEXTYPE IS CTXSYS.CTXCAT <br />
&nbsp;&nbsp;&nbsp; PARAMETERS ('index set CIRCLE_INDEX_SET'); <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; --删除索引<br />
&nbsp;&nbsp;&nbsp; DROP INDEX CTXCAT_CIRCLE_TAG;</span></p>
<p><span style="color: #333399">&nbsp;&nbsp; --重建索引<br />
&nbsp;&nbsp; ALTER INDEX CTXCAT_CIRCLE_TAG REBUILD <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PARAMETERS ('REPLACE STOPLIST TAG_STOPLIST');</span></p>
<p><span style="color: #333399">&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; select * from (select&nbsp; row_.*, rownum rownum_ from(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT * FROM CIRCLE c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE CATSEARCH(TAG,'游戏|漫画|旅游','order by createtime DESC')&gt;0<br />
&nbsp;&nbsp; ) row_&nbsp; where rownum &lt;= 10) where rownum_ &gt;= 0</span></p>
</pre>
<img src ="http://www.blogjava.net/envoydada/aggbug/207472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2008-06-12 18:38 <a href="http://www.blogjava.net/envoydada/archive/2008/06/12/207472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE JOBS</title><link>http://www.blogjava.net/envoydada/archive/2008/06/12/207288.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Thu, 12 Jun 2008 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2008/06/12/207288.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/207288.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2008/06/12/207288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/207288.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/207288.html</trackback:ping><description><![CDATA[<p>一、设置初始化参数 job_queue_processes<br />
　　sql&gt; alter system set job_queue_processes=n;（n&gt;0）<br />
　　job_queue_processes最大值为1000<br />
　　<br />
　　查看job queue 后台进程<br />
　　sql&gt;select name,description from v$bgprocess;<br />
　　<br />
　　二，dbms_job package 用法介绍<br />
　　包含以下子过程： <br />
　　<br />
　　Broken()过程。<br />
　　change()过程。<br />
　　Interval()过程。<br />
　　Isubmit()过程。<br />
　　Next_Date()过程。<br />
　　Remove()过程。<br />
　　Run()过程。<br />
　　Submit()过程。<br />
　　User_Export()过程。<br />
　　What()过程。<br />
　　<br />
　　1、Broken()过程更新一个已提交的工作的状态，典型地是用来把一个已破工作标记为未破工作。<br />
　　这个过程有三个参数：job 、broken与next_date。<br />
　　<br />
　　PROCEDURE Broken (job　　　 IN binary_integer,<br />
　　　　　　　　　　　Broken　　IN boolean,<br />
　　　　　　　　　　　next_date IN date :=SYSDATE)<br />
　　<br />
　　job参数是工作号，它在问题中唯一标识工作。<br />
　　broken参数指示此工作是否将标记为破——TRUE说明此工作将标记为破，而FLASE说明此工作将标记为未破。<br />
　　next_date参数指示在什么时候此工作将再次运行。此参数缺省值为当前日期和时间。<br />
　　job如果由于某种原因未能成功之行，oracle将重试16次后，还未能成功执行，将被标记为broken重新启动状态为broken的job，有如下两种方式;<br />
　　a、利用dbms_job.run()立即执行该job<br />
　　　 sql&gt;begin<br />
　　　 sql&gt;dbms_job.run(:jobno) 该jobno为submit过程提交时返回的job number<br />
　　　 sql&gt;end;<br />
　　　 sql&gt;/<br />
　　b、利用dbms_job.broken()重新将broken标记为false<br />
　　　 sql&gt;begin<br />
　　　 sql&gt;dbms_job.broken (:job,false,next_date)<br />
　　　 sql&gt;end;<br />
　　　 sql&gt;/<br />
　　2、Change()过程用来改变指定工作的设置。<br />
　　这个过程有四个参数：job、what 、next_date与interval。<br />
　　<br />
　　PROCEDURE Change (job　　　　IN binary_integer,<br />
　　　　　　　　　　　What　　　 IN varchar2,<br />
　　　　　　　　　　　next_date　IN date,<br />
　　　　　　　　　　　interval　 IN varchar2)<br />
　　<br />
　　此job参数是一个整数值，它唯一标识此工作。<br />
　　What参数是由此工作运行的一块PL/SQL代码块。<br />
　　next_date参数指示何时此工作将被执行。<br />
　　interval参数指示一个工作重执行的频度。<br />
　　<br />
　　3、Interval()过程用来显式地设置重执行一个工作之间的时间间隔数。这个过程有两个参数：job与interval。<br />
　　<br />
　　PROCEDURE Interval (job　　　IN binary_integer,<br />
　　　　　　　　　　　　Interval IN varchar2)<br />
　　<br />
　　job参数标识一个特定的工作。interval参数指示一个工作重执行的频度。<br />
　　<br />
　　4、ISubmit()过程用来用特定的工作号提交一个工作。这个过程有五个参数：job、what、next_date、interval与no_parse。<br />
　　<br />
　　PROCEDURE ISubmit (job　　　 IN binary_ineger,<br />
　　　　　　　　　　　 What　　　IN varchar2,<br />
　　　　　　　　　　　 next_date IN date,<br />
　　　　　　　　　　　 interval　IN varchar2,<br />
　　　　　　　　　　　 no_parse　IN booean:=FALSE)<br />
　　<br />
　　这个过程与Submit()过程的唯一区别在于此job参数作为IN型参数传递且包括一个由开发者提供的工作号。如果提供的工作号已被使用，将产生一个错误。<br />
　　<br />
　　5、Next_Date()过程用来显式地设定一个工作的执行时间。这个过程接收两个参数：job与next_date。<br />
　　<br />
　　PROCEDURE Next_Date(job　　　　 IN binary_ineger,<br />
　　　　　　　　　　　　next_date　 IN date)<br />
　　job标识一个已存在的工作。next_date参数指示了此工作应被执行的日期与时间。<br />
　　<br />
　　6、Remove()过程来删除一个已计划运行的工作。这个过程接收一个参数：<br />
　　<br />
　　PROCEDURE Remove(job IN　binary_ineger);<br />
　　<br />
　　job参数唯一地标识一个工作。这个参数的值是由为此工作调用Submit()过程返回的job参数的值。已正在运行的工作不能由调用过程序删除。<br />
　　<br />
　　7、Run()过程用来立即执行一个指定的工作。这个过程只接收一个参数：<br />
　　<br />
　　PROCEDURE Run(job IN binary_ineger) <br />
　　<br />
　　job参数标识将被立即执行的工作。<br />
　　<br />
　　8、使用Submit()过程，工作被正常地计划好。<br />
　　这个过程有五个参数：job、what、next_date、interval与no_parse。<br />
　　<br />
　　PROCEDURE Submit ( job　　　 OUT binary_ineger,<br />
　　　　　　　　　　　 What　　　IN　varchar2,<br />
　　　　　　　　　　　 next_date IN　date,<br />
　　　　　　　　　　　 interval　IN　varchar2,<br />
　　　　　　　　　　　 no_parse　IN　booean:=FALSE)<br />
　　<br />
　　job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。<br />
　　what参数是将被执行的PL/SQL代码块。<br />
　　next_date参数指识何时将运行这个工作。<br />
　　interval参数何时这个工作将被重执行。<br />
　　no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE指示此PL/SQL代码在它第一次执行时应进行语法分析，而FALSE指示本PL/SQL代码应立即进行语法分析。<br />
　　<br />
　　9、User_Export()过程返回一个命令，此命令用来安排一个存在的工作以便此工作能重新提交。<br />
　　此程序有两个参数：job与my_call。<br />
　　<br />
　　PROCEDURE User_Export(job　　　　IN binary_ineger,<br />
　　　　　　　　　　　　　my_call　　IN OUT varchar2)<br />
　　<br />
　　job参数标识一个安排了的工作。my_call参数包含在它的当前状态重新提交此工作所需要的正文。<br />
　　<br />
　　10、What()过程应许在工作执行时重新设置此正在运行的命令。这个过程接收两个参数：job与what。<br />
　　<br />
　　PROCEDURE What (job　IN binary_ineger,<br />
　　　　　　　　　　What IN OUT varchar2)<br />
　　job参数标识一个存在的工作。what参数指示将被执行的新的PL/SQL代码。<br />
　　<br />
　　三、查看相关job信息<br />
　　1、相关视图<br />
　　dba_jobs<br />
　　all_jobs<br />
　　user_jobs<br />
　　dba_jobs_running 包含正在运行job相关信息<br />
　　<br />
　　2、查看相关信息<br />
　　SQL&gt;SELECT JOB, NEXT_DATE, NEXT_SEC, FAILURES, BROKEN FROM DBA_JOBS;<br />
　　<br />
　　<br />
　　正在运行的JOB相关信息<br />
　　SQL&gt;SELECT SID, r.JOB, LOG_USER, r.THIS_DATE, r.THIS_SEC　FROM DBA_JOBS_RUNNING r, DBA_JOBS j<br />
　　WHERE r.JOB = j.JOB;<br />
<br />
　　JOB QUEUE LOCK相关信息<br />
　　SQL&gt;SELECT SID, TYPE, ID1, ID2&nbsp; FROM V$LOCK&nbsp; WHERE TYPE = 'JQ';<br />
　　<br />
　　<br />
　　四、简单例子<br />
　　　　<br />
　　创建JOB<br />
　　SQL&gt; variable job1 number;<br />
　　SQL&gt; <br />
　　SQL&gt; begin<br />
　　　2　dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440');　　--每天1440分钟，即一分钟运行test过程一次<br />
　　　3　end;<br />
　　　4　/<br />
　　<br />
　　PL/SQL 过程已成功完成。<br />
　　<br />
　　运行JOB<br />
　　SQL&gt; begin<br />
　　　2　dbms_job.run(:job1);<br />
　　　3　end;<br />
　　　4　/<br />
　　<br />
　　PL/SQL 过程已成功完成。<br />
　　<br />
　　SQL&gt; select to_char(a,'yyyy/mm/dd hh24:mi:ss') 时间 from TEST;<br />
　　<br />
　　时间<br />
　　-------------------<br />
　　2001/01/07 23:51:21<br />
　　2001/01/07 23:52:22<br />
　　2001/01/07 23:53:24<br />
　　<br />
　　删除JOB<br />
　　SQL&gt; begin<br />
　　　2　dbms_job.remove(:job1);<br />
　　　3　end;<br />
　　　4　/<br />
　　<br />
　　PL/SQL 过程已成功完成。 </p>
<p><br />
1/24&nbsp;&nbsp;&nbsp; 一小时；(一天24小时)<br />
1/1440&nbsp;&nbsp;&nbsp; 一分；(一天1440分钟）<br />
1/3600&nbsp;&nbsp; 24秒；<br />
1/86400&nbsp; 一秒(一天86400秒）</p>
<br />
&nbsp;1、 每分钟执行 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;Interval =&gt; TRUNC(sysdate,'mi') + 1 / (24*60) <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;2、 每天定时执行 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;例如：每天的凌晨2点执行 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;Interval =&gt; TRUNC(sysdate) + 1 +2 / (24) <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;3、 每周定时执行 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;例如：每周一凌晨2点执行 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;Interval =&gt; TRUNC(next_day(sysdate,'星期一'))+2/24 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;4、 每月定时执行 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;例如：每月1日凌晨2点执行 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;Interval =&gt;TRUNC(LAST_DAY(SYSDATE))+1+2/24 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;5、 每季度定时执行 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;例如每季度的第一天凌晨2点执行 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;Interval =&gt; TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;6、 每半年定时执行 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;例如：每年7月1日和1月1日凌晨2点 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;Interval =&gt; ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;7、 每年定时执行 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;例如：每年1月1日凌晨2点执行 <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;Interval =&gt;ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24 <br />
<img src ="http://www.blogjava.net/envoydada/aggbug/207288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2008-06-12 09:39 <a href="http://www.blogjava.net/envoydada/archive/2008/06/12/207288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 分区表(Partition)</title><link>http://www.blogjava.net/envoydada/archive/2008/06/11/207090.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Wed, 11 Jun 2008 04:43:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2008/06/11/207090.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/207090.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2008/06/11/207090.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/207090.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/207090.html</trackback:ping><description><![CDATA[<p>Oracle提供了分区技术以支持VLDB(Very Large DataBase)。分区表通过对分区列的判断，把分区列不同的记录，放到不同的分区中。分区完全对应用透明。 </p>
<p><br />
Oracle的分区表可以包括多个分区，每个分区都是一个独立的段（SEGMENT），可以存放到不同的表空间中。查询时可以通过查询表来访问各个分区中的数据，也可以通过在查询时直接指定分区的方法来进行查询。 </p>
<p><br />
分区提供以下优点： </p>
<p><br />
由于将数据分散到各个分区中，减少了数据损坏的可能性； </p>
<p><br />
可以对单独的分区进行备份和恢复； </p>
<p><br />
可以将分区映射到不同的物理磁盘上，来分散IO； </p>
<p><br />
提高可管理性、可用性和性能。 </p>
<p><br />
Oracle提供了以下几种分区类型： </p>
<p><br />
范围分区（range）； </p>
<p><br />
哈希分区（hash）； </p>
<p><br />
列表分区（list）； </p>
<p><br />
范围－哈希复合分区（range-hash）； </p>
<p><br />
范围－列表复合分区（range-list）。 </p>
<p>&nbsp;</p>
<p>索引也可以进行分区，分区索引有两种类型：global和local。对于local索引，每一个表分区对应一个索引分区，当表的分区发生变化时，索引的维护由Oracle自动进行。对于global索引，可以选择是否分区，而且索引的分区可以不与表分区相对应。当对分区进行维护操作时，通常会导致全局索引的INVALDED，必须在执行完操作后REBUILD。Oracle9i提供了UPDATE GLOBAL INDEXES语句，可以使在进行分区维护的同时重建全局索引。 </p>
<p>全局索引可以包含多个分区的值 局部索引比全局索引容易管理,而全局索引比较快<br />
注意:不能为散列分区 或者 子分区创建全局索引</p>
<p>如果表中预期的数据量较大，通常都需要考虑使用分区表，确定使用分区表后，还要确定什么类型的分区（range partition、hash partition、list partition等）、分区区间大小等。分区的创建最好与程序有某种默契，偶曾经创建分区表，按自然月份定义分区的，但程序却在查询时默认的开始时间与结束时间是：当前日期-30至当前日期，比如当天是9.18号，那查询条件被产生为8.18-9.18，结果分区后并不没有大幅提高性能，后来对程序的查询日期做了调整，按自然月查询，系统的负载小了很多。</p>
<p>从Oracle8.0开始支持表分区（MSSQL2005开始支持表分区）。</p>
<p>Oracle9i 分区能够提高许多应用程序的可管理性、性能与可用性。分区可以将表、索引及索引编排表进一步划分，从而可以更精细地对这些数据库对象进行管理和访问。Oracle 提供了种类繁多的分区方案以满足所有的业务需要。另外，由于在 SQL 语句中是完全透明的，所以分区可以用于几乎所有的应用程序。 </p>
<p>分区表允许将数据分成被称为分区甚至子分区的更小的更好管理的块。索引也可以这么分区。每个分区可以被单独管理，可以不依赖于其他分区而单独发挥作用，因此提供了一个更有利于可用性和性能的结构。</p>
<p>分区可以提高可管理性、性能与可用性，从而给各种各样的应用程序带来极大的好处。通常，分区可以使某些查询以及维护操作的性能大大提高。此外，分区还能够在很大程度上简化日常管理任务。分区还使数据库设计人员和管理员能够解决尖端应用程序带来的最难的问题。分区是建立上亿万字节数据系统或需要极高可用性系统的关键工具。</p>
<p>在多CPU配置环境下，如果打算使用并行执行，则分区提供了另一种并行的方法。通过给表或索引的不同分区分配不同的并行执行服务器，就可以并行执行对分区表和分区索引的操作。</p>
<p>表或索引的分区和子分区都共享相同的逻辑属性。例如表的所有分区或子分区共享相同的列和约束定义，一个索引的分区或子分区共享相同的索引选项。然而它们可以具有不同的物理属性如表空间。</p>
<p>尽管不需要将表或索引的每个分区或子分区放在不同的表空间，但这样做更好。将分区存储到不同的表空间能够</p>
<p>l 减少数据在多个分区中冲突的可能性</p>
<p>l 可以单独备份和恢复每个分区</p>
<p>l 控制分区与磁盘驱动器之间的映射对平衡I/O 负载是重要的</p>
<p>l 改善可管理性可用性和性能</p>
<p>分区操作对现存的应用和运行在分区表上的标准DML 语句来说是透明的。但是可以通过在DML 中使用分区扩展表或索引的名字来对应用编程，使其利用分区的优点。</p>
<p>可以使用SQL*Loader、Import 和Export 工具来装载或卸载分区表中的数据。这些工具都是支持分区和子分区的。</p>
<p>分区的方法Oracle9i 提供了如下5种分区方法：</p>
<p>&nbsp;</p>
<p>l 范围分区Range</p>
<p>l 散列分区Hash</p>
<p>l 列表分区List</p>
<p>l 组合范围-散列分区Range-Hash</p>
<p>l 组合范围-列表分区Range-List</p>
<p>可对索引和表分区。全局索引只能按范围分区，但可以将其定义在任何类型的分区或非分区表上。通常全局索引比局部索引需要更多的维护。</p>
<p>一般组建局部索引，以便反映其基础表的结构。它与基础表是等同分区的，即它与基础</p>
<p>表在同样的列上分区，创建同样数量的分区或子分区，设置与基础表相对应的同样的分区边界。对局部索引而言，当维护活动影响分区时，会自动维护索引分区。这保证了索引与基础表之间的等同分区。</p>
<p>关于范围分区Range：</p>
<p>要想将行映射到基于列值范围的分区，就使用范围分区方法。当数据可以被划分成逻辑范围时如年度中的月份，这种类型的分区就有用了。当数据在整个范围中能被均等地划分时性能最好。如果靠范围的分区会由于不均等的划分而导致分区在大小上明显不同时，就需要考虑其他的分区方法。</p>
<p>关于散列分区Hash：</p>
<p>如果数据不那么容易进行范围分区，但为了性能和管理的原因又想分区时，就使用散列分区方法。散列分区提供了一种在指定数量的分区中均等地划分数据的方法。基于分区键的散列值将行映射到分区中。创建和使用散列分区会给你提供了一种很灵活的放置数据的方法，因为你可以通过在I/O 驱动器之间播撒(摘掉)这些均等定量的分区，来影响可用性和性能。</p>
<p>关于列表分区List：</p>
<p>当你需要明确地控制如何将行映射到分区时，就使用列表分区方法。可以在每个分区的描述中为该分区列指定一列离散值，这不同于范围分区，在那里一个范围与一个分区相关，这也不同于散列分区，在那里用户不能控制如何将行映射到分区。列表分区方法是特意为遵从离散值的模块化数据划分而设计的。范围分区或散列分区不那么容易做到这一点。进一步说列表分区可以非常自然地将无序的和不相关的数据集进行分组和组织到一起。</p>
<p>与范围分区和散列分区所不同，列表分区不支持多列分区。如果要将表按列分区，那么分区键就只能由表的一个单独的列组成，然而可以用范围分区或散列分区方法进行分区的所有的列,都可以用列表分区方法进行分区。</p>
<p>关于组合范围-散列分区：</p>
<p>范围和散列技术的组合，首先对表进行范围分区，然后用散列技术对每个范围分区再次分区。给定的范围分区的所有子分区加在一起表示数据的逻辑子集。 </p>
<p>关于组合范围-列表分区：</p>
<p>范围和列表技术的组合，首先对表进行范围分区，然后用列表技术对每个范围分区再次分区。与组合范围-散列分区不同的是，每个子分区的所有内容表示数据的逻辑子集，由适当的范围和列表分区设置来描述。</p>
<p>创建或更改分区表时可以指定行移动子句，即ENABLE ROW MOVEMENT 或者DISABLE ROW MOVEMENT ，当其键被更改时，该子句启用或停用将行迁移到一个新的分区。默认值为DISABLE ROW MOVEMENT。本产品(项目)使用ENABLE ROW MOVEMENT子句。</p>
<p><br />
分区技术能够提高数据库的可管理性：</p>
<p>使用分区技术，维护操作可集中于表的特定部分。例如，数据库管理员可以只对表的一部分做备份，而不必对整个表做备份。对整个数据库对象的维护操作，可以在每个分区的基础上进行，从而将维护工作分解成更容易管理的小块。 </p>
<p>分区技术提高可管理性的一个典型用法是支持数据仓库中的&#8216;滚动视窗&#8217;加载进程。假设数据库管理员每周向表中加载新数据。该表可以是范围分区，以便每个分区包含一周的数据。加载进程只是简单地添加新的分区。添加一个新分区的操作比修改整个表效率高很多，因为数据库管理员不需要修改任何其他分区。从分区后的表中去除数据也是一样。你只要用一个很简便快捷的数据字典操作删掉一个分区，而不必发出使用大量资源和调动所有要删除的数据的 &#8216;DELETE&#8217; 命令。 </p>
<p>分区技术能够提高数据库的性能:</p>
<p>由于减少了所检查或操作的数据数量，同时允许并行执行，Oracle9i 的分区功能提供了性能上的优势。这些性能包括： </p>
<p>l 分区修整：分区修整是用分区技术提高性能的最简单最有价值的手段。分区修整常常能够将查询性能提高几个数量级。例如，假定应用程序中有包含定单历史记录的定单表，该表用周进行了分区。查询一周的定单只需访问该定单表的一个分区。如果该定单表包含两年的历史记录，这个查询只需要访问一个而不是一百零四个分区。该查询的执行速度因为分区修整而有可能快一百倍。分区修整能与所有其他 Oracle 性能特性协作。Oracle 公司将把分区修整技术与索引技术、连结技术和并行访问方法一起联合使用。 </p>
<p>l 分区智能联接：分区功能可以通过称为分区智能联接的技术提高多表联接的性能。当两个表要联接在一起，而且每个表都用联接关键字来分区时，就可以使用分区智能联接。分区智能联接将大型联接分解成较小的发生在各个分区间的联接，从而用较少的时间完成全部联接。这就给串行和并行的执行都能带来显著的性能改善。 </p>
<p>l 更新和删除的并行执行：分区功能能够无限地并行执行 UPDATE、DELETE 与 MERGE 语句。当访问分区或未分区的数据库对象时Oracle 将并行处理 SELECT 与 INSERT 语句。当不使用位图索引时，也可以对分区或未分区的数据库对象并行处理 UPDATE、DELETE 和 MERGE 语句。为了对有位图索引的对象并行处理那些操作，目标表必须先分区。这些 SQL 语句的并行执行可以大大提高性能，特别是提高 UPDATE 与 DELETE 或 MERGE 操作涉及大量数据时的性能。 </p>
<p>分区技术提高可用性： </p>
<p>分区的数据库对象具有分区独立性。该分区独立性特点可能是高可用性战略的一个重要部分，例如，如果分区表的分区不能用，但该表的所有其他分区仍然保持在线并可用。那么这个应用程序可以继续针对该分区表执行查询和事务处理，只要不是访问那个不可用的分区，数据库操作仍然能够成功运行。 数据库管理员可以指定各分区存放在不同的表空间里，从而让管理员独立于其它表分区针对每个分区进行备份与恢复操作。 还有，分区功能可以减少计划停机时间。性能由于分区功能得到了改善，使数据库管理员在相对较小的批处理窗口完成大型数据库对象的维护工作。</p>
<p>Oracle最大允许存在多少个分区呢?</p>
<p>我们可以从Oracle的<a href="http://tahiti.oracle.com/"><font color="#0082ff">Concepts手册</font></a>上找到这个信息，对于Oracle9iR2:</p>
<blockquote dir="ltr" style="margin-right: 0px">
<p>Tables can be partitioned into up to <strong>64,000</strong> separate partitions.</p>
</blockquote>
<p>对于Oracle10gR2，Oracle增强了分区特性：</p>
<blockquote dir="ltr" style="margin-right: 0px">
<p>Tables can be partitioned into up to <strong>1024K-1</strong> separate partitions. </p>
</blockquote>
<div>
<div>
<p>关于何时应该进行分区,Oracle有如下建议:</p>
<p><font face="Courier New">■ Tables greater than 2GB should always be considered for partitioning. <br />
■ Tables containing historical data, in which new data is added into the newest partition. A typical example is a historical table where only the current month's data is updatable and the other 11 months are read only.</font></p>
</div>
</div>
<img src ="http://www.blogjava.net/envoydada/aggbug/207090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2008-06-11 12:43 <a href="http://www.blogjava.net/envoydada/archive/2008/06/11/207090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库性能 常用SQL</title><link>http://www.blogjava.net/envoydada/archive/2007/12/27/170920.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Thu, 27 Dec 2007 08:34:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2007/12/27/170920.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/170920.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2007/12/27/170920.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/170920.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/170920.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1、收集数据库性能报表Oracle 在10g以前的使用的是 Statspack做性能故障诊断的。Oracle Database 10g 提供了一个显著改进的工具：自动工作负载信息库 (AWR)。AWR 和数据库一起安装。数据库装好后，，快照由一个称为 MMON 的新的后台进程及其从进程自动地每小时采集一次（snap）要查看当前的设置，您可以使用下面的语句： &nbsp;select...&nbsp;&nbsp;<a href='http://www.blogjava.net/envoydada/archive/2007/12/27/170920.html'>阅读全文</a><img src ="http://www.blogjava.net/envoydada/aggbug/170920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2007-12-27 16:34 <a href="http://www.blogjava.net/envoydada/archive/2007/12/27/170920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL SERVER事务处理</title><link>http://www.blogjava.net/envoydada/archive/2006/08/04/61650.html</link><dc:creator>Derek.Guo</dc:creator><author>Derek.Guo</author><pubDate>Fri, 04 Aug 2006 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/envoydada/archive/2006/08/04/61650.html</guid><wfw:comment>http://www.blogjava.net/envoydada/comments/61650.html</wfw:comment><comments>http://www.blogjava.net/envoydada/archive/2006/08/04/61650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/envoydada/comments/commentRss/61650.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/envoydada/services/trackbacks/61650.html</trackback:ping><description><![CDATA[		<p align="left">
				<b>
						<span>事务定义：</span>
				</b>
		</p>
		<p align="left">
				<span>事务是单个的工作单元。如果某一事务成功，则在该事务中进行的所有数据更改均会</span>
		</p>
		<p align="left">
				<span>提交，成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚，则所有</span>
		</p>
		<p align="left">
				<span>数据更改均被清除。</span>
		</p>
		<p align="left">
				<b>
						<span>事务三种运行模式：</span>
				</b>
				<span>
						<br />
				</span>
				<span>自动提交事务</span>
				<span>
						<br />
				</span>
				<span>每条单独的语句都是一个事务。</span>
				<span>
						<br />
				</span>
				<span>显式事务</span>
				<span>
						<br />
				</span>
				<span>每个事务均以</span>
				<span> BEGIN TRANSACTION </span>
				<span>语句显式开始，</span>
				<span>
						<br />
				</span>
				<span>以</span>
				<span> COMMIT </span>
				<span>或</span>
				<span> ROLLBACK </span>
				<span>语句显式结束。</span>
				<span>
						<br />
				</span>
				<span>隐性事务</span>
				<span>
						<br />
				</span>
				<span>在前一个事务完成时新事务隐式启动，但每个事务仍以</span>
				<span> COMMIT </span>
				<span>或</span>
				<span> ROLLBACK </span>
				<span>语句</span>
		</p>
		<p align="left">
				<span>显式完成。</span>
		</p>
		<p align="left">
				<b>
						<span>事务操作的语法：</span>
				</b>
		</p>
		<p align="left">
				<span>BEGIN TRANSACTION<br />BEGIN DISTRIBUTED TRANSACTION<br />COMMIT TRANSACTION<br />COMMIT WORK<br />ROLLBACK WORK<br />SAVE TRANSACTION<br />BEGIN TRANSACTION</span>
				<span>
				</span>
		</p>
		<p align="left">
				<b>
						<span>BEGIN TRANSACTION</span>
				</b>
				<span>
						<br />
				</span>
				<span>标记一个显式本地事务的起始点。</span>
		</p>
		<p align="left">
				<span>BEGIN TRANSACTION</span>
				<span>将</span>
				<span> @@TRANCOUNT </span>
				<span>加</span>
				<span> 1</span>
				<span>。</span>
		</p>
		<p align="left">
				<span>BEGIN TRANSACTION </span>
				<span>代表一点，由连接引用的数据在该点是逻辑和物理上都一致的。如果遇上错误，在</span>
				<span> BEGIN TRANSACTION </span>
				<span>之后的所有数据改动都能进行回滚，以将数据返回到已知的一致状态</span>
				<span>
				</span>
				<span>。每个事务继续执行直到它无误地完成并且用</span>
				<span> COMMIT TRANSACTION </span>
				<span>对数据库作永久的改动，或者遇上错误并且用</span>
				<span> ROLLBACK TRANSACTION </span>
				<span>语句擦除所有改动</span>
		</p>
		<p align="left">
				<span>语法</span>
				<span>
						<br />BEGIN TRAN [ SACTION ] [ transaction_name | @tran_name_variable [ WITH MARK [ 'description' ] ] ]</span>
		</p>
		<p align="left">
				<span>例子：</span>
				<span>
						<br />BEGIN TRAN T1<br />UPDATE table1 ...<br />--nest transaction M2<br />BEGIN TRAN M2 WITH MARK<br />UPDATE table2 ...<br />SELECT * from table1<br />COMMIT TRAN M2<br />UPDATE table3 ...<br />COMMIT TRAN T1</span>
		</p>
		<p align="left">
				<b>
						<span>BEGIN DISTRIBUTED TRANSACTION</span>
				</b>
				<span>
						<br />
				</span>
				<span>指定一个由</span>
				<span> Microsoft </span>
				<span>分布式事务处理协调器</span>
				<span> (MS DTC) </span>
				<span>管理的</span>
				<span> Transact-SQL </span>
				<span>分布式事务的起始。</span>
		</p>
		<p align="left">
				<span>语法</span>
				<span>
						<br />BEGIN DISTRIBUTED TRAN [ SACTION ]<br />[ transaction_name | @tran_name_variable ]</span>
		</p>
		<p align="left">
				<span>参数</span>
				<span>
						<br />transaction_name<br /></span>
				<span>是用户定义的事务名，用于跟踪</span>
				<span> MS DTC </span>
				<span>实用工具中的分布式事务。</span>
				<span> transaction_name </span>
				<span>必须符合标识符规则，但是仅使用头</span>
				<span> 32 </span>
				<span>个字符</span>
		</p>
		<p align="left">
				<span>@tran_name_variable<br /></span>
				<span>是用户定义的一个变量名，它含有一个事务名，该事务名用于跟踪</span>
				<span> MS DTC </span>
				<span>实用工具中的分布式事务。必须用</span>
				<span> char</span>
				<span>、</span>
				<span>varchar</span>
				<span>、</span>
				<span>nchar </span>
				<span>或</span>
				<span> nvarchar </span>
				<span>数据类型声明该变量。</span>
		</p>
		<p align="left">
				<span>注释</span>
				<span>
						<br />
				</span>
				<span>执行</span>
				<span>BEGIN DISTRIBUTED TRANSACTION </span>
				<span>语句的服务器是事务创建人，并且控制事务的完成</span>
		</p>
		<p align="left">
				<span>当连接发出后续</span>
				<span> COMMIT TRANSACTION </span>
				<span>或</span>
				<span> ROLLBACK TRANSACTION </span>
				<span>语句时，</span>
				<span>
						<br />
				</span>
				<span>主控服务器请求</span>
				<span> MS DTC </span>
				<span>在所涉及的服务器间管理分布式事务的完成。</span>
				<span>
						<br />
				</span>
				<span>有两个方法可将远程</span>
				<span> SQL </span>
				<span>服务器登记在一个分布式事务中：</span>
				<span>
				</span>
		</p>
		<p align="left">
				<span>分布式事务中已登记的连接执行一个远程存储过程调用，该调用引用一个远程服务器。</span>
				<span>
						<br />
				</span>
				<span>分布式事务中已登记的连接执行一个分布式查询，该查询引用一个远程服务器。</span>
				<span>
				</span>
		</p>
		<p align="left">
				<span>示例</span>
				<span>
						<br />
				</span>
				<span>本例在本地和远程数据库上更新作者的姓。本地和远程数据库将同时提交或同时回滚本事务。</span>
				<span>
				</span>
		</p>
		<p align="left">
				<span>说明</span>
				<span>
						<br />
				</span>
				<span>当前的</span>
				<span>SQL Server </span>
				<span>上必须安装</span>
				<span> MS DTC. </span>
		</p>
		<p align="left">
				<span>USE pubs<br />GO<br />BEGIN DISTRIBUTED TRANSACTION<br />UPDATE authors<br />SET au_lname = 'McDonald' WHERE au_id = '409-56-7008'<br />EXECUTE </span>
				<b>
						<span>link_Server_T</span>
				</b>
				<span>.pubs.dbo.changeauth_lname '409-56-7008','McDonald'<br />COMMIT TRAN<br />GO</span>
				<b>
						<span>Note:</span>
				</b>
				<span>
						<br />
				</span>
				<span>如果需要连接远程</span>
				<span>DB,</span>
				<span>如果是</span>
				<span>linkServer </span>
				<span>方式连接的话，一定要修该</span>
				<span>linkServer</span>
				<span>的</span>
				<span> RPC </span>
				<span>选项置为</span>
				<span> True</span>
				<span>。</span>
		</p>
		<p align="left">
				<b>
						<span>SET XACT_ABORT</span>
				</b>
				<span>
						<br />
				</span>
				<span>指定当</span>
				<span> Transact-SQL </span>
				<span>语句产生运行时错误时，</span>
				<span>Microsoft? SQL Server? </span>
				<span>是否自动回滚当前事务。</span>
		</p>
		<p align="left">
				<span>( </span>
				<span>可以比较简单的理解，如果中间有任何一句</span>
				<span>SQL </span>
				<span>出错，所有</span>
				<span>SQL</span>
				<span>全部回滚</span>
				<span>.</span>
				<span>特别适用于</span>
				<span> Procedure </span>
				<span>中间调用</span>
				<span>Procedure </span>
				<span>，如果第一个</span>
				<span>Procedure Ok</span>
				<span>，被调用的</span>
				<span>Procedure </span>
				<span>中间有错误，如果</span>
				<span>SET XACT_ABORT=false</span>
				<span>，则出错的部分回滚，其他部分提交，当然外部</span>
				<span>Procedure </span>
				<span>也提交。）</span>
				<span>.</span>
		</p>
		<p align="left">
				<b>
						<span>---</span>
				</b>
				<b>
						<span>在分布式</span>
				</b>
				<b>
						<span>Trans</span>
				</b>
				<b>
						<span>中一定要注意设置下面参数</span>
				</b>
				<b>
						<span>(XACT_ABORT)</span>
				</b>
		</p>
		<p align="left">
				<b>
						<span>语法</span>
				</b>
				<span>SET XACT_ABORT { ON | OFF }</span>
		</p>
		<p align="left">
				<b>
						<span>注释</span>
				</b>
				<span>
				</span>
				<span>当</span>
				<span> SET XACT_ABORT </span>
				<span>为</span>
				<span> ON </span>
				<span>时，如果</span>
				<span> Transact-SQL </span>
				<span>语句产生运行时错误，整个事务将终止并回滚。为</span>
				<span> OFF </span>
				<span>时，只回滚产生错误的</span>
				<span>Transact-SQL </span>
				<span>语句，而事务将继续进行处理。编译错误（如语法错误）不受</span>
				<span> SET XACT_ABORT </span>
				<span>的影响。</span>
		</p>
		<p align="left">
				<span>对于大多数</span>
				<span> OLE DB </span>
				<span>提供程序（包括</span>
				<span> SQL Server</span>
				<span>），隐性或显式事务中的数据修改语句必须将</span>
				<span> XACT_ABORT </span>
				<span>设置为</span>
				<span> ON</span>
				<span>。</span>
		</p>
		<p align="left">
				<span>SET XACT_ABORT </span>
				<span>的设置是在执行或运行时设置，而不是在分析时设置。</span>
		</p>
		<p align="left">
				<b>
						<span>示例</span>
				</b>
				<span>
				</span>
				<span>下例导致在含有其它</span>
				<span> Transact-SQL </span>
				<span>语句的事务中发生违反外键错误。在第一个语句集中产生错误，但其它语句均成功执行且事务成功</span>
				<span>
						<br />
				</span>
				<span>提交。在第二个语句集中，</span>
				<span>SET XACT_ABORT </span>
				<span>设置为</span>
				<span> ON</span>
				<span>。这导致语句错误使批处理终止，并使事务回滚。</span>
				<span>
				</span>
		</p>
		<p align="left">
				<span>CREATE TABLE t1 (a int PRIMARY KEY)<br />CREATE TABLE t2 (a int REFERENCES t1(a))<br />GO<br />INSERT INTO t1 VALUES (1)<br />INSERT INTO t1 VALUES (3)<br />INSERT INTO t1 VALUES (4)<br />INSERT INTO t1 VALUES (6)<br />GO<br />SET XACT_ABORT OFF<br />GO<br />BEGIN TRAN<br />INSERT INTO t2 VALUES (1)<br />INSERT INTO t2 VALUES (2) /* Foreign key error */<br />INSERT INTO t2 VALUES (3)<br />COMMIT TRAN<br />GO<br /><br />SET XACT_ABORT ON<br />GO<br /><br />BEGIN TRAN<br />INSERT INTO t2 VALUES (4)<br />INSERT INTO t2 VALUES (5) /* Foreign key error */<br />INSERT INTO t2 VALUES (6)<br />COMMIT TRAN<br />GO</span>
		</p>
		<p align="left">
				<b>
						<span>SAVE TRANSACTION</span>
				</b>
				<span>
						<br />
				</span>
				<span>在事务内设置保存点。</span>
		</p>
		<p align="left">
				<b>
						<span>语法</span>
				</b>
				<span> SAVE TRAN [ SACTION ] { savepoint_name | @savepoint_variable }<br /></span>
				<b>
						<span>参数</span>
				</b>
				<span> savepoint_name<br /></span>
				<span>是指派给保存点的名称。保存点名称必须符合标识符规则，但只使用前</span>
				<span> 32 </span>
				<span>个字符。</span>
				<span>
						<br />@savepoint_variable<br /></span>
				<span>是用户定义的、含有有效保存点名称的变量的名称。</span>
				<span>
						<br />
				</span>
				<span>必须用</span>
				<span> char</span>
				<span>、</span>
				<span>varchar</span>
				<span>、</span>
				<span>nchar </span>
				<span>或</span>
				<span> nvarchar </span>
				<span>数据类型声明该变量。</span>
				<span>
				</span>
				<b>
						<span>注释</span>
				</b>
				<span>
						<br />
				</span>
				<span>用户可以在事务内设置保存点或标记。保存点定义如果有条件地取消事务的一部分，事</span>
				<span>
				</span>
				<span>务可以返回的位置。如果将事务回滚到保存点，则必须（如果需要，使用更多的</span>
				<span> Transact-SQL </span>
				<span>语句和</span>
				<span> COMMIT TRANSACTION </span>
				<span>语句）继续完成事务，或者必须（通过将事务回滚到其起始点）完全取消事务。若要取消整个事务，请使用</span>
				<span> ROLLBACK TRANSACTION transaction_name </span>
				<span>格式。这将撤消事务的所</span>
				<span>
				</span>
				<span>有语句和过程。</span>
		</p>
		<p align="left">
				<b>
						<span>Note</span>
				</b>
				<b>
						<span>：</span>
				</b>
				<b>
						<span>1</span>
				</b>
				<b>
						<span>：</span>
				</b>
				<span>
				</span>
				<span>在由</span>
				<span> BEGIN DISTRIBUTED TRANSACTION </span>
				<span>显式启动或从本地事务升级而来的分布式事务中，不支持</span>
				<span> SAVE TRANSACTION</span>
				<span>。</span>
		</p>
		<p align="left">
				<b>
						<span>2</span>
				</b>
				<b>
						<span>：</span>
				</b>
				<span>当事务开始时，将一直控制事务中所使用的资源直到事务完成（也就是锁定）。当将事务的一部分回滚到保存点时，将继续控制资源直到事务完成（或者回滚全部事务）。</span>
		</p>
		<p align="left">
				<b>
						<span>例子：</span>
				</b>
				<span>begin transaction<br />save transaction A<br />insert into demo values('BB','B term')<br />rollback TRANSACTION A<br />create table demo2(name varchar(10),age int)<br />insert into demo2(name,age) values('lis',1)<br />commit transaction</span>
		</p>
		<p align="left">
				<b>
						<span>ROLLBACK TRANSACTION</span>
				</b>
		</p>
		<p align="left">
				<span>将显式事务或隐性事务回滚到事务的起点或事务内的某个保存点。</span>
				<span>
						<br />
				</span>
				<b>
						<span>语法</span>
				</b>
				<span>
						<br />ROLLBACK [ TRAN [ SACTION ]<br />[ transaction_name | @tran_name_variable | savepoint_name | @savepoint_variable ] ]</span>
		</p>
		<p align="left">
				<b>
						<span>参数</span>
				</b>
				<span>
						<br />transaction_name<br /></span>
				<span>是给</span>
				<span> BEGIN TRANSACTION </span>
				<span>上的事务指派的名称。</span>
				<span>transaction_name </span>
				<span>必须符合标识符规则，但只使用事务名称的前</span>
				<span> 32 </span>
				<span>个字符。嵌套</span>
				<span>
						<br />
				</span>
				<span>事务时，</span>
				<span>transaction_name </span>
				<span>必须是来自最远的</span>
				<span> BEGIN TRANSACTION </span>
				<span>语句的名称。</span>
				<span>
						<br />@tran_name_variable<br /></span>
				<span>是用户定义的、含有有效事务名称的变量的名称。必须用</span>
				<span> char</span>
				<span>、</span>
				<span>varchar</span>
				<span>、</span>
				<span>nchar </span>
				<span>或</span>
				<span> nvarchar </span>
				<span>数据类型声明该变量。</span>
				<span>
						<br />savepoint_name<br /></span>
				<span>是来自</span>
				<span> SAVE TRANSACTION </span>
				<span>语句的</span>
				<span> savepoint_name</span>
				<span>。</span>
				<span>savepoint_name </span>
				<span>必须符合标识符规则。当条件回滚只影响事务的一部分时使</span>
				<span>
				</span>
				<span>用</span>
				<span> savepoint_name</span>
				<span>。</span>
				<span>
						<br />@savepoint_variable<br /></span>
				<span>是用户定义的、含有有效保存点名称的变量的名称。必须用</span>
				<span> char</span>
				<span>、</span>
				<span>varchar</span>
				<span>、</span>
				<span>nchar </span>
				<span>或</span>
				<span> nvarchar </span>
				<span>数据类型声明该变量。</span>
		</p>
		<p align="left">
				<b>
						<span>注释</span>
				</b>
				<span> ROLLBACK TRANSACTION </span>
				<span>清除自事务的起点或到某个保存点所做的所有数据修改。</span>
				<span>ROLLBACK </span>
				<span>还释放由事务控制的资源。</span>
				<span>
						<br />
				</span>
				<span>不带</span>
				<span> savepoint_name </span>
				<span>和</span>
				<span> transaction_name </span>
				<span>的</span>
				<span> ROLLBACK TRANSACTION </span>
				<span>回滚到事务的起点。嵌套事务时，该语句将所有内层事务回滚到</span>
				<span>
				</span>
				<span>最远的</span>
				<span> BEGIN TRANSACTION </span>
				<span>语句。在这两种情况下，</span>
				<span>ROLLBACK TRANSACTION </span>
				<span>均将</span>
				<span> @@TRANCOUNT </span>
				<span>系统函数减为</span>
				<span> 0</span>
				<span>。</span>
				<span>ROLLBACK <br />TRANSACTION savepoint_name </span>
				<span>不减少</span>
				<span> @@TRANCOUNT</span>
				<span>。</span>
		</p>
		<p align="left">
				<span>Note: <br />ROLLBACK TRANSACTION </span>
				<span>语句若指定</span>
				<span> savepoint_name </span>
				<span>则不释放任何锁。</span>
				<span>
						<br />
				</span>
				<span>在由</span>
				<span> BEGIN DISTRIBUTED TRANSACTION </span>
				<span>显式启动或从本地事务升级而来的分布式事务中，</span>
				<span>ROLLBACK TRANSACTION </span>
				<span>不能</span>
				<span>
						<br />
				</span>
				<span>引用</span>
				<span>savepoint_name</span>
				<span>。</span>
				<b>
						<span>在执行</span>
				</b>
				<b>
						<span> COMMIT TRANSACTION </span>
				</b>
				<b>
						<span>语句后不能回滚事务</span>
				</b>
				<span>。</span>
				<span>
						<br />
						<br />
				</span>
				<span>在事务内允许有重复的保存点名称，但</span>
				<span> ROLLBACK TRANSACTION </span>
				<span>若使用重复的保存点名称，则只回滚到最近的使用该保存点名称的</span>
				<span>SAVE TRANSACTION</span>
				<span>。</span>
		</p>
		<p align="left">
				<span>在存储过程中，不带</span>
				<span> savepoint_name </span>
				<span>和</span>
				<span> transaction_name </span>
				<span>的</span>
				<span> ROLLBACK TRANSACTION </span>
				<span>语句将所有语句回滚到最远的</span>
				<span> BEGINTRANSACTION</span>
				<span>。在存储过程中，</span>
				<span>ROLLBACK TRANSACTION </span>
				<span>语句使</span>
				<span> @@TRANCOUNT </span>
				<span>在触发器完成时的值不同于调用该存储过程时的</span>
				<span>@@TRANCOUNT </span>
				<span>值，并且生成一个信息。该信息不影响后面的处理。</span>
		</p>
		<p align="left">
				<span>如果在触发器中发出</span>
				<span> ROLLBACK TRANSACTION</span>
				<span>：将回滚对当前事务中的那一点所做的所有数据修改，包括触发器所做的修改。</span>
				<span>
						<br />
				</span>
				<span>触发器继续执行</span>
				<span> ROLLBACK </span>
				<span>语句之后的所有其余语句。如果这些语句中的任意语句修改数据，则不回滚这些修改。执行其余的语句不会激发嵌套触发器。在批处理中，不执行所有位于激发触发器的语句之后的语句。每次进入触发器，</span>
				<span>@@TRANCOUNT </span>
				<span>就增加</span>
				<span> 1</span>
				<span>，即使在自动提交模式下也是如此。（系统将触发器视作隐性嵌套事务。）</span>
				<span>
						<br />
						<br />
				</span>
				<span>在存储过程中，</span>
				<span>ROLLBACK TRANSACTION </span>
				<span>语句不影响调用该过程的批处理中的后续语句；</span>
				<span>
						<br />
				</span>
				<span>将执行批处理中的后续语句。在触发器中，</span>
				<span>ROLLBACK TRANSACTION </span>
				<span>语句终止含有激发触发器的语句的批处理；</span>
				<span>
						<br />
				</span>
				<span>不执行批处理中的后续语句。</span>
		</p>
		<p align="left">
				<span>ROLLBACK TRANSACTION 语句不生成显示给用户的信息。如果在存储过程或触发器中需要警告，请使用 RAISERROR 或 PRINT 语句。RAISERROR 是用于指出错误的首选语句。</span>
		</p>
		<p align="left">
				<span>ROLLBACK 对游标的影响由下面三个规则定义： <br />当 CURSOR_CLOSE_ON_COMMIT 设置为 ON 时，ROLLBACK 关闭但不释放所有打开的游标。 <br />当 CURSOR_CLOSE_ON_COMMIT 设置为 OFF 时，ROLLBACK 不影响任何打开的同步 STATIC 或 INSENSITIVE 游标不影响已完全填充的异步 STATIC 游标。将关闭但不释放任何其它类型的打开的游标。 <br />对于导致终止批处理并生成内部回滚的错误，将释放在含有该错误语句的批处理内声明的所有游标。<br />不论游标的类型或 CURSOR_CLOSE_ON_COMMIT 的设置，所有游标均将被释放，其中包括在该错误批处理所调用的存储过程内声明的游标。在该错误批处理之前的批处理内声明的游标以规则 1 和 2 为准。死锁错误就属于这类错误。在触发器中发出的 ROLLBACK 语句也 自动生成这类错误。 </span>
		</p>
		<p align="left">
				<b>
						<span>权限</span>
				</b>
				<span>
						<br />ROLLBACK TRANSACTION 权限默认授予任何有效用户。<br /></span>
				<b>
						<span>例子：</span>
				</b>
		</p>
		<p align="left">
				<span>begin transaction<br />save transaction A<br />insert into demo values('BB','B term')<br />rollback TRANSACTION A</span>
		</p>
		<p align="left">
				<span>-- select * into demo2 from demo1</span>
		</p>
		<p align="left">
				<span>create table demo2(name varchar(10),age int)<br />insert into demo2(name,age) values('lis',1)<br />rollback transaction</span>
		</p>
		<p align="left">
				<b>
						<span>COMMIT TRANSACTION</span>
				</b>
				<span>
						<br />
				</span>
				<span>标志一个成功的隐性事务或用户定义事务的结束。如果</span>
				<span> @@TRANCOUNT </span>
				<span>为</span>
				<span> 1</span>
				<span>，</span>
				<span>COMMIT </span>
		</p>
		<p align="left">
				<span>TRANSACTION </span>
				<span>使得自从事务开始以来所执行的</span>
				<span>
				</span>
				<span>所有数据修改成为数据库的永久部分，释放连接</span>
		</p>
		<p align="left">
				<span>占用的资源，并将</span>
				<span> @@TRANCOUNT </span>
				<span>减少到</span>
				<span> 0</span>
				<span>。如果</span>
				<span>@@TRANCOUNT </span>
				<span>大于</span>
				<span> 1</span>
				<span>，则</span>
				<span>COMMIT </span>
		</p>
		<p align="left">
				<span>TRANSACTION </span>
				<span>使</span>
				<span> @@TRANCOUNT </span>
				<span>按</span>
				<span> 1 </span>
				<span>递减。</span>
		</p>
		<p align="left">
				<span>只有当事务所引用的所有数据的逻辑都正确时，发出</span>
				<span> COMMIT TRANSACTION </span>
				<span>命令。</span>
				<span>
						<br />
				</span>
				<b>
						<span>COMMIT WORK</span>
				</b>
				<span>
						<br />
				</span>
				<span>标志事务的结束。</span>
				<span>
						<br />
				</span>
				<b>
						<span>语法</span>
				</b>
				<span>
						<br />COMMIT [ WORK ]</span>
		</p>
		<p align="left">
				<b>
						<span>注释</span>
				</b>
				<span>
						<br />
				</span>
				<span>此语句的功能与</span>
				<span> COMMIT TRANSACTION </span>
				<span>相同，但</span>
				<span> COMMIT TRANSACTION </span>
				<span>接受用户定义的事务</span>
		</p>
		<p align="left">
				<span>名称。这个指定或没有指定可选关键字</span>
				<span>WORK </span>
				<span>的</span>
				<span> COMMIT </span>
				<span>语法与</span>
				<span> SQL-92 </span>
				<span>兼容</span>
		</p>
		<p align="left">
				<b>
						<span>例子</span>
				</b>
				<span>：</span>
				<span>
						<br />begin transaction a<br />insert into demo values('BB','B term')<br />commit TRANSACTION A</span>
		</p>
		<p align="left">
				<b>
						<span>隐性事务</span>
				</b>
				<span>
						<br />
				</span>
				<span>当连接以隐性事务模式进行操作时，</span>
				<span>SQL Server</span>
				<span>将在提交或回滚当前事务后自动启动新事务。无须描述事务的开始，只需提交或</span>
		</p>
		<p align="left">
				<span>回滚每个事务。隐性事务模式生成连续的事务链。</span>
		</p>
		<p align="left">
				<span>在为连接将隐性事务模式设置为打开之后，当</span>
				<span> SQL Server </span>
				<span>首次执行下列任何语句时，都会自动启动一个事务：</span>
		</p>
		<table cellspacing="0" cellpadding="0" width="362" border="0">
				<tbody>
						<tr>
								<td width="71">
										<p align="left">&#160;</p>
								</td>
								<td width="131">
										<p align="left">
												<span>ALTER TABLE</span>
										</p>
								</td>
								<td width="160">
										<p align="left">
												<span>INSERT</span>
										</p>
								</td>
						</tr>
						<tr>
								<td>
										<p align="left">&#160;</p>
								</td>
								<td width="131">
										<p align="left">
												<span>CREATE</span>
										</p>
								</td>
								<td width="160">
										<p align="left">
												<span>OPEN</span>
										</p>
								</td>
						</tr>
						<tr>
								<td>
										<p align="left">&#160;</p>
								</td>
								<td width="131">
										<p align="left">
												<span>DELETE</span>
										</p>
								</td>
								<td width="160">
										<p align="left">
												<span>REVOKE</span>
										</p>
								</td>
						</tr>
						<tr>
								<td>
										<p align="left">&#160;</p>
								</td>
								<td width="131">
										<p align="left">
												<span>DROP</span>
										</p>
								</td>
								<td width="160">
										<p align="left">
												<span>SELECT</span>
										</p>
								</td>
						</tr>
						<tr>
								<td>
										<p align="left">&#160;</p>
								</td>
								<td width="131">
										<p align="left">
												<span>FETCH</span>
										</p>
								</td>
								<td width="160">
										<p align="left">
												<span>TRUNCATE TABLE</span>
										</p>
								</td>
						</tr>
						<tr>
								<td>
										<p align="left">&#160;</p>
								</td>
								<td width="131">
										<p align="left">
												<span>GRANT</span>
										</p>
								</td>
								<td width="160">
										<p align="left">
												<span>UPDATE</span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p align="left">
				<span>在发出</span>
				<span> COMMIT </span>
				<span>或</span>
				<span> ROLLBACK </span>
				<span>语句之前，该事务将一直保持有效。在第一个事务被提交或回滚之后，下次当连接执行这些语句</span>
		</p>
		<p align="left">
				<span>中的任何语句时，</span>
				<span>SQL Server </span>
				<span>都将自动启动一个新事务。</span>
				<span>SQL Server </span>
				<span>将不断地生成一个隐性事务链，</span>
		</p>
		<p align="left">
				<span>直到隐性事务模式关闭为止</span>
		</p>
		<p align="left">
				<b>
						<span>例子：</span>
				</b>
				<span>
						<br />begin transaction <br />save transaction A</span>
		</p>
		<p align="left">
				<span>insert into demo values('BB','B term')<br />rollback TRANSACTION A</span>
		</p>
		<p align="left">
				<span>create table demo2(name varchar(10),age int)<br />insert into demo2(name,age) values('lis',1)<br />rollback transaction<br />-- </span>
				<span>在</span>
				<span> Create table demo2 </span>
				<span>时</span>
				<span> SQL Server </span>
				<span>已经隐式创建一个</span>
				<span>Trans,</span>
				<span>知道提交或回滚</span>
		</p>
		<p align="left">
				<b>
						<span>嵌套事务处理</span>
				</b>
				<b>
						<span>:</span>
				</b>
		</p>
		<p align="left">
				<span>1</span>
				<span>：</span>
				<span> Trans </span>
				<span>嵌套，将内部的</span>
				<span>trans </span>
				<span>合并到外部并形成一个</span>
				<span>Trans.</span>
		</p>
		<p align="left">
				<span>begin tran t1 </span>
		</p>
		<p align="left">
				<span>----In the first trans .</span>
				<span>
						<br />Insert into demo2(name,age) values('lis',1)</span>
		</p>
		<p align="left">
				<span>---Second Trans</span>
				<span> begin transaction t2 <br />insert into demo values('BB','B term')<br />commit transaction t2</span>
		</p>
		<p align="left">
				<span>----In the first trans .</span>
				<span>
						<br />Insert into demo2(name,age) values('lis',2)<br />rollback transaction t1</span>
		</p>
		<p align="left">
				<b>
						<span>Note:</span>
				</b>
		</p>
		<p align="left">
				<span>在一系列嵌套的事务中用一个事务名给多个事务命名对该事务没有什么影响。系统仅登记第一个（最外部的）事务名。<span>回滚</span></span>
		</p>
		<p align="left">
				<span>到其它任何名字（有效的保存点名除外）都会产生错误</span>
				<span>。</span>
		</p>
		<p align="left">
				<span>事实上，任何在回滚之前执行的语句都没有在错误发生时回滚。这语句仅当外层的事务回滚时才会进行回滚。</span>
		</p>
		<p align="left">
				<span>例：内部事务回滚</span>
				<span>SQL server </span>
				<span>报错。</span>
		</p>
		<p align="left">
				<span>begin tran t1 <br />Insert into demo2(name,age) values('lis',1)<br />---Second Trans </span>
		</p>
		<p align="left">
				<span>--Server: Msg 6401, Level 16, State 1, Line 6<br />---Cannot roll back t2. No transaction or savepoint of that name was found.<br /><span>begin transaction t2 <br />insert into demo values('BB','B term')<br /></span></span>
				<b>
						<span>rollback</span>
				</b>
				<span> transaction t2</span>
				<span>
						<br />
						<br />----In the first trans .<br />Insert into demo2(name,age) values('lis',2)<br />commit transaction t1</span>
		</p>
		<p align="left">
				<span>例：</span>
				<span>
				</span>
				<span>内部事务提交</span>
				<span>SQL server </span>
				<span>不会报错。</span>
				<span>
				</span>
		</p>
		<p align="left">
				<span>begin tran t1 <br />Insert into demo2(name,age) values('lis',1)<br />---Second Trans no error<br /><span>begin transaction t2 <br />insert into demo values('BB','B term')<br /></span></span>
				<b>
						<span>commit </span>
				</b>
				<span>transaction t2</span>
				<span>
						<br />
						<br />----In the first trans .<br />Insert into demo2(name,age) values('lis',2)<br />commit transaction t1</span>
		</p>
		<p align="left">
				<b>
						<span>SQL Server </span>
				</b>
				<b>
						<span>的隔离级别：</span>
				</b>
		</p>
		<p align="left">
				<span>1: </span>
				<span>设置</span>
				<span>TimeOut </span>
				<span>参数</span>
		</p>
		<p align="left">
				<span>Set Lock_TimeOut 5000</span>
		</p>
		<p align="left">
				<span>被锁超时</span>
				<span>5</span>
				<span>秒将自动解锁</span>
		</p>
		<p align="left">
				<span>Set Lock_TimeOut 0</span>
		</p>
		<p align="left">
				<span>产立即解锁，返回</span>
				<span>Error </span>
				<span>默认为</span>
				<span>-1</span>
				<span>，无限等待</span>
		</p>
		<p align="left">
				<span>2</span>
				<span>：</span>
		</p>
		<p align="left">
				<span>(SET TRANSACTION ISOLATION LEVEL<br />{ READ COMMITTED<br />| READ UNCOMMITTED<br />| REPEATABLE READ | SERIALIZABLE</span>
				<span>}</span>
				<span>）</span>
		</p>
		<p align="left">
				<b>
						<span>READ COMMITTED</span>
				</b>
		</p>
		<p align="left">
				<span>指定在读取数据时控制共享锁以避免脏读，但数据可在事务结束前更改，从而产生不可重复读取或</span>
		</p>
		<p align="left">
				<span>幻像数据。该选项是</span>
				<span>SQL Server </span>
				<span>的默认值。</span>
		</p>
		<p align="left">
				<span>避免脏读，并在其他</span>
				<span>session </span>
				<span>在事务中不能对已有数据进行修改。共享锁。</span>
		</p>
		<p align="left">
				<b>
						<span>READ UNCOMMITTED</span>
				</b>
		</p>
		<p align="left">
				<span>执行脏读或</span>
				<span> 0 </span>
				<span>级隔离锁定，这表示不发出共享锁，也不接受排它锁。当设置该选项时，可以对数</span>
		</p>
		<p align="left">
				<span>据执行未提交读或脏读；在事务结束前可以更改数据内的数值，行也可以出现在数据集中或从数据</span>
		</p>
		<p align="left">
				<span>集消失。该选项的作用与在事务内所有语句中的所有表上设置</span>
				<span> NOLOCK </span>
				<span>相同。这是四个隔离级别中</span>
		</p>
		<p align="left">
				<span>限制最小的级别。</span>
		</p>
		<p align="left">
				<b>
						<span>REPEATABLE READ</span>
				</b>
		</p>
		<p align="left">
				<span>锁定查询中使用的所有数据以防止其他用户更新数据，但是其他用户可以将新的幻像行插入数据</span>
		</p>
		<p align="left">
				<span>集，且幻像行包括在当前事务的后续读取中。因为并发低于默认隔离级别，所以应只在必要时才使</span>
		</p>
		<p align="left">
				<span>用该选项。</span>
		</p>
		<p align="left">
				<b>
						<span>SERIALIZABLE</span>
				</b>
		</p>
		<p align="left">
				<span>在数据集上放置一个范围锁，以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这</span>
		</p>
		<p align="left">
				<span>是四个隔离级别中限制最大的级别。因为并发级别较低，所以应只在必要时才使用该选项。该选项</span>
		</p>
		<p align="left">
				<span>的作用与在事务内所有</span>
				<span> SELECT </span>
				<span>语句中的所有表上设置</span>
				<span> HOLDLOCK </span>
				<span>相同。</span>
		</p>
 <img src ="http://www.blogjava.net/envoydada/aggbug/61650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/envoydada/" target="_blank">Derek.Guo</a> 2006-08-04 09:45 <a href="http://www.blogjava.net/envoydada/archive/2006/08/04/61650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>