<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[流行密码]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[Wannar to be popular，Follow me！]]></description>
<link>http://hi.baidu.com/viplotus</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[『安装配置』Oracle 10g高级复制实例（多主体复制）]]></title>
        <link><![CDATA[http://hi.baidu.com/viplotus/blog/item/e2461ad11328e7d9562c84ca.html]]></link>
        <description><![CDATA[
		
		<p>Oracle 10g高级复制实例（多主体复制）</p>
<p><br>
现在主流的数据库产品都实现了数据库中数据的复制，有的产品还做到了数据库对象的复制（例如视图和索引）。今天主要是与大家分享在Oracle平台下的数据复制功能。</p>
<p>多主体复制，MultiMaster Replication。可以简单理解为多个数据库间相互复制。</p>
<p>1.环境介绍：</p>
<p>主体定义站点:MASTER.CHRIS.COM.CN<br>
主体站点:REPSITE.CHRIS.COM.CN<br>
操作系统：&nbsp;&nbsp;  linux As 4.0<br>
数据库版本： ORACLE 10G -10.2.0.0<br>
注:主体定义站点指配置复制工作的站点</p>
<p>2.环境准备：首先创建在系统中建立了两个数据库</p>
<p>SID： Master&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  GLOBAL_NAME：MASTER.CHRIS.COM.CN<br>
SID： REPSITE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  GLOBAL_NAME：REPSITE.CHRIS.COM.CN</p>
<p>在实施前先要察看一些参数的设置情况</p>
<p>SQL&gt; select * from v$option where parameter ='Advanced replication';</p>
<p>PARAMETER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  VALUE<br>
-----------------------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ------------------------------<br>
Advanced replication&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  TRUE</p>
<p>如果该参数为Flase，则需要重新安装Oracle的Advanced Replication组件。</p>
<p>SQL&gt; select * from global_name;</p>
<p>GLOBAL_NAME<br>
----------------------------------<br>
MASTER.CHRIS.COM.CN</p>
<p>CHRIS.COM.CN表示该数据库实例的域名，即Domain Name。被复制的数据库实例必须具有相同的域名（show parameter db_domain）。如果域名不同，则需要使用命令修改数据库实例的域名。（alter database rename global_name to .）</p>
<p>SQL&gt; show parameter job_queue_processes;</p>
<p>NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  VALUE<br>
------------------------------------ ---------------------- -------------------<br>
job_queue_processes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  10</p>
<p>job_queue_processes参数的值必须大于0，因为数据复制需要使用Oracle的作业系统。</p>
<p>SQL&gt; show parameter open_links</p>
<p>NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  VALUE<br>
------------------------------------ ---------------------- -----------<br>
open_links&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  4</p>
<p>数据复制进程需要使用很多links，如果复制系统较多，建议尽量将该参数设置大些。</p>
<p>在开始实施复制之前，还要在复制站点上先创建好必要的数据环境。分别在两个数据库实例上创建好用户和对应的数据表。这里我省略了创建的过程。下面是关于数据表的部分信息。</p>
<p>SQL&gt; select count(*) from SCOTT.DEPT;</p>
<p>  COUNT(*)<br>
----------<br>
&nbsp;&nbsp;&nbsp;&nbsp;  7</p>
<p>SQL&gt; DESC SCOTT.DEPT<br>
 名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  是否为空?  类型<br>
 ----------------------------------------- --------&nbsp;&nbsp;  ---------------</p>
<p> DEPTNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  NOT NULL&nbsp;&nbsp;&nbsp;  NUMBER(2)<br>
 DNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  VARCHAR2(14)<br>
 LOC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  VARCHAR2(13)</p>
<p>主键：DEPTNO</p>
<p>--必须为主键或者联合主键。</p>
<p>3.复制实施准备一：在所有复制站点建立复制用户。<br>
---为了方便期间均使用REPADMIN用户，且用户名和密码相同。</p>
<p>SQL&gt;create user repadmin identified by repadmin default tablespace users temporary tablespace temp;</p>
<p>User created.</p>
<p>SQL&gt;execute dbms_defer_sys.register_propagator('repadmin');</p>
<p>PL/SQL procedure successfully completed.</p>
<p>SQL&gt;grant execute any procedure to repadmin;</p>
<p>Grant succeeded.</p>
<p>SQL&gt;execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');</p>
<p>PL/SQL procedure successfully completed.</p>
<p>SQL&gt;execute dbms_repcat_admin.grant_admin_any_schema(username =&gt; 'repadmin');</p>
<p>PL/SQL procedure successfully completed.</p>
<p>SQL&gt;grant comment any table to repadmin;</p>
<p>Grant succeeded.</p>
<p>SQL&gt;grant lock any table to repadmin;</p>
<p>Grant succeeded.</p>
<p>SQL&gt;grant select any dictionary to repadmin;</p>
<p>Grant succeeded.</p>
<p>4.复制实施准备二：创建数据库连接。</p>
<p>在复制用户创建并授权成功后，分别在数据库实例上创建指向对方实例的数据库连接。</p>
<p>在MASTER.CHRIS.COM.CN实例上：<br>
CREATE  DATABASE LINK &quot;REPSITE.CHRIS.COM.CN&quot;  CONNECT TO<br>
&nbsp;&nbsp;&nbsp;  &quot;REPADMIN&quot;<br>
&nbsp;&nbsp;&nbsp;  IDENTIFIED BY &quot;repadmin&quot; <br>
&nbsp;&nbsp;&nbsp;  USING 'REPSITE.CHRIS.COM.CN'</p>
<p>在REPSITE.CHRIS.COM.CN实例上：<br>
CREATE  DATABASE LINK &quot;MASTER.CHRIS.COM.CN&quot;  CONNECT TO<br>
&nbsp;&nbsp;&nbsp;  &quot;REPADMIN&quot;<br>
&nbsp;&nbsp;&nbsp;  IDENTIFIED BY &quot;repadmin&quot; <br>
&nbsp;&nbsp;&nbsp;  USING 'MASTER.CHRIS.COM.CN'</p>
<p><br>
5.复制实施进程：</p>
<p>现在开始真正的数据复制工作。一般在实施复制的时候，数据源已经存在一定量的数据，因此考虑到数据复制实施的简单性和操作性，事先已经在双方站点上部署好了相应的数据表。</p>
<p>主体定义站点:MASTER.CHRIS.COM.CN<br>
主体站点:REPSITE.CHRIS.COM.CN<br>
复制对象：scott.dept</p>
<p>以下在MASTER.CHRIS.COM.CN机器上操作</p>
<p>使用复制管理用户REPADMIN登录主定义站点：</p>
<p>SQL&gt; conn conn repadmin/repadmin</p>
<p>Connected.</p>
<p>SQL&gt; select * from global_name;</p>
<p>GLOBAL_NAME<br>
----------------------------------------<br>
MASTER.CHRIS.COM.CN</p>
<p>创建复制主体组：REP_MYTEST<br>
SQL&gt; execute dbms_repcat.create_master_repgroup('REP_MYTEST');</p>
<p>PL/SQL procedure successfully completed.</p>
<p>察看复制主体组相关信息：<br>
SQL&gt; select gname,master,status from dba_repgroup where gname='REP_MYTEST';</p>
<p>GNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MASTER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  STATUS<br>
--------------------------- ----------------------------  ------------------------<br>
REP_MYTEST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  QUIESCED</p>
<p>为主体组添加复制对象：<br>
SQL&gt; execute dbms_repcat.create_master_repobject -<br>
&gt; (sname=&gt;'SCOTT',oname=&gt;'DEPT', type=&gt;'TABLE', -<br>
&gt; use_existing_object=&gt;true,gname=&gt;'REP_MYTEST',copy_rows=&gt;false);</p>
<p>PL/SQL procedure successfully completed.</p>
<p>察看复制主体组中复制对象的相关信息：<br>
SQL&gt; select sname,oname,status,gname from dba_repobject where gname='REP_MYTEST';</p>
<p>SNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ONAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  STATUS&nbsp;&nbsp;&nbsp;&nbsp;  GNAME<br>
----------------------------- ------------------------------ ------------- ------------------------------<br>
SCOTT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  DEPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  VALID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  REP_MYTEST</p>
<p>为复制对象生成复制支持：<br>
SQL&gt; execute dbms_repcat.generate_replication_support('SCOTT','DEPT','TABLE');</p>
<p>PL/SQL procedure successfully completed.</p>
<p>再次察看复制主体组和对应的复制对象的相关信息：<br>
SQL&gt; select gname,master,status from dba_repgroup where gname='REP_MYTEST';</p>
<p>GNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MASTER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  STATUS<br>
--------------------------- ----------------------------  ------------------------<br>
REP_MYTEST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  QUIESCED</p>
<p>SQL&gt; select sname,oname,status,gname from dba_repobject where gname='REP_MYTEST';</p>
<p>SNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ONAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  STATUS&nbsp;&nbsp;&nbsp;&nbsp;  GNAME<br>
----------------------------- ------------------------------ ------------- ------------------------------<br>
SCOTT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  DEPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  VALID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  REP_MYTEST<br>
SCOTT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  DEPT$RP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  VALID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  REP_MYTEST<br>
SCOTT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  DEPT$RP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  VALID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  REP_MYTEST</p>
<p>为复制主体组添加数据库主站点：<br>
SQL&gt; execute dbms_repcat.add_master_database -<br>
&gt; (gname=&gt;'REP_MYTEST',master=&gt;'REPSITE.CHRIS.COM.CN', -<br>
&gt; use_existing_objects=&gt;true,copy_rows=&gt;false, -<br>
&gt; propagation_mode =&gt; 'synchronous');</p>
<p>PL/SQL procedure successfully completed.</p>
<p>以下在REPSITE.CHRIS.COM.CN机器上操作<br>
察看复制站点信息：<br>
SQL&gt; select gname,dblink,masterdef,master from dba_repsites where gname='REP_MYTEST';</p>
<p>GNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  DBLINK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MASTERDEF&nbsp;&nbsp;&nbsp;&nbsp;  MASTER<br>
------------ --------------------------------  ------------------ --------------<br>
REP_MYTEST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ORCL9I.TAIKANG.COM&nbsp;&nbsp;&nbsp;&nbsp;  Y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Y<br>
REP_MYTEST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  REPSITE.CHRIS.COM.CN&nbsp;&nbsp;&nbsp;  N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Y</p>
<p>以下在REPSITE.CHRIS.COM.CN机器上操作<br>
启动复制进程：<br>
SQL&gt; execute dbms_repcat.resume_master_activity('REP_MYTEST',true);</p>
<p>PL/SQL procedure successfully completed.</p>
<p>再次察看复制主体组相关信息：<br>
SQL&gt; select gname,master,status from dba_repgroup where gname='REP_MYTEST';</p>
<p>GNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MASTER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  STATUS<br>
--------------------------- ----------------------------  ------------------------<br>
REP_MYTEST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  NORMAL</p>
<p>注意：复制主体组的状态由QUIESCED变为NORMAL。</p>
<p>至此，这个复制过程实施完毕。可以进行相关的数据操作进行测试。</p>
<p><br>
6. 测试</p>
<p>本文操作参考了eygle的文章《Oracle高级复制的创建配置步骤-Step by Step》原文链接:http://www.eygle.com/archives/2005/06/oraclessoeaeaeo.html</p>
<p> </p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/Chrisjian/archive/2009/09/01/4507520.aspx">http://blog.csdn.net/Chrisjian/archive/2009/09/01/4507520.aspx</a></p> <a href="http://hi.baidu.com/viplotus/blog/item/e2461ad11328e7d9562c84ca.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/viplotus/blog/category/%B1%E0%B3%CC">编程</a>&nbsp;<a href="http://hi.baidu.com/viplotus/blog/item/e2461ad11328e7d9562c84ca.html#comment">查看评论</a>]]></description>
        <pubDate>2009年09月19日 星期六  11:43</pubDate>
        <category><![CDATA[编程]]></category>
        <author><![CDATA[viplotus]]></author>
		<guid>http://hi.baidu.com/viplotus/blog/item/e2461ad11328e7d9562c84ca.html</guid>
</item>

<item>
        <title><![CDATA[AIX系统上安装weblogic（转）[unix 下启动服务在服务端运营]]]></title>
        <link><![CDATA[http://hi.baidu.com/viplotus/blog/item/90458052d54420070df3e346.html]]></link>
        <description><![CDATA[
		
		<div class="articleTitle">
<div style="display: inline"><strong >AIX系统上安装<strong style="color: black; background-color: #a0ffff">weblogic</strong>（转）</strong><span class="time">(2008-10-16 09:17:51)</span></div>
</div>
<div class="articleTag">
<table class="FCK__ShowTableBorders" cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td>
            
            标签：<a class="tag" href="http://uni.sina.com.cn/c.php?t=blog&amp;k=it&amp;ts=bpost&amp;stype=tag" target="_blank">it</a><wbr></wbr> </td>
            <td valign="top" align="right" width="250">分类：<a href="http://blog.sina.com.cn/s/articlelist_1376881711_8_1.html"><strong style="color: black; background-color: #a0ffff">weblogic</strong></a></td>
        </tr>
    </tbody>
</table>
</div>
<div class="articleContent" >
<p><font style="background-color: #ffffff" face="宋体">一、AIX系统下环境准备<br>
1、建立<strong style="color: black; background-color: #a0ffff">weblogic</strong>用户<br>
方法同上（第一章）<br>
2、建立一个BEA用户组<br>
方法同上（第一章）<br>
3、建立逻辑卷<br>
方法同上（第一章）<br>
注意：逻辑卷所指定的安装目录至少有1个G的空间。<br>
4、建立文件系统<br>
方法同上（第一章）<br>
5、赋予用户权限<br>
方法同上（第一章）<br>
二、开始安装<strong style="color: black; background-color: #a0ffff">weblogic</strong><br>
1、准备安装包<br>
pj_platform812_generic.jar （以weblogic812为例）<br>
2、安装JRE环境<br>
<strong style="color: black; background-color: #a0ffff">WebLogic</strong>安装程序需要JRE的支持，根据安装系统平台的不同，<strong style="color: black; background-color: #a0ffff">WebLogic</strong>的安装介质也分为两类，一种自带了JRE（后缀名为.bin）,一种需要下载平台厂商所提供的JRE环境(后缀名为.jar)，以<strong style="color: black; background-color: #a0ffff">WebLogic</strong> Server 8.1 with SP2为例，目前所支持的<strong style="color: black; background-color: #ffff66">UNIX</strong>/LINUX平台如下所示：<br>
<strong style="color: black; background-color: #a0ffff">WebLogic</strong> Server 8.1 with SP2<br>
支持平台 是否自带JDK<br>
HP-UX (11.0,11.i, PA-RISC) YES<br>
Sun Solaris (8, 9, SPARC) YES<br>
Red Hat Enterprise Linux (2.1, Pentium) YES<br>
Red Hat Enterprise Linux (2.1, Itanium) YES<br>
SuSE SLES (8, Pentium) YES<br>
United Linux (1.0, Pentium) YES<br>
IBM AIX (5.1, 5.2) NO<br>
由上得知，首先要下载和操作系统以及<strong style="color: black; background-color: #a0ffff">WEBLOGIC</strong>相匹配JDK版本。<br>
在AIX上安装JDK要注意以下步骤：安装后要修改环境变量/etc/environment文件，将PATH中Java部分更改为新安装的Java版本（Java131或Java14）,并重新Login后生效！否则系统会使用原有的Java130环境，在安装weblogic7.0以上版本时会自动退回到提示符下。<br>
3、安装方法介绍<br>
.bin的安装方法<br>
首先赋予.bin可执行权限<br>
chmod a+x filename.bin<br>
然后执行<br>
./filename.bin -mode=console<br>
.jar的安装方法<br>
java -jar filename.jar -mode=console(字符)<br>
java -jar filename.jar -mode=graphics(图形)<br>
4、开始安装<strong style="color: black; background-color: #a0ffff">weblogic</strong><br>
命令行输入：java &ndash;jar pj_platform812_generic.jar<br>
运行后出现安装主界面，如下所示：</font></p>
<p><font style="background-color: #ffffff" face="宋体">等待装载安装文件完成后，出现安装欢迎界面<br>
点击Next进入下一步：<br>
选择同意使用条款，点击Next进入下一步<br>
选择安装主目录，这里一般选择默认的即可。这个目录就是指前期创建的<strong style="color: black; background-color: #a0ffff">weblogic</strong>安装用户所指定的主目录。点击Next进入下一步：<br>
这里选择完全安装，点击Next进入下一步：<br>
这里选择安装目录，默认即可。点击Next进入下一步：<br>
开始拷贝文件，进行安装<br>
安装完成。点击Done，完成整个安装过程。</font></p>
<p><font style="background-color: #ffffff" face="宋体">5、配置Configuration Wizard<br>
软件安装完毕后，下一步配置Domain域，进入<strong style="color: black; background-color: #a0ffff">weblogic</strong>安装目录（例如：/wls/weblogic801/common/bin），找到文件dmwiz.sh，执行他</font></p>
<p><font style="background-color: #ffffff" face="宋体">#./dmwiz.sh；选择WLS Domain，NEXT下一步，根据向导，就可以创建domain。注意创建Administrative User用户名和密码时，密码不少于8位</font></p>
<p><font style="background-color: #ffffff" face="宋体">。<br>
6、<strong style="color: black; background-color: #99ff99">启动</strong>和停止<strong style="color: black; background-color: #a0ffff">weblogic</strong><br>
<strong style="color: black; background-color: #99ff99">启动</strong><strong style="color: black; background-color: #a0ffff">weblogic</strong><br>
在<strong style="color: black; background-color: #99ff99">启动</strong><strong style="color: black; background-color: #a0ffff">Weblogic</strong>之前，可将服务用户名和密码写入<strong style="color: black; background-color: #99ff99">启动</strong><strong style="color: black; background-color: #ff9999">脚本</strong>。<br>
进入刚刚配置完成的域目录（例如：/wls/user_projects/mydomain），编辑startWebLogic.sh<strong style="color: black; background-color: #99ff99">启动</strong><strong style="color: black; background-color: #ff9999">脚本</strong>，可用$ vi startWebLogic.sh执行编</font></p>
<p><font style="background-color: #ffffff" face="宋体">辑，在&ldquo;WLS_USER= WLS_PW=，输入用户名和密码，保存退出。<br>
最后执行$ ./startWebLogic.sh，<strong style="color: black; background-color: #99ff99">启动</strong><strong style="color: black; background-color: #a0ffff">Weblogic</strong>..</font></p>
<p><font style="background-color: #ffffff" face="宋体">停止<strong style="color: black; background-color: #a0ffff">weblogic</strong>服务<br>
1、 KILL掉进程<br>
2、 通过&rdquo;http://服务地址：7001/console&rdquo;,shutdownserver<br>
3、 利用<strong style="color: black; background-color: #ff9999">脚本</strong>停止服务：<br>
在＃/wls/weblogic801/samples/workshop路径下，有一个stopWebLogic.sh文件，对他进行稍微编辑，COPY到/wls/user_projects/mydomain目</font></p>
<p><font style="background-color: #ffffff" face="宋体">录下，执行即可。<br>
三、开机/关机自动<strong style="color: black; background-color: #99ff99">启动</strong>/停止domain<br>
请参见oracle的自<strong style="color: black; background-color: #99ff99">启动</strong>。<br>
不同之处：<br>
1、 在rc.startdb<strong style="color: black; background-color: #ff9999">脚本</strong>中用命令<strong style="color: black; background-color: #99ff99">启动</strong><br>
2、　rc.startdb<strong style="color: black; background-color: #ff9999">脚本</strong>内容<br>
cd /<strong style="color: black; background-color: #a0ffff">weblogic</strong>/wlserver6.1/config/mydomain ＃转到<strong style="color: black; background-color: #a0ffff">weblogic</strong><strong style="color: black; background-color: #99ff99">启动</strong>目录，必须！<br>
　　nohup ./startWebLogic.sh &gt;/home/<strong style="color: black; background-color: #a0ffff">weblogic</strong>.log &amp; ＃<strong style="color: black; background-color: #99ff99">启动</strong><strong style="color: black; background-color: #a0ffff">weblogic</strong><br>
　　给文件执行权限！<br>
　　注意由于<strong style="color: black; background-color: #a0ffff">weblogic</strong>在<strong style="color: black; background-color: #99ff99">启动</strong>后如果用户退出<strong style="color: black; background-color: #ff66ff">telnet</strong> 就自动关闭，所以要把<strong style="color: black; background-color: #a0ffff">weblogic</strong>放在后台执行，所以在startWebLogic.sh文件中<strong style="color: black; background-color: #99ff99">启动</strong></font></p>
<p><font style="background-color: #ffffff" face="宋体"><strong style="color: black; background-color: #a0ffff">weblogic</strong>的命令行改为可以在后台运行，用nohup （<strong style="color: black; background-color: #99ff99">启动</strong>命令行） &gt;/home/<strong style="color: black; background-color: #a0ffff">weblogic</strong>.log &amp;<br>
　　把<strong style="color: black; background-color: #a0ffff">weblogic</strong>的运行信息存到/home/<strong style="color: black; background-color: #a0ffff">weblogic</strong>.log文件中</font></p>
</div> <a href="http://hi.baidu.com/viplotus/blog/item/90458052d54420070df3e346.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/viplotus/blog/category/%B1%E0%B3%CC">编程</a>&nbsp;<a href="http://hi.baidu.com/viplotus/blog/item/90458052d54420070df3e346.html#comment">查看评论</a>]]></description>
        <pubDate>2009年07月13日 星期一  13:39</pubDate>
        <category><![CDATA[编程]]></category>
        <author><![CDATA[viplotus]]></author>
		<guid>http://hi.baidu.com/viplotus/blog/item/90458052d54420070df3e346.html</guid>
</item>

<item>
        <title><![CDATA[Eclipse不能自动编译工程的解决方法]]></title>
        <link><![CDATA[http://hi.baidu.com/viplotus/blog/item/886db9ecdefc542e63d09fcf.html]]></link>
        <description><![CDATA[
		
		目录下也是空的.<br>
具体都操作了:<br>
打开project-&gt;build automatically 试后不行,还是不编译.<br>
打开project --&gt; build automatically 另外 clean一下就可能会编译了,结果还不行.<br>
eclipse默认是选自动编译。即使取消自动编译，手动build工程，也不能编译。<br>
<br>
<br>
<br>
出现这种情况一般有以下三种原因：<br>
1.如果项目里引了某个不用的jar包，而那个包又被你删了，就会出现不报错但怎么也编译不出来class文件的情况，可以把所有包都删除,然后一个一个的再引入(需要的),不要一下子把所有包都引入来,没用的可能会引起不良后果.<br>
2.想删掉某个class文件重新生成，删除class文件后，但classes目录下的文件夹被其它程序打开，比如Total Commander。此时编译也不会通过，在problems下可能会提示&ldquo;con't delete classes ……&rdquo;。关掉其它程序重新编译即可。<br>
<br>
3.还有种情况是remove掉 JRE System Library，重新导入即可编译。但是什么原因导致的还不清楚 <a href="http://hi.baidu.com/viplotus/blog/item/886db9ecdefc542e63d09fcf.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/viplotus/blog/category/%B1%E0%B3%CC">编程</a>&nbsp;<a href="http://hi.baidu.com/viplotus/blog/item/886db9ecdefc542e63d09fcf.html#comment">查看评论</a>]]></description>
        <pubDate>2009年07月03日 星期五  19:44</pubDate>
        <category><![CDATA[编程]]></category>
        <author><![CDATA[viplotus]]></author>
		<guid>http://hi.baidu.com/viplotus/blog/item/886db9ecdefc542e63d09fcf.html</guid>
</item>

<item>
        <title><![CDATA[SQLPLUS命令的使用大全]]></title>
        <link><![CDATA[http://hi.baidu.com/viplotus/blog/item/20a0d8fccd1fdef4fd037fe8.html]]></link>
        <description><![CDATA[
		
		<font size="2">SQL*PLUS命令的使用大全[zt]<br>
</font>
<p><font size="2">Oracle的sql*plus是与oracle进行交互的客户端工具。在sql*plus中，可以运行sql*plus命令与sql*plus语句。 <br>
我们通常所说的DML、DDL、DCL语句都是sql*plus语句，它们执行完后，都可以保存在一个被称为sql buffer的内存区域中，并且只能保存一条最近执行的sql语句，我们可以对保存在sql buffer中的sql 语句进行修改，然后再次执行，sql*plus一般都与数据库打交道。 <br>
除了sql*plus语句，在sql*plus中执行的其它语句我们称之为sql*plus命令。它们执行完后，不保存在sql buffer的内存区域中，它们一般用来对输出的结果进行格式化显示，以便于制作报表。 <br>
下面就介绍一下一些常用的sql*plus命令： </font></p>
<p><font size="2">1. 执行一个SQL脚本文件 <br>
SQL&gt;start file_name <br>
SQL&gt;@ file_name <br>
我们可以将多条sql语句保存在一个文本文件中，这样当要执行这个文件中的所有的sql语句时，用上面的任一命令即可，这类似于dos中的批处理。 </font></p>
<p><font size="2">2. 对当前的输入进行编辑 <br>
SQL&gt;edit </font></p>
<p><font size="2">3. 重新运行上一次运行的sql语句 <br>
SQL&gt;/ </font></p>
<p><font size="2">4. 将显示的内容输出到指定文件 <br>
SQL&gt; SPOOL file_name <br>
在屏幕上的所有内容都包含在该文件中，包括你输入的sql语句。 </font></p>
<p><font size="2">5. 关闭spool输出 <br>
SQL&gt; SPOOL OFF <br>
只有关闭spool输出，才会在输出文件中看到输出的内容。 </font></p>
<p><font size="2">6．显示一个表的结构 <br>
SQL&gt; desc table_name </font></p>
<p><font size="2">7. COL命令： <br>
主要格式化列的显示形式。 <br>
该命令有许多选项，具体如下： <br>
COL[UMN] [{ column|expr} [ option ...]] <br>
Option选项可以是如下的子句: <br>
ALI[AS] alias <br>
CLE[AR] <br>
FOLD_A[FTER] <br>
FOLD_B[EFORE] <br>
FOR[MAT] format <br>
HEA[DING] text <br>
JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]} <br>
LIKE { expr|alias} <br>
NEWL[INE] <br>
NEW_V[ALUE] variable <br>
NOPRI[NT]|PRI[NT] <br>
NUL[L] text <br>
OLD_V[ALUE] variable <br>
ON|OFF <br>
WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED] </font></p>
<p><font size="2">1). 改变缺省的列标题 <br>
COLUMN column_name HEADING column_heading <br>
For example: <br>
Sql&gt;select * from dept; <br>
DEPTNO DNAME LOC <br>
---------- ---------------------------- --------- <br>
10 ACCOUNTING NEW YORK <br>
sql&gt;col LOC heading location <br>
sql&gt;select * from dept; <br>
DEPTNO DNAME location <br>
--------- ---------------------------- ----------- <br>
10 ACCOUNTING NEW YORK </font></p>
<p><font size="2">2). 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上： <br>
Sql&gt;select * from emp <br>
Department name Salary <br>
---------- ---------- ---------- <br>
10 aaa 11 <br>
SQL&gt; COLUMN ENAME HEADING &rsquo;Employee|Name&rsquo; <br>
Sql&gt;select * from emp <br>
Employee <br>
Department name Salary <br>
---------- ---------- ---------- <br>
10 aaa 11 <br>
note: the col heading turn into two lines from one line. </font></p>
<p><font size="2">3). 改变列的显示长度： <br>
FOR[MAT] format <br>
Sql&gt;select empno,ename,job from emp; <br>
EMPNO ENAME JOB <br>
---------- ---------- --------- <br>
7369 SMITH CLERK <br>
7499 ALLEN SALESMAN <br>
7521 WARD SALESMAN <br>
Sql&gt; col ename format a40 <br>
EMPNO ENAME JOB <br>
---------- ---------------------------------------- --------- <br>
7369 SMITH CLERK <br>
7499 ALLEN SALESMAN <br>
7521 WARD SALESMAN </font></p>
<p><font size="2">4). 设置列标题的对齐方式 <br>
JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]} <br>
SQL&gt; col ename justify center <br>
SQL&gt; / <br>
EMPNO ENAME JOB <br>
---------- ---------------------------------------- --------- <br>
7369 SMITH CLERK <br>
7499 ALLEN SALESMAN <br>
7521 WARD SALESMAN <br>
对于NUMBER型的列，列标题缺省在右边，其它类型的列标题缺省在左边 </font></p>
<p><font size="2">5). 不让一个列显示在屏幕上 <br>
NOPRI[NT]|PRI[NT] <br>
SQL&gt; col job noprint <br>
SQL&gt; / <br>
EMPNO ENAME <br>
---------- ---------------------------------------- <br>
7369 SMITH <br>
7499 ALLEN <br>
7521 WARD </font></p>
<p><font size="2">6). 格式化NUMBER类型列的显示： <br>
SQL&gt; COLUMN SAL FORMAT $99,990 <br>
SQL&gt; / <br>
Employee <br>
Department Name Salary Commission <br>
---------- ---------- --------- ---------- <br>
30 ALLEN $1,600 300 </font></p>
<p><font size="2">7). 显示列值时，如果列值为NULL值，用text值代替NULL值 <br>
COMM NUL[L] text <br>
SQL&gt;COL COMM NUL[L] text </font></p>
<p><font size="2">. 设置一个列的回绕方式 <br>
WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED] <br>
COL1 <br>
-------------------- <br>
HOW ARE YOU? </font></p>
<p><font size="2">SQL&gt;COL COL1 FORMAT A5 <br>
SQL&gt;COL COL1 WRAPPED <br>
COL1 <br>
----- <br>
HOW A <br>
RE YO <br>
U? </font></p>
<p><font size="2">SQL&gt; COL COL1 WORD_WRAPPED <br>
COL1 <br>
----- <br>
HOW <br>
ARE <br>
YOU? </font></p>
<p><font size="2">SQL&gt; COL COL1 WORD_WRAPPED <br>
COL1 <br>
----- <br>
HOW A </font></p>
<p><font size="2">9). 显示列的当前的显示属性值 <br>
SQL&gt; COLUMN column_name </font></p>
<p><font size="2">10). 将所有列的显示属性设为缺省值 <br>
SQL&gt; CLEAR COLUMNS </font></p>
<p><font size="2">8. 屏蔽掉一个列中显示的相同的值 <br>
BREAK ON break_column <br>
SQL&gt; BREAK ON DEPTNO <br>
SQL&gt; SELECT DEPTNO, ENAME, SAL <br>
FROM EMP <br>
WHERE SAL &lt; 2500 <br>
ORDER BY DEPTNO; <br>
DEPTNO ENAME SAL <br>
---------- ----------- --------- <br>
10 CLARK 2450 <br>
MILLER 1300 <br>
20 SMITH 800 <br>
ADAMS 1100 </font></p>
<p><font size="2">9. 在上面屏蔽掉一个列中显示的相同的值的显示中，每当列值变化时在值变化之前插入n个空行。 <br>
BREAK ON break_column SKIP n </font></p>
<p><font size="2">SQL&gt; BREAK ON DEPTNO SKIP 1 <br>
SQL&gt; / <br>
DEPTNO ENAME SAL <br>
---------- ----------- --------- <br>
10 CLARK 2450 <br>
MILLER 1300 </font></p>
<p><font size="2">20 SMITH 800 <br>
ADAMS 1100 </font></p>
<p><font size="2">10. 显示对BREAK的设置 <br>
SQL&gt; BREAK </font></p>
<p><font size="2">11. 删除6、7的设置 <br>
SQL&gt; CLEAR BREAKS </font></p>
<p><font size="2">12. Set 命令： <br>
该命令包含许多子命令： <br>
SET system_variable value <br>
system_variable value 可以是如下的子句之一： <br>
APPI[NFO]{ON|OFF|text} <br>
ARRAY[SIZE] {15|n} <br>
AUTO[COMMIT]{ON|OFF|IMM[EDIATE]|n} <br>
AUTOP[RINT] {ON|OFF} <br>
AUTORECOVERY [ON|OFF] <br>
AUTOT[RACE] {ON|OFF|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]] <br>
BLO[CKTERMINATOR] {.|c} <br>
CMDS[EP] {;|c|ON|OFF} <br>
COLSEP {_|text} <br>
COM[PATIBILITY]{V7|V8|NATIVE} <br>
CON[CAT] {.|c|ON|OFF} <br>
COPYC[OMMIT] {0|n} <br>
COPYTYPECHECK {ON|OFF} <br>
DEF[INE] {&amp;|c|ON|OFF} <br>
DESCRIBE [DEPTH {1|n|ALL}][LINENUM {ON|OFF}][INDENT {ON|OFF}] <br>
ECHO {ON|OFF} <br>
EDITF[ILE] file_name[.ext] <br>
EMB[EDDED] {ON|OFF} <br>
ESC[APE] {|c|ON|OFF} <br>
FEED[BACK] {6|n|ON|OFF} <br>
FLAGGER {OFF|ENTRY |INTERMED[IATE]|FULL} <br>
FLU[SH] {ON|OFF} <br>
HEA[DING] {ON|OFF} <br>
HEADS[EP] {||c|ON|OFF} <br>
INSTANCE [instance_path|LOCAL] <br>
LIN[ESIZE] {80|n} <br>
LOBOF[FSET] {n|1} <br>
LOGSOURCE [pathname] <br>
LONG {80|n} <br>
LONGC[HUNKSIZE] {80|n} <br>
MARK[UP] HTML [ON|OFF] [HEAD text] [BODY text] [ENTMAP {ON|OFF}] [SPOOL <br>
{ON|OFF}] [PRE[FORMAT] {ON|OFF}] <br>
NEWP[AGE] {1|n|NONE} <br>
NULL text <br>
NUMF[ORMAT] format <br>
NUM[WIDTH] {10|n} <br>
PAGES[IZE] {24|n} <br>
PAU[SE] {ON|OFF|text} <br>
RECSEP {WR[APPED]|EA[CH]|OFF} <br>
RECSEPCHAR {_|c} <br>
SERVEROUT[PUT] {ON|OFF} [SIZE n] [FOR[MAT] {WRA[PPED]|WOR[D_ <br>
WRAPPED]|TRU[NCATED]}] <br>
SHIFT[INOUT] {VIS[IBLE]|INV[ISIBLE]} <br>
SHOW[MODE] {ON|OFF} <br>
SQLBL[ANKLINES] {ON|OFF} <br>
SQLC[ASE] {MIX[ED]|LO[WER]|UP[PER]} <br>
SQLCO[NTINUE] {&gt; |text} <br>
SQLN[UMBER] {ON|OFF} <br>
SQLPRE[FIX] {#|c} <br>
SQLP[ROMPT] {SQL&gt;|text} <br>
SQLT[ERMINATOR] {;|c|ON|OFF} <br>
SUF[FIX] {SQL|text} <br>
TAB {ON|OFF} <br>
TERM[OUT] {ON|OFF} <br>
TI[ME] {ON|OFF} <br>
TIMI[NG] {ON|OFF} <br>
TRIM[OUT] {ON|OFF} <br>
TRIMS[POOL] {ON|OFF} <br>
UND[ERLINE] {-|c|ON|OFF} <br>
VER[IFY] {ON|OFF} <br>
WRA[P] {ON|OFF} </font></p>
<p><font size="2">1). 设置当前session是否对修改的数据进行自动提交 <br>
SQL&gt;SET AUTO[COMMIT] {ON|OFF|IMM[EDIATE]| n} </font></p>
<p><font size="2">2)．在用start命令执行一个sql脚本时，是否显示脚本中正在执行的SQL语句 <br>
SQL&gt; SET ECHO {ON|OFF} </font></p>
<p><font size="2">3).是否显示当前sql语句查询或修改的行数 <br>
SQL&gt; SET FEED[BACK] {6|n|ON|OFF} <br>
默认只有结果大于6行时才显示结果的行数。如果set feedback 1 ，则不管查询到多少行都返回。当为off 时，一律不显示查询的行数 </font></p>
<p><font size="2">4).是否显示列标题 <br>
SQL&gt; SET HEA[DING] {ON|OFF} <br>
当set heading off 时，在每页的上面不显示列标题，而是以空白行代替 </font></p>
<p><font size="2">5).设置一行可以容纳的字符数 <br>
SQL&gt; SET LIN[ESIZE] {80|n} <br>
如果一行的输出内容大于设置的一行可容纳的字符数，则折行显示。 </font></p>
<p><font size="2">6).设置页与页之间的分隔 <br>
SQL&gt; SET NEWP[AGE] {1|n|NONE} <br>
当set newpage 0 时，会在每页的开头有一个小的黑方框。 <br>
当set newpage n 时，会在页和页之间隔着n个空行。 <br>
当set newpage none 时，会在页和页之间没有任何间隔。 </font></p>
<p><font size="2">7).显示时，用text值代替NULL值 <br>
SQL&gt; SET NULL text </font></p>
<p><font size="2">.设置一页有多少行数 <br>
SQL&gt; SET PAGES[IZE] {24|n} <br>
如果设为0，则所有的输出内容为一页并且不显示列标题 </font></p>
<p><font size="2">9).是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息。 <br>
SQL&gt; SET SERVEROUT[PUT] {ON|OFF} <br>
在编写存储过程时，我们有时会用dbms_output.put_line将必要的信息输出，以便对存储过程进行调试，只有将serveroutput变量设为on后，信息才能显示在屏幕上。 <font size="2"><strong>dbms_output.put_line会&quot;吃掉&quot;最前面的空格?在set serveroutput on后加上format wrapped参数!</strong></font></font></p>
<p><font size="2">10).当SQL语句的长度大于LINESIZE时，是否在显示时截取SQL语句。 <br>
SQL&gt; SET WRA[P] {ON|OFF} <br>
当输出的行的长度大于设置的行的长度时（用set linesize n命令设置），当set wrap on时，输出行的多于的字符会另起一行显示，否则，会将输出行的多于字符切除，不予显示。 </font></p>
<p><font size="2">11).是否在屏幕上显示输出的内容，主要用与SPOOL结合使用。 <br>
SQL&gt; SET TERM[OUT] {ON|OFF} <br>
在用spool命令将一个大表中的内容输出到一个文件中时，将内容输出在屏幕上会耗费大量的时间，设置set termspool off后，则输出的内容只会保存在输出文件中，不会显示在屏幕上，极大的提高了spool的速度。 </font></p>
<p><font size="2">12).将SPOOL输出中每行后面多余的空格去掉 <br>
SQL&gt; SET TRIMS[OUT] {ON|OFF} </font></p>
<p><font size="2">13)显示每个sql语句花费的执行时间 <br>
set TIMING {ON|OFF} </font></p>
<p><font size="2">14．修改sql buffer中的当前行中，第一个出现的字符串 <br>
C[HANGE] /old_value/new_value <br>
SQL&gt; l <br>
1* select * from dept <br>
SQL&gt; c/dept/emp <br>
1* select * from emp </font></p>
<p><font size="2">15．编辑sql buffer中的sql语句 <br>
EDI[T] </font></p>
<p><font size="2">16．显示sql buffer中的sql语句，list n显示sql buffer中的第n行，并使第n行成为当前行 <br>
L[IST] [n] </font></p>
<p><font size="2">17．在sql buffer的当前行下面加一行或多行 <br>
I[NPUT] </font></p>
<p><font size="2">18．将指定的文本加到sql buffer的当前行后面 <br>
A[PPEND] <br>
SQL&gt; select deptno, <br>
2 dname <br>
3 from dept; <br>
DEPTNO DNAME <br>
---------- -------------- <br>
10 ACCOUNTING <br>
20 RESEARCH <br>
30 SALES <br>
40 OPERATIONS </font></p>
<p><font size="2">SQL&gt; L 2 <br>
2* dname <br>
SQL&gt; a ,loc <br>
2* dname,loc <br>
SQL&gt; L <br>
1 select deptno, <br>
2 dname,loc <br>
3* from dept <br>
SQL&gt; / </font></p>
<p><font size="2">DEPTNO DNAME LOC <br>
---------- -------------- ------------- <br>
10 ACCOUNTING NEW YORK <br>
20 RESEARCH DALLAS <br>
30 SALES CHICAGO <br>
40 OPERATIONS BOSTON </font></p>
<p><font size="2">19．将sql buffer中的sql语句保存到一个文件中 <br>
SAVE file_name </font></p>
<p><font size="2">20．将一个文件中的sql语句导入到sql buffer中 <br>
GET file_name </font></p>
<p><font size="2">21．再次执行刚才已经执行的sql语句 <br>
RUN <br>
or <br>
/ </font></p>
<p><font size="2">22．执行一个存储过程 <br>
EXECUTE procedure_name </font></p>
<p><font size="2">23．在sql*plus中连接到指定的数据库 <br>
CONNECT </font><a href="mailto:user_name/passwd@db_alias"><font size="2">user_name/passwd@db_alias</font></a><font size="2"> </font></p>
<p><font size="2">24．设置每个报表的顶部标题 <br>
TTITLE </font></p>
<p><font size="2">25．设置每个报表的尾部标题 <br>
BTITLE </font></p>
<p><font size="2">26．写一个注释 <br>
REMARK [text] </font></p>
<p><font size="2">27．将指定的信息或一个空行输出到屏幕上 <br>
PROMPT [text] </font></p>
<p><font size="2">28．将执行的过程暂停，等待用户响应后继续执行 <br>
PAUSE [text] </font></p>
<p><font size="2">Sql&gt;PAUSE Adjust paper and press RETURN to continue. </font></p>
<p><font size="2">29．将一个数据库中的一些数据拷贝到另外一个数据库（如将一个表的数据拷贝到另一个数据库） <br>
COPY {FROM database | TO database | FROM database TO database} <br>
{APPEND|CREATE|INSERT|REPLACE} destination_table <br>
[(column, column, column, ...)] USING query </font></p>
<p><font size="2">sql&gt;COPY FROM </font><a href="mailto:SCOTT/TIGER@HQ"><font size="2">SCOTT/TIGER@HQ</font></a><font size="2"> TO </font><a href="mailto:JOHN/CHROME@WEST"><font size="2">JOHN/CHROME@WEST</font></a><font size="2"> <br>
create emp_temp <br>
USING SELECT * FROM EMP </font></p>
<p><font size="2">30．不退出sql*plus，在sql*plus中执行一个操作系统命令： <br>
HOST </font></p>
<p><font size="2">Sql&gt; host hostname <br>
该命令在windows下可能被支持。 </font></p>
<p><font size="2">31．在sql*plus中，切换到操作系统命令提示符下，运行操作系统命令后，可以再次切换回sql*plus： <br>
! </font></p>
<p><font size="2">sql&gt;! <br>
$hostname <br>
$exit <br>
sql&gt; </font></p>
<p><font size="2">该命令在windows下不被支持。 </font></p>
<p><font size="2">32．显示sql*plus命令的帮助 <br>
HELP <br>
如何安装帮助文件： <br>
Sql&gt;@ ?sqlplusadminhelphlpbld.sql ?sqlplusadminhelphelpus.sql <br>
Sql&gt;help index </font></p>
<p><font size="2">33．显示sql*plus系统变量的值或sql*plus环境变量的值 <br>
Syntax <br>
SHO[W] option <br>
where option represents one of the following terms or clauses: <br>
system_variable <br>
ALL <br>
BTI[TLE] <br>
ERR[ORS] [{FUNCTION|PROCEDURE|PACKAGE|PACKAGE BODY| <br>
TRIGGER|VIEW|TYPE|TYPE BODY} [schema.]name] <br>
LNO <br>
PARAMETERS [parameter_name] <br>
PNO <br>
REL[EASE] <br>
REPF[OOTER] <br>
REPH[EADER] <br>
SGA <br>
SPOO[L] <br>
SQLCODE <br>
TTI[TLE] <br>
USER </font></p>
<p><font size="2">1) . 显示当前环境变量的值： <br>
Show all </font></p>
<p><font size="2">2) . 显示当前在创建函数、存储过程、触发器、包等对象的错误信息 <br>
Show error <br>
当创建一个函数、存储过程等出错时，变可以用该命令查看在那个地方出错及相应的出错信息，进行修改后再次进行编译。 </font></p>
<p><font size="2">3) . 显示初始化参数的值： <br>
show PARAMETERS [parameter_name] </font></p>
<p><font size="2">4) . 显示数据库的版本： <br>
show REL[EASE] </font></p>
<p><font size="2">5) . 显示SGA的大小 <br>
show SGA </font></p>
<p><font size="2">6). 显示当前的用户名 <br>
show user<br>
_________________</font></p>
<p><strong>xsb注：</strong></p>
<p><font size="2"><strong>@2.sql与@@2.sql的区别：</strong></font></p>
<p><font size="2">比如在e:下sqlplus @e:temp1.sql<br>
1.sql里的@2.sql调用的脚本位于e:目下<br>
@@2.sql调用的脚本位于e:temp目录下。</font></p>
<p><font size="2">!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1</font></p>
<font size="2">
<div class="storytext">
<p>SQLPlus技巧<br>
1．使用SQL*PLUS动态生成批量脚本</p>
<p>将spool与select命令结合起来使用，可以生成一个脚本，脚本中包含有可以批量执行某一任务的语句。</p>
<p>例1：生成一个脚本，删除SCOTT用户下的所有的表：</p>
<p>a. 创建gen_drop_table.sql文件，包含如下语句：</p>
<p>SPOOL c:drop_table.sql<br>
SELECT 'DROP TABLE '||<br>
table_name ||';' FROM user_tables;<br>
SPOOL OFF</p>
<p>b. 以SCOTT用户登录数据库：</p>
<p>SQLPLUS &gt; @ …..gen_dorp_table.sql</p>
<p>c. 在c盘根目录下会生成文件drop_table.sql文件，包含删除所有表的语句，如下所示:</p>
<p>SQL&gt;SELECT 'DROP TABLE '|| table_name ||';' FROM user_tables;<br>
'DROPTABLE'||TABLE_NAME||';'<br>
-----------------------------<br>
DROP TABLE DEPT;<br>
DROP TABLE EMP;<br>
DROP TABLE PARENT;<br>
DROP TABLE STAT_VENDER_TEMP;<br>
DROP TABLE TABLE_FORUM;<br>
5 rows selected：SQL&gt; SPOOL OFF。</p>
<p>d. 对生成的drop_table.sql文件进行编辑去掉不必要的部分，只留下drop table …语句</p>
<p>e. 在scott用户下运行dorp_table.sql文件，删除scott用户下所有的表。SQLPLUS &gt; @ c:dorp_table.sql。</p>
<p>在上面的操作中，在生成的脚本文件中会有多余的字符，如运行的SQL语句，标题，或返回的行数，需要我们编辑该脚本后再运行，给实际的操作带来诸多不便。懒惰是人的本性，这促使我们用更简单的办法来实现上面的任务。</p>
<p>a. 创建gen_drop_table.sql文件，包含如下语句：</p>
<p>set echo off<br>
set feedback off<br>
set newpage none<br>
set pagesize 5000<br>
set linesize 500<br>
set verify off<br>
set pagesize 0<br>
set term off<br>
set trims on<br>
set linesize 600<br>
set heading off<br>
set timing off<br>
set verify off<br>
set numwidth 38<br>
SPOOL c:drop_table.sql<br>
SELECT 'DROP TABLE '|| table_name ||';' FROM user_tables;<br>
SPOOL OFF</p>
<p>b. 以SCOTT用户登录数据库：SQLPLUS &gt; @ …..gen_dorp_table.sql。</p>
<p>c. 在c盘根目录下会生成文件drop_table.sql文件，包含删除所有表的语句，如下所示:</p>
<p>DROP TABLE DEPT;<br>
DROP TABLE EMP;<br>
DROP TABLE PARENT;<br>
DROP TABLE STAT_VENDER_TEMP;<br>
DROP TABLE TABLE_FORUM;</p>
<p>d. 在scott用户下运行dorp_t：</p>
<p>able.sql文件，删除scott用户下所有的表。SQLPLUS &gt; @ c:dorp_table.sql</p>
<p>2．将一个表中的数据导出生成一个文本文件，列与列之间以&rdquo;,&rdquo;隔开：</p>
<p>set echo off<br>
set feedback off<br>
set newpage none<br>
set pagesize 5000<br>
set linesize 500<br>
set verify off<br>
set pagesize 0<br>
set term off<br>
set trims on<br>
set linesize 600<br>
set heading off<br>
set timing off<br>
set verify off<br>
set numwidth 38<br>
SPOOL c:drop_table.sql<br>
select DEPTNO || ',' || DNAME FROM DEPT;<br>
SPOOL OFF</p>
<p>将上面的内容保存为一个文本文件后，以scott登录，执行该文件后显示结果：</p>
<p>10,ACCOUNTING<br>
20,RESEARCH<br>
30,SALES<br>
40,OPERATIONS</p>
<p>通过上面的两个例子，我们可以将：</p>
<p>set echo off<br>
set feedback off<br>
set newpage none<br>
set pagesize 5000<br>
set linesize 500<br>
set verify off<br>
set pagesize 0<br>
set term off<br>
set trims on<br>
set linesize 600<br>
set heading off<br>
set timing off<br>
set verify off<br>
set numwidth 38<br>
SPOOL c:具体的文件名</p>
<p>你要运行的SQL语句SPOOL OFF。</p>
<p>作为一个模版，只要将必要的语句假如这个模版就可以了。</p>
<p>在oracle的较新版本中，还可以用set colsep命令来实现上面的功能：</p>
<p>SQL&gt; set colsep ,<br>
SQL&gt; select * from dept;<br>
10,ACCOUNTING ,NEW YORK<br>
20,RESEARCH ,DALLAS<br>
30,SALES ,CHICAGO<br>
40,OPERATIONS ,BOSTON<br>
35,aa ,bb</p>
<p>3．动态生成spool命令所需的文件名。</p>
<p>在我们上面的例子中，spool命令所需要的文件名都是固定的。有时我们需要每天spool一次，并且每次spool的文件名都不相同，如文件名包含当天的日期，该如何实现呢？</p>
<p>column dat1 new_value filename;<br>
select to_char(sysdate,'yyyymmddhh24mi') dat1 from dual;<br>
spool c:&amp;&amp;filename..txt<br>
select * from dept;<br>
spool off;</p>
<p>4．如何从脚本文件中得到WINDOWS环境变量的值：</p>
<p>在windos中：</p>
<p>spool c:temp%ORACLE_SID%.txt<br>
select * from dept;<br>
...<br>
spool off</p>
<p>在上面的例子中，通过%ORACLE_SID%的方式引用环境变量ORACLE_SID的值，如果ORACLE_SID的值为orcl，则生成的spool文件名为：orcl.txt。</p>
<p>在UNIX中：</p>
<p>spool c:temp$ORACLE_SID.txt<br>
select * from dept;<br>
...<br>
spool off</p>
<p>在上面的例子中，通过$ORACLE_SID的方式引用环境变量ORACLE_SID的值，如果ORACLE_SID的值为orcl，则生成的spool文件名为：orcl.txt。</p>
<p>5．如何指定缺省的编辑脚本的目录:</p>
<p>在sql*plus中，可以用save命令，将上一条执行的sql语句保存到一个文件中，但是如何设置该文件的缺省目录呢？</p>
<p>通过SQL&gt; set editfile c:tempfile.sql 命令，可以设置其缺省目录为c:tmpe，缺省文件名为file.sql。</p>
<p>6．如何除去表中相同的行:</p>
<p>找到相同的行：</p>
<p>SELECT * FROM dept a<br>
WHERE ROWID (SELECT MAX(ROWID)<br>
FROM dept b<br>
WHERE a.deptno = b.deptno<br>
AND a.dname = b.dname<br>
-- Make sure all columns are compared<br>
AND a.loc = b.loc);</p>
<p>注释：</p>
<p>如果只找deptno列相同的行，上面的查询可以改为：</p>
<p>SELECT * FROM dept a<br>
WHERE ROWID (SELECT MAX(ROWID)<br>
FROM dept b<br>
WHERE a.deptno = b.deptno)<br>
删除相同的行：<br>
DELETE FROM dept a<br>
WHERE ROWID (SELECT MAX(ROWID<br>
FROM dept b<br>
WHERE a.deptno = b.deptno<br>
AND a.dname = b.dname<br>
-- Make sure all columns are compared<br>
AND a.loc = b.loc);</p>
<p>注意：上面并不删除列值为null的行。</p>
<p>7．如何向数据库中插入两个单引号(&rsquo;&rsquo;):Insert inot dept values(35,&rsquo;aa&rsquo;&rsquo;&rsquo;&rsquo;bb&rsquo;,&rsquo;a&rsquo;&rsquo;b&rsquo;);。在插入时，用两个&rsquo;表示一个&rsquo;。</p>
<p>8．如何设置sql*plus的搜寻路径，这样在用@命令时，就不用输入文件的全路径。</p>
<p>设置SQLPATH环境变量。如：SQLPATH = C:ORANTDBS;C:APPSSCRIPTS;C:MYSCRIPTS</p>
<p>9．@与@@的区别是什么？</p>
<p>@等于start命令，用来运行一个SQL脚本文件。</p>
<p>@命令调用当前目录下的，或指定全路径，或可以通过SQLPATH环境变量搜寻到的脚本文件。</p>
<p>@@用在脚本文件中，用来指定用@@执行的文件与@@所在的文件在同一目录，而不用指定全路径，也不从SQLPATH环境变量指定的路径中寻找文件，该命令一般用在嵌套脚本文件中。</p>
<p>10．&amp;与&amp;&amp;的区别</p>
<p>&amp;用来创建一个临时变量，每当遇到这个临时变量时，都会提示你输入一个值。</p>
<p>&amp;&amp;用来创建一个持久变量，就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样。当用&amp;&amp;命令引用这个变量时，不会每次遇到该变量就提示用户键入值，而只是在第一次遇到时提示一次。</p>
<p>如，将下面三行语句存为一个脚本文件，运行该脚本文件，会提示三次，让输入deptnoval的值：</p>
<p>select count(*) from emp<br>
where deptno = &amp;deptnoval;<br>
select count(*) from emp<br>
where deptno = &amp;deptnoval;<br>
select count(*) from emp<br>
where deptno = &amp;deptnoval;</p>
<p>将下面三行语句存为一个脚本文件，运行该脚本文件，则只会提示一次，让输入deptnoval的值：<br>
select count(*) from emp<br>
where deptno = &amp;&amp;deptnoval;<br>
select count(*) from emp<br>
where deptno = &amp;deptnoval;<br>
select count(*) from emp<br>
where deptno = &amp;deptnoval;</p>
</div>
</font> <a href="http://hi.baidu.com/viplotus/blog/item/20a0d8fccd1fdef4fd037fe8.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/viplotus/blog/category/%B1%E0%B3%CC">编程</a>&nbsp;<a href="http://hi.baidu.com/viplotus/blog/item/20a0d8fccd1fdef4fd037fe8.html#comment">查看评论</a>]]></description>
        <pubDate>2009年06月24日 星期三  11:18</pubDate>
        <category><![CDATA[编程]]></category>
        <author><![CDATA[viplotus]]></author>
		<guid>http://hi.baidu.com/viplotus/blog/item/20a0d8fccd1fdef4fd037fe8.html</guid>
