﻿<?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/logicgate/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 18 Apr 2026 15:03:41 GMT</lastBuildDate><pubDate>Sat, 18 Apr 2026 15:03:41 GMT</pubDate><ttl>60</ttl><item><title>testtest</title><link>http://www.blogjava.net/logicgate/archive/2009/11/27/303957.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Fri, 27 Nov 2009 10:22:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/11/27/303957.html</guid><description><![CDATA[fdsaf<br />
<img src ="http://www.blogjava.net/logicgate/aggbug/303957.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-11-27 18:22 <a href="http://www.blogjava.net/logicgate/archive/2009/11/27/303957.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 学习笔记：setup recovery catalog</title><link>http://www.blogjava.net/logicgate/archive/2009/03/18/261393.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Wed, 18 Mar 2009 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/03/18/261393.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/logicgate/archive/2009/03/18/261393.html'>阅读全文</a><img src ="http://www.blogjava.net/logicgate/aggbug/261393.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-03-18 22:10 <a href="http://www.blogjava.net/logicgate/archive/2009/03/18/261393.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 常见问题解决方法 (未完，待续。。。)</title><link>http://www.blogjava.net/logicgate/archive/2009/03/17/261394.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Tue, 17 Mar 2009 15:43:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/03/17/261394.html</guid><description><![CDATA[<span style="font-family: Verdana;"><span style="font-size: 12pt;"><span style="font-size: 10pt;">1. Windows下Oracle10g OEM的Host Credentials问题<br />
<br />
问题描述：OEM中很多配置需要用户提供主机的用户名和密码，但即使输入正确，OEM也会出现如下的Validation Error：<br />
Error - Connection to host as user xxx failed: ERROR: Wrong password for user<br />
<br />
解决方法：Start Menu -&gt; Programs -&gt; Administrative Tools -&gt; Local Security Settings -&gt; Local Policies -&gt; User Rights Assignment -&gt; Log on as a batch job，添加相应的用户。<br />
<br />
未完，待续。。。</span></span></span>
<img src ="http://www.blogjava.net/logicgate/aggbug/261394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-03-17 23:43 <a href="http://www.blogjava.net/logicgate/archive/2009/03/17/261394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>behavior of database backup with "plus archivelog"</title><link>http://www.blogjava.net/logicgate/archive/2009/03/17/261395.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Tue, 17 Mar 2009 15:40:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/03/17/261395.html</guid><description><![CDATA[<span style="font-family: Verdana;"><span style="font-size: 10pt;">The RMAN reference document says that when the plus archivelog command is part of a backup script, RMAN will do:<br />
<br />
1. runs an <strong>alter system archive log current</strong> statement<br />
2. runs the <strong>backup archivelog all</strong> command. Note that if backup optimization is enabled, RMAN only backs up logs that have not yet been backed up<br />
3. backs up the files specified in the BACKUP command<br />
4. runs an <strong>alter system archive log current</strong> statement<br />
5. backs up any remaining archived redo logs<br />
<br />
The behavior of "plus archivelog" depends on whether optimization is enabled or disabled in RMAN. If backup optimization is off (which it is by default in RMAN), plus archivelogs will backup all archivelogs. If the archivelog destination is a flash recovery area, your database may keep very old archivelogs. Thus, the backup size will gradually grow and fill up the flash recovery area, since each backup includes all archivelogs in the flash recovery area.<br />
<br />
To avoid backing up archivelogs that have already been backed up when using plus archivelog in a backup script, make sure you enable RMAN optimization.</span></span>
<img src ="http://www.blogjava.net/logicgate/aggbug/261395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-03-17 23:40 <a href="http://www.blogjava.net/logicgate/archive/2009/03/17/261395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基本的RAID介绍</title><link>http://www.blogjava.net/logicgate/archive/2009/03/10/261396.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Tue, 10 Mar 2009 15:24:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/03/10/261396.html</guid><description><![CDATA[
              
                <p>RAID是英文Redundant Array of Independent Disks（独立磁盘冗余阵列），简称磁盘阵列。下面将各个级别的RAID介绍如下。<br />
<br />
<strong>RAID0</strong>
<br />
条带化（Stripe）存储。理论上说，有N个磁盘组成的RAID0是单个磁盘读写速度的N倍。RAID 0连续以位或字节为单位分割数据，并行读/写于多个磁盘上，因此具有很高的数据传输率，但它没有数据冗余，因此并不能算是真正的RAID结构。<br />
<br />
<img src="/upload/attachment/83006/bec4c873-f02f-38f6-9dff-b862aeeef650.jpg" alt="" />
<br />
<br />
<strong>RAID1</strong>
<br />
镜象（Mirror）存储。它是通过磁盘数据镜像实现数据冗余，在成对的独立磁盘上产生互 为备份的数据。当原始数据繁忙时，可直接从镜像拷贝中读取数据，因此RAID 1可以提高读取性能。RAID 1是磁盘阵列中单位成本最高的，但提供了很高的数据安全性和可用性。当一个磁盘失效时，系统可以自动切换到镜像磁盘上读写，而不需要重组失效的数据。<br />
<br />
<img src="/upload/attachment/83010/8c224a3c-6189-3a0f-b6ef-db159d4276e2.jpg" alt="" />
<br />
<br />
<strong>RAID2</strong>
<br />
海明码（Hamming Code）校验条带存储。将数据条块化地分布于不同的硬盘上，条块单位为位或字节，使用称为海明码来提供错误检查及恢复。这种编码技术需要多个磁盘存放检查及恢复信息，使得RAID 2技术实施更复杂，因此在商业环境中很少使用。<br />
<br />
<img src="/upload/attachment/83008/c366e1ab-a0d0-3576-8458-d4ee2b85c886.jpg" alt="" />
<br />
<br />
<strong>RAID3</strong>
<br />
奇偶校验（XOR）条带存储，共享校验盘，数据条带存储单位为字节。它同RAID 2非常类似，都是将数据条块化分布于不同的硬盘上，区别在于RAID 3使用简单的奇偶校验，并用单块磁盘存放奇偶校验信息。如果一块磁盘失效，奇偶盘及其他数据盘可以重新产生数据；如果奇偶盘失效则不影响数据使用。RAID 3对于大量的连续数据可提供很好的传输率，但对于随机数据来说，奇偶盘会成为写操作的瓶颈。<br />
<br />
<img src="/upload/attachment/83011/177e2496-581f-3b9f-831a-c4f67da8fa7d.jpg" alt="" />
<br />
<br />
<strong>RAID4</strong>
<br />
奇偶校验（XOR）条带存储，共享校验盘，数据条带存储单位为块。RAID 4同样也将数据条块化并分布于不同的磁盘上，但条块单位为块或记录。RAID 4使用一块磁盘作为奇偶校验盘，每次写操作都需要访问奇偶盘，这时奇偶校验盘会成为写操作的瓶颈，因此RAID 4在商业环境中也很少使用。<br />
<br />
<img src="/upload/attachment/83014/06322bcc-ac99-3fe5-850b-7b254b241edb.jpg" alt="" />
<br />
<br />
<strong>RAID5</strong>
<br />
奇偶校验（XOR）条带存储，校验数据分布式存储，数据条带存储单位为块。RAID 5不单独指定的奇偶盘，而是在所有磁盘上交叉地存取数据及奇偶校验信息。在RAID 5上，读/写指针可同时对阵列设备进行操作，提供了更高的数据流量。RAID 5更适合于小数据块和随机读写的数据。RAID 3与RAID 5相比，最主要的区别在于RAID 3每进行一次数据传输就需涉及到所有的阵列盘；而对于RAID 5来说，大部分数据传输只对一块磁盘操作，并可进行并行操作。在RAID 5中有“写损失”，即每一次写操作将产生四个实际的读/写操作，其中两次读旧的数据及奇偶信息，两次写新的数据及奇偶信息。<br />
当进行恢复时，比如我们需要需要恢复下图中的A0，这里就必须需要B0、C0、D0加0 parity才能计算并得出A0，进行数据恢复。所以当有两块盘坏掉的时候，整个RAID的数据失效。<br />
<br />
<img src="/upload/attachment/83016/f0d0fa38-3bcc-383f-9014-aca46273f468.jpg" alt="" />
<br />
<br />
<strong>RAID6</strong>
<br />
奇偶校验（XOR）条带存储，两个分布式存储的校验数据，数据条带存储单位为块。与RAID 5相比，RAID 6增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法，数据的可靠性非常高，即使两块磁盘同时失效也不会影响数据的使用。但RAID 6需要分配给奇偶校验信息更大的磁盘空间，相对于RAID 5有更大的“写损失”，因此“写性能”非常差。较差的性能和复杂的实施方式使得RAID 6很少得到实际应用。<br />
<br />
<img src="/upload/attachment/83019/91d9cb3a-9d55-37bd-ba48-4ba9bc29c13a.jpg" alt="" />
<br />
<br />
<strong>RAID7</strong>
<br />
这是一种新的RAID标准，其自身带有智能化实时操作系统和用于存储管理的软件工具，可完全独立于主机运行，不占用主机CPU资源。RAID 7可以看作是一种存储计算机（Storage Computer），它与其他RAID标准有明显区别。</p>
<p> </p>
<p>RAID 7等级是至今为止，理论上性能最高的RAID模式，因为它从组建方式上就已经和以往的方式有了重大的不同。基本成形式见图，以往一个硬盘是一个组成阵列的“柱子”，而在RAID 7中，多个硬盘组成一个“柱子”，它们都有各自的通道，也正因为如此，你可以把这个图分解成一个个硬盘连接在主通道上，只是比以前的等级更为细分了。这样做的好处就是在读/写某一区域的数据时，可以迅速定位，而不会因为以往因单个硬盘的限制同一时间只能访问该数据区的一部分，在RAID 7中，以前的单个硬盘相当于分割成多个独立的硬盘，有自己的读写通道。<br />
<br />
<img src="/upload/attachment/83021/b05138da-5f50-3e2e-b671-e0c4d14f212a.jpg" alt="" />
<br />
<br />
<strong>RAID10和RAID01的比较</strong>
<br />
- RAID10是先做镜象，然后再做条带。<br />
- RAID01则是先做条带，然后再做镜象。</p>
<p>比如以6个盘为例，RAID10就是先将盘分成3组镜象，然后再对这3个RAID1做条带。RAID01则是先利用3块盘做RAID0，然后将另外3块盘做为RAID0的镜象。下面以4块盘为例来介绍安全性方面的差别：</p>
<p> </p>
<p>1、RAID10的情况 <br />
这种情况中，我们假设当DISK0损坏时，在剩下的3块盘中，只有当DISK1一个盘发生故障时，才会导致整个RAID失效，我们可简单计算故障率为1/3。</p>
<p><br />
<img src="/upload/attachment/83023/87cab96f-d9e5-3841-b03a-1d1033dd6cca.jpg" alt="" />
</p>
<p> </p>
<p>2、RAID01的情况<br />
这种情况下，我们仍然假设DISK0损坏，这时左边的条带将无法读取。在剩下的3块盘中，只要DISK2，DISK3两个盘中任何一个损坏，都会导致整个RAID失效，我们可简单计算故障率为2/3。</p>
<p><br />
<img src="/upload/attachment/83025/bf75d4fb-5d9c-3742-9194-e702daae3b8a.jpg" alt="" />
</p>
<p> </p>
<p>因此RAID10比RAID01在安全性方面要强。<br />
<br />
从数据存储的逻辑位置来看，在正常的情况下RAID01和RAID10是完全一样的，而且每一个读写操作所产生的IO数量也是一样的，所以在读写性能上两者没什么区别。而当有磁盘出现故障时，比如前面假设的DISK0损坏时，我们也可以发现，这两种情况下，在读的性能上面也将不同，RAID10的读性能将优于RAID01。</p>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/346950#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-03-10 23:24 <a href="http://www.blogjava.net/logicgate/archive/2009/03/10/261396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 学习笔记：Backup &amp; Recovery 常用命令</title><link>http://www.blogjava.net/logicgate/archive/2009/03/06/261397.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Fri, 06 Mar 2009 12:50:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/03/06/261397.html</guid><description><![CDATA[
              
                <p> </p>
