??xml version="1.0" encoding="utf-8" standalone="yes"?>国产在线观看高清视频,a√中文在线观看,国产成人亚洲综合91精品http://www.aygfsteel.com/hllwuxin/archive/2009/09/08/294335.html優雅Qě頽?/dc:creator>優雅Qě頽?/author>Tue, 08 Sep 2009 09:23:00 GMThttp://www.aygfsteel.com/hllwuxin/archive/2009/09/08/294335.htmlhttp://www.aygfsteel.com/hllwuxin/comments/294335.htmlhttp://www.aygfsteel.com/hllwuxin/archive/2009/09/08/294335.html#Feedback0http://www.aygfsteel.com/hllwuxin/comments/commentRss/294335.htmlhttp://www.aygfsteel.com/hllwuxin/services/trackbacks/294335.html最q刚使用MyEclise 7.1 Q发现期插g安装与以前有所不同?

MyEclipse 7.1 的安装目录结构如下:

view plaincopy to clipboardprint?
1. Genuitec    
2.        ├─Common    
3.        ?nbsp; ├─configuration    
4.        ?nbsp; ├─features    
5.        ?nbsp; └─plugins    
6.        └─MyEclipse 7.1    
7.            ├─configuration    
8.            └─dropins   
   1. Genuitec 
   2.        ├─Common 
   3.        ?nbsp; ├─configuration 
   4.        ?nbsp; ├─features 
   5.        ?nbsp; └─plugins 
   6.        └─MyEclipse 7.1 
   7.            ├─configuration 
   8.            └─dropins   最新的插g安装方式Q要求将插g安装在上图中的dropins节点。ƈ且要求以如下l构安装

dropins-->插g文g?可由安装者定?-->eclipse-->plugins+features

例如Q我以fat插g作ؓ安装CZQ目录结构图如下Q?

view plaincopy to clipboardprint?
 1. Genuitec    
 2.     ├─Common    
 3.     ?nbsp; ├─configuration    
 4.     ?nbsp; ├─features    
 5.     ?nbsp; └─plugins    
 6.     └─MyEclipse 7.1    
 7.         ├─configuration    
 8.         └─dropins    
 9.             └─fat    
10.                 └─eclipse    
11.                     ├─features    
12.                     └─plugins    
13.                         └─net.sf.fjep.fatjar_0.0.31(插g)   
   1. Genuitec 
   2.     ├─Common 
   3.     ?nbsp; ├─configuration 
   4.     ?nbsp; ├─features 
   5.     ?nbsp; └─plugins 
   6.     └─MyEclipse 7.1 
   7.         ├─configuration 
   8.         └─dropins 
   9.             └─fat 
  10.                 └─eclipse 
  11.                     ├─features 
  12.                     └─plugins 
  13.                         └─net.sf.fjep.fatjar_0.0.31(插g)   安装好后重新启动MyEclipse7 .1 ,插g的效果就出来?-当然前提是你的插件支持当前eclipse版本?

 

本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/guo_rui22/archive/2009/07/07/4327539.aspx



]]>
Eclipse插g理http://www.aygfsteel.com/hllwuxin/archive/2008/07/13/214610.html優雅Qě頽?/dc:creator>優雅Qě頽?/author>Sun, 13 Jul 2008 11:31:00 GMThttp://www.aygfsteel.com/hllwuxin/archive/2008/07/13/214610.htmlhttp://www.aygfsteel.com/hllwuxin/comments/214610.htmlhttp://www.aygfsteel.com/hllwuxin/archive/2008/07/13/214610.html#Feedback0http://www.aygfsteel.com/hllwuxin/comments/commentRss/214610.htmlhttp://www.aygfsteel.com/hllwuxin/services/trackbacks/214610.htmlEclipse插g理

    提示Q新下蝲的插件PlugIn一定不要都攑֜原始的Eclipse目录下去Q一大堆Q篏MQ(

  1. 前提是你已经下蝲解压q设|好Eclipse工具Q比如解压在E:\OpenSource\Eclipse\目录下,以下q个目录?ECLIPSE_HOME%来进行表C;
  2. 此时默认的插件是?ECLIPSE_HOME%\plugins目录中的Q?
  3. ?ECLIPSE_HOME%下徏立一个PlugInsNew的目录;

      比如QE:\OpenSource\Eclipse\PlugInsNew

  4. 如果你下载了一个新的插Ӟ比如叫做QXYZ

      那么在%ECLIPSE_HOME%\PlugInsNew\目录下徏立XYZ目录Q目录里面是eclipse目录Qeclipse目录包含有features与plugins两个子目录;l构如下图所C:

    ?

  5. 把下载的新插件的文g攑֜以下相应目录中;

      %ECLIPSE_HOME%\PlugInsNew\XYZ\eclipse\features

      %ECLIPSE_HOME%\PlugInsNew\ XYZ\eclipse\plugins

  6. 建立相关?link的文Ӟ

      然后?ECLIPSE_HOME%\links目录里徏立一个XYZ.link的文?/p>

      内容如是Q?/p>

      path=E:/OpenSource/Eclipse/PlugInsNew/XYZ

      ׃行这L路径指示而已?/p>

      q样Q如果你下蝲了多个插件就可以如法炮制建立多个Link文gQ想加蝲哪个插g把哪个插g的Link文g攑ֈ%ECLIPSE_HOME%\links的目录中卛_Q用与理都很方便Q徏议千万不要放在默认的安装目录中,q样对于升Eclipseȝ序也方便一些;当然如果你喜Ƣ用Find and Install…q行安装的话也可以的Q?/p>

      如果上面你的%ECLIPSE_HOME%与此不同Q请修改XYZ.link文g里的路径?/p>

  7. 删除插gQ先关闭EclipseQ?

      删除%ECLIPSE_HOME%\links\XYZ.link文g卛_

      删除%ECLIPSE_HOME%\PlugInsNew\XYZ整个目录及文?/p>

  8. 重新启动EclipseQ这样就可以了。如果插件没有生效或者没有删除,请加?cleanq行启动EclipseQ即Eclipse.exe –clean
  9. 插g安装验证及记录详见:Eclipse的workspace下面?metadata\.log文gQ比如:%ECLIPSE_HOME%\workspace\.metadata\.log文gQ有问题的话Q打开q个文g看看q进行解冟?
  10. 转蝲别h的,希望大家都能学习Q!Q?/li>


]]>
DBA必须熟悉的、最有用的DBA视图http://www.aygfsteel.com/hllwuxin/archive/2007/10/12/152347.html優雅Qě頽?/dc:creator>優雅Qě頽?/author>Fri, 12 Oct 2007 06:48:00 GMThttp://www.aygfsteel.com/hllwuxin/archive/2007/10/12/152347.htmlhttp://www.aygfsteel.com/hllwuxin/comments/152347.htmlhttp://www.aygfsteel.com/hllwuxin/archive/2007/10/12/152347.html#Feedback0http://www.aygfsteel.com/hllwuxin/comments/commentRss/152347.htmlhttp://www.aygfsteel.com/hllwuxin/services/trackbacks/152347.htmldba_db_links                              数据库中的所有数据库链\

dba_extents                               数据库中包括所有分?/p>

dba_free_space                          所有表I间中自由分?/p>

dba_indexes                              数据库中所有烦引的描述

dba_ind_columns                       在所有表及聚族上压羃索引的列

dba_objects                               数据库中所有的对象

dba_rollback_segs                      回滚D늚描述

dba_segments                           为所有数据库D分配的存储I间

dba_sequences                         数据库中所有顺序书的描q?/p>

dba_synonyms                         数据库中所有同义词

dba_tables                               数据库中所有表的描q?/p>

dba_tablespaces                      数据库中所有表I间的描q?/p>

dba_tab_columns                     所有表描述、视图以及聚族的?/p>

dba_tab_grants                       数据库中对象所授的权限

dba_tab_privs                         数据库中对象所授的权限

dba_ts_quotas                        所有用戯I间限额

dba_users                             关于数据库的所有用户信?/p>

dba_views                             数据库中所有视?/p>

]]>
execute immediatehttp://www.aygfsteel.com/hllwuxin/archive/2007/10/11/152050.html優雅Qě頽?/dc:creator>優雅Qě頽?/author>Thu, 11 Oct 2007 07:21:00 GMThttp://www.aygfsteel.com/hllwuxin/archive/2007/10/11/152050.htmlhttp://www.aygfsteel.com/hllwuxin/comments/152050.htmlhttp://www.aygfsteel.com/hllwuxin/archive/2007/10/11/152050.html#Feedback0http://www.aygfsteel.com/hllwuxin/comments/commentRss/152050.htmlhttp://www.aygfsteel.com/hllwuxin/services/trackbacks/152050.htmlEXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package?它解析ƈ马上执行动态的SQL语句或非q行时创建的PL/SQL?动态创建和执行SQL语句性能前QEXECUTE IMMEDIATE的目标在于减企业费用ƈ获得较高的性能Q较之以前它相当Ҏ~码.管DBMS_SQL仍然可用Q但是推荐用EXECUTE IMMEDIATE,因ؓ它获的收益在包之上?/div>

使用技?/div>

1. EXECUTE IMMEDIATE不会提交一个DML事务执行Q应该显式提?br /> 如果通过EXECUTE IMMEDIATE处理DML命oQ那么在完成以前需要显式提交或者作为EXECUTE IMMEDIATE自己的一部分. 如果通过EXECUTE IMMEDIATE处理DDL命o,它提交所有以前改变的数据

2. 不支持返回多行的查询,q种交互用临时表来存储记录(参照例子如下)或者用REF cursors.

3. 当执行SQL语句Ӟ不要用分P当执行PL/SQL块时Q在其尾部用分号.

4. 在Oracle手册中,未详l覆盖这些功能。下面的例子展示了所有用到Execute immediate的可能方?希望能给你带来方?

5. 对于Forms开发?当在PL/SQL 8.0.6.3.版本中,Forms 6i不能使用此功?

EXECUTE IMMEDIATE用法例子

1. 在PL/SQLq行DDL语句

begin
execute immediate 'set role all';
end;

2. l动态语句传?USING 子句)

declare
l_depnam varchar2(20) := 'testing';
l_loc varchar2(10) := 'Dubai';
begin
execute immediate 'insert into dept values (:1, :2, :3)'
using 50, l_depnam, l_loc;
commit;
end;

3. 从动态语句检索?INTO子句)

declare
l_cnt varchar2(20);
begin
execute immediate 'select count(1) from emp'
into l_cnt;
dbms_output.put_line(l_cnt);
end;

