INF:排查 SQL 群集向导故障

文章翻译 文章翻译
文章编号: 254593 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文提供有关 SQL Server 群集向导执行的操作的信息,以及执行这些操作的顺序。此外,提供了有关在每个步骤中可能遇到的导致向导失败的问题的详细信息。还包括了这些问题的可能的解决方案,以及详细的具体问题情形及解决方案。

注意:所有 SQL Server 6.5 和 7.0 群集客户应尽快升级到 SQL Server 2000。SQL Server 2000 Enterprise Edition 通过故障转移群集支持下列工具、功能和组件:
  • Microsoft Search 服务(全文)
  • 多实例
  • SQL Server 企业管理器
  • 服务控制管理器
  • 复制
  • SQL 事件探查器
  • SQL 查询分析器

更多信息

以下步骤描述 SQL Server 群集向导的使用:
  1. 首先,SQL 群集向导连接到服务器,并验证所有数据库和二进制文件都在共享磁盘上。

    可能的问题

    在此阶段唯一可能出现的问题是服务无法启动,这通常是由于共享磁盘被错误的节点拥有或者无法在群集磁盘上安装程序文件及数据文件导致的。

    解决方案

    要更正该问题,请在运行群集向导之前确认共享磁盘被正确的节点拥有。另外,检查并确保程序文件和数据文件都已安装到群集磁盘中。
  2. 输入 IP 地址和网络名称之后,向导将创建一个具有那些属性的测试资源,并使该资源联机以查看网络中是否发生任何冲突。

    注意:仅当输入了正在使用的 IP 地址时才会出现错误消息;无效的 IP 地址或错误的子网掩码无法检测到。

    可能的问题

    如果您刚刚取消群集然后重新群集了服务器,可能会收到一个错误消息,指示您的网络名称正在使用。发生该错误的原因可能是 Windows NT 有时候无法正确地从 Net Bios 注册中删除网络名称。

    第一种解决方案

    打开一个命令提示窗口,并输入下面的命令:

    nbtstat -RR
    Return。完成后,重新尝试使用 IP 地址。如果该 IP 地址仍然失败,请尝试第二种解决方案。

    第二种解决方案

    重新启动系统。
  3. 输入所有信息之后,向导将把在 BINN 中注册的所有 COM 文件复制到以下注册表项指向的位置的 SQL Server 子目录:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\SharedFilesDir
    默认情况下,该项指向以下位置:
    C:\Program Files\Common Files\Microsoft Shared\

    可能的问题

    SQL Server 群集向导无法找到这些文件,或无法找到这些文件应复制到的位置。如果向导使用的以下注册表项出错,通常会发生该问题:
    HKey_Local_Machine\Software\Microsoft\SharedTools\SharedFilesD


    请注意,安装程序使用的是不同的注册表项(在下面列出),但这两个项通常应指向相同的路径:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\CommonFilesDir


    注意:通过设计,发生该问题时不会显示错误。这样,您无需复制便可以进行安装,并且仍然可以运行向导,而不会使向导失败。判断是否发生该问题的唯一方法是在调试输出窗口中查看,该窗口是通过在运行 SQL 群集向导之前在系统环境中将 _PRINT_CONSOLE_ 设置为 1 产生的。如果该步骤执行正确,在复制文件(例如 Replres.dll 和 Distrib.exe)时,您可以看到对复制文件的引用。如果看不到对这些文件的引用,则说明您遇到了该问题。

    第一种解决方案

    请参见“具体情形”部分中的情形 8。

    第二种解决方案

    请参见“具体情形”部分中的情形 3。
  4. 接下来,SQL 群集向导通过读取远程注册表找到正确的路径,将相同文件复制到另一个节点上的相同位置。SQL 群集向导在远程节点上创建一个名为 cluster_tools_share 的共享,将这些文件复制到该共享,然后删除该共享。
    可能的问题

    此阶段唯一可能发生的问题是另一个节点中存在注册表项问题或者向导无法创建共享。

    第一种解决方案

    请参见步骤 8。

    第二种解决方案

    请参见“具体情形”部分中的情形 3。
  5. 向导随后将群集特定的文件复制到两个节点上的 \System32 目录中。
    可能的问题

    通常,该步骤能成功完成。SQL 群集向导从 CD 或网络共享复制文件,因此可能会丢失与该共享的连接或者无法创建 cluster_tools_share(因为该共享已存在)。

    解决方案

    请参见“具体情形”部分中的情形 3。
  6. 向导运行“secnode”安装程序,该安装程序将必需的系统文件复制到远程节点并注册已复制到 C:\Program files\Common files\Microsoft 共享目录中的所有 COM 文件。
    可能的问题

    此阶段发生问题的最常见原因之一是:安装程序是从第一个节点上的共享点运行的(通过由您指定用户和密码的 Net Use 连接)。在这种情况下,默认情况下节点 2 没有对共享的访问权限,因此当运行 secnode 时,它无法连接到安装位置以复制文件。发生该问题时,您将收到一条消息,指示无法在远程计算机上运行安装程序。

    如果路径名中包含空格,当您从网络共享进行安装时,可能会发生另一个问题。这将导致 secnode 安装程序失败,因为它无法处理包含空格的路径,除非用引号将空格括起。除了重命名共享,该问题没有其他解决方案。

    第一种解决方案

    如果您遇到这些问题之一,应在 <%SYSROOT%> 目录中查看 Sqlclstr.log 文件,或在第二个节点的 TEMP 目录中查看 Remsetup.log,以了解问题的线索和说明。更正所有问题,然后重新运行向导。

    第二种解决方案

    权限问题也会阻止 SQL 群集向导在第二个节点上正确执行操作。运行安装程序时所用的帐户必须具有适当的权限:

    • 是两个节点的本地管理员。
    • 具有“作为服务登录”的用户权限。
    • 具有“作为操作系统的一部分”的用户权限。
    在两个节点上都必须具有这些权限;否则安装将失败

    从主域控制器 (PDC) 设置这些权限。设置正确的权限之后,您需要注销然后重新登录以反映更改。有关更详细的信息,请参见“具体情形”部分中的情形 5。

    可能的问题

    如果 secnode 运行时有内部错误(例如未成功注册所有 COM 文件),则也可能会失败。

    解决方案

    更正 Sqlstp.log 中报告的第二个节点上的所有问题。
  7. 接下来,SQL Server 群集向导重新绑定位于以下位置中的所有文件:

    • SQL BINN 目录。
    • C:\Program Files\Common Files\Microsoft Shared\SQL Server
    • C:\Program Files\Common Files\Microsoft Shared\Database Replication
    两个节点上都进行该操作。

    SQL Server 群集向导随后重新绑定两个节点上的以下系统文件:
    • Dbnmpntw.dll
    • Sqlstr.dll
    • Sqlwoa.dll
    • Sqlsrv32.dll
    • Cliconfg.dll
    • Cliconfg.exe
    SQL Server 群集向导仅重新绑定本地节点上的 %Sysroot%\System32\Sqlctr70.dll。
    可能的问题

    仅当重新绑定过程尝试绑定的某个文件正被其他过程使用时,重新绑定过程才会中断。如果有任何 SQL 应用程序(包括 SQL 服务管理器)正打开,该消息将显示:
    ..could not update binaries...
    有关更多详细信息,请参见:
    248380 PRB:更新二进制文件时 SQL 7.0 故障转移向导出错
    最常见的问题是某些系统文件正被使用。

    您通常可以通过在重试之后节点再次显示消息所用的时间来判断哪个节点发生了问题。如果消息立即显示,则通常表明本地计算机上的文件正被使用,但如果花费好几秒钟显示,则另一个节点上可能发生了问题。

    解决方案

    通常可以通过停止所有冲突的服务并确保没有打开任何应用程序来解决该问题。要验证您应当运行哪些服务,请参见以下 Microsoft 知识库文章:
    192708 INF:安装顺序:对 SQL 或 MSMQ 的群集服务器支持
    (对于 SQL 6.5 Enterprise Edition)

    219264 INF:SQL Server 7.0 群集安装程序的安装顺序
    (对于 SQL 7.0 Enterprise Edition)。


    可能的问题

    如果您要取消群集,且某个资源 DLL 正被使用,则资源 DLL 与服务器的连接之一可能会停止响应。这导致资源监视器进程 (Resrcmon.exe) 使 dbnmpntw.dll 文件操持打开(即使资源已脱机)。

    第一种解决方案
    重新启动并重新运行向导以进行卸装。

    第二种解决方案

    将出错的 DLL 重命名为 Dbnmpntw.dll.copy,然后将其复制回原始名称。现在,.copy 文件正在使用,但 dbnmpntw.dll 文件未使用,因此向导可以完成而不会发生任何问题。
  8. SQL 群集向导现在在群集中创建网络名、IP、sqlserver、代理和 vsrvsvc 资源,使 SQL Server 资源联机,并将 sysservers 系统表中的本地服务器名更改为虚拟服务器名。

    可能的问题

    创建资源通常不会有问题。您应当可以看到在磁盘所在的组中创建了资源。该步骤所做的所有工作是创建资源并在资源之间建立依赖关系,以便它们可以以正确的顺序启动。

    使资源联机是安装过程的最后一个阶段。第一个阶段是启动 MSSQLSERVER$VIRTNAME 服务,连接到该服务,然后正确地设置 sysservers 中的值。如果该步骤失败,则整个安装过程将失败并回滚其到目前为止所做的所有工作。当 Sqlsrv32.dll(ODBC 文件)文件的重新绑定无法正确进行时。发生该情况时,您在 fixsysservers 调用之后即可在群集安装日志 (Sqlclstr.log) 中看到错误 123 或 126。

    如果发生以下情况:

    1. 群集完全损坏。
    2. 该问题是由于向导仅仅将对 Kernel32.dll 文件的两个引用之一更改为对 Vernel32.dll 文件的引用而导致的。
    3. 如果您在安装 SQL 之前,曾在计算机上安装了不同版本的 Microsoft 数据访问组件 (MDAC),则系统中的 Sqlsrv32.dll 文件的版本不同。
    第一种解决方案

    重新启动两台服务器,并在重试之前,确保仅有最少的服务正在运行,如以下 Microsoft 知识库文章所述:

    192708 INF:安装顺序:对 SQL 或 MSMQ 的群集服务器支持
    (对于 SQL 6.5 Enterprise Edition)。

    219264 INF:SQL Server 7.0 群集安装程序的安装顺序
    (对于 SQL 7.0 Enterprise Edition)。

    第二种解决方案

    重命名 Sqlsrv32.dll 文件,然后重新启动计算机。重试之前,确保仅有最少的服务正在运行,如以下 Microsoft 知识库文章所述:

    192708 INF:安装顺序:对 SQL 或 MSMQ 的群集服务器支持
    (对于 SQL 6.5 Enterprise Edition)。

    219264 INF:SQL Server 7.0 群集安装程序的安装顺序
    (对于 SQL 7.0 Enterprise Edition)。

    第三种解决方案

    与 SQL 产品支持服务部门联系。
  9. SQL 群集向导完成。


