网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

如何解决SQLServer2000中的连接问题

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

    如何解决SQLServer2000中的连接问题
    
    概要解决连接问题参考这篇文章中的信息适用于:
    概要
    本文能帮助您解决MicrosoftSQLServer2000的连接问题。本文描述了常见连接问题和所能采取的有助于解决连接问题的步骤。回到顶端SQLServer2000支持SQLServer实例和客户端应用程序间的多种通信方式。如果您的客户端应用程序和SQLServer实例位于同一台计算机上,那么MicrosoftWindows处理之间的通讯(IPC)部件(例如本地命名管道或共享内存协议)将被用于通信。但是,当客户端应用程序和SQLServer实例位于不同计算机上时,一个网络IPC(例如TCP/IP或命名管道)将被用于通信。
    SQLServer2000使用网络库(一个DLL)与特定的网络协议进行通信。一对匹配网络库必须在客户端计算机上激活,而且在支持待用网络协议的服务器计算机上也必须是激活的。例如,如果您想启用一个客户端应用程序,通过TCP/IP与某个特定的SQLServer实例通信,那么客户端的TCP/IP套接字网络库(Dbnetlib.dll)就必须配置为连接到客户端计算机的服务器。同样,服务器TCP/IP套接字网络库(Ssnetlib.dll)必须侦听服务器计算机。在此方案中,TCP/IP协议堆栈必须同时安装在客户端计算机和服务器计算机上。
    在安装完SQLServer2000之后,您可以通过客户端网络实用程序来配置客户端网络库的属性。您可以通过服务器网络实用程序(Svrnetcn.exe)来配置服务器网络库的属性。在安装SQLServer安装程序中的服务器工具时,服务器的网络库也同时被安装了。但是,某些服务器的网络库可能未被激活。在默认情况下,SQLServer2000启用并侦听TCP/IP、命名管道和共享内存。因此,如果一个客户端要连接到一台服务器计算机,该客户端必须使用一个客户端网络库,该网络库须与SQLServer实例正在使用的服务器网络库之一相匹配。
    有关SQLServer通讯部件和网络库的其他信息,请参见“SQLServer在线参考书”中的下列主题:
    ?通信部件?客户端和服务器网络库?管理客户端
    回到顶端
    解决连接问题
    在SQLServer2000中您可能会注意到的大多数连接问题都是由TCP/IP的问题或Windows身份认证的问题引起,或者由两者共同引起。
    重要说明:在开始解决SQLServer2000的连接问题之前,请确认MSSQLServer服务已在运行SQL重要说明Server的计算机上启动。
    验证DNS设置
    域名系统(DNS)中的名称解析过程用于解析SQLServer实例名称的IP地址。如果名称解析过程工作不正常,就不能获得SQLServer实例,您可能会收到一条或多条下列错误信息:SQLServerdoesnotexistoraccessdeniedGeneralNetworkErrorCannotGenerateSSPIContext要验证名称解析过程是否在解析正确的服务器,可以使用服务器名和服务器的IP地址ping服务器。为此,请按以下步骤操作:1.单击“开始”,然后单击“运行”。2.在“运行”对话框中,在“打开”框中键入cmd,然后单击“确定”。3.在命令提示符下,运行下列命令:
    ping
    记录返回的IP地址。4.在命令提示符下,运行下列命令(此处的IPaddress就是您在步骤3中记录的IP地址):
    ping–a
    验证命令解析的是正确的服务器名。如果两个指定的命令有任何一个不成功、超时或没有返回正确的值,那么DNS查找未能正常工作,或者有其他网络或路由问题引发问题。要查看当前DNS设置,在命令提示符下运行下列命令:
    ipconfig/all
    有关ipconfig命令的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:223413Windows2000中Ipconfig.exe的选项
    要解决此问题,可以在客户端计算机上的%systemroot%\system32\drivers\etc\hosts文件中为服务器添加一个条目。要解决此问题,还可以使用命名管道网络库连接到服务器。
    验证启用的协议和别名
    如果客户端计算机上的别名设置错误,可能会引起连接问题。您可以使用客户端网络实用程序查看别名。为此,请按以下步骤操作:1.启动客户端网络实用程序。如果SQLServer客户端工具被安装在正在运行客户端应用程序的计算机上,请按照以下步骤启动客户端网络实用程序:
    a.单击“开始”,然后指向“程序”。b.指向“MicrosoftSQLServer”,然后单击“客户端网络实用程序”。如果SQLServer客户端工具没有安装在客户端计算机上,请按照以下步骤启动客户端网络实用程序:a.单击“开始”,然后单击“运行”。b.在“运行”对话框中,在“打开”框中键入cliconfg,然后单击“确定”。2.在“SQLServer客户端网络实用程序”窗口中,单击“常规”标签,然后启用您要使用的所有协议。
    注意:您必须至少启用TCP/IP协议和命名管道协议。注意3.单击“别名”标签,然后验证为SQLServer实例所配置的别名。4.验证别名的属性,确认服务器名或IP地址和协议的配置是正确的。通过使用服务器名、IP地址或者其他协议,您可以创建一个新的别名以测试连接性能。
    注意:在Microsoft数据存取部件(MDAC)的早期版本中,客户端网络实用程序的用户界面是不同的。因此,注意如果您没有看到本文中列出的选项,请在运行客户端应用程序的计算机上安装MDAC的新版本。
    验证SQLServer实例正在正确地侦听
    要验证SQLServer实例正在正确地侦听命名管道、TCP/IP或您在客户端应用程序中使用的其他协议,请打开当前的SQLServer错误日志文件。SQLServer错误日志文件可能包括与以下类似的条目:
    2003-11-0609:49:36.17serverSQLserverlisteningonTCP,SharedMemory,NamedPipes.2003-11-0609:49:36.17serverSQLserverlisteningon192.168.1.5:1433,127.0.0.1:1433.
    通过分析SQLServer错误日志文件中的条目,可以验证SQLServer实例是否正在侦听正确的IP地址和端口。在默认情况下,一个默认的SQLServer实例侦听端口1433。您还可以使用服务器网络实用程序来验证SQLServer的协议设置并更改SQLServer中的属性,包括可以连接到SQLServer和可以使用的端口的协议。关于使用服务器网络实用程序的更多信息,请参见SQLServer在线参考书中的“SQLServer网络实用程序”专题。
    有时候,SQLServer2000可能不会绑定于端口1433或任何其他指定的端口。如果端口正被其他应用程序使用,或者如果您正在尝试使用一个错误的IP地址进行连接,就可能会出现此问题。因此,TCP/IP到SQLServer的连接可能不成功,在SQLServer错误日志中您会收到下列错误信息:2001-11-1415:49:14.12serverSuperSocketInfo:BindfailedonTCPport1433.有关其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:307197PRB:TCP\IP端口正由另一应用程序使用
    如果通过TCP/IP连接您不能连接到SQLServer实例,请尝试使用命名管道协议或共享内存协议。在命令提示符下运行下面的命令,以获取关于正在使用的端口的信息:
    NETSTAT-an
    您还可以使用Portqry命令行实用程序来获取关于正在使用的端口的更多信息。
    有关Portqry命令行实用程序的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:310099Portqry.exe命令行实用程序说明有关与TCP/IP套接字相关的可能的错误的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:306865BUG:当TCP/IP是唯一的协议时,SQLServer可能无法侦听TCP/IP套接字
    注意:对于SQLServer命名实例,SQLServer动态地决定端口并侦听决定的端口。因此,当您启动SQL注意Server命名实例时,SQLServer将设法侦听之前使用的端口。如果SQLServer不能绑定到该端口,命名实例可能会动态地绑定到另一个端口。在这种情况下,请确认客户端应用程序也被设置为动态地决定端口。作为选择,您还可以为命名实例指定一个静态端口,通过客户端网络实用程序对其进行绑定和侦听。
    有关其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:286303INF:动态端口检测过程中SQLServer2000网络库的行为823938如何在SQLServer2000中使用静态和动态端口分配
    解决MDAC问题
    MDAC的问题也可能会引起连接问题。例如,安装一个软件可能会覆盖一些MDAC文件或更改权限,而您需要这些权限才能访问MDAC文件。您可以运行MDAC部件检查器来验证MDAC在计算机上的安装。
    有关如何确定您当前的MDAC版本的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:301202如何检查MDAC版本
    注意:如果您正连接到SQLServer的一个命名实例,请确认计算机上运行的是MDAC2.6或更新的版本。注意MDAC的早期版本不识别SQLServer的命名实例。因此,可能无法连接到命名实例。
    您可以使用Odbcping.exe实用程序来验证通过SQLServerODBC驱动程序的连接。
    有关Odbcping.exe的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:138541如何使用Odbcping.exe验证到SQLServer的ODBC连接有关配置ODBCDSN的其他信息,请单击下面的文章编号,查看Microsoft知识库中的相应文章:289573PRB:使用SQLServerNet-Libraries(SQLServer网络库)配置DSN
    您还可以使用一个.udl文件测试与SQLServer实例的连接。
    有关如何创建.udl文件的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:244659示例:如何在Windows2000中创建数据链接文件
    解决防火墙问题
    如果防火墙存在于客户端计算机和正在运行SQLServer的计算机之间,请确认通过防火墙进行通信时所需的端口已打开。
    有关通过防火墙进行通信时必须打开的端口的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:287932INF:通过防火墙与SQLServer进行通信所需的TCP端口269882如何使用ADO连接到防火墙后的SQLServer
    如果您使用TCP/IP协议连接SQLServer实例,请确认能够用Telnet程序连接到SQLServer正在侦听的端口。要使用Telnet程序,在命令提示符下运行下列命令:
    Telnet
    如果Telnet程序没有成功,并且您接收到错误信息,请解决此错误然后尝试再次连接。
    注意:在您的防火墙上,用户数据报协议(UDP)端口1434可能被阻挡。注意因为由Slammer病毒引起的问题,
    解决身份验证和安全问题
    由于身份认证失败,可能无法连接到SQLServer。如果身份认证失败,您可能收到下列错误信息之一:Loginfailedforuser''Loginfailedforuser'NTAUTHORITY\ANONYMOUSLOGON'Loginfailedforuser'null'如果您由于身份认证失败收到了错误信息,而且错误信息中没有提到一个明确的SQLServer登录名,请使用Windows身份认证解决该问题。由于Windows身份认证的问题,您可能会收到下列错误信息:CannotgenerateSSPIContext下列问题可能会引起身份认证和安全问题:
    ?NTLM身份认证或Kerberos身份认证出现问题。?由于连接问题,无法联系域控制器。?域之间的信任关系出现问题。
    有关可能原因的更多信息,请参见计算机上的事件日志。要解决Windows身份认证的连接问题,您可以使用SQLServer身份认证连接到SQLServer实例。有关如何诊断和解决“CannotGenerateSSPIContext”错误的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:811889如何排除“CannotgenerateSSPIcontext”错误信息如果在使用SQLServer身份认证时连接没有成功,您会收到下列错误信息:Loginfailedforuser''.Notassociatedwithatrustedconnection
    若要解决此问题,请按照以下步骤操作。
    警告:“注册表编辑器”使用不当可导致严重问题,可能需要重新安装操作系统。Microsoft不能保证您可以解决警告因“注册表编辑器”使用不当而导致的问题。使用“注册表编辑器”需要您自担风险。1.请确认SQLServer实例配置为使用Windows身份认证和SQLServer身份认证。为此,请确认在正在运行SQLServer的计算机上存在下列注册表项。对于默认的SQLServer实例:HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\LoginMode对于SQLServer的命名实例:HKEY_LOCAL_MACHINE\Software\Microsoft\MicrosoftSQLServer\\MSSQLServer\LoginMode请确认已设置下列注册表项的值:身份认证类型值
    仅限于Windows身份认证
    1
    混合模式(SQLServer身份认证和Windows身份认证)2
    注意:如果您对注册表进行了任何更改,必须关闭并重新启动SQLServer实例使更改生效。注意2.尝试使用其他Windows帐户或SQLServer登录帐户连接到SQLServer实例。这样能够帮助确定是否是由于某个特殊的登录帐户的问题而造成连接失败。例如,登录帐户的密码可能已被更改。3.尝试使用其他协议连接到SQLServer实例。例如,使用TCP/IP协议进行Windows身份认证的连接可能会失败,但是使用命名管道协议进行Windows身份认证的连接就可能会成功。如果您正在使用证书,当尝试连接到SQLServer实例时,可能会收到一条安全套接字层(SSL)安全错误信息。有关其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:316898如何借助MicrosoftManagementConsole为SQLServer2000启用SSL加密322144FIX:SECDoClientHandShake无法连接到SQLServer
    解决TCP/IP套接字上的压力问题
    在使用SQLServerODBC驱动程序、MicrosoftOLEDBProviderforSQLServer或System.Data.SqlClient管理提供程序时,可以使用恰当的应用程序编程接口(API)来禁用连接池。在禁用连接池、并且应用程序频繁打开和关闭连接时,对基本SQLServer网络库的压力可能会增大。有时候,Web服务器和JDBC驱动程序也会尝试连接到SQLServer实例。因此,对SQLServer连接需求的增加可能会超过SQLServer的处理能力。这可能会给TCP/IP套接字带来压力,您还可能在SQLServer错误日志文件中收到下列错误信息:2003-08-0720:46:21.11serverError:17832,Severity:20,State:62003-08-0720:46:21.11serverConnectionopenedbutinvalidloginpacket(s)sent.Connectionclosed.
    有关其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:154628INF:SQL在遇到多个TCP\IP连接请求时记录17832328476禁用连接池时SQLServer驱动程序的TCP/IP设置
    注意:如果运行SQLServer2000SP3或SQLServer2000SP3a,则不会注意到对TCP/IP套接字的压注意力,这是由于添加了对登陆数据包数量的限制。在使用第三方驱动程序连接到SQLServer实例时,发生错误17832。要解决该问题,请与第三方供应商联系,并获取经测试证明能够用于SQLServer2000SP3和SQLServer2000SP3a的驱动程序。
    查看SQLServer实例是否以单用户模式启动
    如果尝试连接的SQLServer实例是以单用户模式启动的,只能建立一个到SQLServer的连接。如果运行软件的计算机自动连接到SQLServer,该软件可以轻松地使用唯一的连接。例如,下面的软件可以自动连接到SQLServer实例:
    ?SQLServer代理程序?第三方备份软件?第三方监测软件?第三方病毒软件?MicrosoftInternet信息服务(IIS)?SQLServer企业管理器
    尝试连接到SQLServer实例的客户端应用程序收到下列错误信息:SQLServerdoesnotexistorAccessDenied当安装过程以单用户模式启动SQLServer实例时,此错误一般发生在SQL群集安装和服务软件包安装期间。指定的应用程序会自动连接到使用唯一可用连接的SQLServer实例,从而安装失败。
    要确定SQLServer实例是否已经以单用户模式启动,请检查SQLServer错误日志文件中是否具有一个与以下类似的条目:2003-07-3111:26:43.79spid3Warning******************2003-07-3111:26:43.80spid3SQLServerstartedinsingleusermode.Updatesallowedtosystemcatalogs.
    验证到SQLServer的命名管道连接
    如果您无法使用命名管道连接到SQLServer实例,请确认SQLServer实例配置为接受命名管道连接。有关测试命名管道的过程的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:68941INF:测试命名管道的过程
    解决在恢复过程中连接超时的问题
    在每次启动一个SQLServer实例时,SQLServer将恢复各个数据库。在此恢复过程中,SQLServer回滚未提交的事务。当停止SQLServer实例时,SQLServer还将前滚已提交的事务和没有写入硬盘的更改。当恢复过程完成时,SQLServer将在SQLServer错误日志文件中写入下列信息:RecoveryComplete
    在恢复过程中,SQLServer可能不会接受连接。在此时间内尝试连接到SQLServer的客户端可能会收到一条与以下类似的错误信息:TimeoutExpiredSQLServer代理服务可能无法启动,这是因为它要等待SQLServer恢复数据库。因此,当您在SQLServer错误日志文件中收到下面的信息时,连接不再会因为超时错误而失败:RecoveryComplete如果恢复过程花费的时间很长,您也许还要排除恢复过程的故障。
    测试连接到SQLServer实例的不同方法
    当您连接到SQLServer实例时,如果遇到了连接问题,可以使用下面的一种或多种方法来解决连接问题。
    ?使用SQLServer身份认证和Windows身份认证测试到SQLServer实例的连接。?从其他数据源(例如ODBCDSN、.udl文件、SQL查询分析器、SQLServer企业管理器,isql实用程
    序或osql实用程序)测试到SQLServer实例的连接。
    ?使用其他协议测试到SQLServer实例的连接。您可以为使用该协议的SQLServer实例创建一个新的别
    名,从而指定不同的协议。还可以通过在SQLServer实例名称的开始处添加tcp:、np:、lpc:、或rpc:来指定您的连接字符串中的协议。例如,如果TCP/IP连接失败,则命名管道连接成功。
    ?使用其他登录帐户测试连接,这样可以帮助您确定该问题是否与某个特定的登录帐户有关。?在%systemroot%\system32\drivers\etc\hosts文件中添加一个与正在运行SQLServer实例的计
    算机的IP地址相应的条目。
    ?尝试从运行SQLServer的计算机和客户端连接到SQLServer实例。?如果您正从运行SQLServer的计算机进行连接,可以指定“.”或“(本地)”(不带引号)取代服务器名称,
    然后连接。
    ?尝试使用IP地址而不是服务器名称连接到SQLServer实例。?尝试指定SQLServer实例正在侦听的特定端口。有两种方法:创建一个别名或将一个端口号添加到连接字
    符串(例如MyServer\MyInstance,1433)。
    捕捉网络监视器踪迹
    如果使用“测试连接到SQLServer2000实例的各种方法”小节中提到的步骤无法解决连接问题,请使用网络监视器实用程序捕捉网络踪迹。有关网络追踪的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:148942如何使用网络监视器捕获网络通讯量
    294818关于网络监视器的常见问题
    169292解读TCP/IP跟踪数据的基础知识
    102908如何在Windows2000或WindowsNT中排除TCP/IP连接问题
    要获得更多详细信息,需要使用SQL事件探查器踪迹。对于运行SQLServer进行网络追踪的非聚集计算机,还可以使用网络诊断工具。有关如何使用网络诊断工具的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:
    321708如何在Windows2000中使用网络诊断工具(Netdiag.exe)回到顶端
    参考
    有关与SQLServer相关的各种连接问题的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:812817支持Web广播:MicrosoftSQLServer2000:连接故障排除319930如何连接到Microsoft桌面引擎257434INF:现有DSN中的网络库被连接到同名SQLServer的新DSN中的网络库取代。306985使用命名管道连接群集虚拟服务器时发生RPC错误313062如何在Windows2000中通过使用ActiveServerPages连接到数据库313295如何在连接字符串中使用服务器名参数指定客户端网络库320728如何排除“TheMaximumConnectionLimitHasBeenReached”错误信息328306INF:出现“SQLServerDoesNotExistorAccessDenied”(SQLServer不存在或拒绝访问)错误信息的可能原因247931INF:在ActiveServerPage中验证到SQLServer的连接的方法169377如何在ActiveServerPage中访问SQLServer328383INF:SQLServer客户端可在连接时更改协议238949如何在ADO连接字符串中设置SQLServer网络库270126PRB:在进行Active/ActiveCluster7.0升级后如何管理客户端与两个SQLServer2000虚拟服务器的连接316779PRB:拥有强制协议加密设置的客户端可能无法通过IP地址进行连接216643INF:跟踪到SQLServer7.0的连接时找不到ODBC/OLEDB连接选项265808INF:如何用早期版本的客户端工具连接到SQLServer2000命名实例191572INFO:从ASP调用的ADO对象管理的连接池313173用于MicrosoftSQLServer2000的JDBC驱动程序的示例连接池管理器237844如何在VisualBasicADO应用程序中启用ODBC连接池259569PRB:安装第三方产品破坏了Windows2000MDAC注册表设置回到顶端
    Zach说他每次遇到这种数据库置疑情况,就运行下面这个脚本,屡试不爽:
    ======================================================--beforerunninganyscript,runthefollowingtosetthemasterdatabasetoallowupdatesUSEmasterGOsp_configure''''allowupdates'''',1GORECONFIGUREWITHOVERRIDEGO
    --RunthefollowingscriptUPDATEmaster..sysdatabasesSETstatus=status^256WHEREname=''''Database_Name''''
    --RunthefollowingscriptexecSP_resetstatusDatabase_Name
    --stopandstarttheMSDTCatthisstage
    --Aftertheprocedureiscreated,immediatelydisableupdatestothesystemtables:execsp_configure''''allowupdates'''',0GORECONFIGUREWITHOVERRIDEGO=====================================
    从上面可以看出,处理置疑的基本步骤还是我那篇文章中说的(注意我使用的字体颜色):执行sp_configure以允许对系统表进行更新,然后用RECONFIGUREWITHOVERRIDE语句强制实施该配置;数据库重置紧急模式;执行sp_resetstatus关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项(只有系统管理员才能执行)。执行该过程后,立即重启SQLServer服务;()执行sp_configure以禁止对系统表进行更新,然后用RECONFIGUREWITHOVERRIDE语句强制实施该配置。
    status^256的意思就是:
    ConstantSQLDMODBStat_Suspect
    Value256
    DescriptionDatabaseintegrityissuspectforthereferenceddatabase.
    不同的是,有时候丢失了数据库日志文件,额外需要以下步骤:把应用数据库设置为SingleUser模式;做DBCCCHECKDB;才可以。
    但是几位网友的实践结果就是这个DBCCCHECKDB执行失败。一位网友yang说:“但是DBCCCHECKDB就是执行不了,总是说“该数据库处于回避恢复模式”。我已经试了很多次了,就是改变不了这个状态。”还有一位Rui执行DBCCCHECKDB时报错:“Server:Msg943,Level14,State1,Line1Database''''his_yb''''cannotbeopenedbecauseitsversion(539)islaterthanthecurrentserverversion(515).”
    对于Yang,可能他没有一步一步做,。我的切身体会是,把应用数据库设置为SingleUser模式后就可以做DBCCCHECKDB。之后呢,也许SQLServer重启后自动检查数据库是否正常。但是数据应该是可以读出来的,至少可以被DTSWizard读出来的。这时候的数据库还存在问题,比如我的组件使用数据库时,报告说:“发生错误:-2147467259,未能在数据库''''XXX''''中运行BEGINTRANSACTION,因为该数据库处于回避恢复模式。”
    对于Rui,他碰到的那个错误
    Server:Msg943,Level14,State1,Line2Database''''XXXX''''cannotbeopenedbecauseitsversion(536)islatert
    hanthecurrentserverversion(515).这表明Rui正试图:从一个SQLServer2000(version539,536之类的)的数据库备份恢复到一个SQLServer7.0中或者把一个SQLServer2000(version539,536之类的)的数据库attach到一个SQLServer7.0中,这是不允许的。如果你必须使用这个SQLServer2000的数据备份,那么请您首先把这个备份倒入SQLServer2000,最后用DTS把数据库从SQLServer2000上transfer到SQLServer7.0上。
    如果SQLServer因为磁盘可用空间不足,而不能完成数据库的恢复,那么SQLServer2000会返回错误1105并且将sysdatabases中的status列设为置疑。你可以看到在SQLSERVER的ERRORLOG和OS的应用程序日志中应该有1105的错误信息:SQLServer事务日志可能会被填满,这会阻止之后的数据库操作,包括UPDATE,DELETE,INSERT和CHECKPOINT。事务日志填满会导致1105错误:Can''''tallocatespaceforobjectsyslogsindatabasedbnamebecausethelogsegmentisfull。Ifyouranoutofspaceinsyslogs,dump
    thetransactionlog。OtherwiseuseALTERDATABASEorsp_extendsegmenttoincreasethesizeofthesegment。
    这种现象可能出现于任何一个数据库中,包括Master和TempDB。一些难以预见的因素可能消耗日志空间。例如:一个大型事务,尤其像批量数据更新、插入或删除。一个未提交的事务。检查点处理程序截除时所需的带宽过大。截除时超过阈值上述各种条件互相作用的结果。用于发布的标记事务没有被日志读取程序读走
    下面是修复的步骤和收缩日志的步骤下面是修复的步骤和收缩日志的步骤:步骤1.在命令提示符下运行以下命令启动SQLServer:在命令提示符下运行以下命令启动:SQLSERVER-f-m备注:-m开关以单用户模式启动SQLServer。在单用户模式下,备注
    GM(无]无K垠\+t垠D"'-2中5JZT)-{T\p只能成功建立一个连接。请注意是否有任何其他客户机或服务可能会在您通过SQLServer查询分析器2.重置置疑数据库的状态。重置置疑数据库的状态。sp_resetstatus''''database_name''''建立连接前使用那个连接。
    下面是结果集:
    Database''''database_name''''statusreset!WARNING:YoumustrebootSQLServerpriortoaccessingthisdatabase!
    向数据库添加一个数据文件或日志文件:3.用ALTERDATABASE向数据库添加一个数据文件或日志文件:USEmasterGOCREATEDATABASEdb_nameON(NAME=dbname_dat1,FILENAME=''''D:\MSSQL\Data\dbname_dat1.ndf'''',SIZE=1000MB,FILEGROWTH=50MB)GO--更改该数据库以添加一个2GB大小的新数据文件ALTERDATABASEdb_nameADDFILE(NAME=dbname_dat2,
    FILENAME=''''F:\MSSQL\DATA\dbname_dat2.ndf'''',SIZE=2000MB,FILEGROWTH=50MB)GO--更改该数据库以添加一个1GB大小的新日志文件ALTERDATABASEdb_nameADDLOGFILE(NAME=db_name_log2,FILENAME=''''F:\MSSQL\Data\db_name_log2.ldf'''',SIZE=1000MB,FILEGROWTH=20MB),GO4.停止并重新启动SQLServer:
    用新的数据文件或日志文件所提供的额外空间,
    专b9育#]lf络无6育i,NR管~xSQLServer应该能完成数据库的恢复。
    5.释放磁盘空间并且重新运行恢复操作按照下面的步骤收缩日志。释放磁盘空间并且重新运行恢复操作,按照下面的步骤收缩日志。按照下面的步骤收缩日志sp_resetstatus关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。
    为从根本上解决这样的问题,你可以按下面的操作配置SQLSERVER2000:
    a.如果不需要恢复到指定的时间点你可以将数据库的恢复模式配置为如果不需要恢复到指定的时间点,你可以将数据库的恢复模式配置为如果不需要恢复到指定的时间点简单,这样简单这样UPDATE,DELETE,SELECT就不会记录日志日志就不会增加的很大就不会记录日志,日志就不会增加的很大日志就不会增加的很大:USEMASTERGOALTERDATABASEDB_NAMESETRECOVERYSIMPLEb.如果你的恢复模式是全部你一定要配置日志字段收缩如果你的恢复模式是全部,你一定要配置日志字段收缩如果你的恢复模式是全部你一定要配置日志字段收缩:USEMASTERGOsp_dboption''''databasename'''',''''trunc.logonchkpt.'''',truesp_dboption''''databasename'''',''''autoshrink'''',truec.通过每日备份将日志收缩:通过每日备份将日志收缩BACKUPDATABASEDATABASE_NAMETOBACKUP_DEVICESBACKUPLOGDATABASE_NAMETOLOG_DEVICESORBACKUPLOGDATABASE_NAMEwithtruncate_only**检查日志的容量:DBCCSQLPERF(LOGSPACE)这时日志并没有收缩!d.每天在备份数据库完成之后重新启动MSSQLSERVERSERVICE.每天在备份数据库完成之后,重新启动每天在备份数据库完成之后USEDATABASE_NAME
    goDBCCSHRINKFILE(2,truncateonly)**检查日志的容量:DBCCSQLPERF(LOGSPACE)这时日志已经收缩!e.手动快速收缩日志手动快速收缩日志:手动快速收缩日志/*runbelowscript,youwillshrinkyoudatabaselogfilesimmediately,inmyexperience,youneedtorunthescriptfor3or4minutesbeforestoppingitmanually*/usedatabasenamedbccshrinkfile(2,notruncate)dbccshrinkfile(2,truncateonly)createtablet1(char1char(4000))godeclare@iintselect@i=0while(1=1)beginwhile(@i<100)beginINSERTINTOT1VALUES(''''A'''')SELECT@I=@I+1ENDTRUNCATEtableT1BACKUPLOGyoudatabasenamewithtruncate_onlyendGO
    注意
    只有在您的主要支持提供者指导下或有疑难解答建议的做法时,!-UI2
    网oKj#rI%络网\U*才可以使用sp_resetstatus。否则,可能会损坏数据库。
    由于该过程修改了系统表,系统管理员必须在运行sp_resetstatus这个过程前,启用系统表更新。要启用更新,使用下面的过程:
    USEmasterGOsp_configure''''allowupdates'''',1GORECONFIGUREWITHOVERRIDEGO
    过程创建后,立即禁用系统表更新:
    sp_configure''''allowupdates'''',0GORECONFIGUREWITHOVERRIDEGO
    只有系统管理员才能执行sp_resetstatus。执行该过程后,:C2`}sfqIBJy.C理Ky;育立即关闭SQLServer。
    
  • 下一篇资讯: 基础教程_SQLServer2008
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师