INF:SQL 叢集精靈失敗的疑難排解

文章翻譯 文章翻譯
文章編號: 254593 - 檢視此文章適用的產品。
本文曾發行於 CHT254593
全部展開 | 全部摺疊

在此頁中

結論

本文提供有關 SQL Server「叢集精靈」會執行的動作的資訊,以及這些動作的執行順序。此外,還會詳細說明有關每個步驟可能遇到的問題,這些問題可能會導致精靈的失敗。同時還包括這些問題可能的解決方案,還有詳細的、特定的問題情況以及解決方案。

注意 :所有 SQL 6.5 與 7.0 SQL 叢集的使用者應該要盡快升級至 SQL Server 2000。下列工具、功能與元件可支援 SQL Server 2000 Enterprise Edition 中的容錯移轉叢集:
  • Microsoft Search 服務 (全文檢索)
  • 多個執行個體
  • SQL Server Enterprise Manager
  • 服務控制管理員
  • 複寫
  • SQL Profiler
  • SQL Query Analyzer
  • SQL Mail
SQL Server 2000 Analysis Services (OLAP) 元件不支援容錯移轉叢集。

其他相關資訊

下列步驟說明 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\SharedTools\SharedFilesDir
    根據預設值,此機碼會指向下面位置:
    C:\Program Files\Common Files\Microsoft Shared\

    可能發生的問題

    SQL Server「叢集精靈」無法找到這些檔案或無法找到複製這些檔案的目的位置。當精靈所使用的下面登錄機碼出了問題時,通常就會發生此問題:
    HKey_Local_Machine\Software\Microsoft\SharedTools\SharedFilesDir


    請注意,安裝程式是使用不同的登錄機碼 (如下所示),但這兩者一般應該要指向相同路徑:
    HKLM\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 shared 目錄中的所有 COM 檔。

    • 是兩個節點的本機系統管理員。
    • 具有「以服務方式登入」的使用者權利。
    • 具有「充當作業系統的一部份」的使用者權利。
    可能發生的問題

    如果安裝程式是從第一個節點的某共用位置執行 (經由使用 net use ,指定使用者與密碼來連線),在此階段就會發生最常見的問題之一。如果發生這種情況,根據預設值,node2 沒有此共用位置的存取權,這樣當 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 Failover Wizard Error when Updating Binaries
    最常見的問題是有些系統檔案正在使用中。

    再試一次之後,經由顯示出訊息的時間長短,您通常可以判斷問題是發生在哪一個節點上。如果此訊息是立即顯示的,這通常表示本端電腦的某個檔案正在使用中,但如果經過幾秒後才顯示訊息,那麼問題可能是發生在另一個節點上。

    解決方案

    通常經由停止所有會造成問題的服務以及確認沒有開啟任何應用程式之後,您就可以解決此問題。若要檢查應該有哪些服務正在執行,請參考「Microsoft 知識庫」中的下列文件:
    192708 INF: Installation Order: Cluster Server Support for SQL or MSMQ
    如果是 SQL 6.5 Enterprise Edition

    219264資訊: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 系統資料表中將本端伺服器變更為虛擬伺服器名稱。

    1. 叢集會完全被破壞。
    2. 精靈只要將對 Kernel32.dll 檔的兩個參照之一變更為參照 Vernel32.dll 檔,就會造成此問題。
    3. 如果您在安裝 SQL 之前,先在電腦上安裝了不同版本的 Microsoft Data Access Components (MDAC),則系統上的 Sqlsrv32.dll 檔的版本會不同。
    可能發生的問題

    資源的建立通常不會發生問題。您應該可以看見資源在磁碟所在的群組中建立起來。此步驟全部所做的就是建立資源並建立資源之間的相依性,這樣它們才能依正確順序啟動。

    將資源帶到線上是安裝程式的最後階段。第一階段是要啟動 MSSQLSERVER$VIRTNAME 服務,連接到此服務,然後在 sysservers 中設定正確的值。如果此步驟失敗了,那麼整個安裝程序就會失敗,並復原到目前為止所做的所有工作。如果 Sqlsrv32.dll (ODBC 檔) 檔的重新連結沒有正確運作,發生這種情況時,您會在 fixsysservers 呼叫之後,在叢集安裝記錄檔 (Sqlclstr.log) 中看見錯誤 123 或 126。

    如果發生這種情況:

    第一個解決方案

    重新啟動兩個伺服器,在重試之前,請先確認只有執行最少的服務,如下列「Microsoft 知識庫」文件的說明:

    192708 INF: Installation Order: Cluster Server Support for SQL or MSMQ
    如果是 SQL 6.5 Enterprise Edition。

    219264資訊:SQL Server 7.0 叢集安裝程式的安裝順序
    如果是 SQL 7.0 Enterprise Edition。

    第二個解決方案

    重新命名 Sqlsrv32.dll 檔,然後重新啟動電腦。重試之前,請先確認只有執行最少的服務,如下列「Microsoft 知識庫」文件的說明:

    192708 INF: Installation Order: Cluster Server Support for SQL or MSMQ
    如果是 SQL 6.5 Enterprise Edition。

    219264資訊: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.