</item>

<item>
        <title><![CDATA[sys和system用户区别[oracle]]]></title>
        <link><![CDATA[http://hi.baidu.com/viplotus/blog/item/6448bf51c1b574878d543042.html]]></link>
        <description><![CDATA[
		
		<p><font face="Times New Roman"><strong style="mso-bidi-font-weight: normal"><span style="font-size: 9pt; line-height: 150%; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">sys</span></strong></font><strong style="mso-bidi-font-weight: normal"><span style="font-size: 9pt; line-height: 150%; mso-bidi-font-size: 12.0pt; mso-bidi-: 0pt">和</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-size: 9pt; line-height: 150%; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><span>system</span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-size: 9pt; line-height: 150%; mso-bidi-font-size: 12.0pt; mso-bidi-: 0pt">用户区别</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>1 )<span style="mso-spacerun: yes">&nbsp;&nbsp;  </span></span></span><span style="font-size: 9pt; mso-bidi-: 0pt">最重要的区别，存储的数据的重要性不同</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="font-size: 8pt">【</span><span style="font-size: 8pt">sys</span><span style="font-size: 8pt">】</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes"><span> </span></span></span><span style="font-size: 9pt; mso-bidi-: 0pt">所有</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>oracle</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">的数据字典的基表和视图都存放在</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>sys</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">用户中，这些基表和视图对于</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>oracle</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">的运行是至关重要的，由数据库自己维护，任何用户都不能手动更改。</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>sys</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">用户拥有</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>dba</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">，</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>sysdba</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">，</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>sysoper</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">等角色或权限，是</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>oracle</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">权限最高的用户。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="font-size: 8pt">【</span><span style="font-size: 8pt">system</span><span style="font-size: 8pt">】</span><span style="font-size: 8pt"><span style="mso-spacerun: yes"> </span></span><span style="font-size: 9pt; mso-bidi-: 0pt">用户用于存放次一级的内部数据，如</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>oracle</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">的一些特性或工具的管理信息。</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>system</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">用户拥有普通</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>dba</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">角色权限。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span><span style="font-size: 9pt; mso-font-kerning: 0pt">&nbsp;&nbsp;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>2)<span style="mso-spacerun: yes">&nbsp;&nbsp;  </span></span></span><span style="font-size: 9pt; mso-bidi-: 0pt">其次的区别，权限的不同。</span></p>
<p style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%"><span style="font-size: 8pt; line-height: 150%"><span>【</span></span><span style="font-size: 8pt; line-height: 150%">system</span><span style="font-size: 8pt; line-height: 150%"><span>】用户只能用</span></span><span style="font-size: 8pt; line-height: 150%">normal</span><span style="font-size: 8pt; line-height: 150%"><span>身份登陆</span></span><span style="font-size: 8pt; line-height: 150%">em</span><span style="font-size: 8pt; line-height: 150%"><span>，除非你对它授予了</span></span><span style="font-size: 8pt; line-height: 150%">sysdba</span><span style="font-size: 8pt; line-height: 150%"><span>的系统权限或者</span></span><span style="font-size: 8pt; line-height: 150%">syspoer</span><span style="font-size: 8pt; line-height: 150%"><span>系统权限。</span></span><span style="font-size: 8pt; line-height: 150%"><br>
</span><span style="font-size: 8pt; line-height: 150%"><span>【</span></span><span style="font-size: 8pt; line-height: 150%">sys</span><span style="font-size: 8pt; line-height: 150%"><span>】用户具有</span></span><span style="font-size: 8pt; line-height: 150%">&ldquo;SYSDBA&rdquo;</span><span style="font-size: 8pt; line-height: 150%"><span>或者</span></span><span style="font-size: 8pt; line-height: 150%">&ldquo;SYSOPER&rdquo;</span><span style="font-size: 8pt; line-height: 150%"><span>系统权限，登陆</span></span><span style="font-size: 8pt; line-height: 150%">em</span><span style="font-size: 8pt; line-height: 150%"><span>也只能用这两个身份，不能用</span></span><span style="font-size: 8pt; line-height: 150%">normal</span><span><span style="font-size: 8pt; line-height: 150%">。</span></span></p>
<p style="margin: 0cm 0cm 0pt; word-break: break-all; text-indent: 16pt; line-height: 150%; mso-char-indent-count: 2.0"><span style="font-size: 8pt; color: black; line-height: 150%"><span>　以</span></span><span style="font-size: 8pt; color: black; line-height: 150%">sys</span><span style="font-size: 8pt; color: black; line-height: 150%"><span>用户登陆</span></span><span style="font-size: 8pt; color: black; line-height: 150%">Oracle</span><span style="font-size: 8pt; color: black; line-height: 150%"><span>，执行</span></span><span style="font-size: 8pt; color: black; line-height: 150%">select * from V_$PWFILE_USERS;</span><span style="font-size: 8pt; color: black; line-height: 150%"><span>可查询到<strong><span style="font-weight: normal; mso-bidi-: bold">具有</span></strong></span></span><strong><span style="font-weight: normal; font-size: 8pt; color: black; line-height: 150%; mso-bidi-font-weight: bold">sysdba</span></strong><strong><span style="font-weight: normal; font-size: 8pt; color: black; line-height: 150%; mso-bidi-: bold">权限的用户，如：</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 16pt; text-align: left; mso-pagination: widow-orphan; mso-char-indent-count: 2.0" align="left"><span style="font-size: 8pt; color: black">SQL&gt; select * from V_$PWFILE_USERS; <br>
</span><span style="font-size: 8pt; color: black">　　</span><span style="font-size: 8pt; color: black">USERNAME SYSDBA SYSOPER<br>
</span><span style="font-size: 8pt; color: black">　　</span><span style="font-size: 8pt; color: black">SYS TRUE TRUE</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%; text-align: left; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1" align="left"><span style="font-size: 9pt; line-height: 150%; mso-bidi-font-size: 12.0pt; mso-fareast-: 0pt"><span style="mso-list: Ignore"><span style="font: 7pt Times New Roman">&nbsp;&nbsp;  </span></span></span><strong style="mso-bidi-font-weight: normal"><span style="font-size: 9pt; line-height: 150%; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><span>Sysdba</span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-size: 9pt; line-height: 150%; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">和</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-size: 9pt; line-height: 150%; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt"><span>sysoper</span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-size: 9pt; line-height: 150%; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt">两个系统权限区别</span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="font-size: 8pt">normal </span><span style="font-size: 8pt">、</span><span style="font-size: 8pt">sysdba</span><span style="font-size: 8pt">、</span><span style="font-size: 8pt"> sysoper</span><span style="font-size: 8pt">有什么区别</span><span style="font-size: 8pt"><br>
normal </span><span style="font-size: 8pt">是普通用户</span><span style="font-size: 8pt"> <br>
</span><span style="font-size: 8pt">另外两个，你考察他们所具有的权限就知道了</span><span style="font-size: 8pt"><br>
sysdba</span><span style="font-size: 8pt">拥有最高的系统权限，登陆后是</span><span style="font-size: 8pt"> sys<br>
sysoper</span><span style="font-size: 8pt">主要用来启动、关闭数据库，</span><span style="font-size: 8pt">sysoper </span><span style="font-size: 8pt">登陆后用户是</span><span style="font-size: 8pt"> public<br>
</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>sysdba</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">和</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>sysoper</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">属于</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>system privilege</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">，也称为</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>administrative privilege</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">，拥有例如数据库开启关闭之类一些系统管理级别的权限</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>sysdba</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">和</span><span style="font-size: 9pt; mso-font-kerning: 0pt"><span>sysoper</span></span><span style="font-size: 9pt; mso-bidi-: 0pt">具体的权限可以看下表：
<table class="FCK__ShowTableBorders" style="width: 245pt; border-collapse: collapse" cellspacing="0" cellpadding="0" width="327" border="0">
    <colgroup><col style="width: 54pt" width="72"></col><col style="width: 137pt; mso-width-source: userset; mso-width-alt: 5856" width="183"></col><col style="width: 54pt" width="72"></col></colgroup>
    <tbody>
        <tr style="height: 15pt" height="20">
            <td class="xl24" style="border-right: windowtext 1pt solid; border-top: black 0.5pt solid; border-left: black 0.5pt solid; width: 54pt; border-bottom: windowtext 1pt solid; height: 15pt; background-color: yellow" width="72" height="20"><span style="mso-bidi-: 0pt"><span><font size="2">系统权限</font></span></span></td>
            <td class="xl25" style="border-right: windowtext 1pt solid; border-top: black 0.5pt solid; border-left: silver 0.5pt solid; width: 137pt; border-bottom: windowtext 1pt solid; background-color: yellow" width="183"><span><span><font face="Times New Roman" size="2">sysdba</font></span></span></td>
            <td class="xl26" style="border-right: black 0.5pt solid; border-top: black 0.5pt solid; border-left: silver 0.5pt solid; width: 54pt; border-bottom: windowtext 1pt solid; background-color: yellow" width="72"><span><span><font face="Times New Roman" size="2">sysoper</font></span></span></td>
        </tr>
        <tr style="height: 24.75pt" height="33">
            <td class="xl33" style="border-right: windowtext 1pt solid; border-top: windowtext; border-left: black 0.5pt solid; width: 54pt; border-bottom: black 0.5pt solid; height: 408.75pt; background-color: transparent" width="72" height="545" rowspan="12"><span style="mso-bidi-: 0pt"><font size="2">区别</font></span></td>
            <td class="xl22" style="border-right: windowtext 1pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 137pt; border-bottom: windowtext 1pt solid; background-color: transparent" width="183"><span><span><font size="2"><font face="Times New Roman">Startup(</font><font class="font5">启动数据库</font><font class="font6" face="Times New Roman">)</font></font></span></span></td>
            <td class="xl27" style="border-right: black 0.5pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 54pt; border-bottom: windowtext 1pt solid; background-color: transparent" width="72"><span><span><font face="Times New Roman" size="2">startup</font></span></span></td>
        </tr>
        <tr style="height: 24.75pt" height="33">
            <td class="xl22" style="border-right: windowtext 1pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 137pt; border-bottom: windowtext 1pt solid; height: 24.75pt; background-color: transparent" width="183" height="33"><span><span><font size="2"><font face="Times New Roman">Shutdown(</font><font class="font5">关闭数据库</font><font class="font6" face="Times New Roman">)</font></font></span></span></td>
            <td class="xl27" style="border-right: black 0.5pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 54pt; border-bottom: windowtext 1pt solid; background-color: transparent" width="72"><span><span><font face="Times New Roman" size="2">shutdown</font></span></span></td>
        </tr>
        <tr style="height: 36.75pt" height="49">
            <td class="xl22" style="border-right: windowtext 1pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 137pt; border-bottom: windowtext 1pt solid; height: 36.75pt; background-color: transparent" width="183" height="49"><span><span><font face="Times New Roman" size="2">alter database open/mount/backup</font></span></span></td>
            <td class="xl27" style="border-right: black 0.5pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 54pt; border-bottom: windowtext 1pt solid; background-color: transparent" width="72"><span><span><font face="Times New Roman" size="2">alter database open/mount/backup</font></span></span></td>
        </tr>
        <tr style="height: 15pt" height="20">
            <td class="xl23" style="border-right: windowtext 1pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 137pt; border-bottom: windowtext 1pt solid; height: 15pt; background-color: transparent" width="183" height="20"><span style="mso-bidi-: 0pt"><font size="2">改变字符集</font></span></td>
            <td class="xl28" style="border-right: black 0.5pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 54pt; border-bottom: windowtext 1pt solid; background-color: #00ccff" width="72"><span><span><font face="Times New Roman" size="2">none</font></span></span></td>
        </tr>
        <tr style="height: 36.75pt" height="49">
            <td class="xl22" style="border-right: windowtext 1pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 137pt; border-bottom: windowtext 1pt solid; height: 36.75pt; background-color: transparent" width="183" height="49"><span><span><font size="2"><font face="Times New Roman">create database(</font><font class="font5">创建数据库</font><font class="font6" face="Times New Roman">)</font></font></span></span></td>
            <td class="xl28" style="border-right: black 0.5pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 54pt; border-bottom: windowtext 1pt solid; background-color: #00ccff" width="72"><span><span><font size="2"><font face="Times New Roman">None</font><font class="font5">不能创建数据库</font></font></span></span></td>
        </tr>
        <tr style="height: 36.75pt" height="49">
            <td class="xl22" style="border-right: windowtext 1pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 137pt; border-bottom: windowtext 1pt solid; height: 36.75pt; background-color: transparent" width="183" height="49"><span><span><font size="2"><font face="Times New Roman">drop database(</font><font class="font5">删除数据库</font><font class="font6" face="Times New Roman">)</font></font></span></span></td>
            <td class="xl28" style="border-right: black 0.5pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 54pt; border-bottom: windowtext 1pt solid; background-color: #00ccff" width="72"><span><span><font face="Times New Roman" size="2">none</font></span></span></td>
        </tr>
        <tr style="height: 15pt" height="20">
            <td class="xl22" style="border-right: windowtext 1pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 137pt; border-bottom: windowtext 1pt solid; height: 15pt; background-color: transparent" width="183" height="20"><span><span><font face="Times New Roman" size="2">create spfile</font></span></span></td>
            <td class="xl27" style="border-right: black 0.5pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 54pt; border-bottom: windowtext 1pt solid; background-color: transparent" width="72"><span><span><font face="Times New Roman" size="2">create spfile</font></span></span></td>
        </tr>
        <tr style="height: 36.75pt" height="49">
            <td class="xl22" style="border-right: windowtext 1pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 137pt; border-bottom: windowtext 1pt solid; height: 36.75pt; background-color: transparent" width="183" height="49"><span><span><font size="2"><font face="Times New Roman">alter database archivelog(</font><font class="font5">归档日志</font><font class="font6" face="Times New Roman">)</font></font></span></span></td>
            <td class="xl27" style="border-right: black 0.5pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 54pt; border-bottom: windowtext 1pt solid; background-color: transparent" width="72"><span><span><font face="Times New Roman" size="2">alter database archivelog</font></span></span></td>
        </tr>
        <tr style="height: 48.75pt" height="65">
            <td class="xl22" style="border-right: windowtext 1pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 137pt; border-bottom: windowtext 1pt solid; height: 48.75pt; background-color: transparent" width="183" height="65"><span><span><font size="2"><font face="Times New Roman">alter database recover(</font><font class="font5">恢复数据库</font><font class="font6" face="Times New Roman">)</font></font></span></span></td>
            <td class="xl29" style="border-right: black 0.5pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 54pt; border-bottom: windowtext 1pt solid; background-color: #00ccff" width="72"><span style="mso-bidi-: 0pt"><font size="2">只能完全恢复，不能执行不完全恢复</font></span></td>
        </tr>
        <tr style="height: 48.75pt" height="65">
            <td class="xl23" style="border-right: windowtext 1pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 137pt; border-bottom: windowtext 1pt solid; height: 48.75pt; background-color: transparent" width="183" height="65"><span style="mso-bidi-: 0pt"><font size="2">拥有<font class="font6" face="Times New Roman">restricted session(</font><font class="font5">会话限制</font><font class="font6" face="Times New Roman">)</font><font class="font5">权限</font></font></span></td>
            <td class="xl30" style="border-right: black 0.5pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 54pt; border-bottom: windowtext 1pt solid; background-color: transparent" width="72"><span style="mso-bidi-: 0pt"><font size="2">拥有<font class="font6" face="Times New Roman">restricted session</font><font class="font5">权限</font></font></span></td>
        </tr>
        <tr style="height: 60.75pt" height="81">
            <td class="xl23" style="border-right: windowtext 1pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 137pt; border-bottom: windowtext 1pt solid; height: 60.75pt; background-color: transparent" width="183" height="81"><span style="mso-bidi-: 0pt"><font size="2">可以让用户作为<font class="font6" face="Times New Roman">sys</font><font class="font5">用户连接</font></font></span></td>
            <td class="xl29" style="border-right: black 0.5pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 54pt; border-bottom: windowtext 1pt solid; background-color: #00ccff" width="72"><span style="mso-bidi-: 0pt"><font size="2">可以进行一些基本的操作，但不能查看用户数据</font></span></td>
        </tr>
        <tr style="height: 24pt" height="32">
            <td class="xl31" style="border-right: windowtext 1pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 137pt; border-bottom: black 0.5pt solid; height: 24pt; background-color: transparent" width="183" height="32"><span style="mso-bidi-: 0pt"><font size="2">登录之后用户是<font class="font6" face="Times New Roman">sys</font></font></span></td>
            <td class="xl32" style="border-right: black 0.5pt solid; border-top: silver 0.5pt solid; border-left: silver 0.5pt solid; width: 54pt; border-bottom: black 0.5pt solid; background-color: #00ccff" width="72"><span style="mso-bidi-: 0pt"><font size="2">登录之后用户是<font class="font6" face="Times New Roman">public</font></font></span></td>
        </tr>
    </tbody>
</table>
</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"> </p>
<span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>system</span></span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">如果正常登录，它其实就是一个普通的</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>dba</span></span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">用户，但是如果以</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>as sysdba</span></span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">登录，其结果实际上它是作为</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>sys</span></span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">用户登录的，这一点类似</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>Linux</span></span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">里面的</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>sudo</span></span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">的感觉，从登录信息里面我们可以看出来。因此在</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>as sysdba</span></span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">连接数据库后，创建的对象实际上都是生成在</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>sys</span></span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">中的。其他用户也是一样，如果</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span> as sysdba</span></span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">登录，也是作为</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>sys</span></span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">用户登录的，看以下实验：</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span> </span></span>
<p> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">SQL&gt; create user strong identified by strong;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">用户已创建。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">SQL&gt; conn strong/strong@magick as sysdba;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">已连接。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">SQL&gt; show user;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">USER </span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">为</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"> &quot;SYS&quot;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">SQL&gt; create table test(a int);</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">表已创建。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">SQL&gt; select owner from dba_tables where table_name='test';</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">未选定行</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"> //</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">因为创建表时</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">oracle</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">自动转为大写，所以用小写查的时候是不存在的；</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">SQL&gt; select owner from dba_tables where table_name='TEST';</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">OWNER</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">------------------------------</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">SYS</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&Oslash;</span><span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span><strong style="mso-bidi-font-weight: normal"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">dba</span></strong></span><strong style="mso-bidi-font-weight: normal"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">和</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>sysdba</span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">的区别</span></strong><strong style="mso-bidi-font-weight: normal"><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br>
</span></strong><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>dba</span></span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">、</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>sysdba</span></span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">这两个系统角色有什么区别呢</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span> </span><span><br>
</span></span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">在说明这一点之前我需要说一下</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>oracle</span></span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">服务的创建过程</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br>
</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>·</span></span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">创建实例→</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>·</span></span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">启动实例→</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>·</span></span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">创建数据库</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>(system</span></span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">表空间是必须的</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>)<br>
</span></span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">启动过程</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><br>
</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>·</span></span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">实例启动→</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>·</span></span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">装载数据库→</span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><span>·</span></span><span style="color: black; line-height: 150%; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">打开数据库</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; word-break: break-all; line-height: 12.65pt; text-align: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">sysdba</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">，是管理</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">oracle</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">实例的，它的存在不依赖于整个数据库完全启动，只要实例启动了，他就已经存在，以</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">sysdba</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">身份登陆，装载数据库、打开数据库。只有数据库打开了，或者说整个数据库完全启动后，</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">dba</span><span style="color: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">角色才有了存在的基础！</span></p> <a href="http://hi.baidu.com/viplotus/blog/item/6448bf51c1b574878d543042.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/viplotus/blog/category/%B1%E0%B3%CC">编程</a>&nbsp;<a href="http://hi.baidu.com/viplotus/blog/item/6448bf51c1b574878d543042.html#comment">查看评论</a>]]></description>
        <pubDate>2009年05月19日 星期二  10:44</pubDate>
        <category><![CDATA[编程]]></category>
        <author><![CDATA[viplotus]]></author>
		<guid>http://hi.baidu.com/viplotus/blog/item/6448bf51c1b574878d543042.html</guid>
</item>

<item>
        <title><![CDATA[收集——150条生活小窍门]]></title>
        <link><![CDATA[http://hi.baidu.com/viplotus/blog/item/48bba3def5234e50cdbf1a38.html]]></link>
        <description><![CDATA[
		
		<font color="#0000ff" size="5">1、生活窍门:巧用牙膏:若有小面积皮肤损伤或烧伤、烫伤，抹上少许牙膏，可立即止血止痛，也可防止感染，疗效颇佳。<br>
<br>
　&nbsp;&nbsp; 2、生活窍门:巧除纱窗油腻:可将洗衣粉、吸烟剩下的烟头一起放在水里，待溶解后，拿来擦玻璃窗、纱窗，效果均不错。<br>
<br>
　　3、生活窍门:将虾仁放入碗内，加一点精盐、食用碱粉，用手抓搓一会儿后用清水浸泡，然后再用清水洗净，这样能使炒出的虾仁透明如水晶，爽嫩可口。<br>
<br>
　　4、生活窍门:和饺子面的窍门:在1斤面粉里掺入6个蛋清，使面里蛋白质增加，包的饺子下锅后蛋白质会很快凝固收缩，饺子起锅后收水快，不易粘连 <br>
<br>
　　5、生活窍门:将残茶叶浸入水中数天后，浇在植物根部，可促进植物生长；把残茶叶晒干，放到厕所或沟渠里燃熏，可消除恶臭，具有驱除蚊蝇的功能。<br>
<br>
　　6、生活窍门:夹生饭重煮法:如果是米饭夹生，可用筷子在饭内扎些直通锅底的孔，洒入少许黄酒重焖，若只表面夹生，只要将表层翻到中间再焖即可。<br>
<br>
　　7、生活窍门:烹调蔬菜时如果必须要焯，焯好菜的水最好尽量利用。如做水饺的菜，焯好的水可适量放在肉馅里，这样即保存营养，又使水饺馅味美有汤。 <br>
<br>
　　8、生活窍门:炒鸡蛋的窍门:将鸡蛋打入碗中，加入少许温水搅拌均匀，倒入油锅里炒，炒时往锅里滴少许酒，这样炒出的鸡蛋蓬松、鲜嫩、可口。<br>
<br>
　　9、生活窍门:如何使用砂锅:新买来的砂锅第一次使用时，最好用来熬粥，或者用它煮一煮浓淘米水，以堵塞砂锅的微细孔隙，防止渗水。<br>
<br>
　　10、生活窍门:巧用&ldquo;十三香&rdquo;:炖肉时用陈皮，香味浓郁；吃牛羊肉加白芷，可除膻增鲜；自制香肠用肉桂，味道鲜美；熏肉熏鸡用丁香，回味无穷。<br>
<br>
　　11、生活窍门:和饺子面的窍门:面要和的略硬一点，和好后放在盆里盖严密封，饧10-15分钟，等面中麦胶蛋白吸水膨胀，充分形成面筋后再包饺子。 <br>
<br>
　　12、生活窍门:香菜是一种伞形花科类植物，富含香精油，香气浓郁，但香精油极易挥发，且经不起长时间加热，香菜最好在食用前加入，以保留其香气。<br>
<br>
　　13、生活窍门:当进行高温洗涤或干衣程序时，不可碰触机门玻璃，以免烫伤。拿出烘干的衣物时，要小心衣物上的金属部分，如拉链、纽扣等，以免烫伤。<br>
<br>
　　14、生活窍门:如果衣领和袖口较脏，可将衣物先放进溶有洗衣粉的温水中浸泡15-20分钟，再进行正常洗涤，就能洗干净。<br>
<br>
　　15、生活窍门:如何使用砂锅:用砂锅熬汤、炖肉时，要先往砂锅里放水，再把砂锅置于火上，先用文火，再用旺火。<br>
<br>
　　16、生活窍门:烹调蔬菜时，加点菱粉类淀粉，使汤变得稠浓，不但可使烹调出的蔬菜美味可口，而且由于淀粉含谷胱甘肽，对维生素有保护作用。<br>
<br>
　　17、生活窍门:米饭若烧糊了，赶紧将火关掉，在米饭上面放一块面包皮，盖上锅盖，5分钟后，面包皮即可把糊味吸收。 <br>
<br>
　　18、生活窍门:洗衣粉用量:若衣服不太脏或洗涤时泡沫过多，则要减少洗衣粉用量。避免洗衣粉使用过量，不仅省钱而且保护环境，可令洗衣机更耐用。<br>
<br>
　　19、生活窍门:煮饺子时要添足水，待水开后加入2%的食盐，溶解后再下饺子，能增加面筋的韧性，饺子不会粘皮、粘底，饺子的色泽会变白，汤清饺香。<br>
<br>
　　20、生活窍门:许多人爱吃青菜却不爱喝菜汤，事实上，烧菜时，大部分维生素已溶解在菜汤里。比如小白菜炒好后，会有70%的维生素Ｃ溶解在菜汤里。 <br>
<br>
　　21、生活窍门:白袜子若发黄了，可用洗衣粉溶液浸泡30分钟后再进行洗涤。对于衣服上的奶渍，可用洗衣粉进行污渍预处理，然后再进行正常洗涤。<br>
<br>
　　22、生活窍门:如何使用砂锅:从火上端下砂锅时，一定要放在干燥的木板或草垫上，切不要放在瓷砖或水泥地面上。<br>
<br>
　　23、生活窍门:烧荤菜时，在加了酒后，再加点醋，菜就会变得香喷喷的。烧豆芽之类的素菜时，适当加点醋，味道好营养也好，因为醋对维生素有保护作用。 <br>
<br>
　　24、生活窍门:面包能消除衣服油迹:用餐时，衣服如果被油迹所染，可用新鲜白面包轻轻摩擦，油迹即可消除。 <br>
<br>
　　25、生活窍门:用残茶叶擦洗木、竹桌椅，可使之更为光洁。把残茶叶晒干，铺撒在潮湿处，能够去潮；残茶叶晒干后，还可装入枕套充当枕芯，非常柔软。<br>
<br>
　　26、生活窍门:饺子煮熟以后，先用笊篱把饺子捞出，随即放入温开水中浸涮一下，然后再装盘，饺子就不会互相粘在一起了。<br>
<br>
　　27、生活窍门:炒鲜虾的窍门:炒鲜虾之前，可先将虾用浸泡桂皮的沸水冲烫一下，然后再炒，这样炒出来的虾，味道更鲜美。<br>
<br>
　　28、生活窍门:蔬菜尽可能做到现炒现吃，避免长时间保温和多次加热。另外，为使菜梗易熟，可在快炒后加少许水闷熟。<br>
<br>
　　29、生活窍门:面包能消除地毯污迹:家中的小块地毯如果脏了，可用热面包渣擦拭，然后将其挂在阴凉处，24小时后，污迹即可除净。<br>
<br>
　　30、生活窍门:男子剃须时，可用牙膏代替肥皂，由于牙膏不含游离碱，不仅对皮肤无刺激，而且泡沫丰富，气味清香，使人有清凉舒爽之感。<br>
<br>
　　31、生活窍门:风油精的妙用:在电风扇的叶子上洒上几滴风油精，随着风叶的不停转动，可使满室清香，而且有驱赶蚊子的效用。<br>
<br>
　　32、生活窍门:刷油漆前，先在双手上抹层面霜，刷过油漆后把奶油涂于沾有油漆的皮肤上，用干布擦拭，再用香皂清洗，就能把附着于皮肤上的油漆除掉。<br>
<br>
　　33、生活窍门:豆腐一般都会有一股卤水味。豆腐下锅前，如果先在开水中浸泡10多分钟，便可除去卤水味，这样做出的豆腐不但口感好，而且味美香甜。<br>
<br>
　　34、生活窍门:煮鸡蛋时，可先将鸡蛋放入冷水中浸泡一会，再放入热水里煮，这样煮好的鸡蛋蛋壳不破裂，且易于剥掉。<br>
<br>
　　35、生活窍门:手表受磁，会影响走时准确。消除方法很简单，只要找一个未受磁的铁环，将表放在环中，慢慢穿来穿去，几分钟后，手表就会退磁复原。<br>
<br>
　　36、生活窍门:豆腐性偏寒，平素有胃寒者，如食用豆腐后有胸闷、反胃等现象，则不宜食用；易腹泻、腹胀脾虚者，也不宜多食豆腐。<br>
<br>
　　37、生活窍门:牙膏也有洁肤功能！洗澡时用牙膏代替浴皂搓身去污，既有明显的洁肤功能，还能使浴后浑身凉爽，而且还有预防痱子的作用。<br>
<br>
　　38、生活窍门:用微波炉做菜时，首先要用调料将原料浸透。这是因为微波烹任过程快，若不浸润透很难入味，且葱、姜、蒜等增香的作用也难以发挥。<br>
<br>
　　39、生活窍门:葡萄汁送服降压药效果好！用葡萄汁代替白开水送服降压药，能使血压降得平稳，且不会出现血压忽高忽低的现象。<br>
<br>
　　40、生活窍门:煮饭不宜用生水。因为自来水中含有氯气，在烧饭过程中，它会破坏粮食中所含的维生素B1，若用开水煮饭，维生素B1可免受损失。<br>
<br>
　　41、生活窍门:砧板防裂小窍门:买回新砧板后，在砧板上下两面及周边涂上食用油，待油吸干后再涂，涂三四遍，油干后即可使用，这样砧板便会经久耐用 。<br>
<br>
　　42、生活窍门:风油精的妙用:洗澡时，在水中加入数滴风油精，浴后会有浑身清凉舒爽感觉，还有防治痱子、防蚊叮咬、祛除汗臭的作用。<br>
<br>
　　43、生活窍门:炸馒头片时，先将馒头片在冷水里浸一下，然后再入锅炸，这样炸好的馒头片焦黄酥脆，既好吃又省油。<br>
<br>
　　44、生活窍门:做菜或做汤时，如果做咸了，可拿一个洗净的土豆切成两半放入汤里煮几分钟，这样，汤就能由咸变淡了。<br>
<br>
　　45、生活窍门:舒缓眼部疲劳小窍门:用水浸泡药用小米草或母菊花，然后将毛巾浸湿，敷于眼部10到15分钟，可有效舒缓眼部疲劳。<br>
<br>
　　46、生活窍门:夏日天气炎热，身上容易长痱子，可用温水将长有痱子的部位洗净，涂擦一层牙膏，痱子不久即可消失。<br>
<br>
　　47、生活窍门:室内厕所即使冲洗得再干净，也常会留下一股臭味，只要在厕所内放置一小杯香醋，臭味便会消失。其有效期为六、七天，可每周换一次。<br>
<br>
　　48、生活窍门:如果用陈米做米饭，淘过米之后，可在往米中加水的同时，加入1/4或1/5啤酒，这样蒸出来的米饭香甜，且有光泽，如同新米一样。<br>
<br>
　　49、生活窍门:煮饺子时，饺子皮和馅中的水溶性营养素除因受热小部分损失之外，大部分都溶解在汤里，所以，吃水饺最好把汤也喝掉。<br>
<br>
　　50、生活窍门:热水泡双手可治偏头痛。把双手浸入热水中，水量以浸过手腕为宜，并不断地加热水，以保持水温。半小时后，痛感即可减轻，甚至完全消失。 <br>
<br>
　　<br>
</font>
<div class="t_msgfont" ><span ><font color="#0000ff" size="5">51、生活窍门:忌食鲜黄花菜！因为鲜黄花菜内含秋水仙碱有毒物质，食用后会导致恶心、腹泻等。而加工后的干黄花菜已将秋水仙碱溶出，食用则不会中毒。 <br>
<br>
　　52、生活窍门:风油精的妙用:在点燃的蚊香上洒几滴风油精，蚊香放出的烟气不会呛，而且清香扑鼻，驱蚊效果也会更佳。<br>
<br>
　　53、生活窍门:在洗碗水中放几片柠檬皮和橘子皮，或滴几滴醋，能消除碗碟等餐具上的异味。同时，它还能使硬水软化，同时增加瓷器的光泽感。<br>
<br>
　　54、生活窍门:皮肤小面积擦伤会导致局部肿胀，这时可在伤口处涂些牙膏，不仅具有止痛、止血、减轻肿胀的功效，还有防止伤口化脓的作用。<br>
<br>
　　55、生活窍门:烤肉防焦小窍门:烤肉时，可在烤箱里放一只盛有水的器皿，因为器皿中的水可随烤箱内温度的升高而变成水蒸气，防止烤肉焦糊。<br>
<br>
　　56、生活窍门:巧洗带鱼:带鱼身上的腥味和油腻较大，用清水很难洗净，可把带鱼先放在碱水中泡一下，再用清水洗，就会很容易洗净，而且无腥味。<br>
<br>
　　57、生活窍门:芥末煮水洗脚可降血压。将80克芥末面放在洗脚盆里，加半盆水搅匀，用炉火煮开，稍凉后洗脚。每天早晚1次，1天后血压就可下降。<br>
<br>
　　58、生活窍门:煮排骨时放点醋，可使排骨中的钙、磷、铁等矿物质溶解出来，利于吸收，营养价值更高。此外，醋还可以防止食物中的维生素被破坏。<br>
<br>
　　59、生活窍门:巧剥蒜皮:将蒜用温水泡3-5分钟捞出，用手一搓，蒜皮即可脱落。如需一次剥好多蒜，可将蒜摊在案板上，用刀轻轻拍打即可脱去蒜皮。<br>
<br>
　　60、生活窍门:蚊香定时熄灭法:用一个铁夹子，用时夹在蚊香所需要的长度上，当蚊香烧到铁夹夹的地方时，就会熄灭，既不影响睡眠，也可节约蚊香。<br>
<br>
　　61、生活窍门:面包与饼干不宜一起存放。面包含水分较多，饼干一般则是干而脆，两者如果存放在一起，就会使面包变硬，饼干也会因受潮失去酥脆感。<br>
<br>
　　62、生活窍门:烧糖醋鱼块及其它需放醋的菜肴时，最好在即将起锅时再放醋，这样能充分保持醋味，若放的过早，醋就会在烹调过程中蒸发掉而使醋味大减 <br>
<br>
　　63、生活窍门:梨可防晒！常食梨能使肌肤保持弹性，不起皱纹。梨中含有丰富的维生素E，对太阳光的暴晒能起到防护作用。<br>
<br>
　　64、生活窍门:各种染发剂在室温或炎热的天气中，均会失去部分功能或改变色泽。若放在冰箱中保存，可长期保持其原有的功能，不会变质。 <br>
<br>
　　65、生活窍门:冷冻食品解冻法1:肉类:适宜在室温下自然解冻，在水中解冻会使营养流失；家禽:宜在水中解冻，但未去内脏的最好在室温下自然解冻。<br>
<br>
　　66、生活窍门:彩电不能自行接地线，如果接地线，一旦电源插头接反时，会使机内地线与电源的火线接通而使机架等部件带电，这样会有触电的危险。<br>
<br>
　　67、生活窍门:揭胶纸、胶带的妙法:贴在墙上的胶纸或胶带，如果生硬去揭，会损坏物件，可用蒸汽熨斗熨一下，就能很容易揭去了。<br>
<br>
　　68、生活窍门:皮鞋霉斑清除法:皮鞋放久了发霉时，可用软布蘸酒精加水（1:1）溶液进行擦拭，然后放在通风处晾干。对发霉的皮包也可如此处理。 <br>
<br>
　　69、生活窍门:巧制肉馅:将要做馅的肉放入冰箱冷冻，待完全冻实后取出，用擦菜板擦肉，很容易就能擦把冻肉成细条，之后，只需用刀剁几下就可以了。<br>
<br>
　　70、生活窍门:皱褶身份证复原法:将身份证放在桌上，上面盖一两层纸，用熨斗隔纸熨烫（温度不易过高），熨好一面再熨另一面，即可使之平展如初。<br>
<br>
　　71、生活窍门:电吹风治疗肩周炎！用电吹风以适当距离对准患者肩部用热风吹约10分钟，每天两次，3周可愈。若先在患者肩部擦上药酒再吹，效果更佳。 <br>
<br>
　　72、生活窍门:煮肉的时候，如果想使汤味鲜美，应该把肉放入冷水中慢慢地煮；如果想使肉味鲜美，则应该把肉放在热水里煮。 <br>
<br>
　　73、生活窍门:宝石戒指如何清洗？可用棉棒在氧化镁和氨水混合物，或花露水、甘油中沾湿，擦洗宝石和框架，然后用绒布擦亮即可。 <br>
<br>
　　74、生活窍门:芦笋可减肥！芦笋能提高人体的基础代谢，促进人体内热量的消耗，并有很强的脱水能力，因此，多吃新鲜芦笋能变得苗条。 <br>
<br>
　　75、生活窍门:如何让蜡烛不&ldquo;流泪&rdquo;？生日蜡烛用之前先放到冰箱的冷冻室里冷冻24小时，再插到蛋糕上，点燃后就没有烛油流下而弄脏蛋糕了。 <br>
<br>
　　76、生活窍门:夏天甲鱼易被蚊子叮咬而死亡，但如果将甲鱼养在冰箱冷藏的果盘盒内，既可防止蚊子叮咬，又可延长甲鱼的存活时间。 <br>
<br>
　　77、生活窍门:冷冻食品解冻法:鱼类:宜在5%的40-50度食盐水中解冻；蛋品:可装在不透水的金属容器中，将容器浸在20度的水中迅速解冻 。<br>
<br>
　　78、生活窍门:茶叶与食糖、糖果不宜一起存放。茶叶易吸潮，而食糖、糖果却恰恰含水分多，这两类物品存放在一起，就会使茶叶因受潮而发霉或变味。 <br>
<br>
　　79、生活窍门:洗涤面粉袋时不要在水中搓洗，可将面袋放在清水中泡1-2天，待发酵后，面粉会从面袋上自动脱落，这时再用清水漂洗，即可干净如初。 <br>
<br>
　　80、生活窍门:茶叶受潮不要晒！夏季茶叶容易受潮，若把受潮的茶叶放到太阳下晒就会走味。可用铁锅慢火炒至水气消失，晾干后密封保存，可保持其原味。 <br>
<br>
　　81、生活窍门:牛仔裤穿时间长了就会褪色。可以把新买来的牛仔裤放入浓盐水中浸泡12小时后，再用清水洗净，以后再洗涤时就不会褪色了。 <br>
<br>
　　82、生活窍门:丝瓜治慢性喉炎。用丝瓜绞汁或将丝瓜藤切断，让其汁自然滴出，放入碗内，上锅蒸熟，再加适量冰糖饮用，就能有效治疗慢性喉炎。 <br>
<br>
　　83、生活窍门:有的人吃药总是把药片掰开吃，以为药片小了利于吞咽。其实药片掰开后变成尖的，反而不利于下咽，还易划伤食道，所以药片不要掰开吃。 <br>
<br>
　　84、生活窍门:指甲油长久不脱落法:涂指甲油之前，先用棉花蘸点醋把指甲擦干净，等醋干后再涂指甲油，这样指甲油就不容易脱落了。 <br>
<br>
　　85、生活窍门:识别手机的窍门:正版手机机身号码，外包装号码，从手机上调出的号码三号一致。在验钞机下，进网许可标签右下角显示CMII字样。 <br>
<br>
　　86、生活窍门:巧切松花蛋:用刀切松花蛋，蛋黄会粘在刀上，可用丝线将松花蛋割开，既均匀又不粘蛋黄。将刀在热水中烫一下再切，也能切的整齐漂亮。 <br>
<br>
　　87、生活窍门:不能用茶叶煮鸡蛋！因为茶叶中除含有生物碱外，还有多种酸化物质，这些化合物与鸡蛋中的铁元素结合，对胃有刺激作用，不利于消化吸收。 <br>
<br>
　　88、生活窍门:瓜果的清洗:食用前，先将瓜果在盐水中浸泡20-30分钟，可去除瓜果表皮残存的农药或寄生虫卵，且盐水还有杀灭某些病菌的作用。<br>
<br>
　　89、生活窍门:高压锅烹调火候:高压锅烹调时间从限压阀首次出气算起。鸡1千克加水2千克，18分钟可脱骨；排骨1千克加水2千克，20分钟可脱骨。<br>
<br>
　　90、生活窍门:巧选茶叶:看匀度，将茶叶倒入茶盘里，手拿茶盘向一定方向旋转数圈，使不同形状的茶叶分出层次中段茶越多，表明匀度越好。<br>
<br>
　　91、生活窍门:洋葱防衰老。洋葱对人体的结缔组织和关节有益。洋葱不仅能提供人体需要的许多养分，还含有微量元素硒，因此，多食洋葱能够预防衰老。<br>
<br>
　　92、生活窍门:巧除家电缝隙的灰尘:家用电器的缝隙里常常会积藏很多灰尘，且用布不宜擦净，可将废旧的毛笔用来清除缝隙里的灰尘，非常方便。<br>
<br>
　　93、生活窍门:首饰收藏与保养的窍门:轻拿轻放，避免碰撞与磨擦；避免受高温和酸、碱溶液接触；经常检查，防止宝石脱落；及时取下收藏和清洗保存。<br>
<br>
　　94、生活窍门:牛奶渍鱼格外香！把收拾好的鱼放到牛奶里泡一下，取出后裹一层干面粉，再入热油锅中炸制，其味道格外香美。<br>
<br>
　　95、生活窍门:鉴别珍珠的窍门:将珍珠放在阴暗处，闪闪发光的是上等珍珠；珍珠表面的清洁度和颜色决定珍珠的价值；珍珠越大、越圆越有价值。<br>
<br>
　　96、生活窍门:大枣巧去皮:将干的大枣用清水浸泡3小时，然后放入锅中煮沸，待大枣完全泡开发胖时，将其捞起剥皮，很容易就能剥掉。<br>
<br>
　　97、生活窍门:巧选茶叶:看茶叶松紧，紧而重实的质量好，粗而松弛、细而碎的质量差；看净度，茶叶中有较多茶梗、叶柄、茶籽及杂质的质量差。<br>
<br>
　　98、生活窍门:空腹不宜吃柿子。如果空腹吃大量未加工或未去皮的柿子，而胃里的游离酸含量又较高时，就会凝结成块，形成柿石，引起肚子疼、呕吐等。<br>
<br>
　　99、生活窍门:巧洗铁锅油垢:炒菜锅用久了，锅上积存的油垢很难清除掉，如果将新鲜的梨皮放在锅里加水煮一会儿，油垢就很容易清除了。<br>
<br>
　　100、生活窍门:瓶子上的塑料瓶盖有时因拧得太紧而打不开，此时可将整个瓶子放入冰箱中（冬季可放在室外）冷冻一会儿，然后再拧，很容易就能拧开。 <br>
<br>
　　</font></span></div>
<div class="t_msgfont" ><span ><font size="5"><font color="#0000ff">  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; 101、生活窍门:豆腐可用来美容！每天早晨起床后，用豆腐一块，放在掌心，用以摩擦面部几分钟，坚持一个月，面部肌肤就会变得白嫩滋润。<br>
<br>
　　102、生活窍门:高压锅烹调火候:牛肉1千克加水2千克，17分钟即可将肉煮烂；大米1500克加水1千克，9分钟即可煮熟。<br>
<br>
　　103、生活窍门:拉链的保养:拉链不能拉得太急、太猛；不能崩得太紧；保持干燥，防止和酸、碱东西接触；拉链发涩，可涂点蜡，轻轻拉几下，就不涩了。<br>
<br>
　　104、生活窍门:巧选茶叶:看色泽，绿茶翠绿有光的质量好；红茶褐色带油润的质量好；若绿茶含较多白毫，红茶含较多橙黄色芽头，均为高级茶。<br>
<br>
　　105、生活窍门:海参的贮藏:将海参晒得干透，装入双层食品塑料袋中，加几头蒜，然后扎紧袋口，悬挂在高处，不会变质生虫。<br>
<br>
　　106、生活窍门:在灯下挂一把香葱，或用纱袋装几根葱段，各种小虫都不会飞来。蚊子最怕橘红色光，用橘红色玻璃纸或绸布套在灯泡上，蚊子就不会靠近了。 <br>
<br>
　　107、生活窍门:在房间里放上几盒开盖的风油精、清凉油，或在墙上涂点薄荷可驱蚊。在室内栽一两株西红柿，西红柿枝叶发出的气味会把蚊子赶走。 <br>
<br>
　　108、生活窍门:碱水去鲜桃毛！在清水中放入少许食用碱，将鲜桃放入浸泡3分钟，搅动几下，桃毛便会自动脱落，清洗几下毛就没有了，很方便。 <br>
<br>
　　109、生活窍门:白背心穿久了会出现黑斑，可取鲜姜2两捣烂放锅内加1斤水煮沸，稍凉后倒入洗衣盆，浸泡白背心十分钟，再反复揉搓几遍，黑斑即可消除。 <br>
<br>
　　110、生活窍门:切肥肉的窍门:切肥肉时，可先将肥肉蘸一下凉水，然后放在案板上，一边切一边洒点凉水，这样切着省力，肥肉也不会滑动，且不易粘案板。<br>
<br>
　　111、生活窍门:抽烟或长时间使用深色指甲油会使指甲变色，可每天用半个新鲜柠檬擦拭，连续擦上两周即可除去污渍。<br>
<br>
　　112、生活窍门:减少洗衣粉泡沫的窍门:往洗涤液中加少量肥皂粉，泡沫会显著减少。若用洗衣机洗衣，可在洗衣缸里放一杯醋，洗衣粉泡沫就会消失。<br>
<br>
　　113、生活窍门:在服用四环素类药物时，不宜吃豆腐，因豆腐中含有较多钙，用盐卤做的石膏中含有较多镁，四环素遇到钙、镁会发生反应，降低杀菌效果。<br>
<br>
　　114、生活窍门:丸子、松肉的配料比例:在烹饪丸子或松肉菜肴时，只要是按50克肉、10克淀粉的比例调料，就能使松肉松酥、丸子软嫩。<br>
<br>
　　115、生活窍门:巧除领带上的皱纹。打皱了的领带，不用熨斗烫也能变得既平整又漂亮，只要把领带卷在啤酒瓶上，第二天再用时，原来的皱纹就消除了。<br>
<br>
　　116、生活窍门:取适量红糖放口中含十分钟后刷牙2-3分钟，漱口。再用盐碱水（清水掺食盐、食碱各50克）刷牙2分钟。每日2次，1周后烟垢可脱落。 <br>
<br>
　　117、生活窍门:将废药瓶上的橡皮盖子搜集起来，按纵横交错位置，一排排钉在一块长方形木板上（钉子须钉在盖子凹陷处），就成为一块很实用的搓衣板。<br>
<br>
　　118、生活窍门:使衣物香气袭人:用完的香水瓶、化妆水瓶等不要立即扔掉，把它们的盖打开，放在衣箱或衣柜里，会使衣物变得香气袭人。<br>
<br>
　　119、生活窍门:咸肉放时间长了会有一股辛辣味，在煮咸肉时放一个白萝卜，然后再烹调，辛辣味即可除去。若咸肉仅表面有异味，用水加少量醋清洗即可。<br>
<br>
　　120、生活窍门:手表内不小心进水，可用一种叫硅胶的颗粒状物质与手表一起放入密闭的容器内，数小时后取出，表中的积水即可消失。硅胶可反复使用。<br>
<br>
　　121、生活窍门:擀面条时，如果一时找不到擀面杖，可用空玻璃瓶代替。用灌有热水的瓶子擀面条，还可以使硬面变软。 <br>
<br>
　　122、生活窍门:用洁厕灵当疏通剂:隔三差五地将适量洁厕灵倒入马桶，盖上马桶盖闷一会儿，再用水冲洗，能保持马桶通畅。<br>
<br>
　　123、生活窍门:被蚊虫叮咬后可将热水瓶盖子（取自约90度水温的热水瓶）放在患处摩擦2-3秒钟，然后拿起，连续2-3次，瘙痒即会消失。<br>
<br>
　　124、生活窍门:将待熟的香蕉放入冰箱内贮存，能使香蕉在较长时间内保鲜，即使外皮变色，里面也一样新鲜如初。<br>
<br>
　　125、生活窍门:巧用84消毒液:洗衣时，白色纯棉织物易被其他衣服染色，可将被染衣服泡到稀释后的84消毒液中，利用其脱色性，还您衣服的本来面目。 <br>
<br>
　　126、生活窍门:用墩布拖地很沉，且容易腰酸背疼，地面也要很长时间才干。用旧毛巾当抹布擦地，干净、干得快、省时间，用旧化纤料效果更好。 <br>
<br>
　　127、生活窍门:喝烫过的白酒对人体有益。因白酒中的醛对人体损害较大，只要把酒烫热一些，就可使大部分醛挥发掉，这样对人身体的危害就会少一些。 <br>
<br>
　　128、生活窍门:巧用废瓶盖洁墙壁。将几只小瓶盖钉在小木板上，即成一个小铁刷，用它可刮去贴在墙壁上的纸张和鞋底上的泥土等，用途很广。 <br>
<br>
　　129、生活窍门:当你非常口渴而家中又无凉开水时，可把装有热水的杯子放入冷水中浸泡，然后在冷水中撒上一把盐，这样能加速开水的冷却。 <br>
<br>
　　130、生活窍门:写钢笔字时，如写了错别字，抹点牙膏，一擦就净。圆珠笔芯写字不流利时，将笔头插进吸过香烟的过滤嘴中转一转即可。 <br>
<br>
　　131、生活窍门:如果你身边只有温开水而又想喝到浓郁的香茶，可在温开水中放少许白糖或红糖，搅拌溶解，然后放入茶叶，5分钟后，你便能如愿以偿。 <br>
<br>
　　132、生活窍门:将废弃无用的橡皮盖子用双面胶固定在房门的后面，可防止门在开关时与墙的碰撞，能起到保护房门的作用。 <br>
<br>
　　133、生活窍门:将西瓜浸入15%的盐水中3-5日，捞出揩干，再用西瓜蔓叶中挤出的水汁涂一遍，密封于聚乙稀塑料袋内，放入地窖，可使西瓜保鲜半年。 <br>
<br>
　　134、生活窍门:鉴别宝石的窍门:将宝石放在衬物上让日光照射，穿透宝石的光线在衬物上呈现金星样子的为真品。若是假宝石，衬物上会呈现一块黑影。 <br>
<br>
　　135、生活窍门:怎样烧鱼鱼不碎？1烧鱼之前，先将鱼下油锅炸一下。如烧鱼块，应裹一层薄薄的淀粉再炸。炸时注意油温宜高不宜低。 <br>
<br>
　　136、生活窍门:怎样烧鱼鱼不碎？2烧鱼时汤以刚没过鱼为宜，待汤烧开后，要改用小火煨焖至汤浓放香时即可，煨焖时要少翻动鱼，可将锅端起轻轻晃动。 <br>
<br>
　　137、生活窍门:鸡肉与芹菜同食会伤元气；牛肉与栗子同食后会呕吐；兔肉与芹菜同食会伤头发；蟹与柿子同食会中毒；洋葱与蜂蜜同食会伤眼睛。 <br>
<br>
　　138、生活窍门:戳伤手指的救护窍门:用冷湿布冷却患处，用厚纸作夹板固定受伤手指，再用绷带包扎好。普通扭伤或脱位，可自行将患处整复好，恢复原状。 <br>
<br>
　　139、生活窍门:面粉能洗净葡萄！葡萄去蒂放在水盆里，加入适量面粉，用手轻搅几下，然后将浑浊的面粉水倒掉，用清水冲净即可。<br>
<br>
　　140、生活窍门:车船行驶途中，将鲜姜片随时放在鼻孔下面闻，使辛辣味吸入鼻中，可以防晕车；将姜片贴在肚脐上，用伤湿止痛膏固定好，有相同效果。<br>
<br>
　　141、生活窍门:旅途中处理脚泡的方法:先用热水烫脚十分钟，用消过毒的针刺破脚泡，使泡内液体流出、排干，再将脚泡部位消毒。忌剪去泡皮，以防感染。 <br>
<br>
　　142、生活窍门:旅途中小腿抽筋的防治:扳脚法:取坐姿，一手用力压迫痉挛的腿肚肌肉，一手抓住足趾向后扳脚，使足部背曲，再活动一下，即可缓解。<br>
<br>
　　143、生活窍门:旅途中遭遇雷雨时，千万不要在巨石、悬崖下和山洞口躲避，电流从这些地方通过时会产生电弧，击伤避雨者。若山洞很深，可躲在里面。 <br>
<br>
　　144、生活窍门:受潮软化的饼干放入冰箱冷藏几天，即可恢复原状；切洋葱等蔬菜时，可将其去皮放入冰箱冷冻室存放数小时后再切，就不会刺眼流泪了。<br>
<br>
　　145、生活窍门:酿酒用的葡萄皮有丰富的抗氧化剂，经常适量饮点红酒，能增加好的胆固醇，减少血管硬化。<br>
<br>
　　146、生活窍门:熬粥加碱的做法是不科学的，加碱熬出来的粥虽然显得粘稠、滑口，但粥内的一些重要的营养成分大部分都被破坏了，因此，熬粥不宜加碱。<br>
<br>
　　147、生活窍门:治疗风湿症的窍门:生姜皮晒干研末，装入瓶内储存备用。每次取姜皮末半茶匙冲酒（低度白酒）饮服，可缓解症状。<br>
<br>
　　148、生活窍门:吃羊肉有助于保持健美体形，羊肉是理想的肉碱来源，这种和氨基酸类似的物质能帮助细胞&ldquo;烧&rdquo;掉人体多余的脂肪。<br>
<br>
　　149、生活窍门:炒青菜脆嫩法:在炒黄瓜、莴笋等青菜时，洗净切好后，撒少许盐拌合，腌渍几分钟，控去水分后再炒，能保持脆嫩清鲜。<br>
<br>
　　150、生活窍门:鱼刺卡喉的救治窍门:吞咽橙皮。鱼刺卡喉时，可剥取橙皮，块窄一点，含着慢慢咽下，可化解鱼刺。</font></font></span></div> <a href="http://hi.baidu.com/viplotus/blog/item/48bba3def5234e50cdbf1a38.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/viplotus/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/viplotus/blog/item/48bba3def5234e50cdbf1a38.html#comment">查看评论</a>]]></description>
        <pubDate>2009年05月06日 星期三  10:40</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[viplotus]]></author>
		<guid>http://hi.baidu.com/viplotus/blog/item/48bba3def5234e50cdbf1a38.html</guid>
</item>

<item>
        <title><![CDATA[一个学中医的女生写出的保养大法【转载，很长】]]></title>
        <link><![CDATA[http://hi.baidu.com/viplotus/blog/item/fc8a1cd7bdac08d5a044df2e.html]]></link>
        <description><![CDATA[
		
		<div>
<p>如果你问<span style="color: #ff0000; background-color: #ffffff">&ldquo;怎么我的头发那么油啊？&rdquo;，<span style="color: #000000">那是因为</span></span><span style="color: #0000ff">你肝火太旺了，身体里内脏不能消化油脂，所以就把它排到脸上和头上了</span>&rdquo;，你还是会问<span style="color: #ff0000">，&ldquo;那怎么办啊？&rdquo;，</span>我就会说&ldquo;<span style="color: #0000ff">每天晚上用滚烫的热水泡脚泡上半个小时，慢慢就会好了&rdquo;<span style="color: #000000">注：水不会一直热，所以要不断的注入热水，用冷水和温水泡都没有这么好的效果的、、、、</span></span></p>
<p>　　　　 <br>
　　　　我认为<span style="color: #ff0000">泡到出汗</span>效果最好了，其实姐妹们如果满头满脸的出油的话，都可以通过这个方法调理肝脏，油慢慢就会少了。<br>
　　　　</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  朋友因为出油的原因毛孔也非常粗大，我就会用盐给他按摩脸，<span style="color: #ff0000">出油的皮肤质地都比较粗糙和硬</span>，所以不用担心盐太粗。如果实在嫌盐不好的话，可以用盐加精油。特别是鼻子周围仔细的按摩，洗干净之后，是不是毛孔特别的小啊？ 注：这里提到的盐可以是食用盐，因为如果你买到的浴盐不够好，还会刺激皮肤，反而不如便宜又好用的食用盐。<br>
　　　　 <br>
　　　　<span style="color: #ff0000">油脂球</span>一定不能挤和抠，用按摩的方法最好了。去油的同时还能缩小毛孔和去角质，最后洗脸的时候，最好用冷热水交替洗，其实我强烈建议所有的女人都这样洗脸！热水肯定是不能单独用来洗脸的，温水和冷水还行，<span style="color: #ff0000">冷热水交替</span>最好。 <br>
　　　　 <br>
　　　　我是用脸盆装热水，洗脸池对着水龙头直接用冷水，就这样交替洗，很方便，但洗出来小脸白里透红，粉粉嫩嫩的，不但洗得非常干净，而且毛孔也缩小到不能再小了！ <br>
　　　　 <br>
　　　　同时，<span style="color: #ff0000">冷热水交替对黑眼圈也非常有效</span>。因为冷水洗脸虽然很好，但刺激脸部，会使黑眼圈加重！ </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  注：很多妹妹说道冷热水洗脸会产生红血丝，我这里提到的热水跟上面说要泡脚用的热水完全是不同概念的，这里洗脸的热水只要温热的就可以了哦、、这样就避免红血丝的产生咯、、、、<br>
　　　　 <br>
　　　　同事买了一枚半克拉的钻戒，当她向我展示戒指时，我的感受只是&ldquo;天呐，好糙好黑的手指&rdquo;。钻石确实很大很美，装饰着美丽的你。但如果手不好好保养，那就变成反衬喽。 <br>
　　　　 <br>
　　　　关于<span style="color: #ff0000">双手和脚的皮肤保养</span>，最实用的DIY手膜就是红糖和蜂蜜混合后不停的按摩，一般的建议都是，要随身带护手霜，只要手沾到水就要涂一层。这种方法真的很麻烦！ <br>
　　　　 <br>
　　　　其实只要大家好好的利用夜晚，白天就不用麻烦了。 <br>
　　　　 <br>
　　　　准备一副宽松的手套，每天晚上睡觉前，就用橄榄油 美加净混合起来，厚厚的涂在手上，戴上手套睡觉，坚持一段时间以后，双手就会越来越嫩，小细纹也都淡化了。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">如果手指关节粗大，就一定要按摩</span>。用大拇指和食指逐个按摩每个手指头，最关键的是按摩手指的两侧，从根部到指尖，一个一个的按摩，这个按摩的方法可以使得关节粗大的问题得到解决，手指慢慢的就会粗细均匀了。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">脚底的死皮是一定要磨的</span>。大S之所以不推荐刨刀样的磨脚板，是因为她们艺人的脚经过长时间的保养，已经很嫩，刨刀就容易流血了。而刚开始护脚，刨刀能够快速的磨去死皮，开水先泡脚，然后磨，磨完之后涂厚厚的橄榄油 美加净，穿上厚棉袜。磨脚是每周一次，而涂霜和穿袜子就是要每天都要。双脚就会越来越嫩！真的是非常嫩和光滑，一点瑕疵都不会有。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">有的女生脚后跟会开裂</span>，那就要先用膏药贴，贴足三天之后，再用橄榄油 美加净厚厚的敷，等到裂开的口子消失了再开始磨脚。 <br>
　　　　 <br>
　　　　我推荐的是<span style="color: #ff0000">美加净的珍珠银耳营养霜</span>，超市有卖，九毛钱一包，保湿效果很好。它是上海家化的老牌产品了，这个厂同时还生产百草集，对于他家的精油和头发护理系列，确实要赞一个！至于面部护理系列，那就仁者见仁了。 <br>
　　　<br>
　　　　 <br>
　　　　加夜班非常伤身体,如果每天连睡眠都保证不了，还怎么谈保养呢.你能不能早上早起去上班？你是不是在外企？可以早去干活，晚上早点走吗？因为前半夜的睡眠非常重要，后半夜就相对来说可以浪费。你可以五六点就起床，去上班，晚上早点回家睡觉。 <br>
　　　　 <br>
　　　　如果不行的话，那真是可怜了！那你就<span style="color: #ff0000">每天都吃阿胶</span>，红枣和桂圆来代替肝脏补血吧。这三样是补血圣品，桂圆少吃，一天三粒，红枣10-20粒，阿胶早晚都要吃，一天两遍。 <br>
　　　　 <br>
　　　　电脑有辐射，所以samantha你的<span style="color: #ff0000">隔离霜一定要用</span>，半天补一次，不要早上涂一遍就算，中午补，晚上加班之前再补，不能怕浪费。还有绿茶要每天当水喝，外企喜欢喝咖啡，你就喝绿茶，加点当归和黄芪，补血补气，一定要大量的喝水。眼睛一定会不舒服吧？再加枸杞和白菊花，记得是白色的不是黄色的。不要担心这样混合茶会不会发生反应，嘻嘻，向你保证，不会滴！ <br>
　　　　 <br>
　　　　<span style="color: #ff0000">在电脑前养一两棵仙人球，替你吸收辐射</span>。中途站起来活动活动，深呼吸，不要一直坐着。离公司的打印机远一点，那个的辐射更厉害！如果公司是铺地毯的话，那肺也要受残害了。买点<span style="color: #ff0000">杏仁或者喝杏仁露</span>也行，养养肺。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">长期对着电脑，肝脏也很疲劳</span>，所以心情一定要尽量舒畅。我再教你一个小方法，就是每天睡前使劲捏捏腋窝，大臂还有肋骨两侧，使劲的捏，这是通过疏通经络，来防止乳房的疾病，并且能让你心情舒畅，心里不觉得压得慌。 <br>
　　　　 <br>
　　　　几乎所有的女人都对脸上的这点田地特别的关注，美白其实谁都会，用一些美白产品都可以拥有均匀的肤色。不过美白产品还是要少用，美白除了百草集它家是白芷，茯苓等中药配方，都肯定要含铅，对皮肤还是有伤害。使用美白产品并配合正确的洗脸之后，很快就会白回来。一旦白了就要换保湿的面霜。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">美白的同时配合喝牛奶和薏仁粉</span>，整天喝柠檬水可以加快美白。 <br>
　　　　 <br>
　　　　美白还有一个小秘方，就是<span style="color: #ff0000">用白醋做主水，加如五分之一的甘油或者橄榄</span>油，如果嫌刺激的话，可以加纯净水在里面。坚持每天涂两遍，一个星期就能看到效果。 <br>
　　　　 <br>
　　　　建议大家在使用护肤品时，<span style="color: #ff0000">要注意看自己的皮肤是不是产生了依赖</span>？比如说，不好的护肤品，一旦你不用，那一整天的皮肤都会让你非常难受，那这个产品就不要再用了。好的产品是就算偶尔有一天不用，皮肤还是能保持很好，那就是好东西！ <br>
　　　　 <br>
　　　　<span style="color: #ff0000">如果你的工作是脑力劳动用脑过度，那额头是无法避免要比眉毛以下部分要黑</span>，这个真的是没有办法。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">白白的之后就是要防止细纹的产生</span>。方法就是要保湿保湿加强保湿！怎么样保湿都不过分！别人都会说，&ldquo;天呐，我的眼睛下面有细纹了！&rdquo;&ldquo;那就保湿啊！&rdquo; <br>
　　　　 <br>
　　　　对！产生细纹的原因就是保湿的力度不够。这个时候就要用面膜或者眼膜。对于干性皮肤，橄榄油可以做保湿面膜，做加强保养。中性和油性可以每天晚上用喝剩一点酸奶。面膜做频繁了，自然细纹就LEAVE啦！ <br>
　　　　 <br>
　　　　这里介绍一个方，就是<span style="color: #ff0000">在酸奶里面加入酵母粉</span>，发酵，隔天用它敷脸，脸上的粗糙小凸起立刻就消失，并且皮肤能变白变亮。 <br>
　　　　 <br>
　　　　油性皮肤更要加强保湿，补充水分，不然肤质粗糙得更快。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">保湿的一个重要一环就是爽肤水</span>，一定要配合化妆棉使用！洗完脸之后不要用毛巾擦，就用化妆棉擦干，然后用水泡湿了的化妆棉粘取爽肤水使用。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">按摩的方法</span>是额头从中间向两边打圈圈，眼睛下面的皮肤是从眼角向太阳穴拉，鼻子从上向下，面颊我们之前讲过了，嘴巴下面是从中间向嘴角向上提。 <br>
　　　　 <br>
　　　　爽肤水一定要多敷，不要怕浪费，多敷几遍。保湿做好了，就不用怕细纹。 <br>
　　　　 <br>
　　　　接着，我要提前进入一个比较深的话题，因为我刚才看到了一个饱受妇科病痛苦的女生。只要有妇科疾病，脸上就算用最高级的黄金面霜了，也无济于事！<span style="color: #ff0000">脸色好的前提就是身体健康。 <br>
</span>　　　　 <br>
　　　　妇科病并不是我们与生俱来就必须接受的痛苦，得到了快乐并不需要痛苦作为代价。 <br>
　　　　 <br>
　　　　首先还是check日常生活习惯，每天都要清洗屁屁，用放温了的开水，用专门的盆和毛巾，每天都换内裤；非经期不使用护垫，经期勤换卫生巾；大便完后也清洗屁屁，如果条件不允许用湿纸巾；性爱没有特别频繁，并且从一开始就戴TT，性爱结束后立刻小便；从不使用任何洗液；每年都做妇科体检。 <br>
　　　　 <br>
　　　　顺产的孕妇，如果后期护理不好也很容易发炎；如果月经量过多，也会因为大量血液的浸泡而发炎。而月经量过多，是脾脏的原因，以后再讲。 <br>
　　　　 <br>
　　　　一个朋友的朋友，有很多性伙伴。可她很懂得保护自己，一定要戴TT，所以妇科检查一点问题都没有。 <br>
　　　　 <br>
　　　　所有的妇科炎症都要牵扯到肝脏和肾脏这两个脏腑，从最轻微的到最严重的，原理都是一样，那就是：肝气郁结和肾虚。 <br>
　　　　 <br>
　　　　泻肝火可以用之前讲的泡脚的方法，也可以自己按摩，按摩大手臂，腋下，还有身体两侧的肋骨，方法就是用大拇指和食指，使劲的捏骨头上面的肉，最好的是肉和骨头中间的那个地方，最有效果，一定要使劲，越疼越用力，疼就有效果了。 <br>
　　　　 <br>
　　　　肾虚的方法之前都讲过了，只要肾脏强壮有力，就不会有大毛病！ <br>
　　　　 <br>
　　　　这样如果还是治疗不好，就要做脚底按摩。<span style="color: #ff0000">如果身体健康的人也多按摩脚底，身体会更好，人自然就年轻了。</span> <br>
　　　　 <br>
　　　　书上推荐是用随便什么笔头来按摩，我觉得太累，我就是用我搓脚板的另外一头，那个头比较大，省力。饭后一小时再开始，按摩之前先排尿，然后就使劲的脚底，脚后跟，脚面到处都按，我没法描述具体哪个反射区，有心的人可以自己到网络上下载脚底反射区图自己了解了解。其实就凭自己感觉就可以了，哪里疼得厉害，就拼命按哪里。坚持一阵子之后，不光疾病不见了，身体都会比以前更健康！ <br>
　<br>
　　　　我的另外一个，不是模特的妹妹和她的男朋友都是在医学院学的口腔专业，他们给我的建议是，口腔及牙缝中的垢物要分别用漱口和牙线的方法来解决。你的方法我们可以再讨论。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">牙齿我们不能忽视</span>，它的重要性是，他直接决定了一个人是否能够长寿。所以要趁着年轻就要保护我们的牙齿。每年都要做口腔检查，如果有异常出血都要去检查，以排除牙周炎，或者结石等症状。 <br>
　　　　 <br>
　　　　如果是<span style="color: #ff0000">牙龈萎缩</span>，不要立刻就去补牙，一般牙科医生给的建议就是出现萎缩就要补牙。要早睡觉，每天都不要让自己身心俱疲，那样萎缩得更厉害，要休养，慢慢牙龈就会恢复健康。 <br>
　　　　 <br>
　　　　如果有的<span style="color: #ff0000">牙缝会经常塞东西</span>，那就一定要用牙线。因为频繁塞东西很容易出现龋齿。并且一旦出现龋齿就要去补，不能拖，越拖牙洞越大，补牙就越复杂。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">牙齿最好的保护方法是清洁和不过度使用</span>。我现在使用的牙刷，是荷兰生产的一个品牌的声波牙刷，不是电动，是声波，它可以更加清洁牙齿，并且通过声波祛除结石，只要用它刷牙，就会感觉牙齿一颗一颗的，非常干净。 <br>
　　　　 <br>
　　　　讲个题外话，有一次，我看中国台湾省艺人小s出的《怀孕日记》，上面有一张在永越月子中心理发的照片，远处台子上放的就是声波牙刷。大s上康熙来了，也讲到使用声波牙刷来刷牙。 <br>
　　　　 <br>
　　　  月经（第二篇） <br>
　　　　 <br>
　　　　月经是我们判断自己身体健康状况的一面镜子，月经正常，面容娇嫩，脸色也好。 <br>
　　　　 <br>
　　　　月经推后超过七天并连续几个周期的，算做是月经后期。一般来说是虚症，推后的意思就是说，身体里的血液或者能量不够用，所以要尽量往后拖几天，肾虚或者体寒也会造成周期拉长。而量多不是血热就是血瘀或者气虚。 <br>
　　　　 <br>
　　　　最好的月经状态是，前后没有心情的影响，胸部不会涨痛，没有头晕烦躁等现象，而头一两天量少，后一两天量也少，中间有一两天量多，没有腹痛，小腹下坠，腰疼等症状。简而言之，就是你几乎感觉不到它的存在。而实际上，你是无比的重视它。 <br>
　　　　 <br>
　　　　想要月经正常，就一定平时不能发火，生气，憋着火就更不行，心情要舒畅条达，这样就可以养肝脏；现在冬天了，每天早晚吃点阿胶，平时多吃红枣菠菜甘蔗，好好的补血，来年一年都不用担心血虚；气虚可以喝点黄芪泡茶，补气还抗癌，很好的一味中药；有血块是说明肝气郁结，越多经络堵得就越厉害，就按摩就可以了；如果实在是腹痛难忍，那平时就要注意自己多按摩后腰，按摩脚底。 <br>
　　　　 <br>
　　　　建议每个女人都要记录自己生理日记，以及时观察自己身体的变化。平时也要注意自己白带的变化，如果量突然多起来，或者颜色发生改变了，出现异味了，就要警惕了。正常的情况是，量少，白色，干了之后会淡黄色，无味。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">好身材的重点还有胸部和臀部</span>。 <br>
　　　　 <br>
　　　　臀部只要一个动作，除非你是瘦到没有一点肉，都有效。大S教的，何时何地，站立时就稍微分开双腿，两脚成八字形，用力的夹起臀部，坚持一段时间再放松，然后再夹紧，只要靠这个小动作，你的臀部会越来越翘和饱满，真的！ <br>
　　　　 <br>
　　　　胸部小的很遗憾，大的容易下垂，总之，正好的非常少。如果你身上一点肉都没有，先变胖再说。你的内衣不知道你是否穿对了？一定要有很好的收拢和侧托效果！我穿到现在，只有古今内衣，是真正的保住胸部形状的好东西！刚开始穿的时候，你的肉可能到处都是，腋下，侧面，胃肉，后背，全是松肉。古今导购会教你正确的穿的方法。 <br>
　　　　 <br>
　　　　身体前倾，戴上之后，要把所有的肉都拢到内衣里面去，包括后背，胃肉。这个方法在法国，女孩刚发育的时候就会得到这种教育。其它品牌的内衣不知道为什么，你拢进去之后就很快就又跑出来，只有古今不会，它只会稍微有点跑出来，一直坚持穿它家的内衣，保证你除了胸部之外，其它地方绝对没有多余的肉。 <br>
　　　　 <br>
　　　　这只是第一步。 <br>
　　　　 <br>
　　　　如果想要加强集中效果，就要每天晚上打圈按摩。这个谁都知道，确实有效。但一旦乳房能够自己收拢集中了，就不能再打圈了，这时候就变成消耗脂肪了。这以后都要按摩乳腺，就是从腋下到乳头连线，这一条线上的肌肉，如果能把肝气郁结之症状缓解，胸部一定会变大。所以说，如果心情长期很差，胸部不会好看。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">食补的目的</span>，不是通过增加脂肪，就是通气的作用。效果不如上面这两个方法明显。 <br>
　　　　 <br>
　　　　从现在开始，要正式隆重介绍对我们来说最重要，最该花钱的东东了。只要你使用了它们，你脸上的一切问题就会消失，身体也会越来越健康！变老？怎么可能？逆转青春的只有它们，真的，护肤品给它们提鞋都不配。挽救我们的大功臣就是，食物！ <br>
　　　　 <br>
　　　　你在吃进嘴巴里的东西上面越用心，你就越漂亮！此言不虚。食物一般分为，补气，补阳，补血，补阴，温里，活血，消食，清热，收涩，祛湿，化痰，解表，和安神这几种。按照黄帝内经，春天和夏天要补阳，秋天和冬天补阴。 <br>
　　　　 <br>
　　　　唐代名医《千金要方》里告诉我们，治疗身体上的毛病，应该先用食疗的方法，治不好再用药，中医是推崇用按摩，施针的方法治。而不是一去看中医，把脉之后就开中药，付钱拿药回家，拜托多看一眼舌头还好啊？ <br>
　　　　 <br>
　　　　我学中医的初衷，也是因为一位老中医对我爸爸说了不负责任的话。他说得很消极，意思就是说，我爸的身体再怎么样吃药，到老了还是要受罪之类。我一听就觉得，那我们还要你干吗？我开始自学中医。 <br>
　　　　 <br>
　　　　事实上呢，等我学到现在，才明白其中的微妙。我爸的体质因为年轻吃过苦的原因，加上现在也五十了，调理起来比较复杂，各个脏腑和经络等等，包括生活习惯，饮食习惯，四季养生都要施以正确的指导，医生操心费力但不赚钱。 <br>
　　　　 <br>
　　　　现在我一手包办我爸的身体，我也不让他吃药，也不针灸，除了食物之外不花钱，也不是花不起那钱，而是心理上实在吃不消。就在家自己慢慢调理，吃什么，按摩哪里，注意事项，加上是女儿负责的，我爸心情也好，健康只是时间问题。 <br>
　　　　 <br>
　　　　意想之外的收获，就是在学的过程中，学到很多调理自己身体的方法，比如月经周期，皮肤粗糙，体寒，湿气重等等问题都被解决了，我在帮助了我爸的过程中，自己受益也非常大。 <br>
　　　　 <br>
　　　　所以，我一直都相信，助人就是助己。 <br>
　　　　 <br>
　　　　很多人都有口腔异味的问题，不过有的人是短期，有的人是长期。 <br>
　　　　 <br>
　　　　我的好朋友是长期的口臭，同时她还有刷牙出血的症状，后来因为一直只要刷牙就出血，后来去口腔医院看，有牙菌斑，同时有非常多的牙龈结石，还有一颗大龋齿，后来拔牙，洗牙，开刀除结石，来回去医院折腾了好几次，牙齿健康了，口臭也消失了。真是意外的收获。 <br>
　　　　 <br>
　　　　长期的便秘症状，得不到解决，身体里的有害物质不能及时排出体外，容易产生，腹胀，容易生气，嘴巴里有异味，没有食欲等等现象。这主要是由于，平时吃得多，而且吃粗粮太少，工作忙碌，心理压力大，精神过于兴奋或者压抑，作息时间不规律，就会便秘。 <br>
　　　　 <br>
　　　　便秘了，早饭就一定要吃燕麦片，白天多喝水，香蕉和苹果也要多吃，心情保持放松舒畅，按照前面讲过的方法按摩，问题就解决了。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">茶叶和酸奶，包括芹菜，柠檬水都可以帮助排出身体里的毒素</span>。大量补充维生素的同时，抑制细菌生长的环境，当然如果吃维生素药片的话，里面的添加剂反而会造成消化功能紊乱。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">中医上认为口臭是胃的原因</span>，有虚火，而肠胃功能不好，主要原因是心理因素造成，所以不建议吃降火的东西，而是从心理上进行调节，使紊乱的肠胃恢复正常。同时要提高身体免疫力，增强肾脏功能。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">脾虚的表现是</span>，食欲不振，神倦乏力，严重的情况会内脏下垂，脱肛，子宫下垂，脾脏是我们每个男人女人三十岁之前都非常重视的脏器，它事关食物的消化和吸收，所以，不要吃乱七八糟的药，伤害它。肺虚的表现是，少气懒言，容易出虚汗，肾气虚则腰酸，三者合在一起被称为气虚。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">气虚脸颊就下垂</span>，越虚垂得越厉害，直到五官内脏都下垂，人也就丑了。气虚是所有虚症中，最容易补充的身体能量。少说话，少提重物，多注意休息睡眠，都能补充元气。因为气能产生血，所以补气就能补血。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">山药是非常好的东西</span>，一个身体不大好的朋友去看中医，据说还是当地最有名的，回来除了带一堆中药之外，就带了这个偏方：每天喝山药炖冰糖。价值四百块的偏方。 <br>
　　　　 <br>
　　　　山药补气健脾胃，养阴益肺，补肾固精，把脾脏，肺和肾脏都补了，确实值这个钱了！阴虚亏损的人容易咳嗽，可以用它煮汤当水喝，可以治愈虚劳咳嗽的毛病。山药因为益肺，而&ldquo;肺主皮毛&rdquo;，所以山药可以滋润皮肤。虚弱羸瘦，皮肤干燥，记忆力减退，过劳和疾病后体虚，都要多吃山药，可以强壮身体，抵抗衰老。 <br>
　　　　 <br>
　　　　但应该注意到的是，它滋阴的同时助湿邪，所以我在吃完它之后，肯定要吃祛湿的东东，像薏仁，茯苓。我不加冰糖，直接水煮山药，把山药打成浓浆，然后煮开就当水喝，不喝多，喝完之后，再喝水我就加薏仁粉。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">大米也是补气的，吃惊吗</span>？女人一定要每天都吃米饭，脾胃健康就靠它呢！米都补脾，但五谷中它补脾的效果最好，中气不足，疲倦乏力就要吃它了，像脾胃虚寒，心烦口渴，就喝大米稀饭就行啦。中医书上说&ldquo;稀饭为世间第一补人之物&rdquo;。所以就算你在减肥，也一定每天至少吃一碗大米饭，不然瘦下来，脸颊胸部都下来了。 <br>
　　　　 <br>
　　　　好东西，还有大枣，蜂蜜等。皆补脾，益虚损，令人好颜色。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">抗衰老</span>（一） <br>
　　　　 <br>
　　　　如果看贴的你已经超过35岁，这篇就是专门为你所写。 <br>
　　　　 <br>
　　　　很可能超过30岁的女性，已经会有中医上称为&ldquo;损容性&rdquo;面部特征了。比如说皱纹，斑点，黑眼圈，眼袋，法令纹，脸颊下垂，皮肤粗糙等等岁月的痕迹。包括身材的彻底变形等等。 <br>
　　　　 <br>
　　　　一句话，就是现在的你已经基本上向中性人过渡了，女人味在渐渐的离你而去。你甚至基本上想不起来自己还是个女人。只有在买衣服，去理发店的时候，释放歇斯底里想挽回的绝望。 <br>
　　　　 <br>
　　　　看到一句话，很适合这里，&ldquo;<span style="color: #ff0000">美的关键在于心态</span>&rdquo;。特别是超过28岁，脸上写的全是你的心。 <br>
　　　　 <br>
　　　　心里妒忌别人，重视利益大于一切，欺上昧下，等等所有这些心理，都一定会以世上最快的速度让你衰老变丑！而自卑，消极，懒惰也是加速衰老的元勋。张曼玉说她维持年轻的秘诀就是&ldquo;心里永远都有梦想&rdquo;。你要时刻提醒自己，你是个女人。当你拖地累得满头大汗，提很重的东西时，建议你，量力而行。我拖地的时间男朋友可以把整个厨房从屋顶到地面刷洗的干干净净。你把自己当男人使，还想做女人？ <br>
　　　　 <br>
　　　　这并不是一个美好的社会，心里有了沙子，有本事的女人可以把沙子养成珍珠，而大部分是要释放的。过度的忍耐也会加速衰老，心理的衰老更可怕，对于维持家庭幸福也没有好处。你完全可以充满自信的把不满全都说出来，如果他连这个都提供不给你，那他的作用是什么？ <br>
　　　　 <br>
　　　　两个人之间花钱肯定是不能你省给他花，要不就两个都节省，要不就你花他省，如果是你省他花，那你的他基本上很有问题。 <br>
　　　　 <br>
　　　　抗衰老（二） <br>
　　　　 <br>
　　　　面部皱纹一是因为平时表情比较丰富,或者经常用手托着脸等不好的动作，二是因为心事很重，时间长了心情得不到改善，就出现皱纹了，三是酸性体质，也就是体质不大好；四是没有及时给予皮肤充分的保湿。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">按摩很重要</span>啊！自己要有耐心的按摩，用之前介绍祛皱纹的手法，脸上到处都仔仔细细的按摩，轻轻的，可以每天都按，只要坚持就一定可以消除皱纹。 <br>
　　　　 <br>
　　　　按摩完之后一定要加强保湿，多使用保湿水，保湿面膜，一切都要很保湿。推荐牛尔玫瑰保湿晚安睡膜，50块钱，保湿效果很赞！又耐用，一瓶不知道什么时候才能用完。而且还是天然配方，我很佩服牛老师！ <br>
　　　　 <br>
　　　　美中不足的缺憾就是他有一次说&ldquo;上海人到现在（2007年）才知道喝银耳汤，真的很落后&rdquo;，当时就把我气倒了。不提了不提了，人无完人。 <br>
　　　　 <br>
　　　　眼袋和黑眼圈的方法之前都介绍过，很有效。祛斑的方法之前也有，不过比较慢，不能着急。法令纹之前也介绍过方法，祛除的效果很明显。脸颊肯定会有下垂或松弛或者凹陷，多吃米饭早睡觉，一定要补血。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">眼睛很疲劳</span>，就补肝肾，多休息，眼球多转转圈，头发又干又粗糙，那就多做头发护理，多吃黑芝麻和海带，不要烫发染发，头发就不那么老气了。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">脸色发黄</span>，如果是非体质因素，就用绿茶水敷脸；皮肤有疙瘩，就用之前介绍的酸奶酵母面膜；身体的皮肤肯定是越来越粗，坚持用美白保湿的甘油加白醋，身体光滑又白嫩；到了这个年纪，产品是一定要认真使用了。 <br>
　　　　 <br>
　　　　一般脸部皮肤会越来越薄，但越来越硬，所以感觉很沧桑。从体质改变，皮肤就会越来越嫩，只要皮肤嫩了，就会显年轻。而这个是产品做不到的。其实之前所有脸上衰老问题，除了保湿之外，产品都无法解决。 <br>
<br>
　　　　抗衰老（三） <br>
　　　　 <br>
　　　　检查一下，你的生活满足以下条件吗？每天都早睡早起，最好九点就躺着；每天早晚都要吃水果；按时认真吃三餐，一定吃大米饭；心情安宁；隔天锻炼；每天中午都午休一个小时。其实大多数人这些基本的都不能保证。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">身材变形是身体内脏衰老，血液老化，毒素堆积的一个信号</span>。健康的身体，就应该有美丽的外表。酸性的体质必然对应一个不完美的外表。 <br>
　　　　 <br>
　　　　肝肾脏的护理之前都介绍过，脾胃的护理关键在心情，五脏六腑都是我们运转的关键零件，发胖了零件就松了，重新拧紧了，机器就好了。血液浓稠了，机器就转不动了，还伤害机器。毒素太多了，机器就容易变形。 <br>
　　　　 <br>
　　　　只要从今天开始，你认真的对待你的脸部皮肤，花时间照顾她，有规律的生活，重视你的睡眠和心情，健康的饮食，爱惜你的身体内脏，你的状态一定会越来越好。 <br>
　　　　 <br>
　　　　 <br>
　　　　补气和补血是相辅相成的两个食补步骤。单纯补气而不补血，就像烧得很旺的炉子上放了一个空锅，补血就是在锅里放入美味。补气的食物之前讲过了，我还是要强调最重要的米饭，其它的要注意多吃土豆，红薯/地瓜，红枣和蜂蜜。香菇虽然也很好，但有皮肤病的要注意少吃，不要空腹吃。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">补血就一定要吃阿胶啊</span>，没理由！我妈妈坚持吃了那么多年，由我爸制作，加足了爱心在里面！以前的阿胶还没有打粉的说法，都是我爸用捣大蒜的东西捣成碎块，然后炒黑芝麻，炒熟了再用擀面杖辗成末，然后再炒核桃，剁碎，手续比现在复杂！折腾好几个晚上才能做好。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">冬天吃效果最好</span>。补血的同时滋补阴虚，消除内热，补肺虚，含有大量的胶原蛋白，因为它是血肉有情之物，滋补效果更明显。脸色不好看，就要靠它了。不过建议除了以上两味之外不要再多加东西，顶多再加味桂圆足够了。你加那么多好东西在里面，那还不如直接吃十全大补丸算了，还要阿胶干吗？谁主谁辅还是要分清楚。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">最好的吃法是用黄酒浸泡，黄酒温胃，而阿胶质黏腻，两个正好相助吸收</span>。补血的同时建议多吃甘蔗，胡萝卜，菠菜，桂圆和豆浆，都是补铁的食物。不推荐红糖，过甜伤脾脏，脾虚则面色发黑。 <br>
　　　　 <br>
　　　　要纠正一个观念，不能单独靠某一味食物补身体，饮食要全面，比如你现在已经知道，补血和补气的食物了，那这两种都要常吃，单独吃效果肯定不会明显，这个是肯定的。 <br>
　　　　  <br>
　　　　隆重介绍两个要经常吃的好东西！<span style="color: #ff0000">银耳和黑木耳</span>，古时候都是皇家的营养品。黑白木耳的营养丰富，成份大致相近，都含有丰富的胶质。胶质对于女人很重要！ <br>
　　　　 <br>
　　　　黑木耳蛋白质含量与肉相同，铁的含量是鱼肉的70倍，是菠菜的20倍，是猪肝的7倍，所以黑木耳是一味重要的补血食物哦!现在专门把它们俩挑出来讲，是因为它和白木耳具有太多对女人好的东西了。 <br>
　　　　 <br>
　　　　现在的女人喜欢在外面吃饭，而且口味都很重，胆固醇等脂肪含量很容易就高了，血液中有害脂肪含量一旦高，皮肤和身体状态就不会好，老化得也快，皱纹也多，血液的质量对于美容来说太重要！ <br>
　　　　 <br>
　　　　黑木耳能够阻止有害脂肪在血液里的停留，它最大的好处就是从吃进身体里开始，就从气管开始，从上到下的，包括肺，胃，肠道，血液，身体里的灰尘，二手烟灰，不好的异物，环境污染物，全都能带出体外。身体里面也能洗澡。 <br>
　　　　 <br>
　　　　黑白木耳有很强抗癌功能，并能提高肝脏的解毒能力。 <br>
　　　　 <br>
　　　　银耳要买黄色的不要白色的，滋润效果一流！润燥，润肺，和血，阴虚火旺体质就要指望它了！肺健康了，皮肤自然娇嫩。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">补阴的食物除了梨，甘蔗，黑芝麻，豆浆，银耳，百合，这些偏素的之外，荤菜推荐鸭子，不光滋阴清热，还有利水的功能，夏天吃它可以防止妇科炎症的发生</span>。太多的疾病都是因为体内废水到处乱跑，所以多吃吃意仁没坏处。 <br>
　　　　 <br>
　　　　阳虚必须摄入大量肉类，虽然之前推荐的都是素菜，但从没有说过要吃素，荤一定要吃，完全吃素对身体很有害。牛羊肉是一定要吃的，这两种肉摄入后，不会产生湿气，脂肪含量也少，能量和铁都含量足够高。 <br>
　　　　 <br>
　　　　冬天一定要多吃羊肉，男女都要多吃。羊肉能够大补虚损，补益元气，能治疗肾脏阳虚，温补暖身，能够治疗脾胃虚寒，即虚寒体质要多吃，健胃壮脾，对脾肾都非常有好处。虚劳瘦弱的体质多吃羊肉可以使人强壮。 <br>
　　　　 <br>
　　　　狗肉也是一样要多吃，补益力气，补脾胃，暖肾脏，强筋健骨，但不宜和杏仁一起服用。还有一味菜补阳，醉虾，就是用酒浸泡活虾服用，可以治疗四肢寒冷，脾肾阳虚。 <br>
　　　　 <br>
　　　　除了以上的四味肉类食物之外，核桃治疗肾虚腰痛，耳鸣，滋补肝肾脏，能够治疗肺虚寒，改善肠道便秘，滋润五脏。长久服用，皮肤细腻光滑，头发乌黑有光泽，延缓衰老。 <br>
　　　　 <br>
　　　　除了牛羊肉之外，其它的温补阳虚的食物，阴虚火旺体质的人都要少吃。 <br>
<br>
　　　　一位姐妹的LG肾脏炎症，还有一个姐妹内脏下垂严重，这里讲到脾脏的各种症状以及保养的方法对她们来说非常重要，对于身体健康来说，脾脏一旦虚弱，全身九脉皆堵。对于每个想变美的女人来说，脾脏统领血液，是我们美丽的根本。 <br>
　　　　 <br>
　　　　脾胃通过经脉相关联，脾胃功能好的人，肌肤一定是滋润，丰腴的。相反的，如果一个人枯瘦，皮肤没有光泽，则脾胃功能不好，所以身体气血不足。脾脏的健康状况也可以从嘴唇的颜色来看，如果是深红色，是内热，如果是浅红色，是虚寒，如果嘴唇皮肤很干燥，是体内津液不足。 <br>
　　　　 <br>
　　　　因为脾脏通过消化食物来造血，所以和女人的月经周期也有关系。它是我们女人的福音，如果你掌握了保养脾脏的方法，你就可以一辈子都不要做黄脸婆，就算是到了五十多岁也一样，脸色不会枯黄。 <br>
　　　　 <br>
　　　　因为不善保养，脾脏失去统血功能之后，皮肤就会干枯发黄，虽然皮肤自然的颜色是黄色，这里的意思是焦黄色。首先是脾气虚，然后再发展成为脾不统血。身体内的元气和脾胃消化的食物一起生产出血液，首先就是要保证正常健康的饮食。 <br>
　　　　 <br>
　　　　<span style="color: #ff0000">如果你脸色发黄了，就一定要常常吃芋头</span>。紫色的芋头对脾胃最好，造血，统血效果好，能够使皮肤和肌肉润泽丰腴。还有一道食补方，春夏秋冬坚持吃，非常有效，就是菱角，土豆，红豆，山药，茨实，莲子，红枣和大米一起煮熟，这些饭全是补脾脏的，能够造血，逐步改善肤色。 <br>
　　　　 <br>
　　　　 <br>
　　　　脸色萎黄是从气虚发展而来的，除了情绪，疲劳的因素之外，不吃米饭是最主要的原因。所以，为了能有一个好脸色，每天至少吃两碗米饭。</p>
</div> <a href="http://hi.baidu.com/viplotus/blog/item/fc8a1cd7bdac08d5a044df2e.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/viplotus/blog/category/%C1%F7%D0%D0%CA%B1%B4%FA%C4%E3%CE%D2%CB%FB%21">流行时代你我他!</a>&nbsp;<a href="http://hi.baidu.com/viplotus/blog/item/fc8a1cd7bdac08d5a044df2e.html#comment">查看评论</a>]]></description>
        <pubDate>2009年05月06日 星期三  10:06</pubDate>
        <category><![CDATA[流行时代你我他!]]></category>
        <author><![CDATA[viplotus]]></author>
		<guid>http://hi.baidu.com/viplotus/blog/item/fc8a1cd7bdac08d5a044df2e.html</guid>
</item>

<item>
        <title><![CDATA[牢记！SQL Server数据库开发的二十一条军规(SQL收藏)]]></title>
        <link><![CDATA[http://hi.baidu.com/viplotus/blog/item/1bb04aaf177cd4f3faed504a.html]]></link>
        <description><![CDATA[
		
		如果你正在负责一个基于SQL Server的项目，或者你刚刚接触SQL Server，你都有可能要面临一些数据库性能的问题，这篇文章会为你提供一些有用的指导（其中大多数也可以用于其它的DBMS）。 <br>
在这里，我不打算介绍使用SQL Server的窍门，也不能提供一个包治百病的方案，我所做的是总结一些经验----关于如何形成一个好的设计。这些经验来自我过去几年中经受的教训，一直来，我看到许多同样的设计错误被一次又一次的重复。 <br>
一、了解你用的工具 <br>
不要轻视这一点，这是我在这篇文章中讲述的最关键的一条。也许你也看到有很多的SQL Server程序员没有掌握全部的T-SQL命令和SQL Server提供的那些有用的工具。 <br>
&ldquo;什么？我要浪费一个月的时间来学习那些我永远也不会用到的SQL命令？？？&rdquo;，你也许会这样说。对的，你不需要这样做。但是你应该用一个周末浏览所有的T-SQL命令。在这里，你的任务是了解，将来，当你设计一个查询时，你会记起来：&ldquo;对了，这里有一个命令可以完全实现我需要的功能&rdquo;，于是，到MSDN查看这个命令的确切语法。 <br>
二、不要使用游标 <br>
让我再重复一遍：不要使用游标。如果你想破坏整个系统的性能的话，它们倒是你最有效的首选办法。大多数的初学者都使用游标，而没有意识到它们对性能造成的影响。它们占用内存，还用它们那些不可思议的方式锁定表，另外，它们简直就像蜗牛。而最糟糕的是，它们可以使你的DBA所能做的一切性能优化等于没做。不知你是否知道每执行一次FETCH就等于执行一次SELECT命令？这意味着如果你的游标有10000条记录，它将执行10000次SELECT！如果你使用一组SELECT、UPDATE或者DELETE来完成相应的工作，那将有效率的多。 <br>
初学者一般认为使用游标是一种比较熟悉和舒适的编程方式，可很不幸，这会导致糟糕的性能。显然，SQL的总体目的是你要实现什么，而不是怎样实现。 <br>
我曾经用T-SQL重写了一个基于游标的存储过程，那个表只有100,000条记录，原来的存储过程用了40分钟才执行完毕，而新的存储过程只用了10秒钟。在这里，我想你应该可以看到一个不称职的程序员究竟在干了什么！！！ <br>
我们可以写一个小程序来取得和处理数据并且更新数据库，这样做有时会更有效。记住：对于循环，T-SQL无能为力。 <br>
我再重新提醒一下：使用游标没有好处。除了DBA的工作外，我从来没有看到过使用游标可以有效的完成任何工作。 <br>
三、规范化你的数据表 <br>
为什么不规范化数据库？大概有两个借口：出于性能的考虑和纯粹因为懒惰。至于第二点，你迟早得为此付出代价。而关于性能的问题，你不需要优化根本就不慢的东西。我经常看到一些程序员&ldquo;反规范化&rdquo;数据库，他们的理由是&ldquo;原来的设计太慢了&rdquo;，可结果却常常是他们让系统更慢了。DBMS被设计用来处理规范数据库的，因此，记住：按照规范化的要求设计数据库。 <br>
四、不要使用SELECT * <br>
这点不太容易做到，我太了解了，因为我自己就经常这样干。可是，如果在SELECT中指定你所需要的列，那将会带来以下的好处： <br>
1 减少内存耗费和网络的带宽 <br>
2 你可以得到更安全的设计 <br>
3 给查询优化器机会从索引读取所有需要的列 <br>
五、了解你将要对数据进行的操作 <br>
为你的数据库创建一个健壮的索引，那可是功德一件。可要做到这一点简直就是一门艺术。每当你为一个表添加一个索引，SELECT会更快了，可INSERT和DELETE却大大的变慢了，因为创建了维护索引需要许多额外的工作。显然，这里问题的关键是：你要对这张表进行什么样的操作。这个问题不太好把握，特别是涉及DELETE和UPDATE时，因为这些语句经常在WHERE部分包含SELECT命令。 <br>
六、不要给&ldquo;性别&rdquo;列创建索引 <br>
首先，我们必须了解索引是如何加速对表的访问的。你可以将索引理解为基于一定的标准上对表进行划分的一种方式。如果你给类似于&ldquo;性别&rdquo;这样的列创建了一个索引，你仅仅是将表划分为两部分：男和女。你在处理一个有1,000,000条记录的表，这样的划分有什么意义？记住：维护索引是比较费时的。当你设计索引时，请遵循这样的规则：根据列可能包含不同内容的数目从多到少排列，比如：姓名+省份+性别。 <br>
七、使用事务 <br>
请使用事务，特别是当查询比较耗时。如果系统出现问题，这样做会救你一命的。一般有些经验的程序员都有体会-----你经常会碰到一些不可预料的情况会导致存储过程崩溃。 <br>
八、小心死锁 <br>
按照一定的次序来访问你的表。如果你先锁住表A，再锁住表B，那么在所有的存储过程中都要按照这个顺序来锁定它们。如果你（不经意的）某个存储过程中先锁定表B，再锁定表A，这可能就会导致一个死锁。如果锁定顺序没有被预先详细的设计好，死锁是不太容易被发现的。 <br>
九、不要打开大的数据集 <br>
一个经常被提出的问题是：我怎样才能迅速的将100000条记录添加到ComboBox中？这是不对的，你不能也不需要这样做。很简单，你的用户要浏览100000条记录才能找到需要的记录，他一定会诅咒你的。在这里，你需要的是一个更好的UI，你需要为你的用户显示不超过100或200条记录。 <br>
十、不要使用服务器端游标 <br>
与服务器端游标比起来，客户端游标可以减少服务器和网络的系统开销，并且还减少锁定时间。 <br>
十一、使用参数查询 <br>
有时，我在CSDN技术论坛看到类似这样的问题：&ldquo;SELECT * FROM a WHERE a.id='A'B，因为单引号查询发生异常，我该怎么办？&rdquo;，而普遍的回答是：用两个单引号代替单引号。这是错误的。这样治标不治本，因为你还会在其他一些字符上遇到这样的问题，更何况这样会导致严重的bug，除此以外，这样做还会使SQL Server的缓冲系统无法发挥应有的作用。使用参数查询， 釜底抽薪，这些问题统统不存在了。 <br>
十二、在程序编码时使用大数据量的数据库 <br>
程序员在开发中使用的测试数据库一般数据量都不大，可经常的是最终用户的数据量都很大。我们通常的做法是不对的，原因很简单：现在硬盘不是很贵，可为什么性能问题却要等到已经无可挽回的时候才被注意呢？ <br>
十三、不要使用INSERT导入大批的数据 <br>
请不要这样做，除非那是必须的。使用UTS或者BCP，这样你可以一举而兼得灵活性和速度。 <br>
十四、注意超时问题 <br>
查询数据库时，一般数据库的缺省都比较小，比如15秒或者30秒。而有些查询运行时间要比这长，特别是当数据库的数据量不断变大时。 <br>
十五、不要忽略同时修改同一记录的问题 <br>
有时候，两个用户会同时修改同一记录，这样，后一个修改者修改了前一个修改者的操作，某些更新就会丢失。处理这种情况不是很难：创建一个timestamp字段，在写入前检查它，如果允许，就合并修改，如果存在冲突，提示用户。 <br>
十六、在细节表中插入纪录时，不要在主表执行SELECT MAX(ID) <br>
这是一个普遍的错误，当两个用户在同一时间插入数据时，这会导致错误。你可以使用SCOPE_IDENTITY，IDENT_CURRENT和IDENTITY。如果可能，不要使用IDENTITY，因为在有触发器的情况下，它会引起一些问题（详见这里的讨论）。 <br>
十七、避免将列设为NULLable <br>
如果可能的话，你应该避免将列设为NULLable。系统会为NULLable列的每一行分配一个额外的字节，查询时会带来更多的系统开销。另外，将列设为NULLable使编码变得复杂，因为每一次访问这些列时都必须先进行检查。 <br>
我并不是说NULLS是麻烦的根源，尽管有些人这样认为。我认为如果你的业务规则中允许&ldquo;空数据&rdquo;，那么，将列设为NULLable有时会发挥很好的作用，但是，如果在类似下面的情况中使用NULLable，那简直就是自讨苦吃。 <br>
CustomerName1 <br>
CustomerAddress1 <br>
CustomerEmail1 <br>
CustomerName2 <br>
CustomerAddress2 <br>
CustomerEmail3 <br>
CustomerName1 <br>
CustomerAddress2 <br>
CustomerEmail3 <br>
如果出现这种情况，你需要规范化你的表了。 <br>
十八、尽量不要使用TEXT数据类型 <br>
除非你使用TEXT处理一个很大的数据，否则不要使用它。因为它不易于查询，速度慢，用的不好还会浪费大量的空间。一般的，VARCHAR可以更好的处理你的数据。 <br>
十九、尽量不要使用临时表 <br>
尽量不要使用临时表，除非你必须这样做。一般使用子查询可以代替临时表。使用临时表会带来系统开销，如果你是用COM+进行编程，它还会给你带来很大的麻烦，因为COM+使用数据库连接池而临时表却自始至终都存在。SQL Server提供了一些替代方案，比如Table数据类型。 <br>
二十、学会分析查询 <br>
SQL Server查询分析器是你的好伙伴，通过它你可以了解查询和索引是如何影响性能的。 <br>
二十一、使用参照完整性 <br>
定义主健、唯一性约束和外键，这样做可以节约大量的时间。 <br> <a href="http://hi.baidu.com/viplotus/blog/item/1bb04aaf177cd4f3faed504a.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/viplotus/blog/category/%B1%E0%B3%CC">编程</a>&nbsp;<a href="http://hi.baidu.com/viplotus/blog/item/1bb04aaf177cd4f3faed504a.html#comment">查看评论</a>]]></description>
        <pubDate>2009年05月06日 星期三  09:10</pubDate>
        <category><![CDATA[编程]]></category>
        <author><![CDATA[viplotus]]></author>
		<guid>http://hi.baidu.com/viplotus/blog/item/1bb04aaf177cd4f3faed504a.html</guid>
</item>

<item>
        <title><![CDATA[30个Oracle语句优化规则详解【下】]]></title>
        <link><![CDATA[http://hi.baidu.com/viplotus/blog/item/b7c19bd466e81909a08bb7d4.html]]></link>
        <description><![CDATA[
		
		<span style="display: block;" >
<p style="text-indent: 24px;"><strong>18.用EXISTS替代IN</strong></p>
<p style="text-indent: 24px;">在许多基于基础表的查询中，为了满足一个条件，往往需要对另一个表进行联接。在这种情况下，使用EXISTS(或NOT EXISTS)通常将提高查询的效率。</p>
<p style="text-indent: 24px;">低效：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT * <br>
            FROM EMP (基础表) <br>
            WHERE EMPNO &gt; 0 <br>
            AND DEPTNO IN (SELECT DEPTNO <br>
            FROM DEPT <br>
            WHERE LOC =&lsquo;MELB&rsquo;) </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">高效：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT * <br>
            FROM EMP (基础表) <br>
            WHERE EMPNO &gt; 0 <br>
            AND EXISTS (SELECT&lsquo;X&rsquo; <br>
            FROM DEPT <br>
            WHERE DEPT.DEPTNO = EMP.DEPTNO <br>
            AND LOC =&lsquo;MELB&rsquo;) </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">(译者按：相对来说，用NOT EXISTS替换NOT IN将更显著地提高效率，下一节中将指出)</p>
<p style="text-indent: 24px;"><strong>19.用NOT EXISTS替代NOT IN</strong></p>
<p style="text-indent: 24px;">在子查询中，NOT IN子句将执行一个内部的排序和合并。无论在哪种情况下，NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。为了避免使用NOT IN，我们可以把它改写成外连接(Outer Joins)或NOT EXISTS。</p>
<p style="text-indent: 24px;">例如：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT … <br>
            FROM EMP <br>
            WHERE DEPT_NO NOT IN (SELECT DEPT_NO <br>
            FROM DEPT <br>
            WHERE DEPT_CAT=&rsquo;A&rsquo;); </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">为了提高效率。改写为：</p>
<p style="text-indent: 24px;">(方法一：高效)</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT …. <br>
            FROM EMP A，DEPT B <br>
            WHERE A.DEPT_NO = B.DEPT(+) <br>
            AND B.DEPT_NO IS NULL <br>
            AND B.DEPT_CAT(+) = &lsquo;A&rsquo;</td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">(方法二：最高效)</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT …. <br>
            FROM EMP E <br>
            WHERE NOT EXISTS (SELECT &lsquo;X&rsquo; <br>
            FROM DEPT D <br>
            WHERE D.DEPT_NO = E.DEPT_NO <br>
            AND DEPT_CAT = &lsquo;A&rsquo;); </td>
        </tr>
    </tbody>
</table>
<span class="displayclass"><span style="display: block;" >
<p style="text-indent: 24px;"><strong>20.用表连接替换EXISTS</strong></p>
<p style="text-indent: 24px;">通常来说，采用表连接的方式比EXISTS更有效率</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT ENAME <br>
            FROM EMP E <br>
            WHERE EXISTS (SELECT &lsquo;X&rsquo; <br>
            FROM DEPT <br>
            WHERE DEPT_NO = E.DEPT_NO <br>
            AND DEPT_CAT = &lsquo;A&rsquo;); </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">(更高效)</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT ENAME <br>
            FROM DEPT D，EMP E <br>
            WHERE E.DEPT_NO = D.DEPT_NO <br>
            AND DEPT_CAT = &lsquo;A&rsquo; ; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">(译者按：在RBO的情况下，前者的执行路径包括FILTER，后者使用NESTED LOOP)</p>
<p style="text-indent: 24px;"><strong>21.用EXISTS替换DISTINCT</strong></p>
<p style="text-indent: 24px;">当提交一个包含一对多表信息(比如部门表和雇员表)的查询时，避免在SELECT子句中使用DISTINCT。一般可以考虑用EXIST替换</p>
<p style="text-indent: 24px;">例如：</p>
<p style="text-indent: 24px;">低效：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT DISTINCT DEPT_NO，DEPT_NAME <br>
            FROM DEPT D，EMP E <br>
            WHERE D.DEPT_NO = E.DEPT_NO </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">高效：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3">SELECT DEPT_NO，DEPT_NAME <br>
            FROM DEPT D <br>
            WHERE EXISTS ( SELECT &lsquo;X&rsquo; <br>
            FROM EMP E <br>
            WHERE E.DEPT_NO = D.DEPT_NO);</td>
        </tr>
    </tbody>
</table>
 
<p style="text-indent: 24px;">EXISTS使查询更为迅速，因为RDBMS核心模块将在子查询的条件一旦满足后，立刻返回结果。</p>
<p style="text-indent: 24px;"><strong>22.识别&lsquo;低效执行&rsquo;的SQL语句</strong></p>
<p style="text-indent: 24px;">用下列SQL工具找出低效SQL：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT EXECUTIONS ， DISK_READS， BUFFER_GETS， <br>
            ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS，2) Hit_radio， <br>
            ROUND(DISK_READS/EXECUTIONS，2) Reads_per_run， <br>
            SQL_TEXT <br>
            FROM V$SQLAREA <br>
            WHERE EXECUTIONS&gt;0 <br>
            AND BUFFER_GETS &gt; 0 <br>
            AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS &lt; 0.8 <br>
            ORDER BY 4 DESC; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">(译者按：虽然目前各种关于SQL优化的图形化工具层出不穷，但是写出自己的SQL工具来解决问题始终是一个最好的方法)</p>
<p style="text-indent: 24px;"><strong>23.使用TKPROF工具来查询SQL性能状态</strong></p>
<p style="text-indent: 24px;">SQL trace工具收集正在执行的SQL的性能状态数据并记录到一个跟踪文件中。这个跟踪文件提供了许多有用的信息，例如解析次数。执行次数，CPU使用时间等。这些数据将可以用来优化你的系统。</p>
<p style="text-indent: 24px;">设置SQL TRACE在会话级别：</p>
<p style="text-indent: 24px;">有效</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            ALTER SESSION SET SQL_TRACE TRUE</td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">设置SQL TRACE在整个数据库有效仿，你必须将SQL_TRACE参数在init.ora中设为TRUE，USER_DUMP_DEST参数说明了生成跟踪文件的目录</p>
<p style="text-indent: 24px;">(译者按：这一节中，作者并没有提到TKPROF的用法，对SQL TRACE的用法也不够准确，设置SQL TRACE首先要在init.ora中设定TIMED_STATISTICS，这样才能得到那些重要的时间状态。生成的trace文件是不可读的，所以要 用TKPROF工具对其进行转换，TKPROF有许多执行参数。大家可以参考Oracle手册来了解具体的配置。)</p>
<p style="text-indent: 24px;"><strong>24.用EXPLAIN PLAN 分析SQL语句</strong></p>
<p style="text-indent: 24px;">EXPLAIN PLAN是一个很好的分析SQL语句的工具，它甚至可以在不执行SQL的情况下分析语句。通过分析，我们就可以知道Oracle是怎么样连接表，使用什么方式扫描表(索引扫描或全表扫描)以及使用到的索引名称。</p>
<p style="text-indent: 24px;">你需要按照从里到外，从上到下的次序解读分析的结果。EXPLAIN PLAN分析的结果是用缩进的格式排列的， 最内部的操作将被最先解读，如果两个操作处于同一层中，带有最小操作号的将被首先执行。</p>
<p style="text-indent: 24px;">NESTED LOOP是少数不按照上述规则处理的操作，正确的执行路径是检查对NESTED LOOP提供数据的操作，其中操作号最小的将被最先处理。</p>
<p style="text-indent: 24px;">译者按：通过实践，感到还是用SQLPLUS中的SET TRACE功能比较方便。</p>
<p style="text-indent: 24px;">举例：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SQL&gt; list <br>
            1 SELECT * <br>
            2 FROM dept， emp <br>
            3* WHERE emp.deptno = dept.deptno <br>
            SQL&gt; set autotrace traceonly /*traceonly 可以不显示执行结果*/ <br>
            SQL&gt; / <br>
            14 rows selected. <br>
            Execution Plan <br>
            ---------------------------------------------------------- <br>
            0 SELECT STATEMENT ptimizer=CHOOSE <br>
            1 0 NESTED LOOPS <br>
            2 1 TABLE ACCESS (FULL) OF 'EMP' <br>
            3 1 TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' <br>
            4 3 INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE) <br>
            Statistics <br>
            ---------------------------------------------------------- <br>
            0 recursive calls <br>
            2 db block gets <br>
            30 consistent gets <br>
            0 physical reads <br>
            0 redo size <br>
            2598 bytes sent via SQL*Net to client <br>
            503 bytes received via SQL*Net from client <br>
            2 SQL*Net roundtrips to/from client <br>
            0 sorts (memory) <br>
            0 sorts (disk) <br>
            14 rows processed</td>
        </tr>
    </tbody>
</table>
 
<p style="text-indent: 24px;">通过以上分析，可以得出实际的执行步骤是：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            1. TABLE ACCESS (FULL) OF 'EMP' <br>
            2. INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE) <br>
            3. TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' <br>
            4. NESTED LOOPS (JOINING 1 AND 3) </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">注：目前许多第三方的工具如TOAD和Oracle本身提供的工具如OMS的SQL Analyze都提供了极其方便的EXPLAIN PLAN工具。也许喜欢图形化界面的朋友们可以选用它们。</p>
<span class="displayclass"><span style="display: block;" >
<p style="text-indent: 24px;"><strong>25.用索引提高效率</strong></p>
<p style="text-indent: 24px;">索引是表的一个概念部分，用来提高检索数据的效率。实际上，Oracle使用了一个复杂的 自平衡B-tree结构。通常，通过索引查询数据比全表扫描要快。当Oracle找出执行查询和Update语句的最佳路径时，Oracle优化器将使用 索引。同样在联结多个表时使用索引也可以提高效率。另一个使用索引的好处是，它提供了主键(primary key)的唯一性验证。除了那些LONG或LONG RAW数据类型，你可以索引几乎所有的列。通常，在大型表中使用索引特别有效。当然，你也会发现，在扫描小表时，使用索引同样能提高效率。</p>
<p style="text-indent: 24px;">虽然使用索引能得到查询效率的提高，但是我们也必须注意到它的代价。索引需要空间来存储， 也需要定期维护，每当有记录在表中增减或索引列被修改时，索引本身也会被修改。这意味着每条记录的INSERT，DELETE，UPDATE将为此多付出 4、5次的磁盘I/O。因为索引需要额外的存储空间和处理，那些不必要的索引反而会使查询反应时间变慢。</p>
<p style="text-indent: 24px;">译者按：定期的重构索引是有必要的。</p>
<p style="text-indent: 24px;">ALTER INDEXREBUILD</p>
<p style="text-indent: 24px;"><strong>26.索引的操作</strong></p>
<p style="text-indent: 24px;">Oracle对索引有两种访问模式。</p>
<p style="text-indent: 24px;">索引唯一扫描(INDEX UNIQUE SCAN)</p>
<p style="text-indent: 24px;">大多数情况下，优化器通过WHERE子句访问INDEX.</p>
<p style="text-indent: 24px;">例如：</p>
<p style="text-indent: 24px;">表LODGING有两个索引：建立在LODGING列上的唯一性索引LODGING_PK和建立在MANAGER列上的非唯一性索引LODGING$MANAGER.</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT * <br>
            FROM LODGING <br>
            WHERE LODGING = &lsquo;ROSE HILL&rsquo;; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">在内部，上述SQL将被分成两步执行，首先，LODGING_PK索引将通过索引唯一扫描的方式被访问，获得相对应的ROWID，通过ROWID访问表的方式执行下一步检索。</p>
<p style="text-indent: 24px;">如果被检索返回的列包括在INDEX列中，Oracle将不执行第二步的处理(通过ROWID访问表)。因为检索数据保存在索引中，单单访问索引就可以完全满足查询结果。</p>
<p style="text-indent: 24px;">下面SQL只需要INDEX UNIQUE SCAN操作。</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT LODGING <br>
            FROM LODGING <br>
            WHERE LODGING = &lsquo;ROSE HILL&rsquo;; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">索引范围查询(INDEX RANGE SCAN)</p>
<p style="text-indent: 24px;">适用于两种情况：</p>
<p style="text-indent: 24px;">1.基于一个范围的检索</p>
<p style="text-indent: 24px;">2.基于非唯一性索引的检索</p>
<p style="text-indent: 24px;">例1：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT LODGING FROM LODGING WHERE LODGING LIKE &lsquo;M%&rsquo;;</td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">WHERE子句条件包括一系列值， Oracle将通过索引范围查询的方式查询LODGING_PK . 由于索引范围查询将返回一组值， 它的效率就要比索引唯一扫描低一些。</p>
<p style="text-indent: 24px;">例2：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT LODGING <br>
            FROM LODGING <br>
            WHERE MANAGER = &lsquo;BILL GATES&rsquo;; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">这个SQL的执行分两步，LODGING$MANAGER的索引范围查询(得到所有符合条件记录的ROWID)和下一步同过ROWID访问表得到LODGING列的值。由于LODGING$MANAGER是一个非唯一性的索引，数据库不能对它执行索引唯一扫描。</p>
<p style="text-indent: 24px;">由于SQL返回LODGING列，而它并不存在于LODGING$MANAGER索引中，所以在索引范围查询后会执行一个通过ROWID访问表的操作。</p>
<p style="text-indent: 24px;">WHERE子句中，如果索引列所对应的值的第一个字符由通配符(WILDCARD)开始，索引将不被采用。在这种情况下，Oracle将使用全表扫描。</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3">SELECT LODGING <br>
            FROM LODGING <br>
            WHERE MANAGER LIKE&lsquo;%HANMAN&rsquo;; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;"><strong>27.基础表的选择</strong></p>
<p style="text-indent: 24px;">基础表(Driving Table)是指被最先访问的表(通常以全表扫描的方式被访问)。根据优化器的不同，SQL语句中基础表的选择是不一样的。</p>
<p style="text-indent: 24px;">如果你使用的是CBO (COST BASED OPTIMIZER)，优化器会检查SQL语句中的每个表的物理大小，索引的状态，然后选用花费最低的执行路径。</p>
<p style="text-indent: 24px;">如果你用RBO (RULE BASED OPTIMIZER)，并且所有的连接条件都有索引对应，在这种情况下，基础表就是FROM 子句中列在最后的那个表。blog</p>
<p style="text-indent: 24px;">举例：</p>
<p style="text-indent: 24px;">SELECT A.NAME ， B.MANAGER<br>
FROM　WORKER A，<br>
LODGING B<br>
WHERE　A.LODGING = B.LODING;</p>
<p style="text-indent: 24px;">由于LODGING表的LODING列上有一个索引，而且WORKER表中没有相比较的索引，WORKER表将被作为查询中的基础表。</p>
<p style="text-indent: 24px;"><strong>28.多个平等的索引</strong></p>
<p style="text-indent: 24px;">当SQL语句的执行路径可以使用分布在多个表上的多个索引时，Oracle会同时使用多个索引并在运行时对它们的记录进行合并， 检索出仅对全部索引有效的记录。</p>
<p style="text-indent: 24px;">在Oracle选择执行路径时，唯一性索引的等级高于非唯一性索引。然而这个规则只有当WHERE子句中索引列和常量比较才有效。如果索引列和其他表的索引类相比较。这种子句在优化器中的等级是非常低的。</p>
<p style="text-indent: 24px;">如果不同表中两个想同等级的索引将被引用，FROM子句中表的顺序将决定哪个会被率先使用。FROM子句中最后的表的索引将有最高的优先级。</p>
<p style="text-indent: 24px;">如果相同表中两个想同等级的索引将被引用，WHERE子句中最先被引用的索引将有最高的优先级。</p>
<p style="text-indent: 24px;">举例：</p>
<p style="text-indent: 24px;">DEPTNO上有一个非唯一性索引，EMP_CAT也有一个非唯一性索引。</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT ENAME， <br>
            FROM EMP <br>
            WHERE DEPT_NO = 20 <br>
            AND EMP_CAT = &lsquo;A&rsquo;; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">这里，DEPTNO索引将被最先检索，然后同EMP_CAT索引检索出的记录进行合并。执行路径如下：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            TABLE ACCESS BY ROWID ON EMP <br>
            AND-EQUAL <br>
            INDEX RANGE SCAN ON DEPT_IDX <br>
            INDEX RANGE SCAN ON CAT_IDX </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;"><strong>29.等式比较和范围比较</strong></p>
<p style="text-indent: 24px;">当WHERE子句中有索引列，Oracle不能合并它们，Oracle将用范围比较。</p>
<p style="text-indent: 24px;">举例：</p>
<p style="text-indent: 24px;">DEPTNO上有一个非唯一性索引，EMP_CAT也有一个非唯一性索引：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT ENAME <br>
            FROM EMP <br>
            WHERE DEPTNO &gt; 20 <br>
            AND EMP_CAT = &lsquo;A&rsquo;; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">这里只有EMP_CAT索引被用到，然后所有的记录将逐条与DEPTNO条件进行比较。执行路径如下：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            TABLE ACCESS BY ROWID ON EMP <br>
            INDEX RANGE SCAN ON CAT_IDX </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;"><strong>30.不明确的索引等级</strong></p>
<p style="text-indent: 24px;">当Oracle无法判断索引的等级高低差别，优化器将只使用一个索引，它就是在WHERE子句中被列在最前面的。</p>
<p style="text-indent: 24px;">举例：</p>
<p style="text-indent: 24px;">DEPTNO上有一个非唯一性索引，EMP_CAT也有一个非唯一性索引。</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT ENAME <br>
            FROM EMP <br>
            WHERE DEPTNO &gt; 20 <br>
            AND EMP_CAT &gt; &lsquo;A&rsquo;; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">这里，Oracle只用到了DEPT_NO索引。执行路径如下：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            TABLE ACCESS BY ROWID ON EMP <br>
            INDEX RANGE SCAN ON DEPT_IDX </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">译者按：我们来试一下以下这种情况：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SQL&gt; select index_name， uniqueness from user_indexes where table_name = 'EMP'; <br>
            INDEX_NAME UNIQUENES <br>
            ------------------------------ --------- <br>
            EMPNO UNIQUE <br>
            EMPTYPE NONUNIQUE <br>
            SQL&gt; select * from emp where empno &gt;= 2 and emp_type = 'A' ; <br>
            no rows selected <br>
            Execution Plan <br>
            ---------------------------------------------------------- <br>
            0 SELECT STATEMENT ptimizer=CHOOSE <br>
            1 0 TABLE ACCESS (BY INDEX ROWID) OF 'EMP' <br>
            2 1 INDEX (RANGE SCAN) OF 'EMPTYPE' (NON-UNIQUE) </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">虽然EMPNO是唯一性索引，但是由于它所做的是范围比较，等级要比非唯一性索引的等式比较低!</p>
<p style="text-indent: 24px;">转自：http://blog.csdn.net/CompassButton/archive/2009/01/13/3766703.aspx</p>
<p style="text-indent: 24px;"> </p>
</span></span></span></span></span> <a href="http://hi.baidu.com/viplotus/blog/item/b7c19bd466e81909a08bb7d4.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/viplotus/blog/category/%B1%E0%B3%CC">编程</a>&nbsp;<a href="http://hi.baidu.com/viplotus/blog/item/b7c19bd466e81909a08bb7d4.html#comment">查看评论</a>]]></description>
        <pubDate>2009年05月05日 星期二  22:25</pubDate>
        <category><![CDATA[编程]]></category>
        <author><![CDATA[viplotus]]></author>
		<guid>http://hi.baidu.com/viplotus/blog/item/b7c19bd466e81909a08bb7d4.html</guid>
</item>

<item>
        <title><![CDATA[30个Oracle语句优化规则详解【上】]]></title>
        <link><![CDATA[http://hi.baidu.com/viplotus/blog/item/6f967b6000c7194ceaf8f8cb.html]]></link>
        <description><![CDATA[
		
		<p style="text-indent: 24px;"><strong>1.选用适合的Oracle优化器</strong></p>
<p style="text-indent: 24px;">Oracle的优化器共有3种：</p>
<p style="text-indent: 24px;">a.RULE(基于规则)</p>
<p style="text-indent: 24px;">b.COST(基于成本)</p>
<p style="text-indent: 24px;">c.CHOOSE(选择性)</p>
<p style="text-indent: 24px;">设置缺省的优化器，可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明，如RULE、COST、CHOOSE、ALL_ROWS、FIRST_ROWS。你当然也在SQL句级或是会话(session)级对其进行覆盖。</p>
<p style="text-indent: 24px;">为了使用基于成本的优化器(CBO，Cost-Based Optimizer)，你必须经常运行analyze命令，以增加数据库中的对象统计信息(object statistics)的准确性。</p>
<p style="text-indent: 24px;">如果数据库的优化器模式设置为选择性(CHOOSE)，那么实际的优化器模式将和是否运行过analyze命令有关。如果table已经被analyze过，优化器模式将自动成为CBO，反之，数据库将采用RULE形式的优化器。</p>
<p style="text-indent: 24px;">在缺省情况下，Oracle采用CHOOSE优化器，为了避免那些不必要的全表扫描(full table scan)，你必须尽量避免使用CHOOSE优化器，而直接采用基于规则或者基于成本的优化器。</p>
<p style="text-indent: 24px;"><strong>2.访问Table的方式Oracle采用两种访问表中记录的方式：</strong></p>
<p style="text-indent: 24px;">a.全表扫描</p>
<p style="text-indent: 24px;">全表扫描就是顺序地访问表中每条记录。Oracle采用一次读入多个数据块(database block)的方式优化全表扫描。</p>
<p style="text-indent: 24px;">b. 通过ROWID访问表</p>
<p style="text-indent: 24px;">你可以采用基于ROWID的访问方式情况，提高访问表的效率，ROWID包含了表中记录的 物理位置信息……Oracle采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。通常索引提供了快速访问ROWID的方 法，因此那些基于索引列的查询就可以得到性能上的提高。</p>
<p style="text-indent: 24px;"><strong>3.共享SQL语句</strong></p>
<p style="text-indent: 24px;">为了不重复解析相同的SQL语句，在第一次解析之后，Oracle将SQL语句存放在内存 中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。因此，当你执行一个SQL语句(有时被称为一个游标)时，如果它和之前的执行过的语句完全相 同，Oracle就能很快获得已经被解析的语句以及最好的执行路径。Oracle的这个功能大大地提高了SQL的执行性能并节省了内存的使用。</p>
<p style="text-indent: 24px;">可惜的是Oracle只对简单的表提供高速缓冲(cache buffering) ，这个功能并不适用于多表连接查询。</p>
<p style="text-indent: 24px;">数据库管理员必须在init.ora中为这个区域设置合适的参数，当这个内存区域越大，就可以保留更多的语句，当然被共享的可能性也就越大了。</p>
<p style="text-indent: 24px;">当你向Oracle提交一个SQL语句，Oracle会首先在这块内存中查找相同的语句。</p>
<p style="text-indent: 24px;">这里需要注明的是，Oracle对两者采取的是一种严格匹配，要达成共享，SQL语句必须完全相同(包括空格，换行等)。</p>
<p style="text-indent: 24px;">共享的语句必须满足三个条件：</p>
<p style="text-indent: 24px;">A.字符级的比较：</p>
<p style="text-indent: 24px;">当前被执行的语句和共享池中的语句必须完全相同。</p>
<p style="text-indent: 24px;">例如：</p>
<p style="text-indent: 24px;">SELECT * FROM EMP;</p>
<p style="text-indent: 24px;">和下列每一个都不同</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT * from EMP; <br>
            Select * From Emp; <br>
            SELECT * FROM EMP; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">B.两个语句所指的对象必须完全相同：</p>
<p style="text-indent: 24px;">例如：</p>
<p style="text-indent: 24px;">用户对象名如何访问</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            Jack sal_limit private synonym <br>
            Work_city public synonym <br>
            Plant_detail public synonym <br>
            Jill sal_limit private synonym <br>
            Work_city public synonym <br>
            Plant_detail table owner </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">考虑一下下列SQL语句能否在这两个用户之间共享。</p>
<p style="text-indent: 24px;">SQL能否共享原因</p>
<p style="text-indent: 24px;">select max(sal_cap) from sal_limit；不能每个用户都有一个private synonym - sal_limit，它们是不同的对象</p>
<p style="text-indent: 24px;">select count(*0 from work_city where sdesc like 'NEW%'；能两个用户访问相同的对象public synonym - work_city</p>
<p style="text-indent: 24px;">select a.sdesc，b.location from work_city a，plant_detail b where a.city_id = b.city_id不能用户jack通过private synonym访问plant_detail而jill是表的所有者，对象不同。</p>
<p style="text-indent: 24px;">C.两个SQL语句中必须使用相同的名字的绑定变量(bind variables)</p>
<p style="text-indent: 24px;">例如：第一组的两个SQL语句是相同的(可以共享)，而第二组中的两个语句是不同的(即使在运行时，赋于不同的绑定变量相同的值)</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            a.　 <br>
            select pin ，name from people where pin = ：blk1.pin; <br>
            select pin ，name from people where pin = ：blk1.pin;  <br>
            b. <br>
            select pin ，name from people where pin = ：blk1.ot_ind; <br>
            select pin ，name from people where pin = ：blk1.ov_ind; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;"><br>
<strong>　4.选择最有效率的表名顺序(只在基于规则的优化器中有效)</strong></p>
<p style="text-indent: 24px;">Oracle的解析器按照从右到左的顺序处理FROM子句中的表名，因此FROM子句中写 在最后的表(基础表 driving table)将被最先处理。在FROM子句中包含多个表的情况下，你必须选择记录条数最少的表作为基础表。当Oracle处理多个表时，会运用排序及合并 的方式连接它们。首先，扫描第一个表(FROM子句中最后的那个表)并对记录进行派序，然后扫描第二个表(FROM子句中最后第二个表)，最后将所有从第 二个表中检索出的记录与第一个表中合适记录进行合并。</p>
<p style="text-indent: 24px;">例如：</p>
<p style="text-indent: 24px;">表TAB1 16，384 条记录</p>
<p style="text-indent: 24px;">表TAB2 1条记录</p>
<p style="text-indent: 24px;">选择TAB2作为基础表(最好的方法)</p>
<p style="text-indent: 24px;">select count(*) from tab1，tab2 执行时间0.96秒</p>
<p style="text-indent: 24px;">选择TAB2作为基础表(不佳的方法)　</p>
<p style="text-indent: 24px;">select count(*) from tab2，tab1 执行时间26.09秒</p>
<p style="text-indent: 24px;">如果有3个以上的表连接查询，那就需要选择交叉表(intersection table)作为基础表，交叉表是指那个被其他表所引用的表。</p>
<p style="text-indent: 24px;">例如：EMP表描述了LOCATION表和CATEGORY表的交集。</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT * <br>
            FROM LOCATION L ， <br>
            CATEGORY C， <br>
            EMP E <br>
            WHERE E.EMP_NO BETWEEN 1000 AND 2000 <br>
            AND E.CAT_NO = C.CAT_NO <br>
            AND E.LOCN = L.LOCN </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;"><br>
将比下列SQL更有效率</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT * <br>
            FROM EMP E ， <br>
            LOCATION L ， <br>
            CATEGORY C <br>
            WHERE E.CAT_NO = C.CAT_NO <br>
            AND E.LOCN = L.LOCN <br>
            AND E.EMP_NO BETWEEN 1000 AND 2000</td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;"><strong>5. WHERE子句中的连接顺序</strong></p>
<p style="text-indent: 24px;">Oracle采用自下而上的顺序解析WHERE子句，根据这个原理，表之间的连接必须写在其他WHERE条件之前，那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。</p>
<p style="text-indent: 24px;">例如：</p>
<p style="text-indent: 24px;">(低效，执行时间156.3秒）</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT … <br>
            FROM EMP E <br>
            WHERE SAL &gt; 50000 <br>
            AND JOB = &lsquo;MANAGER&rsquo; <br>
            AND 25 &lt; (SELECT COUNT(*) FROM EMP <br>
            WHERE MGR=E.EMPNO); </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">(高效，执行时间10.6秒)</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3">SELECT … <br>
            FROM EMP E <br>
            WHERE 25 &lt; (SELECT COUNT(*) FROM EMP <br>
            WHERE MGR=E.EMPNO) <br>
            AND SAL &gt; 50000 <br>
            AND JOB = &lsquo;MANAGER&rsquo;; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;"><strong>6.SELECT子句中避免使用&lsquo; * &rsquo;</strong></p>
<p style="text-indent: 24px;">当你想在SELECT子句中列出所有的COLUMN时，使用动态SQL列引用&lsquo;*&rsquo;是一个 方便的方法。不幸的是，这是一个非常低效的方法。实际上，Oracle在解析的过程中，会将&lsquo;*&rsquo;依次转换成所有的列名，这个工作是通过查询数据字典完成 的，这意味着将耗费更多的时间。</p>
<p style="text-indent: 24px;"><strong>7.减少访问数据库的次数</strong></p>
<p style="text-indent: 24px;">当执行每条SQL语句时，Oracle在内部执行了许多工作：解析SQL语句，估算索引的利用率，绑定变量，读数据块等等。由此可见，减少访问数据库的次数，就能实际上减少Oracle的工作量。</p>
<p style="text-indent: 24px;">例如，以下有三种方法可以检索出雇员号等于0342或0291的职员。</p>
<p style="text-indent: 24px;">方法1(最低效)</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3">SELECT EMP_NAME， SALARY， GRADE <br>
            FROM EMP <br>
            WHERE EMP_NO = 342; <br>
            SELECT EMP_NAME， SALARY， GRADE <br>
            FROM EMP <br>
            WHERE EMP_NO = 291; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">方法2(次低效)</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            DECLARE <br>
            CURSOR C1 (E_NO NUMBER) IS <br>
            SELECT EMP_NAME，SALARY，GRADE <br>
            FROM EMP <br>
            WHERE EMP_NO = E_NO; <br>
            BEGIN <br>
            OPEN C1(342); <br>
            FETCH C1 INTO …，..，.. ; <br>
            OPEN C1(291); <br>
            FETCH C1 INTO …，..，.. ; <br>
            CLOSE C1; END;</td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">方法3(高效)</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT A.EMP_NAME，A.SALARY，A.GRADE， <br>
            B.EMP_NAME， B.SALARY， B.GRADE <br>
            FROM EMP A，EMP B <br>
            WHERE A.EMP_NO = 342 <br>
            AND B.EMP_NO = 291; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">注意：</p>
<p style="text-indent: 24px;">在SQL*Plus，SQL*Forms和Pro*C中重新设置ARRAYSIZE参数，可以增加每次数据库访问的检索数据量，建议值为200。</p>
<p style="text-indent: 24px;"><strong>8.使用DECODE函数来减少处理时间</strong></p>
<p style="text-indent: 24px;">使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表。</p>
<p style="text-indent: 24px;">例如：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT COUNT(*)，SUM(SAL) <br>
            FROM　EMP <br>
            WHERE DEPT_NO = 0020 <br>
            AND ENAME LIKE&lsquo;SMITH%&rsquo;; <br>
            SELECT COUNT(*)，SUM(SAL) <br>
            FROM　EMP <br>
            WHERE DEPT_NO = 0030 <br>
            AND ENAME LIKE&lsquo;SMITH%&rsquo;; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">你可以用DECODE函数高效地得到相同结果</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3">SELECT COUNT(DECODE(DEPT_NO，0020，&rsquo;X&rsquo;，NULL)) D0020_COUNT， <br>
            COUNT(DECODE(DEPT_NO，0030，&rsquo;X&rsquo;，NULL)) D0030_COUNT， <br>
            SUM(DECODE(DEPT_NO，0020，SAL，NULL)) D0020_SAL， <br>
            SUM(DECODE(DEPT_NO，0030，SAL，NULL)) D0030_SAL <br>
            FROM EMP WHERE ENAME LIKE&lsquo;SMITH%&rsquo;; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">类似的，DECODE函数也可以运用于GROUP BY 和ORDER BY子句中。</p>
<p style="text-indent: 24px;"><strong>9.整合简单，无关联的数据库访问</strong></p>
<p style="text-indent: 24px;">如果你有几个简单的数据库查询语句，你可以把它们整合到一个查询中(即使它们之间没有关系)</p>
<p style="text-indent: 24px;">例如：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT NAME <br>
            FROM EMP <br>
            WHERE EMP_NO = 1234; <br>
            SELECT NAME <br>
            FROM DPT <br>
            WHERE DPT_NO = 10 ; <br>
            SELECT NAME <br>
            FROM CAT <br>
            WHERE CAT_TYPE =&lsquo;RD&rsquo;; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">上面的3个查询可以被合并成一个：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3">SELECT E.NAME ， D.NAME ， C.NAME <br>
            FROM CAT C ， DPT D ， EMP E，DUAL X <br>
            WHERE NVL(&lsquo;X&rsquo;，X.DUMMY) = NVL(&lsquo;X&rsquo;，E.ROWID(+)) <br>
            AND NVL(&lsquo;X&rsquo;，X.DUMMY) = NVL(&lsquo;X&rsquo;，D.ROWID(+)) <br>
            AND NVL(&lsquo;X&rsquo;，X.DUMMY) = NVL(&lsquo;X&rsquo;，C.ROWID(+)) <br>
            AND E.EMP_NO(+) = 1234 <br>
            AND D.DEPT_NO(+) = 10 <br>
            AND C.CAT_TYPE(+) = &lsquo;RD&rsquo;; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;"><strong>10.删除重复记录</strong></p>
<p style="text-indent: 24px;">最高效的删除重复记录方法(因为使用了ROWID)</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            DELETE FROM EMP E <br>
            WHERE E.ROWID &gt; (SELECT MIN(X.ROWID) <br>
            FROM EMP X <br>
            WHERE X.EMP_NO = E.EMP_NO); </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;"><strong>11.用TRUNCATE替代DELETE</strong></p>
<p style="text-indent: 24px;">当删除表中的记录时，在通常情况下，回滚段(rollback segments)用来存放可以被恢复的信息。如果你没有COMMIT事务，Oracle会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)</p>
<p style="text-indent: 24px;">而当运用TRUNCATE时，回滚段不再存放任何可被恢复的信息。当命令运行后，数据不能被恢复。因此很少的资源被调用，执行时间也会很短。</p>
<p style="text-indent: 24px;">(译者按：TRUNCATE只在删除全表适用，TRUNCATE是DDL不是DML)</p>
<p style="text-indent: 24px;"><strong>12.尽量多使用COMMIT</strong></p>
<p style="text-indent: 24px;">只要有可能，在程序中尽量多使用COMMIT，这样程序的性能得到提高，需求也会因为COMMIT所释放的资源而减少：COMMIT所释放的资源：</p>
<p style="text-indent: 24px;">a.回滚段上用于恢复数据的信息。</p>
<p style="text-indent: 24px;">b.被程序语句获得的锁</p>
<p style="text-indent: 24px;">c.redo log buffer中的空间</p>
<p style="text-indent: 24px;">d.Oracle为管理上述3种资源中的内部花费</p>
<p style="text-indent: 24px;">(译者按：在使用COMMIT时必须要注意到事务的完整性，现实中效率和事务完整性往往是鱼和熊掌不可得兼)</p>
<p style="text-indent: 24px;"><strong>13.计算记录条数</strong></p>
<p style="text-indent: 24px;">和一般的观点相反，count(*) 比count(1)稍快，当然如果可以通过索引检索，对索引列的计数仍旧是最快的。例如 COUNT(EMPNO)</p>
<p style="text-indent: 24px;">(译者按：在CSDN论坛中，曾经对此有过相当热烈的讨论，作者的观点并不十分准确，通过实际的测试，上述三种方法并没有显著的性能差别)</p>
<p style="text-indent: 24px;"><strong>14.用Where子句替换HAVING子句</strong></p>
<p style="text-indent: 24px;">避免使用HAVING子句，HAVING 只会在检索出所有记录之后才对结果集进行过滤。这个处理需要排序，总计等操作。如果能通过WHERE子句限制记录的数目，那就能减少这方面的开销。</p>
<p style="text-indent: 24px;">例如：</p>
<p style="text-indent: 24px;">低效：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT REGION，AVG(LOG_SIZE) <br>
            FROM LOCATION <br>
            GROUP BY REGION <br>
            HAVING REGION REGION !=&lsquo;SYDNEY&rsquo; <br>
            AND REGION !=&lsquo;PERTH&rsquo; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">高效：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT REGION，AVG(LOG_SIZE) <br>
            FROM LOCATION <br>
            WHERE REGION REGION != &lsquo;SYDNEY&rsquo; <br>
            AND REGION != &lsquo;PERTH&rsquo; <br>
            GROUP BY REGION</td>
        </tr>
    </tbody>
</table>
<span style="display: block;" >
<p style="text-indent: 24px;"><strong>15.减少对表的查询</strong></p>
<p style="text-indent: 24px;">在含有子查询的SQL语句中，要特别注意减少对表的查询。</p>
<p style="text-indent: 24px;">例如：</p>
<p style="text-indent: 24px;">低效</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT TAB_NAME <br>
            FROM TABLES <br>
            WHERE TAB_NAME = ( SELECT TAB_NAME <br>
            FROM TAB_COLUMNS <br>
            WHERE VERSION = 604) <br>
            AND DB_VER= ( SELECT DB_VER <br>
            FROM TAB_COLUMNS <br>
            WHERE VERSION = 604) </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">高效</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT TAB_NAME <br>
            FROM TABLES <br>
            WHERE (TAB_NAME，DB_VER) <br>
            = ( SELECT TAB_NAME，DB_VER) <br>
            FROM TAB_COLUMNS <br>
            WHERE VERSION = 604) <br>
            Update 多个Column 例子：</td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">低效：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            UPDATE EMP <br>
            SET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES)， <br>
            SAL_RANGE = (SELECT MAX(SAL_RANGE) FROM EMP_CATEGORIES) <br>
            WHERE EMP_DEPT = 0020; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">高效：</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3">UPDATE EMP <br>
            SET (EMP_CAT， SAL_RANGE) <br>
            = (SELECT MAX(CATEGORY) ， MAX(SAL_RANGE) <br>
            FROM EMP_CATEGORIES) <br>
            WHERE EMP_DEPT = 0020; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;"><strong>16.通过内部函数提高SQL效率</strong></p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3"><br>
            SELECT H.EMPNO，E.ENAME，H.HIST_TYPE，T.TYPE_DESC，COUNT(*) <br>
            FROM HISTORY_TYPE T，EMP E，EMP_HISTORY H <br>
            WHERE H.EMPNO = E.EMPNO <br>
            AND H.HIST_TYPE = T.HIST_TYPE <br>
            GROUP BY H.EMPNO，E.ENAME，H.HIST_TYPE，T.TYPE_DESC; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">通过调用下面的函数可以提高效率。</p>
<p style="text-indent: 24px;"> </p>
<table cellspacing="0" cellpadding="6" border="0" align="center" width="95%" style="border: 1px dotted rgb(204, 204, 204); table-layout: fixed;">
    <tbody>
        <tr>
            <td bgcolor="#f3f3f3">FUNCTION LOOKUP_HIST_TYPE(TYP IN NUMBER) RETURN VARCHAR2 <br>
            AS <br>
            TDESC VARCHAR2(30); <br>
            CURSOR C1 IS <br>
            SELECT TYPE_DESC <br>
            FROM HISTORY_TYPE <br>
            WHERE HIST_TYPE = TYP; <br>
            BEGIN <br>
            OPEN C1; <br>
            FETCH C1 INTO TDESC; <br>
            CLOSE C1; <br>
            RETURN (NVL(TDESC，&rsquo;？&rsquo;)); <br>
            END; <br>
            FUNCTION LOOKUP_EMP(EMP IN NUMBER) RETURN VARCHAR2 <br>
            AS <br>
            ENAME VARCHAR2(30); <br>
            CURSOR C1 IS <br>
            SELECT ENAME <br>
            FROM EMP <br>
            WHERE EMPNO=EMP; <br>
            BEGIN <br>
            OPEN C1; <br>
            FETCH C1 INTO ENAME; <br>
            CLOSE C1; <br>
            RETURN (NVL(ENAME，&rsquo;？&rsquo;)); <br>
            END; <br>
            SELECT H.EMPNO，LOOKUP_EMP(H.EMPNO)， <br>
            H.HIST_TYPE，LOOKUP_HIST_TYPE(H.HIST_TYPE)，COUNT(*) <br>
            FROM EMP_HISTORY H <br>
            GROUP BY H.EMPNO ， H.HIST_TYPE; </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 24px;">(译者按：经常在论坛中看到如&lsquo;能不能用一个SQL写出…。&rsquo;的贴子，殊不知复杂的SQL往往牺牲了执行效率。能够掌握上面的运用函数解决问题的方法在实际工作中是非常有意义的)</p>
<p style="text-indent: 24px;"><strong>17.使用表的别名(Alias)</strong></p>
<p style="text-indent: 24px;">当在SQL语句中连接多个表时，请使用表的别名并把别名前缀于每个Column上。这样一来，就可以减少解析的时间并减少那些由Column歧义引起的语法错误。</p>
<p style="text-indent: 24px;">(译者注：Column歧义指的是由于SQL中不同的表具有相同的Column名，当SQL语句中出现这个Column时，SQL解析器无法判断这个Column的归属)</p>
<p style="text-indent: 24px;"> </p>
<p style="text-indent: 24px;">转自：http://blog.csdn.net/CompassButton/archive/2009/01/13/3766703.aspx</p>
</span> <a href="http://hi.baidu.com/viplotus/blog/item/6f967b6000c7194ceaf8f8cb.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/viplotus/blog/category/%B1%E0%B3%CC">编程</a>&nbsp;<a href="http://hi.baidu.com/viplotus/blog/item/6f967b6000c7194ceaf8f8cb.html#comment">查看评论</a>]]></description>
        <pubDate>2009年05月05日 星期二  22:23</pubDate>
        <category><![CDATA[编程]]></category>
        <author><![CDATA[viplotus]]></author>
		<guid>http://hi.baidu.com/viplotus/blog/item/6f967b6000c7194ceaf8f8cb.html</guid>
</item>


</channel>
</rss>