<p><strong>1</strong>
. set database to archivelog mode</p>
<pre name="code" class="sql">SQL&gt; shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL&gt; startup mount;
ORACLE instance started.

Total System Global Area  251658240 bytes
Fixed Size                  1248356 bytes
Variable Size              83887004 bytes
Database Buffers          159383552 bytes
Redo Buffers                7139328 bytes
Database mounted.

SQL&gt; alter database archivelog;
Database altered.

SQL&gt; alter database open;
Database altered.

SQL&gt; archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     1319
Next log sequence to archive   1321
Current log sequence           1321
</pre>
<p> </p>
<p><strong>2</strong>
. define flash recovery area</p>
<pre name="code" class="sql">SQL&gt; alter system set db_recovery_file_dest='D:\oracle\flash_recovery_area' scope=both;
System altered.
SQL&gt; alter system set db_recovery_file_dest_size=15G scope=both;
System altered.</pre>
<p> </p>
<p>Oracle will use Oracle Managed File (OMF) for the flash recovery area. The free space in recovery area can be checked using OEM: All Metrics -&gt; Recovery Area, or query vflash_recovery_area_usage view. To get more free space, you can use the following command to backup and then delete all the archived log files. <br />
<a>
</a>
</p>
<pre name="code" class="sql">RMAN&gt; backup archivelog all delete all input; </pre>
<p> </p>
<p><strong>3</strong>
. define multiple archived log destinations</p>
<pre name="code" class="sql">SQL&gt; alter system set log_archive_dest_1='location=use_db_recovery_file_dest' scope=both;
System altered.
SQL&gt; alter system set log_archive_dest_2='location=D:\oracle\archivelog_area1' scope=both;
System altered.</pre>
<p> </p>
<p><strong>4</strong>
. CONTROL_FILE_RECORD_KEEP_TIME</p>
<p> </p>
<p>This parameter specify the minimum days the RMAN information is stored in the control file before overwritten. The default value is 7 days. When using catalog, a smaller value should be chosen.</p>
<p> </p>
<p><strong>5</strong>
. starting RMAN</p>
<pre name="code" class="sql">rman target /
rman target / nocatalog
rman target sys/change_on_install@orcl
rman target sys/change_on_install@orcl catalog rman/rman@catdb
rman target sys/change_on_install log=xxx.log append
rman target sys/change_on_install cmdfile=xxx.rcv</pre>
<p> </p>
<p><strong>6</strong>
. RMAN persistent settings</p>
<p> </p>
<p>6.1 display settings</p>
<pre name="code" class="sql">RMAN&gt; show all;
RMAN&gt; show controlfile autobackup;
RMAN&gt; show retention policy;</pre>
<p> </p>
<p>6.2 configure settings</p>
<pre name="code" class="sql">RMAN&gt; configure retention policy to recovery window of 7 days;
RMAN&gt; configure backup optimization on;
RMAN&gt; configure default device type to disk;
RMAN&gt; configure controlfile autobackup on;
RMAN&gt; configure controlfile autobackup format for device type disk to '%F';
RMAN&gt; configure device type disk backup type to compressed backupset parallelism 1;
RMAN&gt; configure datafile backup copies for device type disk to 1;
RMAN&gt; configure archivelog backup copies for device type disk to 1;
RMAN&gt; configure channel device type disk maxpiecesize 1 G;
RMAN&gt; configure maxsetsize to unlimited;
RMAN&gt; configure encryption for database off;
RMAN&gt; configure encryption algorithm 'AES128';
RMAN&gt; configure archivelog deletion policy to none;
RMAN&gt; configure snapshot controlfile name to 'D:\oracle\flash_recovery_area\sncfepcit.ora';</pre>
<p> </p>
<p>If the control file autobackup is enabled, then RMAN automatically backs up the control file and spfile in one of two circumstances:<br />
- A successful backup is recorded in the RMAN repository<br />
- A structural change to the database affects the contents of the control file</p>
<p>Control file autobackups are stored in the flash recovery area, unless otherwise specified.</p>
<p> </p>
<p>6.3 reset settings to default value</p>
<pre name="code" class="sql">RMAN&gt; configure controlfile autobackup clear;
RMAN&gt; configure retention policy clear;</pre>
<p> </p>
<p>7. RMAN commands</p>
<p> </p>
<p>7.1 backup commands</p>
<pre name="code" class="sql">RMAN&gt; backup database;
RMAN&gt; backup copy of database;
RMAN&gt; backup as compressed backupset database;
RMAN&gt; backup as backupset format ''/BACKUP/df_%d_%s_%p.bus' tablespace users;
RMAN&gt; backup database plus archivelog delete all input;
RMAN&gt; backup archivelog from sequence=234 delete input;
RMAN&gt; backup tag='month_full_backup' datafile 1, 2, 3, 4;
RMAN&gt; backup incremental level 0 database;
RMAN&gt; backup incremental level 1 database;
RMAN&gt; backup incremental level 1 cumulative database;