具体情形

情形 1

问题

SQL 群集向导失败,日志条目如下:
@ CopyFileIfNeeded: [D:\EnterpriseEdition\x86\CLUSTER\SQAGTRES.DLL] => [C:\WINNT\System32\SQAGTRES.DLL]
@@@ CopyFileIfNeeded: [D:\EnterpriseEdition\x86\CLUSTER\SQAGTRES.DLL] => [\\LNXDAYCC02\admin$\system32\SQAGTRES.DLL]
~~~ XXX InstallRemote failed
[reghelp.cpp:34] : 2 (0x2): The system cannot find the file specified.
					
解决方案

验证您可以从群集中的两个节点建立 \\server_name\admin$ 连接。

请务必查看是否更改了任何网络接口卡 (NIC) 设置或是否更换了网卡。
警告:如果您禁用 Microsoft Networks 的文件和打印共享,则在 Windows 2000 计算机上的“网络连接”属性中,您将无法建立与管理共享的连接。尝试访问管理共享会导致发生错误:出现 53 错误消息。

情形 2

问题

SQL 群集向导失败,出现以下一般消息,且没有对特定文件的引用:
文件已存在。
解决方案

确保 SQL 组名全部是大写字母。如果不是,向导将尝试创建一个新组,但向导无法执行此操作。如果组名并非全是大写,请将其重命名为某个临时名称(例如 x),然后将其重命名为全部是大写的正确名称。

