Sql-Server

消息 39011,SQL Server 無法與 LaunchPad 服務通信

  • September 5, 2018

我們剛剛在已安裝 SQL 2012 Standard 的伺服器上安裝了 SQL Server Enterprise 2016 CTP 3.3。我們將 SQL2016 安裝為命名實例,並一直在嘗試使 R 集成正常工作,但我們在執行管理工作室的外部腳本時遇到問題。

我們完成了此處描述的安裝 R 包: https ://msdn.microsoft.com/en-us/library/mt590809.aspx ,並且我們手動執行了此處列出的安裝後 R 配置步驟: https:// msdn.microsoft.com/en-us/library/mt590536.aspx

此時,我們可以從 RStudio 連接到 SQL 並在本地或伺服器上操作數據。但是,我們無法在 Management Studio 中指定 R 腳本。當我們嘗試在 TSQL 中執行 R 腳本時,我們會收到錯誤消息:

消息 39011,級別 16,狀態 1,第 1 行 SQL Server 無法與 LaunchPad 服務進行通信。請驗證服務的配置。

我們已經嘗試了幾個範例 R 腳本,包括以下內容:

  1. execute sp_execute_external_script @language = N'R' , @script = N' mytextvariable <- c("hello", " ", "world"); OutputDataSet <- as.data.frame(mytextvariable);' , @input_data_1 = N' SELECT 1 as Temp1' WITH RESULT SETS (([col] char(20) NOT NULL));
  2. execute sp_execute_external_script @language = N'R' , @script = N' OutputDataSet <- InputDataSet;' , @input_data_1 = N' SELECT * FROM MyData;' WITH RESULT SETS (([NewColName] int NOT NULL));
  3. execute sp_execute_external_script @language = N'R' , @script = N' SQLOut <- SQLIn;' , @input_data_1 = N' SELECT 12 as Col;' , @input_data_1_name = N'SQLIn' , @output_data_1_name = N'SQLOut' WITH RESULT SETS (([NewColName] int NOT NULL));

所有這些都會導致有關無法與 LaunchPad 服務通信的相同錯誤消息。


以下是我們驗證的配置選項似乎配置正確:

  • 我們可以看到執行“exec sp_configure”時“external scripts enabled”的值為1

  • 我們可以看到“本地使用者和組”中已經創建了 Windows 使用者組“SQLRUserGroupSQL2016”

  • 我們可以在“本地使用者和組”中看到為 R 處理創建的 20 個 Windows 使用者

  • 我們可以看到在主數據庫上正確創建了數據庫角色“db_rrerole”。

  • 我們可以看到擴展儲存過程“xp_ScaleR_ …”已在主數據庫上正確創建。

  • 我們已驗證實例的 SQL Server 服務與 SQL 代理服務和 SQL LaunchPad 服務一起執行。

    • 他們都以相同的 Windows 域使用者帳戶登錄,並且該使用者已添加到伺服器的管理員組。
  • 我們已經嘗試多次重啟上述服務以及重啟伺服器。

  • 我們嘗試使用 Windows Auth 與數據庫角色“sysadmins”中的域帳戶以及數據庫角色“sysadmins”中的本地 SQL 使用者帳戶連接到 Management Studio

  • 我們手動將這些使用者添加到主數據庫上的“db_owner”和“db_rrerole”角色(只是為了確定)

不知道還要檢查什麼…

**更新:**從 SQL 2016 RC2 開始,R Services 設置看起來要簡單得多。見這裡

這篇文章適用於需要對 R 進行額外設置的 SQL Server 2016 的早期 CTP。

從 CTP3.2 升級到 3.3 時出現此錯誤。首先要檢查的是,如果您有一個命名實例,您在執行安裝後腳本時是否使用了該名稱:

"...rxLibs\x64\registerRext.exe" /install /instance:sql2016

我假設是這樣,因為您有,db_rrerole但如果沒有,請使用開關解除安裝uninstall並使用您的實例名稱重試:

"...rxLibs\x64\registerRext.exe" /uninstall

在安裝過程中監控輸出是否有錯誤,或者考慮將輸出重定向到一個文件,以便以後查看它,例如:

"...rxLibs\x64\registerRext.exe" /install /instance:yourNamedInstance > mylog.txt

檢查日誌並報告您發現的任何錯誤。如果腳本成功,則 Launchpad 服務應該正在執行,您可以通過services.msc從命令行執行來檢查這一點。這是我為預設實例執行的服務:

啟動板服務正在執行

你的應該說SQL2016我說MSSQLSERVER的。如果一切正常,您可以打開配置文件,例如從命令行:

notepad "%programfiles%\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\rlauncher.config"

您必須更改上面的路徑,但該文件應位於BinnSQL Server 安裝目錄中。檢查配置文件並確保路徑正確/看起來合理。我最初發現多個安裝的路徑上有版本號,例如(MSSQLSERVER1000),基本上這會干擾 R 安裝。您可以檢查系統資料庫項HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLLaunchpad$SQL2016HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server查看它們是否一致,但我強烈建議您不要更改系統資料庫,除非您可以承受失去機器/VM 並且必須完全重新安裝 Windows 等。

我基本上完全解除安裝了 SQL Server(包括有點殘酷的系統資料庫清理),然後重新安裝了一個預設實例,它就可以工作了。從那以後,我決定不混合 CTP 並為每個 CTP 設置乾淨的 VM。還要記住 CTP 基本上是 beta 產品,因此您不應該將它們安裝在您重視的任何伺服器上 - 希望這是一個測試盒或非生產 VM?

老實說,我對您的最佳建議是只為 CTP 使用虛擬機,因為它們的設計無法與其他版本甚至 CTP 升級配合使用。我在筆記型電腦上使用 VirtualBox,這在大多數情況下都很好。如果您訂閱了 MSDN(甚至是試用版),您可以使用最新的 CTP 設置免費 VM,並在完成後將其丟棄。

祝你好運!

LaunchPad 服務的服務帳號需要是本地管理員。檢查服務帳戶是否在伺服器上的本地管理員組中。

引用自:https://dba.stackexchange.com/questions/130578