【问题标题】:rxPredict throws SQL Server does not exist or access denied errorrxPredict 抛出 SQL Server 不存在或拒绝访问错误
【发布时间】:2016-11-05 16:18:16
【问题描述】:

我正在尝试 MSDN 上的 SQL Server R 服务教程 - 链接如下:

https://msdn.microsoft.com/en-us/library/mt629164.aspx

当我运行 rxPredict 命令时:

rxPredict(modelObject = logitObj, 
           data = featureDataSource, 
           outData = scoredOutput, 
           predVarNames = "Score", 
           type = "response",
           writeModelVars = TRUE, 
           overwrite = TRUE)

我收到以下错误:

======  SG01NB-4300092  ( process  1 ) has started run at  2016-07-04 09:43:35.00  ====== 

[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. 
Caught exception in file: CxAnalysis.cpp, line: 5682. ThreadID: 13560 Rethrowing. 
Caught exception in file: CxAnalysis.cpp, line: 5249. ThreadID: 13560 Rethrowing. 

[Microsoft][ODBC Driver Manager] Connection not open 

ODBC Error in SQLDisconnect 
Error in doTryCatch(return(expr), name, parentenv, handler) : 

[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. 
Calls: source ... tryCatch -> tryCatchList -> tryCatchOne -> doTryCatch -> .Call 

Execution halted 

Error in rxCompleteClusterJob(hpcServerJob, consoleOutput, autoCleanup) : 
  No results available - final job state: failed

我已确保我的 rxSetComputeContext(cc) 正在使用可以创建表的有效用户登录。我还在我正在处理的本地计算机上安装 SQL Server,所以它不会是网络问题。

有没有人遇到过这个问题并成功运行了这个语句?

感谢您的任何回复和帮助!

伊恩

【问题讨论】:

    标签: sql-server r


    【解决方案1】:

    我发现问题出在 outData = scoreOutput 语句上。如果我设置 outData=NULL 并将服务器上下文更改为本地,我可以从 rxPredict 生成输出。

    我决定然后使用 rxSetComputeContext("local") 执行 rxPredict 获取输出数据帧 (outDF),然后使用 rxDataStep(inData = outDF, outFile = scoreOutput, overwrite= 将其保存回 SQL Server真的)

    rxSetComputeContext("local")
    
    fds <- rxImport(featureDataSource)
    
    outDF <- structure(list(Score = numeric(),
                            tipped = integer(),
                            passenger_count = numeric(),
                            trip_distance = numeric(),
                            trip_time_in_secs = numeric(),
                            direct_distance = numeric()), 
                       class = "data.frame")
    
    outDF <- rxPredict(modelObject = logitObj, data = fds, outData = NULL, 
              predVarNames = "Score", type = "response",
              writeModelVars = TRUE, overwrite = TRUE)  
    
    # reset the compute context to the server and persist the df result to the table
    rxSetComputeContext(cc)
    
    rxDataStep(inData = outDF, outFile = scoredOutput, overwrite=TRUE)
    

    如果有人有更好的方法,请分享并告诉我!

    谢谢

    伊恩

    【讨论】:

      【解决方案2】:

      确保您已向工作人员/Launchpad 帐户(用于运行 R 脚本)提供代表您登录 SQL Server 的权限。详情请见Enable Implied Authentication for Launchpad Accounts

      【讨论】:

      • @ArunGurunathan,即使在启用隐式身份验证后,我也会收到此错误。我认为,问题不在于远程连接——因为我可以查询、获取汇总统计数据,甚至可以在 SQL 计算上下文中构建线性和逻辑回归模型;但仅在使用 rxPredict 时才会引发错误。有什么想法吗?
      • 您的 SQL Server 是在本地运行还是在远程服务器或云上运行?你能分享完整的错误信息/脚本吗?
      • My SQL Server 位于云 (Azure) 上。脚本和错误与这个问题几乎相同。
      • 对于 Azure VM 中的 SQL Server R Services,请确保您已按照在 Azure 虚拟机上安装 SQL Server R Services 设置 TCP/IP 和命名管道协议](msdn.microsoft.com/en-US/library/mt748179(SQL.130).aspx ) 文件
      • 谢谢@ArunGurunathan。这(下图)是否意味着启用了命名管道和 TCP/IP 协议? SQL Server 2016 Configuration Manager Screenshot
      【解决方案3】:

      我已经处理这个错误很长时间了。奇怪的是,该脚本在我的一个 SQL Server 2016 VM 上运行,而不是另一个。所以我比较了两台服务器的属性,并确保我没有忘记一些安装后的过程。

      部分感谢@ArunGurunathan,我在寻找这些差异时发现了一个异常。打开 SQL Server 机器本身,查看防火墙设置 - 我发现有一条规则阻止对 R 本地用户帐户的网络访问。我禁用了该规则,并且我的脚本 (rxPredict) 运行时没有任何错误。

      尝试告诉我它是否适合您。

      【讨论】:

      • 您能否说明您正在运行的 SQL Server 版本(例如,从 SSMS 运行 PRINT @@VERSION 命令)?请注意,关闭防火墙规则以允许 R 进程通过网络对话可能会出现安全问题,因此不建议在生产场景中使用。
      • @ArunGurunathan,我在 Windows Server 2012 R2 Datacenter 6.3 上使用 Microsoft SQL Server 2016 (RTM) - 企业版(64 位)。另外,非常感谢您的提示。那么,禁用该防火墙规则只是一种解决方法,而不是解决此问题的方法?
      【解决方案4】:

      我有同样的问题成功和错误消息:

      outData 方法无权写入 SQL DB, 但通过启用 SQLRUser Group 对相关数据库的写访问权限来修复它。

      已应用修复

      基本上,您正在为 Launchpad 帐户启用隐含身份验证

      从控制面板具体导航到用户帐户,您将看到具有 20 个帐户的 SQLR 用户组。

      在服务器和数据库表上授予这些权限并具有写访问权限。

      你应该没看错。祝你好运

      【讨论】:

      • 为启动板帐户启用隐含身份验证 从控制面板具体导航到用户帐户,您将看到具有 20 个帐户的 SQLR 用户组。在服务器和数据库表上授予这些权限并具有写访问权限。那应该看你的权利。祝你好运
      猜你喜欢
      • 1970-01-01
      • 2022-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多