注意:这仅适用于已重命名的组。如果 SQL 要求,诸如“Disk Group 1”的默认名称的资源会移动到新组。
情形 3

问题

Sqlclstr.log 文件显示以下内容:
~~~ ClusterResourceStart... tick=2, state=2
[validate.cpp:147] DeleteTestGroup:OpenClusterResource: 5007 (0x138f): The cluster resource could not be found. 
~~~ XXX Copy Files failed
[reghelp.cpp:34] : 2 (0x2): The system cannot find the file specified.
					
解决方案

查看每个节点上的网络共享并查找以下项:
  • \\cluster_tools_share
  • \\cluster_setup_share
如果找到任何一项,请删除它。
情形 4

问题

在安装 SQL Service Pack 1 之后尝试重新群集 SQL 时,安装失败,Sqlcluster.log 文件中出现以下错误:
Looking at disk P:
Disk P is fixed in group SQL_Disk
Looking at disk Q:
Disk Q is used by SQL but is moveable
Looking at disk R:
Error: Resource groups SQL_Disk and Disk_R both contain SQL disks
[chkconf.cpp:1416] : 160 (0xa0): The argument string passed to DosExecPgm is not correct. 
[chkconf.cpp:1482] ClusterFindVirtualSQLSrvGroup: 160 (0xa0): The argument string passed to DosExecPgm is not correct.
					