4. 动态调用例E?例程中用到的l定变量参数必须指定参数cd.?]认ؓINcd,其它cd必须昑ּ指定

declare
l_routin varchar2(100) := 'gen2161.get_rowcnt';
l_tblnam varchar2(20) := 'emp';
l_cnt number;
l_status varchar2(200);
begin
execute immediate 'begin ' || l_routin || '(:2, :3, :4); end;'
using in l_tblnam, out l_cnt, in out l_status;
if l_status != 'OK' then
dbms_output.put_line('error');
end if;
end;

5. 返回g递到PL/SQL记录cd;同样也可?rowtype变量

declare
type empdtlrec is record (empno number(4),
ename varchar2(20),
deptno number(2));
empdtl empdtlrec;
begin
execute immediate 'select empno, ename, deptno ' ||
'from emp where empno = 7934'
into empdtl;
end;

6. 传递ƈ索?INTO子句用在USING子句?/div>

declare
l_dept pls_integer := 20;
l_nam varchar2(20);
l_loc varchar2(20);
begin
execute immediate 'select dname, loc from dept where deptno = :1'
into l_nam, l_loc
using l_dept ;
end;

7. 多行查询选项.Ҏ选项用insert语句填充临时表,用时表q行q一步的处理,也可以用REF cursorsU正此缺?
declare
l_sal pls_integer := 2000;
begin
execute immediate 'insert into temp(empno, ename) ' ||
' select empno, ename from emp ' ||
' where sal > :1'
using l_sal;
commit;
end;

对于处理动态语?EXECUTE IMMEDIATE比以前可能用到的更容易ƈ且更高效.当意图执行动态语句时Q适当地处理异常更加重?应该x于捕h有可能的异常.


]]>DBA应遵循的oracle调优原则http://www.aygfsteel.com/hllwuxin/archive/2007/10/11/152044.html優雅Qě頽?/dc:creator>優雅Qě頽?/author>Thu, 11 Oct 2007 07:00:00 GMThttp://www.aygfsteel.com/hllwuxin/archive/2007/10/11/152044.htmlhttp://www.aygfsteel.com/hllwuxin/comments/152044.htmlhttp://www.aygfsteel.com/hllwuxin/archive/2007/10/11/152044.html#Feedback0http://www.aygfsteel.com/hllwuxin/comments/commentRss/152044.htmlhttp://www.aygfsteel.com/hllwuxin/services/trackbacks/152044.htmlOracle 调优是一个复杂的主题。关于调优可以写整整一本书Q不q,Z改善 Oracle 数据库的性能Q有一些基本的概念是每?Oracle DBA 都应该遵从的?

在这简介中Q我们将要地介绍以下?Oracle 主题Q?

-- 外部调整Q我们应该记?Oracle q不是单独运行的。因此我们将查看一下通过调整 Oracle 服务器以得到高的性能?

--Row re-sequencing 以减磁?I/O Q我们应该懂?Oracle 调优最重要的目标是减少 I/O ?

--Oracle SQL 调整?Oracle SQL 调整?Oracle 调整中最重要的领域之一Q只要通过一些简单的 SQL 调优规则可以大q度地提?SQL 语句的性能Q这是一炚w不奇怪的?

-- 调整 Oracle 排序Q排序对?Oracle 性能也是有很大媄响的?

-- 调整 Oracle 的竞争:表和索引的参数设|对?UPDATE ?INSERT 的性能有很大的影响?

我们首先从调?Oracle 外部的环境开始。如果内存和 CPU 的资源不的话,M?Oracle 调整都是没有帮助的?

外部的性能问题

Oracle q不是单独运行的?Oracle 数据库的性能和外部的环境有很大的关系。这些外部的条g包括有:

Q?CPU--CPU 资源的不o查询变慢。当查询过?Oracle 服务器的 CPU 性能Ӟ你的数据库性能受?CPU 的限制?

Q内?-- 可用?Oralce 的内存数量也会媄?SQL 的性能Q特别是在数据缓冲和内存排序斚w?

Q网l?-- 大量?Net8 通信?SQL 的性能变慢?

许多新手都错误的认ؓ应该首先调整 Oracle 数据库,而不是先认外部资源是否_。实际上Q如果外部环境出现瓶颈,再多?Oracle 调整都是没有帮助的?

在检?Oracle 的外部环境时Q有两个斚w是需要注意的Q?

1 、当q行队列的数目超q服务器?CPU 数量Ӟ服务器的性能׃受到 CPU 的限制。补救的Ҏ是ؓ服务器增加额外的 CPU 或者关闭需要很多处理资源的lgQ例?Oracle Parallel Query ?

2 、内存分c当内存分页Ӟ内存定w已经不Q而内存页是与盘上的交换行交互的。补救的Ҏ是增加更多的内存Q减?Oracle SGA 的大,或者关?Oracle 的多U程服务器?

可以使用各种标准的服务器工具来得到服务器的统计数据,例如 vmstat,glance,top ?sar ?DBA 的目标是保数据库服务器拥有_?CPU 和内存资源来处理 Oracle 的请求?

以下让我们来看一?Oracle ?row-resequencing 是如何能够极大地减少盘 I/O 的?

Row-resequencing Q行的重新排序)

p我们上面提到的,有经验的 Oracle DBA 都知?I/O 是响应时间的最大组成部分。其中磁?I/O 特别厉害Q因为当 Oracle q盘上的一个数据文件得C个数据块Ӟȝq程必ȝ待物?I/O 操作完成。磁盘操作要比数据缓冲慢 10,000 倍。因此,如果可以?I/O 最化Q或者减由于磁盘上的文件竞争而带来的瓉Q就可以大大地改?Oracle 数据库的性能?

如果pȝ响应很慢Q通过减少盘 I/O 可以有一个很快的改善。如果在一个事务中通过按一定的范围搜烦 primary-key 索引来访问表Q那么重C CTAS 的方法组l表是你减?I/O 的首要策略。通过在物理上行排序为和 primary-key 索引一L序Q就可以加快获得数据的速度?

p盘的负载^衡一P行的重新排序也是很简单的Q而且也很快。通过与其它的 DBA 理技巧一起用,可以在?I/O 的系l中大大地减响应的旉?

在高定w的在U事务处理环境中Q?online transaction processing Q?OLTP Q,数据是由一?primary 索引得到的,重新排序表格的行可以oq箋块的序和它们的 primary 索引一Pq样可以在索引驱动的表格查询中Q减物?I/O q且改善响应旉。这个技巧仅在应用选择多行的时候有用,或者在使用索引范围搜烦和应用发出多个查询来得到q箋?key 时有效。对于随机的唯一 primary-key Q主键)的访问将不会p重新排序中得到好处?

让我们看一下它是如何工作的。考虑以下的一?SQL 的查询,它用一个烦引来得到 100 行:

select salary from employee where last_name like 'B%';

q个查询会使用 last_name_index Q搜索其中的每一行来得到目标行。这个查询将会至?100 ơ物理磁盘的dQ因?employee 的行存放在不同的数据块中?

不过Q如果表中的行已l重新排序ؓ?last_name_index 的一P同样的查询又会怎样处理呢?我们可以看到q个查询只需要三ơ的盘 I/O p完全?100 个员工的资料Q一ơ用作烦引的dQ两ơ用作数据块的读取)Q减了 97 ơ的块读取?

重新排序带来的性能改善的程度在于在你开始的时候行的ؕ序性如何,以及你需要由序列中访问多行。至于一个表中的行与索引的排序键的匹配程度,可以查看数据字典中的 dba_indexes ?dba_tables 视图得到?

?dba_indexes 的视图中Q查?clustering_factor 列。如?clustering_factor 的值和表中的块数目大致一P那么你的表和索引的顺序是一L。不q,如果 clustering_factor 的值接q表中的行数目,那就表明表格中的行和索引的顺序是不一L?

行重新排序的作用是不可以看的。在需要进行大范围的烦引搜索的大表中,行重新排序可以o查询的性能提高三倍?

