Sqlserver 2016 R Service環境安裝的各種錯誤(坑)解決辦法
相信很多朋友都會慕名Sqlserver 2016的R語言功能,將自己的數據庫升級到Sqlserver 2016,但是當你安裝完Sqlserver 2016的R語言組件之後,你會發現並不能直接使用,比如當你在SSMS中執行下面這段測試R語言命令的時候,Sqlserver 2016會各種報錯。。。
exec sp_execute_external_script @language =N‘R‘, @script=N‘OutputDataSet<-InputDataSet‘, @input_data_1 =N‘select 1 as hello‘ with result sets (([hello] int not null)); go
本人也是折騰了好久最終才成功在Sqlserver 2016中執行了R語言。
首先如果你要啟用Sqlserver的R語言功能,必須要啟動Sqlserver的兩個服務:
1.Sqlserver實例數據庫引擎服務:
2.Sqlserver實例SQL Server Lanuchpad服務:
啟動這兩個服務之後,還要在SSMS中執行下面這段SQL腳本,才能在Sqlserver中開啟執行外部腳本(R語言)的功能。註意執行完這段腳本後要重啟數據庫引擎服務和SQL Server Lanuchpad服務才會正式生效
Exec sp_configure ‘external scripts enabled‘, 1; reconfigure;
如果你在安裝Sqlserver 2016的時候,安裝路徑中如果出現了空格,那麽恭喜你。。。你還需要修改一個系統配置文件,否者Sqlserver 2016 的R語言運行時會報錯。。。
比如我安裝Sqlserver 2016的時候安裝路徑為D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER
那麽找到文件D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\rlauncher.config
使用操作系統管理員權限啟動記事本(notepad),打開rlauncher.config,找到WORKING_DIRECTORY這一項修改為一個不帶空格的文件夾路徑,這裏我使用了自定義的一個文件夾D:\RWorkspace
將D:\RWorkspace賦予windows用戶everyone的完全控制權限(看到有文章說其實是要給這個文件夾賦予SQL Server Lanuchpad服務的執行賬戶的完全控制權限,但是由於我沒有在系統中找到SQL Server Lanuchpad服務的執行賬戶,所以這裏就賦予了用戶everyone的完全控制權限):
然後以管理員身份啟動命令行工具CMD,定位到文件夾D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64
執行CMD命令:
registerRext.exe /uninstall
結果如下:
再執行CMD命令:
registerRext.exe /install
結果如下:
再次在SSMS中執行上面的測試R語言命令:
exec sp_execute_external_script @language =N‘R‘,
@script=N‘OutputDataSet<-InputDataSet‘,
@input_data_1 =N‘select 1 as hello‘
with result sets (([hello] int not null));
go
結果如下,R語言模塊成功運行!
但是由於執行了registerRext.exe /uninstall和registerRext.exe /install,我發現這兩個命令其實最終會將rlauncher.config文件中WORKING_DIRECTORY的路徑更改為D:\SQL-mssqlserver-ExtensibilityData,如下圖所示:
所以前面我們修改rlauncher.config中配置文件和給文件夾D:\RWorkspace賦予everyone完全控制權限的步驟可能是多余的,但是最終目的反正就是不能讓rlauncher.config文件中WORKING_DIRECTORY的路徑包含空格,否者Sqlserver 2016的R語言運行時會報錯,這一點必須要註意。
好了R語言服務終於可以成功使用了,接下來就可以探究Sqlserver R語言的奧妙之處了!
Sqlserver 2016 R Service環境安裝的各種錯誤(坑)解決辦法