<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>完美生活 - 数据库技术</title><link>http://blog.hnce.net/</link><description>专注于网站技术与网络营销的博客 - </description><generator>RainbowSoft Studio Z-Blog 1.8 Arwen Build 81206</generator><language>zh-CN</language><copyright>Copyright 2005 - 2009, 完美生活(专注于网站技术与网络营销的博客). Some Rights Reserved. </copyright><pubDate>Thu, 09 Sep 2010 09:31:45 +0800</pubDate><item><title>Windows 2003上Oracle通过端口映射访问连接超时的解决办法</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/windows2003-oracle-timeout-ora-12535.html</link><pubDate>Tue, 23 Jun 2009 08:45:00 +0800</pubDate><guid>http://blog.hnce.net/post/windows2003-oracle-timeout-ora-12535.html</guid><description><![CDATA[<p>&#160;&#160;&#160;&#160; 布署在IDC机房的Oracle数据库是在内网，没有分配公网IP，同事需要连接上去，通过PortTunnel软件在WEB服务器上将1521端口映射到这台Oracle数据库服务器内网IP的1521端口，使用此种方式进行远程连接在内网的Oracle数据库服务器之前曾使用过，没有出现问题。但是今天所有的配置做好之后，却一直出现提示：ora-12535连接超时。最开始怀疑是网速或网络不通的原因，遂检查问题都排除。以下是具体处理过程和最后解决的办法，现在已经能正常连接上了。</p>  <p>&#160;</p>  <p>环境：</p>  <p>Windows 2003 Server 、Oracle9i</p>  <p>&#160;</p>  <p>检查过程：</p>  <p>telnet 远程IP 1521 </p>  <p>能响应，连接通过</p>  <p>tnsping xxx</p>  <p>查看TNS解析情况，解析正常，连接通过</p>  <p>使用PLSQL Developer访问数据</p>  <p>出现错误：ora-12535，连接超时错误。</p>  <p>&#160;</p>  <p>因为端口映射和上次做的一样，唯一不一样的就是Oracle安装平台不一样，那台服务器是Linux的，记得曾经看过说Windows NT下的Oracle会分配一个随机端口，经过一翻搜索，找到了解决办法。Network Listener 只起一个中介作用，当客户连接它时，它根据配置寻找到相应的数据库实例进程，然后spawned一个新的数据库连接，这个连接端口由Network Listener 传递给客户机，此后客户机就不再和打交道了，即使Listener停止了工作。这个新的连接端口是不可预知的，因而会<strong>被防火墙阻止或没有进行端口映射</strong>。    <br />&#160;&#160;&#160;&#160;&#160; Windows Socket 2 规范有一个新的特性，就是Shared Socket， 所谓共享套接字是指一个进程共享另一个进程的套接字(详见MSDN相关参考）。如果让Network Listener 与数据库服务进程共享套接字，那么连接端口就不会变化。</p>  <p>从以上资料来看，访问该数据库必须关闭防火墙的问题原因也是由此引起的。具体的解决步骤如下：</p>  <p>1、通过修改注册表设置Shared Socket。</p>  <p>在注册表：HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0</p>  <p>新建一个字符串值：USE_SHARED_SOCKET，值设置为：true</p>  <p>如果安装了多个目录，则每个目录都要设置</p>  <p>HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOMEx(x目录编号）</p>  <p>2、设置mts_dispatchers参数</p>  <p>SQL&gt; alter system set mts_dispatchers='(PROTOCOL=TCP)(disptchers=1)';</p>  <p>&#160;</p>  <p>&#160;</p>  <p>OK，重启数据库的Windows 2003系统，问题解决。</p>]]></description><category>数据库技术</category><comments>http://blog.hnce.net/post/windows2003-oracle-timeout-ora-12535.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=442</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=442&amp;key=afa97ed6</trackback:ping></item><item><title>SQL Server 2005 Agent中作业调度执行SSIS包遇到的问题及解决</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/sqlserver2005-agent-ssis-pack-error.html</link><pubDate>Tue, 19 May 2009 14:19:00 +0800</pubDate><guid>http://blog.hnce.net/post/sqlserver2005-agent-ssis-pack-error.html</guid><description><![CDATA[<p>&#160;&#160;&#160;&#160;&#160;&#160; 又是一月过去了，这一段时间以来出差出得我心烦。越来越怀念一直做技术的时光了，刚好公司这边有一个合作项目是我刚进来时做过的事情，拿了过来练练手，顺便将C#的开发继续温习一下。其实在这两年开始做产品运营以来，我一直没有放弃对技术的兴趣与追求，也一直在业余不断的学习跟进与实践。从去年下半年开始，将开发的数据库升级到了SQL SERVER 2005，一切都还较顺利，比较平滑的从SQL Server 2000上过度了过来，最近所开发的项目需要定时从Oracle中导入数据至SQL Server中，采用的方式是使用计划作业通过DTS包导入数据的方式。过去都是直接在SQL Server中采用DTS，没有将DTS包导出，这次因为一些原因需要将包导出再在作业步骤中调用它，问题就出在这个环节。具体情况如下描述：</p>  <p>&#160;</p>  <p>在保存SSIS包时，选择文件系统，包保护级别默认是：使用用户密钥加密敏感数据，</p>  <p><a href="http://blog.hnce.net/UPLOAD/2009/5/SQLServer2005AgentSSIS_14BD3/1.jpg"><img title="未命名1" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="589" alt="未命名1" src="http://blog.hnce.net/UPLOAD/2009/5/SQLServer2005AgentSSIS_14BD3/1_thumb.jpg" width="690" border="0" /></a> </p>  <p>这样导出到文件xxx..dtsx之后，双击直接运行点“执行”，能成功完成数据导入的流程，不会产生任何错误。</p>  <p><a href="http://blog.hnce.net/UPLOAD/2009/5/SQLServer2005AgentSSIS_14BD3/2.jpg"><img title="未命名2" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="625" alt="未命名2" src="http://blog.hnce.net/UPLOAD/2009/5/SQLServer2005AgentSSIS_14BD3/2_thumb.jpg" width="807" border="0" /></a> </p>  <p>&#160;</p>  <p>但是一旦在作业步骤中添加该包来执行就会报错，主要错误信息为：</p>  <p>错误:&#160;&#160; 0xC004700C，位于&#160;&#160; 数据流任务,&#160;&#160; 。。。。。。&#160; 一个或多个组件未能通过验证。&#160;&#160; <br />错误:&#160;&#160; 0xC0024107，位于&#160;&#160; 数据流任务:&#160;&#160; 任务验证期间出错。&#160; </p>  <p>因为当时没有截屏，只记得大概是这个，在网上搜了一下有很多人碰到了类似的问题。于在通过查阅最终的原因是在包保护级别的选项，如果需要通过作业来调用该SSIS文件包，需要将包保护级别设置为：使用密码加密敏感数据。</p>  <p><a href="http://blog.hnce.net/UPLOAD/2009/5/SQLServer2005AgentSSIS_14BD3/image.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="160" alt="image" src="http://blog.hnce.net/UPLOAD/2009/5/SQLServer2005AgentSSIS_14BD3/image_thumb.png" width="658" border="0" /></a> </p>  <p>在密码框中键入你需要设定的密码，在建立作业步骤的时候会需要你输入该密码，以后执行时不会需要再输入。</p>  <p><a href="http://blog.hnce.net/UPLOAD/2009/5/SQLServer2005AgentSSIS_14BD3/image_3.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="180" alt="image" src="http://blog.hnce.net/UPLOAD/2009/5/SQLServer2005AgentSSIS_14BD3/image_thumb_3.png" width="675" border="0" /></a> </p>  <p>&#160;</p>  <p>按此步骤，数据能成功能过作业步骤调用，通过设定的计划，就能定时从Oracle中导入数据至SQL Server 中了。</p>  <p>&#160;</p>  <p>解决此问题MSDN的台湾论坛给了我帮助与启发。</p>  <p>tim_hsu网友的提供了解决这个问题的答案，在此非常感谢。以下为该帖子的链接。</p>  <p><a href="http://social.msdn.microsoft.com/forums/zh-TW/240/thread/cd6ab82b-ea7a-4064-9b20-a278137ea0ea/" target="_blank">使用SQL SERVER 2005 Agent 去啟動SSIS的問題</a></p>]]></description><category>数据库技术</category><comments>http://blog.hnce.net/post/sqlserver2005-agent-ssis-pack-error.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=441</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=441&amp;key=da415585</trackback:ping></item><item><title>MySQL Sidu:基于PHP的免费MySQL管理工具</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/mysql_sidu_free_mysql_gui.html</link><pubDate>Tue, 04 Nov 2008 15:10:06 +0800</pubDate><guid>http://blog.hnce.net/post/mysql_sidu_free_mysql_gui.html</guid><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MySQL&nbsp; Sidu是一款类似于PHPMyAdmin基于WEB的免费MySQL GUI 。它的大多功能与其他MySQL管理工具差不多，但是MySQL Sidu具有以下特别功能：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>*支持按表名称首字母对表进行分组;</p><p>*支持对搜索结果进行过滤、排序；</p><p>*提供了Firefox插件；</p><p>&nbsp;</p><p><a href="http://blog.hnce.net/UPLOAD/2008/11/MySQLSiduPHPMySQL_14416/freemysqlgui.jpg"><img width="484" height="170" border="0" src="http://blog.hnce.net/UPLOAD/2008/11/MySQLSiduPHPMySQL_14416/freemysqlgui_thumb.jpg" alt="MySQL Sidu" style="border: 0px none ;" /></a></p><p>&nbsp;</p><p>相关链接：</p><p><a target="_blank" href="http://sidu.sourceforge.net/mysql-sidu.php">MySQL Sidu下载</a></p>]]></description><category>数据库技术</category><comments>http://blog.hnce.net/post/mysql_sidu_free_mysql_gui.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=424</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=424&amp;key=dae17730</trackback:ping></item><item><title>请及时更新你的SQL SERVER</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/please-timely-upgrading-your-mssqlserver.html</link><pubDate>Wed, 09 Jul 2008 12:55:37 +0800</pubDate><guid>http://blog.hnce.net/post/please-timely-upgrading-your-mssqlserver.html</guid><description><![CDATA[<p>&#160;&#160;&#160;&#160;&#160;&#160; 今天打开邮箱，收到了微软的TechNet 中文速递邮件，关于七月最新的安全更新。对收件人的称呼越来越亲切了，微软亲爱的xx，没有了姓，让人听上去更亲切些了。今年以来，TechNet的邮件给我的感觉有较大的改进，内容越做越好。扯远了。。。今天TechNet中文网站发布了4个最新的重要安全级别安全公告，其中有一个SQL Server的，请大家立即下载安装。</p>  <p>MS08-040公告，安全级别为： 重要</p>  <p>Microsoft SQL Server 中的漏洞可能允许特权提升</p> 根据网站上显示的摘要：此安全更新可消除四个秘密披露的漏洞。 更加严重的漏洞可能允许攻击者执行代码并完全控制受影响的系统。 经过身份验证的攻击者随后可安装程序；查看、更改或删除数据；或者创建拥有完全管理权限的新帐户。   <p>受影响的版本有：</p>  <p>对于 SQL Server 7.0、SQL Server 2000、SQL Server 2005、Microsoft Data Engine (MSDE) 1.0、Microsoft SQL Server 2000 Desktop Engine (MSDE 2000)、Microsoft SQL Server 2005 Express Edition、Microsoft SQL Server 2000 Desktop Engine (WMSDE) 和 Windows Internal Database (WYukon) 的受支持版本，此安全更新等级为&#8220;重要&#8221;。</p>  <p>&#160;</p>  <p>下载更新程序只有10.5M，不是很大，安装过程也很简单，速度很快就可以完成。</p>  <p><a href="http://blog.hnce.net/UPLOAD/2008/7/SQLSERVER_127E7/MsSQL_SP_1.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="456" alt="MsSQL_SP_1" src="http://blog.hnce.net/UPLOAD/2008/7/SQLSERVER_127E7/MsSQL_SP_1_thumb.png" width="501" border="0" /></a>&#160; </p>  <p>点击下一步很快就可以搞定。</p>  <p><a href="http://blog.hnce.net/UPLOAD/2008/7/SQLSERVER_127E7/MsSQL_SP_2.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="460" alt="MsSQL_SP_2" src="http://blog.hnce.net/UPLOAD/2008/7/SQLSERVER_127E7/MsSQL_SP_2_thumb.png" width="504" border="0" /></a> </p>  <p>&#160;</p>  <p>相关链接：</p>  <p>点击下载：<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&amp;FamilyID=4fd1f86a-94a2-43d8-9b0a-774c81426d9e" target="_blank">Security Update for SQL Server 2000 Service Pack 4 and MSDE 2000 (KB948110) - 简体中文</a>&#160;&#160;&#160; 10.5M</p>  <p>点击查看：<a href="http://www.microsoft.com/china/technet/security/bulletin/ms08-040.mspx" target="_blank">Microsoft 安全公告 MS08-040 - 重要介绍</a></p>]]></description><category>数据库技术</category><comments>http://blog.hnce.net/post/please-timely-upgrading-your-mssqlserver.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=398</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=398&amp;key=d0ebc3bf</trackback:ping></item><item><title>SQL SERVER 2000 日志文件清空的方法</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/Dump_sqlserver_log.html</link><pubDate>Sun, 17 Feb 2008 18:00:36 +0800</pubDate><guid>http://blog.hnce.net/post/Dump_sqlserver_log.html</guid><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天操作一个数据库时，程序提示数据日志过大；打开数据文件存放的目录检查，发现LDF文件已经达到了2G多。清除的方法是我在网上看到的，试了一下，达到要的效果，完成之后LDF文件只有100M不到。操作之前请做好备份。。。</p><p>&nbsp;我的操作是在<strong>查询分析器</strong>中完成,操作方法如下：</p><p>1、DUMP TRANSACTION <font color="#ff0000">DataBase_Name</font> WITH NO_LOG</p><p>2、BACKUP LOG <font color="#ff0000">DataBase_Name</font>&nbsp; WITH NO_LOG&nbsp;&nbsp;</p><p>3、DBCC SHRINKDATABASE(<font color="#ff0000">DataBase_Name</font>)</p><p>三步分别做的工作是：</p><p>1：<strong>清空日志</strong><br />2：<strong>截断事务日志<br />3</strong>：<strong>收缩数据库</strong></p><p>其中前1、2步的操作都很快，第三部耗费了不少时间。</p>]]></description><category>数据库技术</category><comments>http://blog.hnce.net/post/Dump_sqlserver_log.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=365</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=365&amp;key=26461d19</trackback:ping></item><item><title>王者归来,MySQL-Front</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/SQL-Front_Release.html</link><pubDate>Thu, 06 Dec 2007 23:53:24 +0800</pubDate><guid>http://blog.hnce.net/post/SQL-Front_Release.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MySQL-Front曾是我经常用的一款工具,但是前一段因为受MySQL AB警告侵权宣布停止开发了。后来改用了Navicat MySQL，早几天打开旧MySQL-Front网站却发现了一些变化，有了新的提示。换了个名字继续开发发布了，现在叫SQL-Front。<br /><br />过去的Fans去看看吧。<br /><br />网站上的提示如下：<br /><br />MySQL-Front has been renamed to SQL-Front &nbsp;<br />MySQL-Front has been renamed to <strong>&gt;&gt; SQL-Front &lt;&lt;</strong>.<br /><br />Please help to publish the new new name by posting it in a lot of forums,<br />and please update your links to this page.<br /><br />Thanks a lot for your help!<br /><br />We hope that humanity will learn to work together instead of fighting one another senselessly...<br /><br />相关链接：<a target="_blank" href="http://www.sql-front.com/">http://www.sql-front.com/</a>]]></description><category>数据库技术</category><comments>http://blog.hnce.net/post/SQL-Front_Release.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=359</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=359&amp;key=73d72953</trackback:ping></item><item><title>PowerDesigner导入SQL生成数据模型</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/PowerDesigner_reverse_sql.html</link><pubDate>Wed, 25 Apr 2007 19:14:03 +0800</pubDate><guid>http://blog.hnce.net/post/PowerDesigner_reverse_sql.html</guid><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天在进行程序调试时需要将一个已有的应用进行修改，因为是别人开发的系统，数据结构没有。需要自己来进行建立，于是把数据库的结构导出成了.SQL文件，然后再导入PowerDesigner进行处理,方法如下：</p><p>1、启动PowerDesigner，选择&quot;File&quot;菜单中的Reverse Engineer-&gt;Database</p><p><img onload="ResizeImage(this,520)" src="http://blog.hnce.net/upload/200704251922007218.jpg" alt="" title=""/></p><p>2、选择你的DBMS类型。点击确定</p><p>&nbsp;<img onload="ResizeImage(this,520)" src="http://blog.hnce.net/upload/200704251924101270.jpg" alt="" title=""/></p><p>3、选择&quot;Using script files&quot;并选择你的SQL文件。点击确定。</p><p><img onload="ResizeImage(this,520)" src="http://blog.hnce.net/upload/200704251926454872.jpg" alt="" title=""/></p><p>4、启动Reverse Engineer...</p>]]></description><category>数据库技术</category><comments>http://blog.hnce.net/post/PowerDesigner_reverse_sql.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=342</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=342&amp;key=d7d8dfef</trackback:ping></item><item><title>启动MySQL Query Cache</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/MySQL_Query_Cache.html</link><pubDate>Mon, 23 Apr 2007 10:38:10 +0800</pubDate><guid>http://blog.hnce.net/post/MySQL_Query_Cache.html</guid><description><![CDATA[如果 MySQL Server 负载比较高，处理非常繁忙的话，可以启动Query Cache 以加速响应时间，启动方法可以在my.cnf(Linux)或my.ini(Windows)中加入不以下项目:(Redhat下面是：/etc/my.cnf;Debian和Ubuntu是在/etc/mysql/my.cnf)<br /><br />query_cache_size = 268435456<br />query_cache_type = 1<br />query_cache_limit = 1048576<br /><br />以上语句的设置中 query_cache_size 是分配256M内存给Query Cache;query_cache_type=1，是给所有的查询做Cache；query_cache_limit 是指定个别的查询语句1KB的内存<br /><br />这些数据可以根据自己的需求作出适当的更改，设置完成之后，保存文档，重新启动MySQL即可。]]></description><category>数据库技术</category><comments>http://blog.hnce.net/post/MySQL_Query_Cache.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=340</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=340&amp;key=0a1a29bc</trackback:ping></item><item><title>MySQL使用中产生的Error:Can't create/write to file错误</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/MySQL_Not_CreateWrite_Temp.html</link><pubDate>Mon, 16 Apr 2007 21:15:05 +0800</pubDate><guid>http://blog.hnce.net/post/MySQL_Not_CreateWrite_Temp.html</guid><description><![CDATA[<p>今天在测试上周安装好的SupeSite之后,在修改用户空间模板之后产生了一个MySQL查询错误<br />SupeSite info: MySQL Query Error<br />Script: /index.php</p><p>Error: Can't create/write to file 'C:\WINDOWS\TEMP\#sql_4f4_0.MYD' (Errcode: 17)<br />Errno.: 1</p><p>Similar error report has beed dispatched to administrator before.<br /></p><p>看到这个错误的第一感觉就知道是权限的问题,因为我对C盘权限只开放了administrators组的权限,于是打开C:\windows\TEMP赋予该目录Everyone所有的权限.重新测试问题依旧,打开Temp目录看#sql_4f4_0.MYD这个文件已在存在,而且创建日期是早几天之前.估计是上次安装好之后访问产生的,于是将这个目录全清空,问题解决...</p><br /><p>附：2007-4-17 这个问题今天依然出现了，上服务器一看，原来是因为Mcafee杀毒软件阻止了进程对该文件的读写操作，McaFee有一项功能就是阻止程序从Temp目录运行和读写。。。将其加入排除范围问题即解决。。。</p>]]></description><category>数据库技术</category><comments>http://blog.hnce.net/post/MySQL_Not_CreateWrite_Temp.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=336</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=336&amp;key=c1e8d5f0</trackback:ping></item><item><title>2007年展望:开源数据库技术发展趋势</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/OpenSource_DataBase.html</link><pubDate>Sat, 31 Mar 2007 13:16:36 +0800</pubDate><guid>http://blog.hnce.net/post/OpenSource_DataBase.html</guid><description><![CDATA[<div>来自：IT168 </div><div></div><div>2006年已经成为写满注脚的一页成为了历史，2007年作为新的空白页刚刚被掀开。 <br /><br />　　开源数据库在2006年的应用开发中取得了新的进步，截至到2006年12月，据调查数据显示，在开发项目中使用的数据库软件品牌分布以及企业内部信息系统使用的数据库分布调查中，开源MySQL都位居第三，紧随位居前两位的Oracle和微软的SQL Server之后（如下图）。 <br /><br /><br /><img onmouseover="changeImageDimensions(this, 'over')" onmouseout="changeImageDimensions(this, 'out')" src="http://bbs.lupaworld.com/1123517557/Fid_46/46_4896.jpg" onload="setImageDimensions(this)" border="0" alt="" /> <br /><br />　　图1：在开发项目中使用的数据库软件品牌分布调查结果图 <br /><br /><br /><img onmouseover="changeImageDimensions(this, 'over')" onmouseout="changeImageDimensions(this, 'out')" src="http://bbs.lupaworld.com/1123517557/Fid_46/46_4895.jpg" onload="setImageDimensions(this)" border="0" alt="" /> <br /><br />　　图2：公司和企业内部使用的数据库软件品牌分布调查结果图 <br /><br />　　在2006年频频遭遇竞争性收购和收购威胁的开源数据库，在新的一年中其产品和技术或将独善其身或将推陈出新，我们将拭目以待。 <br /><br /><br />　　纵然开源数据库被一些人形容为数据库领域的&ldquo;小生境&rdquo;，纵然面临着来自主流商业数据库厂商的竞争性收购，但开源数据库各自的&ldquo;头衔&rdquo;却都很有气势。 MySQL号称&ldquo;世界上最流行的开源数据库&rdquo;，PostgreSQL号称&ldquo;世界上最先进的开源数据库&rdquo;，EnterpriseDB号称&ldquo;真正的企业级开源数据库，并足以与Oracle相竞争&rdquo;（EnterpriseDB Advanced Server 8.1已经发布可用），如此等等。 <br /><br />　　即使把开源数据库看作整个领域的小生境，其内部的&ldquo;生态变化&rdquo;也足以丰富，各开源数据库厂商或者被商业厂商收购（InnoDB和BerkeleyDB已经被Oracle收购），或者在问世不久被合作伙伴收购（MaxDB），或者自己的部分核心技术被竞争对手收购（MySQL）&hellip;&hellip;无论是开源数据库领域的业界动态还是技术变革，都丝毫不比数据库的大生境所逊色。 <br /><br />　　完善自我的MySQL <br /><br />　　在2006年遭遇最为&ldquo;惨重&rdquo;的当属MySQL。 <br /><br />　　MySQL开源数据库采用的是双重授权策略，对于不愿公开自己源代码的使用者，需要付费使用MySQL, 而对于开放源代码的使用者，可以基于GNU的公共许可协议GPL来使用。 <br /><br />　　MySQL数据库并没有属于自己的用于负责数据的物理存储和索引的存储引擎，它普遍使用别的开源数据库引擎做为自己的关键性存储引擎。MySQL曾经把 InnoDB做为自己的事物型数据存储引擎，把BerkeleyDB做为自己的嵌入式事物型存储引擎。这两种开源数据库被Oracle收购之后（InnoDB在2005年10月份被收购，BerkeleyDB在2006年2月份被收购），MySQL在做了一些应急措施及得到一些&ldquo;帮助&rdquo;之后（2006年2月，MySQL雇佣了嵌入式开源数据库Firebird项目的关键人物Jim Starkey；2006年9月份，宣布去除掉对BerkeleyDB存储引擎的支持；2006年7月25日，专门为MySQL量身定做的Beta版 SolidDB Storage Engin正式对外发布）正在加紧研发自己的存储引擎。 <br /><br />　　MySQL起初也没有自己的存储过程 (Stored Procedure)语言，在当时这是对习惯于企业级数据库的程序员的最大限制。多语句SQL命令必须通过客户方代码来协调，这种情形是借助于相当健全的查询语言和赋予客户端锁定和解锁表的能力，这样才允许的多语句运行。 但在MySQL 5.0发布之后，MySQL宣称已经完全支持存储过程。 <br /><br />　　但是MySQL目前没有自己的存储引擎。MySQL的存储是以可插取的存储引擎存在的，它采用不同的存储引擎技术把数据存储在文件或者内存中。 MySQL有多种存储引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、 FEDERATED、ARCHIVE、CSV、BLACKHOLE。可以采用内存存储引擎存储临时数据，采用事物存储引擎来完成事物处理，等等。相比之下，其它的一些数据库系统(包括大多数商业选择)仅支持一种类型的数据存储。对于用户而言，这种选择不同的存储引擎来存储和检索数据的灵活性，是比较受欢迎的。然而，Oracle也正是看中了这一点，才对MySQL发难。 <br /><br />　　研发自己的存储引擎是MySQL在2007年亟需解决的任务。2006年年底，MySQL AB公司和NitroSecurity公司达成协议，双方联合研发一款基于NitroEDBTM高速关系数据库技术的MySQL数据库引擎。 NitroSecurity技术使用独特的索引技术、数据管理方法和查询处理算法，该技术可以轻松处理大容量的数据库操作，而未来的MySQL数据库服务器版中将嵌入NitroSecurity的NirtroEDB数据库存储引擎，并且这种解决方案可以与旧版本的MySQL数据库的应用程序互相兼容。而在 2007年的开始，已经有消息传出针对批量Web服务器环境而设计的内部测试版新MySQL存储引擎已经发布，以用于细化MySQL的存储引擎的功能和性能。 <br /><br />　　2007年新的一年中，MySQL不仅要在存储引擎上做出努力，还要在磁盘存储、内存损耗、集群技术以及其他的企业级性能和功能上有自己的突破。另外，面对时下的开源环境，MySQL也应该仔细考虑自己的发行费用方式的转变、培训、关键性部署等非技术性问题。 <br /><br />　　仍需努力的PostgreSQL <br /><br />　　2006年的6月份，PostgreSQL庆祝了自己的10岁生日（2006年12月，PostgreSQL 8.2正式版发布）。并且在2006年11月份被《Linux Journal》杂志的评为&ldquo;2006年度开源数据库编辑选择奖&rdquo;。实际上，PostgreSQL一直在觊觎MySQL的&ldquo;第一&rdquo;位置，即使连从 PostgreSQL派生出来的EnterpriseSQL也是&ldquo;理直气壮&rdquo;。 <br /><br />　　PostgreSQL是一种复杂的对象&mdash;&mdash;关系型数据库管理系统（ORDBMS），它的特性丰富、复杂，其中的一些特性甚至连商业数据库都不具备，其目标是要做超大型的面向对象关系型数据库系统。它支持 SQL 89和SQL 92标准。相对于MySQL，它支持事物处理，可以满足一些商业领域的数据操作需求。但是因为PostgreSQL使用的进程，与使用线程的MySQL相比，在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多，因此PostgreSQL的运行速度明显降低。对于一些需要复杂业务操作，而对性能要求不是过于苛刻，同时期望系统的设计富于扩展性的用户而言，可以采用PostgreSQL数据库。 <br /><br />　　相比于MySQL在2006年所遭受的打击，PostgreSQL在过去的一年中除去一些Bug修复、产品发布和获得Sun公司支持外，可谓风平浪静。但在新的2007年中，PostgreSQL如果想步MySQL的后尘仍然需要努力。 <br /><br />　　首先，在应用平台上，PostgreSQL是运行在Cygwin模拟环境下，在Windows下运行没有MySQL稳定（MySQL在 WinNT/Win2000/WinXP下是一个服务）。广大的Windows环境阵地，应该成为PostgreSQL不能失去的一块阵地。 <br /><br />　　在经历了更为彻底的测试之后，PostgreSQL的事务支持能力在开源数据库中是值得称赞的。而对于开源数据库产品在商业上的关键应用，对于事务处理的支持是必不可少的。但是这并不能保证PostgreSQL就可以完全满足商业性数据处理需求，因为PostgreSQL并不完全适应24/7运行，而要求人为地隔一段时间运行一次VACUUM。所以，在新的一年中这方面加强自己的完善性。 <br /><br />　　对于无事务的MyISAM表处理，MySQL采用表锁定，一个长时间运行的查询很可能会长时间地阻碍对表的更新，而PostgreSQL不存在这样的问题。 <br /><br />　　客观而言，PostgreSQL的技术特性与商业应用是比较接近的。 <br /><br />　　PostgreSQL率先支持存储过程，这就可以保证在不增加数据库服务器负担的前提下，对以一些严肃的商业逻辑进行封装，还可以利用数据库服务器本身的内在机制对存储过程的执行进行优化。同时，存储过程的存在也避免了在网络上大量的原始的SQL语句的传输。 <br /><br />　　PostgreSQL支持视图，对于视图权限的合理使用可以提供行级别的权限，这是MySQL的权限系统所无法实现的。另外，它还支持触发器、约束、子查询、R-trees可扩展索引类型、UDF(用户定义函数)扩展。以PostgreSQL的这些技术性能，似乎没有理由去据MySQL之后，但是， MySQL的流行性和广泛性使得其拥有更多的用户群、更多的开发技术支持、更丰富的应用考验、着更好的商业支持、更完善的技术文档资料。拓展自己的应用范围，提高部署安装数量，是PostgreSQL在新的一段时间内的重中之重。 <br /><br />　　小结 <br /><br />　　 MySQL与PostgreSQL基本上已经成为开源数据库的代表产品，其他的一些开源数据库与这二者相比，在总体技术性能、应用部署、下载量等方面都不太具有代表性。但是，MySQL与PostgreSQL在向企业级商业数据库产品前进的战略和路线，可以做为其他开源数据库的前车之鉴。 <br /><br />　　开源数据库与主流专有商业数据库的竞争关系是显而易见的，但是随着&ldquo;开源模式&rdquo;的趋于成熟和稳定，以及对传统专有商业软件业的影响甚至颠覆，数据库产品领域不再是&ldquo;一家独大&rdquo;。用户在以后的产品采购决策中，会更加青睐对开源数据库的选择。但是，开源数据库产品在自身技术特性和功能特性的提高和完善上需要寻找一个平衡点，不要去过分地遵循专有商业数据库的产品路线图，而是要找出适合自身发展的技术、市场切入点。<span class="postbody"><br /></span></div>]]></description><category>数据库技术</category><comments>http://blog.hnce.net/post/OpenSource_DataBase.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=325</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=325&amp;key=7bfbd7c2</trackback:ping></item></channel></rss>