“P”驱动器是 SQL 安装到的驱动器,安装程序认为它是唯一在使用的驱动器。实际上在使用 P、Q 和 R 驱动器。

解决方案

检查 SQL 错误日志和 sysdevices 系统表,确保 SQL 正在使用的所有驱动器都在 SQL 所使用的 SQL 组中。

注意:如果向群集添加了额外的群集磁盘资源以供 SQL 使用,或者将群集中当前正在使用的其他磁盘指定为供群集 SQL Server 使用,则它们将作为 SQL Server 的依赖项进行添加。
情形 5

问题

安装程序无法更新远程节点,或者初始安装期间在连接到所有默认数据库时出错。

例如:
#### SQL Server Remote Setup - Start Time 10/28/99 13:14:22 ####
Script file copied to '\\server8\ADMIN$\secnode.iss' successfully.
Installing remote service...
Running '\\node1\F$\ENGLISH\X86\setup\setupsql.exe SecNode=1 -s -f1 \\node2\ADMIN$\secnode.iss'...
Remote process exit code was '-1'.
\\node2\Admin$\sqlsp.log
Disconnecting from remote machine...
Service removed successfully.
Remote files removed successfully.
#### SQL Server Remote Setup - Stop Time 10/28/99 13:15:08 ####
解决方案

确保使用所有正确权限设置了服务帐户。通过复制现有的管理员帐户,您可以确保将组成员身份和许多其他属性复制到新帐户。复制用户帐户时,会准确地复制说明、组成员身份、登录时间、登录工作站和帐户信息。新帐户的用户名、完整名称和密码框是空白的,必须输入。将复制“用户不能更改密码”和“密码永不过期”复选框。

注意:复制属于管理员本地组成员的帐户时,不会复制“用户不能更改密码”设置。通常,“用户下次登录时须更改密码”复选框被选中,而无论其在原始帐户中的设置如何;但是,您可以清除该复选框。另外,应选中“密码永不过期”复选框。完成所有条目之后,单击“添加”。

现在,从“用户管理器”菜单中选择“策略\用户权限”,选择以显示“高级用户权限”,然后为新用户授予以下权限:
  • 作为操作系统的一部分。
  • 作为服务登录。
  • 本地登录。
接下来,使用新创建的帐户登录到两个节点,并执行基本连接和权限测试:

  • 要验证远程过程调用 (RPC) 连接,请尝试使用 Perfmon、Regedt32 或 Srvmgr 从每个节点远程登录到另一个节点。

  • 要验证 NetBIOS,请尝试发出 net view \\machine_namenet use \\machine_name\admin$

  • 要在无 NBT 和 IP 连接的情况下验证 RDR 和 SRV,请发出 net view \\ IP 地址

  • 尝试使用 Telnet 或 FTP 会话测试传输功能。
情形 6

问题

SQL 6.5 群集向导失败,其日志的最后一行内容如下:
Start SQL Server cConnectString="ODBC;DSN='';DRIVER={SQL Server};SERVER=CLIO;DATABASE=master;UID=sa;PWD="
					

