SQLSERVER数据库故障分析报告

数据库故障分析报告

一、故障现象

    出现故障的服务器采用WINDOWS SERVER2003 ENTERPRISE的32位版本,打SP2补丁,系统开启PAE支持4GB以上的内存,数据库SQLSERVER2000 ENTERPRISE的32位版本,打SP3补丁,开启AWE支持4GB以上的内存,服务器为16核至强CPU和6GB物理内存配置。

    对于20##-04-12发生的数据库慢,业务系统不能正常运行(在20##-04-10发生的问题是数据库发现有死锁和阻塞的情况),通过查询分析器可以正常登陆数据库,在查询分析器中执行SQL语句速度慢。

    在查询分析器中使用SP_WHO2命令没有发现数据库有死锁和阻塞的情况,可以排除这方面的原因,查看数据库的日志信息有一些警告和报错信息,如下图所示意:

    在sql server profiler中对于故障当时的数据库的跟踪,捕获如下的可疑事件,其中一个事务执行事件偏长,大约14秒钟左右,一个事务出现内存不足问题导致不能被捕获具体内容。

    为了保障系统尽快运行,在通过以上简单故障信息收集后,数据库系统重新启动,故障现象消失。

二、故障分析

    在系统日志中查询的关于SQLSERVER的一个警告和一个错误信息不太影响系统的正常运行,其中警告信息主要是SQL Server 程序总会尝试在 Active Directory 中注册虚拟服务器。在SQLSERVER2000 SP4补丁中解决。错误信息是SQLSERVER2000sp3的一个BUG,如下是微软的一个对这个BUG的说明:

当客户端程序在 Microsoft SQL Server Service Pack 3 (SP3) 数据库上运行查询时,查询可能需要比平时更长的时间。进行以下操作时,可能会出现此行为:

?在客户端程序连接到数据库的同时使用 SQL 查询分析器在 SQL Server 数据库上运行查询。

?在 SQL 查询分析器处于打开状态的同时重新启动 SQL Server 的实例。

以上两个问题只要SQLSERVER2000打到SP4的补丁就可以解决问题。

    对于在sql server profiler中捕获的两个可疑事件,结合现有服务器操作系统和数据库系统全部使用的是扩展内存的使用方式(扩展内存在理论上会比直接内存访问方式效率要低),所以建议需要添加内存并且改用64位的操作系统和数据库。

三、故障处理解决方案

针对现有的问题建议采用如下的措施进行调整:

1、操作系统采用WINDOWS SERVER 20## ENTERPRISE X64版本,数据库采用SQLSERVER2005/SQLSERVER 2008的64位企业版(SQLSERVER2000在稳定性和可靠性上还是要比SQLSERVER2005/SQLSERVER 2008逊色很多)并且更新为最新的补丁集。

2、加大现有服务器的内存,建议扩大到16G以上(现在内存白菜价),这样可以减少系统换页,提高数据库的执行效率。

 

第二篇:课题_解决SQL Server管理器无法连接远程数据库Error_1326错误

解决SQL Server管理器无法连接远程数据库Error: 1326错误

我们在在使用SQL Server时都会遇到使用SQL Server Management Studio无法连接远程数据库实例的问题,错误描述信息摘录如下: An error has occurred while establishing a connection to the server.

(provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 5)

An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 1326)

上面这段英文的翻译后大概是说:不能在数据库之间建立一个连接,原因是命名管道提供者出现错误。其实这是一个比较典型的数据库服务器设置问题,在局域网或广域网中都可能会遇到,我们只需要对数据库服务器进行一些配置便可以解决这个问题,来看看具体的步骤。 第一步:确保服务器端数据库服务已经启动

开始->所有程序->Microsoft SQL Server 2008->Configutation Tools,打开SQL Server Configuration Manager,点击SQL Server Services,查看数据库服务是否已经启动,如果服务未开启,手动启动它。当然,你还可以通过点击Windows中的开始->控制面板->管理者工具->服务,来查看相应的数据库服务是否启动。或者如果服务器和你的机器在同一网络,你还可以通过命令“sqlcmd -L”(注意L要大写)去查看该网络内所有可用的SQL Server服务器。

