﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-      路漫漫其修远兮，吾将上下而求索！</title><link>http://www.blogjava.net/1948asd/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 19:52:29 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 19:52:29 GMT</pubDate><ttl>60</ttl><item><title>ORACLE多表查询优化（转）</title><link>http://www.blogjava.net/1948asd/archive/2009/05/12/270272.html</link><dc:creator>我是菜鸟</dc:creator><author>我是菜鸟</author><pubDate>Tue, 12 May 2009 11:44:00 GMT</pubDate><guid>http://www.blogjava.net/1948asd/archive/2009/05/12/270272.html</guid><wfw:comment>http://www.blogjava.net/1948asd/comments/270272.html</wfw:comment><comments>http://www.blogjava.net/1948asd/archive/2009/05/12/270272.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1948asd/comments/commentRss/270272.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1948asd/services/trackbacks/270272.html</trackback:ping><description><![CDATA[
		<div class="tit">ORACLE多表查询优化</div>
		<div class="date"> </div>
		<table style="TABLE-LAYOUT: fixed">
				<tbody>
						<tr>
								<td>
										<div class="cnt" id="blog_text">这里提供的是执行性能的优化,而不是后台数据库优化器资料: 
<p>参考数据库开发性能方面的各种问题,收集了一些优化方案统计如下(当然,象<strong>索引</strong>等优化方案太过简单就不列入了,嘿嘿):</p><p><strong>执行路径:ORACLE</strong>的这个功能大大地提高了SQL的执行性能并节省了内存的使用:我们发现,单表数据的统计比多表统计的速度完全是两个概念.单表统计可能只要0.02秒,但是2张表联合统计就可能要几十表了.这是因为<strong>ORACLE</strong>只对简单的表提供<strong>高速缓冲</strong>(cache buffering) ,这个功能并不适用于<strong>多表连接查询</strong>..数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了.</p><p>当你向<strong>ORACLE</strong>提交一个SQL语句,<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66"><font style="BACKGROUND-COLOR: white">ORACLE</font></strong>会首先在这块内存中查找相同的语句. <br />这里需要注明的是,<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66"><font style="BACKGROUND-COLOR: white">ORACLE</font></strong>对两者采取的是一种严格匹配,要达成共享,SQL语句必须 <br />完全相同(包括空格,换行等). <br />      共享的语句必须满足三个条件: <br /><strong>A.       字符级的比较:</strong><br />当前被执行的语句和共享池中的语句必须完全相同. <br />       例如: <br />           SELECT * FROM EMP; <br />       和下列每一个都不同 <br />           SELECT * from EMP; <br />           Select * From Emp; <br />           SELECT       *      FROM EMP;</p><p><strong>B.       两个语句所指的对象必须完全相同:</strong><strong><br /></strong></p><p>   用户对象名                       如何访问 <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 <br />      考虑一下下列SQL语句能否在这两个用户之间共享. <br />SQL 能否共享 原因 <br />select max(sal_cap) from sal_limit; 不能 每个用户都有一个private synonym - sal_limit , 它们是不同的对象 <br />select count(*) from work_city where sdesc like 'NEW%'; 能 两个用户访问相同的对象public synonym - work_city <br />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><strong>C.       两个SQL语句中必须使用相同的名字的绑定变量(bind variables)</strong><br />例如：第一组的两个SQL语句是相同的(可以共享),而第二组中的两个语句是不同的(即使在运行时,赋于不同的绑定变量相同的值) <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; <br /><strong>重点关注1:选择最有效率的表名顺序(只在基于规则的优化器中有效)</strong><strong><font color="#ff0000">重点关注<br /></font>ORACLE</strong>的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66"><font style="BACKGROUND-COLOR: white">ORACLE</font></strong>处理多个表时, 会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并. <br />例如:       表 TAB1 16,384 条记录 <br />          表 TAB2 1       条记录 <br />      选择TAB2作为基础表 (最好的方法) <br />      select count(*) from tab1,tab2    执行时间0.96秒 <br />      选择TAB2作为基础表 (不佳的方法)<br />select count(*) from tab2,tab1    执行时间26.09秒 <br />如果有3个以上的表连接<strong style="COLOR: black; BACKGROUND-COLOR: #ff9999">查询</strong>, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. <br />例如:    EMP表描述了LOCATION表和CATEGORY表的交集. <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 <br />将比下列SQL更有效率 <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 <br /><strong>重点关注2:WHERE子句中的连接顺序．</strong><strong><font color="#ff0000">重点关注</font></strong></p><p><font color="#ff0000"><font color="#000000"><strong><font style="BACKGROUND-COLOR: white">ORACLE</font></strong>采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. <br />例如: <br /><strong>(低效,执行时间156.3秒) <br /></strong>SELECT … <br />FROM EMP E <br />WHERE   SAL &gt;; 50000 <br />AND     JOB = ‘MANAGER’ <br />AND     25 &lt; (SELECT COUNT(*) FROM EMP</font><br /><font color="#000000">WHERE MGR=E.EMPNO); <br /><strong>(高效,执行时间10.6秒) <br /></strong>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 = ‘MANAGER’; </font><br /><font color="#000000"><strong>重点关注3:SELECT子句中避免使用 ‘ * ‘ ．</strong></font><strong><font color="#ff0000">重点关注</font></strong></font></p><p>当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常低效的方法. 实际上,<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66"><font style="BACKGROUND-COLOR: white">ORACLE</font></strong>在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个工作是通过<strong style="COLOR: black; BACKGROUND-COLOR: #ff9999"><font style="BACKGROUND-COLOR: white">查询</font></strong>数据字典完成的, 这意味着将耗费更多的时间. <br />7.      减少访问数据库的次数 <br />当执行每条SQL语句时, <strong style="COLOR: black; BACKGROUND-COLOR: #ffff66"><font style="BACKGROUND-COLOR: white">ORACLE</font></strong>在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等等. 由此可见, 减少访问数据库的次数 , 就能实际上减少<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66"><font style="BACKGROUND-COLOR: white">ORACLE</font></strong>的工作量. <br />例如, <br />     以下有三种方法可以检索出雇员号等于0342或0291的职员. <br /><strong>方法1 (最低效) <br /></strong>     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; <br /><strong>方法2 (次低效) <br /></strong>        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; <br />       END; <br /><strong>方法3 (高效) <br /></strong>     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; <br />注意: <br />在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200.</p><p><strong>重点关注4:使用DECODE函数来减少处理时间.</strong><strong><font color="#ff0000">重点关注</font></strong><br />使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. <br />例如: <br />    SELECT COUNT(*)，SUM(SAL) <br />    FROM　EMP <br />    WHERE DEPT_NO = 0020 <br />    AND ENAME LIKE　‘SMITH%’; <br />    SELECT COUNT(*)，SUM(SAL) <br />    FROM　EMP <br />    WHERE DEPT_NO = 0030 <br />    AND ENAME LIKE　‘SMITH%’; <br />你可以用DECODE函数高效地得到相同结果 <br />SELECT COUNT(DECODE(DEPT_NO,0020,’X’,NULL)) D0020_COUNT, <br />         COUNT(DECODE(DEPT_NO,0030,’X’,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 ‘SMITH%’; <br />类似的,DECODE函数也可以运用于GROUP BY 和ORDER BY子句中.</p><p><strong>重点关注5: 删除重复记录.</strong><strong><font color="#ff0000">重点关注</font></strong></p><p>最高效的删除重复记录方法 ( 因为使用了ROWID) <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);</p><p><strong>重点关注6: 用TRUNCATE替代DELETE</strong><strong>.</strong><strong><font color="#ff0000">重点关注</font></strong></p><p>当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66"><font style="BACKGROUND-COLOR: white">ORACLE</font></strong>会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况) <br />而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短. <br />(译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)</p><p><strong>重点关注7: 尽量多使用COMMIT</strong><strong>.</strong><strong><font color="#ff0000">重点关注</font></strong></p><p>只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少: <br />COMMIT所释放的资源: <br />a.        回滚段上用于恢复数据的信息. <br />b.        被程序语句获得的锁 <br />c.        redo log buffer 中的空间 <br />d.       <strong style="COLOR: black; BACKGROUND-COLOR: #ffff66"><font style="BACKGROUND-COLOR: white">ORACLE</font></strong>为管理上述3种资源中的内部花费 <br />(译者按: 在使用COMMIT时必须要注意到事务的完整性,现实中效率和事务完整性往往是鱼和熊掌不可得兼) <br /><strong>重点关注8:减少对表的查询</strong><strong>.</strong><strong><font color="#ff0000">重点关注</font></strong></p><p><font color="#ff0000"><font color="#000000">在含有子</font><strong><font color="#000000">查询</font></strong><font color="#000000">的SQL语句中,要特别注意减少对表的</font><strong><font color="#000000">查询</font></strong><font color="#000000">. </font></font></p><p><font color="#ff0000"><font color="#000000">例如: <br />      低效 <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) <br />      高效 <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 例子: <br />      低效: <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; <br />      高效: <br />            UPDATE EMP <br />            SET (EMP_CAT, SAL_RANGE) <br />= (SELECT MAX(CATEGORY) , MAX(SAL_RANGE) <br />FROM EMP_CATEGORIES) <br />            WHERE EMP_DEPT = 0020; </font><br /><font color="#000000"><strong>重点关注9:用EXISTS替代IN.</strong></font><strong><font color="#ff0000">重点关注</font></strong></font></p><p><font color="#ff0000"><font color="#000000">在许多基于基础表的<strong style="COLOR: black; BACKGROUND-COLOR: #ff9999">查询</strong>中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高<strong style="COLOR: black; BACKGROUND-COLOR: #ff9999">查询</strong>的效率. <br />低效: <br />SELECT * <br />FROM EMP (基础表) <br />WHERE EMPNO &gt;; 0 <br />AND DEPTNO IN (SELECT DEPTNO <br />FROM DEPT <br />WHERE LOC = ‘MELB’) <br />     高效: <br />SELECT * <br />FROM EMP (基础表) <br />WHERE EMPNO &gt;; 0 <br />AND EXISTS (SELECT ‘X’ <br />FROM DEPT <br />WHERE DEPT.DEPTNO = EMP.DEPTNO <br />AND LOC = ‘MELB’) <br />(译者按: 相对来说,用NOT EXISTS替换NOT IN 将更显著地提高效率,下一节中将指出) </font><br /><font color="#000000"><strong>重点关注10:用NOT EXISTS替代NOT IN .</strong></font><strong><font color="#ff0000">重点关注</font></strong></font></p><p><font color="#ff0000"><font color="#000000">在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历).   为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS. <br />例如: <br />SELECT … <br />FROM EMP <br />WHERE DEPT_NO NOT IN (SELECT DEPT_NO <br />                          FROM DEPT <br />                          WHERE DEPT_CAT=’A’); <br />为了提高效率.改写为: <br />(方法一: 高效) <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(+) = ‘A’ <br />(方法二: 最高效) <br />SELECT …. <br />FROM EMP E <br />WHERE NOT EXISTS (SELECT ‘X’ <br />                     FROM DEPT D <br />                     WHERE D.DEPT_NO = E.DEPT_NO <br />                     AND DEPT_CAT = ‘A’); </font><br /><strong><font color="#000000">当然,最高效率的方法是有表关联.直接两表关系对联的速度是最快的!</font></strong><br /><font color="#000000"><strong>重点关注11:识别’低效执行’的SQL语句.</strong></font><strong><font color="#ff0000">重点关注</font></strong></font></p><p><font color="#ff0000"><font color="#000000">用下列SQL工具找出低效SQL: <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; <br />      (译者按: 虽然目前各种关于SQL优化的图形化工具层出不穷,但是写出自己的SQL工具来解决问题始终是一个最好的方法)</font></font></p></div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/1948asd/aggbug/270272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1948asd/" target="_blank">我是菜鸟</a> 2009-05-12 19:44 <a href="http://www.blogjava.net/1948asd/archive/2009/05/12/270272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库学习</title><link>http://www.blogjava.net/1948asd/archive/2009/05/11/270068.html</link><dc:creator>我是菜鸟</dc:creator><author>我是菜鸟</author><pubDate>Mon, 11 May 2009 08:37:00 GMT</pubDate><guid>http://www.blogjava.net/1948asd/archive/2009/05/11/270068.html</guid><wfw:comment>http://www.blogjava.net/1948asd/comments/270068.html</wfw:comment><comments>http://www.blogjava.net/1948asd/archive/2009/05/11/270068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1948asd/comments/commentRss/270068.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1948asd/services/trackbacks/270068.html</trackback:ping><description><![CDATA[
		<br />数据管理技术经历了人工管理、文件系统、数据库和高级数据库技术等四个阶段。<br />数据库系统是在文件系统的基础上发展而成的，同时又克服了文件系统的三个缺陷：数据的冗余、不一致性和联系弱。<br /><br />数据模型是对现实世界进行抽象的工具，用于描述现实世界的数据、数据联系、数据语义和数据约束等方面内容。数据模型分成概念模型和结构模型两大类。前者的代表是实体联系模型，后者的代表是层次、网状、关系和面向对象模型。关系模型是当今的主流模型，面向对象模型是今后发展的方向。<br /><br />数据库是存储在一起集中管理的相关数据的集合。数据库的体系结构是对数据的三个抽象级别。它把数据的具体组织留给DBMS去做，用户只需抽象地处理逻辑数据，而不必关心数据在计算机中的存储，减轻了用户使用系统的负担。由于三级结构之间往往差别很大，存在着两级映象，因此使DBS具有较高的数据独立性：物理数据独立性和逻辑数据独立性。<br /><br />数据独立性是指在某个层次上修改模式而不影响较高一层模式的能力。<br />DBMS是位于用户与OS之间的一层数据管理软件。数据库语言分成DDL和DML两类。DBMS主要由查询处理器和存储管理器两大部分组成。<br />DBS是包含DB和DBMS的计算机系统。DBS的全局结构体现了DBS的模块功能结构。<br /><br /><strong>数据库三级体系结构：<br /><img height="576" alt="fsdafsd.jpg" src="http://www.blogjava.net/images/blogjava_net/1948asd/fsdafsd.jpg" width="702" border="0" /><br /><img height="1" src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=633043282320000000" width="1" /><br /><br /></strong><br /><strong>数据库体系结构五要素:</strong><br />1、概念模式是数据库中全部数据的整体逻辑结构的描述。<br />2、外模式是用户写数据库系统的接口，是用户用到那部分数据的描述。<br />3、内模式是数据库在物理存储方面的描述，定义内部记录类型、索引和文件的组织方式，以及数据控制方面的细节。<br />4、模式／内模式映象存在于概念级和内部级之间，用于定义概念模式和内模式之间的对应性。<br />5、外模式／模式映象存在于外部级和概念级之间，用于定义外模式和概念模式之间的对应性。<br /><br /><strong> DBMS的模块组成：<br /></strong><br />查询处理器有四个主要成分：DDL编译器，DML编译器，嵌入式DML的预编译器及查询运行核心程序。<br />存储管理器有四个主要成分：权限和完整性管理器，事务管理器，文件管理器及缓冲区管理器。<br /><br /><strong>DBS的全局结构：<br /><br /><img height="1" src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=633043282320000000" width="1" /><img height="593" alt="ttttt.jpg" src="http://www.blogjava.net/images/blogjava_net/1948asd/ttttt.jpg" width="510" border="0" /><br /></strong><br /><br /><strong>DBS结构的分类：<br /></strong><br />集中式DBS（centralized DBS）<br />客户机／服务器式DBS（client/server DBS，记为C/S DBS）<br />并行式DBS（parallel DBS）<br />分布式DBS（distributed DBS）<br /><br /><br /><strong>DBA的主要职责有以下六点：</strong><br />1、定义模式。<br />2、定义内模式。<br />3、与用户的联络。包括定义外模式、应用程序的设计、提供技术培训等专业服务。<br />4、定义安全性规则，对用户访问数据库的授权。<br />5、定义完整性规则，监督数据库的运行。<br />6、数据库的转储与恢复工作。<img src ="http://www.blogjava.net/1948asd/aggbug/270068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1948asd/" target="_blank">我是菜鸟</a> 2009-05-11 16:37 <a href="http://www.blogjava.net/1948asd/archive/2009/05/11/270068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】配置ehcache.xml文件 </title><link>http://www.blogjava.net/1948asd/archive/2009/04/17/266200.html</link><dc:creator>我是菜鸟</dc:creator><author>我是菜鸟</author><pubDate>Fri, 17 Apr 2009 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/1948asd/archive/2009/04/17/266200.html</guid><wfw:comment>http://www.blogjava.net/1948asd/comments/266200.html</wfw:comment><comments>http://www.blogjava.net/1948asd/archive/2009/04/17/266200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1948asd/comments/commentRss/266200.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1948asd/services/trackbacks/266200.html</trackback:ping><description><![CDATA[. 在Hibernate配置文件中设置：<br />     