解决方案

首先验证执行 @@servername 未返回空响应。如果返回了空响应,则 sysservers 系统表没有本地服务器名的条目。更正该问题并继续。

如果您无法验证 @@servername,您应当重新加载 ODBC 驱动程序,然后重新运行 SQL 群集向导。要重新加载 ODBC 驱动程序,请从 SQL Server 6.5 Extended Edition 光盘的 \I386\Odbc 目录(对于基于 Intel 的计算机)或 \Alpha\Odbc 目录(对于基于 Alpha 的计算机)运行安装程序。
情形 7

问题

每次运行 Clustwiz.exe 文件时,都出现一个指向 Cpqmgmt.dbg 文件的 Dr. Watson 消息。

解决方案

以下所有 Microsoft 知识库参考资料都指出该问题与 Compaq Insight Manager 有关。请应用最新的 Compaq SoftPak(在大多数情况下为 SSD 2.12a)并停止所有可能冲突的服务,如以下 Microsoft 知识库文章所述。

192708 INF:安装顺序:对 SQL 或 MSMQ 的群集服务器支持
219264 INF:SQL Server 7.0 群集安装程序的安装顺序
情形 8

问题

以下注册表项不正确:
Hkey_Local_Machine\Software\Microsoft\Windows\CurrentVer\CommonFilesDir


解决方案

如果路径错误,请更正路径。
情形 9

问题

您无法使用 SQL 群集故障转移向导取消群集 SQL。

解决方案

运行 SQL 群集故障转移向导时,创建 SQL 群集资源。默认情况下,这些资源具有以下命名结构:
<Virtual_SQL_Server_Name> IP 地址
<Virtual_SQL_Server_Name> 网络名称
<Virtual_SQL_Server_Name> SQL Server 7.0
<Virtual_SQL_Server_Name> VServer
<Virtual_SQL_Server_Name> SQL Server Agent 7.0
					
例如,如果 Virtual_SQL_Server_Name 为 xyz,则 SQL 资源默认情况下命名为:
xyz IP 地址
xyz 网络名称
xyz SQL Server 7.0
xyz VServer
xyz SQL Server Agent 7.0
					
如果这些资源中的全部或一部分随后修改为:
IP 地址
网络名称
SQL Server
虚拟服务器
SQL Agent
					
这会导致 SQL 群集故障转移向导在使用时失败或挂起。要解决该问题,请将资源重命名为其默认名称。
情形 10

问题

SQLCLUST.LOG 显示以下内容:
~~~ OnEnableCluster:UpdateSku
~~~ OnEnableCluster:TransferSQLServices
+++ TransferSQLServices:enter
+++ TransferSQLServices:调用 AddVSNameLanManServer
[reghelp.h:132] 类型不是 REG_MULTI_SZ:160 (0xa0):传递到 DosExecPgm 的参数字符串不正确。

[reghelp.h:133] :160 (0xa0):传递到 DosExecPgm 的参数字符串不正确。

[reghelp.h:290] :160 (0xa0):传递到 DosExecPgm 的参数字符串不正确。

[clenable.cpp:1803] :160 (0xa0):传递到 DosExecPgm 的参数字符串不正确。

[clenable.cpp:1836] :160 (0xa0):传递到 DosExecPgm 的参数字符串不正确。

[clenable.cpp:2379] :160 (0xa0):传递到 DosExecPgm 的参数字符串不正确。

~~~ XXX TransferSQLServices 失败
					
解决方案

验证以下注册表项的类型值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\NullSessionPipes
					
为 REG_MULTI_SZ。

实际失败在 RegQueryValue_MULTI_SZ() 中。失败原因是项的类型不是 REG_MULTI_SZ。

如果项的类型不是 REG_MULTI_SZ,您将需要复制项中的内容,删除并重新创建具有相同名称和正确类型值的项,然后替换内容。

属性

文章编号: 254593 - 最后修改: 2006年11月3日 - 修订: 4.0
这篇文章中的信息适用于:
  • Microsoft SQL Server 6.5 Enterprise Edition
  • Microsoft SQL Server 7.0 Enterprise Edition
关键字:?
kbinfo KB254593
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com