解決方案

確認您從叢集中的兩個節點都可以建立 \\srever_name\admin$ 連線。

如果有變更任何網路介面卡 (NIC) 的設定值,或如果有替換網路卡,請務必執行此項檢查。
警告 :如果您取消 Windows 2000 電腦上的 [網路連線] 內容的 [File and Print Sharing for Microsoft Networks],您就無法連線到「系統管理共用」。試圖存取「系統管理共用」會發生「錯誤:53」的錯誤訊息。 情況 2

問題

SQL「叢集精靈」因下面一般訊息而失敗,並且沒有特定檔案的參照:
File already exists. (檔案已經存在。)
解決方案

確認 SQL 群組名稱全部都是大寫字母。如果不是,精靈會試圖建立新的群組,但卻無法建立。如果不是全部都是大寫,請替它重新命名一個暫時的名稱 (例如 x),然後再將它重新命名為全部大寫的正確名稱。

注意 :這只適用於重新命名的群組。如果 SQL 有需要,像「Disk Group 1」這樣的預設名稱會讓它們的資源移至新的群組。
情況 3

  • \\cluster_tools_share
  • \\cluster_setup_share
問題

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.
解決方案

檢查每一個節點上的網路共用資料夾,並尋找下列項目:
如果有找到其中任何一個,請將它們刪除。
情況 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 伺服器使用,應該將這些磁碟當成 SQL Server 的相依物予以加入。
情況 5

  • 若要驗證遠端程序呼叫 (RPC) 連線,請試著使用 Perfmon、Regedt32 或 Srvmgr 從每一個節點遠端登入至另一個節點。


  • 若要驗證 NetBIOS,請試著發出 net view \\machine_name net use \\machine_name\admin$


  • 若要不以 NBT 與 IP 連線來驗證 RDR 與 SRV net view \\ IP Address


  • 試著使用 telnet 或 FTP 工作階段來測試傳輸功能。
  • 充當作業系統的一部份。
  • 以服務方式登入。
  • 本機登入。
問題

安裝程式無法更新遠端節點,或在初始安裝期間連線至所有預設資料庫時發生錯誤。

例如:
#### 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 ####
解決方案

請確認服務帳戶的所有權限都設定正確。 經由複製現有的「系統管理員」帳戶,您就可以確認群組成員資格以及許多其他屬性都被複製到新帳戶。 當您複製使用者帳戶時,帳戶說明、群組成員資格、登入時數、登入工作站以及帳戶資訊都會被準確的複製。 新帳戶的使用者名稱、全名與密碼方塊都是空白的,必須要輸入。 [User Cannot Change Password] [Password Never Expires] 核取方塊也會被複製。

注意 :當您複製的帳戶是屬於「系統管理員」本機群組的成員時, [User Cannot Change Password] 設定值不會被複製。通常,不論原來帳戶的設定值為何, [User Must Change Password At Next Logon] 核取方塊是選取的;然而,此核取方塊應該要清除。此外, [Password Never Expires] 核取方塊應該要選取。完成所有項目的設定後,請按一下 [Add]

現在,請從 [User Manager] 功能表,選取 [Policies]\[User Rights] ,選取以顯示 [Advanced User Rights] ,然後授予新使用者下列權利: 接下來,以新建立的帳戶登入兩個節點,然後執行基本的連線與權限測試:

情況 6

問題