<div style="BORDER-RIGHT: windowtext 0.5pt solid; BACKGROUND: rgb(230,230,230) 0% 50%; WIDTH: 95%"><div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="COLOR: rgb(0,0,0)">&lt;!--</span><span style="COLOR: rgb(0,0,0)"> Hibernate SessionFactory </span><span style="COLOR: rgb(0,0,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">bean id</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">sessionFactory</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">class</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">org.springframework.orm.hibernate3.LocalSessionFactoryBean</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">property name</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">dataSource</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> ref</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">dataSource</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">property name</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">mappingResources</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">list</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">value</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)">com</span><span style="COLOR: rgb(0,0,0)">/</span><span style="COLOR: rgb(0,0,0)">ouou</span><span style="COLOR: rgb(0,0,0)">/</span><span style="COLOR: rgb(0,0,0)">model</span><span style="COLOR: rgb(0,0,0)">/</span><span style="COLOR: rgb(0,0,0)">Videos.hbm.xml</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">value</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)">   <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />         </span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">list</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />         </span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">property</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">property name</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">hibernateProperties</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">props</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">prop key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">hibernate.dialect</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)">org.hibernate.dialect.MySQLDialect</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">prop</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">prop key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">hibernate.current_session_context_class</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)">thread</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">prop</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">prop key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">hibernate.cglib.use_reflection_optimizer</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,255)">false</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">prop</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">prop key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">hibernate.query.substitutions</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,255)">true</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">Y</span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">, </span><span style="COLOR: rgb(0,0,255)">false</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">N</span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">prop</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;!--</span><span style="COLOR: rgb(0,0,0)">add ehcache</span><span style="COLOR: rgb(0,0,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">prop key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">hibernate.cache.provider_class</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)">org.hibernate.cache.EhCacheProvider</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">prop</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">prop key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">hibernate.cache.use_query_cache</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,255)">false</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">prop</span><span style="COLOR: rgb(0,0,0)">&gt;&lt;!--</span><span style="COLOR: rgb(0,0,0)"> 是否使用查询缓存 </span><span style="COLOR: rgb(0,0,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;!--</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">prop key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">hibernate.cache.provider_configuration_file_resource_path</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;/</span><span style="COLOR: rgb(0,0,0)">ehcache.xml</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">prop</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">prop key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">hibernate.show_sql</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,255)">true</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">prop</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;!--&lt;</span><span style="COLOR: rgb(0,0,0)">prop key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">hibernate.transaction.auto_close_session</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,255)">true</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">prop</span><span style="COLOR: rgb(0,0,0)">&gt;--&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">prop key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">connection.provider_class</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)">org.hibernate.connection.C3P0ConnectionProvider</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">prop</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;!--</span><span style="COLOR: rgb(0,0,0)"> Create</span><span style="COLOR: rgb(0,0,0)">/</span><span style="COLOR: rgb(0,0,0)">update the database tables automatically when the JVM starts up<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                 </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">prop key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">hibernate.hbm2ddl.auto</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)">update</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">prop</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;!--</span><span style="COLOR: rgb(0,0,0)"> Turn batching off </span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)"> better error messages under PostgreSQL </span><span style="COLOR: rgb(0,0,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">prop key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">hibernate.jdbc.batch_size</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)">25</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">prop</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;!--</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">prop key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">hibernate.connection.pool_size</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)">10</span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">prop</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: rgb(0,0,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">props</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">property</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">bean</span><span style="COLOR: rgb(0,0,0)">&gt;</span></div></div><p><br />    如果不设置“查询缓存”，那么hibernate只会缓存使用load()方法获得的单个持久化对象，如果想缓存使用findall()、 list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话，就需要设置hibernate.cache.use_query_cache true 才行<br /><br />2.首先设置EhCache，建立配置文件ehcache.xml，默认的位置在class-path，可以放到你的src目录下：<br /></p><div style="BORDER-RIGHT: windowtext 0.5pt solid; BACKGROUND: rgb(230,230,230) 0% 50%; WIDTH: 95%"><div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">ehcache</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: rgb(0,0,0)">&lt;!--</span><span style="COLOR: rgb(0,0,0)"> Sets the path to the directory where cache .data files are created.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />     If the path is a Java System Property it is replaced by<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />     its value in the running VM.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />     The following properties are translated:<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />     user.home </span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)"> User</span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">s home directory</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: rgb(0,0,0)">     user.dir </span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)"> User</span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">s current working directory</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: rgb(0,0,0)">     java.io.tmpdir </span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)"> Default temp file path </span><span style="COLOR: rgb(0,0,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: rgb(0,0,0)">&lt;!--&lt;</span><span style="COLOR: rgb(0,0,0)">diskStore path</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">java.io.tmpdir</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/&gt;--&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">diskStore path</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/data/ehcache</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: rgb(0,0,0)">&lt;!--</span><span style="COLOR: rgb(0,0,0)">Default Cache configuration. These will applied to caches programmatically created through<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        the CacheManager.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        The following attributes are required:<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        maxElementsInMemory            </span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)"> Sets the maximum number of objects that will be created in memory<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        eternal                                     </span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)"> Sets whether elements are eternal. If eternal,  timeouts are <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                                                            ignored and the element is never expired.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        overflowToDisk                      </span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)"> Sets whether elements can overflow to disk when the in</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">memory cache<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                                                        has reached the maxInMemory limit.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        The following attributes are optional:<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        timeToIdleSeconds            </span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)"> Sets the time to idle </span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)"> an element before it expires.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                                                        i.e. The maximum amount of time between accesses before an<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                                                        element expires Is only used </span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)"> the element is not eternal.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                                                        Optional attribute. A value of </span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)"> means that an Element can idle<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                                                        </span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)"> infinity.The </span><span style="COLOR: rgb(0,0,255)">default</span><span style="COLOR: rgb(0,0,0)"> value is </span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        timeToLiveSeconds              </span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)"> Sets the time to live </span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)"> an element before it expires.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                                                         i.e. The maximum time between creation time and when an element <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                                                         expires.  Is only used </span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)"> the element is not eternal.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                                                         Optional attribute. A value of </span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)"> means that and Element can live<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                                                         </span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)"> infinity.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                                                        The </span><span style="COLOR: rgb(0,0,255)">default</span><span style="COLOR: rgb(0,0,0)"> value is </span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        diskPersistent                           </span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)"> Whether the disk store persists between restarts of the Virtual <br />                                                             Machine.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                                                         The </span><span style="COLOR: rgb(0,0,255)">default</span><span style="COLOR: rgb(0,0,0)"> value is </span><span style="COLOR: rgb(0,0,255)">false</span><span style="COLOR: rgb(0,0,0)">.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        diskExpiryThreadIntervalSeconds   </span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)"> The number of seconds between runs of the disk expiry thread. <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                                                         The </span><span style="COLOR: rgb(0,0,255)">default</span><span style="COLOR: rgb(0,0,0)"> value  is </span><span style="COLOR: rgb(0,0,0)">120</span><span style="COLOR: rgb(0,0,0)"> seconds.<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: rgb(0,0,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">defaultCache<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        maxElementsInMemory</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">10000</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        eternal</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        overflowToDisk</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">true</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        timeToIdleSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">120</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        timeToLiveSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">120</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        diskPersistent</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        diskExpiryThreadIntervalSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">120</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">cache name</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">org.hibernate.cache.UpdateTimestampsCache</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> maxElementsInMemory</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">5000</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />     eternal</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">true</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> overflowToDisk</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">true</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">cache name</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">org.hibernate.cache.StandardQueryCache</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> maxElementsInMemory</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">5</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> eternal</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    timeToLiveSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">120</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> overflowToDisk</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">true</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">cache name</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">userCache</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> maxElementsInMemory</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">100000</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> eternal</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> timeToIdleSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"><br />        "</span><span style="COLOR: rgb(0,0,0)">600</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">    timeToLiveSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">600</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> overflowToDisk</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> diskPersistent</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">cache name</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">com.ouou.webapp.util.OuouMethodIntecepter</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> maxElementsInMemory</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">100000</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    eternal</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> timeToIdleSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">600</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> timeToLiveSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">600</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> overflowToDisk</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    diskPersistent</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">cache name</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">bbcode</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> maxElementsInMemory</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">100000</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> eternal</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> timeToIdleSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">600</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    timeToLiveSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">600</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    overflowToDisk</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> diskPersistent</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">cache name</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">com.ouou.model.Videos</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> maxElementsInMemory</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">10000</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">  eternal</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    overflowToDisk</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> timeToIdleSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">120</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> timeToLiveSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">120</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> diskPersistent</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">cache name</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">com.ouou.model.Tags</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> maxElementsInMemory</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">10000</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">  eternal</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />    overflowToDisk</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> timeToIdleSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">120</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> timeToLiveSeconds</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">120</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> diskPersistent</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">false</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: rgb(0,0,0)">&lt;/</span><span style="COLOR: rgb(0,0,0)">ehcache</span><span style="COLOR: rgb(0,0,0)">&gt;</span></div></div><p><br />以com.ouou.model.Videos为例子<br />在Videos.hbm.xml中配置：<br />&lt;class name="Videos" table="TEST" lazy="false"&gt;<br />  &lt;cache usage="read-write" region="ehcache.xml中的name的属性值"/&gt;注意：这一句需要紧跟在class标签下面，其他位置无效。<br />hbm文件查找cache方法名的策略：如果不指定hbm文件中的region="ehcache.xml中的name的属性值"，则使用name名为com.ouou.model.Videos的cache，<br />如果不存在与类名匹配的cache名称，则用defaultCache。<br />如果Videos包含set集合，则需要另行指定其cache<br />例如Videos包含Tags集合，则需要<br />添加如下配置到ehcache.xml中<br />&lt;cache name="com.ouou.model.Tags"<br />        maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120"<br />        timeToLiveSeconds="120" overflowToDisk="false" /&gt;<br />另，针对查询缓存的配置如下：<br />&lt;cache name="org.hibernate.cache.UpdateTimestampsCache"<br />        maxElementsInMemory="5000"<br />        eternal="true"<br />        overflowToDisk="true"/&gt;<br />&lt;cache name="org.hibernate.cache.StandardQueryCache"<br />        maxElementsInMemory="10000"<br />        eternal="false"<br />        timeToLiveSeconds="120"<br />        overflowToDisk="true"/&gt;<br /><br />3、 选择缓存策略依据：<br /><br />&lt;cache  usage="transactional|read-write|nonstrict-read-write|read-only" (1)/&gt;<br />ehcache不支持transactional，其他三种可以支持。<br />read-only：无需修改， 那么就可以对其进行只读 缓存，注意，在此策略下，如果直接修改数据库，即使能够看到前台显示效果，<br />但是将对象修改至cache中会报error，cache不会发生作用。另：删除记录会报错，因为不能在read-only模式的对象从cache中删除。<br />read-write：需要更新数据，那么使用读/写缓存 比较合适，前提：数据库不可以为serializable transaction isolation level<br />（序列化事务隔离级别）<br />nonstrict-read-write：只偶尔需要更新数据（也就是说，两个事务同时更新同一记录的情况很不常见），也不需要十分严格的事务隔离，<br />那么比较适合使用非严格读/写缓存策略。<br /><br />4、 调试时候使用log4j的log4j.logger.org.hibernate.cache=debug，更方便看到ehcache的操作过程，主要用于调试过程,实际应用发布时候，请注释掉，以免影响性能。<br /><br />5、 使用ehcache，打印sql语句是正常的，因为query cache设置为true将会创建两个缓存区域：一个用于保存查询结果集 (<br />org.hibernate.cache.StandardQueryCache)；另一个则用于保存最近查询的一系列表的时间戳(org.hibernate.cache.UpdateTimestampsCache)。<br />请注意：在查询缓存中，它并不缓存结果集中所包含的实体的确切状态；它只缓存这些实体的标识符属性的值、以及各值类型的结果。<br />需要将打印sql语句与最近的cache内容相比较，将不同之处修改到cache中，所以查询缓存通常会和二级缓存一起使用。</p><img src ="http://www.blogjava.net/1948asd/aggbug/266200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1948asd/" target="_blank">我是菜鸟</a> 2009-04-17 17:47 <a href="http://www.blogjava.net/1948asd/archive/2009/04/17/266200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 权限管理</title><link>http://www.blogjava.net/1948asd/archive/2009/04/13/265303.html</link><dc:creator>我是菜鸟</dc:creator><author>我是菜鸟</author><pubDate>Mon, 13 Apr 2009 07:42:00 GMT</pubDate><guid>http://www.blogjava.net/1948asd/archive/2009/04/13/265303.html</guid><wfw:comment>http://www.blogjava.net/1948asd/comments/265303.html</wfw:comment><comments>http://www.blogjava.net/1948asd/archive/2009/04/13/265303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1948asd/comments/commentRss/265303.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1948asd/services/trackbacks/265303.html</trackback:ping><description><![CDATA[
		<p>
				<br />
				<br />系统权限：<br />grant create session to li;//为用户授予访问数据库的权限。<br />grant create table to li;//为用户授予创建数据库的权限。<br />grant unlimited tablespace //为用户授予没有上限的确良访问表空间的权限。<br />revoke table from li;//;//删除用户授予创建数据库的权限。<br />revoke unlimited tablespace //删除用户授予没有上限的确良访问表空间的权限。<br />grant create session to public //所有都有<br />数据字典：<br />select * from user_sys_privs;//当前用户拥有权限<br /><br />--------------------------------------------------------------------------------------------<br />对象权限：谁拥有谁就可以授权<br /><br />grant select on mytab to lisi ;//让lisi 有访问li拥有的mytab的查询权限<br /><br />grant insert on mytab to lisi ;//让lisi 有访问li拥有的mytab的插入权限<br /><br /><br />grant all on mytab to lisi;//所有权限赋予 lisi;<br /><br />数据字典：<br />select * from user_tab_privs;<br /><br />grant create session to public //所有<br /><br />对象权限控制到列<br /><br />grant update(name)  on mytab to lisi;//  授予lisi只能更新name属性(为字段分配权限： 只能是插入和更新)<br /><br /><br /><br /></p>
<img src ="http://www.blogjava.net/1948asd/aggbug/265303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1948asd/" target="_blank">我是菜鸟</a> 2009-04-13 15:42 <a href="http://www.blogjava.net/1948asd/archive/2009/04/13/265303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle调优（转）</title><link>http://www.blogjava.net/1948asd/archive/2009/04/13/265213.html</link><dc:creator>我是菜鸟</dc:creator><author>我是菜鸟</author><pubDate>Mon, 13 Apr 2009 00:57:00 GMT</pubDate><guid>http://www.blogjava.net/1948asd/archive/2009/04/13/265213.html</guid><wfw:comment>http://www.blogjava.net/1948asd/comments/265213.html</wfw:comment><comments>http://www.blogjava.net/1948asd/archive/2009/04/13/265213.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1948asd/comments/commentRss/265213.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1948asd/services/trackbacks/265213.html</trackback:ping><description><![CDATA[
		<p>
				<span class="bold">
						<span class="smalltxt">
								<strong>
										<font face="Comic Sans MS">Oracle调优(入门及提高篇)</font>
								</strong>
						</span>
				</span>
		</p>
		<p>
				<span class="bold">
						<span class="smalltxt">
								<strong>
										<font face="Comic Sans MS">
												<font size="1">
														<br />
												</font>
												<br />
										</font>
								</strong>
						</span>
				</span>在过去的十年中， Oracle 已经成为世界上最专业的数据库之一。对于 IT 专家来说，就是要确保利用 Oracle 的强大特性来提高他们公司的生产力。最有效的方法之一是通过 Oracle 调优。它有大量的调整参数和技术来改进你的 Oracle 数据库的性能。 <br />Oracle 调优是一个复杂的主题。关于调优可以写整整一本书，不过，为了改善 Oracle 数据库的性能，有一些基本的概念是每个 Oracle DBA 都应该遵从的。 <br />　　 在这篇简介中，我们将简要地介绍以下的 Oracle 主题： <br />　　-- 外部调整：我们应该记住 Oracle 并不是单独运行的。因此我们将查看一下通过调整 Oracle 服务器以得到高的性能。 <br />　　--Row re-sequencing 以减少磁盘 I/O ：我们应该懂得 Oracle 调优最重要的目标是减少 I/O 。 <br />　　--Oracle SQL 调整。 Oracle SQL 调整是 Oracle 调整中最重要的领域之一，只要通过一些简单的 SQL 调优规则就可以大幅度地提升 SQL 语句的性能，这是一点都不奇怪的。 <br />　　-- 调整 Oracle 排序：排序对于 Oracle 性能也是有很大影响的。 <br />　　-- 调整 Oracle 的竞争：表和索引的参数设置对于 UPDATE 和 INSERT 的性能有很大的影响。 <br /><br />　　 我们首先从调整 Oracle 外部的环境开始。如果内存和 CPU 的资源不足的话，任何的 Oracle 调整都是没有帮助的。 <br /><br />　　外部的性能问题 <br />　　<br />　　Oracle 并不是单独运行的。 Oracle 数据库的性能和外部的环境有很大的关系。这些外部的条件包括有： <br />　　 ． CPU--CPU 资源的不足令查询变慢。当查询超过了 Oracle 服务器的 CPU 性能时，你的数据库性能就受到 CPU 的限制。 <br />　　 ．内存 -- 可用于 Oralce 的内存数量也会影响 SQL 的性能，特别是在数据缓冲和内存排序方面。 <br />　　 ．网络 -- 大量的 Net8 通信令 SQL 的性能变慢。 <br />　　 许多新手都错误的认为应该首先调整 Oracle 数据库，而不是先确认外部资源是否足够。实际上，如果外部环境出现瓶颈，再多的 Oracle 调整都是没有帮助的。 <br />　　 在检查 Oracle 的外部环境时，有两个方面是需要注意的： <br />　　1 、当运行队列的数目超过服务器的 CPU 数量时，服务器的性能就会受到 CPU 的限制。补救的方法是为服务器增加额外的 CPU 或者关闭需要很多处理资源的组件，例如 Oracle Parallel Query 。 <br />　　2 、内存分页。当内存分页时，内存容量已经不足，而内存页是与磁盘上的交换区进行交互的。补救的方法是增加更多的内存，减少 Oracle SGA 的大小，或者关闭 Oracle 的多线程服务器。 <br />　　 可以使用各种标准的服务器工具来得到服务器的统计数据，例如 vmstat,glance,top 和 sar 。 DBA 的目标是确保数据库服务器拥有足够的 CPU 和内存资源来处理 Oracle 的请求。 <br />　　 以下让我们来看一下 Oracle 的 row-resequencing 是如何能够极大地减少磁盘 I/O 的。 <br /><br />　　Row-resequencing （行的重新排序） <br />　　 <br />　　就象我们上面提到的，有经验的 Oracle DBA 都知道 I/O 是响应时间的最大组成部分。其中磁盘 I/O 特别厉害，因为当 Oracle 由磁盘上的一个数据文件得到一个数据块时，读的进程就必须等待物理 I/O 操作完成。磁盘操作要比数据缓冲慢 10,000 倍。因此，如果可以令 I/O 最小化，或者减少由于磁盘上的文件竞争而带来的瓶颈，就可以大大地改善 Oracle 数据库的性能。 <br />　　 如果系统响应很慢，通过减少磁盘 I/O 就可以有一个很快的改善。如果在一个事务中通过按一定的范围搜索 primary-key 索引来访问表，那么重新以 CTAS 的方法组织表将是你减少 I/O 的首要策略。通过在物理上将行排序为和 primary-key 索引一样的顺序，就可以加快获得数据的速度。 <br />　　 就象磁盘的负载平衡一样，行的重新排序也是很简单的，而且也很快。通过与其它的 DBA 管理技巧一起使用，就可以在高 I/O 的系统中大大地减少响应的时间。 <br />　　 在高容量的在线事务处理环境中（ online transaction processing ， OLTP ），数据是由一个 primary 索引得到的，重新排序表格的行就可以令连续块的顺序和它们的 primary 索引一样，这样就可以在索引驱动的表格查询中，减少物理 I/O 并且改善响应时间。这个技巧仅在应用选择多行的时候有用，或者在使用索引范围搜索和应用发出多个查询来得到连续的 key 时有效。对于随机的唯一 primary-key （主键）的访问将不会由行重新排序中得到好处。 <br />　　 让我们看一下它是如何工作的。考虑以下的一个 SQL 的查询，它使用一个索引来得到 100 行： <br />selectsalaryfromemployeewherelast_name like 'B%'; <br />这个查询将会使用 last_name_index ，搜索其中的每一行来得到目标行。这个查询将会至少使用 100 次物理磁盘的读取，因为 employee 的行存放在不同的数据块中。 <br />　　 不过，如果表中的行已经重新排序为和 last_name_index 的一样，同样的查询又会怎样处理呢？我们可以看到这个查询只需要三次的磁盘 I/O 就读完全部 100 个员工的资料（一次用作索引的读取，两次用作数据块的读取），减少了 97 次的块读取。 <br />　　 重新排序带来的性能改善的程度在于在你开始的时候行的乱序性如何，以及你需要由序列中访问多少行。至于一个表中的行与索引的排序键的匹配程度，可以查看数据字典中的 dba_indexes 和 dba_tables 视图得到。 <br />　　 在 dba_indexes 的视图中，查看 clustering_factor 列。如果 clustering_factor 的值和表中的块数目大致一样，那么你的表和索引的顺序是一样的。不过，如果 clustering_factor 的值接近表中的行数目，那就表明表格中的行和索引的顺序是不一样的。 <br />　　 行重新排序的作用是不可以小看的。在需要进行大范围的索引搜索的大表中，行重新排序可以令查询的性能提高三倍。 <br />　　 一旦你已经决定重新排序表中的行，你可以使用以下的工具之一来重新组织表格。 <br />　　. 使用 Oracle 的 Create Table As Select (CTAS) 语法来拷贝表格 <br />　　. Oracle9i 自带的表格重新组织工具 <br />　　<br />　　 以下，我们来看以下 SQL 语句的调优。 <br /><br />　　SQL 调优 <br />　　Oracle 的 SQL 调优是一个复杂的主题，甚至是需要整本书来介绍 Oracle SQL 调优的细微差别。不过有一些基本的规则是每个 Oracle DBA 都需要跟从的，这些规则可以改善他们系统的性能。 SQL 调优的目标是简单的： <br />　　. 消除不必要的大表全表搜索：不必要的全表搜索导致大量不必要的 I/O ，从而拖慢整个数据库的性能。调优专家首先会根据查询返回的行数目来评价 SQL 。在一个有序的表中，如果查询返回少于 40% 的行，或者在一个无序的表中，返回少于 7% 的行，那么这个查询都可以调整为使用一个索引来代替全表搜索。对于不必要的全表搜索来说，最常见的调优方法是增加索引。可以在表中加入标准的 B 树索引，也可以加入 bitmap 和基于函数的索引。要决定是否消除一个全表搜索，你可以仔细检查索引搜索的 I/O 开销和全表搜索的开销，它们的开销和数据块的读取和可能的并行执行有关，并将两者作对比。在一些情况下，一些不必要的全表搜索的消除可以通过强制使用一个 index 来达到，只需要在 SQL 语句中加入一个索引的提示就可以了。 <br />　　. 在全表搜索是一个最快的访问方法时，将小表的全表搜索放到缓存中，调优专家应该确保有一个专门的数据缓冲用作行缓冲。在 Oracle7 中，你可以使用 alter table xxx cache 语句，在 Oracle8 或以上，小表可以被强制为放到 KEEP 池中缓冲。 <br />　　. 确保最优的索引使用 ：对于改善查询的速度，这是特别重要的。有时 Oracle 可以选择多个索引来进行查询，调优专家必须检查每个索引并且确保 Oracle 使用正确的索引。它还包括 bitmap 和基于函数的索引的使用。 <br />　　. 确保最优的 JOIN 操作：有些查询使用 NESTED LOOP join 快一些，有些则是 HASH join 快一些，另外一些则是 sort-merge join 更快。 <br />　　 这些规则看来简单，不过它们占 SQL 调优任务的 90% ，并且它们也无需完全懂得 Oracle SQL 的内部运作。以下我们来简单概览以下 Oracle SQL 的优化。 <br />　　 我们首先简要查看 Oracle 的排序，并且看一看排序操作是如何影响性能的。 <br /><br />　　 调整 Oracle 的排序操作 <br />　　 排序是 SQL 语法中一个小的方面，但很重要，在 Oracle 的调整中，它常常被忽略。当使用 create index 、 ORDER BY 或者 GROUP BY 的语句时， Oracle 数据库将会自动执行排序的操作。通常，在以下的情况下 Oracle 会进行排序的操作： <br />　　 使用 Order by 的 SQL 语句 <br />　　 使用 Group by 的 SQL 语句 <br />　　 在创建索引的时候 <br />　　 进行 table join 时，由于现有索引的不足而导致 SQL 优化器调用 MERGE SORT <br />　　 当与 Oracle 建立起一个 session 时，在内存中就会为该 session 分配一个私有的排序区域。如果该连接是一个专用的连接 (dedicated connection) ，那么就会根据 init.ora 中 sort_area_size 参数的大小在内存中分配一个 Program Global Area (PGA) 。如果连接是通过多线程服务器建立的，那么排序的空间就在 large_pool 中分配。不幸的是，对于所有的 session ，用做排序的内存量都必须是一样的，我们不能为需要更大排序的操作分配额外的排序区域。因此，设计者必须作出一个平衡，在分配足够的排序区域以避免发生大的排序任务时出现磁盘排序（ disk sorts ）的同时，对于那些并不需要进行很大排序的任务，就会出现一些浪费。当然，当排序的空间需求超出了 sort_area_size 的大小时，这时将会在 TEMP 表空间中分页进行磁盘排序。磁盘排序要比内存排序大概慢 14,000 倍。 <br />　　 上面我们已经提到，私有排序区域的大小是有 init.ora 中的 sort_area_size 参数决定的。每个排序所占用的大小由 init.ora 中的 sort_area_retained_size 参数决定。当排序不能在分配的空间中完成时，就会使用磁盘排序的方式，即在 Oracle 实例中的临时表空间中进行。 <br />　　 磁盘排序的开销是很大的，有几个方面的原因。首先，和内存排序相比较，它们特别慢；而且磁盘排序会消耗临时表空间中的资源。 Oracle 还必须分配缓冲池块来保持临时表空间中的块。无论什么时候，内存排序都比磁盘排序好，磁盘排序将会令任务变慢，并且会影响 Oracle 实例的当前任务的执行。还有，过多的磁盘排序将会令 free buffer waits 的值变高，从而令其它任务的数据块由缓冲中移走。 <br />　　 接着，让我们看一下 Oracle 的竞争，并且看一下表的存储参数的设置是如何影响 SQL UPDATE 和 INSERT 语句的性能的。 <br /><br />调整 Oracle 的竞争 <br />　　Oracle 的其中一个优点时它可以管理每个表空间中的自由空间。 Oracle 负责处理表和索引的空间管理，这样就可以让我们无需懂得 Oracle 的表和索引的内部运作。不过，对于有经验的 Oracle 调优专家来说，他需要懂得 Oracle 是如何管理表的 extent 和空闲的数据块。对于调整拥有高的 insert 或者 update 的系统来说，这是非常重要的。 <br />　　 要精通对象的调整，你需要懂得 freelists 和 freelist 组的行为，它们和 pctfree 及 pctused 参数的值有关。这些知识对于企业资源计划（ ERP ）的应用是特别重要的，因为在这些应用中，不正确的表设置通常是 DML 语句执行慢的原因。 <br />　　 对于初学者来说，最常见的错误是认为默认的 Oracle 参数对于所有的对象都是最佳的。除非磁盘的消耗不是一个问题，否则在设置表的 pctfree 和 pctused 参数时，就必须考虑平均的行长和数据库的块大小，这样空的块才会被有效地放到 freelists 中。当这些设置不正确时，那些得到的 freelists 也是 "dead" 块，因为它们没有足够的空间来存储一行，这样将会导致明显的处理延迟。 <br />Freelists 对于有效地重新使用 Oracle 表空间中的空间是很重要的，它和 pctfree 及 pctused 这两个存储参数的设置直接相关。通过将 pctused 设置为一个高的值，这时数据库就会尽快地重新使用块。不过，高性能和有效地重新使用表的块是对立的。在调整 Oracle 的表格和索引时，需要认真考虑究竟需要高性能还是有效的空间重用，并且据此来设置表的参数。以下我们来看一下这些 freelists 是如何影响 Oracle 的性能的。 <br />　　 当有一个请求需要插入一行到表格中时， Oracle 就会到 freelist 中寻找一个有足够的空间来容纳一行的块。你也许知道， freelist 串是放在表格或者索引的第一个块中，这个块也被称为段头（ segment header ）。 pctfree 和 pctused 参数的唯一目的就是为了控制块如何在 freelists 中进出。虽然 freelist link 和 unlink 是简单的 Oracle 功能，不过设置 freelist link (pctused) 和 unlink (pctfree) 对 Oracle 的性能确实有影响。 <br />　　 由 DBA 的基本知识知道， pctfree 参数是控制 freelist un-links 的（即将块由 freelists 中移除）。设置 pctfree=10 意味着每个块都保留 10% 的空间用作行扩展。 pctused 参数是控制 freelist re-links 的。设置 pctused=40 意味着只有在块的使用低于 40% 时才会回到表格的 freelists 中。 <br />　　 许多新手对于一个块重新回到 freelists 后的处理都有些误解。其实，一旦由于一个删除的操作而令块被重新加入到 freelist 中，它将会一直保留在 freelist 中即使空间的使用超过了 60% ，只有在到达 pctfree 时才会将数据块由 freelist 中移走。 <br /><br />　　 表格和索引存储参数设置的要求总结 <br />　　 以下的一些规则是用来设置 freelists, freelist groups, pctfree 和 pctused 存储参数的。你也知道， pctused 和 pctfree 的值是可以很容易地通过 alter table 命令修改的，一个好的 DBA 应该知道如何设置这些参数的最佳值。 <br />　　 有效地使用空间和高性能之间是有矛盾的，而表格的存储参数就是控制这个方面的矛盾： <br />. 对于需要有效地重新使用空间，可以设置一个高的 pctused 值，不过副作用是需要额外的 I/O 。一个高的 pctused 值意味着相对满的块都会放到 freelist 中。因此，这些块在再次满之前只可以接受几行记录，从而导致更多的 I/O 。 <br />. 追求高性能的话，可以将 pctused 设置为一个低的值，这意味着 Oracle 不会将数据块放到 freelists 中直到它几乎是空的。那么块将可以在满之前接收更多的行，因此可以减少插入操作的 I/O 。要记住 Oracle 扩展新块的性能要比重新使用现有的块高。对于 Oracle 来说，扩展一个表比管理 freelists 消耗更少的资源。 <br />　　 让我们来回顾一下设置对象存储参数的一些常见规则： <br />　　 ．经常将 pctused 设置为可以接收一条新行。对于不能接受一行的 free blocks 对于我们来说是没有用的。如果这样做，将会令 Oracle 的性能变慢，因为 Oracle 将在扩展表来得到一个空的块之前，企图读取 5 个 "dead" 的 free block 。 <br />　　 ．表格中 chained rows 的出现意味着 pctfree 太低或者是 db_block_size 太少。在很多情况下， RAW 和 LONG RAW 列都很巨大，以至超过了 Oracle 的最大块的大小，这时 chained rows 是不可以避免的。 <br />　　 ．如果一个表有同时插入的 SQL 语句，那么它需要有同时删除的语句。运行单一个一个清除的工作将会把全部的空闲块放到一个 freelist 中，而没有其它包含有任何空闲块的 freelists 出现。 <br />　　 ． freelist 参数应该设置为表格同时更新的最大值。例如，如果在任何时候，某个表最多有 20 个用户执行插入的操作，那么该表的参数应该设置为 freelists=20 。 <br />　　 应记住的是 freelist groups 参数的值只是对于 Oracle Parallel Server 和 Real Application Clusters 才是有用的。对于这类 Oracle ， freelist groups 应该设置为访问该表格的 Oracle Parallel Server 实例的数目</p>
<img src ="http://www.blogjava.net/1948asd/aggbug/265213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1948asd/" target="_blank">我是菜鸟</a> 2009-04-13 08:57 <a href="http://www.blogjava.net/1948asd/archive/2009/04/13/265213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 基础</title><link>http://www.blogjava.net/1948asd/archive/2009/04/13/265211.html</link><dc:creator>我是菜鸟</dc:creator><author>我是菜鸟</author><pubDate>Mon, 13 Apr 2009 00:52:00 GMT</pubDate><guid>http://www.blogjava.net/1948asd/archive/2009/04/13/265211.html</guid><wfw:comment>http://www.blogjava.net/1948asd/comments/265211.html</wfw:comment><comments>http://www.blogjava.net/1948asd/archive/2009/04/13/265211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1948asd/comments/commentRss/265211.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1948asd/services/trackbacks/265211.html</trackback:ping><description><![CDATA[.登陆系统用户<br />sqlplus 然后输入系统用户名和密码<br />登陆别的用户<br />conn 用户名/密码;<br />2.创建表空间<br />create tablespace 空间名<br />datafile 'c:\空间名' size 15M  --表空间的存放路径,初始值为15M<br />autoExtend on next 10M  --空间的自动增长的值是10M<br />permanent online;  --永久使用<br />3.创建用户<br />create user shi   --创建用户名为shi<br />identified by scj  --创建密码为scj<br />default tablespace 表空间名 --默认表空间名<br />temporary tablespace temp --临时表空间为temp<br />profile default   --受profile文件的限制<br />quota unlimited on 表空间名; --在表空间下面建表不受限制<br />4.创建角色<br />create role 角色名 identified by 密码;<br />5.给角色授权<br />grant create session to 角色名；--给角色授予创建会话的权限<br />grant 角色名 to 用户名； --把角色授予用户<br />6.给用户授予权限<br />grant create session,resource to shi;--给shi用户授予所有权限<br />grant create table to shi; --给shi用户授予创建表的权限<br />7.select table_name from user_tables;   察看当前用户下的所有表 <br />8.select tablespace_name from user_tablespaces; 察看当前用户下的 表空间<br />9.select username from dba_users;察看所有用户名称命令 必须用sys as sysdba登陆<br /><span class="hilite1"><font style="BACKGROUND-COLOR: #ffff00">Oracle</font></span> 查看用户权限数据字典视图分为3大类, 用前缀区别，分别为：USER，ALL 和 DBA，许多数据字典视图包含相似的信息。
<p>USER_*:有关用户所拥有的对象信息，即用户自己创建的对象信息</p><p>ALL_*：有关用户可以访问的对象的信息，即用户自己创建的对象的信息加上其他用户创建的对象但该用户有权访问的信息</p><p>DBA_*：有关整个数据库中对象的信息</p><p>（这里的*可以为TABLES， INDEXES， OBJECTS， USERS等。</p><p>1.查看所有用户：<br />select * from dba_users;<br />select * from all_users;<br />select * from user_users;<br />2.查看用户系统权限：<br />select * from dba_sys_privs;<br />select * from all_sys_privs;<br />select * from user_sys_privs;<br />3.查看用户对象权限：<br />select * from dba_tab_privs;<br />select * from all_tab_privs;<br />select * from user_tab_privs;<br />4.查看所有角色：<br />select * from dba_roles;<br />5.查看用户所拥有的角色：<br />select * from dba_role_privs;<br />select * from user_role_privs;</p><p>6.查看当前用户的缺省表空间<br />select username,default_tablespace from user_users;</p><p>7.查看某个角色的具体权限，如grant connect,resource,create session,create view to TEST;查看RESOURCE具有那些权限，用SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE';<br /> </p><p>10.创建表<br />create table 表名<br />(<br />id int not null,<br />name varchar2(20) not null<br />)tablespace 表空间名  --所属的表空间<br />storage<br />(<br />   initial 64K   --表的初始值<br />   minextents 1   --最小扩展值<br />   maxextents unlimited  --最大扩展值<br />);<br />11.--为usrs表添加主键和索引<br />alter table users<br />add constraint pk primary key (ID);<br />12.为已经创建users表添加外键<br />alter table users<br />  add constraint fk_roleid foreign key (roleid)<br />  references role(role_id) on delete cascad; --下边写主表的列<br />   on delete cascad是创建级联<br />13.把两个列连接起来<br />select concat(name,id) from 表名；  --把name和id连接起来<br />14.截取字符串<br />select column(name,'李') from 表名；  --把name中的‘李’去掉<br />15.运行事务之前必须写<br />set serveroutput on;  --打开输入输出（不写的话,打印不出信息）<br />16.while的应用<br />declare   --声明部分<br />ccc number:=1;  --复职<br />a number:=0;<br />begin   --事务的开始<br />while ccc&lt;=100 loop --循环<br />if((ccc mod 3)=0) then --条件<br /> dbms_output.put_line(ccc||',');    --打印显示<br /> a:=a+ccc;<br />end if;   --结束if<br />ccc:=ccc+1;<br />end loop;  --结束循环<br />dbms_output.put_line(a); <br />end;   --结束事务<br />/   <br />17.select into  的用法 --只能处理一行结果集<br />declare<br />  name varchar(30);<br />begin<br /> select username into name<br /> from users<br /> where id=2;<br />dbms_output.put_line('姓名为：'||name);<br />end;<br />/<br />18.利用%rowtype属性可以在运行时方便的声明记录变量和其他结构<br />Set serveroutput on;<br />Declare<br />   utype hr.employees%rowtype;<br />Begin<br />Select * into utype from hr.employees where employee_id=194;<br />Dbms_output.put_line('姓名'|| utype.first_name);<br />Dbms_output.put_line('生日'|| utype.last_name);<br />end;<br />/   --%rowtype想当于复制一个表<br />19.游标的定义和使用<br />Declare<br />Cursor ucur is select * from users; --声明游标<br />Us users%rowtype;--定义与游标想匹配的变量<br />Begin<br />Open ucur;--打开游标<br />Fetch ucur into us;<br />While ucur %found loop --使用循环遍历游标的查询结果<br />Dbms_output.put_line('姓名：'||us.username||'生日'||us.brithday);<br />Fetch ucur into us;<br />End loop;<br />Close ucur; --关闭游标<br />End;<br />=======================================<br />%found在前一条的fetch语句至少对应数据库的一行时，%found属性值为true，否则为false;<br />% notfound 在前一条fetch语句没有对应的数据库行时，%notfound属性值为true，否则为false;<br />%isopen 在游标打开时%isopen属性值为true；否则为false;<br />%rowcount显示迄今为止从显示游标中取出的行数</p><p>20.<br />删除<br />drop tablespace 空间名 including contents; --删除表空间和里面的内容<br />drop table 表名   --删除表<br />drop user 用户名  --删除用户</p><p>insert into student(stuid,stuname,age,birthday)values(stu_sn.nextval,'lisi',21,to_date('1989-09-08','yyyy-mm-dd'));<br />insert into student(stuid,stuname,age,birthday)values(stu_sn.nextval,'wangwu',21,to_date('1989-09-08','yyyy-mm-dd'));<br />insert into student(stuid,stuname,age,birthday)values(stu_sn.nextval,'zhaoliu',20,to_date('1990-09-08','yyyy-mm-dd'));<br />insert into exam(stuid,subid,grade)values(1,2,70);<br />insert into exam(stuid,subid,grade)values(2,1,45);<br />insert into exam(stuid,subid,grade)values(2,2,70);</p><img src ="http://www.blogjava.net/1948asd/aggbug/265211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1948asd/" target="_blank">我是菜鸟</a> 2009-04-13 08:52 <a href="http://www.blogjava.net/1948asd/archive/2009/04/13/265211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet及JSP中的多线程同步问题</title><link>http://www.blogjava.net/1948asd/archive/2009/04/12/265092.html</link><dc:creator>我是菜鸟</dc:creator><author>我是菜鸟</author><pubDate>Sun, 12 Apr 2009 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/1948asd/archive/2009/04/12/265092.html</guid><wfw:comment>http://www.blogjava.net/1948asd/comments/265092.html</wfw:comment><comments>http://www.blogjava.net/1948asd/archive/2009/04/12/265092.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1948asd/comments/commentRss/265092.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1948asd/services/trackbacks/265092.html</trackback:ping><description><![CDATA[
		<strong>一、在Servlet/JSP中的几种变量类型</strong>
		<br />
		<br />　　在编写Servlet/JSP程序时，对实例变量一定要小心使用。因为实例变量是非线程安全的。在Servlet/JSP中，变量可以归为下面的几类： <br /><br />　　<b>1. 类变量</b><br /><br />　　request，response,session，config,application，以及JSP页面内置的page, pageContext。其中除了application外，其它都是线程安全的。 <br /><br />　　<b>2. 实例变量</b><br /><br />　　实例变量是实例所有的，在堆中分配。在Servlet/JSP容器中，一般仅实例化一个Servlet/JSP实例，启动多个该实例的线程来处理请求。而实例变量是该实例所有的线程所共享，所以，实例变量不是线程安全的。 <br /><br />　　<b>3. 局部变量</b><br /><br />　　局部变量在堆栈中分配，因为每一个线程有自己的执行堆栈，所以，局部变量是线程安全的。<img src ="http://www.blogjava.net/1948asd/aggbug/265092.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1948asd/" target="_blank">我是菜鸟</a> 2009-04-12 11:16 <a href="http://www.blogjava.net/1948asd/archive/2009/04/12/265092.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如梦令</title><link>http://www.blogjava.net/1948asd/archive/2009/03/27/262294.html</link><dc:creator>我是菜鸟</dc:creator><author>我是菜鸟</author><pubDate>Fri, 27 Mar 2009 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/1948asd/archive/2009/03/27/262294.html</guid><wfw:comment>http://www.blogjava.net/1948asd/comments/262294.html</wfw:comment><comments>http://www.blogjava.net/1948asd/archive/2009/03/27/262294.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1948asd/comments/commentRss/262294.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1948asd/services/trackbacks/262294.html</trackback:ping><description><![CDATA[
		<font size="4">汽车渴望公路，  <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 />　　以及对我精神上的无情戮屠，  <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 />　　更没有因为自己的伟大而恃才傲物。  <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 />　　怪也怪女人们过于世故，  <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 />　　我经常会体验到肢体语言的丰富。  <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 />　　谁知道罪行败露，  <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 />　　不是你的留也留不住。  <br />　　别人的老婆就是再好也不能轻易接触。  <br />　　有道是皮之不存毛将焉附，  <br />　　我要是ＯＶＥＲ了还上哪儿去找我的贤内助？  <br />　　更何况人生短促，  <br />　　还有很多东西值得我们珍惜和呵护。  <br />　　爱情的光环固然眩目，  <br />　　也毕竟不是生命的全部。  <br />　　岁月的痕痕无孔不入。  <br />　　无有爱情的皮囊苍老的更加迅速。  <br />　　看著我那用蒸汽熨斗都已无法熨平的面部，  <br />　　真不知还有谁肯向我将她的终身托付。  <br />　　等待著等待到行将就木，  <br />　　持续著持续到人生落幕。  <br />　　盼望吧盼望著解决光棍待遇的法规早日颁布，  <br />　　但愿啊但愿我首先踏入的能够是婚姻的坟墓</font>  <br /><img src ="http://www.blogjava.net/1948asd/aggbug/262294.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1948asd/" target="_blank">我是菜鸟</a> 2009-03-27 10:08 <a href="http://www.blogjava.net/1948asd/archive/2009/03/27/262294.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2输入校验流程</title><link>http://www.blogjava.net/1948asd/archive/2009/03/26/262026.html</link><dc:creator>我是菜鸟</dc:creator><author>我是菜鸟</author><pubDate>Thu, 26 Mar 2009 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/1948asd/archive/2009/03/26/262026.html</guid><wfw:comment>http://www.blogjava.net/1948asd/comments/262026.html</wfw:comment><comments>http://www.blogjava.net/1948asd/archive/2009/03/26/262026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1948asd/comments/commentRss/262026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1948asd/services/trackbacks/262026.html</trackback:ping><description><![CDATA[1、类型转换器负责请求参数的类型转换，并将这些值设置成Action的属性值。<br />2、在类型转换中如果出现异常，将异常保存到ActionContext中，conversionError拦截器负责将其封装到fieldError中，然后执行3，如无异常，直接进入3。<br />3、通过反射调用validatorXxx方法，Xxx代表处理用户请求的业务逻辑的方法名。<br />4、调用Action类的validator方法。<br />5、如果以上没有出现fieldError，则调用Action的业务处理方法，如有fieldError错误，转入input逻辑视图所指定的视图资源。<br /><br />处理流程如下：<br /><br /><br /><img height="527" alt="struts.gif" src="http://www.blogjava.net/images/blogjava_net/1948asd/struts.gif" width="452" border="0" /><img src ="http://www.blogjava.net/1948asd/aggbug/262026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1948asd/" target="_blank">我是菜鸟</a> 2009-03-26 09:54 <a href="http://www.blogjava.net/1948asd/archive/2009/03/26/262026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>当和尚遇上钻石</title><link>http://www.blogjava.net/1948asd/archive/2006/09/26/71957.html</link><dc:creator>我是菜鸟</dc:creator><author>我是菜鸟</author><pubDate>Tue, 26 Sep 2006 05:36:00 GMT</pubDate><guid>http://www.blogjava.net/1948asd/archive/2006/09/26/71957.html</guid><wfw:comment>http://www.blogjava.net/1948asd/comments/71957.html</wfw:comment><comments>http://www.blogjava.net/1948asd/archive/2006/09/26/71957.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1948asd/comments/commentRss/71957.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1948asd/services/trackbacks/71957.html</trackback:ping><description><![CDATA[在你的想象中，和尚可能是这个样子：身材枯瘦、老态龙钟，与世隔绝而又高深莫测。<br /><br />    现在，请想象下面的场境：你就是这个和尚。有一天，在你闭关修炼二十年之后，你的师傅对你说，你已经达到足够的境界，现在，要求你下山去，在人世间修行<font color="#808080">（——最好是经商，呵呵）</font>！<br /><br />     然后你走出清静的佛门，出向喧嚣的尘世。在路上，你看见脚下有一颗异常发亮的小东西，在阳光下熠熠生辉，耀眼夺眼。你以前从未看见过个东西，你甚至叫不出这个东西的名字，你这时突然想起一部你经常诵读的经典《金刚经》，你想，这是是不是传说的金刚石，或者叫钻石呢？<br /><br />    这时，你有三个选择：<br /><br />    第一，你可以视而不见，从这颗可能是钻石的小东西旁边走过。如果你这样做，你是对的，因为你早已经知道，万物本性为空，你看见了一颗钻石，其实你什么都没有看到；<br /><br />    第二，把这颗钻石拾起来，交给你的师傅，因为寺庙里已经穷得揭不开锅了，正需要你的化缘，你可以把这颗可能的钻石当作上天给你的一次布施。<br /><br />    第三，你拾起这颗钻石，仔细地研究它，使用它，一辈子都不要离开过它。<br /><br />    事实上，上面提到的和尚正是我，而我在以往历次轮回的经历中，上面的选择我都曾经做过。第一次，我选择了视而不见。我回到庙里，师傅对我的做法非常高兴，他说：你终于明白万物的空性了。<br /><br />    第二次，我选择了交回师傅。师傅也非常高兴，他说，你不仅已经懂得，而且在实践中做到布施、持戒、忍辱、精进和禅定，你已经获得真正的般若智慧了。<br /><br />    第三次，我把钻石拾起后，没有交给任何人，最终，我成为一名钻石商人，拥有亿万财富。我在临死之前，把我所有的财富分给了我认识或者不认识的人，最后贫穷地离开人世，正如我的每一次尘世经历一样。这一次，我没有听到我师傅的任何评价。<br /><br />    其实，在每个人的一生中，会遇到诸如此类的选择，而最终的结果非常奇妙，它没有对与错之分，所有的对与错只出于一个原因：如果你觉得选择是对的，结果就对；如果你觉得选择错了，结果就错了。<br /><br /><font color="#0000ff">之二 我是和尚，我经营钻石</font><br /><br />    在这一世中，作为和尚，我选择了当一名钻石商人。其实，我是否是一名和尚中，以及我是否从事钻石事业都并不重要，重要的是，通过种种机缘获得佛法的大道。如果作为钻石商的我做到了，从事各行各业的你，也一定能做到。<br /><br />     我的事业之路始于对钻石的打磨。打磨钻石是一项异常劳累的工作，因为钻石是世界上最坚硬的物质，除了它自己，没有什么东西能动得了它一分一毫！当然我就偏偏利用钻石来打磨钻石。在打磨和加工的过程中，我明白了《金刚经》的微言大义：万物的潜能一如钻石，一旦知晓这种潜能，就能带来人内在的德行与外在的成功。事实上，一旦我打磨成功一颗钻石，我内心的钻石也就成熟了一颗；一旦我内有的心性有如钻石般澈明，我的事业也就获得了成功，我的手中开始抓着大把大把的钻石！<br /><br />    在纽约的钻研界，可以说每个人都来历非凡，每个人都有离奇的身世和背景，而我也有着一些小小的特点：我是一名在读的佛学的博士，一名兼职做钻石生意的和尚。<br /><br />     我发现，我的工作与我在寺院中的修行一脉相承，形式变换了，实质却是完全相同：我从最基层的职位开始做起，虽然入不敷出我还努力攒钱，最终买了一套西服；我每天六点钟起床，而四小时之前，也就是凌晨两点，我刚刚睡下；我成天身着西装，无论里面的衬衫是否被汗湿透，我依然保持着脸上的笑容；无论工作有多忙碌，我没有遗忘学习，而且利用出差的机会，回到寺院中继续修行；我的老板、同事以及顾客，不可能每天对我彬彬有礼，甚至经常有恶语相加，但我心中全无嗔怒，我心静如水，知道自己该做什么，不该做什么。在寺院中，我所做的事完全不一样，但它们都有着同样的名称，你可以把这些事说成是“布施、忍辱、持戒、精进、禅定、般若”，你甚至可以简单地说：“我在谋生”。这有什么差别呢。<br /><br /><font color="#0000ff">之三 和尚的心态，商人的成功</font><br /><br />    在一般人的眼里，和尚非常奇怪：明明对金钱、美色、权力、名誉和地位的追求是人之常情，是人之本性，每个人在为得到它们而欣喜，得不到它们而愧疚，偏偏是和尚和所谓的隐士们，没有能耐得到它们，却故作清高地“视金钱为粪土”，红尘的乐趣你都不知道，你凭什么看破红尘！如果仅仅因为你贫穷，你悲伤，你不如人意就逃避红尘循入寺庙，那只能说明你是个没有勇气、缺乏能力的懦夫！<br /><br />    其实，和尚没有“视金钱如粪土”过，那只是个别偏激文人的无病呻呤之作。相关，和尚珍爱金钱，寺中的和尚并不没有能力去赚钱，只把这个布施的机会留给了广大的善男人善女人，而自己却要用“忍辱”、“持戒”来勤修精进。这也是仅是三万六千法门中的一种。而这三万六千法门，正是2的36000次幂，你可以想象一下，这个数字有多么大。<br /><br />    是不是和尚对金钱、美色、权力和名誉没有了追求呢？绝对不是，只是他们比较幸运，发现了一般人眼中的金钱、美色、权力和名誉背后的东西，也就是说，他们只是把一般人追求的东西当为作了表相，从而发现了表相深底的实质。这个实质是什么呢？如果我说这是“不可说”，你可能会举起一根棍子来打我。由于害怕被打，我打一个比喻吧：这个所谓的实质，其实正是你心中的钻石。<br /><br />    做和尚的功课，就是日复一日地打磨内心的钻石。其实这颗钻石浑然天成、积天地之灵气、万物之精华，价值不菲，功德无量，它是完全的化身，它是佛性的代表，只不过被你的一些前尘往事，遮蔽了而已。<br /><br />     因此，五祖门下的大弟子神秀做偈说：身是菩提树，心如明镜台，时时勤拂拭，勿使惹尘埃。这真的为我们脱离苦海指出一盏明灯。但偏偏出了个慧能和尚，他说：菩提本无树，明镜亦非台，本来无一物，何处惹尘埃。有人说，后者的境界更高。其实，境界那有高下之分？只不过神秀话是说给自己听的，也就是说过天下众生的，相当于大学教材，大家起步较低，还需要苦学；而慧能的话也说给自己听的，却是说过智慧已开者，相当于说过博士听的，没有通过博士的门，最好还是不要看博士的书。即使这一生成不了博士，也要为下一世打下基础。 
<h4><font color="#0000ff">    导读  (台湾佛光山寺住持　心定和尚) </font></h4><p>    您是因何种动机而翻阅这本书的？是被封面的标题所吸引？对作者的身份感到好奇？还是试图为某种烦闷、愁困找寻解答？……或者仅是顺手翻开书页？不管是显意识或潜意识的动作，在那背后，一定有某种幽微的网络在牵系着、拨动着。这些在脑海中、冥冥中飘忽闪逝的意念，能否以某种隐约的概念浮现，进而清晰地显影、落实，在于我们能否“清楚”洞见与掌握这些念头。 </p><p>    两年前，初次接到亚马逊网络书店的书讯，介绍这本由藏传佛教格鲁派格西麦克尔·罗奇所著的《当和尚遇到钻石》（The Diamond Cutter: The Buddhaon Strategies for Managing Your Business and Your Life）时，对映入眼帘的作者身份与题目之间的“落差”，感到十分新鲜、有趣。印象中，从未见过由僧侣所写的商业专书……尤其是作者罗奇格西并未还俗，仍是以出家僧人的身份，跻身于纽约大都会中、经营着竞争激烈的钻石行业。在好奇心的驱使下，加上长久以来思考“结合世法与佛法修行”的问题，便迫不及待地想了解这本书和作者的来龙去脉。 </p><p>    在一篇由亚马逊书店记者布莱恩·布雅（Brian Bruya）所做的专访之中，罗奇提及了他出家学佛的因缘以及从一名僧人成为杰出钻石商人的经过。1974年，他在普林斯顿大学毕业前夕，母亲突然过世，不久之后父亲与兄弟也相继离去。亲人的骤逝，让他对生命的意义产生了莫大的疑情，在急于探索生死问题之下，他离开美国、放弃原本打算继续深造的学业，到印度的达兰莎拉，进入了著名的色拉寺，研读佛学。 </p><p>    早先，罗奇格西曾在新泽西州一所蒙古寺院，跟随汪贾格西（Geshe Wangyal）学习了8年的藏文，娴熟藏语，因此能顺利进入佛学院就读。这位启蒙老师汪贾格西，是最早赴美弘扬藏传佛教的格鲁派僧人，以慈爱、宽博接引了不少当今美国藏传佛教界的著名学者，如哥伦比亚大学教授 Robert Thurman、弗吉尼亚大学教授Jeffery Hopkins等人，都是他早期的入门弟子。 </p><p>    之后，罗奇格西于1983年在达兰莎拉落发为僧，经过多年的学习、并通过考试后，1995年获颁相当于佛学博士的格西学位。他在印度待了21年之久（1974～1995），期间在上师的建议下，于1981年回到美国接受“经商”的另一种人生与修持考验，并持续往返于印度与美国两地。几经波折、历练，成为纽约首屈一指的钻石商人。在事业成功的背后，有着长年研修佛法的精神力量，和随之而培养出的严谨、专注、诚信等特质作为支柱，这些人格特质，即是他在书中教导读者用以自我训练、成功致富的钥匙。 </p><p><font color="#0000ff">    “切割钻石”的喻旨 </font></p><p>    《当和尚遇到钻石》这本书的特别之处，或者说，它值得推荐与阅读的原因，在于罗奇格西跨越了世俗概念的鸿沟，将积极、正面的起心动念付诸实践，并指出了宽广、可行、充满建设性的商业经营方法。这个实践的过程，也同时涵摄了双重的层面：一是就罗奇格西个人对上师的承诺、面对挑战与理想的层面而言，他弥和了世俗与出世生活的界域，将佛法融入商业生活中；另一方面，就书写目的、内容铺陈与章节架构来说，他也兼顾了理论与实践的部分，通过叙述以僧侣身份从事充满竞争压力的钻石行业，到获得成功的历程，来道出经商之路上所蕴含的人生之理。“钻石与僧人”，乍看之下，虽易让人联想到又是一则商场传奇，但其实个中深藏玄诣。 </p><p>    从字面上看来，“切割钻石的人”指的似乎是作者——罗奇格西在俗世的职业。但事实上，在佛教、尤其是藏传佛教（金刚乘）的传统中，钻石（金刚石）具有其丰富、深奥的象征意义——坚实稳固、无坚不摧却又清透明净的特质，代表了众生本具的佛性，也就是究竟空性的本质。因此，“切割钻石的人”，在内在的意义上，也就意味着洞澈本性、直见本心之人。这般的开悟者，在世间能无入而不自得，一如钻石般清明、稳定，不被任何环境所阻挠。 </p><p>    为此，罗奇格西援引了一个兼具世俗与宗教寓意的象征——钻石，来阐明内在的观点和潜能，其实比外在的现象有着更高深莫测的影响力，端看如何发现那足以切割钻石的（空性）力道，借力使力而已。从前半部详实的钻石行业描绘、到后半部的空性禅修指引，从日常生活到习性的转化，罗奇格西仔细铺陈了一条引介读者自我修炼、超越外在冲突与挑战的道路，妥善地融合了佛法与商业的经营，将积极、良好的心念，转化为促使事业成功的主要动能。 </p><p> <font color="#0000ff">   僧人与商人、出世与入世 </font></p><p>    从僧人的身份，跨足诡谲多变的商场，这一路走来，罗奇格西也历经了自我调适、学习与磨炼的各种阶段。他坦言，一开始，在面对上师提出经商的建议时，也曾多所抗拒。因为在经济上，他承袭自父母留下的遗产，并不虞匮乏。但是，经商并非是为了赚钱或谋生而已，“上师要我经历一般人在日常生活中所遭遇的困难，这样才能了解他们，进而运用佛法来帮助人们。”最后，在一次上师给予的特殊教授中，他终于了解到经商的积极意义，决心进入商界。 </p><p>    “我曾经在1975年的某次禅坐中，观知自己未来会从事钻石行业，因此就试着找钻石买卖方面的工作。”这是他投身钻石行业的缘起。但因不懂行规，他屡吃闭门羹，始终不得其门而入，直到遇见一位创业的老板，才蒙录用。“我无心赚钱，只想找到一个栖身之所就行了。”无心插柳的结果，累积了多年丰富的从商经验后，罗奇格西在此书中综理出他“商场佛学”的心得结晶。 </p><p>    他认为经营商业之道有三：一是赚钱，二是乐在其中，三是以此创造有意义的人生。而乐在其中指的是身心的和谐与快乐，也就是此书援引《金刚经》“缘起性空”的道理，来说明、举证、指引如何在瞬息万变的商场中，觅得喜悦、和乐的秘诀所在。许多人为了赚取金钱，付出了莫大的代价，失去了身心的健康和快乐，这样的人生又有何意义？ </p><p>    因此，罗奇格西表示，真正的成功，来自于对心灵的关注，也就是对身心调和的重视，他以自己为例，指出妥善运用时间、开发心灵的力量，益能事半功倍。近年来，他更设立了一个名叫“证悟商业机构”（Enlightened Business Institute）的组织，专门教导商界人士如何透过禅修，来增长创意与智能、加强“铭印”（imprint）的良善力量，《当和尚遇到钻石》亦是这个机构的参考用书之一。 </p><p>    在书中，罗奇格西从理论到实践，从概念的明晰到可行的建议细则，《当和尚遇到钻石》提供了一个具体、有效、且融会“快乐、积极、有意义”的赚钱之道。 </p><p>    罗奇格西融合经商与修持的成功事例，对许多认为两者互相矛盾的人来说，不啻是一种鼓舞和解脱。认为世法与佛法不能兼容的观点，也可能仅是某种偏执的概念而已。此外，虽明知“佛法不离世法，离世觅佛法，犹如觅兔角。”但要如何真正在生活中实践佛法，以日常生活为道，融洽地治于一炉，往往不是“知”难，存在着认知上的盲点或偏见；就是“行”难，理论上虽了解，但实际上却做不到。尤其是在面临压力、挫折和矛盾时，要如何切实地运用佛法，来自助助人？在面临艰难的挑战和抉择时，又要如何保持清晰的思绪、平和的心情，做出最好的判断并勇于承担？ </p><p>    在《当和尚遇到钻石》中，对于许多盼望能在日常生活中修行、寻访积极营生之道或探求心灵深度与静谧的人来说，都是一个宝贵而重要的参考。希望有缘阅读此书的您，能从中获得许多启发和帮助，开创有意义、美好的人生</p><img src ="http://www.blogjava.net/1948asd/aggbug/71957.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1948asd/" target="_blank">我是菜鸟</a> 2006-09-26 13:36 <a href="http://www.blogjava.net/1948asd/archive/2006/09/26/71957.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>