一旦你已经军_重新排序表中的行Q你可以使用以下的工具之一来重新组l表根{?

. 使用 Oracle ?Create Table As Select (CTAS) 语法来拷贝表?

. Oracle9i 自带的表格重新组l工?

SQL 调优

Oracle ?SQL 调优是一个复杂的主题Q甚x需要整本书来介l?Oracle SQL 调优的细微差别。不q有一些基本的规则是每?Oracle DBA 都需要跟从的Q这些规则可以改善他们系l的性能?SQL 调优的目标是单的Q?

. 消除不必要的大表全表搜烦Q不必要的全表搜索导致大量不必要?I/O Q从而拖慢整个数据库的性能。调优专安先会Ҏ查询q回的行数目来评?SQL 。在一个有序的表中Q如果查询返回少?40% 的行Q或者在一个无序的表中Q返回少?7% 的行Q那么这个查询都可以调整Z用一个烦引来代替全表搜烦。对于不必要的全表搜索来_最常见的调优方法是增加索引。可以在表中加入标准?B 树烦引,也可以加?bitmap 和基于函数的索引。要军_是否消除一个全表搜索,你可以仔l检查烦引搜索的 I/O 开销和全表搜索的开销Q它们的开销和数据块的读取和可能的ƈ行执行有养Iq将两者作Ҏ。在一些情况下Q一些不必要的全表搜索的消除可以通过强制使用一?index 来达刎ͼ只需要在 SQL 语句中加入一个烦引的提示可以了?

. 在全表搜索是一个最快的讉KҎӞ小表的全表搜烦攑ֈ~存中,调优专家应该保有一个专门的数据~冲用作行缓册Ӏ在 Oracle7 中,你可以?alter table xxx cache 语句Q在 Oracle8 或以上,表可以被强制ؓ攑ֈ KEEP 池中~冲?

. 保最优的索引使用 Q对于改善查询的速度Q这是特别重要的。有?Oracle 可以选择多个索引来进行查询,调优专家必须查每个烦引ƈ且确?Oracle 使用正确的烦引。它q包?bitmap 和基于函数的索引的用?

. 保最优的 JOIN 操作Q有些查询?NESTED LOOP join 快一些,有些则是 HASH join 快一些,另外一些则?sort-merge join 更快?

q些规则看来单,不过它们?SQL 调优d?90% Qƈ且它们也无需完全懂得 Oracle SQL 的内部运作。以下我们来单概览以?Oracle SQL 的优化?

我们首先要查?Oracle 的排序,q且看一看排序操作是如何影响性能的?

调整 Oracle 的排序操?

排序?SQL 语法中一个小的方面,但很重要Q在 Oracle 的调整中Q它常常被忽略。当使用 create index ?ORDER BY 或?GROUP BY 的语句时Q?Oracle 数据库将会自动执行排序的操作。通常Q在以下的情况下 Oracle 会进行排序的操作Q?

使用 Order by / Group by ?SQL 语句

在创建烦引的时?

q行 table join Ӟ׃现有索引的不导?SQL 优化器调?MERGE SORT?

当与 Oracle 建立起一?session Ӟ在内存中׃ session 分配一个私有的排序区域。如果该q接是一个专用的q接 (dedicated connection) Q那么就会根?init.ora ?sort_area_size 参数的大在内存中分配一?Program Global Area (PGA) 。如果连接是通过多线E服务器建立的,那么排序的空间就?large_pool 中分配。不q的是,对于所有的 session Q用做排序的内存量都必须是一LQ我们不能ؓ需要更大排序的操作分配额外的排序区域。因此,设计者必MZ个^衡,在分配够的排序区域以避免发生大的排序Q务时出现盘排序Q?disk sorts Q的同时Q对于那些ƈ不需要进行很大排序的dQ就会出C些浪贏V当Ӟ当排序的I间需求超Z sort_area_size 的大时Q这时将会在 TEMP 表空间中分页q行盘排序。磁盘排序要比内存排序大概慢 14,000 倍?

上面我们已经提到Q私有排序区域的大小是有 init.ora 中的 sort_area_size 参数军_的。每个排序所占用的大由 init.ora 中的 sort_area_retained_size 参数军_。当排序不能在分配的I间中完成时Q就会用磁盘排序的方式Q即?Oracle 实例中的临时表空间中q行?

盘排序的开销是很大的Q有几个斚w的原因。首先,和内存排序相比较Q它们特别慢Q而且盘排序会消耗时表I间中的资源?Oracle q必d配缓冲池块来保持临时表空间中的块。无Z么时候,内存排序都比盘排序好,盘排序会令Q务变慢,q且会媄?Oracle 实例的当前Q务的执行。还有,q多的磁盘排序将会o free buffer waits 的值变高,从而o其它d的数据块q冲中U走?

接着Q让我们看一?Oracle 的竞争,q且看一下表的存储参数的讄是如何媄?SQL UPDATE ?INSERT 语句的性能的?

调整 Oracle 的竞?/strong>

Oracle 的其中一个优Ҏ它可以管理每个表I间中的自由I间?Oracle 负责处理表和索引的空间管理,q样可以让我们无需懂得 Oracle 的表和烦引的内部q作。不q,对于有经验的 Oracle 调优专家来说Q他需要懂?Oracle 是如何管理表?extent 和空闲的数据块。对于调整拥有高?insert 或?update 的系l来_q是非常重要的?

要精通对象的调整Q你需要懂?freelists ?freelist l的行ؓQ它们和 pctfree ?pctused 参数的值有兟뀂这些知识对于企业资源计划( ERP Q的应用是特别重要的Q因为在q些应用中,不正的表设|通常?DML 语句执行慢的原因?

对于初学者来_最常见的错误是认ؓ默认?Oracle 参数对于所有的对象都是最佳的。除非磁盘的消耗不是一个问题,否则在设|表?pctfree ?pctused 参数Ӟ必考虑q_的行长和数据库的块大,q样I的块才会被有效地放?freelists 中。当q些讄不正时Q那些得到的 freelists 也是 “dead”块,因ؓ它们没有_的空间来存储一行,q样会D明显的处理gq?

Freelists 对于有效地重C?Oracle 表空间中的空间是很重要的Q它?pctfree ?pctused q两个存储参数的讄直接相关。通过?pctused 讄Z个高的|q时数据库就会尽快地重新使用块?

当有一个请求需要插入一行到表格中时Q?Oracle ׃?freelist 中寻找一个有_的空间来容纳一行的块。你也许知道Q?freelist 串是攑֜表格或者烦引的W一个块中,q个块也被称为段_ segment header Q?pctfree ?pctused 参数的唯一目的是Z控制块如何在 freelists 中进出。虽?freelist link ?unlink 是简单的 Oracle 功能Q不q设|?freelist link (pctused) ?unlink (pctfree) ?Oracle 的性能实有媄响?

?DBA 的基本知识知道, pctfree 参数是控?freelist un-links 的(卛_块由 freelists 中移除)。设|?pctfree=10 意味着每个块都保留 10% 的空间用作行扩展?pctused 参数是控?freelist re-links 的。设|?pctused=40 意味着只有在块的用低?40% 时才会回到表格的 freelists 中?

许多新手对于一个块重新回到 freelists 后的处理都有些误解。其实,一旦由于一个删除的操作而o块被重新加入?freelist 中,它将会一直保留在 freelist 中即使空间的使用过?60% Q只有在到达 pctfree 时才会将数据块由 freelist 中移走?

表格和烦引存储参数设|的要求ȝ

以下的一些规则是用来讄 freelists, freelist groups, pctfree ?pctused 存储参数的。你也知道, pctused ?pctfree 的值是可以很容易地通过 alter table 命o修改的,一个好?DBA 应该知道如何讄q些参数的最佛_{?

有效C用空间和高性能之间是有矛盾的,而表格的存储参数是控制q个斚w的矛盾:

. 对于需要有效地重新使用I间Q可以设|一个高?pctused |不过副作用是需要额外的 I/O 。一个高?pctused 值意味着相对满的块都会放?freelist 中。因此,q些块在再次满之前只可以接受几行记录Q从而导致更多的 I/O ?

. q求高性能的话Q可以将 pctused 讄Z个低的|q意味着 Oracle 不会数据块攑ֈ freelists 中直到它几乎是空的。那么块可以在满之前接收更多的行,因此可以减少插入操作?I/O 。要C Oracle 扩展新块的性能要比重新使用现有的块高。对?Oracle 来说Q扩展一个表比管?freelists 消耗更的资源?

让我们来回顾一下设|对象存储参数的一些常见规则:

Q经常将 pctused 讄为可以接收一条新行。对于不能接受一行的 free blocks 对于我们来说是没有用的。如果这样做Q将会o Oracle 的性能变慢Q因?Oracle 在扩展表来得到一个空的块之前Q企图读?5 ?“dead”?free block ?

Q表g chained rows 的出现意味着 pctfree 太低或者是 db_block_size 太少。在很多情况下, RAW ?LONG RAW 列都很巨大,以至过?Oracle 的最大块的大,q时 chained rows 是不可以避免的?

Q如果一个表有同时插入的 SQL 语句Q那么它需要有同时删除的语句。运行单一个一个清除的工作会把全部的I闲块放C?freelist 中,而没有其它包含有MI闲块的 freelists 出现?

Q?freelist 参数应该讄格同时更新的最大倹{例如,如果在Q何时候,某个表最多有 20 个用h行插入的操作Q那么该表的参数应该讄?freelists=20 ?

应记住的?freelist groups 参数的值只是对?Oracle Parallel Server ?Real Application Clusters 才是有用的。对于这c?Oracle Q?freelist groups 应该讄问该表格?Oracle Parallel Server 实例的数目?/p>

]]>
关于oracle中的I?/title><link>http://www.aygfsteel.com/hllwuxin/archive/2007/10/11/151981.html</link><dc:creator>優雅Qě頽?/dc:creator><author>優雅Qě頽?/author><pubDate>Thu, 11 Oct 2007 03:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/hllwuxin/archive/2007/10/11/151981.html</guid><wfw:comment>http://www.aygfsteel.com/hllwuxin/comments/151981.html</wfw:comment><comments>http://www.aygfsteel.com/hllwuxin/archive/2007/10/11/151981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hllwuxin/comments/commentRss/151981.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hllwuxin/services/trackbacks/151981.html</trackback:ping><description><![CDATA[<p><span style="color: #000000">????中, I?????C????????????c?在一 ??中, ??一 ???????| ???U???I?|NULLQ?????c???? ???????I(NOT NULLQ???键(PRIMARY KEYQ?????Ӟ ?????I?倹{在 ????中, ????I????在, ???????????烦?</span> <p><span style="color: #000000">---- ?如, ??????表(EMPQ?中, ??名(ENAMEQؓKING ?行, ?为KING ?最 ??员(PRESIDENTQ, ????(MGRQ, 所 ?其MGR ?I倹{?????所 ???????l?费(COMMQ, 所 ?列COMM ???I?|?00?00?400? ??????行COMM ??I?倹{?</span></p> <pre><span style="color: #000000">EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO<br /> ---- -------- -------- --------- -------- ------ ---------<br /> 7369 SMITH CLERK 7902 17-DEC-80 800 20<br /> 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30<br /> 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30<br /> 7566 JONES MANAGER 7839 02-APR-81 2975 20<br /> 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30<br /> 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30<br /> 7782 CLARK MANAGER 7839 09-JUN-81 2450 10<br /> 7788 SCOTT ANALYST 7566 09-DEC-82 3000 20<br /> 7839 KING PRESIDENT 17-NOV-81 5000 10<br /> 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30<br /> 7876 ADAMS CLERK 7788 12-JAN-83 1100 20<br /> 7900 JAMES CLERK 7698 03-DEC-81 950 30<br /> 7902 FORD ANALYST 7566 03-DEC-81 3000 20<br /> 7934 MILLER CLERK 7782 23-JAN-82 1300 10<br /> </span></pre> <p><span style="color: #000000">---- ?????qEMP ??例, ????一 ?I????????所 ???一 ??性?</span></p> <p><span style="color: #000000">---- 一?I????????</span></p> <p><span style="color: #000000">---- 1. I?????</span></p> <p><span style="color: #000000">---- ??一 ????I(NOT NULLQ?????Ӟ ???~?????I?| ?????一 ????????| ????I?倹{?</span></p> <p><span style="color: #000000">---- ?用SQL ?句INSERT ??行, ?????的列Q????I?| ????列, ???????I?| ?????用NULL ??C( ?于字 W???列, ????' ??C)?</span></p> <p><span style="color: #000000">---- 例: ??一 行, 其EMPNO ?、ENAME ?JIA'、SAL ?0000、job 和comm ?I?倹{?</span></p> <pre><span style="color: #000000">SQL >insert into emp(empno,ename,job,sal,comm) <br /> values(1,'JIA',NULL,1000,NULL);<br /> SQL >select * from emp where empno=1;<br /> EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO<br /> --------- ---------- --------- --------- --------- ---------<br /> 1 JIA 1000<br /> </span></pre> <p><span style="color: #000000">---- ????????一 行, 除job 和comm ?I??外,mgr、hiredate、deptno ?????????及, ??I?倹{?</span></p> <p><span style="color: #000000">---- ?用SQL ?句UPDATE ????据, I???用NULL ??C( ???W???列, ????' ??C)?? </span></p> <pre><span style="color: #000000">SQL >update emp set ename=NULL,sal=NULL where empno=1;<br /> </span></pre> <p><span style="color: #000000">---- 2. I?????</span></p> <p><span style="color: #000000">---- I???????点: </span></p> <p><span style="color: #000000">---- * {???????倹{?</span></p> <p><span style="color: #000000">---- * ?0?I??W???I???同?</span></p> <p><span style="color: #000000">---- * 在where ??? Oracle ??l??为NULL ???为FALSEQ???q????的select ???q??行, q???q?????息?但NULL 和FALSE ???的?</span></p> <p><span style="color: #000000">---- * ?????????大?</span></p> <p><span style="color: #000000">---- * I??????引?</span></p> <p><span style="color: #000000">---- 二?I?????</span></p> <p><span style="color: #000000">---- ??I???C?~???据, 所 ?I?????值没 ???性, ????{?于??{?于????????????较, ?????I??本nQ???在decode ??外, ??I??????{?P???I?????????WIS NULL 和IS NOT NULL?????????????W??????式, q???l???赖于 I?| ???l????是NULL?在where ??中,Oracle ??l??为NULL ??件ؓFALSEQ???q????的select ???q??行, ??q?????息?</span></p> <p><span style="color: #000000">---- ???询EMP ?中MGR 为NULL ?行: </span></p> <pre><span style="color: #000000">SQL >select * from emp where mgr=''; <br /> no rows selected<br /> SQL >select * from emp where mgr=null; <br /> no rows selected<br /> SQL >select * from emp where mgr is null;<br /> EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO<br /> ---------- --------- --------- --------- ---------<br /> 7839 KING PRESIDENT 17-NOV-81 5000 10<br /> </span></pre> <p><span style="color: #000000">---- W?? ????妥,WHERE ??l??为NULLQ??q??行?W????, q?回MGR ?I???行?</span></p> <p><span style="color: #000000">---- 三?I?????W?</span></p> <p><span style="color: #000000">---- 1. I???????W?</span></p> <p><span style="color: #000000">---- ????W?</span></p> <p><span style="color: #000000">---- ???</span></p> <p><span style="color: #000000">---- l??</span></p> <pre><span style="color: #000000">AND<br /> NULL AND TRUE<br /> NULL<br /> <br /> NULL AND FALSE<br /> FALSE<br /> <br /> NULL AND NULL<br /> NULL<br /> OR<br /> NULL OR TRUE<br /> TRUE<br /> <br /> NULL OR FALSE<br /> NULL<br /> <br /> NULL OR NULL<br /> NULL<br /> NOT<br /> NOT NULL<br /> NULL<br /> </span></pre> <p><span style="color: #000000">---- ???刎ͼ ????中, 除NULL AND FALSE l??为FALSE、NULL OR TRUE l??为TRUE ?外, ??l???为NULL?</span></p> <p><span style="color: #000000">---- ??在where ??中,Oracle ??l??为NULL 的WHERE ??为FALSEQ????????中NULL ??于FALSE???在NOT Q?NULL AND FALSE Q?和NOT Q?NULL AND NULL Q??????一 处FALSE 和TRUE ??别, 但NOT Q?NULL AND FALSE Q??l???TRUEQ?而NOT Q?NULL AND NULL Q??l??为NULL?</span></p> <p><span style="color: #000000">---- ??????I???????W???法: </span></p> <pre><span style="color: #000000">SQL > select * from emp where not comm=null and comm!=0;<br /> no rows selected<br /> SQL > select * from emp where not ( not comm=null and comm!=0 );<br /> EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO<br /> ---------- --------- --------- --------- ---------<br /> 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30<br /> </span></pre> <p><span style="color: #000000">---- W?一 个Select ?句, ??not comm=null and comm!=0" {??于NULL AND COMM!=0?????一 行, ?果COMM ??{?? ??| 条g {??于NULL AND TRUEQ?l??为NULLQ??果COMM {??Q???{??于NULL AND FALSEQ结 ?为FALSE?所 以, 最 l?l???q??行?</span></p> <p><span style="color: #000000">---- W??个Select ??????W?一 个Select 语句 ??? ?QNOTQ, ????一 行, ?果COMM ??{?? ??| ??{??于NOT NULLQ?l??为NULLQ??果COMM {??Q???{??于NOT FALSEQ?l??为TRUE?所 以, 最 l结 ?q??行COMM {?? ?行?</span></p> <p><span style="color: #000000">---- 2. I???????W?</span></p> <p><span style="color: #000000">---- Q?QIS [NOT] NULLQ??????I????一 ??W( ? I?????Q?</span></p> <pre><span style="color: #000000">Q?Q??=?gt;=?lt;=?gt;?lt;<br /> SQL >select ename,sal,comm from emp where sal >comm;<br /> ENAME SAL COMM<br /> ---------- --------- ---------<br /> ALLEN 1600 300<br /> WARD 1250 500<br /> TURNER 1500 0<br /> </span></pre> <p><span style="color: #000000">---- sal 或comm ?I???行,sal>comm ??l??为NULLQ?所 ??是sal 或comm ?I???????q?回?</span></p> <p><span style="color: #000000">---- Q?QIN 和NOT IN ??W?</span></p> <pre><span style="color: #000000">SQL >select ename,mgr from emp where mgr in (7902,NULL);<br /> ENAME MGR<br /> ---------- ---------<br /> SMITH 7902<br /> </span></pre> <p><span style="color: #000000">---- ??q???中, ??mgr in (7902,NULL)" {?价于mgr=7902 or mgr=NULL???表EMP ????一 行, ?果mgr 为NULLQ???q???{h 于NULL OR NULLQ??为NULLQ??果mgr ??{??902 ??| ??q???{?价于FALSE OR NULLQ??为NULLQ??果mgr {??902Q???q???{??于TRUE OR NULLQ?即ؓTRUE?所 以, 最 l?l???q?回mgr {??902 ?行?</span></p> <pre><span style="color: #000000">SQL >select deptno from emp where deptno not in ('10',NULL);<br /> no rows selected<br /> </span></pre> <p><span style="color: #000000">---- ??q???中, ??deptno not in ('10',NULL)" {??于deptno!='10' and deptno!=NULLQ??于EMP ?????一 行,???l????为NULL 或FALSEQ?所 ??q??行?</span></p> <p><span style="color: #000000">---- Q?Qany,some </span></p> <pre><span style="color: #000000">SQL >select ename,sal from emp where sal > any(3000,null);<br /> ENAME SAL<br /> ---------- ---------<br /> KING 5000<br /> </span></pre> <p><span style="color: #000000">---- ??sal > any(3000,null)" {??于sal >3000 or sal >null?c???qͼ3Q?W?一 句, 最 l?l??q??所 有sal >3000 ?行?</span></p> <p><span style="color: #000000">---- Q?QAll </span></p> <pre><span style="color: #000000">SQL >select ename,sal from emp where sal > all(3000,null);<br /> no rows selected<br /> </span></pre> <p><span style="color: #000000">---- ??sal> all(3000,null)" {??于sal >3000 and sal >null, l????为NULL 或FALSEQ?所 ??q??行?</span></p> <p><span style="color: #000000">---- Q?Q(notQbetween </span></p> <pre><span style="color: #000000">SQL >select ename,sal from emp where sal between null and 3000;<br /> no rows selected<br /> </span></pre> <p><span style="color: #000000">---- ??sal between null and 3000" {??于sal >=null and sal< =3000, l????为NULL 或FALSEQ?所 ??q??行?</span></p> <pre><span style="color: #000000">SQL >select ename,sal from emp where sal not between null and 3000;<br /> ENAME SAL<br /> ---------- ---------<br /> KING 5000<br /> </span></pre> <p><font color="#a52a2a"><span style="color: #000000">---- ??sal not between null and 3000" {??于sal<null sal="" or="">3000, c???qͼ3Q??W?一 句, l??q?回sal>3000 ?行?</null></span></font></p> <p><span style="color: #000000">---- ???????W??I????l: </span></p> <p><span style="color: #000000">---- ????W?</span></p> <p><span style="color: #000000">---- ??式( 例:A、B 是NULL、C=10Q?</span></p> <p><span style="color: #000000">---- l??</span></p> <pre><span style="color: #000000">IS NULL、IS NOT NULL<br /> A IS NULL<br /> TRUE<br /> <br /> A IS NOT NULL<br /> FALSE<br /> <br /> C IS NULL<br /> FALSE<br /> <br /> C IS NOT NULL<br /> TRUE<br /> =?=?gt;=?lt; =?gt;?lt; <br /> A = NULL<br /> NULL<br /> <br /> A > NULL<br /> NULL<br /> <br /> C = NULL<br /> NULL<br /> <br /> C > NULL<br /> NULL<br /> IN (=ANY)<br /> A IN (10,NULL)<br /> NULL<br /> <br /> C IN (10,NULL)<br /> TRUE<br /> <br /> C IN (20,NULL)<br /> NULL<br /> NOT IN <br /> ( {???Q?ALL)<br /> A NOT IN (20,NULL)<br /> NULL<br /> <br /> C NOT IN (20,NULL)<br /> FALSE<br /> <br /> C NOT IN (10,NULL)<br /> NULL<br /> ANYQSOME<br /> A > ANY(5,NULL)<br /> NULL<br /> <br /> C > ANY(5,NULL)<br /> TRUE<br /> <br /> C > ANY(15,NULL)<br /> NULL<br /> ALL<br /> A > ALL(5,NULL)<br /> NULL<br /> <br /> C > ALL(5,NULL)<br /> NULL<br /> <br /> C > ALL(15,NULL)<br /> FALSE<br /> (NOT)BETWEEN<br /> A BETWEEN 5 AND NULL<br /> NULL<br /> <br /> C BETWEEN 5 AND NULL<br /> NULL<br /> <br /> C BETWEEN 15 AND NULL<br /> FALSE<br /> <br /> A NOT BETWEEN 5 AND NULL<br /> NULL<br /> <br /> C NOT BETWEEN 5 AND NULL<br /> NULL<br /> <br /> C NOT BETWEEN 15 AND NULL<br /> TRUE<br /> </span></pre> <p><span style="color: #000000">---- 3?I????术??W???W?</span></p> <p><span style="color: #000000">---- Q?Q?????W: I???{???Q?????I?????????q??l????I?| ??I???0 ?I?倹{?</span></p> <p><span style="color: #000000">---- Q?Q??W???W||Q??为ORACLE ????零个 ?W????????I??????同( ???????一 ????此)Q?所 ?对于||Q?I??{??????W?倹{?例: </span></p> <pre><span style="color: #000000">SQL >select ename,mgr,ename||mgr,sal,comm,sal+comm from emp;<br /> ENAME MGR ENAME||MGR SAL COMM SAL+COMM<br /> ---------- --------- ------------- --------- --------- ---------<br /> SMITH 7902 SMITH7902 800 <br /> ALLEN 7698 ALLEN7698 1600 300 1900<br /> WARD 7698 WARD7698 1250 500 1750<br /> JONES 7839 JONES7839 2975 <br /> MARTIN 7698 MARTIN7698 1250 1400 2650<br /> BLAKE 7839 BLAKE7839 2850 <br /> CLARK 7839 CLARK7839 2450 <br /> SCOTT 7566 SCOTT7566 3000 <br /> KING KING 5000 <br /> TURNER 7698 TURNER7698 1500 0 1500<br /> ADAMS 7788 ADAMS7788 1100 <br /> JAMES 7698 JAMES7698 950 <br /> FORD 7566 FORD7566 3000 <br /> MILLER 7782 MILLER7782 1300 <br /> </span></pre> <p><span style="color: #000000">---- ?????刎ͼ 凡mgr ?I??的,ename||mgr l??{?于enameQ??是comm ?I???行,sal+comm ??I?倹{?</span></p> <p><span style="color: #000000">---- 四?I?????</span></p> <p><span style="color: #000000">---- 1 Q?I???????</span></p> <p><span style="color: #000000">---- ?????敎ͼ ??l??????I?| ?ӞNVL、TRANSLATE ?外) q????I?倹{?????的ABSQCOMMQ, ?果COMM ?I?|ABS(COMM) ?I?倹{?</span></p> <pre><span style="color: #000000">SQL > select ename,sal,comm,abs(comm) from emp where sal< 1500;<br /> ENAME SAL COMM ABS(COMM)<br /> ---------- --------- --------- ---------<br /> SMITH 800<br /> WARD 1250 500 500<br /> MARTIN 1250 1400 1400<br /> ADAMS 1100<br /> JAMES 950<br /> MILLER 1300<br /> </span></pre> <p><span style="color: #000000">---- 2. I???l???</span></p> <p><span style="color: #000000">---- l?????I?倹{??????中, ??需 ???用nvl ??????I?倹{?例: </span></p> <pre><span style="color: #000000">SQL >select count(comm),sum(comm),avg(comm) from emp;<br /> COUNT(COMM) SUM(COMM) AVG(COMM)<br /> ----------- --------- ---------<br /> 4 2200 550<br /> SQL >select count(nvl(comm,0)),sum(nvl(comm,0)),avg(nvl(comm,0))<br /> from emp;<br /> COUNT(NVL(COMM,0)) SUM(NVL(COMM,0)) AVG(NVL(COMM,0))<br /> ------------------ ---------------- ----------------<br /> 14 2200 157.14286<br /> </span></pre> <p><span style="color: #000000">---- W?一 个SELECT ???略COMM ?I???行, W?二个SELECT ???用NVL ??l???所 ?的COMMQ?所 ???l????数?q?????相同???需 ????是, ???l???q??????Ӟ ???????????同含 义, ????????z??握??如: </span></p> <pre><span style="color: #000000">SQL >select deptno,sum(sal),sum(comm), <br /> sum(sal+comm),sum(sal)+sum(comm),sum(nvl(sal,0)+nvl(comm,0)) <br /> from emp<br /> group by deptno;<br /> DEPTNO SUM(SAL) SUM(COMM) SUM(SAL+COMM) SUM(SAL)<br /> +SUM(COMM) SUM(NVL(SAL,0)+NVL(COMM,0))<br /> --------- --------- --------- ------------- ------- <br /> 10 8750 8750<br /> 20 10875 10875<br /> 30 9400 2200 7800 11600 11600<br /> </span></pre> <p><span style="color: #000000">---- ???到SUM(SAL+COMM)、SUM(SAL)+SUM(COMM)?SUM(NVL(SAL,0)+NVL(COMM,0)) ??别:SUM(SAL+COMM) ??????????和,?果SAL、COMM ??一 ?为NULLQ???????计;SUM(SAL)+SUM(COMM) ?????行的 ?????加,SAL、COMM ?的NULL ????计, ???SUM(SAL)、SUM(COMM) ?者的 l?????一 ?为NULLQ??????为NULLQ?在SUM(NVL(SAL,0)+NVL(COMM,0)) 里,SAL、COMM ?的NULL ? ?理?</span></p> <p><span style="color: #000000">---- 五?I???????</span></p> <p><span style="color: #000000">---- 1. I??????????倹{??如: </span></p> <pre><span style="color: #000000">SQL > select ename,comm from emp where deptno='30' order by commQ?br /> ENAME COMM<br /> ---------- ---------<br /> TURNER 0<br /> ALLEN 300<br /> WARD 500<br /> MARTIN 1400<br /> BLAKE <br /> JAMES<br /> </span></pre> <p><span style="color: #000000">---- 2. I??????引???????????引,??????I?????_ ??I??????引, 所 ?????????率??如下 ????????在MGR ??????引?</span></p> <pre><span style="color: #000000">SQL >select ename from emp where mgr is null;<br /> ENAME<br /> ----------<br /> KING<br /> </span></pre> <p><span style="color: #000000">---- ??????I?????引, 所 ?????I????????一 ??引(UNIQUE INDEXQ??如, ??在EMP ?的COMM ?????一 ??引: </span></p> <pre><span style="color: #000000">SQL > create unique index emp_comm on emp(comm);<br /> Index created.</span></pre> <img src ="http://www.aygfsteel.com/hllwuxin/aggbug/151981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hllwuxin/" target="_blank">優雅Qě頽?/a> 2007-10-11 11:14 <a href="http://www.aygfsteel.com/hllwuxin/archive/2007/10/11/151981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> MD5法的java版本Q{Q?/title><link>http://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146571.html</link><dc:creator>優雅Qě頽?/dc:creator><author>優雅Qě頽?/author><pubDate>Wed, 19 Sep 2007 10:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146571.html</guid><wfw:comment>http://www.aygfsteel.com/hllwuxin/comments/146571.html</wfw:comment><comments>http://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146571.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hllwuxin/comments/commentRss/146571.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hllwuxin/services/trackbacks/146571.html</trackback:ping><description><![CDATA[<div> <div>package DPS.AuthCom.Radius;</div> <div><br /> /*************************************************<br /> md5 cdCRSA Data Security, Inc.在提交给IETF<br /> 的RFC1321中的MD5 message-digest 法?br /> *************************************************/</div> <div>public class MD55<br /> {<br />   /* 下面q些S11-S44实际上是一?*4的矩阵,在原始的C实现中是?define 实现的,<br />     q里把它们实现成为static final是表CZ只读Q切能在同一个进E空间内的多?br />     Instance间共?/<br />   static final int S11 = 7;<br />   static final int S12 = 12;<br />   static final int S13 = 17;<br />   static final int S14 = 22;</div> <div>  static final int S21 = 5;<br />   static final int S22 = 9;<br />   static final int S23 = 14;<br />   static final int S24 = 20;</div> <div>  static final int S31 = 4;<br />   static final int S32 = 11;<br />   static final int S33 = 16;<br />   static final int S34 = 23;</div> <div>  static final int S41 = 6;<br />   static final int S42 = 10;<br />   static final int S43 = 15;<br />   static final int S44 = 21;</div> <div>  static final byte[] PADDING =<br />       {<br />        -128, 0, 0, 0, 0, 0, 0, 0, 0,<br />       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br />       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br />       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br />   /* 下面的三个成员是MD5计算q程中用到的3个核心数据,在原始的C实现?br />      被定义到MD5_CTXl构?/div> <div>   */<br />   private long[] state = new long[4]; // state (ABCD)<br />   private long[] count = new long[2]; // number of bits, modulo 2^64 (lsb first)<br />   private byte[] buffer = new byte[64]; // input buffer</div> <div>  /* digestHexStr是MD5的唯一一个公共成员,是最Cơ计结果的<br />       16q制ASCII表示.<br />    */<br />   public String digestHexStr;</div> <div>  /* digest,是最Cơ计结果的2q制内部表示Q表C?28bit的MD5?<br />    */<br />   private byte[] digest = new byte[16];</div> <div>  /*<br />     getMD5ofStr是类MD5最主要的公共方法,入口参数是你惌q行MD5变换的字W串<br />     q回的是变换完的l果Q这个结果是从公共成员digestHexStr取得的.<br />    */<br />   public String getMD5ofStr(String inbuf)<br />   {<br />     md5Init();<br />     md5Update(inbuf.getBytes(), inbuf.length());<br />     md5Final();<br />     digestHexStr = "";<br />     for (int i = 0; i < 16; i++)<br />     {<br />       digestHexStr += byteHEX(digest[i]);<br />     }<br />     return digestHexStr;<br />   }</div> <div>  // q是MD5q个cȝ标准构造函敎ͼJavaBean要求有一个public的ƈ且没有参数的构造函?br />   public MD55()<br />   {<br />     md5Init();</div> <div>    return;<br />   }</div> <div>  /* md5Init是一个初始化函数Q初始化核心变量Q装入标准的qL */<br />   private void md5Init()<br />   {<br />     count[0] = 0L;<br />     count[1] = 0L;<br />     ///* Load magic initialization constants.</div> <div>     state[0] = 0x67452301L;<br />     state[1] = 0xefcdab89L;<br />     state[2] = 0x98badcfeL;<br />     state[3] = 0x10325476L;</div> <div>    return;<br />   }</div> <div>  /* F, G, H ,I ?个基本的MD5函数Q在原始的MD5的C实现中,׃它们?br />            单的位运,可能Z效率的考虑把它们实现成了宏Q在java中,我们把它?br />           实现成了privateҎQ名字保持了原来C中的?*/</div> <div>  private long F(long x, long y, long z)<br />   {<br />     return (x & y) | ( (~x) & z);</div> <div>  }</div> <div>  private long G(long x, long y, long z)<br />   {<br />     return (x & z) | (y & (~z));</div> <div>  }</div> <div>  private long H(long x, long y, long z)<br />   {<br />     return x ^ y ^ z;<br />   }</div> <div>  private long I(long x, long y, long z)<br />   {<br />     return y ^ (x | (~z));<br />   }</div> <div>  /*<br />      FF,GG,HH和II调用F,G,H,Iq行q一步变?br />      FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.<br />      Rotation is separate from addition to prevent recomputation.<br />    */</div> <div>  private long FF(long a, long b, long c, long d, long x, long s,<br />                   long ac)<br />   {<br />     a += F(b, c, d) + x + ac;<br />     a = ( (int) a << s) | ( (int) a >>> (32 - s));<br />     a += b;<br />     return a;<br />   }</div> <div>  private long GG(long a, long b, long c, long d, long x, long s,<br />                   long ac)<br />   {<br />     a += G(b, c, d) + x + ac;<br />     a = ( (int) a << s) | ( (int) a >>> (32 - s));<br />     a += b;<br />     return a;<br />   }</div> <div>  private long HH(long a, long b, long c, long d, long x, long s,<br />                   long ac)<br />   {<br />     a += H(b, c, d) + x + ac;<br />     a = ( (int) a << s) | ( (int) a >>> (32 - s));<br />     a += b;<br />     return a;<br />   }</div> <div>  private long II(long a, long b, long c, long d, long x, long s,<br />                   long ac)<br />   {<br />     a += I(b, c, d) + x + ac;<br />     a = ( (int) a << s) | ( (int) a >>> (32 - s));<br />     a += b;<br />     return a;<br />   }</div> <div>  /*<br />    md5Update是MD5的主计算q程Qinbuf是要变换的字节串Qinputlen是长度,q个<br />    函数由getMD5ofStr调用Q调用之前需要调用md5initQ因此把它设计成private?br />    */<br />   private void md5Update(byte[] inbuf, int inputLen)<br />   {</div> <div>    int i, index, partLen;<br />     byte[] block = new byte[64];<br />     index = (int) (count[0] >>> 3) & 0x3F;<br />     // /* Update number of bits */<br />     if ( (count[0] += (inputLen << 3)) < (inputLen << 3))<br />       count[1]++;<br />     count[1] += (inputLen >>> 29);</div> <div>    partLen = 64 - index;</div> <div>    // Transform as many times as possible.<br />     if (inputLen >= partLen)<br />     {<br />       md5Memcpy(buffer, inbuf, index, 0, partLen);<br />       md5Transform(buffer);</div> <div>      for (i = partLen; i + 63 < inputLen; i += 64)<br />       {</div> <div>        md5Memcpy(block, inbuf, 0, i, 64);<br />         md5Transform(block);<br />       }<br />       index = 0;</div> <div>    }<br />     else</div> <div>      i = 0;</div> <div>    ///* Buffer remaining input */<br />     md5Memcpy(buffer, inbuf, index, i, inputLen - i);</div> <div>  }</div> <div>  /*<br />     md5Final整理和填写输出结?br />    */<br />   private void md5Final()<br />   {<br />     byte[] bits = new byte[8];<br />     int index, padLen;</div> <div>    ///* Save number of bits */<br />     Encode(bits, count, 8);</div> <div>    ///* Pad out to 56 mod 64.<br />      index = (int) (count[0] >>> 3) & 0x3f;<br />     padLen = (index <<br />     md5Update(PADDING, padLen);</div> <div>    ///* Append length (before padding) */<br />     md5Update(bits, 8);</div> <div>    ///* Store state in digest */<br />     Encode(digest, state, 16);</div> <div>  }</div> <div>  /* md5Memcpy是一个内部用的byte数组的块拯函数Q从input的inpos开始把len长度?br />          字节拯到output的outpos位置开?br />    */</div> <div>  private void md5Memcpy(byte[] output, byte[] input,<br />                          int outpos, int inpos, int len)<br />   {<br />     int i;</div> <div>    for (i = 0; i < len; i++)<br />       output[outpos + i] = input[inpos + i];<br />   }</div> <div>  /*<br />      md5Transform是MD5核心变换E序Q有md5Update调用Qblock是分块的原始字节<br />    */<br />   private void md5Transform(byte block[])<br />   {<br />     long a = state[0], b = state[1], c = state[2], d = state[3];<br />     long[] x = new long[16];</div> <div>    Decode(x, block, 64);</div> <div>    /* Round 1 */<br />     a = FF(a, b, c, d, x[0], S11, 0xd76aa478L); /* 1 */<br />     d = FF(d, a, b, c, x[1], S12, 0xe8c7b756L); /* 2 */<br />     c = FF(c, d, a, b, x[2], S13, 0x242070dbL); /* 3 */<br />     b = FF(b, c, d, a, x[3], S14, 0xc1bdceeeL); /* 4 */<br />     a = FF(a, b, c, d, x[4], S11, 0xf57c0fafL); /* 5 */<br />     d = FF(d, a, b, c, x[5], S12, 0x4787c62aL); /* 6 */<br />     c = FF(c, d, a, b, x[6], S13, 0xa8304613L); /* 7 */<br />     b = FF(b, c, d, a, x[7], S14, 0xfd469501L); /* 8 */<br />     a = FF(a, b, c, d, x[8], S11, 0x698098d8L); /* 9 */<br />     d = FF(d, a, b, c, x[9], S12, 0x8b44f7afL); /* 10 */<br />     c = FF(c, d, a, b, x[10], S13, 0xffff5bb1L); /* 11 */<br />     b = FF(b, c, d, a, x[11], S14, 0x895cd7beL); /* 12 */<br />     a = FF(a, b, c, d, x[12], S11, 0x6b901122L); /* 13 */<br />     d = FF(d, a, b, c, x[13], S12, 0xfd987193L); /* 14 */<br />     c = FF(c, d, a, b, x[14], S13, 0xa679438eL); /* 15 */<br />     b = FF(b, c, d, a, x[15], S14, 0x49b40821L); /* 16 */</div> <div>    /* Round 2 */<br />     a = GG(a, b, c, d, x[1], S21, 0xf61e2562L); /* 17 */<br />     d = GG(d, a, b, c, x[6], S22, 0xc040b340L); /* 18 */<br />     c = GG(c, d, a, b, x[11], S23, 0x265e5a51L); /* 19 */<br />     b = GG(b, c, d, a, x[0], S24, 0xe9b6c7aaL); /* 20 */<br />     a = GG(a, b, c, d, x[5], S21, 0xd62f105dL); /* 21 */<br />     d = GG(d, a, b, c, x[10], S22, 0x2441453L); /* 22 */<br />     c = GG(c, d, a, b, x[15], S23, 0xd8a1e681L); /* 23 */<br />     b = GG(b, c, d, a, x[4], S24, 0xe7d3fbc8L); /* 24 */<br />     a = GG(a, b, c, d, x[9], S21, 0x21e1cde6L); /* 25 */<br />     d = GG(d, a, b, c, x[14], S22, 0xc33707d6L); /* 26 */<br />     c = GG(c, d, a, b, x[3], S23, 0xf4d50d87L); /* 27 */<br />     b = GG(b, c, d, a, x[8], S24, 0x455a14edL); /* 28 */<br />     a = GG(a, b, c, d, x[13], S21, 0xa9e3e905L); /* 29 */<br />     d = GG(d, a, b, c, x[2], S22, 0xfcefa3f8L); /* 30 */<br />     c = GG(c, d, a, b, x[7], S23, 0x676f02d9L); /* 31 */<br />     b = GG(b, c, d, a, x[12], S24, 0x8d2a4c8aL); /* 32 */</div> <div>    /* Round 3 */<br />     a = HH(a, b, c, d, x[5], S31, 0xfffa3942L); /* 33 */<br />     d = HH(d, a, b, c, x[8], S32, 0x8771f681L); /* 34 */<br />     c = HH(c, d, a, b, x[11], S33, 0x6d9d6122L); /* 35 */<br />     b = HH(b, c, d, a, x[14], S34, 0xfde5380cL); /* 36 */<br />     a = HH(a, b, c, d, x[1], S31, 0xa4beea44L); /* 37 */<br />     d = HH(d, a, b, c, x[4], S32, 0x4bdecfa9L); /* 38 */<br />     c = HH(c, d, a, b, x[7], S33, 0xf6bb4b60L); /* 39 */<br />     b = HH(b, c, d, a, x[10], S34, 0xbebfbc70L); /* 40 */<br />     a = HH(a, b, c, d, x[13], S31, 0x289b7ec6L); /* 41 */<br />     d = HH(d, a, b, c, x[0], S32, 0xeaa127faL); /* 42 */<br />     c = HH(c, d, a, b, x[3], S33, 0xd4ef3085L); /* 43 */<br />     b = HH(b, c, d, a, x[6], S34, 0x4881d05L); /* 44 */<br />     a = HH(a, b, c, d, x[9], S31, 0xd9d4d039L); /* 45 */<br />     d = HH(d, a, b, c, x[12], S32, 0xe6db99e5L); /* 46 */<br />     c = HH(c, d, a, b, x[15], S33, 0x1fa27cf8L); /* 47 */<br />     b = HH(b, c, d, a, x[2], S34, 0xc4ac5665L); /* 48 */</div> <div>    /* Round 4 */<br />     a = II(a, b, c, d, x[0], S41, 0xf4292244L); /* 49 */<br />     d = II(d, a, b, c, x[7], S42, 0x432aff97L); /* 50 */<br />     c = II(c, d, a, b, x[14], S43, 0xab9423a7L); /* 51 */<br />     b = II(b, c, d, a, x[5], S44, 0xfc93a039L); /* 52 */<br />     a = II(a, b, c, d, x[12], S41, 0x655b59c3L); /* 53 */<br />     d = II(d, a, b, c, x[3], S42, 0x8f0ccc92L); /* 54 */<br />     c = II(c, d, a, b, x[10], S43, 0xffeff47dL); /* 55 */<br />     b = II(b, c, d, a, x[1], S44, 0x85845dd1L); /* 56 */<br />     a = II(a, b, c, d, x[8], S41, 0x6fa87e4fL); /* 57 */<br />     d = II(d, a, b, c, x[15], S42, 0xfe2ce6e0L); /* 58 */<br />     c = II(c, d, a, b, x[6], S43, 0xa3014314L); /* 59 */<br />     b = II(b, c, d, a, x[13], S44, 0x4e0811a1L); /* 60 */<br />     a = II(a, b, c, d, x[4], S41, 0xf7537e82L); /* 61 */<br />     d = II(d, a, b, c, x[11], S42, 0xbd3af235L); /* 62 */<br />     c = II(c, d, a, b, x[2], S43, 0x2ad7d2bbL); /* 63 */<br />     b = II(b, c, d, a, x[9], S44, 0xeb86d391L); /* 64 */</div> <div>    state[0] += a;<br />     state[1] += b;<br />     state[2] += c;<br />     state[3] += d;</div> <div>  }</div> <div>  /*Encode把long数组按顺序拆成byte数组Q因为java的longcd?4bit的,<br />     只拆?2bitQ以适应原始C实现的用?br />    */<br />   private void Encode(byte[] output, long[] input, int len)<br />   {<br />     int i, j;</div> <div>    for (i = 0, j = 0; j < len; i++, j += 4)<br />     {<br />       output[j] = (byte) (input[i] & 0xffL);<br />       output[j + 1] = (byte) ( (input[i] >>> 8) & 0xffL);<br />       output[j + 2] = (byte) ( (input[i] >>> 16) & 0xffL);<br />       output[j + 3] = (byte) ( (input[i] >>> 24) & 0xffL);<br />     }<br />   }</div> <div>  /*Decode把byte数组按顺序合成成long数组Q因为java的longcd?4bit的,<br />     只合成低32bitQ高32bit清零Q以适应原始C实现的用?br />    */<br />   private void Decode(long[] output, byte[] input, int len)<br />   {<br />     int i, j;</div> <div>    for (i = 0, j = 0; j < len; i++, j += 4)<br />       output[i] = b2iu(input[j]) |<br />           (b2iu(input[j + 1]) << 8) |<br />           (b2iu(input[j + 2]) << 16) |<br />           (b2iu(input[j + 3]) << 24);</div> <div>    return;<br />   }</div> <div>  /*<br />     b2iu是我写的一个把byte按照不考虑正负L原则的"升位Q程序,因ؓjava没有unsignedq算<br />    */<br />   public static long b2iu(byte b)<br />   {<br />     return b < 0 ? b &<br />   }</div> <div>  /*byteHEX()Q用来把一个bytecd的数转换成十六进制的ASCII表示Q?br />      因ؓjava中的byte的toString无法实现q一点,我们又没有C语言中的<br />     sprintf(outbuf,"%02X",ib)<br />    */<br />   public static String byteHEX(byte ib)<br />   {<br />     char[] Digit =<br />         {<br />         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',<br />         'A', 'B', 'C', 'D', 'E', 'F'};<br />     char[] ob = new char[2];<br />     ob[0] = Digit[ (ib >>> 4) & 0X0F];<br />     ob[1] = Digit[ib & 0X0F];<br />     String s = new String(ob);<br />     return s;<br />   }</div> <div>  /**<br />    * getMD5ofBye<br />    *<br />    * @param inbuf byte[]<br />    * @return byte[]<br />    */<br />   public byte[] getMD5ofBye(byte[] inbuf)<br />   {<br />     md5Init();<br />     md5Update(inbuf, inbuf.length);<br />     md5Final();<br />     digestHexStr = "";    </div> <div>   for (int i = 0; i < 16; i++)<br />     {<br />       digestHexStr += byteHEX(digest[i]);    </div> <div>    }<br />     return digestHexStr.getBytes();</div> <div>  }<br /> }</div> <div> </div> <div>注:如果有h使用q这个版本的MD5法Q会发现和c的返回g一P是因为cq回的是一个char*的指针,而javaq没有指针,和cE序在内存中的值明昑֯不上Q即使把最后一个方法getMD5ofBye的返回值改成char[]q是达不到目的,而且你会看到c内存中返回值的一个字节是java内存中返回值的两个字节合在一L|举个例子Q比如说c中的q回值是char a[0] ='0x12',而java中返回值则是char b[0] = '0x01',b[1] = '0x02'。要怎么改变q种在内存中q回g同的情况Q你可以把byteHEXҎ完全注释掉,换成下面q个ҎQ?/div> <div>public static byte byteHEX(byte ib)<br />   {<br />         return ib;<br />   }</div> <div>q且把getMD5ofByeҎE作修改Q即ҎQ?br /> public byte[] getMD5ofBye(byte[] inbuf)<br />   {<br />     md5Init();<br />     md5Update(inbuf, inbuf.length);<br />     md5Final();<br />     byte digestHexStr;</div> <div>    byte b[] = new byte[16];//大小Ҏ需要自己定Q?br />     for (int i = 0; i < 16; i++)<br />     {<br />       digestHexStr += byteHEX(digest[i]);</div> <div>      b[i] = digestHexStr <br />     }<br />     return b;</div> <div>  }<br /> </div> <div> <div>l过q样的处理后Qjava版本的MD5法和c版本的MD5法在返回g完全一致了?/div> </div> </div> <img src ="http://www.aygfsteel.com/hllwuxin/aggbug/146571.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hllwuxin/" target="_blank">優雅Qě頽?/a> 2007-09-19 18:56 <a href="http://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146571.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> LookupDispatchAction使用CZhttp://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146445.html優雅Qě頽?/dc:creator>優雅Qě頽?/author>Wed, 19 Sep 2007 05:31:00 GMThttp://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146445.htmlhttp://www.aygfsteel.com/hllwuxin/comments/146445.htmlhttp://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146445.html#Feedback1http://www.aygfsteel.com/hllwuxin/comments/commentRss/146445.htmlhttp://www.aygfsteel.com/hllwuxin/services/trackbacks/146445.html

LookupDispatchAction是DispatchAction的子cR他的作用是多个响应用戯求的ActionҎ攄在同一个Action中?/p>

LookupDispatchAction主要适合用于面中同一个表单具有多个提交按钮,每个提交按钮要递交l不同的Action处理Ҏ的情c?/p>

LookupDispatchAction所执行的方法也是依据页面传递的参数来确定的。而具体执行哪个ActionҎ则是qh交参数的倹{资源文件、定义的映射Ҏ所共同军_的?/p>

具体请参考下面的例题Q?/font>

1、先在JSP面中用如下的提交按钮Q?/strong>

#test.jsp

  <html:form action="/test">
      <!--property属性的g定与ActionMapping中的parameter属性的值相?->
     <html:submit property="method"><bean:message key="button.add"/></html:submit>
     <html:submit property="method"><bean:message key="button.delete"/></html:submit>
    </html:form>

2、在Struts的配|文件中讄paramerter属性:

#struts-config.xml

<!-- parameter属性指面中按钮的名称,其中的name属性中的ActionForm随便Zp我的是空?-->

<action path="/test" type="action.TestLookUpDispatchAction" scope="request" input="test.jsp" parameter="method" ></action>

3、创Z个承LookupDispatchAction的类Q名叫TestLookUpDispatchAction攑֜action包下Q?/strong>

#TestLookUpDispatchAction.java

package action;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.LookupDispatchAction;

public class TestLookUpDispatchAction extends LookupDispatchAction {

 @Override
 protected Map getKeyMethodMap() {// 定义资源文g关键字与ActionҎ之间的映关p?br />      Map<String, String> map = new HashMap<String, String>();
     map.put("button.add", "add");
     map.put("button.delete", "delete");
     return map;
 }

 // 自定义的Ҏ
 public ActionForward add(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  System.out.println("执行addҎ成功");
  return null;
 }

 // 自定义的Ҏ
 public ActionForward delete(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  System.out.println("执行deleteҎ成功");
  return null;
 }
}
4、在资源文g中ؓ每个标记定义昄信息Q?/strong>

message.properties

button.add=add
button.delete=delete

q样OK了,你可以试一下是否能调用到自己想要的Ҏ。有什么问题可以联pL?/p>



]]> Hibernate 参数讄一览表http://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146442.html優雅Qě頽?/dc:creator>優雅Qě頽?/author>Wed, 19 Sep 2007 05:28:00 GMThttp://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146442.htmlhttp://www.aygfsteel.com/hllwuxin/comments/146442.htmlhttp://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146442.html#Feedback0http://www.aygfsteel.com/hllwuxin/comments/commentRss/146442.htmlhttp://www.aygfsteel.com/hllwuxin/services/trackbacks/146442.htmlHibernate配置属?
属性名 用?
Dialectcd允许Hibernate针对特定的关pL据库生成优化的SQL. 取?/span> hibernate.show_sql 输出所有SQL语句到控制台. 有一个另外的选择是把debug?eg. false
true | hibernate.default_schema 在生成的SQL? 给定的schema/tablespace附加于非全限定名的表名上. 取?/span> hibernate.default_catalog 在生成的SQL? 给定的catalog附加于非全限定名的表名上. 取?/span> hibernate.session_factory_name jndi/composite/name
0意味着关闭默认的外连接抓? 取?/span> ?tt>3之间取?
4, 16
SessionFactory打开的所有Session指定默认的实体表现模? 取?/span> dom4j, hibernate.order_updates 强制Hibernate按照被更新数据的主键QؓSQL更新排序。这么做减在高ƈ发系l中事务的死锁?取?/span> false
true | hibernate.use_identifer_rollback 如果开? 在对象被删除时生成的标识属性将被重设ؓ默认? 取?/span> false
false. 取?/span> false

?nbsp;3.4.  Hibernate JDBC和连?connection)属?