RMAN&gt; run {
2&gt; allocate channel c1 device type sbt;
3&gt; allocate channel c2 device type sbt;
4&gt; allocate channel c3 device type sbt;
5&gt; backup incremental level = 0
6&gt; format '/disk1/backup/df_%d_%s_%p.bak'
7&gt; (datafile 1,4,5 channel c1)
8&gt; (datafile 2,3,9 channel c2)
9&gt; (datafile 6,7,8 channel c3);
10&gt; alter system archive log current;
11&gt; }
</pre>
<p> </p>
<p>7.2 block change tracking</p>
<pre name="code" class="sql">SQL&gt; alter database enable block change tracking using file ''/mydir/rman_change_track.f' reuse;
SQL&gt; alter database disable block change tracking;</pre>
<p> </p>
<p>7.3 incrementally updating backups </p>
<pre name="code" class="sql">RMAN&gt; backup as copy incremental level 0 datafile 1 tag 'basecopy';
RMAN&gt; backup incremental level 1 for recover of copy with tag 'basecopy' datafile 1;
RMAN&gt; recover copy of datafile 1 with tag 'basecopy';</pre>
<p> </p>
<p>7.4 list commands</p>
<pre name="code" class="sql">RMAN&gt; list backup of database summary;
RMAN&gt; list backup of tablespace system summary;
RMAN&gt; list backup of datafile {n|'file_name'} summary;
RMAN&gt; list backup of database by {file|backup};
RMAN&gt; list copy of database;
</pre>
<p> </p>
<p>7.5 report commands</p>
<pre name="code" class="sql">RMAN&gt; report schema;
RMAN&gt; report need backup incremental 0 database;
RMAN&gt; report need backup days 3;
RMAN&gt; report need backup redundancy 2;
RMAN&gt; report need backup recovery window of 3 days;
RMAN&gt; report obsolete redundancy 2;
RMAN&gt; report obsolete recovery window of 3 days;</pre>
<p> </p>
<p>7.6 delete commands</p>
<pre name="code" class="java">RMAN&gt; delete noprompt expired copy;
RMAN&gt; delete noprompt expired backup;
RMAN&gt; delete noprompt obsolete;
RMAN&gt; delete obsolete redundancy 2;
RMAN&gt; delete obsolete recovery window of 3 days;
RMAN&gt; delete backupset 4;</pre>
<p> </p>
<p>8. RMAN v$ views</p>
<pre name="code" class="java">V$ARCHIVED_LOG
V$BACKUP_CORRUPTION
V$BACKUP_DEVICE
V$BACKUP_FILES
V$BACKUP_PIECE
V$BACKUP_REDOLOG
V$BACKUP_SET
V$BACKUP_SPFILE
V$COPY_CORRUPTION
V$RMAN_CONFIGURATION</pre>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/344903#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-03-06 20:50 <a href="http://www.blogjava.net/logicgate/archive/2009/03/06/261397.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 组合数算法</title><link>http://www.blogjava.net/logicgate/archive/2009/03/05/261398.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Wed, 04 Mar 2009 16:13:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/03/05/261398.html</guid><description><![CDATA[
              
                <p>今天工作中遇到一个问题需要一个组合数算法。google了一会，没有找到合适的，于是就自己写了一个。主要是用了一个递归算法。发出来分享一下，有用的着的就拿去，觉得写得不好的就拍点砖，提点建议。</p>
<p> </p>
<pre name="code" class="java">import java.util.*;

public class Combination
{
	public static void main(String[] args)
	{
		Vector testData = new Vector(Arrays.asList(1, 2, 3, 4, 5, 6));
		Vector results = getAllCombinations(testData);
		for(int i=0; i&lt;results.size(); i++)
			System.out.println(results.elementAt(i));
	}

	public static Vector getAllCombinations(Vector data)
	{
		Vector allCombinations = new Vector();
		for(int i=1; i&lt;=data.size(); i++)
		{
			Vector initialCombination = new Vector();
			allCombinations.addAll(getAllCombinations(data, i));
		}

		return allCombinations;
	}

	public static Vector getAllCombinations(Vector data, int length)
	{
		Vector allCombinations = new Vector();
		Vector initialCombination = new Vector();
		combination(allCombinations, data, initialCombination, length);
		return allCombinations;
	}

	private static void combination(Vector allCombinations, Vector data, 
		Vector initialCombination, int length)
	{
		if(length == 1)
		{
			for(int i=0; i&lt;data.size(); i++)
			{
				Vector newCombination = new Vector(initialCombination);
				newCombination.add(data.elementAt(i));
				allCombinations.add(newCombination);
			}
		}

		if(length &gt; 1)
		{
			for(int i=0; i&lt;data.size(); i++)
			{
				Vector newCombination = new Vector(initialCombination);
				newCombination.add(data.elementAt(i));

				Vector newData = new Vector(data);
				for(int j=0; j&lt;=i; j++)
					newData.remove(data.elementAt(j));

				combination(allCombinations, newData, newCombination, length - 1);
			}
		}
	}
}</pre>
<p> </p>
<p>测试结果：</p>
<pre name="code" class="java">[1]
[2]
[3]
[4]
[5]
[6]
[1, 2]
[1, 3]
[1, 4]
[1, 5]
[1, 6]
[2, 3]
[2, 4]
[2, 5]
[2, 6]
[3, 4]
[3, 5]
[3, 6]
[4, 5]
[4, 6]
[5, 6]
[1, 2, 3]
[1, 2, 4]
[1, 2, 5]
[1, 2, 6]
[1, 3, 4]
[1, 3, 5]
[1, 3, 6]
[1, 4, 5]
[1, 4, 6]
[1, 5, 6]
[2, 3, 4]
[2, 3, 5]
[2, 3, 6]
[2, 4, 5]
[2, 4, 6]
[2, 5, 6]
[3, 4, 5]
[3, 4, 6]
[3, 5, 6]
[4, 5, 6]
[1, 2, 3, 4]
[1, 2, 3, 5]
[1, 2, 3, 6]
[1, 2, 4, 5]
[1, 2, 4, 6]
[1, 2, 5, 6]
[1, 3, 4, 5]
[1, 3, 4, 6]
[1, 3, 5, 6]
[1, 4, 5, 6]
[2, 3, 4, 5]
[2, 3, 4, 6]
[2, 3, 5, 6]
[2, 4, 5, 6]
[3, 4, 5, 6]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 6]
[1, 2, 3, 5, 6]
[1, 2, 4, 5, 6]
[1, 3, 4, 5, 6]
[2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]</pre>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/343282#comments" style="color:red;">已有 <strong>3</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261398.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-03-05 00:13 <a href="http://www.blogjava.net/logicgate/archive/2009/03/05/261398.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>晒一晒我的技术书籍</title><link>http://www.blogjava.net/logicgate/archive/2009/02/23/261399.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Mon, 23 Feb 2009 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/02/23/261399.html</guid><description><![CDATA[
              
                <p>工作5年多了，和工作有关的技术书买了一堆。大概可以分为以下五类：</p>
<p> </p>
<p>1. Core Java</p>
<p>2. J2EE </p>
<p>3. Software Engineer &amp; Design Pattern</p>
<p>4. Database</p>
<p>5. Client Technology</p>
<p> </p>
<p>其实很多书都没有时间细看，我无法用有限的生命去看无限的书。但看到喜欢的书，还是忍不住去买。可能买书也是会上瘾的吧。喜欢一卷在手的感觉，车上，厕上，床上，都可以翻几页。这种感觉是电子书籍和文档无法代替的。</p>
<p> </p>
<p>好了，废话不多说，直接上PP。大家觉得垃圾的话，尽管拍。觉得好的话，就投个精华吧。</p>
<p> </p>
<p>1. Core Java</p>
<p><br />
<img src="/upload/attachment/78056/e5282747-610a-3afd-9e0e-ba9243d99c1c.jpg" alt="" /></p>
<p> </p>
<p>2. J2EE</p>
<p><br />
<img src="/upload/attachment/78060/47a53af7-b4dc-35ef-90a6-bc3b43bb0a8f.jpg" alt="" /></p>
<p> </p>
<p>3. Software Engineer &amp; Design Pattern</p>
<p><br />
<img src="/upload/attachment/78062/5900fe62-a8a5-35a0-9a3f-d026d6842e92.jpg" alt="" /></p>
<p> </p>
<p>4. Database</p>
<p><br />
<img src="/upload/attachment/78058/31f3ec49-4d8a-3f8f-80ef-453ea9eb1793.jpg" alt="" />
</p>
<p> </p>
<p>5. Client Technology</p>
<p><br />
<img src="/upload/attachment/78067/d39e42f2-f645-37d9-b5f6-b864f7f43728.jpg" alt="" /></p>
<p> </p>
<p>6. Others</p>
<p><br />
<img src="/upload/attachment/78065/99a75d00-3cf0-3be7-8d62-50eb007fa6bf.jpg" alt="" />
<br /></p>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/337610#comments" style="color:red;">已有 <strong>96</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-02-23 22:41 <a href="http://www.blogjava.net/logicgate/archive/2009/02/23/261399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 学习笔记：重建Control File</title><link>http://www.blogjava.net/logicgate/archive/2009/02/22/261400.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Sun, 22 Feb 2009 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/02/22/261400.html</guid><description><![CDATA[
              
                <p>1. 以sysdba登陆，导出控制文件</p>
<pre name="code" class="sql">alter database backup controlfile to trace;</pre>
<p> </p>
<p>2. 在%oracle_base%\oradata\%oracle_sid%\udump下找到刚刚创建的trc文件，打开它。可以看到里面包含了两段sql脚本。</p>
<pre name="code" class="sql">-- Below are two sets of SQL statements, each of which creates a new
-- control file and uses it to open the database. The first set opens
-- the database with the NORESETLOGS option and should be used only if
-- the current versions of all online logs are available. The second
-- set opens the database with the RESETLOGS option and should be used
-- if online logs are unavailable.
-- The appropriate set of statements can be copied from the trace into
-- a script file, edited as necessary, and executed when there is a
-- need to re-create the control file.
--
--     Set #1. NORESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- Additional logs may be required for media recovery of offline
-- Use this only if the current versions of all online logs are
-- available.
-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
--  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "EPCIT" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 454
LOGFILE
  GROUP 1 'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITREDO01.LOG'  SIZE 10M,
  GROUP 2 'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITREDO02.LOG'  SIZE 10M,
  GROUP 3 'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITREDO03.LOG'  SIZE 10M