第二步:在SQL Server Configuration中启用TCP/IP

多个SQL Server服务器之间通过网络相互通信是需要TCP/IP支持的,为使SQL Server服务器能被远程连接必须确保TCP/IP已经启用。按照前面介绍的步骤打开SQL Server Configuration Manager,然后打开SQL Server Network Configuration,选择你要设置的数据库,然后点击TCP/IP,右键启用。如果有必要,你还可以启用Named Pipes。记住,所有的修改都必须在重启SQL Server服务之后才能生效!

第三步:在Windows防火墙中打开SQL Server的端口号

很多时候我们在对数据库服务器本身做了很多次设置后仍然无法成功建立远程连接,这时就要考虑是否是防火墙在作怪。默认情况下,许多端口号和服务都会被防火墙所禁止而不能远程访问或执行,SQL Server默认的端口号也不例外。我们应该重新设置Windows防火墙给SQL Server添加例外。除非人为修改,默认情况下SQL Server的端口号是1433,将该端口号添加到Windows防火墙中。如果SQL Server存在命名实例,那么也应该将SQL Server browser添加到Windows防火墙中。(有关SQL Server的命名实例将在后面介绍)

打开Windows控制面板,选择Windows防火墙->Change Settings->Exceptions->Add Port

点击Add port...在弹出的对话框中填入:

Name: SQL

Port Number: 1433

Protocol: Select TCP

第四步:在SQL Server管理器中启用远程连接

这一步通常会被数据库管理员忽略,如果未启用数据库远程连接,数据库实例只允许在本地进行连接而不能被远程连接,启用远程连接同样非常重要。默认设置中远程连接是被禁止的。如下图,打开SQL Server Management Studio,右键点击数据库实例然后选择属性菜单。 在打开的窗口中,左侧选择Connections,然后勾选"Allow remote connections to this server"。第五步:启用SQL Server Browser服务

如果SQL Server在安装时不是用的默认实例名而是自定义的实例名,并且没有配置特定的TCP/IP端口号,那么按照我们前面的描述SQL Server仍然不能支持远程连接。但如果你启用的SQL Server Browser服务,便可以通过动态TCP/IP端口号进行远程SQL Server连接。启用SQL Server Browser服务非常简单,与启用SQL Server类似,在SQL Server Configuration Manager中右键点击SQL Server Browser,然后选择启用。启用该服务将会影响到服务器上所有已安装的SQL Server实例。第六步:在防火墙中为sqlbrowser.exe应用程序创建例外

我们在前面已经提到了,自定义命名的SQL Server实例要支持远程连接需要启用sqlbrowser服务,Windows防火墙可能会阻止该服务执行。因此,我们必须在Windows防火墙中给sqlbrowser服务添加例外。

首先找到服务器上安装sqlbrowser.exe程序的路径,如C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe。如果不确定SQL Server安装在什么地方,你可以在Windows搜索一下文件名。与我们在前面介绍的在防火墙中添加SQL TCP/IP端口号的方法类似,给sqlbrowser.exe应用程序添加防火墙例外。

最后:重新创建数据库别名

创建SQL Server别名并在应用程序中使用它很常见。使用数据库别名可以确保一旦数据库的位置发生了变化,如更换了新的服务器,IP地址发生了变化等,应用程序中的数据库连接字符串不用修改。否则你更换了数据库的位置,你还要通知所有使用该数据库的应用程序修改源代码或配置文件中的连接字符串,这恐怕是不可能的。所以,使用数据库别名来配置连接字符串是一个非常明智的选择。另外,你还可以使用相同的别名来指向不同的数据库实例,当修改别名参数时,可以马上实现数据库之间的切换。创建数据库别名非常简单,在SQL Server Configuration Manager中选择Aliases进行创建。

相关推荐