属性名 用?
Statement.setFetchSize()).
5?tt>hibernate.jdbc.batch_versioned_data 如果你想让你的JDBC驱动?tt>true(开启这个选项通常是安全的). 同时QHibernateؓ自动版本化的数据使用扚wDML. 默认gؓtrue | hibernate.jdbc.factory_class 选择一个自定义?tt>classname.of.Batcher
true | hibernate.jdbc.use_streams_for_binary 在JDBCdserializable (可序列化) 的类型时使用?stream)(pȝU属?. 取?/span> false
PreparedStatement.getGeneratedKeys() 来获取数据库生成的key(?。需要JDBC3+驱动和JRE1.4+, 如果你的数据库驱动在使用Hibernate的标 识生成器旉到问题,请将此D为false. 默认情况下将使用q接的元数据来判定驱动的能力. 取?/span> hibernate.connection.provider_class 自定?tt>classname.of.ConnectionProvider
java.sql.Connection来了解各个值的具体意义, 但请注意多数数据库都不支持所有的隔离U别. 取?/span> hibernate.connection.autocommit 允许被缓存的JDBCq接开启自动提?autocommit) (不徏?. 取?/span> false
after_statement, q样在每ơJDBC调用后,都会d的释放连? 对于非JTA的连? 使用autoؓJTA和CMT事务{略选择after_transaction. 取?/span> after_transaction | auto
propertyName传递到hibernate.jndi.<propertyName> 属?tt>InitialContextFactory中去.

?nbsp;3.5.  Hibernate~存属?

属性名 用?
CacheProvider的类? 取?/span> hibernate.cache.use_minimal_puts 以频J的L作ؓ代h, 优化二~存来最化写操? 在Hibernate3中,q个讄对的集群~存非常有用, 寚w缓存的实现而言Q默认是开启的. 取?/span> hibernate.cache.use_query_cache 允许查询~存, 个别查询仍然需要被讄为可~存? 取?/span> hibernate.cache.use_second_level_cache 能用来完全禁止用二U缓? 寚w些在cȝ映射定义中指?tt>true|false
QueryCache接口的类? 默认为内建的classname.of.QueryCache
prefix
true|false

?nbsp;3.6.  Hibernate事务属?

属性名 用?
TransactionFactory的类? 用于Hibernate JDBCTransactionFactory). 取?/span> jta.UserTransaction 一个JNDI名字Q被UserTransaction. 取?/span> hibernate.transaction.manager_lookup_class 一?tt>classname.of.TransactionManagerLookup
true | hibernate.transaction.auto_close_session 如果开? session在事务完成后被自动关闭?现在更好的方法是使用自动session上下文管理?span>取?/span> false

?nbsp;3.7.  其他属?

属性名 用?
jta | custom.Class
org.hibernate.hql.ast.ASTQueryTranslatorFactory or hibernate.query.substitutions Hibernate查询中的W号映射到SQL查询中的W号 (W号可能是函数名或常量名?. 取?/span> hibernate.hbm2ddl.auto ?tt>create-drop?在显式关?tt>validate | create | hibernate.cglib.use_reflection_optimizer 开启CGLIB来替代运行时反射机制(pȝU属?. 反射机制有时在除错时比较有用. 注意即关闭q个优化, Hibernateq是需要CGLIB. 你不能在true | hibernate.dialect属性设|成正确?hibernate.dialect)

RDBMS 方言
DB2 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.OracleDialect
Oracle 9i/10g org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SQLServerDialect
SAP DB org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FirebirdDialect

?nbsp;3.9.  Hibernate日志cd

cd 功能
org.hibernate.type 为所有JDBC参数记录日志
org.hibernate.pretty 在session清洗(flush)Ӟ为所有与其关联的实体(最?0?的状态记录日?
org.hibernate.transaction Z务相关的zd记录日志
org.hibernate.hql.AST 在解析查询的时?记录HQL和SQL的AST分析日志
org.hibernate ZQ何Hibernate相关信息做日?(信息量较? 但对查错非常有帮?

?nbsp;3.10. JTA TransactionManagers

Transaction工厂c? 应用E序服务?
JBoss
Weblogic
WebSphere
WebSphere 6
Orion
Resin
JOTM
JOnAS
JRun4
Borland ES


]]> Hibernate包祥?/title><link>http://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146441.html</link><dc:creator>優雅Qě頽?/dc:creator><author>優雅Qě頽?/author><pubDate>Wed, 19 Sep 2007 05:26:00 GMT</pubDate><guid>http://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146441.html</guid><wfw:comment>http://www.aygfsteel.com/hllwuxin/comments/146441.html</wfw:comment><comments>http://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146441.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hllwuxin/comments/commentRss/146441.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hllwuxin/services/trackbacks/146441.html</trackback:ping><description><![CDATA[<div id="wmqeeuq" class="g_t_left c07 content" id="blogtext__fks_sffsilOSxkt7XcaYhGmeVKEcy4pTW4C2"> <p style="text-indent: 2em">Hibernate一共包括了23个jar包,令hD~ؕ。本文将详细讲解Hibernate每个jar包的作用Q便于你在应用中Ҏ自己的需要进行取舍?</p> <p style="text-indent: 2em">  下蝲HibernateQ例?.0.3E_版本Q解压羃Q可以看C个hibernate2.jar和lib目录下有22个jar包: </p> <p style="text-indent: 2em">  hibernate2.jar: </p> <p style="text-indent: 2em">  Hibernate的库Q没有什么可说的Q必M用的jar?</p> <p style="text-indent: 2em">  cglib-asm.jar: </p> <p style="text-indent: 2em">  CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库Q必M用的jar?</p> <p style="text-indent: 2em">  dom4j.jar: </p> <p style="text-indent: 2em">  dom4j是一个Java的XML APIQ类gjdomQ用来读写XML文g的。dom4j是一个非帔R怼U的Java XML APIQ具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的YӞ可以在SourceForge上找到它。在IBM developerWorks上面可以扑ֈ一文章,对主的Java XML APIq行的性能、功能和易用性的评测Qdom4j无论在那个方面都是非常出色的。我早在近两年之前开始用dom4jQ直到现在。如今你可以看到来多的Java软g都在使用dom4j来读写XMLQ特别值得一提的是连Sun的JAXM也在用dom4j。这是必M用的jar包,Hibernate用它来读写配|文件?</p> <p style="text-indent: 2em">  odmg.jar: </p> <p style="text-indent: 2em">  ODMG是一个ORM的规范,Hibernate实现了ODMG规范Q这是一个核心的库,必须使用的jar包?</p> <p style="text-indent: 2em">  commons-collections.jarQ?</p> <p style="text-indent: 2em">  Apache Commons包中的一个,包含了一些Apache开发的集合c,功能比java.util.*强大。必M用的jar包?</p> <p style="text-indent: 2em">  commons-beanutils.jarQ?</p> <p style="text-indent: 2em">  Apache Commons包中的一个,包含了一些Bean工具cȝ。必M用的jar包?</p> <p style="text-indent: 2em">  commons-lang.jar: </p> <p style="text-indent: 2em">  Apache Commons包中的一个,包含了一些数据类型工LQ是java.lang.*的扩展。必M用的jar包?</p> <p style="text-indent: 2em">  commons-logging.jar: </p> <p style="text-indent: 2em">  Apache Commons包中的一个,包含了日志功能,必须使用的jar包。这个包本n包含了一个Simple LoggerQ但是功能很弱。在q行的时候它会先在CLASSPATH找log4jQ如果有Q就使用log4jQ如果没有,找JDK1.4带的java.util.loggingQ如果也找不到就用Simple Logger。commons-logging.jar的出现是一个历史的的遗留的遗憾Q当初Apache极力游说Sun把log4j加入JDK1.4Q然而JDK1.4目组已经接近发布JDK1.4产品的时间了Q因此拒l了Apache的要求,使用自己的java.util.loggingQ这个包的功能比log4j差的很远Q性能也一般?/p> <p style="text-indent: 2em">  后来Apache开发出来了commons-logging.jar用来兼容两个logger。因此用commons-logging.jar写的logE序Q底层的Logger是可以切换的Q你可以选择log4jQjava.util.logging或者它自带的Simple Logger。不q我仍然强烈使用log4jQ因为log4j性能很高Qlog输出信息旉几乎{于System.outQ而处理一条logq_只需?us。你可以在Hibernate的src目录下找到Hibernate已经Z准备好了的log4j的配|文Ӟ你只需要到Apache |站M载log4j可以了。commons-logging.jar也是必须的jar包?</p> <p style="text-indent: 2em">  使用Hibernate必须的jar包就是以上的q几个,剩下的都是可选的?</p> <p style="text-indent: 2em">  ant.jar: </p> <p style="text-indent: 2em">  Ant~译工具的jar包,用来~译Hibernate源代码的。如果你不准备修改和~译Hibernate源代码,那么没有什么用Q可选的jar?</p> <p style="text-indent: 2em">  optional.jarQ?</p> <p style="text-indent: 2em">  Ant的一个辅助包?</p> <p style="text-indent: 2em">  c3p0.jarQ?</p> <p style="text-indent: 2em">  C3PO是一个数据库q接池,Hibernate可以配置Z用C3POq接池。如果你准备用这个连接池Q就需要这个jar包?</p> <p style="text-indent: 2em">  proxool.jarQ?</p> <p style="text-indent: 2em">  也是一个连接池Q同上?</p> <p style="text-indent: 2em">  commons-pool.jar, commons-dbcp.jar: </p> <p style="text-indent: 2em">  DBCP数据库连接池QApache的Jakartal织开发的QTomcat4的连接池也是DBCP?</p> <p style="text-indent: 2em">  实际上Hibernate自己也实C一个非帔R常简单的数据库连接池Q加上上?个,你实际上可以在Hibernate上选择4U不同的数据库连接池Q选择哪一个看个h的偏好,不过DBCP可能更通用一些。另外强调一点,如果在EJB中用HibernateQ一定要用App Server的连接池Q不要用以上4U连接池Q否则容器管理事务不起作用?</p> <p style="text-indent: 2em">  connector.jar: </p> <p style="text-indent: 2em">  JCA 规范Q如果你在App Server上把Hibernate配置为Connector的话Q就需要这个jar。不q实际上一般App Server肯定会带上这个包Q所以实际上是多余的包?</p> <p style="text-indent: 2em">  jaas.jar: </p> <p style="text-indent: 2em">  JAAS是用来进行权限验证的Q已l包含在JDK1.4里面了。所以实际上是多余的包?</p> <p style="text-indent: 2em">  jcs.jarQ?</p> <p style="text-indent: 2em">  如果你准备在Hibernate中用JCS的话Q那么必d括它Q否则就不用?</p> <p style="text-indent: 2em">  jdbc2_0-stdext.jar: </p> <p style="text-indent: 2em">  JDBC2.0的扩展包Q一般来说数据库q接池会用上它。不qApp Server都会带上Q所以也是多余的?</p> <p style="text-indent: 2em">  jta.jarQ?</p> <p style="text-indent: 2em">  JTA规范Q当Hibernate使用JTA的时候需要,不过App Server都会带上Q所以也是多余的?</p> <p style="text-indent: 2em">  junit.jar: </p> <p style="text-indent: 2em">  Junit包,当你q行Hibernate自带的测试代码的时候需要,否则׃用?</p> <p style="text-indent: 2em">  xalan.jar, xerces.jar, xml-apis.jar: </p> <p style="text-indent: 2em">  Xerces是XML解析器,Xalan是格式化器,xml-apis实际上是JAXP。一般App Server都会带上QJDK1.4也包含了解析器,不过不是XercesQ是CrimsonQ效率比较差Q不qHibernate用XML只不q是d配置文gQ性能没什么紧要的Q所以也是多余的?/p> </div> <img src ="http://www.aygfsteel.com/hllwuxin/aggbug/146441.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hllwuxin/" target="_blank">優雅Qě頽?/a> 2007-09-19 13:26 <a href="http://www.aygfsteel.com/hllwuxin/archive/2007/09/19/146441.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">γ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¦</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">׺</a>| <a href="http://" target="_blank">ɫ</a>| <a href="http://" target="_blank">ݳ</a>| <a href="http://" target="_blank">ƽɽ</a>| <a href="http://" target="_blank">ī񹤿</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϳ</a>| <a href="http://" target="_blank">Ӽ</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">â</a>| <a href="http://" target="_blank">г</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˫</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǰ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">۰</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">κ</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">г</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>