-- STANDBY LOGFILE
DATAFILE
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITSYSTEM01.DBF',
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITUNDOTBS01.DBF',
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITSYSAUX01.DBF',
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITBLOBS01.DBF',
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITINDEX01.DBF',
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITUSERS01.DBF',
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITWCAUDIT01.DBF'
CHARACTER SET UTF8
;
-- Configure RMAN configuration record 1
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CHANNEL','DEVICE TYPE DISK MAXPIECESIZE 100 M');
-- Configure RMAN configuration record 3
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');
-- Configure RMAN configuration record 4
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('BACKUP OPTIMIZATION','ON');
-- Configure RMAN configuration record 5
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('DEVICE TYPE','DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1');
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE 'D:\ORACLE\FLASH_RECOVERY_AREA\EPCIT\ARCHIVELOG\2009_02_22\O1_MF_1_1_%U_.ARC';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE
-- All logs need archiving and a log switch is needed.
ALTER SYSTEM ARCHIVE LOG ALL;
-- Database can now be opened normally.
ALTER DATABASE OPEN;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITTEMP01.DBF'
     SIZE 209715200  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
-- End of tempfile additions.
--
--     Set #2. RESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- The contents of online logs will be lost and all backups will
-- be invalidated. Use this only if online logs are damaged.
-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
--  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "EPCIT" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 454
LOGFILE
  GROUP 1 'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITREDO01.LOG'  SIZE 10M,
  GROUP 2 'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITREDO02.LOG'  SIZE 10M,
  GROUP 3 'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITREDO03.LOG'  SIZE 10M
-- STANDBY LOGFILE
DATAFILE
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITSYSTEM01.DBF',
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITUNDOTBS01.DBF',
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITSYSAUX01.DBF',
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITBLOBS01.DBF',
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITINDEX01.DBF',
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITUSERS01.DBF',
  'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITWCAUDIT01.DBF'
CHARACTER SET UTF8
;
-- Configure RMAN configuration record 1
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CHANNEL','DEVICE TYPE DISK MAXPIECESIZE 100 M');
-- Configure RMAN configuration record 3
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');
-- Configure RMAN configuration record 4
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('BACKUP OPTIMIZATION','ON');
-- Configure RMAN configuration record 5
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('DEVICE TYPE','DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1');
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE 'D:\ORACLE\FLASH_RECOVERY_AREA\EPCIT\ARCHIVELOG\2009_02_22\O1_MF_1_1_%U_.ARC';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE USING BACKUP CONTROLFILE
-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\PTC\OCU_8.0\ORADATA\EPCIT\EPCITTEMP01.DBF'
     SIZE 209715200  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
-- End of tempfile additions.</pre>
<p> </p>
<p>第一段sql是在所有online redolog没有丢失，以noresetlogs选项打开数据库的情况下使用的。第二段则是在丢失了online redolog需要resetlogs的情况下使用。</p>
<p> </p>
<p>3. 把"Set #1. NORESETLOGS case"下的sql拷贝出来，存为reCreateCtl.sql</p>
<p> </p>
<p>4. 以sysdba登陆，shutdown immediate。然后删除所有控制文件。再运行reCreateCtl.sql。</p>
<pre name="code" class="sql">SQL&gt; @reCreateCtl
ORACLE instance started.

Total System Global Area  251658240 bytes
Fixed Size                  1248356 bytes
Variable Size              83887004 bytes
Database Buffers          159383552 bytes
Redo Buffers                7139328 bytes

Control file created.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.

ORA-00283: recovery session canceled due to errors
ORA-00264: no recovery required

System altered.
Database altered.
Tablespace altered.</pre>
<p> </p>
<p>5. 成功创建了控制文件，数据库也正常打开。再没有使用Recovery Catalog的情况下，RMAN的备份资料是存在控制文件中的，重建控制文件会导致丢失备份资料库。</p>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/336705#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-02-22 12:02 <a href="http://www.blogjava.net/logicgate/archive/2009/02/22/261400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 学习笔记：SYSDBA登陆权限问题</title><link>http://www.blogjava.net/logicgate/archive/2009/02/18/261401.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Wed, 18 Feb 2009 15:54:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/02/18/261401.html</guid><description><![CDATA[
              
                <p>本文环境配置：Oracle10gR2，Windows XP</p>
<p> </p>
<p>Oracle的用户信息一般来说是保存在数据字典里的，所以常规用户在Oracle数据库没有启动的时候是无法登陆的。但有两类用户例外，这就是具有sysdba或者sysoper权限的用户。Oracle sysdba或者sysoper用户的登陆有两种方式：一是通过OS认证，二是通过密码文件验证。</p>
<p> </p>
<p>究竟使用哪一种验证方式以及能否成功登陆取决于三个方面的因素：</p>
<p>1. sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES的设置</p>
<p>2. 参数文件中REMOTE_LOGIN_PASSWORDFILE的设置</p>
<p>3. 密码文件 PWD%sid%.ora</p>
<p> </p>
<p>Oracle进行权限验证的大致顺序如下：</p>
<p>1. 根据SQLNET.AUTHENTICATION_SERVICES的值决定是进行os验证还是密码文件验证。</p>
<p>2. 如果是os验证，根据当前用户的用户组判断是否具有sysdba权限。如果os验证失败，则进行密码文件验证。</p>
<p>2. 如果是密码文件验证，REMOTE_LOGIN_PASSWORDFILE的值以及密码文件是否存在决定了验证是否成功。</p>
<p> </p>
<p><strong>1. OS</strong>
<strong>验</strong>
<strong>证</strong>

</p>
<p> </p>
<p>要启用os验证，就必须在qlnet.ora中设置SQLNET.AUTHENTICATION_SERVICES=(NTS)，然后在Windows中建立ora_dba用户组，把相关用户加入到这个组中（e.g., administrator），这样administrator就可以在不用提供用户名和密码（或者提供任意的用户名和密码）的情况下以sysdba身份本地登陆。因为操作系统已经代替Oracle进行了验证。</p>
<p> </p>
<p>测试一：ora_dba用户本地登陆</p>
<pre name="code" class="sql">C:\&gt;sqlplus / as sysdba
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
SQL&gt;

C:\&gt;sqlplus wrong_user/wrong_password as sysdba
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
SQL&gt;
</pre>
<p> </p>
<p>测试二：非ora_dba用户本地登陆</p>
<pre name="code" class="java">C:\&gt;sqlplus / as sysdba
ERROR:
ORA-01031: insufficient privileges
Enter user-name:

C:\&gt;sqlplus wrong_user/wrong_password sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:

C:\&gt;sqlplus sys/change_on_install as sysdba
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
SQL&gt;</pre>
 
<p><strong>2. 密码文件验证</strong>

</p>
<p> </p>
<p>密码文件包含了被授予sysdba和sysoper权限的用户的用户名和密码。这是一个加密文件，一般来说存放在%oracle_home%/database目录下，文件名为PWD%sid%.ora。</p>
<p> </p>
<p>如果要使用密码文件验证，则把sqlnet.ora改为SQLNET.AUTHENTICATION_SERVICES=none，或者从sqlnet.ora中删除SQLNET.AUTHENTICATION_SERVICES。同上匿名登陆sqlplus会失败，给出用户名和密码就可以成功登陆。</p>
<pre name="code" class="sql">C:\&gt;sqlplus / as sysdba
ERROR:
ORA-01031: insufficient privileges
Enter user-name:

C:\&gt;sqlplus sys/change_on_install as sysdba
Connected to an idle instance.
idle&gt;</pre>
<p> </p>
<p>测试一：删除密码文件。使用用户名和密码登陆，失败！</p>
<pre name="code" class="sql">C:\&gt;sqlplus sys/change_on_install as sysdba
ERROR:
ORA-01031: insufficient privileges
Enter user-name:</pre>
<p> </p>
<p>测试二：恢复密码文件，设置REMOTE_LOGIN_PASSWORDFILE=none。使用用户名和密码登陆，失败！</p>
<pre name="code" class="sql">SQL&gt; alter system set remote_login_passwordfile=none scope=spfile;
System altered.

C:\&gt;sqlplus sys/change_on_install as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:</pre>
<p> </p>
<p>测试三：恢复密码文件，设置REMOTE_LOGIN_PASSWORDFILE为EXCLUSIVE或者SHARED。使用用户名和密码登陆，成功！</p>
<pre name="code" class="sql">SQL&gt; alter system set remote_login_passwordfile=exclusive scope=spfile;
System altered.

C:\&gt;sqlplus sys/change_on_install as sysdba
Connected to an idle instance.
SQL&gt;</pre>
<p> </p>
<p><strong>3. 密码文件</strong>

</p>
<p> </p>
<p>查看具有sysdba或者sysoper权限的用户：</p>
<pre name="code" class="sql">SQL&gt; select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
------------------------------  -------  -------
SYS                                  TRUE   TRUE
</pre>
<p> </p>
<p>每次使用grant sysdba/sysoper授予新用户特殊权限或是alter user命令修改拥有sysdba/sysoper权限的用户密码的时候，Oracle都会自动的同步密码文件，这样保证在数据库没有打开的情况拥有特殊权限的用户能正常的登陆数据库以进行管理操作。</p>
<pre name="code" class="sql">SQL&gt; grant sysdba to logicgate;
Grant succeeded.