SQL 6.5「叢集精靈」失敗且叢集精靈記錄檔的最後一行指出:
Start SQL Server cConnectString="ODBC;DSN='';DRIVER={SQL Server};SERVER=CLIO;DATABASE=master;UID=sa;PWD="

解決方案

首先確認執行 @@servername 時不會傳回 NULL 的回應。如果傳回 NULL,就表示 sysservers 系統資料表中沒有登錄本端伺服器名稱。修正此問題,然後繼續進行。

如果可以驗證 @@servername ,您應該要重新載入 ODBC 驅動程式,然後再次執行 SQL「叢集精靈」。若要重新載入 ODBC 驅動程式,請從 SQL Server 6.5 Extended Edition 光碟片執行安裝程式,如果是 Intel 架構的電腦,安裝程式是在 \I386\Odbc 目錄中,如果是 Alpha 架構的電腦,安裝程式是在 \Alpha\Odbc 目錄中。
情況 7

問題

每次 Clustwiz.exe 檔執行時,就會出現一個指向 Cpqmgmt.dbg 檔的 Dr. Watson 訊息。

解決方案

下列所有「Microsoft 知識庫」參考文件都指出此問題和 Compaq Insight Manager 有關。請套用最新的 Compaq SoftPak (大部分情況是 SSD 2.12a),並停止所有可能發生衝突的服務,如下列「Microsoft 知識庫」文件所述:

192708 INF: Installation Order: Cluster Server Support for SQL or MSMQ
219264資訊:SQL Server 7.0 叢集安裝程式的安裝順序
情況 8

問題

下面登錄項目不正確:
Hkey_Local_Machine\Software\Microsoft\Windows\CurrentVer\CommonFilesDir


解決方案

如果路徑錯誤就修正路徑。
情況 9

問題

使用 SQL Cluster Failover Wizard 無法解除 SQL 叢集。

解決方案

當 SQL CLuster Failover Wizard 執行時,SQL 叢集資源就會建立。根據預設值,這些資源具有下面命名結構:
   <Virtual_SQL_Server_Name> IP Address
   <Virtual_SQL_Server_Name> Network 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 Address
   xyz Network Name
   xyz SQL Server 7.0
   xyz VServer
   xyz SQL Server Agent 7.0
如果這些所有或一些資源被改為:
   IP Address
   Network Name
   SQL Server
   Virtual Server
   SQL Agent
這樣會造成 SQL Cluster Failover Wizard 在使用時失敗或掛掉。若要解決此問題,請將資源重新命名回預設名稱。
情況 10

問題

SQLCLUST.LOG 顯示下面內容:
~~~ OnEnableCluster: UpdateSku
~~~ OnEnableCluster: TransferSQLServices
+++ TransferSQLServices: enter
+++ TransferSQLServices: calling AddVSNameLanManServer
[reghelp.h:132] type not REG_MULTI_SZ: 160 (0xa0): The argument string passed to DosExecPgm is not correct.

[reghelp.h:133] : 160 (0xa0): The argument string passed to DosExecPgm is not correct.

[reghelp.h:290] : 160 (0xa0): The argument string passed to DosExecPgm is not correct.

[clenable.cpp:1803] : 160 (0xa0): The argument string passed to DosExecPgm is not correct.

[clenable.cpp:1836] : 160 (0xa0): The argument string passed to DosExecPgm is not correct.

[clenable.cpp:2379] : 160 (0xa0): The argument string passed to DosExecPgm is not correct.

~~~ XXX TransferSQLServices failed
解決方案

確認下面登錄機碼的類型值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\NullSessionPipes
應該是 REG_MULTI_SZ。

實際失敗的是在 RegQueryValue_MULTI_SZ() 中。它會失敗是因為機碼的類型不是 REG_MULTI_SZ。

如果機碼的類型不是 REG_MULTI_SZ,您就需要從此機碼複製內容,刪除後再以相同的名稱與正確的類型值重新建立此機碼,然後取代其內容。

?考

本文件是根據 Microsoft Knowledgebase 文件編號 Q254593 翻譯的. 若要參考原始英文文件內容, 請至以下網址:

http://support.microsoft.com/support/kb/articles/Q254/5/93.asp

屬性

文章編號: 254593 - 上次校閱: 2004年3月11日 - 版次: 1.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