最近一个多月,甚是悠哉,无事可做。上线的网站系统也没接到客户的反馈,反而觉得无聊之极了。上周五早上,一上QQ,就收到客户发来消息,管理平台无法登陆了。心里一惊,立马开始查找故障原因。翻看了系统日志,提示数据库连接超时(见下图)。
打开vs,运行程序,同样报错,数据库连接超时。找到报错位置的SQL语句,只是很简单的一条查询语句。连接字符串也没有问题,怎么会报错呢?百思不得其解,于是乎,打算到查询分析器执行一下这条SQL语句,看看结果如何。接着,出现了下面的情况。
搜迪斯内,原来是Sql Server 2008过期了!一般我们会安装开发版或者企业版的试用版Sql Server 2008,试用期是180天。通常的做法是,去百度搜一个密钥,运行Sql Server 2008的安装程序,选择版本升级,下面的步骤和全新安装一样,输入企业版或者开发版密钥即可。就在这个问题出现的前几天,我本机上的Sql Server 2008也过期了,我就是通过输入企业版密钥版本升级解决的。
Sql Server 2008安装密钥
开发版(Developer): PTTFM-X467G-P7RH2-3Q6CG-4DMYB
企业版(Enterprise): JD8Y6-HQG69-P9H84-XDTPG-34MBB
一般来说,这些步骤完成之后,Sql Server 2008就可以继续使用了。 我在升级过程中也没遇到什么问题,顺利升级完成。然而,当我再次打开Sql Server Management Studio的时候,还是提示版本过期。没遇过这种情况,只好百度解决办法。看到网上有一种方案是,第一次正常升级,然后打开注册表,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\ConfigurationState,把键值CommonFiles的值改成3,然后再次重复一次升级,升级时选择只升级共享组件即可。于是,我立马打开注册表修改了键值,然后开始再次进行升级,结果安装过程报错,报错信息“无法生成临时类(result=1)。error CS1567:生成Win32资源出错:另一个程序正在使用此文件,进程无法访问。”(见下图)。怀疑可能是服务器上安装的安全狗导致的,于是乎直接卸载了,终于不报这个错误了。这里可能是因为安全防护软件的安全策略禁止了在系统敏感目录下创建文件导致的。倘若遇到类似无法创建文件的权限错误,请关闭安全防火软件或关闭系统防火墙。
然而,这个问题解决之后又出现了其他的奇怪错误信息“参数错误。”(见下图)。不管怎么样都不行,就连修复程序也没法进行下去。
这里补充一下安装中可能遇到情况,例如下图这种错误提示:由于登陆失败而无法启动服务。这是因为升级的实例MSSQLSERVER主服务没有启动导致的。我这里无法启动的原因是,登陆身份账号登陆失败,导致服务启动。这是由于安全狗的账号保护禁用了服务登陆所使用的账号,这个账号是在Sql Server安装时自动创建的,建议禁用掉,使用本地系统账号登陆即可。
不论是升级Sql Server还是修复Sql Server默认实例MSSQLSERVER,皆以失败告终。只好寻求其他解决办法:安装免费授权的Express Edition(学习版)。在微软中国网站查询一下各版本的授权情况:http://www.microsoft.com/china/sql/2008/howtobuy/(如下图)。
接着,在微软中国官网下载了Sql Server 2008 Express(如下图),进行安装,安装实例名为SQLEXPRESS。安装过程,一切正常。
但是,问题又来了。打开Sql Sserver Management Studio时,依旧提醒版本过期。为什么会这样呢?因为MSSQLSERVER和SQLEXPRESS两个实例是共享的同一个SSMS。接着尝试单独下载Express的SSMS进行安装,如下图。
安装过程和安装新实例SQLEXPRESS是差不多,安装时选择向实例SQLEXPRESS中添加功能(如下图)。
安装完成,悲剧依旧,在程序列表里面已经找不到实例SQLEXPRESS的独立SSMS,看来这个SSMS还是和实例MSSQLSERVER共享的。这意味着无法在服务器上打开查询分析器了。于是乎,尝试在本机上远程登录数据库。尽管版本已经过期,但是远程登陆实例MSSQLSERVER成功。这里思考:虽然服务器无法打开SSMS,但是本机可以远程登录,只需要把实例MSSQLSERVER的数据库导入到实例SQLEXPRESS即可。通过IP/实例名,即IP/SQLEXPRESS,使用安装时设置的sa账号登陆。悲剧的,登陆失败,而且是大家都很眼熟的40错误(见下图)。
通过查看配置管理器发现,实例SQLEXPRESS的数据库主服务没有开启,尝试开启却失败。更换其他身份进行登陆,同样无法启动服务。百思不得其解,百度一番,怀疑可能是因为服务端口冲突导致的。打开Sql Server配置管理器,将实例SQLEXPRESS的网络配置中的协议开启状态配置的和实例MSSQLSERVER的一样即可。重点在于实例SQLEXPRESS的网络配置中TCP/IP协议的配置内容,最后一项中的TCP端口为空,且动态端口为2104(这个是安装时随机的端口,可能每个人的都不太一样。)。
这里将动态端口删除,设置TCP端口为1434(这里随便设置,但是尽可能设置大一点的端口,以免和系统内的其他程序服务所使用的端口冲突)。再去启动实例SQLEXPRESS数据库主服务时,终于成功了。再次通过本机远程登录实例SQLEXPRESS,也成功了。这里登录的服务器名可以是IP/SQLEXPRESS或者IP,端口格式,比如IP,1434(见下图)。
这样就可以同时登录两个实例MSSQLSERVER和SQLEXPRESS了(见下图),然后通过Sql Server导入和导出工具,把实例MSSQLSERVER下的数据库迁移到实例SQLEXPRESS中去,最后修改一下web程序的web.config中数据库连接字符串服务器名即可。到此,Sql Server 2008版本过期的问题就解决了。
补充一些内容,还有一种方式可以实现不需要修改配置文件中的数据库连接字符串,即可保证程序正常运行。那就是将实例MSSQLSERVER的TCP端口修改1434,将实例SQLEXPRESS的TCP端口修改为1433即可。当我们使用IP访问数据库时,他会通过默认的数据库端口1433连接数据库,一般Sql Server安装的默认实例名都是MSSQLSERVER(Express学习版除外)。我们把这两个实例的TCP端口对调一下,那么当我们使用IP访问数据库时,实际上访问的是IP/SQLEXPRESS。这样做可以实现不需要修改程序,即可让程序正常运行。 另外,我这个过程的最后,忽然发现Sql Server配置管理器不见了!于是,我使用“SQLServerManager”搜索了一下服务器的文件,找到一个SQLServerManager10.msc的程序,打开之后同样也是Sql Server配置管理器,这个可能是安装SQLEXPRESS时安装上去的。
原本,故事到这里应该是可以结束了的。但是,在我重新使用企业版密钥进行版本升级安装之后,居然又成功的将实例MSSQLSEREVR升级到了企业版。立马打开Sql Server Management Studio,居然可以打开了。使用windows身份登录,成功将两个实例登录了(见下图)。
万万没想到,转了一大圈之后,又回到了最初的梦想。而且,梦想还是是实现了。 总结一下:Sql Server版本过期,可以通过网上公开的企业版密钥进行版本升级安装解决,这个过程中建议关闭所有安全防护软件的防火墙,安全策略,最好是能够退出安全防火软件,停止其服务。遇到错误信息提示,多尝试几次。当然,实在不行,安装一个免费授权的Express学习版也不错,前提是你不需要使用到开发版或企业版中那些高大上的功能,同时你的数据库文件不超过4GB。否则,还是老老实实安装Enterprise Edition企业版或者Standard Edition标准版Sql Sever吧。下面摘抄一段来自微软中国官网的文字。
创建网站时,常常需要一个位置存储数据。数据可以是访问者输入的数据、有关产品或服务的信息、新闻文章、讨论或其他所有可能的信息集合。绝大多数网站从数据库读取数据并向数据库写入数据,这种方式似乎近期内不会有大的变化。
有许多数据库系统可供选择:有收费上千的,也有其他一些免费的,价格不同,所提供的功能也不同。Microsoft 的高级数据库解决方案– Microsoft SQL Server2008 声名远播。这是一款功能齐全的数据库服务器,服务规模最大,支持高可用性的配置,容错性高,包含规格一流的分析工具。如果您要构建一个服务于上千并发用户的业务关键应用,上述功能对您来说再合适不过了。但是,对开发一个硬件存储较小的网站而言,这些功能则有些“大材小用”了,您认为呢?
实际上,SQL Server 2008 有多个版本,以便适用于各种应用场景。对于开发 Web 应用,SQL Server 2008 Express Edition是一个理想选择。它提供了与其他版本的 SQL Server 几乎相同的高级数据库引擎,同时有几个扩展性限制(只能使用单处理器和 1 GB RAM,数据库容量限制为4 GB)。数据库引擎与其他SQL Server 版本完全兼容,如果客户或主机托管服务提供商要求与 SQL Server Web 版本、标准版或企业版的可扩展性,基于SQL Server Express Edition 构建的任何应用部署到其他生产环境中完全可以正常运行。(尤其需要注意,SQL Server 2008 Express 与 SQL Server 2008 Web 版的功能匹配。您的托管服务提供商很可能使用该版本,所以您不可能使用托管供应商不支持的功能。)
SQL Server Express Edition 与Microsoft 开发工具紧密集成,比如 Visual Studio 和 Visual Web Developer Express,它还支持高级数据类型,比如本机 XML、空间数据和 FILESTREAM 数据等。事实上,当您了解 SQL Server Express 最重要的功能时,您会惊讶的看到,它包括的 SQL Server 功能如此之多,并且无论对于开发和部署,都是免费提供的。
有三款 SQL Server Express Edition 版可供选择:
· SQL Server 2008 Express Edition with Tools:该版本包含数据库引擎和 SQL Server Management Studio Basic,该工具包含了创建、编辑和管理数据库所需的所有功能。
· SQL Server 2008 Express Edition with Advanced Services:该版本包含数据库引擎、Management Studio,以及 Full-text Search(用于搜索文本多的数据)和 Reporting Services(用于根据您的数据创建功能强大的报表)。
· SQL Server 2008 Express Edition (Runtime Only):该版本只包含数据库
引擎。
您也可以单独下载 SQL Server Management Studio 2008 Express。如果您已有了 Runtime Only 版本,或者在一台独立计算机安装以进行远程管理,单独下载就很有价值。
可以从 http://www.microsoft.com/express/sql/download 免费下载所有这些版本。