SQL&gt; select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
------------------------------- -------- --------
SYS                                  TRUE   TRUE
LOGICGATE                      TRUE   FALSE</pre>
<p> </p>
<p>使用orapwd命令可以重建密码文件。</p>
<pre name="code" class="java">C:\&gt;orapwd
Usage: orapwd file=&lt;fname&gt; password=&lt;password&gt; entries=&lt;users&gt; force=&lt;y/n&gt;
  where
    file - name of password file (mandatory),
    password - password for SYS (mandatory),
    entries - maximum number of distinct DBA (optional),
    force - whether to overwrite existing file (optional)</pre>
<p> </p>
<p>其中文件名和密码是必需的。entries设置了密码文件可包含的dba用户的最大数目。force定义了是否覆盖当前文件。重建密码文件会清除系统内除了sys用户以外所有sysdba用户的密码。必须使用grant sysdba同步密码文件。</p>
<pre name="code" class="java">C:\&gt;orapwd file=%oracle_home%\database\PWDepcit.ora password=temp entries=20 force=y;

C:\&gt;sqlplus sys/temp as sysdba
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options

SQL&gt; select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
------------------------------- -------- --------
SYS                                  TRUE   TRUE</pre>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/335179#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-02-18 23:54 <a href="http://www.blogjava.net/logicgate/archive/2009/02/18/261401.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TrueOrders Data Export &amp; Import</title><link>http://www.blogjava.net/logicgate/archive/2009/02/16/261402.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Mon, 16 Feb 2009 14:52:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/02/16/261402.html</guid><description><![CDATA[
              
                <p><strong>Data Export on Source Server</strong>
<br />
<br />
1. Open Windchil Shell and login to SQL Plus as user OB80<br />
<br />
2. Execute the following SQL statement:</p>
<pre name="code" class="sql">select * from nls_database_parameters t where t.parameter in ('NLS_LANGUAGE', 'NLS_TERRITORY', 'NLS_CHARACTERSET');</pre>
<p> </p>
<p>The result in the testing system is:<br />
<span style="color: #ff0000;">NLS_LANGUAGE: AMERICAN<br />
NLS_TERRITORY: AMERICA<br />
NLS_CHARACTERSET: UTF8</span>
</p>
<p> </p>
<p>3. Exit SQL Plus<br />
<br />
4. Execute the following command:</p>
<pre name="code" class="sql">set NLS_LANG=AMERICAN_AMERICA.UTF8</pre>
 
<p>5. Execute the following command to export TrueOrders data:</p>
<pre name="code" class="sql">exp ob80/ob80 file=epcit.dmp log=epcit_exp.log compress=y;</pre>
<p> </p>
<p>
Please make sure Export terminated successfully without warning.<br />
<br />
6. TrueOrders data is exported to epcit.dmp located under the directory in which you run the export command (in this case, it’s D:\ptc\Windchill_8.0\db\sql).<br />
<br />
7. Copy epcit.dmp to a directory on target server (e.g., D:\ptc\Windchill_8.0\db\sql).</p>
<p> </p>
<p><strong>Data Import on Source Server</strong>
<br />
<br />
1. Open Windchil Shell and login to SQL Plus as SYSDBA<br />
<br />
2. Drop user OB80</p>
<pre name="code" class="sql">drop user ob80 cascade;</pre>
<p> </p>
<p>The user ob80 is dropped, including all the objects (table, index, view, procedure...) belong to ob80. It may take several minutes.<br />
<br />
3. Re-create user OB80</p>
<pre name="code" class="sql">@create_user</pre>
<p><br />
Enter value for user: ob80<br />
Enter value for temporary_tablespace: temp<br />
Enter value for userdata_tablespace: users<br />
<br />
4. Repeat Steps 2, 3, 4 from the Data Export phase<br />
<br />
5. From the directory where you put the epcit.dmp (e.g., D:\ptc\Windchill_8.0\db\sql), execute the following command to import TrueOrders data:</p>
<pre name="code" class="sql">imp ob80/ob80 file=epcit.dmp log=epcit_imp.log full=y commit=y;</pre>
<p><br />
Please make sure Import terminated successfully without warning.<br />
<br />
6. Data migration completes.</p>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/333830#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-02-16 22:52 <a href="http://www.blogjava.net/logicgate/archive/2009/02/16/261402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2009年三大学习计划</title><link>http://www.blogjava.net/logicgate/archive/2009/02/14/261403.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Sat, 14 Feb 2009 13:30:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/02/14/261403.html</guid><description><![CDATA[
              
                <p>根据工作需要及个人兴趣，本人制定了2009年的学习计划。</p>
<p> </p>
<p>1。EJB 3.0</p>
<p>虽然公司不用EJB，但无可否认EJB仍然是软件公司应用最广泛的技术之一。根据前一阵子面试的经历，新加坡中大型软件公司大部分使用的还是EJB。如果有一天公司抛弃Windchill的话，EJB 3.0将会是我的首选建议。</p>
<p> </p>
<p>2。Web Services</p>
<p>不管它是真的有用，还是忽悠人，总之越来越多的公司开始考虑Web Services。为了自己的竞争力，学之！</p>
<p> </p>
<p>3。Oracle Database</p>
<p>基于当前及未来的工作需要，对Oracle的学习主要侧重于三个方面：</p>
<p>- PL/SQL</p>
<p>- Performance Tuning</p>
<p>- Backup &amp; Recovery</p>
<p> </p>
<p>希望明年的今日，我可以制定一个全新的学习计划！</p>
<p> </p>
<p>希望也听听大家的学习计划！于大家共勉！</p>
<p> </p>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/332843#comments" style="color:red;">已有 <strong>41</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261403.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-02-14 21:30 <a href="http://www.blogjava.net/logicgate/archive/2009/02/14/261403.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB 3 学习笔记：GlassFish 入门</title><link>http://www.blogjava.net/logicgate/archive/2009/02/11/261404.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Wed, 11 Feb 2009 10:50:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/02/11/261404.html</guid><description><![CDATA[
              
                <p><strong>1。下载，安装</strong>
