<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>南望阿方小站</title>
	<atom:link href="http://www.nwafang.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.nwafang.com</link>
	<description></description>
	<lastBuildDate>Tue, 20 Apr 2010 01:33:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Oracle 10g开归档碰到ORA-00600错误，惊，险</title>
		<link>http://www.nwafang.com/2010/04/oracle10g_librarycachenotemptyonclose.html</link>
		<comments>http://www.nwafang.com/2010/04/oracle10g_librarycachenotemptyonclose.html#comments</comments>
		<pubDate>Tue, 20 Apr 2010 01:33:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ORACLE]]></category>
		<category><![CDATA[ORACLE ORA-600 ORA-00600 LibraryCacheNotEmptyOnClose Bug 4483084]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/2010/04/oracle10g_librarycachenotemptyonclose.html</guid>
		<description><![CDATA[有一个测试环境的Oracle数据库，原来工作在归档模式的，现在觉得在上面测试的应用有好几个了，也不能轻意挂掉，就打算不定期的进行RMAN备份。在线RMAN备份需要工作在归档模式下，于是早上趁大家还没开始工作时，把数据库切换到归档模式下。可在关闭Oracle数据库时，异常发生了。
SQL&#62; shutdown immediate;     Database closed.      Database dismounted.      ORA-00600: internal error code, arguments: [LibraryCacheNotEmptyOnClose], [], [], [], [], [], [], []

看到是LibraryCacheNotEmptyOnClose错误，感觉问题好像不是很严重，就先把归档打开，把数据库启动好再说。幸运的时，在重启到Mount，打开归档，打开数据库这个过程都没有报错。
事后，用Google搜索了一下ora-00600 librarycachenotemptyonclose，发现是一个bug [Bug 4483084 OERI[LibraryCacheNotEmptyOnClose]，Metalink账号过期了，也没办法下载了，测试环境也不打算打补丁。
看了网上一个博客，说建个触发器，在关闭系统时执行“ALTER SYSTEM FLUSH SHARED_POOL”就可以了。没有亲测，再说也是不定期发生。
附触发器脚本
CREATE or replace TRIGGER flush_shared_pool     BEFORE SHUTDOWN ON DATABASE   [...]]]></description>
			<content:encoded><![CDATA[<p>有一个测试环境的Oracle数据库，原来工作在归档模式的，现在觉得在上面测试的应用有好几个了，也不能轻意挂掉，就打算不定期的进行RMAN备份。在线RMAN备份需要工作在归档模式下，于是早上趁大家还没开始工作时，把数据库切换到归档模式下。可在关闭Oracle数据库时，异常发生了。</p>
<blockquote><p>SQL&gt; shutdown immediate;     <br />Database closed.      <br />Database dismounted.      <br />ORA-00600: internal error code, arguments: [LibraryCacheNotEmptyOnClose], [], [], [], [], [], [], []</p>
</blockquote>
<p>看到是LibraryCacheNotEmptyOnClose错误，感觉问题好像不是很严重，就先把归档打开，把数据库启动好再说。幸运的时，在重启到Mount，打开归档，打开数据库这个过程都没有报错。</p>
<p>事后，用Google搜索了一下ora-00600 librarycachenotemptyonclose，发现是一个bug [Bug 4483084 OERI[LibraryCacheNotEmptyOnClose]，Metalink账号过期了，也没办法下载了，测试环境也不打算打补丁。</p>
<p>看了网上一个博客，说建个触发器，在关闭系统时执行“ALTER SYSTEM FLUSH SHARED_POOL”就可以了。没有亲测，再说也是不定期发生。</p>
<p>附触发器脚本</p>
<blockquote><p>CREATE or replace TRIGGER flush_shared_pool     <br />BEFORE SHUTDOWN ON DATABASE      <br />BEGIN      <br />execute immediate &#8216;ALTER SYSTEM FLUSH SHARED_POOL&#8217;;      <br />EXCEPTION      <br />WHEN OTHERS THEN      <br />RAISE_APPLICATION_ERROR (num =&gt; -20000, msg =&gt; &#8216;Error flushing pool&#8217;);      <br />END;</p>
</blockquote>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2010/04/oracle10g_librarycachenotemptyonclose.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>手动安装Zmodem协议，记录一下</title>
		<link>http://www.nwafang.com/2010/03/centos_install_zmodem.html</link>
		<comments>http://www.nwafang.com/2010/03/centos_install_zmodem.html#comments</comments>
		<pubDate>Thu, 11 Mar 2010 06:12:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[CentOS lrzsz rz sz SecureCRT Putty Zmodem]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/2010/03/centos_install_zmodem.html</guid>
		<description><![CDATA[在管理Linux主机时，经常需要和自己的电脑来回传文件。在各种传文件的方法中，觉得使用Zmodem协议还是比较方便的，Putty不支持，SecureCRT支持Zmodem协议。
今天有个主机，上面没有安装Zmodem协议。使用rz没法传文件上去。于是打算安装一个Zmodem协议包。安装方法很简单，插入光盘（本人CentOS系统），
rpm -ivh lrzsz-xxx

如果机器连网，使用yum安装就可以了。
yum install lrzsz

安装后，就可以使用sz,rz下载，上传文件了。
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>在管理Linux主机时，经常需要和自己的电脑来回传文件。在各种传文件的方法中，觉得使用Zmodem协议还是比较方便的，Putty不支持，SecureCRT支持Zmodem协议。</p>
<p>今天有个主机，上面没有安装Zmodem协议。使用rz没法传文件上去。于是打算安装一个Zmodem协议包。安装方法很简单，插入光盘（本人CentOS系统），</p>
<blockquote><p>rpm -ivh lrzsz-xxx</p>
</blockquote>
<p>如果机器连网，使用yum安装就可以了。</p>
<blockquote><p>yum install lrzsz</p>
</blockquote>
<p>安装后，就可以使用sz,rz下载，上传文件了。</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2010/03/centos_install_zmodem.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>奇怪的UNLIMITED TABLESPACE权限</title>
		<link>http://www.nwafang.com/2010/03/oracle_unlimited_tablespace_privs.html</link>
		<comments>http://www.nwafang.com/2010/03/oracle_unlimited_tablespace_privs.html#comments</comments>
		<pubDate>Thu, 04 Mar 2010 07:14:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ORACLE]]></category>
		<category><![CDATA[权限 UNLIMITED TABLESPACE RESOURCE DBA_ROLE_PRIVS DBA_SYS_PRIVS]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/2010/03/oracle_unlimited_tablespace_privs.html</guid>
		<description><![CDATA[今天在授权时，研究了一下unlimited tablespace权限，发现比较奇怪。直接贴出网上别人研究的结果吧。
1、系统权限UNLIMITED TABLESPACE 不能被授予role，可以被授予用户！ 
2、UNLIMITED TABLESPACE 没有被包括在resource role中，但是UNLIMITED TABLESPACE 随着resource的授出而被授予用户的。 
3、UNLIMITED TABLESPACE 不能伴随着resource被授予role而授予用户。
相关数据字典：DBA_SYS_PRIVS,DBA_ROLE_PRIVS
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>今天在授权时，研究了一下unlimited tablespace权限，发现比较奇怪。直接贴出网上别人研究的结果吧。</p>
<p>1、系统权限UNLIMITED TABLESPACE 不能被授予role，可以被授予用户！ </p>
<p>2、UNLIMITED TABLESPACE 没有被包括在resource role中，但是UNLIMITED TABLESPACE 随着resource的授出而被授予用户的。 </p>
<p>3、UNLIMITED TABLESPACE 不能伴随着resource被授予role而授予用户。</p>
<p>相关数据字典：DBA_SYS_PRIVS,DBA_ROLE_PRIVS</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2010/03/oracle_unlimited_tablespace_privs.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>win7无法以管理员身份运行</title>
		<link>http://www.nwafang.com/2010/02/win7_run_as_admin.html</link>
		<comments>http://www.nwafang.com/2010/02/win7_run_as_admin.html#comments</comments>
		<pubDate>Wed, 24 Feb 2010 01:33:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[win7 windows7 以管理员身份运行 不能运行 不能执行 不工作 米人]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/2010/02/win7_run_as_admin.html</guid>
		<description><![CDATA[刚安装了Windows7没几天，忽然发现在快捷方式上“以管理员身份运行”没反应。而在可执行文件上，却能正常工作。Google了一把，发现网上也有这类问题，但大多现象有些差别，解决方法是修改注册表。我试了一下，不行，把注册表又改回来。
后面在一个页面上，有人说安装“米人”后，就不能“以管理员身份运行了”。而我也安装了米人下载工具。卸载掉以后，再在快捷方式上“以管理员身份运行”就正常了。
－The End－
]]></description>
			<content:encoded><![CDATA[<p>刚安装了Windows7没几天，忽然发现在快捷方式上“以管理员身份运行”没反应。而在可执行文件上，却能正常工作。Google了一把，发现网上也有这类问题，但大多现象有些差别，解决方法是修改注册表。我试了一下，不行，把注册表又改回来。</p>
<p>后面在一个页面上，有人说安装“米人”后，就不能“以管理员身份运行了”。而我也安装了米人下载工具。卸载掉以后，再在快捷方式上“以管理员身份运行”就正常了。</p>
<p>－The End－</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2010/02/win7_run_as_admin.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server upate语句失败</title>
		<link>http://www.nwafang.com/2010/02/sqlserver_update_fail.html</link>
		<comments>http://www.nwafang.com/2010/02/sqlserver_update_fail.html#comments</comments>
		<pubDate>Tue, 23 Feb 2010 09:45:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[SQLServer SET ARITHABORT UPDATE 失败]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/2010/02/sqlserver_update_fail.html</guid>
		<description><![CDATA[今天同事反应，一个用于监控的统计查询，最近有时会执行30秒超时，查询条件上原来就有索引的。为了减少查询时间，重建了一个索引，使用INCLUDE字句，在索引里冗余了一个数据字段。再执行原来的查询语句，果然快多了。本以为这件事就这样解决了，后来发现往这个统计表里入数据的作业失败了。报错“
UPDATE 失败，因为下列 SET 选项的设置不正确:&#8217;ARITHABORT&#8217;。请确保 SET 选项可正确用于计算列和/或查询通知和/或 xml 数据类型方法的索引视图和/或索引。”
报错显示，和ARITHABORT这个参数有关系，查看文档
&#160;
－－－－－－－－－－－－－－－文档分隔线－－－－－－－－－－－－
SET ARITHABORT
在查询执行过程中发生溢出或被零除错误时终止查询。
语法
SET ARITHABORT { ON &#124; OFF }
注释
如果 SET ARITHABORT 为 ON，则这些错误情况将导致查询或批处理终止。如果在事务内发生错误，则回滚事务。如果 SET ARITHABORT 为 OFF 并且发生了这些错误之一，则显示一条警告消息，并给算术运算的结果赋以空值。

说明&#160; 如果 SET ARITHABORT 和 SET ARITHIGNORE 都没有设置，则 Microsoft® SQL Server™ 将在执行查询后返回 NULL 和一条警告信息。
如果 SET ARITHABORT 为 OFF 并且在对表达式的求值过程中 INSERT、DELETE 或 UPDATE 语句遇到算术错误（溢出、被零除或域错误），SQL Server 将插入或更新 NULL 值。如果目标列不可为空，则插入或更新操作失败并且用户收到错误信息。
如果 SET ARITHABORT 或 SET ARITHIGNORE [...]]]></description>
			<content:encoded><![CDATA[<p>今天同事反应，一个用于监控的统计查询，最近有时会执行30秒超时，查询条件上原来就有索引的。为了减少查询时间，重建了一个索引，使用INCLUDE字句，在索引里冗余了一个数据字段。再执行原来的查询语句，果然快多了。本以为这件事就这样解决了，后来发现往这个统计表里入数据的作业失败了。报错“</p>
<p><strong>UPDATE 失败，因为下列 SET 选项的设置不正确:&#8217;ARITHABORT&#8217;。请确保 SET 选项可正确用于计算列和/或查询通知和/或 xml 数据类型方法的索引视图和/或索引。</strong>”</p>
<p>报错显示，和ARITHABORT这个参数有关系，查看文档</p>
<p>&#160;</p>
<p>－－－－－－－－－－－－－－－文档分隔线－－－－－－－－－－－－</p>
<p><a name="_set_arithabort"></a>SET ARITHABORT</p>
<p>在查询执行过程中发生溢出或被零除错误时终止查询。</p>
<h6>语法</h6>
<p>SET ARITHABORT { ON | OFF }</p>
<h6>注释</h6>
<p>如果 SET ARITHABORT 为 ON，则这些错误情况将导致查询或批处理终止。如果在事务内发生错误，则回滚事务。如果 SET ARITHABORT 为 OFF 并且发生了这些错误之一，则显示一条警告消息，并给算术运算的结果赋以空值。</p>
<p><img height="11" alt="" src="mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Books\tsqlref.chm::/Basics/note.gif" width="12" border="0" /></p>
<p><b>说明</b>&#160; 如果 SET ARITHABORT 和 SET ARITHIGNORE 都没有设置，则 Microsoft® SQL Server™ 将在执行查询后返回 NULL 和一条警告信息。</p>
<p>如果 SET ARITHABORT 为 OFF 并且在对表达式的求值过程中 INSERT、DELETE 或 UPDATE 语句遇到算术错误（溢出、被零除或域错误），SQL Server 将插入或更新 NULL 值。如果目标列不可为空，则插入或更新操作失败并且用户收到错误信息。</p>
<p>如果 SET ARITHABORT 或 SET ARITHIGNORE 为 OFF，并且 SET ANSI_WARNINGS 为 ON，则当遇到被零除或溢出错误时，SQL Server 仍返回错误信息。</p>
<p>SET ARITHABORT 的设置是在执行或运行时设置，而不是在分析时设置。</p>
<p>在计算列或索引视图上创建或操作索引时，SET ARITHABORT 必须为 ON。如果 SET ARITHABORT 为 OFF，计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。有关计算列上的索引视图和索引所必需的 SET 选项设置的更多信息，请参见 SET 中的&quot;使用 SET 语句时的注意事项&quot;。</p>
<p>－－－－－－－－－－－－－－－文档分隔线－－－－－－－－－－－－</p>
<p>看了文档，也想不明白为什么索引重建了，作业就失败。Google了一把，原来这个问题会出现在<strong>计算列和索引视图</strong>上。而我INCLUDE字段的恰好是计算列，于是问题就出现了。</p>
<p>修改作业里的步骤，在语句前面加入一行</p>
<blockquote><p>SET ARITHABORT ON</p>
</blockquote>
<p>再执行作业，就正常了。</p>
<p>－The End－</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2010/02/sqlserver_update_fail.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为表加字段时表被锁报错的解决方法</title>
		<link>http://www.nwafang.com/2009/12/ora_00054_table_lock.html</link>
		<comments>http://www.nwafang.com/2009/12/ora_00054_table_lock.html#comments</comments>
		<pubDate>Thu, 10 Dec 2009 12:52:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ORACLE]]></category>
		<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[oracle 00054 54 oracle 锁]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/2009/12/ora_00054_table_lock.html</guid>
		<description><![CDATA[今天在需要在开发数据库上加个字段，结果报错，报ORA-00054: resource busy and acquire with NOWAIT specified。
看到这个错误，原因很简单，估计是哪个同事打开表被锁定了。站起来吼了一声，没有人应，只好自己去杀进程了。
查杀进程，就要查到进程。
这个语句查看被锁定的对象，找到需要加字段的表    select /*+ rule */ * from dba_objects where object_id in (     select id1 from v$lock where type = &#8216;TM&#8217;);
这个查锁住这个对象的sid,其实可以把上面语句改成关联查询    select * from v$lock where type = &#8216;TM&#8217;;
查询这个sid是哪个人的，当然更主要是看SID,SERIAL#    select * from v$session where sid=126;
杀杀杀，或冲到锁表的同事那里让TA释放锁  [...]]]></description>
			<content:encoded><![CDATA[<p>今天在需要在开发数据库上加个字段，结果报错，报ORA-00054: resource busy and acquire with NOWAIT specified。</p>
<p>看到这个错误，原因很简单，估计是哪个同事打开表被锁定了。站起来吼了一声，没有人应，只好自己去杀进程了。</p>
<p>查杀进程，就要查到进程。</p>
<p>这个语句查看被锁定的对象，找到需要加字段的表    <br />select /*+ rule */ * from dba_objects where object_id in (     <br />select id1 from v$lock where type = &#8216;TM&#8217;);</p>
<p>这个查锁住这个对象的sid,其实可以把上面语句改成关联查询    <br />select * from v$lock where type = &#8216;TM&#8217;;</p>
<p>查询这个sid是哪个人的，当然更主要是看SID,SERIAL#    <br />select * from v$session where sid=126;</p>
<p>杀杀杀，或冲到锁表的同事那里让TA释放锁    <br />alter system kill session ‘126,2154’;</p>
<p>然后就顺利添加字段成功。</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/12/ora_00054_table_lock.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>火车站也为微软做广告了</title>
		<link>http://www.nwafang.com/2009/12/station_odbc_error.html</link>
		<comments>http://www.nwafang.com/2009/12/station_odbc_error.html#comments</comments>
		<pubDate>Mon, 07 Dec 2009 12:00:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[杂7杂8]]></category>
		<category><![CDATA[生活]]></category>
		<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[火车站 ODBC 微软]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/2009/12/%e7%81%ab%e8%bd%a6%e7%ab%99%e4%b9%9f%e4%b8%ba%e5%be%ae%e8%bd%af%e5%81%9a%e5%b9%bf%e5%91%8a%e4%ba%86.html</guid>
		<description><![CDATA[上周去昆山，回来时，看见火车站的大屏幕上有错误信息。仔细辨认好像是“ODBC 驱动程序不支持所需的属性”。图片如下
 
微软免费广告真是无处不在呀！
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>上周去昆山，回来时，看见火车站的大屏幕上有错误信息。仔细辨认好像是“ODBC 驱动程序不支持所需的属性”。图片如下</p>
<p><a href="http://www.nwafang.com/wp-content/uploads/2009/12/195727.png"><img title="195727" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="287" alt="195727" src="http://www.nwafang.com/wp-content/uploads/2009/12/195727_thumb.png" width="644" border="0" /></a> </p>
<p>微软免费广告真是无处不在呀！</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/12/station_odbc_error.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为自己的博客添加了验证码(reCAPTCHA)</title>
		<link>http://www.nwafang.com/2009/11/recaptcha4wp.html</link>
		<comments>http://www.nwafang.com/2009/11/recaptcha4wp.html#comments</comments>
		<pubDate>Thu, 05 Nov 2009 13:28:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[计算机技术]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/?p=142</guid>
		<description><![CDATA[reCAPTCHA 验证码　图形验证码 免费 验证服务]]></description>
			<content:encoded><![CDATA[<p>今天注册一个国外站点时，发现用的验证码是别人家的，下班后就研究了一下。发现原来是一个免费的服务。只要注册一下，就得到一个公钥和私钥，然后就可以使用了。发现还有人为WP博客开发个插件，于是就拿来主义了。</p>
<p>先看图</p>
<div class="mceTemp">
<dl id="attachment_145" class="wp-caption alignnone" style="width: 452px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-145" title="reCAPTCHA" src="http://www.nwafang.com/wp-content/uploads/2009/11/2009-11-05_213609.png" alt="reCAPTCHA" width="442" height="107" /></dt>
</dl>
</div>
<p>对这个服务的介绍就看这里吧。</p>
<p><a href="http://zh.wikipedia.org/wiki/ReCAPTCHA">http://zh.wikipedia.org/wiki/ReCAPTCHA</a> 或　<a href="http://baike.baidu.com/view/1944705.htm">http://baike.baidu.com/view/1944705.htm</a></p>
<p>官网:<a href="http://recaptcha.net/">http://recaptcha.net/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/11/recaptcha4wp.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开通了新浪微博</title>
		<link>http://www.nwafang.com/2009/09/sina_micro_blog.html</link>
		<comments>http://www.nwafang.com/2009/09/sina_micro_blog.html#comments</comments>
		<pubDate>Fri, 11 Sep 2009 14:01:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/?p=139</guid>
		<description><![CDATA[Twitter 新浪微博 微博 新浪 邀请]]></description>
			<content:encoded><![CDATA[<p>之前很多人在用Twitter时，因为都是被墙，虽然Twitter开放了API，不可能完全被封，但也没有去使用。</p>
<p>现在国内新浪也开始搞微博了，搞了个邀请码注册了一个。</p>
<p>我的新浪微博<a href="http://t.sina.com.cn/funcc">http://t.sina.com.cn/funcc</a></p>
<p>我现在还没有办法邀请别人注册，想获取邀请码的请点<a href="http://news.sina.com.cn/z/xlwbyqm/index.shtml" target="_blank">这里</a></p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/09/sina_micro_blog.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>家里安装了4M的新联通(网通)宽带</title>
		<link>http://www.nwafang.com/2009/09/cnc_4m_sh.html</link>
		<comments>http://www.nwafang.com/2009/09/cnc_4m_sh.html#comments</comments>
		<pubDate>Tue, 08 Sep 2009 12:46:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[宽带 联通 网通 上海 电信 ADSL FTTB]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/2009/09/%e5%ae%b6%e9%87%8c%e5%ae%89%e8%a3%85%e4%ba%864m%e7%9a%84%e6%96%b0%e8%81%94%e9%80%9a%e7%bd%91%e9%80%9a%e5%ae%bd%e5%b8%a6.html</guid>
		<description><![CDATA[因为我很少时间在家，家里一直也没有安装宽带。有时需要上网了，就用无线蹭下别人家的。无线连别人家的总归是不稳定的，于是打算安装宽带了。
安装宽带，首先想到的就是电信ADSL了。本人在上海，之前安装过有线通，那个速度真是太不稳定了，下载ORACLE最快达到过5MB/S，慢时网页打不开。可是跑到电信营业厅，报上小区的名称，电信说我们小区的线用完了，暂时还安装不了，要等一段时间，于是安装电信ADSL搁浅。
前不久，联通来小区打广告，安装宽带比电信的便宜，销售还说是FTTB+LAN方式的，上下行是对等带宽的。还说我们小区是附件第一个安装联通宽带的。我也信以为真了。因为在郊区，郊区版宽带便宜一点，我就申请了4M的宽带，交了钱等安装。终于在周末等到安装上门，看到安装人员手拿ADSL猫，我还纳闷。一问才知道，原来我安装的是联通的ADSL宽带，也就是网通ADSL，有种上当的感觉，不过比电信的便宜，看在价格的份上，我也没有多讲什么。唉，看来小白鼠也不好当。
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>因为我很少时间在家，家里一直也没有安装宽带。有时需要上网了，就用无线蹭下别人家的。无线连别人家的总归是不稳定的，于是打算安装宽带了。</p>
<p>安装宽带，首先想到的就是电信ADSL了。本人在上海，之前安装过有线通，那个速度真是太不稳定了，下载ORACLE最快达到过5MB/S，慢时网页打不开。可是跑到电信营业厅，报上小区的名称，电信说我们小区的线用完了，暂时还安装不了，要等一段时间，于是安装电信ADSL搁浅。</p>
<p>前不久，联通来小区打广告，安装宽带比电信的便宜，销售还说是FTTB+LAN方式的，上下行是对等带宽的。还说我们小区是附件第一个安装联通宽带的。我也信以为真了。因为在郊区，郊区版宽带便宜一点，我就申请了4M的宽带，交了钱等安装。终于在周末等到安装上门，看到安装人员手拿ADSL猫，我还纳闷。一问才知道，原来我安装的是联通的ADSL宽带，也就是网通ADSL，有种上当的感觉，不过比电信的便宜，看在价格的份上，我也没有多讲什么。唉，看来小白鼠也不好当。</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/09/cnc_4m_sh.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>买了台长虹液晶电视(LT40876 FHD)</title>
		<link>http://www.nwafang.com/2009/09/changhong_lt40876_fhd.html</link>
		<comments>http://www.nwafang.com/2009/09/changhong_lt40876_fhd.html#comments</comments>
		<pubDate>Tue, 08 Sep 2009 12:26:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[电视 长虹 LT40876 FHD 坏点检测 CHANGHONG]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/2009/06/%e4%b9%b0%e4%ba%86%e5%8f%b0%e9%95%bf%e8%99%b9%e6%b6%b2%e6%99%b6%e7%94%b5%e8%a7%86/</guid>
		<description><![CDATA[前几天在京东网上看到有一款电视特价，型号长虹 LT40876 FHD，当时搞特价3899元。家里刚装修好，手头也不宽裕，和LD商量，LD让我看着办，就决定入一台。之前看到有其他同志在淘宝网上先淘一张优惠券再入，我也效仿一下，花了30米在淘宝上淘了张3000-150的券。缺点是不能自己买，需要卖家代购，因为我是货到付款，也不担心。
等待了两天，电视终于在周日中午送到家了。本想迫不急待的打开，但看到京东上说建议让厂家来开箱。于是我就打箱子上的400电话，客服告诉我他们只管维修，不管开箱什么的，让我打厂家，问客服厂家电话，也不知道；在网上找到一个长虹的厂家电话，打电话过去，说可以自己拆箱，我说拆开有问题怎么办，又让我打400电话。严重BS一下长虹，售后做的真不怎样。最后自己开箱，还好没磕碰，加电开机也正常。
家里没有买电视之前是用显示器加电视盒看的电视，把电视盒上的有线电视线拔下，接到电视上，搜台，大约一分钟，台搜好了。浏览了几个频道，发现都不怎么清晰，有不少雪花，以前用显示器看时可能屏幕小，没怎么觉得。马上把早就买好了的秋叶原的双磁环有线电视成品线找出来接上，画面立马清晰了。爽！看来秋叶原的线材还真不是盖的，严重建议家里电视不是很清晰的网友换根线试试，最好是带双磁环的。
液晶屏有没有坏点是个重要指标，网友大部分都是接上电脑去测试的。因为这款有USB接口，可以放视频和图片，于是在电脑上用画图制作了5张图片(大小1920*1080，颜色：黑、白、红、绿、蓝)，把图片放在U盘里，插到电视上，看这5张图片，可能眼拙，没找到坏点，窃喜。
另外网上有网友说这款支持1080p，不过我看说明书，里面HDMI信号最佳为1080i，估计只支持1080i吧。
总的来说，这款电视还是不错的，价格便宜，性价比高。
&#8211;The End&#8211;
后记：最近下载了些RMVB的片子，用移动硬盘连接上去看电影，还真是不错，比较方便。
]]></description>
			<content:encoded><![CDATA[<p>前几天在<a href="http://www.360buy.com" target="_blank">京东网</a>上看到有一款电视特价，型号长虹 LT40876 FHD，当时搞特价3899元。家里刚装修好，手头也不宽裕，和LD商量，LD让我看着办，就决定入一台。之前看到有其他同志在<a href="http://www.taobao.com" target="_blank">淘宝</a>网上先淘一张优惠券再入，我也效仿一下，花了30米在淘宝上淘了张3000-150的券。缺点是不能自己买，需要卖家代购，因为我是货到付款，也不担心。</p>
<p>等待了两天，电视终于在周日中午送到家了。本想迫不急待的打开，但看到京东上说建议让厂家来开箱。于是我就打箱子上的400电话，客服告诉我他们只管维修，不管开箱什么的，让我打厂家，问客服厂家电话，也不知道；在网上找到一个长虹的厂家电话，打电话过去，说可以自己拆箱，我说拆开有问题怎么办，又让我打400电话。严重BS一下长虹，售后做的真不怎样。最后自己开箱，还好没磕碰，加电开机也正常。</p>
<p>家里没有买电视之前是用显示器加电视盒看的电视，把电视盒上的有线电视线拔下，接到电视上，搜台，大约一分钟，台搜好了。浏览了几个频道，发现都不怎么清晰，有不少雪花，以前用显示器看时可能屏幕小，没怎么觉得。马上把早就买好了的秋叶原的双磁环有线电视成品线找出来接上，画面立马清晰了。爽！看来秋叶原的线材还真不是盖的，<strong>严重建议家里电视不是很清晰的网友换根线试试，最好是带双磁环的</strong>。</p>
<p>液晶屏有没有坏点是个重要指标，网友大部分都是接上电脑去测试的。因为这款有USB接口，可以放视频和图片，于是在电脑上用画图制作了5张图片(大小1920*1080，颜色：黑、白、红、绿、蓝)，把图片放在U盘里，插到电视上，看这5张图片，可能眼拙，没找到坏点，窃喜。</p>
<p>另外网上有网友说这款支持1080p，不过我看说明书，里面HDMI信号最佳为1080i，估计只支持1080i吧。</p>
<p>总的来说，这款电视还是不错的，价格便宜，性价比高。</p>
<p>&#8211;The End&#8211;</p>
<p>后记：最近下载了些RMVB的片子，用移动硬盘连接上去看电影，还真是不错，比较方便。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/09/changhong_lt40876_fhd.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu挂载windows共享盘，解决中文乱码问题</title>
		<link>http://www.nwafang.com/2009/07/ubuntu_mount_windows_sharefolder.html</link>
		<comments>http://www.nwafang.com/2009/07/ubuntu_mount_windows_sharefolder.html#comments</comments>
		<pubDate>Mon, 27 Jul 2009 12:09:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[计算机技术]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/?p=132</guid>
		<description><![CDATA[Ubuntu mount windows 共享 中文 乱码 samba smbfs]]></description>
			<content:encoded><![CDATA[<p>现在Ubuntu比较火，我也安装了个玩玩。我下载的是700M的ISO，可能是精简版的，里面没有smbfs包，要mount windows上的共享文件，需要下载smbfs</p>
<blockquote><p>sudo apt-get install smbfs</p></blockquote>
<p>安装了samba文件系统的支持后就可以挂载windows共享盘了。</p>
<blockquote><p>sudo mount -t smbfs //192.168.1.101/e$ /mnt/ -o username=administrator,iocharset=utf8</p></blockquote>
<p>输入windows的administrator密码，就把//192.168.1.101/的e盘挂载到/mnt/下了。</p>
<p>加iocharset=utf8是可以正常显示windows下的中文文件名，告别乱码。</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/07/ubuntu_mount_windows_sharefolder.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>S1硬启、进三色方法</title>
		<link>http://www.nwafang.com/2009/07/s1_factorymode.html</link>
		<comments>http://www.nwafang.com/2009/07/s1_factorymode.html#comments</comments>
		<pubDate>Fri, 24 Jul 2009 06:33:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[多普达 S1 dopod 硬启 三色屏]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/?p=130</guid>
		<description><![CDATA[多普达 S1 dopod 硬启 三色屏]]></description>
			<content:encoded><![CDATA[<p>帮LD买了台多记的S1，了解一下S1硬启和进三色的方法，为以后刷机准备。</p>
<p>下面是多网上找来的。</p>
<p>S1 硬启(恢复原厂值) S1进入三色屏(工程模式)</p>
<p>S1 硬启方法：   <br />同时按住挂断和接听键，不要放手，然后用笔捅S1的小PP（捅一下就可以了）。（注意：捅完PP后左手不要放开按键）    <br />一直看到黑色屏幕上面出现英文字母，放开挂断和接听键，然后按一下导航键（中间的大方框），这样就完成硬启.</p>
<p>S1进入三色屏方法：   <br />按住相机键和开机键不放（一直不放），然后用用笔捅一下手机下侧的小孔（就是USB插口左侧的那个），然后等几秒钟，就会进入(三色屏 )</p>
<p>S1不捅PP一样能硬启、进三色屏</p>
<p>机器不能正常启动时，建议先试试按键硬启动方法恢复系统，效果同清除内存。   <br />1、同时按住 接听 和 挂断 键后，点按软启动键（电源键）， 按后释放    <br />2、继续按住 接听 和 挂断 键，直到出现硬启动界面    <br />3、按确认键（导航键）执行硬启动，按其他键取消硬启动。</p>
<p>其实就是电脑的系统还原或一键恢复功能。。。</p>
<p>如果无效，则只好看看能否进三色屏刷机了   <br />在关机状态下按住相机键，然后按软启动键（电源键）一下，同时注意不要放开按下的相机键。过几秒就进三色屏</p>
<p>这种方法比捅PP更方便，实际操作中发现，电源键和PP的效果是相同的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/07/s1_factorymode.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>全球条形码前三位查询</title>
		<link>http://www.nwafang.com/2009/06/global_barcode_area_ean-13.html</link>
		<comments>http://www.nwafang.com/2009/06/global_barcode_area_ean-13.html#comments</comments>
		<pubDate>Mon, 29 Jun 2009 09:31:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[条形码 前三位 前3位 690 EAN-13 BARCODE]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/2009/06/global_barcode_area_ean-13.html</guid>
		<description><![CDATA[在买到外国商品时有时不知道哪里生产的，除了看made in xxx以后， 还可以根据条形码查询，以下是从网上找到的全球厂商条形码的前三位
各编码组织所在国家（地区）&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 前缀码 各编码组织所在国家（地区）    00—13 美国和加拿大&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 609 毛里求斯     20—29 店内码（对无条码商品自行编码）&#160;&#160; 611 摩洛哥     30—37 法国&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 613 阿尔及利亚     380 保加利亚&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 619 突尼斯     383 斯洛文尼亚&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 622 埃及     385 克罗地亚&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 625 约旦   [...]]]></description>
			<content:encoded><![CDATA[<p>在买到外国商品时有时不知道哪里生产的，除了看made in xxx以后， 还可以根据条形码查询，以下是从网上找到的全球厂商条形码的前三位</p>
<p>各编码组织所在国家（地区）&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 前缀码 各编码组织所在国家（地区）    <br />00—13 美国和加拿大&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 609 毛里求斯     <br />20—29 店内码（对无条码商品自行编码）&#160;&#160; 611 摩洛哥     <br />30—37 法国&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 613 阿尔及利亚     <br />380 保加利亚&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 619 突尼斯     <br />383 斯洛文尼亚&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 622 埃及     <br />385 克罗地亚&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 625 约旦     <br />387 波黑&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 626 伊朗     <br />400—440 德国&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 64 芬兰     <br />45、49 日本&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 690—695 中国     <br />460—469 俄罗斯联邦&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 70 挪威     <br />471 中国台湾&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 729 以色列     <br />474 爱沙尼亚&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 73 瑞典     <br />475 拉脱维亚&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 740 危地马拉     <br />477 立陶宛&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 741 萨尔瓦多     <br />479 斯里兰卡&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 742、744 洪都拉斯、哥斯达黎加     <br />480 菲律宾&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 743 尼加拉瓜     <br />481 白俄罗斯&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 745 巴拿马     <br />482 乌克兰&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 746 多米尼加     <br />484 摩尔多瓦&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 750 墨西哥     <br />485 亚美尼亚&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 759 委内瑞拉     <br />486 格鲁吉亚&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 76 瑞士     <br />487 哈萨克斯坦&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 770 哥伦比亚     <br />489 中国香港&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 773 乌拉圭     <br />50 英国&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 775 秘鲁     <br />520 希腊&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 777 玻利维亚     <br />528 黎巴嫩&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 779 阿根廷     <br />529 塞浦路斯&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 780 智利     <br />531 马其顿&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 784 巴拉圭     <br />535 马耳他&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 786 厄瓜多尔     <br />539 爱尔兰&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 789 巴西     <br />54 比利时和卢森堡&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 80—83 意大利     <br />560 葡萄牙&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 84 西班牙     <br />569 冰岛&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 850 古巴     <br />57 丹麦&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 858 斯洛伐克     <br />590 波兰&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 859 捷克     <br />594 罗马尼亚&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 860 南斯拉夫     <br />599 匈牙利&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 869 土耳其     <br />600—601 南非&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 893 越南     <br />87 荷兰&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 899 印度尼西亚     <br />880 韩国&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 90、91 奥地利     <br />885 泰国&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 93 澳大利亚     <br />888 新加坡&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 94 新西兰     <br />890 印度&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 955 马来西亚</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/06/global_barcode_area_ean-13.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从RMAN备份文件中恢复出归档日志文件</title>
		<link>http://www.nwafang.com/2009/06/restore_archivelog_from_rman_backup.html</link>
		<comments>http://www.nwafang.com/2009/06/restore_archivelog_from_rman_backup.html#comments</comments>
		<pubDate>Thu, 25 Jun 2009 05:53:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ORACLE]]></category>
		<category><![CDATA[RMAN Logmnr archivelog]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/2009/06/%e4%bb%8e%e5%a4%87%e4%bb%bd%e6%96%87%e4%bb%b6%e4%b8%ad%e6%81%a2%e5%a4%8d%e5%87%ba%e5%bd%92%e6%a1%a3%e6%97%a5%e5%bf%97%e6%96%87%e4%bb%b6.html</guid>
		<description><![CDATA[今天打算使用DBMS_Logmnr包恢复些数据看看，不过归档日志在RMAN备份完后被删除了。我用DBMS_Logmnr分析备份的归档文件时报错。
SQL&#62; exec dbms_logmnr.add_logfile(&#8217;/u02/rman/arch_db1_20090624_29_1&#8242;,DBMS_LOGMNR.NEW);      BEGIN dbms_logmnr.add_logfile(&#8217;/u02/rman/arch_db1_20090624_29_1&#8242;,DBMS_LOGMNR.NEW); END; 
*      ERROR at line 1:       ORA-01284: file /u02/rman/arch_db1_20090624_29_1 cannot be opened       ORA-00317: file type 0 in header is not log file       [...]]]></description>
			<content:encoded><![CDATA[<p>今天打算使用DBMS_Logmnr包恢复些数据看看，不过归档日志在RMAN备份完后被删除了。我用DBMS_Logmnr分析备份的归档文件时报错。</p>
<blockquote><p>SQL&gt; exec dbms_logmnr.add_logfile(&#8217;/u02/rman/arch_db1_20090624_29_1&#8242;,DBMS_LOGMNR.NEW);      <br />BEGIN dbms_logmnr.add_logfile(&#8217;/u02/rman/arch_db1_20090624_29_1&#8242;,DBMS_LOGMNR.NEW); END; </p>
<p>*      <br />ERROR at line 1:       <br />ORA-01284: file /u02/rman/arch_db1_20090624_29_1 cannot be opened       <br />ORA-00317: file type 0 in header is not log file       <br />ORA-00334: archived log: /u02/rman/arch_db1_20090624_29_1       <br />ORA-06512: at &quot;SYS.DBMS_LOGMNR&quot;, line 68       <br />ORA-06512: at line 1</p>
</blockquote>
<p>看来Logmnr是无法识别备文件的，只有把归档文件从备份文件中还原出来才可以。查了下文档，用RMAN是可以搞定的。</p>
<blockquote><p>RMAN&gt; run      <br />2&gt; {       <br />3&gt; SET ARCHIVELOG DESTINATION TO &#8216;/u02/archive&#8217;;       <br />4&gt; restore archivelog sequence between 65 and 67;       <br />5&gt; } </p>
<p>executing command: SET ARCHIVELOG DESTINATION      <br />using target database control file instead of recovery catalog </p>
<p>Starting restore at 24-JUN-09      <br />allocated channel: ORA_DISK_1       <br />channel ORA_DISK_1: sid=142 devtype=DISK </p>
<p>channel ORA_DISK_1: starting archive log restore to user-specified destination      <br />archive log destination=/u02/archive       <br />channel ORA_DISK_1: restoring archive log       <br />archive log thread=1 sequence=65       <br />channel ORA_DISK_1: restoring archive log       <br />archive log thread=1 sequence=66       <br />channel ORA_DISK_1: restoring archive log       <br />archive log thread=1 sequence=67       <br />channel ORA_DISK_1: reading from backup piece /u02/rman/arch_db1_20090624_29_1       <br />channel ORA_DISK_1: restored backup piece 1       <br />piece handle=/u02/rman/arch_db1_20090624_29_1 tag=TAG20090624T154331       <br />channel ORA_DISK_1: restore complete, elapsed time: 00:00:27       <br />Finished restore at 24-JUN-09</p>
</blockquote>
<p>这样就在目录/u02/archive里还原了65-67三个序号的归档文件。接着就可以用DBMS_Logmnr分析日志了。</p>
<p>exec dbms_logmnr.add_logfile(&#8217;/u02/archive/arch_1_65.dbf&#8217;,DBMS_LOGMNR.NEW);    <br />exec dbms_logmnr.add_logfile(&#8217;/u02/archive/arch_1_66.dbf&#8217;,DBMS_LOGMNR.addfile);     <br />exec dbms_logmnr.add_logfile(&#8217;/u02/archive/arch_1_67.dbf&#8217;,DBMS_LOGMNR.addfile); </p>
<p>begin    <br />dbms_logmnr.start_logmnr(options=&gt;dbms_logmnr.dict_from_online_catalog);     <br />end; </p>
<p>select * from v$logmnr_contents</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/06/restore_archivelog_from_rman_backup.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>注册搜索引擎BAIDU，GOOGLE</title>
		<link>http://www.nwafang.com/2009/06/addurl_to_google_baidu.html</link>
		<comments>http://www.nwafang.com/2009/06/addurl_to_google_baidu.html#comments</comments>
		<pubDate>Fri, 19 Jun 2009 08:29:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[注册百度 注册google 搜索引擎]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/2009/06/%e6%b3%a8%e5%86%8c%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8ebaidu%ef%bc%8cgoogle/</guid>
		<description><![CDATA[终于自己申请了个域名，下载了个WP开博客了。
因为站太小，几乎没有外部链接会连进来，为了能想搜索引擎光顾自己的博客，可以自己到搜索引擎上去注册，注册过程是免费的。
Google的注册地址    http://www.google.com/addurl.html
Baidu的注册地址    http://www.baidu.com/search/url_submit.html
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>终于自己申请了个域名，下载了个WP开博客了。</p>
<p>因为站太小，几乎没有外部链接会连进来，为了能想搜索引擎光顾自己的博客，可以自己到搜索引擎上去注册，注册过程是免费的。</p>
<p>Google的注册地址    <br /><a href="http://www.google.com/addurl.html">http://www.google.com/addurl.html</a></p>
<p>Baidu的注册地址    <br /><a href="http://www.baidu.com/search/url_submit.html">http://www.baidu.com/search/url_submit.html</a></p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/06/addurl_to_google_baidu.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>跟踪RMAN的执行过程，查找RMAN过程中的问题</title>
		<link>http://www.nwafang.com/2009/06/rman_trace.html</link>
		<comments>http://www.nwafang.com/2009/06/rman_trace.html#comments</comments>
		<pubDate>Fri, 19 Jun 2009 06:36:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ORACLE]]></category>
		<category><![CDATA[RMAN ORA-19587]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/2009/06/%e8%b7%9f%e8%b8%aarman%e7%9a%84%e6%89%a7%e8%a1%8c%e8%bf%87%e7%a8%8b%ef%bc%8c%e6%9f%a5%e6%89%berman%e8%bf%87%e7%a8%8b%e4%b8%ad%e7%9a%84%e9%97%ae%e9%a2%98/</guid>
		<description><![CDATA[今天查看RMAN备份的日志，发现里面有报错，进一步查看是RMAN在删除过期备份时报的错。错误信息如下。
RMAN-00571: ===========================================================     RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============      RMAN-00571: ===========================================================      RMAN-03009: failure of delete command on ORA_DISK_1 channel at 06/19/2009 09:15:55      ORA-19587: error occurred reading 16384 bytes at block number 1     [...]]]></description>
			<content:encoded><![CDATA[<p>今天查看RMAN备份的日志，发现里面有报错，进一步查看是RMAN在删除过期备份时报的错。错误信息如下。</p>
<blockquote><p>RMAN-00571: ===========================================================     <br />RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============      <br />RMAN-00571: ===========================================================      <br />RMAN-03009: failure of delete command on ORA_DISK_1 channel at 06/19/2009 09:15:55      <br />ORA-19587: error occurred reading 16384 bytes at block number 1      <br />ORA-27091: unable to queue I/O      <br />ORA-27069: attempt to do I/O beyond the range of the file      <br />Additional information: 1      <br />Additional information: 1</p>
</blockquote>
<p>看到这个消息，首先想会不会是硬盘有问题了。因不是删除文件，所以不会是空间满了。查看硬盘状况，还有很大的剩余空间。</p>
<p>于是打开trace进入RMAN</p>
<blockquote><p>$ rman target = / trace rman.trc debug</p>
<p>Recovery Manager: Release 10.2.0.4.0 &#8211; Production on Fri Jun 19 14:01:16 2009</p>
<p>Copyright (c) 1982, 2007, Oracle.&#160; All rights reserved.</p>
<p>RMAN-06005: connected to target database: PAYMENT (DBID=938111124)</p>
<p>RMAN&gt; list copy;</p>
<p>RMAN-06009: using target database control file instead of recovery catalog     <br />RMAN-20242: specification does not match any archive log in the recovery catalog      <br />RMAN-06365: List of Control File Copies      <br />RMAN-06366: Key&#160;&#160;&#160;&#160; S Completion Time Ckp SCN&#160;&#160;&#160; Ckp Time&#160;&#160;&#160;&#160;&#160;&#160;&#160; Name      <br />RMAN-06367: &#8212;&#8212;- &#8211; &#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212; &#8212;-      <br />RMAN-06368: 36&#160;&#160;&#160;&#160;&#160; A 19-JUN-09&#160;&#160;&#160;&#160;&#160;&#160; 44248899&#160;&#160; 19-JUN-09&#160;&#160;&#160;&#160;&#160;&#160; /u02/oradata/rman/backup/2009-06-19/control.bak      <br />RMAN-06368: 35&#160;&#160;&#160;&#160;&#160; A 18-JUN-09&#160;&#160;&#160;&#160;&#160;&#160; 41511256&#160;&#160; 18-JUN-09&#160;&#160;&#160;&#160;&#160;&#160; /u02/oradata/rman/backup/2009-06-18/control.bak      <br />RMAN-06368: 34&#160;&#160;&#160;&#160;&#160; A 17-JUN-09&#160;&#160;&#160;&#160;&#160;&#160; 39981536&#160;&#160; 17-JUN-09&#160;&#160;&#160;&#160;&#160;&#160; /u02/oradata/rman/backup/2009-06-17/control.bak      <br />RMAN-06368: 33&#160;&#160;&#160;&#160;&#160; A 16-JUN-09&#160;&#160;&#160;&#160;&#160;&#160; 39213838&#160;&#160; 16-JUN-09&#160;&#160;&#160;&#160;&#160;&#160; /u02/oradata/rman/backup/2009-06-16/control.bak</p>
<p>RMAN&gt; crosscheck copy;</p>
<p>RMAN-08030: allocated channel: ORA_DISK_1     <br />RMAN-08605: channel ORA_DISK_1: sid=1134 instance=payment1 devtype=DISK      <br />RMAN-20242: specification does not match any archive log in the recovery catalog      <br />RMAN-06156: validation succeeded for control file copy      <br />RMAN-08516: control file copy filename=/u02/oradata/rman/backup/2009-06-19/control.bak recid=36 stamp=689937350      <br />RMAN-06156: validation succeeded for control file copy      <br />RMAN-08516: control file copy filename=/u02/oradata/rman/backup/2009-06-18/control.bak recid=35 stamp=689850796      <br />RMAN-00571: ===========================================================      <br />RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============      <br />RMAN-00571: ===========================================================      <br />RMAN-03009: failure of crosscheck command on ORA_DISK_1 channel at 06/19/2009 14:01:50      <br />ORA-19587: error occurred reading 16384 bytes at block number 1      <br />ORA-27091: unable to queue I/O      <br />ORA-27069: attempt to do I/O beyond the range of the file      <br />Additional information: 1      <br />Additional information: 1</p>
<p>RMAN&gt; exit</p>
</blockquote>
<p>发现在查检 /u02/oradata/rman/backup/2009-06-17/control.bak 时中断报错了。打开rman.trc，也的确在检查 /u02/oradata/rman/backup/2009-06-17/control.bak 文件处报ORA-19587</p>
<blockquote><p>……     <br />DBGPLSQL:&#160;&#160; channel ORA_DISK_1:&#160; processing (file/handle=/u02/oradata/rman/backup/2009-06-17/control.bak,recid=34, old_status=A, hdl_isdisk=0, devicetype=DISK) [14:01:49.998] (change)      <br />DBGPLSQL:&#160;&#160; channel ORA_DISK_1:&#160; force: 0 [14:01:49.998] (change)      <br />DBGRPC:&#160;&#160;&#160;&#160; krmxrpc: xc=182924940192 kpurpc2 rc=19587 db=target proc=DBMS_BACKUP_RESTORE.VALIDATEDATAFILECOPY      <br />DBGRPC:&#160;&#160;&#160;&#160; krmxrpc: xc=182924940192 chid=ORA_DISK_1 increment rpc count=8      <br />DBGMISC:&#160;&#160;&#160; krmqexe: unhandled exception on channel ORA_DISK_1 [14:01:50.004]      <br />DBGMISC:&#160;&#160;&#160; error recovery releasing channel resources [14:01:50.004]      <br />……</p>
</blockquote>
<p>查看大小，发现是0字节</p>
<blockquote><p>$ ls -lh /u02/oradata/rman/backup/2009-06-17/control.bak     <br />-rw-r&#8211;r&#8211;&#160; 1 oracle oinstall 0 Jun 19 14:00 /u02/oradata/rman/backup/2009-06-17/control.bak</p>
</blockquote>
<p>把这个文件删除，再执行crosscheck copy;就正常了。</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/06/rman_trace.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows与Linux使用NFS进行文件共享</title>
		<link>http://www.nwafang.com/2009/06/windows_linux_fileshare.html</link>
		<comments>http://www.nwafang.com/2009/06/windows_linux_fileshare.html#comments</comments>
		<pubDate>Tue, 16 Jun 2009 02:24:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[NFS]]></category>
		<category><![CDATA[NFS共享]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[文件共享]]></category>

		<guid isPermaLink="false">http://www.nwafang.com/?p=109</guid>
		<description><![CDATA[Windows和Linux之间文件共享主要有两类方法，一类是使用Windows共享文件的协议，Linux下需要使用SAMBA；另一类是使用Linux共享协议，Windows需要安装支持NFS协议的软件。
因为通常发行版Linux里自带SAMBA，所以用SAMBA还是比较方便的，不过对于有些Linux系统，特别是一些嵌入式Linux系统，因为没有SAMBA，不过NFS还是支持的，这时如果想访问Windows共享文件，只能使Windows支持NFS协议了。
在Windows上安装NFS协议的软件有
SFU：微软出的，好像免费了，只是文件太大，没下载。
omni-nfs:文件不到10M，收费。
HummingBird nfs：好像也收费
nfsAXE：收费
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>Windows和Linux之间文件共享主要有两类方法，一类是使用Windows共享文件的协议，Linux下需要使用SAMBA；另一类是使用Linux共享协议，Windows需要安装支持NFS协议的软件。<br />
因为通常发行版Linux里自带SAMBA，所以用SAMBA还是比较方便的，不过对于有些Linux系统，特别是一些嵌入式Linux系统，因为没有SAMBA，不过NFS还是支持的，这时如果想访问Windows共享文件，只能使Windows支持NFS协议了。<br />
在Windows上安装NFS协议的软件有<br />
SFU：微软出的，好像免费了，只是文件太大，没下载。<br />
omni-nfs:文件不到10M，收费。<br />
HummingBird nfs：好像也收费<br />
nfsAXE：收费</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/06/windows_linux_fileshare.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转]大量小文件的实时同步方案</title>
		<link>http://www.nwafang.com/2009/04/sync_many_small_files.html</link>
		<comments>http://www.nwafang.com/2009/04/sync_many_small_files.html#comments</comments>
		<pubDate>Mon, 13 Apr 2009 20:34:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2009/04/%e5%a4%a7%e9%87%8f%e5%b0%8f%e6%96%87%e4%bb%b6%e7%9a%84%e5%ae%9e%e6%97%b6%e5%90%8c%e6%ad%a5%e6%96%b9%e6%a1%88/</guid>
		<description><![CDATA[转自：http://blog.daviesliu.net/2008/04/24/sync/
传统的文件同步方案有rsync(单向) 和 unison(双向)等，它们需要扫描所有文件后进行比对，差量传输。如果文件数量达到了百万甚至千万量级，扫描所有文件将非常耗时。而且正在发生变化的往往是其中很少的一部分，这是非常低效的方式。
之前看了Amazon的Dynamo的设计文档，它们每个节点的数据是通过Hash Tree来实现同步，既有通过日志来同步的软实时特点(msyql, bdb等)，也可以保证最终数据的一致性(rsync, unison等)。Hash Tree的大体思路是将所有数据存储成树状结构，每个节点的Hash是其所有子节点的Hash的Hash，叶子节点的Hash是其内容的Hash。这样一旦某个节点发生变化，其Hash的变化会迅速传播到根节点。需要同步的系统只需要不断查询跟节点的hash，一旦有变化，顺着树状结构就能够在logN级别的时间找到发生变化的内容，马上同步。
文件系统天然的是树状结构，尽管不是平衡的数。如果文件的修改时间是可靠的，可以表征文件的变化，那就可以用它作为文件的Hash值。另一方面，文件的修改通常是按顺序执行的，后修改的文件比早修改的文件具有更大的修改时间，这样就可以把一个目录内的最大修改时间作为它的修改时间，以实现Hash Tree。这样，一旦某个文件被修改，修改时间的信息就会迅速传播到根目录。
一般的文件系统都不是这样做的，目录的修改时间表示的是目录结构最后发生变化的时间，不包括子目录，否则会不堪重负。因为我们需要自己实现这个功能，利用Linux 2.6内核的新特性inotify获得某个目录内文件发生变化的信息，并把其修改时间传播到它的上级目录(以及再上级目录)。Python 有 pyinotify，watch.py的代码如下：
#!/usr/bin/python
from pyinotify import *
import os, os.path
flags = IN_CLOSE_WRITE&#124;IN_CREATE&#124;IN_Q_OVERFLOW
dirs = {}
base = &#8216;/log/lighttpd/cache/images/icon/u241&#8242;
base = &#8216;tmp&#8217;
class UpdateParentDir(ProcessEvent):
    def process_IN_CLOSE_WRITE(self, event):
        print &#8216;modify&#8217;, event.pathname
        mtime = os.path.getmtime(event.pathname)
        p = event.path
        while p.startswith(base):
            m = os.path.getmtime(p)
            if m &#60; mtime:
             print &#8216;update&#8217;, p
                os.utime(p, (mtime,mtime))
            elif m &#62; [...]]]></description>
			<content:encoded><![CDATA[<p>转自：<a href="http://blog.daviesliu.net/2008/04/24/sync/">http://blog.daviesliu.net/2008/04/24/sync/</a></p>
<p>传统的文件同步方案有rsync(单向) 和 unison(双向)等，它们需要扫描所有文件后进行比对，差量传输。如果文件数量达到了百万甚至千万量级，扫描所有文件将非常耗时。而且正在发生变化的往往是其中很少的一部分，这是非常低效的方式。</p>
<p>之前看了Amazon的Dynamo的设计文档，它们每个节点的数据是通过Hash Tree来实现同步，既有通过日志来同步的软实时特点(msyql, bdb等)，也可以保证最终数据的一致性(rsync, unison等)。Hash Tree的大体思路是将所有数据存储成树状结构，每个节点的Hash是其所有子节点的Hash的Hash，叶子节点的Hash是其内容的Hash。这样一旦某个节点发生变化，其Hash的变化会迅速传播到根节点。需要同步的系统只需要不断查询跟节点的hash，一旦有变化，顺着树状结构就能够在logN级别的时间找到发生变化的内容，马上同步。</p>
<p>文件系统天然的是树状结构，尽管不是平衡的数。如果文件的修改时间是可靠的，可以表征文件的变化，那就可以用它作为文件的Hash值。另一方面，文件的修改通常是按顺序执行的，后修改的文件比早修改的文件具有更大的修改时间，这样就可以把一个目录内的最大修改时间作为它的修改时间，以实现Hash Tree。这样，一旦某个文件被修改，修改时间的信息就会迅速传播到根目录。</p>
<p>一般的文件系统都不是这样做的，目录的修改时间表示的是目录结构最后发生变化的时间，不包括子目录，否则会不堪重负。因为我们需要自己实现这个功能，利用Linux 2.6内核的新特性inotify获得某个目录内文件发生变化的信息，并把其修改时间传播到它的上级目录(以及再上级目录)。Python 有 pyinotify，watch.py的代码如下：</p>
<p>#!/usr/bin/python</p>
<p>from pyinotify import *<br />
import os, os.path</p>
<p>flags = IN_CLOSE_WRITE|IN_CREATE|IN_Q_OVERFLOW<br />
dirs = {}<br />
base = &#8216;/log/lighttpd/cache/images/icon/u241&#8242;<br />
base = &#8216;tmp&#8217;</p>
<p>class UpdateParentDir(ProcessEvent):<br />
    def process_IN_CLOSE_WRITE(self, event):<br />
        print &#8216;modify&#8217;, event.pathname<br />
        mtime = os.path.getmtime(event.pathname)<br />
        p = event.path<br />
        while p.startswith(base):<br />
            m = os.path.getmtime(p)<br />
            if m &lt; mtime:<br />
             print &#8216;update&#8217;, p<br />
                os.utime(p, (mtime,mtime))<br />
            elif m &gt; mtime:<br />
                mtime = m<br />
            p = os.path.dirname(p)<br />
   <br />
    process_IN_MODIFY = process_IN_CLOSE_WRITE</p>
<p>    def process_IN_Q_OVERFLOW(self, event):<br />
        print &#8216;over flow&#8217;<br />
        max_queued_events.value *= 2</p>
<p>    def process_default(self, event):<br />
    pass</p>
<p>wm = WatchManager()<br />
notifier = Notifier(wm, UpdateParentDir())<br />
dirs.update(wm.add_watch(base, flags, rec=True, auto_add=True))</p>
<p>notifier.loop()</p>
<p>在已经有Hash Tree的时候，同步就比较简单了，不停地获取根目录的修改时间并顺着目录结构往下找即可。需要注意的是，在更新完文件后，需要设置修改时间为原文件的修改时间，目录也是，保证Hash Tree的一致性，否则没法同步。mirror.py的代码如下</p>
<p>#!/usr/bin/python</p>
<p>import sys,time,re,urllib<br />
import os,os.path<br />
from os.path import exists, isdir, getmtime</p>
<p>src = sys.argv[1]<br />
dst = sys.argv[2]</p>
<p>def local_mirror(src, dst):<br />
    if exists(dst) and mtime == getmtime(dst):<br />
        return<br />
    if not isdir(src):<br />
        print &#8216;update:&#8217;, dst<br />
        open(dst,&#8217;wb&#8217;).write(open(src).read())<br />
    else:<br />
        if not exists(dst):<br />
            os.makedirs(dst)<br />
        for filename in os.listdir(src):<br />
            local_mirror(os.path.join(src,filename), os.path.join(dst,filename))<br />
    os.utime(dst, (mtime,mtime))</p>
<p>def get_info(path):<br />
    f = urllib.urlopen(path)<br />
    mtime = f.headers.get(&#8217;Last-Modified&#8217;)<br />
    if mtime:<br />
        mtime = time.mktime(time.strptime(mtime, &#8216;%a, %d %b %Y %H:%M:%S %Z&#8217;))<br />
    content = f.read()<br />
    f.close()<br />
    return int(mtime), content</p>
<p>p = re.compile(r&#8217;([\d.]+?) +([\w/]+)&#8217;)</p>
<p>def remote_mirror(src, dst):<br />
    mtime, content = get_info(src)<br />
    if exists(dst) and mtime == int(getmtime(dst)):<br />
        return<br />
    print &#8216;update:&#8217;, dst, src<br />
    if not src.endswith(&#8217;/'):<br />
        open(dst,&#8217;wb&#8217;).write(content)<br />
    else:<br />
        if not exists(dst):<br />
            os.makedirs(dst)<br />
        for mt,filename in p.findall(content):<br />
            mt = int(float(mt))<br />
            lpath = dst+filename<br />
            if not exists(lpath) or int(getmtime(lpath)) != mt:<br />
                remote_mirror(src+filename, lpath)<br />
    os.utime(dst, (mtime,mtime))</p>
<p>if src.startswith(&#8217;http://&#8217;):<br />
    mirror = remote_mirror<br />
else:<br />
    mirror = local_mirror</p>
<p>while True:<br />
    mirror(src, dst)<br />
    time.sleep(1)<br />
如果源文件不在同一台机器上，可以通过NFS等共享过来。或者可以通过支持列目录的HTTP服务器来访问远程目录，mirror.py 已经支持这种访问方式。server.py 是用webpy做的一个简单的只是列目录的文件服务器。由于瓶颈在IO上，它的性能不是关键。server.py的代码如下：<br />
#!/usr/bin/python</p>
<p>import os,os.path<br />
import web<br />
import time</p>
<p>root = &#8216;tmp&#8217;</p>
<p>HTTP_HEADER_TIME = &#8216;%a, %d %b %Y %H:%M:%S %Z&#8217;</p>
<p>class FileServer:<br />
    def GET(self, path):<br />
        path = root + path<br />
        if not os.path.exists(path):<br />
            return 404<br />
        mtime = time.localtime(os.path.getmtime(path))<br />
        web.header(&#8217;Last-Modified&#8217;, time.strftime(HTTP_HEADER_TIME, mtime))<br />
        if os.path.isdir(path):<br />
            for file in os.listdir(path):<br />
                if file.startswith(&#8217;.'): continue<br />
                p = os.path.join(path,file)<br />
                m = os.path.getmtime(p)<br />
                if os.path.isdir(p):<br />
                    file += &#8216;/&#8217;<br />
                print m, file<br />
        else:<br />
            print open(path,&#8217;rb&#8217;).read()</p>
<p>urls = (<br />
   &#8220;(/.*)&#8221;, &#8220;FileServer&#8221;,<br />
)</p>
<p>if __name__ == &#8216;__main__&#8217;:<br />
    web.run(urls, globals())</p>
<p>为了获得更好性能，以达到更好的实时性，Hash Tree最好是平衡的，比如BTree。如果一个文件发生变化，同步它需要进行的IO操作为N*M，其中N为数的层数，M为每层的文件数目。现在我们N为2，M最大为10000，适当减少它可以获得更好的性能，比如N为4，M为100。在以后创建目录结构时，最好能够考虑这方面的因素。</p>
<p>之前hongqn推荐过一个利用inotify的文件同步方案，同步方式类似于mysql和bdb等，由于过于复杂导致不可靠而没有采用。上面这个方案只用了一百多行Python代码就基本解决问题了，是不是很帅？:-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/04/sync_many_small_files.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google浏览器Chrome离线下载</title>
		<link>http://www.nwafang.com/2009/03/chrome_download.html</link>
		<comments>http://www.nwafang.com/2009/03/chrome_download.html#comments</comments>
		<pubDate>Tue, 24 Mar 2009 11:28:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2009/03/google%e6%b5%8f%e8%a7%88%e5%99%a8chrome%e7%a6%bb%e7%ba%bf%e4%b8%8b%e8%bd%bd/</guid>
		<description><![CDATA[Chrome出来有一段时间了，或到Google上只找到在线安装版，搜索了一下，发现是有离线安装包的，地址如下
http://www.google.com/chrome/thankyou.html?standalone=1
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>Chrome出来有一段时间了，或到Google上只找到在线安装版，搜索了一下，发现是有离线安装包的，地址如下</p>
<p>http://www.google.com/chrome/thankyou.html?standalone=1</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/03/chrome_download.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python路径搜索</title>
		<link>http://www.nwafang.com/2009/02/python_pathseach.html</link>
		<comments>http://www.nwafang.com/2009/02/python_pathseach.html#comments</comments>
		<pubDate>Fri, 20 Feb 2009 10:23:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2009/02/python%e8%b7%af%e5%be%84%e6%90%9c%e7%b4%a2/</guid>
		<description><![CDATA[PYTHON　路径搜索
15.3 How Imports Work
The module search path:
1&#62; The home directory of the top-level file.
2&#62; PYTHONPATH directories (if set).
3&#62; Standard library directories.
4&#62; The contents of any .pth files (if present).
&#8212;From &#60;&#60;Learning Python, 2E.chm&#62;&#62; 15.3 How Imports Work
也可以使用sys.path.append()来手动添加路径
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>PYTHON　路径搜索</p>
<p>15.3 How Imports Work<br />
The module search path:</p>
<p>1&gt; The home directory of the top-level file.<br />
2&gt; PYTHONPATH directories (if set).<br />
3&gt; Standard library directories.<br />
4&gt; The contents of any .pth files (if present).</p>
<p>&#8212;From &lt;&lt;Learning Python, 2E.chm&gt;&gt; 15.3 How Imports Work</p>
<p>也可以使用sys.path.append()来手动添加路径</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/02/python_pathseach.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>免费SVN</title>
		<link>http://www.nwafang.com/2009/02/free_svn.html</link>
		<comments>http://www.nwafang.com/2009/02/free_svn.html#comments</comments>
		<pubDate>Fri, 06 Feb 2009 15:30:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2009/02/%e5%85%8d%e8%b4%b9svn/</guid>
		<description><![CDATA[发现一个免费的SVN，提供100M的空间，对于个人的小项目够用了。
http://code.svnspot.com/
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>发现一个免费的SVN，提供100M的空间，对于个人的小项目够用了。</p>
<p><a href="http://code.svnspot.com/">http://code.svnspot.com/</a></p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/02/free_svn.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web版Cron收录</title>
		<link>http://www.nwafang.com/2009/01/web_cron.html</link>
		<comments>http://www.nwafang.com/2009/01/web_cron.html#comments</comments>
		<pubDate>Thu, 22 Jan 2009 14:41:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2009/01/web%e7%89%88cron%e6%94%b6%e5%bd%95/</guid>
		<description><![CDATA[对于有的网站需要定时执行某项操作，可又不能运行Crontab或计划任务，可以考虑使用Web的定时访问页面。发现有网站提供这样的服务。
http://watchthatpage.com/
http://scheduler.webgrid.com/default.aspx
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>对于有的网站需要定时执行某项操作，可又不能运行Crontab或计划任务，可以考虑使用Web的定时访问页面。发现有网站提供这样的服务。</p>
<p><a href="http://watchthatpage.com/">http://watchthatpage.com/</a></p>
<p><a href="http://scheduler.webgrid.com/default.aspx">http://scheduler.webgrid.com/default.aspx</a></p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2009/01/web_cron.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PSP升级到5.00M33-4</title>
		<link>http://www.nwafang.com/2008/12/psp_update_500m33-4.html</link>
		<comments>http://www.nwafang.com/2008/12/psp_update_500m33-4.html#comments</comments>
		<pubDate>Mon, 15 Dec 2008 09:25:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/12/psp%e5%8d%87%e7%ba%a7%e5%88%b0500m33-4/</guid>
		<description><![CDATA[我的PSP从最早的1.5版到后来的3.90M33,一直都用的先好，后来因为记忆棒的空间太小，换成8G的TF卡加卡套，虽然用着也正常，但有时进游戏会死掉。听网上说5.00版对8G的兼容性好一点，这个周末就下载了个5.00的ROM去升级了。升级过程很简单，5分钟左右就搞定了，刚玩了一会，还没死机。不知道是不会死机了，还是死机没碰到。
更新：升级到5.00M33-4还是会出来兼容性问题。
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>我的PSP从最早的1.5版到后来的3.90M33,一直都用的先好，后来因为记忆棒的空间太小，换成8G的TF卡加卡套，虽然用着也正常，但有时进游戏会死掉。听网上说5.00版对8G的兼容性好一点，这个周末就下载了个5.00的ROM去升级了。升级过程很简单，5分钟左右就搞定了，刚玩了一会，还没死机。不知道是不会死机了，还是死机没碰到。</p>
<p>更新：升级到5.00M33-4还是会出来兼容性问题。</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/12/psp_update_500m33-4.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>wsh执行包含空格的程序</title>
		<link>http://www.nwafang.com/2008/12/wsh%e6%89%a7%e8%a1%8c%e5%8c%85%e5%90%ab%e7%a9%ba%e6%a0%bc%e7%9a%84%e7%a8%8b%e5%ba%8f.html</link>
		<comments>http://www.nwafang.com/2008/12/wsh%e6%89%a7%e8%a1%8c%e5%8c%85%e5%90%ab%e7%a9%ba%e6%a0%bc%e7%9a%84%e7%a8%8b%e5%ba%8f.html#comments</comments>
		<pubDate>Wed, 10 Dec 2008 16:40:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/12/wsh%e6%89%a7%e8%a1%8c%e5%8c%85%e5%90%ab%e7%a9%ba%e6%a0%bc%e7%9a%84%e7%a8%8b%e5%ba%8f/</guid>
		<description><![CDATA[ 
今天在用VBS写个脚本去执行其它程序时，发现如果程序的路径里含有空格就不能运行，会报错。经过尝试几次后，发现把执行脚本用双引号引起来就行了。
例：
set wshshell=wscript.createobject(&#8221;wscript.shell&#8221;)
wshshell.run &#8220;&#8221;"c:\program files\internet explorer\iexplore.exe&#8221;" www.baidu.com&#8221;
 
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>今天在用VBS写个脚本去执行其它程序时，发现如果程序的路径里含有空格就不能运行，会报错。经过尝试几次后，发现把执行脚本用双引号引起来就行了。</p>
<p>例：</p>
<p>set wshshell=wscript.createobject(&#8221;wscript.shell&#8221;)</p>
<p>wshshell.run &#8220;&#8221;"c:\program files\internet explorer\iexplore.exe&#8221;" www.baidu.com&#8221;</p>
<p> </p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/12/wsh%e6%89%a7%e8%a1%8c%e5%8c%85%e5%90%ab%e7%a9%ba%e6%a0%bc%e7%9a%84%e7%a8%8b%e5%ba%8f.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>连接SQL Server非默认端口</title>
		<link>http://www.nwafang.com/2008/12/%e8%bf%9e%e6%8e%a5sql-server%e9%9d%9e%e9%bb%98%e8%ae%a4%e7%ab%af%e5%8f%a3.html</link>
		<comments>http://www.nwafang.com/2008/12/%e8%bf%9e%e6%8e%a5sql-server%e9%9d%9e%e9%bb%98%e8%ae%a4%e7%ab%af%e5%8f%a3.html#comments</comments>
		<pubDate>Mon, 01 Dec 2008 10:26:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/12/%e8%bf%9e%e6%8e%a5sql-server%e9%9d%9e%e9%bb%98%e8%ae%a4%e7%ab%af%e5%8f%a3/</guid>
		<description><![CDATA[有时因需要，MSSQL会侦听在非默认端口(1433)上，在安装SQL Server客户端时，有客户端实用工具可以修改连接的端口，但如果需要连接几个实例就不行了。到网上查了一下，在服务器名后面加逗号再加端口号就可以连非默认端口了，如连接本机8888端口可以把服务器名写作 127.0.0.1,8888 这样，这样客户端就会连接127.0.0.1的8888端口了。
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>有时因需要，MSSQL会侦听在非默认端口(1433)上，在安装SQL Server客户端时，有客户端实用工具可以修改连接的端口，但如果需要连接几个实例就不行了。到网上查了一下，在服务器名后面加<span style="color: #ff0000;">逗号</span>再加<span style="color: #ff0000;">端口号</span>就可以连非默认端口了，如连接本机8888端口可以把服务器名写作 <span style="color: #ff0000;">127.0.0.1,8888</span> 这样，这样客户端就会连接127.0.0.1的8888端口了。</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/12/%e8%bf%9e%e6%8e%a5sql-server%e9%9d%9e%e9%bb%98%e8%ae%a4%e7%ab%af%e5%8f%a3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server作业时间的计算方法</title>
		<link>http://www.nwafang.com/2008/11/sql-server%e4%bd%9c%e4%b8%9a%e6%97%b6%e9%97%b4%e7%9a%84%e8%ae%a1%e7%ae%97%e6%96%b9%e6%b3%95.html</link>
		<comments>http://www.nwafang.com/2008/11/sql-server%e4%bd%9c%e4%b8%9a%e6%97%b6%e9%97%b4%e7%9a%84%e8%ae%a1%e7%ae%97%e6%96%b9%e6%b3%95.html#comments</comments>
		<pubDate>Fri, 28 Nov 2008 17:03:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/11/sql-server%e4%bd%9c%e4%b8%9a%e6%97%b6%e9%97%b4%e7%9a%84%e8%ae%a1%e7%ae%97%e6%96%b9%e6%b3%95/</guid>
		<description><![CDATA[以前都是管理Oracle数据库的，在Oracle中，JOB的下次执行时间是在JOB执行之前就计算出来的，而SQL Server中下次作业的执行时间则没有关注过。于是做了一个小实验。先创建一个存储过程，如下：
CREATE PROCEDURE sp_Test1
AS
BEGIN
        WAITFOR DELAY &#8216;00:01:30&#8242;   &#8211;等待1分30秒
END
然后建一个作业，每分钟执行一次。
假设第一次执行时间是：12:00:00，执行完作业后显示下次执行时间是12:02:00
假设第二次执行时间是：12:02:00，执行完作业后显示下次执行时间是12:04:00
依次类推。。。
结论：感觉SQL Server把所有执行的时间点事先都计算出来了，当作业执行完后，就把大于当前时间的最近一个时间点作为下次执行的时间。
PS:完全是个人猜测，没看到官方文档。
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>以前都是管理Oracle数据库的，在Oracle中，JOB的下次执行时间是在JOB执行之前就计算出来的，而SQL Server中下次作业的执行时间则没有关注过。于是做了一个小实验。先创建一个存储过程，如下：</p>
<p><span style="font-size: x-small;"><span style="color: #0000ff;"><span style="color: #0000ff;">CREATE PROCEDURE</span> </span>sp_Test1<br />
</span><span style="font-size: x-small;"><span style="color: #0000ff;">AS<br />
BEGIN<br />
        WAITFOR</span> DELAY <span style="color: #ff0000;">&#8216;00:01:30&#8242;   &#8211;等待1分30秒</span><br />
<span style="color: #0000ff;">END</span></span></p>
<p>然后建一个作业，每分钟执行一次。</p>
<p>假设第一次执行时间是：12:00:00，执行完作业后显示下次执行时间是12:02:00<br />
假设第二次执行时间是：12:02:00，执行完作业后显示下次执行时间是12:04:00</p>
<p>依次类推。。。</p>
<p>结论：感觉SQL Server把所有执行的时间点事先都计算出来了，当作业执行完后，就把大于当前时间的最近一个时间点作为下次执行的时间。</p>
<p>PS:完全是个人猜测，没看到官方文档。</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/11/sql-server%e4%bd%9c%e4%b8%9a%e6%97%b6%e9%97%b4%e7%9a%84%e8%ae%a1%e7%ae%97%e6%96%b9%e6%b3%95.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转]很好用的虚拟机-VirtualBox</title>
		<link>http://www.nwafang.com/2008/11/good-vm-virtualbox.html</link>
		<comments>http://www.nwafang.com/2008/11/good-vm-virtualbox.html#comments</comments>
		<pubDate>Thu, 27 Nov 2008 15:17:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/11/%e8%bd%ac%e5%be%88%e5%a5%bd%e7%94%a8%e7%9a%84%e8%99%9a%e6%8b%9f%e6%9c%ba-virtualbox/</guid>
		<description><![CDATA[以前用过VMware也用过MS的VPC,VMware太大了,而MS自己的VPC性能确实不怎的,可能MS重点放在Hyper-V上了吧.前些天安装了VirtualBox,才用了一天就发现确实很好用。特别是起特有的无缝模式窗口确实很COOL。
         用了几天也看了下VirtualBox自带的说明文挡加上到网上查到地一些资料。汇下总吧
 
        VirtualBox历史(转自http://zh.wikipedia.org/wiki/VirtualBox)
         Sun xVM VirtualBox 是由德國InnoTek(已被Sun併購) 這家軟體公司出品的軟體，它提供使用者在32或64位元的 Windows、Solaris 及 Linux 作業系統上虛擬另外的機器執行其它x86的作業系統，使用者可以在 VirtualBox 上安裝並且執行 Solaris、Windows、Linux、OS/2 Warp、OpenBSD 及 FreeBSD 等系統作為客戶機操作系統[1]。在2007年1月，InnoTek以GNU通用公共许可证 (GPL)釋出VirtualBox，並提供二進位版本及開放源碼版本的程式碼。
和同性質的VMware及Virtual PC比較下，VirtualBox獨到之處包括Remote Desktop Protocol(RDP)、iSCSI及USB的支援，VirtualBox在客戶機操作系統上已可以支援USB 2.0的硬體裝置。
 
        在VirtualBox里复制VDI文件(转自http://blog.sina.com.cn/bobbyworm)   
         在VirtualBox的快速修复界面里，可以随时生成当前状态的备份。当生成了备份之后，会在Snapshots目录下创建一个新的VDI文件，之后对当前状态所做的一切操作都将针对最新的VDI文件，而VDI目录下的初始VDI文件就不会再改变了。
 
我一般在装好Guest OS并做完打补丁、安装常用软件等操作后就创建一个备份，如果Guest OS发生了问题可以随时恢复到干净的系统。但是有时需要在不同的软件环境下做不同的事情，开始时我希望能用一个VDI文件生成两个不同的备份并分别配置成不同的环境，但是发现VirtualBox的备份是线性的，也就是说只能针对当前状态做一个备份，而恢复备份时也只能恢复到上一个备份的状态，不能同时存在两个不同的当前状态。
 
没有办法，只能把初始的VDI文件复制出来一份用于另外的环境。但是很快发现，复制出来的VDI文件无法在虚拟介质管理器中注册，因为每个VDI文件都有一个唯一的uuid，而VirtualBox不允许注册重复的uuid。
 
看了帮助文件后，发现VBoxManage有一个clonevdi方法可以克隆VDI文件，并赋予它一个新的uuid。具体用法是在命令行里执行：
VBoxManage clonevdi 原始VDI文件名 新的VDI文件名
直接写VDI文件名即可，不用指明VDI文件所在路径，新的文件会在全局设定中指定的VDI目录下创建。如果VDI文件名里带有空格，应该在两端加上双引号。VBoxManage命令位于VirtualBox安装目录下，缺省路径是C:\Program Files\Sun\xVM VirtualBox。
 
用这个方法创建了新的VDI文件后，就可以正常注册并在另一个虚拟机中使用了。
 
        收缩虚拟机磁盘文件大小(转自http://blog.sina.com.cn/bobbyworm)
         由于经常要测试一些软件，我在VirtualBox虚拟机中安装了一套Windows。使用过虚拟机的朋友都知道，为了节省硬盘空间，一般都使用动态扩展映像。它不会在一开始就占用指定大小的硬盘空间，而是随着实际使用的需要动态扩展。但是在虚拟系统里删除了文件，使用过的空间并不会自动收回。虚拟系统使用久了以后，磁盘映像文件会变得越来越大。
 
我以前使用过VMware，在VMware Tools里有一个很方便的Shrink功能可以收回未使用的硬盘空间，但是在VirtualBox里没有看到这样的选项。经过上网查找资料，终于找到了在VirtualBox（我用的是2.0.0版）里Shrink的方法，只需要三个步骤：
 
第一步：在Guest OS中整理磁盘碎片。可以使用Windows自带的碎片整理工具，不过更推荐使用Defraggler。这是一款免费的磁盘碎片整理工具，使用简单，整理速度很快。
 
Defraggler下载地址：http://www.filehippo.com/download_defraggler/
 
第二步：将Guest OS的磁盘剩余空间清零，也就是把0值写入磁盘未使用空间的每一个字节。这一步是关键，因为在下一步里，所有只包含0值的磁盘空间将被收回。可以用Sysinternals出品的一个命令行工具SDelete来完成这一步。在Guest OS的命令行里执行：
sdelete -c c:\
其中c:\是要清零的磁盘分区，应依次对所有虚拟磁盘分区执行这一步，如d:\、e:\等等。
SDelete下载地址：http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx
 
第三步：使用VirtualBox提供的VBoxManage工具收缩磁盘映像文件。在Host OS的命令行中进入VirtualBox的安装目录（缺省为C:\Program Files\Sun\xVM VirtualBox），执行：
VBoxManage modifyvdi &#8220;Windows XP.vdi&#8221; compact
其中Windows XP.vdi是要收缩的磁盘映像文件名，请根据实际名称修改，不用指定路径。
 
经过这三个步骤以后，我的vdi文件从2.5G收缩到了1.2G，效果非常明显。以上介绍的前两个步骤所使用的工具是针对Windows的，如果Guest OS是Linux或其它系统，可以找一找相同功能的工具软件，原理都是一样的。
 
转自：http://blog.csdn.net/devfan/archive/2008/11/23/3354886.aspx
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>以前用过VMware也用过MS的VPC,VMware太大了,而MS自己的VPC性能确实不怎的,可能MS重点放在Hyper-V上了吧.前些天安装了VirtualBox,才用了一天就发现确实很好用。特别是起特有的无缝模式窗口确实很COOL。</p>
<p><span style="color: #000000;">         用了几天也看了下VirtualBox自带的说明文挡加上到网上查到地一些资料。汇下总吧</span></p>
<p> </p>
<p>        <strong>VirtualBox历史</strong>(转自<a href="http://zh.wikipedia.org/wiki/VirtualBox">http://zh.wikipedia.org/wiki/VirtualBox</a>)</p>
<p>         Sun xVM <strong>VirtualBox</strong> 是由德國<a class="new" title="InnoTek" href="http://zh.wikipedia.org/w/index.php?title=InnoTek&amp;action=edit&amp;redlink=1"><span style="text-decoration: underline;"><span style="color: #0000ff;">InnoTek</span></span></a>(已被<a class="mw-redirect" title="Sun" href="http://zh.wikipedia.org/wiki/Sun"><span style="text-decoration: underline;"><span style="color: #0000ff;">Sun</span></span></a>併購) 這家軟體公司出品的軟體，它提供使用者在32或64位元的 <a title="Microsoft Windows" href="http://zh.wikipedia.org/wiki/Microsoft_Windows"><span style="text-decoration: underline;"><span style="color: #0000ff;">Windows</span></span></a>、<a title="Solaris" href="http://zh.wikipedia.org/wiki/Solaris"><span style="text-decoration: underline;"><span style="color: #0000ff;">Solaris</span></span></a> 及 <a title="Linux" href="http://zh.wikipedia.org/wiki/Linux"><span style="text-decoration: underline;"><span style="color: #0000ff;">Linux</span></span></a> 作業系統上虛擬另外的機器執行其它<a title="X86" href="http://zh.wikipedia.org/wiki/X86"><span style="text-decoration: underline;"><span style="color: #0000ff;">x86</span></span></a>的<a class="mw-redirect" title="作業系統" href="http://zh.wikipedia.org/wiki/%E4%BD%9C%E6%A5%AD%E7%B3%BB%E7%B5%B1"><span style="text-decoration: underline;"><span style="color: #0000ff;">作業系統</span></span></a>，使用者可以在 VirtualBox 上安裝並且執行 <a title="Solaris" href="http://zh.wikipedia.org/wiki/Solaris"><span style="text-decoration: underline;"><span style="color: #0000ff;">Solaris</span></span></a>、<a title="Microsoft Windows" href="http://zh.wikipedia.org/wiki/Microsoft_Windows"><span style="text-decoration: underline;"><span style="color: #0000ff;">Windows</span></span></a>、<a title="Linux" href="http://zh.wikipedia.org/wiki/Linux"><span style="text-decoration: underline;"><span style="color: #0000ff;">Linux</span></span></a>、<a title="OS/2" href="http://zh.wikipedia.org/wiki/OS/2"><span style="text-decoration: underline;"><span style="color: #0000ff;">OS/2</span></span></a> Warp、<a title="OpenBSD" href="http://zh.wikipedia.org/wiki/OpenBSD"><span style="text-decoration: underline;"><span style="color: #0000ff;">OpenBSD</span></span></a> 及 <a title="FreeBSD" href="http://zh.wikipedia.org/wiki/FreeBSD"><span style="text-decoration: underline;"><span style="color: #0000ff;">FreeBSD</span></span></a> 等系統作為客戶機操作系統<sup class="reference"><a href="http://zh.wikipedia.org/wiki/VirtualBox#_note-0"><span style="text-decoration: underline;"><span style="color: #0000ff;">[1]</span></span></a></sup>。在<a title="2007年" href="http://zh.wikipedia.org/wiki/2007%E5%B9%B4"><span style="text-decoration: underline;"><span style="color: #0000ff;">2007年</span></span></a>1月，<a class="new" title="InnoTek" href="http://zh.wikipedia.org/w/index.php?title=InnoTek&amp;action=edit&amp;redlink=1"><span style="text-decoration: underline;"><span style="color: #0000ff;">InnoTek</span></span></a>以<a title="GNU通用公共许可证" href="http://zh.wikipedia.org/wiki/GNU%E9%80%9A%E7%94%A8%E5%85%AC%E5%85%B1%E8%AE%B8%E5%8F%AF%E8%AF%81"><span style="text-decoration: underline;"><span style="color: #0000ff;">GNU通用公共许可证</span></span></a> (GPL)釋出VirtualBox，並提供二進位版本及<a class="mw-redirect" title="开放源码" href="http://zh.wikipedia.org/wiki/%E5%BC%80%E6%94%BE%E6%BA%90%E7%A0%81"><span style="text-decoration: underline;"><span style="color: #0000ff;">開放源碼</span></span></a>版本的<a class="mw-redirect" title="程式碼" href="http://zh.wikipedia.org/wiki/%E7%A8%8B%E5%BC%8F%E7%A2%BC"><span style="text-decoration: underline;"><span style="color: #0000ff;">程式碼</span></span></a>。</p>
<p>和同性質的<a title="VMware" href="http://zh.wikipedia.org/wiki/VMware"><span style="text-decoration: underline;"><span style="color: #0000ff;">VMware</span></span></a>及<a class="mw-redirect" title="Virtual PC" href="http://zh.wikipedia.org/wiki/Virtual_PC"><span style="text-decoration: underline;"><span style="color: #0000ff;">Virtual PC</span></span></a>比較下，VirtualBox獨到之處包括<a class="new" title="Remote Desktop Protocol" href="http://zh.wikipedia.org/w/index.php?title=Remote_Desktop_Protocol&amp;action=edit&amp;redlink=1"><span style="text-decoration: underline;"><span style="color: #0000ff;">Remote Desktop Protocol</span></span></a>(RDP)、<a title="ISCSI" href="http://zh.wikipedia.org/wiki/ISCSI"><span style="text-decoration: underline;"><span style="color: #0000ff;">iSCSI</span></span></a>及<a title="USB" href="http://zh.wikipedia.org/wiki/USB"><span style="text-decoration: underline;"><span style="color: #0000ff;">USB</span></span></a>的支援，VirtualBox在客戶機操作系統上已可以支援<a class="mw-redirect" title="USB 2.0" href="http://zh.wikipedia.org/wiki/USB_2.0"><span style="text-decoration: underline;"><span style="color: #0000ff;">USB 2.0</span></span></a>的硬體裝置。</p>
<p> </p>
<p>        <strong>在VirtualBox里复制VDI文件</strong>(转自<a href="http://blog.sina.com.cn/bobbyworm"><span style="text-decoration: underline;"><span style="color: #810081;">http://blog.sina.com.cn/bobbyworm</span></span></a>)   </p>
<p>         在VirtualBox的快速修复界面里，可以随时生成当前状态的备份。当生成了备份之后，会在Snapshots目录下创建一个新的VDI文件，之后对当前状态所做的一切操作都将针对最新的VDI文件，而VDI目录下的初始VDI文件就不会再改变了。</p>
<p> </p>
<p>我一般在装好Guest OS并做完打补丁、安装常用软件等操作后就创建一个备份，如果Guest OS发生了问题可以随时恢复到干净的系统。但是有时需要在不同的软件环境下做不同的事情，开始时我希望能用一个VDI文件生成两个不同的备份并分别配置成不同的环境，但是发现VirtualBox的备份是线性的，也就是说只能针对当前状态做一个备份，而恢复备份时也只能恢复到上一个备份的状态，不能同时存在两个不同的当前状态。</p>
<p> </p>
<p>没有办法，只能把初始的VDI文件复制出来一份用于另外的环境。但是很快发现，复制出来的VDI文件无法在虚拟介质管理器中注册，因为每个VDI文件都有一个唯一的uuid，而VirtualBox不允许注册重复的uuid。</p>
<p> </p>
<p>看了帮助文件后，发现VBoxManage有一个clonevdi方法可以克隆VDI文件，并赋予它一个新的uuid。具体用法是在命令行里执行：</p>
<p><strong>VBoxManage clonevdi 原始VDI文件名 新的VDI文件名</strong></p>
<p>直接写VDI文件名即可，不用指明VDI文件所在路径，新的文件会在全局设定中指定的VDI目录下创建。如果VDI文件名里带有空格，应该在两端加上双引号。VBoxManage命令位于VirtualBox安装目录下，缺省路径是C:\Program Files\Sun\xVM VirtualBox。</p>
<p> </p>
<p>用这个方法创建了新的VDI文件后，就可以正常注册并在另一个虚拟机中使用了。</p>
<p> </p>
<p style="font-size: 11pt;"><strong>        收缩虚拟机磁盘文件大小</strong>(转自<a href="http://blog.sina.com.cn/bobbyworm">http://blog.sina.com.cn/bobbyworm</a>)</p>
<p>         由于经常要测试一些软件，我在VirtualBox虚拟机中安装了一套Windows。使用过虚拟机的朋友都知道，为了节省硬盘空间，一般都使用动态扩展映像。它不会在一开始就占用指定大小的硬盘空间，而是随着实际使用的需要动态扩展。但是在虚拟系统里删除了文件，使用过的空间并不会自动收回。虚拟系统使用久了以后，磁盘映像文件会变得越来越大。</p>
<p> </p>
<p>我以前使用过VMware，在VMware Tools里有一个很方便的Shrink功能可以收回未使用的硬盘空间，但是在VirtualBox里没有看到这样的选项。经过上网查找资料，终于找到了在VirtualBox（我用的是2.0.0版）里Shrink的方法，只需要三个步骤：</p>
<p> </p>
<p><strong>第一步</strong>：在Guest OS中整理磁盘碎片。可以使用Windows自带的碎片整理工具，不过更推荐使用Defraggler。这是一款免费的磁盘碎片整理工具，使用简单，整理速度很快。</p>
<p> </p>
<p>Defraggler下载地址：<a href="http://www.filehippo.com/download_defraggler/"><span style="text-decoration: underline;"><span style="color: #678d02;">http://www.filehippo.com/download_defraggler/</span></span></a></p>
<p> </p>
<p><strong>第二步</strong>：将Guest OS的磁盘剩余空间清零，也就是把0值写入磁盘未使用空间的每一个字节。这一步是关键，因为在下一步里，所有只包含0值的磁盘空间将被收回。可以用Sysinternals出品的一个命令行工具SDelete来完成这一步。在Guest OS的命令行里执行：</p>
<p><span style="font-size: 14px; color: #000000;"><strong>sdelete -c c:\</strong></span></p>
<p>其中c:\是要清零的磁盘分区，应依次对所有虚拟磁盘分区执行这一步，如d:\、e:\等等。</p>
<p>SDelete下载地址：<a href="http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx"><span style="text-decoration: underline;"><span style="color: #678d02;">http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx</span></span></a></p>
<p> </p>
<p><strong>第三步</strong>：使用VirtualBox提供的VBoxManage工具收缩磁盘映像文件。在Host OS的命令行中进入VirtualBox的安装目录（缺省为C:\Program Files\Sun\xVM VirtualBox），执行：</p>
<p><strong>VBoxManage modifyvdi &#8220;Windows XP.vdi&#8221; compact</strong></p>
<p>其中Windows XP.vdi是要收缩的磁盘映像文件名，请根据实际名称修改，不用指定路径。</p>
<p> </p>
<p>经过这三个步骤以后，我的vdi文件从2.5G收缩到了1.2G，效果非常明显。以上介绍的前两个步骤所使用的工具是针对Windows的，如果Guest OS是Linux或其它系统，可以找一找相同功能的工具软件，原理都是一样的。</p>
<p> </p>
<p>转自：<a href="http://blog.csdn.net/devfan/archive/2008/11/23/3354886.aspx">http://blog.csdn.net/devfan/archive/2008/11/23/3354886.aspx</a></p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/11/good-vm-virtualbox.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>应用Profiler优化SQL Server数据库系统</title>
		<link>http://www.nwafang.com/2008/11/%e5%ba%94%e7%94%a8profiler%e4%bc%98%e5%8c%96sql-server%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b3%bb%e7%bb%9f.html</link>
		<comments>http://www.nwafang.com/2008/11/%e5%ba%94%e7%94%a8profiler%e4%bc%98%e5%8c%96sql-server%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b3%bb%e7%bb%9f.html#comments</comments>
		<pubDate>Tue, 25 Nov 2008 13:59:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/11/%e5%ba%94%e7%94%a8profiler%e4%bc%98%e5%8c%96sql-server%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b3%bb%e7%bb%9f/</guid>
		<description><![CDATA[转自MSDN：http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx?mfr=true

本页内容




概述



Profiler trace文件性能分析的传统方法以及局限



Read80trace工具介绍以及它的Normalization 功能



使用存储过程分析Normalize后的数据



使用usp_GetAccessPattern的一些技巧



蛇足：哪个是HOT 数据库？




概述
当你的SQL Server数据库系统运行缓慢的时候，你或许多多少少知道可以使用SQL Server Profiler（中文叫SQL事件探查器）工具来进行跟踪和分析。是的，Profiler可以用来捕获发送到SQL Server的所有语句以及语句的执行性能相关数据（如语句的read/writes页面数目，CPU的使用量，以及语句的duration等）以供以后分析。但本文并不介绍如何使用Profiler 工具，而是将介绍如何使用read80trace（有关该工具见后面介绍）工具结合自定义的存储过程来提纲挈领地分析Profiler捕获的Trace文件，最终得出令人兴奋的数据分析报表，从而使你可以高屋建瓴地优化SQL Server数据库系统。
本文对那些需要分析SQL Server大型数据库系统性能的读者如DBA等特别有用。在规模较大、应用逻辑复杂的数据库系统中Profiler产生的文件往往非常巨大，比如说在Profiler中仅仅配置捕获基本的语句事件，运行二小时后捕获的Trace文件就可能有GB级的大小。应用本文介绍的方法不但可以大大节省分析Trace的时间和金钱，把你从Trace文件的海量数据中解放出来，更是让你对数据库系统的访问模式了如指掌，从而知道哪一类语句对性能影响最大，哪类语句需要优化等等。
返回页首

Profiler trace文件性能分析的传统方法以及局限
先说一下什么是数据库系统的访问模式。除了可以使用Trace文件解决如死锁，阻塞，超时等问题外，最常用也是最主要的功能是可以从Trace文件中得到如下三个非常重要的信息：



1.
运行最频繁的语句


2.
最影响系统性能的关键语句


3.
各类语句群占用的比例以及相关性能统计信息



本文提到的访问模式就是上面三个信息。我们知道，数据库系统的模块是基本固定的，每个模块访问SQL Server的方式也是差不多固定的，具体到某个菜单，某个按钮，都是基本不变的，所以，在足够长的时间内，访问SQL Server的各类语句及其占用的比例也基本上是固定的。换句话说，只要Profiler采样的时间足够长（我一般运行2小时以上），那么从Trace文件中就肯定可以统计出数据库系统的访问模式。每一个数据库系统都有它自己独一无二的访问模式。分析Profiler Trace文件的一个重要目标就是找出数据库系统的访问模式。一旦得到访问模式，你就可以在优化系统的时候做到胸有成竹，心中了然。可惜直到目前为止还没有任何工具可以方便地得到这些信息。
传统的Trace分析方法有两种。一种是使用Profiler工具本身。比如说可以使用Profiler的Filter功能过滤出那些运行时间超过10秒以上的语句，或按照CPU排序找出最耗费CPU的语句等。另一种是把Trace文件导入到数据库中，然后使用T-SQL语句来进行统计分析。这两种方法对较小的Trace文件是有效的。但是，如果Trace文件数目比较多比较大（如4个500MB以上的trace文件），那么这两种方法就有很大的局限性。其局限性之一是因为文件巨大的原因，分析和统计都非常不易，常常使你无法从全局的高度提纲挈领地掌握所有语句的执行性能。你很容易被一些语句迷惑而把精力耗费在上面，而实际上它却不是真正需要关注的关键语句。局限性之二是你发现尽管很多语句模式都非常类似（仅仅是执行时参数不同），却没有一个简单的方法把他们归类到一起进行统计。简而言之，你无法轻而易举地得到数据库系统的访问模式，无法在优化的时候做到高屋建瓴，纲举目张。这就是传统分析方法的局限性。使用下面介绍的Read80trace工具以及自定义的存储过程可以克服这样的局限性。
返回页首

Read80trace工具介绍以及它的Normalization 功能
Read80Trace工具是一个命令行工具。使用Read80Trace工具可以大大节省分析Trace文件的时间，有事半功倍的效果。Read80Trace的主要工作原理是读取Trace文件，然后对语句进行Normalize (标准化)，导入到数据库，生成性能统计分析的HTML页面。另外，Read80trace可以生成RML文件，然后OSTRESS工具使用RML文件多线程地重放Trace文件中的所有事件。这对于那些想把Profiler捕获的语句在另外一台服务器上重放成为可能。本文不详细介绍Read80trace或OStress工具，有兴趣的读者请自行参阅相关资料，相关软件可以从微软网站下载（注：软件名称为RML，http://www.microsoft.com/downloads/）。
我要利用的是Read80Trace的标准化功能。什么是标准化？就是把那些语句模式类似，但参数不一样的语句全部归类到一起。举例说Trace中有几条语句如下：
select * from authors where au_lname = 'white'
select * from authors where au_lname = 'green'
select * from authors where au_lname = 'carson'
经过标准化后，上面的语句就变成如下的样子：
select * from authors where au_lname = {str}
select * from authors where au_lname = {str}
select * from authors [...]]]></description>
			<content:encoded><![CDATA[<h1><span style="font-size: xx-small;">转自MSDN：<a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx?mfr=true">http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx?mfr=true</a></span></h1>
<p><img src="http://img.microsoft.com/library/gallery/templates/MNP2.Common/images/3squares.gif" border="0" alt="*" width="30" height="6" /></p>
<h5 style="padding-top: 2px;">本页内容</h5>
<table style="margin-top: 7px; margin-bottom: 12px;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr valign="top">
<td><img src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" border="0" alt="概述" hspace="4" vspace="2" width="7" height="9" /></td>
<td class="onThisPage">概述</td>
</tr>
<tr valign="top">
<td><img src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" border="0" alt="Profiler trace文件性能分析的传统方法以及局限" hspace="4" vspace="2" width="7" height="9" /></td>
<td class="onThisPage">Profiler trace文件性能分析的传统方法以及局限</td>
</tr>
<tr valign="top">
<td><img src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" border="0" alt="Read80trace工具介绍以及它的Normalization 功能" hspace="4" vspace="2" width="7" height="9" /></td>
<td class="onThisPage">Read80trace工具介绍以及它的Normalization 功能</td>
</tr>
<tr valign="top">
<td><img src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" border="0" alt="使用存储过程分析Normalize后的数据" hspace="4" vspace="2" width="7" height="9" /></td>
<td class="onThisPage">使用存储过程分析Normalize后的数据</td>
</tr>
<tr valign="top">
<td><img src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" border="0" alt="使用usp_GetAccessPattern的一些技巧" hspace="4" vspace="2" width="7" height="9" /></td>
<td class="onThisPage">使用usp_GetAccessPattern的一些技巧</td>
</tr>
<tr valign="top">
<td><img src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" border="0" alt="蛇足:哪个是HOT 数据库?" hspace="4" vspace="2" width="7" height="9" /></td>
<td class="onThisPage">蛇足：哪个是HOT 数据库？</td>
</tr>
</tbody>
</table>
<p><a name="EKB"></a></p>
<h2>概述</h2>
<p>当你的SQL Server数据库系统运行缓慢的时候，你或许多多少少知道可以使用SQL Server Profiler（中文叫SQL事件探查器）工具来进行跟踪和分析。是的，Profiler可以用来捕获发送到SQL Server的所有语句以及语句的执行性能相关数据（如语句的read/writes页面数目，CPU的使用量，以及语句的duration等）以供以后分析。但本文并不介绍如何使用Profiler 工具，而是将介绍如何使用read80trace（有关该工具见后面介绍）工具结合自定义的存储过程来提纲挈领地分析Profiler捕获的Trace文件，最终得出令人兴奋的数据分析报表，从而使你可以高屋建瓴地优化SQL Server数据库系统。</p>
<p>本文对那些需要分析SQL Server大型数据库系统性能的读者如DBA等特别有用。在规模较大、应用逻辑复杂的数据库系统中Profiler产生的文件往往非常巨大，比如说在Profiler中仅仅配置捕获基本的语句事件，运行二小时后捕获的Trace文件就可能有GB级的大小。应用本文介绍的方法不但可以大大节省分析Trace的时间和金钱，把你从Trace文件的海量数据中解放出来，更是让你对数据库系统的访问模式了如指掌，从而知道哪一类语句对性能影响最大，哪类语句需要优化等等。</p>
<div style="margin-top: 3px; margin-bottom: 10px;"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top"><img src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" border="0" alt="返回页首" width="7" height="9" /></a>返回页首</div>
<p><a name="EOB"></a></p>
<h2>Profiler trace文件性能分析的传统方法以及局限</h2>
<p>先说一下什么是数据库系统的访问模式。除了可以使用Trace文件解决如死锁，阻塞，超时等问题外，最常用也是最主要的功能是可以从Trace文件中得到如下三个非常重要的信息：</p>
<table class="numberedList" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr valign="top">
<td class="listNumber" align="right">1.</td>
<td>运行最频繁的语句</td>
</tr>
<tr valign="top">
<td class="listNumber" align="right">2.</td>
<td>最影响系统性能的关键语句</td>
</tr>
<tr valign="top">
<td class="listNumber" align="right">3.</td>
<td>各类语句群占用的比例以及相关性能统计信息</td>
</tr>
</tbody>
</table>
<p>本文提到的访问模式就是上面三个信息。我们知道，数据库系统的模块是基本固定的，每个模块访问SQL Server的方式也是差不多固定的，具体到某个菜单，某个按钮，都是基本不变的，所以，在足够长的时间内，访问SQL Server的各类语句及其占用的比例也基本上是固定的。换句话说，只要Profiler采样的时间足够长（我一般运行2小时以上），那么从Trace文件中就肯定可以统计出数据库系统的访问模式。每一个数据库系统都有它自己独一无二的访问模式。分析Profiler Trace文件的一个重要目标就是找出数据库系统的访问模式。一旦得到访问模式，你就可以在优化系统的时候做到胸有成竹，心中了然。可惜直到目前为止还没有任何工具可以方便地得到这些信息。</p>
<p>传统的Trace分析方法有两种。一种是使用Profiler工具本身。比如说可以使用Profiler的Filter功能过滤出那些运行时间超过10秒以上的语句，或按照CPU排序找出最耗费CPU的语句等。另一种是把Trace文件导入到数据库中，然后使用T-SQL语句来进行统计分析。这两种方法对较小的Trace文件是有效的。但是，如果Trace文件数目比较多比较大（如4个500MB以上的trace文件），那么这两种方法就有很大的局限性。其局限性之一是因为文件巨大的原因，分析和统计都非常不易，常常使你无法从全局的高度提纲挈领地掌握所有语句的执行性能。你很容易被一些语句迷惑而把精力耗费在上面，而实际上它却不是真正需要关注的关键语句。局限性之二是你发现尽管很多语句模式都非常类似（仅仅是执行时参数不同），却没有一个简单的方法把他们归类到一起进行统计。简而言之，你无法轻而易举地得到数据库系统的访问模式，无法在优化的时候做到高屋建瓴，纲举目张。这就是传统分析方法的局限性。使用下面介绍的Read80trace工具以及自定义的存储过程可以克服这样的局限性。</p>
<div style="margin-top: 3px; margin-bottom: 10px;"><img src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" border="0" alt="返回页首" width="7" height="9" />返回页首</div>
<p><a name="E2B"></a></p>
<h2>Read80trace工具介绍以及它的Normalization 功能</h2>
<p>Read80Trace工具是一个命令行工具。使用Read80Trace工具可以大大节省分析Trace文件的时间，有事半功倍的效果。Read80Trace的主要工作原理是读取Trace文件，然后对语句进行<strong>Normalize </strong>(标准化)，导入到数据库，生成性能统计分析的HTML页面。另外，Read80trace可以生成RML文件，然后OSTRESS工具使用RML文件多线程地重放Trace文件中的所有事件。这对于那些想把Profiler捕获的语句在另外一台服务器上重放成为可能。本文不详细介绍Read80trace或OStress工具，有兴趣的读者请自行参阅相关资料，相关软件可以从微软网站下载（注：软件名称为RML，<a href="http://www.microsoft.com/downloads/" target="_blank">http://www.microsoft.com/downloads/</a>）。</p>
<p>我要利用的是Read80Trace的标准化功能。什么是标准化？就是把那些语句模式类似，但参数不一样的语句全部归类到一起。举例说Trace中有几条语句如下：</p>
<pre class="codeSample">select * from authors where au_lname = 'white'
select * from authors where au_lname = 'green'
select * from authors where au_lname = 'carson'</pre>
<p>经过标准化后，上面的语句就变成如下的样子：</p>
<pre class="codeSample">select * from authors where au_lname = {str}
select * from authors where au_lname = {str}
select * from authors where au_lname = {str}</pre>
<p>有了标准化后的语句，统计出数据库系统的访问模式就不再是难事。运行Read80trace 的时候我一般使用如下的命令行：</p>
<pre class="codeSample">Read80trace –f –dmydb –Imytrace.trc</pre>
<p>其中－f开关是不生成RML文件，因为我不需要重放的功能。生成的RML文件比较大，建议读者如果不需要重放的话，也使用－f开关。</p>
<p>－d开关告诉read80trace把trace文件的处理结果存到mydb数据库中。我们后面创建的存储过程正是访问read80trace在mydb中生成的表来进行统计的。－I开关是指定要分析的的trace文件名。Read80trace工具很聪明，如果该目录下有Profiler产生的一系列Trace文件，如mytrace.trc,mytrace1.trc,mytrace2.trc等，那么它会一一顺序读取进行处理。</p>
<p>除了上面介绍的外，Read80trace还有很多其它有趣的开关。比如说使用－i开关使得Read80trace可以从zip或CAB文件中读取trace文件，不用自己解压。所有开关在Read80trace.chm中有详细介绍。我最欣赏的地方是read80trace的性能。分析几个GB大小的trace文件不足一小时就搞定了。我的计算机是一台内存仅为512MB的老机器，有这样的性能我很满意。</p>
<p>你也许会使用read80trace分析压力测试产生的trace文件。我建议还是分析从生产环境中捕获的Trace文件为好。因为很多压力测试工具都不能够真正模拟现实的环境，其得到的trace文件也就不能真实反映实际的情况。甚至有些压力测试工具是循环执行自己写的语句，更不能反映准确的访问模式。建议仅仅把压力测试产生的trace作为参考使用。</p>
<div style="margin-top: 3px; margin-bottom: 10px;"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top"><img src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" border="0" alt="返回页首" width="7" height="9" /></a>返回页首</div>
<p><a name="EQC"></a></p>
<h2>使用存储过程分析Normalize后的数据</h2>
<p>有了标准化后的语句就可以使用存储过程进行统计分析了。分析的基本思想是把所有模式一样的语句的Reads，CPU和Duration做group by统计，得出访问模式信息：</p>
<table class="numberedList" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr valign="top">
<td class="listNumber" align="right">1.</td>
<td>某类语句的总共执行次数，平均读页面数（reads）/平均CPU时间/平均执行时间等。</td>
</tr>
<tr valign="top">
<td class="listNumber" align="right">2.</td>
<td>该类语句在所有语句的比例，如执行次数比例，reads比例，CPU比例等。</td>
</tr>
</tbody>
</table>
<p>存储过程的定义以及说明如下：</p>
<pre class="codeSample">/*************************************************************/
Create procedure usp_GetAccessPattern 8000
@duration_filter int=-1 --传入的参数，可以按照语句执行的时间过滤统计
as begin

/*首先得到全部语句的性能数据的总和*/
declare @sum_total float,@sum_cpu float,@sum_reads float,@sum_duration float,@sum_writes float
select @sum_total=count(*)*0.01,--这是所有语句的总数。
@sum_cpu=sum(cpu)*0.01, --这是所有语句耗费的CPU时间
@sum_reads=sum(reads)*0.01, --这是所有语句耗费的Reads数目，8K为单位。
@sum_writes=sum(writes)*0.01,--这是所有语句耗费的Writes数目，8K为单位。
@sum_duration=sum(duration)*0.01--这是所有语句的执行时间总和。
from tblBatches --这是Read80Trace产生的表，包括了Trace文件中所有的语句。
where duration&gt;=@duration_filter --是否按照执行时间过滤

/*然后进行Group by，得到某类语句占用的比例*/
Select ltrim(str(count(*))) exec_stats,''+ str(count(*)/@sum_total,4,1)+'%' ExecRatio,
ltrim(str(sum(cpu)))+' : '++ltrim(str(avg(cpu))) cpu_stats,''+str(sum(cpu)/@sum_cpu,4,1)+'%' CpuRatio,
ltrim(str(sum(reads) ))+' : '+ltrim(str(avg(reads) )) reads_stats,''+str(sum(reads)/@sum_reads,4,1)  +'%' ReadsRatio ,
--ltrim(str(sum(writes) ))+' : '+ltrim(str(avg(writes) )) --writes_stats,''+str(sum(writes)/@sum_writes,4,1) +'%)',
ltrim(str(sum(duration) ))+' : '+ltrim(str(avg(duration))) duration_stats,''+str(sum(duration)/@sum_duration,4,1)+'%' DurRatio ,
textdata,count(*)/@sum_total tp,sum(cpu)/@sum_cpu cp,sum(reads)/@sum_reads rp,sum(duration)/@sum_duration dp
into #queries_staticstics from
/* tblUniqueBatches表中存放了所有标准化的语句。*/
(select reads,cpu,duration,writes,convert(varchar(2000),NormText)textdata from tblBatches
 inner join tblUniqueBatches on tblBatches.HashId=tblUniqueBatches.hashid where duration&gt;@duration_filter
) B group by textdata --这个group by很重要，它对语句进行归类统计。

print 'Top 10 order by cpu+reads+duration'
select top 10 * from #queries_staticstics order by cp+rp+dp desc
print 'Top 10 order by cpu'
select top 10 * from #queries_staticstics order by cp desc
print 'Top 10 order by reads'
select top 10 * from #queries_staticstics order by rp desc
print 'Top 10 order by duration'
select top 10 * from #queries_staticstics order by dp desc
print 'Top 10 order by batches'
select top 10 * from #queries_staticstics order by tp desc

End
/*************************************************************/</pre>
<p>考虑到输出结果横向较长，存储过程中把writes去掉了。这是因为大部分的数据库系统都是Reads为主的。你可以轻易的修改存储过程把write也包括进去。</p>
<p>存储过程并不复杂，很容易理解。可以看到统计的结果放在queries_staticstics表中，然后按照不同的条件排序后输出。举例说：</p>
<pre class="codeSample">select top 10 *  from #queries_staticstics order by cp desc</pre>
<p>上面的语句将把queries_staticstics表中的记录按照某类语句占用总CPU量的比例cp（即sum(cpu)/@sum_cpu）进行排序输出。这让你在分析服务器CPU性能问题的时候快速定位哪一类语句最耗CPU资源，从而对症下药。</p>
<p>现在让我们看一个实例的输出：</p>
<pre class="codeSample">/********************/
Use mydb
Exec usp_GetAccessPattern
/*你可以输入一个执行时间作为过滤参数，毫秒为单位。如usp_GetAccessPattern 1000*/
/********************/</pre>
<p>输出结果如图 1所示（是部分结果，另外，因为原输出结果横向很长，为方便阅读，把结果从中截断为两部分）：</p>
<p><img src="http://www.microsoft.com/china/msdn/library/data/sqlserver/art/profiler_001.jpg" border="0" alt="art/profiler_001.jpg" width="553" height="281" /></p>
<p>图 1：输出结果采样一</p>
<p>上面的例子采样于一家大型公司的业务系统。该系统的问题是应用程序运行缓慢，SQL Server 服务器的CPU高居不下（8个CPU都在90%～100%间波动）。我使用PSSDIAG工具采样2小时左右的数据，然后运行read80trace和usp_GetAccessPattern得出上面的结果。报表一目了然。存储过程DBO.x_DEDUP_PROC在两小时内共运行75次，却占用了90.8％的CPU资源，94.6%的Reads，从访问模式的角度，该存储过程正是导致CPU高和系统性能慢的关键语句。一旦优化了该存储过程，系统的性能问题将迎刃而解。你也许有疑问，两小时内共运行75次,不是很频繁啊。其实你看看这条存储过程的平均CPU时间是681961毫秒，大概11分钟左右。也就是说一个CPU两小时内最多可以执行（60*2）/11＝10条左右，该系统总共有8个CPU，即使全部CPU都用来运行该语句，那么最多也就是10*8＝80条左右。上面执行总数是75，说明该存储过程一直在连续不断地运行。</p>
<p>那么该系统运行最频繁的语句是什么呢？我从结果中摘取另外一部分如下（图 2）：</p>
<p><img src="http://www.microsoft.com/china/msdn/library/data/sqlserver/art/profiler_002.jpg" border="0" alt="art/profiler_002.jpg" width="553" height="281" /></p>
<p>图 2：输出结果采样二</p>
<p>从上表可以看出，最频繁运行的语句是</p>
<pre class="codeSample">USE xb SET QUOTED_IDENTIFIER,ANSI_NULL_DFLT_ON…</pre>
<p>显然这是一条执行环境配置语句，没有参考价值。倒是另外两条占用语句总数8.2%的语句值得关注：</p>
<pre class="codeSample">SELECT COUNT(*) FROM x_PROCESS_STATS WHERE PROCESS……
SELECT COUNT(*) FROM x_PROCESS_STATS WHERE PROCESS……</pre>
<p>在这个例子中，因为关键语句DBO.x_DEDUP_PROC非常突出，甚至上面的两条语句都可以忽略了。</p>
<p>让我们再多看一个例子（图 3）：</p>
<p><img src="http://www.microsoft.com/china/msdn/library/data/sqlserver/art/profiler_003.jpg" border="0" alt="art/profiler_003.jpg" width="553" height="312" /></p>
<p>图 3：输出结果采样三</p>
<p>从上面的例子中, 可以得出关键的语句是:</p>
<pre class="codeSample">SELECT COUNT(*) FROM GTBL7MS
SELECT CaseNO FROM PATIENTDATA_sum WHERE MRN = @P1</pre>
<p>后续的检查发现相关的表没有有效的索引，加上索引后性能立即整体地提高了不少.。解决了这两个语句，需要使用同样的手段继续分析和优化，直到系统的性能能够接受为止.。注意性能调优是一个长期的过程，你不太可能一两天就可以把所有的问题都解决。也许一开始可以解决80%的问题，但是后面20%的问题却需要另外80%的时间。</p>
<div style="margin-top: 3px; margin-bottom: 10px;"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top"><img src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" border="0" alt="返回页首" width="7" height="9" /></a>返回页首</div>
<p><a name="ECE"></a></p>
<h2>使用usp_GetAccessPattern的一些技巧</h2>
<p>usp_GetAccessPattern的输出报表包含了非常丰富的信息。分析报表的时候需要有大局观。你也可以有目的性地选择你需要的信息。如果是CPU性能瓶颈的系统，那么你需要关注CPU占用比例高的那类语句。如果是磁盘IO出现性能瓶颈那么你需要找到那些Reads占用比例大而且平均reads也很高的语句。需要注意的是有时候运行频繁的语句未必就是你需要关注的关键语句。一个最理想的情况是关键语句正好就是最频繁的语句。有时候即使最频繁语句占用的资源比例不高，但如果还可以优化，那么因为放大效应，微小的优化也会给系统带来可观的好处。</p>
<p>在使用usp_GetAccessPattern的时候多结合@duration_filter参数使用。因为参数以毫秒为单位，建议参数不要小于1000，而应该是1000的倍数 如3000，5000等。该参数常常会给出非常有意思的输出。该输出和不带参数运行的结果会有某些重叠。重叠出现的语句通常正是需要关注的语句。要注意运行最多最密的语句未必有超过1000毫秒的执行时间，所有带参数运行的结果有可能不包括最频繁语句。我常常同时交叉分析四个结果，一个是不带参数运行得到的，另三个分别是使用1000，3000和5000毫秒为参数运行的结果。比较分析这四个结果往往使我对数据库系统的访问模式有非常清晰透彻的理解。</p>
<p>运行存储过程时你也许会碰到int整数溢出的错误。这是因为表tblBatches 中的reads,cpu 和writes字段是int而不是bigint。可以运行如下语句进行修正：</p>
<pre class="codeSample">alter table tblBatches  alter column  reads bigint
alter table tblBatches  alter column  cpu bigint
alter table tblBatches  alter column  writes bigint</pre>
<p>修正后溢出问题就会解决。</p>
<div style="margin-top: 3px; margin-bottom: 10px;"><a href="http://www.microsoft.com/china/msdn/library/data/sqlserver/Profiler.mspx#top"><img src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" border="0" alt="返回页首" width="7" height="9" /></a>返回页首</div>
<p><a name="EJE"></a></p>
<h2>蛇足：哪个是HOT 数据库？</h2>
<p>本文到这里就基本上结束了。你已经知道如何使用Read80Trace和usp_GetAccessPattern得到数据库系统的访问模式，以及如何从全局的高度去分析访问模式报表，从而在优化系统的时候做到提纲挈领，胸有成竹。</p>
<p>除此之外，你还可以应用类似的分析思想得到每个数据库的占用资源比例。这对于SQL Server有多个数据库的情况非常有用。从报表中你可以立即知道哪个数据库是最HOT最消耗系统资源的数据库。语句如下：</p>
<pre class="codeSample">print 'group by dbid'
declare @sum_total float,@sum_cpu float,@sum_reads float,@sum_duration float,@sum_writes float
select @sum_total=count(*)*0.01,@sum_cpu=sum(cpu)*0.01,@sum_reads=sum(reads)*0.01,@sum_writes=sum(writes)*0.01,
@sum_duration=sum(duration)*0.01 from tblBatches

select dbid,
ltrim(str(count(*))) exec_stats,''+ str(count(*)/@sum_total,4,1)+'%' ExecRatio,
ltrim(str(sum(cpu)))+' : '++ltrim(str(avg(cpu))) cpu_stats,''+str(sum(cpu)/@sum_cpu,4,1)+'%' CpuRatio ,
ltrim(str(sum(reads) ))+' : '+ltrim(str(avg(reads) )) reads_stats,''+str(sum(reads)/@sum_reads,4,1)  +'%' ReadsRatio ,
ltrim(str(sum(duration) ))+' : '+ltrim(str(avg(duration))) duration_stats,''+str(sum(duration)/@sum_duration,4,1)+'%' DurRatio ,
count(*)/@sum_total tp,sum(cpu)/@sum_cpu cp,sum(reads)/@sum_reads rp,sum(duration)/@sum_duration dp
into #queries_staticstics_groupbydb from

(select reads,cpu,duration,writes,convert(varchar(2000),NormText)textdata,dbid from tblBatches
inner join tblUniqueBatches on tblBatches.HashId=tblUniqueBatches.hashid
) b group by dbid order by sum(reads) desc

select dbid,ExecRatio batches,CPURatio CPU,ReadsRatio Reads,DurRatio Duration
from #queries_staticstics_groupbydb</pre>
<p>下面是一个上面语句结果的一个例子：</p>
<pre class="codeSample">dbid    batches   CPU        Reads       Duration
------  -------   -----   -------       --------
37      21.1%     18.7%      29.1%       27.1%
33      12.7%     32.4%      19.5%       24.8%
36       5.6%     28.3%      15.6%       26.1%
20      53.9%      2.9%      14.2%        2.1%
22       0.8%      7.2%      13.2%        6.6%
25       1.0%      3.6%       5.4%        3.5%
16       0.0%      1.5%       1.9%        0.7%
35       2.0%      2.7%       1.8%        5.7%
7        0.1%      0.1%       1.1%        0.3%</pre>
<p>上面的结果明确地告诉我们ID为37，33和36的数据库是最活跃的数据库。一个有趣的事实是数据库20发出的语句总数比例是53.9%，但是其占用的系统资源比例却不高。</p>
<p><br style="font-size: 0pt;" /></p>
<p> </p>
<p><span style="color: #ff0000;">作者注：</span>可能这个文章写的较早，read80trace已经下载不到，也可能是M$的网站有问题，不过可以下载RML工具，里面包含这个工具，名称叫readtrace.exe<br />
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7edfa95a-a32f-440f-a3a8-5160c8dbe926&amp;DisplayLang=en">http://www.microsoft.com/downloads/details.aspx?FamilyID=7edfa95a-a32f-440f-a3a8-5160c8dbe926&amp;DisplayLang=en</a></p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/11/%e5%ba%94%e7%94%a8profiler%e4%bc%98%e5%8c%96sql-server%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b3%bb%e7%bb%9f.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PowerShell2.0　CTP 执行get-help报错的解决</title>
		<link>http://www.nwafang.com/2008/11/powershell20-errorget-help.html</link>
		<comments>http://www.nwafang.com/2008/11/powershell20-errorget-help.html#comments</comments>
		<pubDate>Mon, 17 Nov 2008 09:16:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/11/powershell20%e3%80%80ctp-%e6%89%a7%e8%a1%8cget-help%e6%8a%a5%e9%94%99%e7%9a%84%e8%a7%a3%e5%86%b3/</guid>
		<description><![CDATA[因为PowerShell2.0 CTP是测试版本，里面还没有包含中文的帮助文件，安装文件里只含有英文的帮助。所以执行get-help会报错。解决方法是骗过系统，让系统读英文的帮助文件。
方法：
cd $pshome
move-item en-US zh-CN
这样操作以后，get-help就可以用了，不过帮助文件是英文的。
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>因为PowerShell2.0 CTP是测试版本，里面还没有包含中文的帮助文件，安装文件里只含有英文的帮助。所以执行get-help会报错。解决方法是骗过系统，让系统读英文的帮助文件。</p>
<p>方法：<br />
cd $pshome<br />
move-item en-US zh-CN</p>
<p>这样操作以后，get-help就可以用了，不过帮助文件是英文的。</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/11/powershell20-errorget-help.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MSSQL Server数据文件的迁移</title>
		<link>http://www.nwafang.com/2008/11/mssql-server%e6%95%b0%e6%8d%ae%e6%96%87%e4%bb%b6%e7%9a%84%e8%bf%81%e7%a7%bb.html</link>
		<comments>http://www.nwafang.com/2008/11/mssql-server%e6%95%b0%e6%8d%ae%e6%96%87%e4%bb%b6%e7%9a%84%e8%bf%81%e7%a7%bb.html#comments</comments>
		<pubDate>Tue, 11 Nov 2008 16:11:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/11/mssql-server%e6%95%b0%e6%8d%ae%e6%96%87%e4%bb%b6%e7%9a%84%e8%bf%81%e7%a7%bb/</guid>
		<description><![CDATA[M$总是默认把所有文件安装到系统盘，他家的数据库也是一样。对于一个测试的数据库而言一般没有问题，但是对于生产库通常会放到一个单独的分区。如果在安装时选择了默认安装，而又需要把数据文件移到其它目录，则可以使用下面的方法(所有的数据文件移动都需要停止服务)：
　　对于非系统库而言，移动文件比较简单，只需要先分离数据库，然后移动数据库对应的数据文件，最后再附加数据库就可以了。
　　master库的数据文件和日志文件位置是记录在启动参数里的，只需要在企业管理器里点属性-&#62;常规-&#62;启动参数，修改-d.-l参数，然后停止数据库；移动master库文件；再启动数据库就可以了。
　　tempdb数据库相对简单，可以使用ALTER DATABASE命令在新位置重建即可。
ALTER DATABASE tempdb MODIFY FILE(name=tempdev,filename=&#8217;d:\mssqldb\tempdb.mdf&#8217;)
go
ALTER DATABASE tempdb MODIFY FILE(name=templog,filename=&#8217;d:\mssqldb\templog.ldf&#8217;)
go
　　执行完上面两个命令，重启数据库即启动新的tempdb数据文件。
　　移动msdb,model这两个系统库的数据文件需要使用跟踪标记。在启动参数里加入-T3609(添加方法同移动master库,跟踪标记3608的作用是跳过除master库外所有的库的自动恢复)，然后就可以像普通非系统库一样分离，附加这两个系统库了，启动在重启之前去掉启动参数里的跟踪标记(T3608)
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>M$总是默认把所有文件安装到系统盘，他家的数据库也是一样。对于一个测试的数据库而言一般没有问题，但是对于生产库通常会放到一个单独的分区。如果在安装时选择了默认安装，而又需要把数据文件移到其它目录，则可以使用下面的方法(所有的数据文件移动都需要停止服务)：</p>
<p>　　对于非系统库而言，移动文件比较简单，只需要先分离数据库，然后移动数据库对应的数据文件，最后再附加数据库就可以了。</p>
<p>　　master库的数据文件和日志文件位置是记录在启动参数里的，只需要在企业管理器里点属性-&gt;常规-&gt;启动参数，修改-d.-l参数，然后停止数据库；移动master库文件；再启动数据库就可以了。</p>
<p>　　tempdb数据库相对简单，可以使用ALTER DATABASE命令在新位置重建即可。<br />
ALTER DATABASE tempdb MODIFY FILE(name=tempdev,filename=&#8217;d:\mssqldb\tempdb.mdf&#8217;)<br />
go<br />
ALTER DATABASE tempdb MODIFY FILE(name=templog,filename=&#8217;d:\mssqldb\templog.ldf&#8217;)<br />
go<br />
　　执行完上面两个命令，重启数据库即启动新的tempdb数据文件。</p>
<p>　　移动msdb,model这两个系统库的数据文件需要使用跟踪标记。在启动参数里加入-T3609(添加方法同移动master库,跟踪标记3608的作用是跳过除master库外所有的库的自动恢复)，然后就可以像普通非系统库一样分离，附加这两个系统库了，启动在重启之前去掉启动参数里的跟踪标记(T3608)</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/11/mssql-server%e6%95%b0%e6%8d%ae%e6%96%87%e4%bb%b6%e7%9a%84%e8%bf%81%e7%a7%bb.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用命令行工具profile90自动跟踪SQLServer</title>
		<link>http://www.nwafang.com/2008/10/%e4%bd%bf%e7%94%a8%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%b7%a5%e5%85%b7profile90%e8%87%aa%e5%8a%a8%e8%b7%9f%e8%b8%aasqlserver.html</link>
		<comments>http://www.nwafang.com/2008/10/%e4%bd%bf%e7%94%a8%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%b7%a5%e5%85%b7profile90%e8%87%aa%e5%8a%a8%e8%b7%9f%e8%b8%aasqlserver.html#comments</comments>
		<pubDate>Tue, 21 Oct 2008 09:48:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/10/%e4%bd%bf%e7%94%a8%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%b7%a5%e5%85%b7profile90%e8%87%aa%e5%8a%a8%e8%b7%9f%e8%b8%aasqlserver/</guid>
		<description><![CDATA[前几天和一个同事一起下班，他说当晚要早点睡，第二天4点钟起床，我说起这么早干吗？原来是要那个点到SQL Server数据库上抓取Trace，因为系统管理员说负荷有点高。
        因为我是从Oracle过来的，知道在Oracle里可以通过DBMS_JOB定时的执行STATSPACK，或者写个脚本，通过crontab定时的去执行就行了，难道在Windows上就没有类似的功能吗。
       我知道Windows里可以使用计划任务来定时的执行任务，只要找到一个可以通过命令行执行的工具就可以了。先想到的是使用sqlcmd命令行工具，想了想不行，因为不能保存trace文件到本机。所在到网上搜了一下，在微软的MSDN里看到profiler90.exe可以用。在自己电脑上试了一下，就是那个窗口版的SQL Server Profiler工具，只是通过命令行启动罢了。试验了一下，可以执行，再加入到执行任务，就成了定时去执行跟踪了。
命令如下：
profiler90 /U sa /P passwd /S 127.0.0.1 /T &#8220;standard&#8221; /O &#8220;d:\abc.trc&#8221; /M &#8220;2008-10-21 15:00:00&#8243;
或
profiler90 /E /T &#8220;standard&#8221; /O &#8220;d:\abc.trc&#8221; /M &#8220;2008-10-21 15:00:00&#8243;
通过profile90 /? 也可以查看参数帮助。
MSDN帮助:http://msdn.microsoft.com/zh-cn/library/ms162808(SQL.90).aspx
注意：日期格式不是文档里的，而是服务器上的日期格式。
&#8212;-The End&#8212;-
]]></description>
			<content:encoded><![CDATA[<p>前几天和一个同事一起下班，他说当晚要早点睡，第二天4点钟起床，我说起这么早干吗？原来是要那个点到SQL Server数据库上抓取Trace，因为系统管理员说负荷有点高。</p>
<p>        因为我是从Oracle过来的，知道在Oracle里可以通过DBMS_JOB定时的执行STATSPACK，或者写个脚本，通过crontab定时的去执行就行了，难道在Windows上就没有类似的功能吗。</p>
<p>       我知道Windows里可以使用计划任务来定时的执行任务，只要找到一个可以通过命令行执行的工具就可以了。先想到的是使用sqlcmd命令行工具，想了想不行，因为不能保存trace文件到本机。所在到网上搜了一下，在微软的MSDN里看到profiler90.exe可以用。在自己电脑上试了一下，就是那个窗口版的SQL Server Profiler工具，只是通过命令行启动罢了。试验了一下，可以执行，再加入到执行任务，就成了定时去执行跟踪了。</p>
<p>命令如下：<br />
profiler90 /U sa /P passwd /S 127.0.0.1 /T &#8220;standard&#8221; /O &#8220;d:\abc.trc&#8221; /M &#8220;2008-10-21 15:00:00&#8243;<br />
或<br />
profiler90 /E /T &#8220;standard&#8221; /O &#8220;d:\abc.trc&#8221; /M &#8220;2008-10-21 15:00:00&#8243;</p>
<p>通过profile90 /? 也可以查看参数帮助。</p>
<p>MSDN帮助:<a href="http://msdn.microsoft.com/zh-cn/library/ms162808(SQL.90).aspx" target="_blank">http://msdn.microsoft.com/zh-cn/library/ms162808(SQL.90).aspx</a></p>
<p>注意：日期格式不是文档里的，而是服务器上的日期格式。</p>
<p>&#8212;-The End&#8212;-</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/10/%e4%bd%bf%e7%94%a8%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%b7%a5%e5%85%b7profile90%e8%87%aa%e5%8a%a8%e8%b7%9f%e8%b8%aasqlserver.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PSP自制软件网站</title>
		<link>http://www.nwafang.com/2008/07/psp%e8%87%aa%e5%88%b6%e8%bd%af%e4%bb%b6%e7%bd%91%e7%ab%99.html</link>
		<comments>http://www.nwafang.com/2008/07/psp%e8%87%aa%e5%88%b6%e8%bd%af%e4%bb%b6%e7%bd%91%e7%ab%99.html#comments</comments>
		<pubDate>Wed, 30 Jul 2008 23:09:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/07/psp%e8%87%aa%e5%88%b6%e8%bd%af%e4%bb%b6%e7%bd%91%e7%ab%99/</guid>
		<description><![CDATA[PSP的自制软件功能强大，新版往往带来更多的功能。
以下是我收集的自制软件作者的网站.
PSPKVM(PSP上的KVM，JAVA虚拟机，可运行J2ME程序)
http://sourceforge.net/projects/pspkvm/
Lightmp3(音乐播放器，支持FLAC，可降频播放，省电)
http://sakya.altervista.org/new/index.php
或http://code.google.com/p/lightmp3/
一个开发小组，有不少软件
http://www.noobz.eu/
以后会更新
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>PSP的自制软件功能强大，新版往往带来更多的功能。<br />
以下是我收集的自制软件作者的网站.</p>
<p>PSPKVM(PSP上的KVM，JAVA虚拟机，可运行J2ME程序)<br />
<a href="http://sourceforge.net/projects/pspkvm/">http://sourceforge.net/projects/pspkvm/</a></p>
<p>Lightmp3(音乐播放器，支持FLAC，可降频播放，省电)<br />
<a href="http://sakya.altervista.org/new/index.php">http://sakya.altervista.org/new/index.php</a><br />
或<a href="http://code.google.com/p/lightmp3/">http://code.google.com/p/lightmp3/</a></p>
<p>一个开发小组，有不少软件<a href="http://www.noobz.eu/"><br />
http://www.noobz.eu/</a></p>
<p>以后会更新</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/07/psp%e8%87%aa%e5%88%b6%e8%bd%af%e4%bb%b6%e7%bd%91%e7%ab%99.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PSP上用的KVM</title>
		<link>http://www.nwafang.com/2008/07/psp-kvm.html</link>
		<comments>http://www.nwafang.com/2008/07/psp-kvm.html#comments</comments>
		<pubDate>Sun, 27 Jul 2008 19:44:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/07/psp%e4%b8%8a%e7%94%a8%e7%9a%84kvm/</guid>
		<description><![CDATA[PSP本是一游戏机，自动被破解后，自制程序就出现了。
在网上看到有PSP版的KVM，下载了安装，真不错，以后那些手机里用的JAVA程序都可以在PSP里安家了。
现在只安装了一个UCWeb，看网页很不错。
PSPKVM官方地址：
http://sourceforge.net/projects/pspkvm/
&#8211;The End &#8211;
]]></description>
			<content:encoded><![CDATA[<p>PSP本是一游戏机，自动被破解后，自制程序就出现了。</p>
<p>在网上看到有PSP版的KVM，下载了安装，真不错，以后那些手机里用的JAVA程序都可以在PSP里安家了。</p>
<p>现在只安装了一个UCWeb，看网页很不错。</p>
<p>PSPKVM官方地址：<br />
<a href="http://sourceforge.net/projects/pspkvm/">http://sourceforge.net/projects/pspkvm/</a></p>
<p>&#8211;The End &#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/07/psp-kvm.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows下安装openNMS</title>
		<link>http://www.nwafang.com/2008/06/windows-opennms.html</link>
		<comments>http://www.nwafang.com/2008/06/windows-opennms.html#comments</comments>
		<pubDate>Mon, 23 Jun 2008 21:21:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/06/windows%e4%b8%8b%e5%ae%89%e8%a3%85opennms/</guid>
		<description><![CDATA[软件准备：
PostgreSQL
http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org//binary/v8.2.6/win32/postgresql-8.2.6-2.zip
openNMS
http://internap.dl.sourceforge.net/sourceforge/opennms/opennms-installer-1.5.92.jar
安装文档
http://www.opennms.org/index.php/Installation:Windows
 
未完
]]></description>
			<content:encoded><![CDATA[<p>软件准备：</p>
<p>PostgreSQL<a href="http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org//binary/v8.2.6/win32/postgresql-8.2.6-2.zip"><br />
http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org//binary/v8.2.6/win32/postgresql-8.2.6-2.zip</a></p>
<p>openNMS<a href="http://internap.dl.sourceforge.net/sourceforge/opennms/opennms-installer-1.5.92.jar"><br />
http://internap.dl.sourceforge.net/sourceforge/opennms/opennms-installer-1.5.92.jar</a></p>
<p>安装文档<br />
<a href="http://www.opennms.org/index.php/Installation:Windows">http://www.opennms.org/index.php/Installation:Windows</a></p>
<p> </p>
<p>未完</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/06/windows-opennms.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oralce中获取客户端IP地址</title>
		<link>http://www.nwafang.com/2008/06/oralce%e4%b8%ad%e8%8e%b7%e5%8f%96%e5%ae%a2%e6%88%b7%e7%ab%afip%e5%9c%b0%e5%9d%80.html</link>
		<comments>http://www.nwafang.com/2008/06/oralce%e4%b8%ad%e8%8e%b7%e5%8f%96%e5%ae%a2%e6%88%b7%e7%ab%afip%e5%9c%b0%e5%9d%80.html#comments</comments>
		<pubDate>Tue, 17 Jun 2008 22:09:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/06/oralce%e4%b8%ad%e8%8e%b7%e5%8f%96%e5%ae%a2%e6%88%b7%e7%ab%afip%e5%9c%b0%e5%9d%80/</guid>
		<description><![CDATA[有时候需要记录客户端的信息，其实Oracle中可以查到客户端的IP地址和其它一些信息的。
使用
select sys_context(&#8217;userenv&#8217;,'ip_address&#8217;) from dual;查出IP地址。
还可以查询其它信息。
详细信息可以参看Oracle文档 SQL Reference.
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>有时候需要记录客户端的信息，其实Oracle中可以查到客户端的IP地址和其它一些信息的。<br />
使用<br />
select sys_context(&#8217;userenv&#8217;,'ip_address&#8217;) from dual;查出IP地址。<br />
还可以查询其它信息。<br />
详细信息可以参看Oracle文档 SQL Reference.</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/06/oralce%e4%b8%ad%e8%8e%b7%e5%8f%96%e5%ae%a2%e6%88%b7%e7%ab%afip%e5%9c%b0%e5%9d%80.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个免费的网盘地址</title>
		<link>http://www.nwafang.com/2008/06/%e4%b8%80%e4%b8%aa%e5%85%8d%e8%b4%b9%e7%9a%84%e7%bd%91%e7%9b%98%e5%9c%b0%e5%9d%80.html</link>
		<comments>http://www.nwafang.com/2008/06/%e4%b8%80%e4%b8%aa%e5%85%8d%e8%b4%b9%e7%9a%84%e7%bd%91%e7%9b%98%e5%9c%b0%e5%9d%80.html#comments</comments>
		<pubDate>Mon, 16 Jun 2008 21:47:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/06/%e4%b8%80%e4%b8%aa%e5%85%8d%e8%b4%b9%e7%9a%84%e7%bd%91%e7%9b%98%e5%9c%b0%e5%9d%80/</guid>
		<description><![CDATA[最近想上传一个附件，可是百度空间不支持附件，到网上找了一下，找到一个支持500M的网盘，暂时打算使用这个。最后希望Baidu早点可以上传附件。
网盘地址:http://www.brsbox.com/
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>最近想上传一个附件，可是百度空间不支持附件，到网上找了一下，找到一个支持500M的网盘，暂时打算使用这个。最后希望Baidu早点可以上传附件。</p>
<p>网盘地址:<a href="http://www.brsbox.com/" target="_blank">http://www.brsbox.com/</a></p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/06/%e4%b8%80%e4%b8%aa%e5%85%8d%e8%b4%b9%e7%9a%84%e7%bd%91%e7%9b%98%e5%9c%b0%e5%9d%80.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>空调损坏,服务器热死</title>
		<link>http://www.nwafang.com/2008/06/%e7%a9%ba%e8%b0%83%e6%8d%9f%e5%9d%8f%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%83%ad%e6%ad%bb.html</link>
		<comments>http://www.nwafang.com/2008/06/%e7%a9%ba%e8%b0%83%e6%8d%9f%e5%9d%8f%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%83%ad%e6%ad%bb.html#comments</comments>
		<pubDate>Tue, 10 Jun 2008 20:11:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/06/%e7%a9%ba%e8%b0%83%e6%8d%9f%e5%9d%8f%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%83%ad%e6%ad%bb/</guid>
		<description><![CDATA[今天早上去上班,同事告诉我,有个数据库连不上了,ping也不通.表现为机器死机了.
过了一会,一个用户打电话来说什么用不了,看了一下,另一个机器也死机了.
因为机房上锁,只有主管可以进,打电话说还在路上,只有等
等到主管来了,另一同事进去重启机器,出来告诉我,机房空调坏了,机器死了几台.
本来机房有两个空调,可能领导为了省电只开了一个,结果机器过热死机了.
看来空调也要双机复用呀.
另外,奇怪的是,死机的全是服务器,机房里放了几台PC都没事,看来还是服务器空间比较小,CPU发热量大的原因.
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>今天早上去上班,同事告诉我,有个数据库连不上了,ping也不通.表现为机器死机了.<br />
过了一会,一个用户打电话来说什么用不了,看了一下,另一个机器也死机了.<br />
因为机房上锁,只有主管可以进,打电话说还在路上,只有等<br />
等到主管来了,另一同事进去重启机器,出来告诉我,机房空调坏了,机器死了几台.<br />
本来机房有两个空调,可能领导为了省电只开了一个,结果机器过热死机了.<br />
看来空调也要双机复用呀.<br />
另外,奇怪的是,死机的全是服务器,机房里放了几台PC都没事,看来还是服务器空间比较小,CPU发热量大的原因.</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/06/%e7%a9%ba%e8%b0%83%e6%8d%9f%e5%9d%8f%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%83%ad%e6%ad%bb.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>常用网址收藏</title>
		<link>http://www.nwafang.com/2008/05/%e5%b8%b8%e7%94%a8%e7%bd%91%e5%9d%80%e6%94%b6%e8%97%8f.html</link>
		<comments>http://www.nwafang.com/2008/05/%e5%b8%b8%e7%94%a8%e7%bd%91%e5%9d%80%e6%94%b6%e8%97%8f.html#comments</comments>
		<pubDate>Fri, 16 May 2008 23:16:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/05/%e5%b8%b8%e7%94%a8%e7%bd%91%e5%9d%80%e6%94%b6%e8%97%8f/</guid>
		<description><![CDATA[查看Web服务器情况
http://uptime.netcraft.com/
查找破解补丁(注意防网页病毒)
http://astalavista.box.sk/
 
测试浏览器的并发连接数
http://stevesouders.com/hpws/parallel-downloads.php
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>查看Web服务器情况<a href="http://uptime.netcraft.com/"><br />
http://uptime.netcraft.com/</a></p>
<p>查找破解补丁(注意防网页病毒)<br />
<a href="http://astalavista.box.sk/">http://astalavista.box.sk/</a></p>
<p> </p>
<p>测试浏览器的并发连接数<br />
<a href="http://stevesouders.com/hpws/parallel-downloads.php">http://stevesouders.com/hpws/parallel-downloads.php</a></p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/05/%e5%b8%b8%e7%94%a8%e7%bd%91%e5%9d%80%e6%94%b6%e8%97%8f.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux内核参数不对导致克隆数据库启动不了</title>
		<link>http://www.nwafang.com/2008/05/linux%e5%86%85%e6%a0%b8%e5%8f%82%e6%95%b0%e4%b8%8d%e5%af%b9%e5%af%bc%e8%87%b4%e5%85%8b%e9%9a%86%e6%95%b0%e6%8d%ae%e5%ba%93%e5%90%af%e5%8a%a8%e4%b8%8d%e4%ba%86.html</link>
		<comments>http://www.nwafang.com/2008/05/linux%e5%86%85%e6%a0%b8%e5%8f%82%e6%95%b0%e4%b8%8d%e5%af%b9%e5%af%bc%e8%87%b4%e5%85%8b%e9%9a%86%e6%95%b0%e6%8d%ae%e5%ba%93%e5%90%af%e5%8a%a8%e4%b8%8d%e4%ba%86.html#comments</comments>
		<pubDate>Fri, 16 May 2008 23:13:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/05/linux%e5%86%85%e6%a0%b8%e5%8f%82%e6%95%b0%e4%b8%8d%e5%af%b9%e5%af%bc%e8%87%b4%e5%85%8b%e9%9a%86%e6%95%b0%e6%8d%ae%e5%ba%93%e5%90%af%e5%8a%a8%e4%b8%8d%e4%ba%86/</guid>
		<description><![CDATA[今天在用RMAN的备份来克隆一个数据库时，在用pfile启动到nomount时启动不成功，报内存方面的问题。因为原来数据库的SGA超过了1.7G，所以我以为要把ORACLE重新编译一下。
把gcc降级之后，重新编译了Oracle，发现还是启动不了。最后想起Linux系统时新安装的，不知道安装的人有没有调整系统内核参数，打开/etc/sysctl.conf,看见内核参数只是随便在网上找了一个更新的，不适合现在的系统。把/etc/sysctl.conf修改以后，执行sysctl -p使之生效，再启动就成功了。
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>今天在用RMAN的备份来克隆一个数据库时，在用pfile启动到nomount时启动不成功，报内存方面的问题。因为原来数据库的SGA超过了1.7G，所以我以为要把ORACLE重新编译一下。</p>
<p>把gcc降级之后，重新编译了Oracle，发现还是启动不了。最后想起Linux系统时新安装的，不知道安装的人有没有调整系统内核参数，打开/etc/sysctl.conf,看见内核参数只是随便在网上找了一个更新的，不适合现在的系统。把/etc/sysctl.conf修改以后，执行sysctl -p使之生效，再启动就成功了。</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/05/linux%e5%86%85%e6%a0%b8%e5%8f%82%e6%95%b0%e4%b8%8d%e5%af%b9%e5%af%bc%e8%87%b4%e5%85%8b%e9%9a%86%e6%95%b0%e6%8d%ae%e5%ba%93%e5%90%af%e5%8a%a8%e4%b8%8d%e4%ba%86.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>地震，惊心</title>
		<link>http://www.nwafang.com/2008/05/%e5%9c%b0%e9%9c%87%ef%bc%8c%e6%83%8a%e5%bf%83.html</link>
		<comments>http://www.nwafang.com/2008/05/%e5%9c%b0%e9%9c%87%ef%bc%8c%e6%83%8a%e5%bf%83.html#comments</comments>
		<pubDate>Mon, 12 May 2008 16:15:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/05/%e5%9c%b0%e9%9c%87%ef%bc%8c%e6%83%8a%e5%bf%83/</guid>
		<description><![CDATA[今天下午大约2：45左右，感觉头晕，紧接着同事也感觉不舒服，一会儿大家都站起来，不知道谁说了句地震了，大家伙都从楼梯逃了下去，我也在其中，什么也没拿。
到了下面，很多人已经出了大楼了。只是马路上的人不知道怎么回事，看来地震的不是很严重，可能我工作在高楼感觉明显一点。但愿不要再震了。
另听说四川发生7点几级地震。
&#8211;The End&#8211;
]]></description>
			<content:encoded><![CDATA[<p>今天下午大约2：45左右，感觉头晕，紧接着同事也感觉不舒服，一会儿大家都站起来，不知道谁说了句地震了，大家伙都从楼梯逃了下去，我也在其中，什么也没拿。</p>
<p>到了下面，很多人已经出了大楼了。只是马路上的人不知道怎么回事，看来地震的不是很严重，可能我工作在高楼感觉明显一点。但愿不要再震了。</p>
<p>另听说四川发生7点几级地震。</p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/05/%e5%9c%b0%e9%9c%87%ef%bc%8c%e6%83%8a%e5%bf%83.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>控制文件损坏导致Oracle停机</title>
		<link>http://www.nwafang.com/2008/05/%e6%8e%a7%e5%88%b6%e6%96%87%e4%bb%b6%e6%8d%9f%e5%9d%8f%e5%af%bc%e8%87%b4oracle%e5%81%9c%e6%9c%ba.html</link>
		<comments>http://www.nwafang.com/2008/05/%e6%8e%a7%e5%88%b6%e6%96%87%e4%bb%b6%e6%8d%9f%e5%9d%8f%e5%af%bc%e8%87%b4oracle%e5%81%9c%e6%9c%ba.html#comments</comments>
		<pubDate>Mon, 05 May 2008 21:54:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/05/%e6%8e%a7%e5%88%b6%e6%96%87%e4%bb%b6%e6%8d%9f%e5%9d%8f%e5%af%bc%e8%87%b4oracle%e5%81%9c%e6%9c%ba/</guid>
		<description><![CDATA[今天上午我不在公司，下午去公司，同事告诉我，公司里的一个数据库挂掉过了，原因是control02.ctl文件损坏。因为控制文件有3份,把损坏的2号控制文件备份后用1号文件覆盖，再启动数据库，可以正常启动了。
我查看了下alter日志，发现是CKPT进程写控制文件失败后，数据库挂起。
error 220 detected in backgroud process
ORA-00200 control file not mounted by first instance, check alert log for more info
ORA-00202 controlfile &#8216;xxxxxxxxxxxxxxxx/control02.ctl&#8217;
本地为这事完了，下午的时候，RMAN备份脚本运行失败了，提示
RMAN-06004 : ORACLE error from recovery catalog database : target : RMAN-20003 incarnation not found in database recovery catalog
以前一直是使用这个恢复目录，现在怎么不能用了，查了一下， 原来是之前挂起后，启动数据库时使用resetlogs，需要在RMAN中执行reset database;
-The End-
]]></description>
			<content:encoded><![CDATA[<p>今天上午我不在公司，下午去公司，同事告诉我，公司里的一个数据库挂掉过了，原因是control02.ctl文件损坏。因为控制文件有3份,把损坏的2号控制文件备份后用1号文件覆盖，再启动数据库，可以正常启动了。</p>
<p>我查看了下alter日志，发现是CKPT进程写控制文件失败后，数据库挂起。</p>
<p>error 220 detected in backgroud process<br />
ORA-00200 control file not mounted by first instance, check alert log for more info<br />
ORA-00202 controlfile &#8216;xxxxxxxxxxxxxxxx/control02.ctl&#8217;</p>
<p>本地为这事完了，下午的时候，RMAN备份脚本运行失败了，提示</p>
<p>RMAN-06004 : ORACLE error from recovery catalog database : target : RMAN-20003 incarnation not found in database recovery catalog</p>
<p>以前一直是使用这个恢复目录，现在怎么不能用了，查了一下， 原来是之前挂起后，启动数据库时使用resetlogs，需要在RMAN中执行reset database;</p>
<p>-The End-</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/05/%e6%8e%a7%e5%88%b6%e6%96%87%e4%bb%b6%e6%8d%9f%e5%9d%8f%e5%af%bc%e8%87%b4oracle%e5%81%9c%e6%9c%ba.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ORA-00600:[4080]错误的解决</title>
		<link>http://www.nwafang.com/2008/03/ora-006004080%e9%94%99%e8%af%af%e7%9a%84%e8%a7%a3%e5%86%b3.html</link>
		<comments>http://www.nwafang.com/2008/03/ora-006004080%e9%94%99%e8%af%af%e7%9a%84%e8%a7%a3%e5%86%b3.html#comments</comments>
		<pubDate>Tue, 25 Mar 2008 22:08:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/03/ora-006004080%e9%94%99%e8%af%af%e7%9a%84%e8%a7%a3%e5%86%b3/</guid>
		<description><![CDATA[今天查看一个数据库的ALTER日志时，看见里面有ORA-600错误，报错的前一行，是一个物化视图，打开对应的TRACE文件，看到如下的报错。
STACK TRACE:
Dump file /ora/app/oracle/admin/textdb/udump/textdb_ora_9641.trc
*** SESSION ID:(9.3332) 2000-08-16 15:00:21.962
*** 2008-03-25 15:00:21.962
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [4080], [1], [131], [], [], [], [],
[]
Current SQL statement for this session:
SELECT oldest, youngest+1/86400 FROM sys.snap_loadertime$ WHERE tableobj# = :1
FOR UPDATE
&#8212;&#8211; Call Stack Trace &#8212;&#8211;
ksedmp kgeriv kgeasi ktuchg ktbchg2 kddchg kddlok kddlkr qerfuStart
selexe opiexe opiefn0 opiall0 opikpr [...]]]></description>
			<content:encoded><![CDATA[<p>今天查看一个数据库的ALTER日志时，看见里面有ORA-600错误，报错的前一行，是一个物化视图，打开对应的TRACE文件，看到如下的报错。</p>
<p>STACK TRACE:</p>
<p>Dump file /ora/app/oracle/admin/textdb/udump/textdb_ora_9641.trc</p>
<p>*** SESSION ID:(9.3332) 2000-08-16 15:00:21.962</p>
<p>*** 2008-03-25 15:00:21.962</p>
<p>ksedmp: internal or fatal error</p>
<p>ORA-00600: internal error code, arguments: [4080], [1], [131], [], [], [], [],</p>
<p>[]</p>
<p>Current SQL statement for this session:</p>
<p>SELECT oldest, youngest+1/86400 FROM sys.snap_loadertime$ WHERE tableobj# = :1</p>
<p>FOR UPDATE</p>
<p>&#8212;&#8211; Call Stack Trace &#8212;&#8211;</p>
<p>ksedmp kgeriv kgeasi ktuchg ktbchg2 kddchg kddlok kddlkr qerfuStart</p>
<p>selexe opiexe opiefn0 opiall0 opikpr opiodr rpidrus skgmstack rpidru</p>
<p>rpiswu2 kprball kkzlglstmp kkzlllu kkzflbsu kkzfrsh kkzfroc2 kkzfroc</p>
<p>ktcrcm ktdcmt k2lcom k2send xctctl xctcom opiexe opiall0 kpoal8 opiodr</p>
<p>ttcpip opitsk opiino opiodr opidrv sou2o main start</p>
<p>在<a href="http://www.google.com/" target="_blank">Google</a>上搜索了一下，好像说是个Bug，<a href="http://metalink.oracle.com/" target="_blank">Metalink</a>上面的描述是</p>
<p>Distributed transactions are not allowed to update<br />
tables which have &#8220;ON COMMIT&#8221; snapshots / materialized<br />
views on them. In Oracle9i and ORA-600 [4080] is<br />
signalled at commit time. In Oracle8i the materialized<br />
view is not updated and so becomes out of sync with<br />
the master table.</p>
<p>Workaround:<br />
Use ON DEMAND materialized views instead.</p>
<p>最后的解决方法就是把这个物化重建一个，把<span style="color: #ff0000;">ON COMMIT</span>方式改为<span style="color: #ff0000;">ON DEMAND</span></p>
<p><span>-The End-</p>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/03/ora-006004080%e9%94%99%e8%af%af%e7%9a%84%e8%a7%a3%e5%86%b3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle9i官方文档下载地址</title>
		<link>http://www.nwafang.com/2008/03/oracle9i%e5%ae%98%e6%96%b9%e6%96%87%e6%a1%a3%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80.html</link>
		<comments>http://www.nwafang.com/2008/03/oracle9i%e5%ae%98%e6%96%b9%e6%96%87%e6%a1%a3%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80.html#comments</comments>
		<pubDate>Wed, 19 Mar 2008 22:24:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/03/oracle9i%e5%ae%98%e6%96%b9%e6%96%87%e6%a1%a3%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80/</guid>
		<description><![CDATA[以前为了把Oracle9i文档放在手机上，对文档内容进行了精简，删掉了不常用的，今天要查文档，却发现那部分文档被我删掉了。压缩包也被删掉了。打开下载工具，还好，下载地址还在，不用再到OTN去翻了。直接点再次下载就好了。
Oracle9i的下载地址：http://download.oracle.com/docs/cds/B10501_01.zip
Oracle10g的下载地址：http://download.oracle.com/docs/cds/B19306_01.zip
等以后下载了11g的文档，再把相应的地址帖出来吧，现在也懒得去OTN上找了，Oracle官网的速度真的不怎么样。
补：
Oracle11g的下载地址：http://download.oracle.com/docs/cds/B28359_01.zip
-The End-
]]></description>
			<content:encoded><![CDATA[<p>以前为了把Oracle9i文档放在手机上，对文档内容进行了精简，删掉了不常用的，今天要查文档，却发现那部分文档被我删掉了。压缩包也被删掉了。打开下载工具，还好，下载地址还在，不用再到OTN去翻了。直接点再次下载就好了。<br />
Oracle9i的下载地址：<a href="http://download.oracle.com/docs/cds/B10501_01.zip">http://download.oracle.com/docs/cds/B10501_01.zip</a><br />
Oracle10g的下载地址：<a href="http://download.oracle.com/docs/cds/B19306_01.zip">http://download.oracle.com/docs/cds/B19306_01.zip</a></p>
<p>等以后下载了11g的文档，再把相应的地址帖出来吧，现在也懒得去OTN上找了，Oracle官网的速度真的不怎么样。</p>
<p>补：</p>
<p>Oracle11g的下载地址：<a href="http://download.oracle.com/docs/cds/B28359_01.zip">http://download.oracle.com/docs/cds/B28359_01.zip</a></p>
<p>-The End-</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/03/oracle9i%e5%ae%98%e6%96%b9%e6%96%87%e6%a1%a3%e4%b8%8b%e8%bd%bd%e5%9c%b0%e5%9d%80.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ORA-02020错误解决</title>
		<link>http://www.nwafang.com/2008/03/ora-02020%e9%94%99%e8%af%af%e8%a7%a3%e5%86%b3.html</link>
		<comments>http://www.nwafang.com/2008/03/ora-02020%e9%94%99%e8%af%af%e8%a7%a3%e5%86%b3.html#comments</comments>
		<pubDate>Wed, 19 Mar 2008 21:41:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/03/ora-02020%e9%94%99%e8%af%af%e8%a7%a3%e5%86%b3/</guid>
		<description><![CDATA[今天用户在插入数据的时候，报ORA-02020错误，查看Oracle文档




ORA-02020:
too many database links in use


Cause:
The current session has exceeded the INIT.ORA open_links maximum.


Action:
Increase the open_links limit, or free up some open links by committing or rolling back the transaction and canceling open cursors that reference remote databases.



再查看参数
SQL&#62; show parameter open_links
NAME                                 TYPE    VALUE
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
open_links                           integer 4
Oracle默认是4,因为表上有一个触发器，会把数据分发到其它库，使用超过４个DBLINK了，所以报错了。数据库是Oracle9i，这个参数还不能动态修改(不知道新版本的Oracle能否动态修改这个参数)，需要重启数据库，因为是生产库，不能随便重启。
想来想去没想到好的方法，最后只好把触发器修改了，把直接触发到基中一个库改为从别一个库触发过去，级连了一下触发器，虽然是糗主意，但在不能重启Oracle的情况，总算把事解决了。另外赶紧把这个参数改大一点(scope=spfile)，以免下次再出来这样的问题。
-The End-
]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: 宋体;">今天用户在插入数据的时候，报ORA-02020错误，查看Oracle文档</span></p>
<p><span style="font-family: 宋体;"></p>
<table border="0">
<tbody>
<tr>
<td valign="top"><strong>ORA-02020:</strong></td>
<td>too many database links in use</td>
</tr>
<tr>
<td valign="top"><strong>Cause:</strong></td>
<td>The current session has exceeded the INIT.ORA open_links maximum.</td>
</tr>
<tr>
<td valign="top"><strong>Action:</strong></td>
<td>Increase the open_links limit, or free up some open links by committing or rolling back the transaction and canceling open cursors that reference remote databases.</td>
</tr>
</tbody>
</table>
<p>再查看参数</span></p>
<p><span style="font-family: 宋体;">SQL&gt; show parameter open_links</span></p>
<p><span style="font-family: 宋体;">NAME                                 TYPE    VALUE<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
open_links                           integer 4</span></p>
<p><span style="font-family: 宋体;">Oracle默认是4,因为表上有一个触发器，会把数据分发到其它库，使用超过４个DBLINK了，所以报错了。数据库是Oracle9<em>i</em>，这个参数还不能动态修改(不知道新版本的Oracle能否动态修改这个参数)，需要重启数据库，因为是生产库，不能随便重启。</span></p>
<p><span style="font-family: 宋体;">想来想去没想到好的方法，最后只好把触发器修改了，把直接触发到基中一个库改为从别一个库触发过去，级连了一下触发器，虽然是糗主意，但在不能重启Oracle的情况，总算把事解决了。另外赶紧把这个参数改大一点(scope=spfile)，以免下次再出来这样的问题。</p>
<p>-The End-</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/03/ora-02020%e9%94%99%e8%af%af%e8%a7%a3%e5%86%b3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FTP方式下载Oracle补丁</title>
		<link>http://www.nwafang.com/2008/03/ftp%e6%96%b9%e5%bc%8f%e4%b8%8b%e8%bd%bdoracle%e8%a1%a5%e4%b8%81.html</link>
		<comments>http://www.nwafang.com/2008/03/ftp%e6%96%b9%e5%bc%8f%e4%b8%8b%e8%bd%bdoracle%e8%a1%a5%e4%b8%81.html#comments</comments>
		<pubDate>Tue, 18 Mar 2008 23:41:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.nwafang.com/2008/03/ftp%e6%96%b9%e5%bc%8f%e4%b8%8b%e8%bd%bdoracle%e8%a1%a5%e4%b8%81/</guid>
		<description><![CDATA[下载Oracle的补丁，通常都是到Metalink网页上去下载，可以感觉访问Oracle的网站挺慢的，而且有时要花不少时间才能找到。其实，Oracle提供FTP方式下载补丁，具体方法是：
ftp updates.oracle.com
使用Metalink的用户名和密码作为FTP的用户名和密码。
FTP服务器使用补丁号作为目录名，所以下载那个补丁，要知道相应的补丁号，然后用cd命令切换到那个目录下，使用ls或dir查看你要下载的平台的文件名。
注意：根目录可能是目录太多，没有list权限，不要以为服务器没有数据。
Oracle patch补丁号列表
9.2.0.4 = 3095277
9.2.0.5 = 3501955
9.2.0.6 = 3948480
9.2.0.7 = 4163445
9.2.0.8 = 4547809
10.1.0.3 = 3761843
10.1.0.4 = 4163362
10.1.0.5 = 4505133
10.2.0.2 = 4547817
10.2.0.3 = 5337014
10.2.0.4 = 6810189
 
oracle 9.2.0.8 patch
-r&#8211;r&#8211;r&#8211;   1 root     other    1011302810 Aug 22 2006 p4547809_92080_AIX64-5L.zip
-r&#8211;r&#8211;r&#8211;   1 root     other    301383322 May 22 2007 p4547809_92080_AXP.zip
-r&#8211;r&#8211;r&#8211;   1 root     other    614741565 Aug 22 2006 p4547809_92080_HP64.zip
-r&#8211;r&#8211;r&#8211;   1 root     other    915111254 [...]]]></description>
			<content:encoded><![CDATA[<p>下载Oracle的补丁，通常都是到Metalink网页上去下载，可以感觉访问Oracle的网站挺慢的，而且有时要花不少时间才能找到。其实，Oracle提供FTP方式下载补丁，具体方法是：</p>
<p>ftp updates.oracle.com<br />
使用Metalink的用户名和密码作为FTP的用户名和密码。<br />
FTP服务器使用补丁号作为目录名，所以下载那个补丁，要知道相应的补丁号，然后用cd命令切换到那个目录下，使用ls或dir查看你要下载的平台的文件名。<br />
注意：根目录可能是目录太多，没有list权限，不要以为服务器没有数据。</p>
<p>Oracle patch补丁号列表<br />
9.2.0.4 = 3095277<br />
9.2.0.5 = 3501955<br />
9.2.0.6 = 3948480<br />
9.2.0.7 = 4163445<br />
9.2.0.8 = 4547809<br />
10.1.0.3 = 3761843<br />
10.1.0.4 = 4163362<br />
10.1.0.5 = 4505133<br />
10.2.0.2 = 4547817<br />
10.2.0.3 = 5337014<br />
10.2.0.4 = 6810189</p>
<p> </p>
<p>oracle 9.2.0.8 patch<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1011302810 Aug 22 2006 p4547809_92080_AIX64-5L.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    301383322 May 22 2007 p4547809_92080_AXP.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    614741565 Aug 22 2006 p4547809_92080_HP64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    915111254 Oct 4 2006 p4547809_92080_HPUX-IA64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    382660178 Aug 25 2006 p4547809_92080_LINUX.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    650429665 Aug 22 2006 p4547809_92080_Linux-IA64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    487245960 Aug 22 2006 p4547809_92080_Linux-x86-64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    173812249 Aug 22 2006 p4547809_92080_MVS.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    369346915 Aug 24 2006 p4547809_92080_SOLARIS.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    435868682 Aug 24 2006 p4547809_92080_SOLARIS64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1018459573 Mar 4 2007 p4547809_92080_TRU64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    257710303 Aug 21 2006 p4547809_92080_WINNT.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    378323336 Aug 22 2006 p4547809_92080_WINNT64.zip</p>
<p>oracle 10.1.0.5 patch<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1088290360 Feb 4 2006 p4505133_10105_AIX64-5L.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1113494903 Feb 5 2006 p4505133_10105_HP64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1284399515 Jun 6 2006 p4505133_10105_HPUX-IA64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    846975135 Aug 26 2006 p4505133_10105_LINUX-S390.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    846975135 Sep 1 2006 p4505133_10105_LINUX-zSer.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    671870763 Jan 31 2006 p4505133_10105_LINUX.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    948537380 Apr 30 2006 p4505133_10105_Linux-IA64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    729894889 Feb 24 2006 p4505133_10105_Linux-x86-64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    795332324 Mar 4 2006 p4505133_10105_MVS.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    681257061 Jan 8 2007 p4505133_10105_Mac-OS.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    767273383 Feb 5 2006 p4505133_10105_SOLARIS64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    676386907 Jun 19 2006 p4505133_10105_SOLARISx86.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1095126782 Oct 17 2006 p4505133_10105_TRU64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    601712906 Feb 13 2006 p4505133_10105_WINNT.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    811043147 Jan 30 2006 p4505133_10105_WINNT64.zip</p>
<p>oracle 10.2.0.3 patch<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1604896973 Feb 22 2007 p5337014_10203_AIX64-5L.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1424057924 Feb 22 2007 p5337014_10203_HP64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1641826103 May 2 2007 p5337014_10203_HPUX-IA64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1443790237 Mar 15 2007 p5337014_10203_IBMPower.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1103539895 Jun 13 22:09 p5337014_10203_LINUX-zSer.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    944121770 Feb 21 2007 p5337014_10203_LINUX.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1209745348 Feb 22 2007 p5337014_10203_Linux-IA64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1082086597 Feb 22 2007 p5337014_10203_Linux-x86-64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    937018969 Feb 23 2007 p5337014_10203_MSWIN-x86-64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    881471858 Feb 26 2007 p5337014_10203_MVS.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1254311329 Feb 22 2007 p5337014_10203_SOLARIS64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1811431410 Aug 13 05:23 p5337014_10203_Solaris86-64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1393733954 Oct 15 04:50 p5337014_10203_TRU64.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    893831865 Feb 21 2007 p5337014_10203_WINNT.zip<br />
-r&#8211;r&#8211;r&#8211;   1 root     other    1122786231 Feb 23 2007 p5337014_10203_WINNT64.zip</p>
<p>没有Metalink的用迅雷试试吧.</p>
<p>oracle 9208 patch:<br />
<a href="ftp://updates.oracle.com/4547809/p4547809_92080_AIX64-5L.zip">ftp://updates.oracle.com/4547809/p4547809_92080_AIX64-5L.zip</a><br />
<a href="ftp://updates.oracle.com/4547809/p4547809_92080_HP64.zip">ftp://updates.oracle.com/4547809/p4547809_92080_HP64.zip</a><br />
<a href="ftp://updates.oracle.com/4547809/p4547809_92080_HPUX-IA64.zip">ftp://updates.oracle.com/4547809/p4547809_92080_HPUX-IA64.zip</a><br />
<a href="ftp://updates.oracle.com/4547809/p4547809_92080_LINUX.zip">ftp://updates.oracle.com/4547809/p4547809_92080_LINUX.zip</a><br />
<a href="ftp://updates.oracle.com/4547809/p4547809_92080_Linux-IA64.zip">ftp://updates.oracle.com/4547809/p4547809_92080_Linux-IA64.zip</a><br />
<a href="ftp://updates.oracle.com/4547809/p4547809_92080_Linux-x86-64.zip">ftp://updates.oracle.com/4547809/p4547809_92080_Linux-x86-64.zip</a><br />
<a href="ftp://updates.oracle.com/4547809/p4547809_92080_MVS.zip">ftp://updates.oracle.com/4547809/p4547809_92080_MVS.zip</a><br />
<a href="ftp://updates.oracle.com/4547809/p4547809_92080_SOLARIS.zip">ftp://updates.oracle.com/4547809/p4547809_92080_SOLARIS.zip</a><br />
<a href="ftp://updates.oracle.com/4547809/p4547809_92080_SOLARIS64.zip">ftp://updates.oracle.com/4547809/p4547809_92080_SOLARIS64.zip</a><br />
<a href="ftp://updates.oracle.com/4547809/p4547809_92080_WINNT.zip">ftp://updates.oracle.com/4547809/p4547809_92080_WINNT.zip</a><br />
<a href="ftp://updates.oracle.com/4547809/p4547809_92080_WINNT64.zip">ftp://updates.oracle.com/4547809/p4547809_92080_WINNT64.zip</a><br />
oracle 10.2.0.4 patch:<br />
<a href="ftp://updates.oracle.com/6810189/p6810189_10204_AIX5L.zip">ftp://updates.oracle.com/6810189/p6810189_10204_AIX5L.zip</a><br />
<a href="ftp://updates.oracle.com/6810189/p6810189_10204_HPUX-IA64.zip">ftp://updates.oracle.com/6810189/p6810189_10204_HPUX-IA64.zip</a><br />
<a href="ftp://updates.oracle.com/6810189/p6810189_10204_LINUX.zip">ftp://updates.oracle.com/6810189/p6810189_10204_LINUX.zip</a><br />
<a href="ftp://updates.oracle.com/6810189/p6810189_10204_Linux-x86-64.zip">ftp://updates.oracle.com/6810189/p6810189_10204_Linux-x86-64.zip</a><br />
<a href="ftp://updates.oracle.com/6810189/p6810189_10204_Linux-x86.zip">ftp://updates.oracle.com/6810189/p6810189_10204_Linux-x86.zip</a><br />
<a href="ftp://updates.oracle.com/6810189/p6810189_10204_Win32.zip">ftp://updates.oracle.com/6810189/p6810189_10204_Win32.zip</a><br />
<a href="ftp://updates.oracle.com/6810189/p6810189_10204_Win64.zip">ftp://updates.oracle.com/6810189/p6810189_10204_Win64.zip</a></p>
<p>&#8211;The End&#8211;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nwafang.com/2008/03/ftp%e6%96%b9%e5%bc%8f%e4%b8%8b%e8%bd%bdoracle%e8%a1%a5%e4%b8%81.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Analytics Code -->
