🔎解決 SQL Server Named Pipe 連線失敗與 Spotfire 建表錯誤的完整指南

 

前言

在安裝 TIBCO Spotfire 伺服器並執行資料庫初始化批次檔(create_actionlog_db.bat)時,有時會遇到 SQL Server 連線錯誤,例如:

no named pipe instance matching '' returned from host 'SPFSDB01' Timed out waiting for pipe '\\.\pipe\SQLLocal\SQLEXPRESS' to come available

對不熟悉資料庫連線的人來說,這可能完全摸不著頭緒。其實,這是 SQL Server 連線通訊協定設定批次檔連線參數 的組合問題。本文將用軟體工程師的角度,完整解釋原因並提供可行解法。




問題背景

Spotfire 安裝腳本會呼叫 sqlcmd 來建立 Action Log 資料表。然而:

  1. 找不到 sqlcmd

    • 系統未安裝 Microsoft SQL Server Command Line Utilities

    • 或安裝後沒有設定 PATH

  2. Named Pipes 連線失敗

    • SQL Server 沒開啟 Named Pipes 協定

    • 批次檔沒有帶正確的伺服器與實例名稱

    • SQL Server Browser 沒啟動

  3. TCP/IP 未啟用

    • 批次檔默認使用 Named Pipes,若沒啟動就會失敗

    • 沒設定固定 TCP 埠,導致命名實例連線解析失敗




常見錯誤訊息解析

1. no named pipe instance matching '' returned from host

  • 原因-S 參數傳入空值,批次檔沒接到伺服器名稱

  • 解法:執行批次檔時帶上完整伺服器與實例,例如:

    create_actionlog_db.bat SPFSDB01\SQLEXPRESS sa MyPassword

2. Timed out waiting for pipe

  • 原因:Named Pipes 協定關閉或 SQL Server 服務未啟動

  • 解法:啟動 SQL Server 服務,並在 Configuration Manager 中啟用 Named Pipes 或改用 TCP




解決步驟

步驟 1:安裝與確認 sqlcmd

where sqlcmd

若找不到,使用 Winget 安裝:

winget install Microsoft.sqlcmd

步驟 2:啟動 SQL Server 服務

  1. 打開 services.msc

  2. 找到 SQL Server (SQLEXPRESS) → 設為 Running

  3. 若用命名實例,啟動 SQL Server Browser

步驟 3:啟用 TCP/IP 並設定固定埠

  1. 開啟 SQL Server Configuration Manager

  2. SQL Server Network Configuration → Protocols for SQLEXPRESS

  3. 啟用 TCP/IP

  4. IPAll 中設定 TCP Port = 1433,清空 Dynamic Ports

  5. 重啟 SQL Server 服務

步驟 4:測試 TCP 連線

sqlcmd -S tcp:localhost,1433 -E -Q "SELECT @@VERSION;"

或使用 SQL 登入:

sqlcmd -S tcp:SPFSDB01,1433 -U sa -P MyPassword -Q "SELECT @@VERSION;"

步驟 5:修改批次檔參數或內容

若批次檔支援參數,直接傳入 TCP 格式:

create_actionlog_db.bat tcp:SPFSDB01,1433 sa MyPassword

若不支援,打開 .bat 檔,將 -S %SERVER% 改為:

-S tcp:%SERVER%,1433



附加建議

  • 固定埠 vs SQL Browser
    固定埠方便直連;若使用動態埠,需啟用 SQL Browser。

  • 權限
    建立資料庫需要 sysadmindbcreator 權限。

  • 日誌檔排錯
    批次檔失敗時,檢查 actionlog.txt 會顯示完整 SQL 錯誤。




結論

這類 Spotfire + SQL Server 的安裝錯誤,核心原因大多是 連線協定與參數不正確
只要依序確保:

  1. sqlcmd 工具可用

  2. SQL Server 服務啟動

  3. TCP/IP 啟用且固定埠

  4. 批次檔帶正確的伺服器與實例

基本上就能解決 Named Pipes 連線錯誤,順利建立 Spotfire 所需的資料表。

留言

這個網誌中的熱門文章

🔍Vue.js 專案錯誤排查:解決 numericFields is not defined 與合併儲存格邏輯最佳化

🛠【ASP.NET Core + Oracle】解決 ORA-00904 "FALSE": 無效的 ID 錯誤與資料欄位動態插入顯示問題

🔎EF Core 連 Oracle 出現 ORA-00600 [kpp_concatq:2] 的完整排錯指南(含 EF Core ToString/CultureInfo 錯誤)