</p>
<p>电脑上必须预先安装Jdk5 or Jdk6，并且设置JAVA_HOME环境变量。从Sun的网站上下载 GlassFish v2.1 final build，是一个jar文件。下载后运行：</p>
<p>F:\&gt;java -Xmx256m -jar glassfish-installer-v2ur2-b04-windows.jar</p>
<p> </p>
<p>如果这里不加上-Xmx256m，很有可能会报OutOfMemoryException。这个命令会产生一个名为glassfish的目录。在glassfish目录下运行：F:\glassfish&gt;lib\ant\bin\ant -f setup.xml</p>
<p>如果最后能看到“BUILD SUCCESSFUL”，就说明GlassFish已经安装成功了。GlassFish会建立一个名为“domain1“的域。</p>
<p> </p>
<p>打开setup.xml文件我们可以看到默认的配置：</p>
<pre name="code" class="xml">&lt;property name="domain.name" value="domain1"/&gt;
&lt;property name="instance.name" value="server"/&gt;
&lt;property name="admin.user" value="admin"/&gt;
&lt;property name="admin.password" value="adminadmin"/&gt;
&lt;property name="admin.port" value="4848"/&gt;
&lt;property name="instance.port" value="8080"/&gt;
&lt;property name="orb.port" value="3700"/&gt;
&lt;property name="imq.port" value="7676"/&gt;
&lt;property name="https.port" value="8181"/&gt;</pre>
<p> 如果想自定义domain name, user, password or ports，可以手动修改这个文件后再进行安装。</p>
<p> </p>
<p><strong>2。启动GlassFish服务器</strong>
</p>
<p>将%glassfish_home%\bin目录添加到path环境变量中。在任意目录下键入asadmin start-domain即可启动default domain (domain1)。成功启动后在http://localhost:8080/可以看到服务器欢迎页面。</p>
<p> </p>
<p><strong>3。使用admin console</strong>
</p>
<p>admin console是一个基于web的服务器管理和配置平台。在浏览器中键入http://localhost:4848就可以看到登陆页面。使用setup.xml中定义的user &amp; password即可登陆。点击左侧树形结构上的节点可以在右侧窗口察看相应的管理项目。</p>
<p> </p>
<p>Applications： 管理domain中部署的应用。</p>
<p>Application Server -&gt; General：start &amp; stop instance， view log files， JNDI browsing。。。</p>
<p>Application Server -&gt; Adminstrator Password：修改admin console的密码</p>
<p> </p>
<p><strong>4。GlassFish的基本概念</strong>
</p>
<p> </p>
<p><strong>Domain：</strong>
域（Domain）是GlassFish的一个核心概念，我们可以为每个GlassFish服务器建立多个域，而域里面又可以包含多种可管理的资源，包括实例、集群及它们各自资源。需要注意的是，一个可管理的资源，例如一个实例，只能专属于一个域。</p>
<p> </p>
<p><strong>Domain Administrator Server(DAS)：</strong>
域管理服务器。DAS是GlassFish的一个核心组件，在集群的环境中，每个GlassFish服务器可能会存在多个服务实例
（Instance），DAS本身也是一个符合Java
EE5规范的服务实例，主要是为GlassFish提供核心管理的功能。所有对域的管理操作，例如Netbeans
IDE以及其他工具的管理请求，都是由DAS分发到各个服务器实例去的，而不是直接连接到各个服务器实例。
对于一些需要多个实例进行操作的管理请求，DAS会将操作请求广播到各个实例上去，所以，当DAS停止运行后，各种对域的管理操作都不能进行，当然，即使
DAS已经停止了运行，域的集群和服务器实例仍然可以正常工作，只要域还在正常运行。</p>
<p> </p>
<p><strong>Node：</strong>
一般来说，一个node（节点）就代表一个独立主机。一个很大的机器可能会分割为多个独立的节点。<strong></strong>
节点需要一个轻量级的代理（Node Agent）来对服务器实例进行远程生命周期管理。节点代理主要负责实例的启动，停止以及创建，同时，也承担监视者以及重启失效进程的责任。</p>
<p> </p>
<p><strong>Server Instance：</strong>
服务器实例。<strong></strong>
一个实例指的是掌管Java EE 5应用服务器的Java虚拟机。实例间的通信以及和DAS之间的通信是依赖于远程MBean方法的调用的。</p>
<p> </p>
<p>感觉这和Oracle的RAC架构很相似。我们可以为oracle建立多个database，每一个database可以包含多个instance，Enterprise Grid Control负责管理所有的instance。</p>
<p> </p>
<p><strong>5。Domain的管理</strong>
</p>
<p> </p>
<p>5.1 create domain</p>
<p> </p>
<p>F:\&gt;asadmin create-domain --adminport 4849 myFirstDomain</p>
<p>成功后在%glassfish_home%\domains下可以看到myFirstDomain目录。asadmin start-domain myFirstDomain后键入http://localhost:4849即可登陆admin console。</p>
<p> </p>
<p>直接在命令行键入asadmin create-domain可以看到所有可接受的参数。其中adminport和domain name是必需的，否则asadmin会报错。</p>
<p> </p>
<p>--profile可以为创建的domain指定一个profile。如果没有显示的指定profile，asadmin会使用%glassfish_home%\config\asadminenv.conf中AS_ADMIN_PROFILE定义的缺省profile（developer）。GlassFish提供developer，cluster &amp; enterprise三种profile。GlassFish的admin guide上面说：Do not create an enterprise domain unless you have HADB and the Network Security Services (NSS) keystore。就是说不要随便创建enterprise profile玩。HADB应该是指高可用性数据库，NSS keystore是什么我就不明白了。</p>
<p> </p>
<p>--domaindir可以指定domain的目录。缺省目录为%glassfish_home%\domains</p>
<p> </p>
<p>5.2 start &amp; stop &amp; delete &amp; list domain</p>
<p> </p>
<p>F:\&gt;asadmin start-domain myFirstDomain</p>
<p>F:\&gt;asadmin stop-domain myFirstDomain</p>
<p>如果只有一个domain，则可以省去domain name。</p>
<p>F:\&gt;asadmin delete-domain myFirstDomain</p>
<p>F:\&gt;asadmin list-domains</p>
<p> </p>
<p>5.3 domain的配置文件</p>
<p> </p>
<p>%glassfish_home%\domains\%domain_name%\config\domain.xml</p>
<p>对于其中大部分的配置GlassFish支持热部署，无需重启domain。这些配置包括：</p>
<p>- 部署应用和取消部署</p>
<p>- 添加，移除JDBC, JMS, Connector resources and pools</p>
<p>- 改变日志级别</p>
<p>- 修改监控级别</p>
<p>。。。</p>
<p> </p>
<p><strong>6。与IDE的集成</strong>
</p>
<p> </p>
<p>GlassFish与netbean, eclipse都可以方便的集成。比较起来netbean更简单些，毕竟是自家的产品嘛。eclipse还需要先下载一个server adapter。</p>
<p> </p>
<p><strong>7。部署应用</strong>
</p>
<p> </p>
<p>在GlassFish中部署应用有三种方法。下面以一个sample.war为例说明这三种方法。部署EJB module或者enterprise application的步骤大致相同。</p>
<p> </p>
<p>7.1 自动部署</p>
<p> </p>
<p>在%glassfish_home%\domains\%domain_name%下有一个autodeploy目录。把我的sample.war直接copy到这个目录下，大概两秒钟后出现一个叫sample.war_deployed的文件。这说明部署成功了。在admin console的Applications -&gt; Web Applications下可以看到这个应用。如果要取消部署，把sample.war从autodeploy中删除即可。</p>
<p> </p>
<p>这种部署方式最简单直接。但缺点是只支持本地部署，只能进行文件部署(jar, war, ear...)，不能进行文件夹部署（解压sample.war后把整个文件夹copy到autodeploy下部署无效）。而且部署的文件只能位于autodeploy下面。</p>
<p> </p>
<p>7.2 使用admin console部署</p>
<p> </p>
<p>在admin console的Applications -&gt; Web Applications中点Deploy按钮可以进入部署页面。</p>
<p> </p>
<p>这里提供了两种选项。一种是Packaged file to be uploaded to the server，就是上传打包文件部署。使用这个选项可以把本机的应用部署到远程服务器上。另外一种是Local packaged file or directory that is accessible from the Application Server。就是说使用本地打包文件或者文件夹进行部署。文件夹部署方式非常方便本机开发调试。</p>
<p><br />
<img src="/upload/attachment/74420/96c9d308-3202-34a2-a923-cbfd70fff978.jpg" alt="" />
</p>
<p>比如说我在tomcat的webapps下有一个sample文件夹，我可以直接把这个文件夹部署到GlassFish中而无需进行打包。部署后改动sample中的jsp文件，刷新浏览器即可看到改变，不用重新部署。</p>
<p> </p>
<p>7.3 使用asadmin命令部署</p>
<p> </p>
<p>部署：</p>
<p>asadmin deploy --port 4849 --user admin F:\apache-tomcat-5.5.27\webapps\sample.war</p>
<p>取消部署：</p>
<p>asadmin undeploy --port 4849 --user admin sample</p>
<p>更详细的命令可以通过asadmin deploy --help获得。</p>
<p> </p>
<p>好了，入门篇就写到这里。等有机会深入研究研究，再写进阶篇，高级篇，哈哈。</p>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/326988#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-02-11 18:50 <a href="http://www.blogjava.net/logicgate/archive/2009/02/11/261404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB 3 学习笔记：HelloWorld Stateless SessionBean</title><link>http://www.blogjava.net/logicgate/archive/2009/02/07/261405.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Sat, 07 Feb 2009 15:05:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/02/07/261405.html</guid><description><![CDATA[
              
                <p>我的开发环境是eclipse 3.4 + glassfish-v2</p>
<p> </p>
<p>1。下载安装glassfish-v2，具体步骤就不说了，此处省略500字。。。</p>
<p>2。运行asadmin start-appserv启动应用服务器。</p>
<p>3。登陆admin console, http://localhost:4848</p>
<p><br />
<img src="/upload/attachment/73492/fdf72c44-bcab-3e65-bb00-e45ae91174d6.jpg" alt="" />
</p>
<p> </p>
<p>4。创建eclipse project</p>
<p><br />
<img src="/upload/attachment/73494/f3dfafac-9456-32bd-b329-76179dd27f56.jpg" alt="" />
</p>
<p><br />
<img src="/upload/attachment/73496/cb9cd83f-2468-3f99-822b-3f249ecec2f5.jpg" alt="" />
</p>
<p> </p>
<p>从%glassfish_home%/lib中找到javaee.jar和appserv-rt.jar这两个文件，加入到project Libraries中。</p>
<p><br />
<img src="/upload/attachment/73498/17d93625-fd45-333c-bf61-3e680d5ae6bc.jpg" alt="" />
</p>
<p> </p>
<p>5。编写HelloWorld EJB</p>
<p> </p>
<p>IHelloWorld.java (remote interface):</p>
<pre name="code" class="java">package ejb;

import javax.ejb.Remote;

@Remote
public interface IHelloWorld
{
	public String sayHello();
}</pre>
<p> </p>
<p>HelloWorld.java (stateless session bean)</p>
<pre name="code" class="java">package ejb;

import javax.ejb.Stateless;

@Stateless(name="HelloWorldBean", mappedName="ejb/HelloWorldBeanJNDI")
public class HelloWorld implements IHelloWorld
{
	public String sayHello()
	{
		return ("Hello World! This is my first EJB3 Stateless SessionBean!");
	}
}</pre>
<p> </p>
<p>mappedName定义了HelloWorld的jndi name，稍后客户端测试程序需要用这个名字来做lookup。</p>
<p> </p>
<p>6。编写ant build.xml</p>
<pre name="code" class="xml">&lt;?xml version="1.0"?&gt;

&lt;project name="helloWorld" default="deploy" basedir="."&gt;
	&lt;property name="build.dir" value="${basedir}/class"/&gt;
	&lt;property name="glassfish.home" value="F:/glassfish-v2ur2"/&gt;
	&lt;property name="deploy.dir" value="${glassfish.home}/domains/domain1/autodeploy"/&gt;

	&lt;target name="jar"&gt;
		&lt;jar destfile="helloWorld.jar"&gt;
			&lt;fileset dir="${build.dir}"&gt;
				&lt;include name="ejb/*.class"/&gt;
			&lt;/fileset&gt;
		&lt;/jar&gt;
	&lt;/target&gt;
	
	&lt;target name="deploy" depends="jar"&gt;
		&lt;copy file="${basedir}/helloWorld.jar" todir="${deploy.dir}"/&gt;
	&lt;/target&gt;
&lt;/project&gt;</pre>
<p> </p>
<p>7。打包，部署。</p>
<p> </p>
<p>运行build.xml，把程序打包成helloWorld.jar并拷贝到glassfish的自动部署目录。如果部署成功，在glassfish的admin console中，Applications-&gt;EJB Modules下面可以找到我们的HelloWorldBean。如果程序中没有设置mappedName，去Application Server-&gt;General-&gt;JNDI Browsing也可以找到对应的jndi name。</p>
<p><br />
<img src="/upload/attachment/73500/beaf2dd9-b807-3727-853d-ace74e565619.jpg" alt="" />
</p>
<p><br />
<img src="/upload/attachment/73502/75ded8ea-3409-3c68-a2b8-11185f06c365.jpg" alt="" />
</p>
<p> </p>
<p>8。编写客户端测试程序。</p>
<pre name="code" class="java">package test;

import javax.naming.InitialContext;
import ejb.IHelloWorld;

public class Test
{
	public void runTest() throws Exception
	{
		InitialContext ctx = new InitialContext();
		IHelloWorld bean = (IHelloWorld)ctx.lookup("ejb/HelloWorldBeanJNDI");
		System.out.println(bean.sayHello());
	}

	public static void main(String[] args)
	{
		try
		{
			Test t = new Test();
			t.runTest();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}</pre>
<p> </p>
<p>运行测试程序，成功打印出： Hello World! This is my first EJB3 Stateless SessionBean!</p>
<p> </p>
<p>感觉ejb3比ejb2少了一堆繁琐的文件和xml配置，而且支持pojo风格的编程，开发效率和可移植性都比以前要好得多。</p>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/325062#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-02-07 23:05 <a href="http://www.blogjava.net/logicgate/archive/2009/02/07/261405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 学习笔记：Oracle10g重新配置Database Control</title><link>http://www.blogjava.net/logicgate/archive/2009/02/06/261406.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Fri, 06 Feb 2009 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/02/06/261406.html</guid><description><![CDATA[
              
                <p>由于安装oracle的时候没有设置oracle_hostname，oracle oem在%oracle_home%下面产生了两个包含我当时的ip address的目录，192.168.1.112_epcit和oc4j\j2ee\OC4J_DBConsole_192.168.1.112_epcit 这样一旦我的ip address改变了，运行emctl start dbcontrol会报错：</p>
<p> </p>
<p>C:\&gt;emctl status dbconsole<br />
OC4J Configuration issue. %oracle_home%/oc4j/j2ee/OC4J_DBConsole_%ip%_%sid% not found.</p>
<p> </p>
<p>只好重新配置database control了。</p>
<p> </p>
<p>1。数据库和listener都必须已经启动并正常工作。</p>
<p>2。设置系统环境变量oracle_hostname （如果你还没有设置的话）</p>
<p>2。emctl stop dbconsole （如果你的db control还在运行的话）</p>
<p>3。sc delete OracleDBConsoleepcit （删除windows service，不删除好像最后会报错）</p>
<p>4。emca -config dbcontrol db -repos recreate</p>
<p> </p>
<p>C:\&gt;emca -config dbcontrol db -repos recreate</p>
<p>STARTED EMCA at Feb 6, 2009 2:50:26 PM<br />
EM Configuration Assistant, Version 10.2.0.1.0 Production<br />
Copyright (c) 2003, 2005, Oracle.  All rights reserved.</p>
<p>Enter the following information:<br />
Database SID: epcit<br />
Listener port number: 1521<br />
Password for SYS user: change_on_install<br />
Password for DBSNMP user: change_on_install<br />
Password for SYSMAN user: change_on_install<br />
Email address for notifications (optional):<br />
Outgoing Mail (SMTP) server for notifications (optional):<br />
-----------------------------------------------------------------</p>
<p>You have specified the following settings</p>
<p>Database ORACLE_HOME ................ D:\oracle\product</p>
<p>Database hostname ................ BLC05<br />
Listener port number ................ 1521<br />
Database SID ................ epcit<br />
Email address for notifications ...............<br />
Outgoing Mail (SMTP) server for notifications ...............</p>
<p>-----------------------------------------------------------------<br />
Do you wish to continue? [yes(Y)/no(N)]:y</p>
<p> </p>
<p>...............</p>
<p> </p>
<p>确认一切ok，没有出现failed字样。如果有错的话，可以查看%oracle_home%\cfgtoollogs\emca\下面的log文件。</p>
<p>登陆 <a href="http://blc05:5500/em">http://blc05:5500/em</a>
 终于又看到了熟悉的页面。</p>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/324048#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-02-06 14:48 <a href="http://www.blogjava.net/logicgate/archive/2009/02/06/261406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发发关于系统框架的牢骚</title><link>http://www.blogjava.net/logicgate/archive/2009/02/06/261407.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Thu, 05 Feb 2009 18:09:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/02/06/261407.html</guid><description><![CDATA[
              
                <p>一直以来，我都希望能开发出一套完善的系统框架，能让其他的开发人员尽量避免接触到复杂的底层技术细节，能把主要的精力放在业务需求上面，加快开发速度。但结果还是不尽人意。总结了一下原因，大概有以下几点吧。</p>
<p> </p>
<p>1。本人能力不足。从毕业后就加入现在的公司，我从来没有接触过其它的系统，也没有人能够指点我，也许我自己走了弯路而自己还不知道。</p>
<p> </p>
<p>2。缺少人力资源。人少，事多。大部分的时间都放在了业务模块的开发上面。小公司的局限性注定了它不可能投入大量的人力和时间去做底层框架的开发。这没有错，但是让我很无奈！</p>
<p> </p>
<p>3。需求太复杂。几百个对象之间错综复杂的关系就像一个蜘蛛网，同时又要求系统界面user friendly，结果导致系统的复杂性大大增加。</p>
<p> </p>
<p>4。无技术文档。把一个没有详细技术文档的系统丢给一个开发人员，就好比是把一个没有用户手册的系统丢给客户又不给他们培训一样。五年了，我还真的没有怎么写过开发文档。结果每次来一个新的程序员，都要花上大半年的时间，才能基本上熟悉系统框架，做出点象样子的东西。但还没有哪一个能真正做到游刃有余，灵活使用。</p>
<p> </p>
<p>总之，个人能力不足+公司人太少+客户需求复杂+缺少技术文档=开发进度慢+开发难度大=一个远远不完美的系统</p>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/323739#comments" style="color:red;">已有 <strong>9</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-02-06 02:09 <a href="http://www.blogjava.net/logicgate/archive/2009/02/06/261407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 学习笔记：Oracle10g监听端口改变后DB Control无法使用的解决方法</title><link>http://www.blogjava.net/logicgate/archive/2009/02/03/261408.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Tue, 03 Feb 2009 15:22:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/02/03/261408.html</guid><description><![CDATA[
              
                <p>修改前的listener.ora</p>
<p> </p>
<p>SID_LIST_LISTENER =<br />
  (SID_LIST =<br />
    (SID_DESC =<br />
      (SID_NAME = PLSExtProc)<br />
      (ORACLE_HOME = D:\oracle\product)<br />
      (PROGRAM = extproc)<br />
    )<br />
  )<br />
<br />
LISTENER =<br />
  (DESCRIPTION_LIST =<br />
    (DESCRIPTION =<br />
      (ADDRESS = (PROTOCOL = TCP)(HOST = logicgate)(PORT = 1521))<br />
    )<br />
    (DESCRIPTION =<br />
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))<br />
    )<br />
  )</p>
<p> </p>
<p>修改后的listener.ora</p>
<p> </p>
<p>SID_LIST_LISTENER =<br />
  (SID_LIST =<br />
    (SID_DESC =<br />
      (SID_NAME = PLSExtProc)<br />
      (ORACLE_HOME = D:\oracle\product)<br />
      (PROGRAM = extproc)<br />
    )<br />
    (SID_DESC =<br />
      (GLOBAL_DBNAME = epcit)<br />
      (ORACLE_HOME = d:\oracle\product)<br />
      (SID_NAME = epcit)<br />
    )<br />
  )<br />
<br />
LISTENER =<br />
  (DESCRIPTION_LIST =<br />
    (DESCRIPTION =<br />
      (ADDRESS = (PROTOCOL = TCP)(HOST = logicgate)(PORT = 1523))<br />
    )<br />
    (DESCRIPTION =<br />
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))<br />
    )<br />
  )</p>
<p> </p>
<p>监听端口从1521变为1523。由于oracle实例的动态注册只能在默认端口1521上运行，端口改变后我这里使用了静态注册。重新启动监听器：</p>
<p> </p>
<p>D:\&gt;lsnrctl stop</p>
<p>D:\&gt;lsnrctl start</p>
<p>D:\&gt;lsnrctl services<br />
<br />
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=logicgate)(PORT=1523)))<br />
Services Summary...<br />
Service "PLSExtProc" has 1 instance(s).<br />
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...<br />
    Handler(s):<br />
      "DEDICATED" established:0 refused:0<br />
         LOCAL SERVER<br />
Service "epcit" has 1 instance(s).<br />
  Instance "epcit", status UNKNOWN, has 1 handler(s) for this service...<br />
    Handler(s):<br />
      "DEDICATED" established:0 refused:0<br />
         LOCAL SERVER<br />
The command completed successfully</p>
<p> </p>
<p>可以看到数据库实例"epcit"已经成功注册到监听器的端口1523上面。改变监听器端口后运行tnsping会出错，但只要更改tnsnames.ora中对应的端口就可以了。</p>
<p> </p>
<p>然后登陆database control, 出现如下错误：<span class="xl">Enterprise Manager is not able to connect to the database 
instance. The state of the components are listed below。修改方法如下：</span>
</p>
<p> </p>
<p>1。%oracle_home\%hostname%_epcit\sysman\config\emoms.properties 在这个文件里我们可以找到两个和端口有关的设置</p>
<p>oracle.sysman.eml.mntr.emdRepPort=1521</p>
<p>oracle.sysman.eml.mntr.emdRepConnectDescriptor=(DESCRIPTION\=(ADDRESS_LIST\=(ADDRESS\=(PROTOCOL\=TCP)(HOST\=LOGICGATE)(PORT\=1521)))(CONNECT_DATA\=(SERVICE_NAME\=epcit)))</p>
<p>把旧的端口改为新的端口就ok。</p>
<p> </p>
<p>2。%oracle_home\%hostname%_epcit\sysman\emd\targets.xml  把所有旧的端口换成新的。</p>
<p> </p>
<p>3。重启database control，登陆oem，成功！</p>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/322649#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-02-03 23:22 <a href="http://www.blogjava.net/logicgate/archive/2009/02/03/261408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RAID-5与RAID-10内部分析(转载自piner)</title><link>http://www.blogjava.net/logicgate/archive/2009/01/23/261409.html</link><dc:creator>logicgate</dc:creator><author>logicgate</author><pubDate>Thu, 22 Jan 2009 16:37:00 GMT</pubDate><guid>http://www.blogjava.net/logicgate/archive/2009/01/23/261409.html</guid><description><![CDATA[
              
                <p>一直以来，看到关于raid5与raid10的性能之争还是非常多的，甚至很多人那拿出了测试数据，但是，到底谁是谁非。这里，我就这两种raid的内部运行原理来分析一下，我们在什么情况下应当适合选哪一种raid方式。</p>
<p> </p>
<p>为了方便对比，我这里拿同样多驱动器的磁盘来做对比，raid5选择3D+1P的raid方案，raid10选择2D+2D的Raid方案，分别如图：</p>
<p style="text-align: center;"><img src="/upload/attachment/71049/23c863a6-3141-3f76-8f95-6c22cdad5256.jpg" alt="" />
</p>
<p>那么，我们分析如下三个过程：读，连续写，随机写，但是，在介绍这三个过程之前，我需要介绍一个特别重要的概念：<strong>cache</strong>
。</p>
<p> </p>
<p>cache技术最近几年，在磁盘存储技术上，发展的非常迅速，作为高端存储，cache已经是整个存储的核心所在，就是中低端存储，也有很大的cache存在，包括最简单的raid卡，一般都包含有几十，甚至几百兆的raid cache。</p>
<p> </p>
<p>cache的主要作用是什么呢？体现在读与写两个不同的方面，如果作为写，一般存储阵列只要求写到cache就算完成了写操作，所以，阵列的写是非常快
速的，在写cache的数据积累到一定程度，阵列才把数据刷到磁盘，可以实现批量的写入，至于cache数据的保护，一般都依赖于镜相与电池（或者是
UPS）。</p>
<p> </p>
<p>cache的读一样不可忽视，因为如果读能在cache中命中的话，将减少磁盘的寻道，因为磁盘从寻道开始到找到数据，一般都在6ms以上，而这个时
间，对于那些密集型io的应用可能不是太理想。但是，如果cache能命中，一般响应时间则可以在1ms以内。</p>
<p><br />
不要迷信存储厂商的iops（每秒的io数）数据，他们可能全部在cache命中的基础上做到的，但是实际上，你的cache命中率可能只有10%。
</p>
<p> </p>
<p>介绍完cache，我们就可以解释raid5与raid10在不同的模式下，工作效率问题了，那么我们来分别分析以上三个问题。</p>
<p> </p>
<p><strong>1、读操作</strong>
</p>
<p>因为raid5与raid10的磁盘都可以提供服务，所以，在读上面他们基本是没有差别的，除非是读的数据能影响cache命中率，导致命中率不一样。</p>
<p style="text-align: center;"><img src="/upload/attachment/71051/75935900-c07c-38e0-8e63-954dc9801ee6.jpg" alt="" />
</p>
<p style="text-align: left;"> </p>
<p><strong>2、连续写</strong>
</p>
<p>连续写的过程，一般表示写入连续的大批量的数据，如媒体数据流，很大的文件等等，这个写操作过程，如果有写cache存在，并且算法没有问题的
话，raid5比raid10甚至会更好一些（这里要假定存储有一定大小足够的写cache，而且计算校验的cpu不会出现瓶颈）。因为这个时候的校验是
在cache中完成，如4块盘的raid5，可以先在内存中计算好校验，同时写入3个数据+1个校验。而raid10只能同时写入2个数据+2个镜相。</p>
<p style="text-align: center;"><img src="/upload/attachment/71053/d315c72f-f401-3693-9cd8-7c83787d46b7.jpg" alt="" />
</p>
<p style="text-align: left;">但是，我前面也说过了，写cache是可以缓存写操作的，等到一定时期再写到磁盘，但是，写操作不比读操作，这个写是迟早也要发生的，也就是说，最后落到磁盘上的写还是避免不了的，不过，如果不是连续性的强连续写，只要不达到磁盘的写极限，差别都不是太大。</p>
<p style="text-align: left;"> </p>
<p><strong>3、离散写</strong>
</p>
<p>这里可能是最难理解，但是，也是最重要的部分，数据库，如oracle
数据库大部分操作就是离散写，如每次写一个数据块的数据，如8K；联机日志虽然看起来是连续写，但是因为每次写的量不多，不保证能添满raid5的一个条
带（保证每张盘都能写入），所以很多时候也是离散写入。</p>
<p style="text-align: center;"><img src="/upload/attachment/71055/866e683a-4054-3a82-a9b2-0ab5e2b138bc.jpg" alt="" />
</p>
<p>我们再接上图，假定要把一个数字2变成数字4，那么对于raid5，实际发生了4次io，<br />
       先读出2与校验6，可能发生读命中<br />
       然后在cache中计算新的校验<br />
       写入新的数字4与新的校验8</p>
<p> </p>
<p><strong>对于raid10，我们可以看到，同样的单个操作，最终raid10只需要2个io，而raid5需要4个io。</strong>
</p>
<p> </p>
<p>但是，这里我忽略了raid5在那两个读操作的时候，还可能会发生读命中操作，也就是说，如果需要读取的数据已经在cache中，可能是不需要4个
io的，也证明了cache对raid5
的重要性，不仅仅是计算校验需要，而且对性能的提升由为重要。曾经测试过，在raid5的阵列中，如果关闭写cache，raid5的性能将差很多倍。</p>
<p> </p>
<p>这里，并不是说cache对raid10就不重要了，因为写缓冲，读命中等，都是提高速度的关键所在，不过的是，raid10对cache的依赖性没有raid5那么明显而已。</p>
<p> </p>
<p>到这里，大家应当也大致明白了raid5与raid10的原理与差别了，一般来说，象小io的数据库类型操作，建议采用raid10，而大型文件存储，数据仓库，则从空间利用的角度，可以采用raid5。</p>
              
              
              <br/><br/>
              <span style="color:red;">
                <a href="http://logicgate.javaeye.com/blog/320113#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
              </span>
              <br/><br/><br/>
              <span style="color:#E28822;">JavaEye推荐</span>
              <br/>
              <ul class='adverts'><li><a href='/adverts/138' target='_blank'><span style="color:red;font-weight:bold;">加入阿里巴巴，发展潜力无限</span></a></li><li><a href='/adverts/152' target='_blank'><span style="color:red;font-weight:bold;">上海: 巨人网络诚聘Java, JS, 网页游戏工程师</span></a></li><li><a href='/adverts/157' target='_blank'><span style="color:red;font-weight:bold;">浙江：百世物流科技有限公司诚聘资深Java工程师</span></a></li></ul>
              <br/><br/><br/>
              <img src ="http://www.blogjava.net/logicgate/aggbug/261409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/logicgate/" target="_blank">logicgate</a> 2009-01-23 00:37 <a href="http://www.blogjava.net/logicgate/archive/2009/01/23/261409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>