以编程方式踢出SAS用户

时间:2016-01-29 08:34:23

标签: windows sas

是否可以从服务器以编程方式切断用户与SAS服务器的连接?我知道当我与服务器建立远程桌面连接时,我可以使用标准的Windows工具(例如任务管理器)来杀死单个SAS进程,但这可以通过编程方式完成,而且,我们是否可以阻止任何用户连接?

情况如下:

我们在Windows Server 2008 R2服务器上安装了SAS 9.4。服务器上有一堆文件夹,里面有SAS表,还有一些最终用户通过SAS Enterprise Guide(已安装在桌面上)使用这些SAS表。现在,还有一个大型SAS批处理运行,我们每天都会运行以更新所有SAS表。我们希望确保批处理运行时没有用户通过EG打开任何SAS表;否则它可能会因桌子被锁定而失败。当然,批量运行通常在夜间进行,但由于其时间表取决于许多其他事项,我们无法100%确定它是在人们上班之前完成的。

我们想要的是某种脚本或SAS设置,它允许我们在批处理运行开始之前自动切断所有用户的SAS连接,在运行期间将它们保留在外,然后允许它们在批处理运行时重新连接已经完成了。

任何提示都将不胜感激!

编辑:是否可以使用taskkill编写cmd脚本,以阻止在当前任何其他用户下运行的所有sas.exe进程?在这种情况下,SAS实际上是否甚至在服务器上为每个用户创建了一个sas.exe进程?

3 个答案:

答案 0 :(得分:3)

您可以使用SYSTASK or X commands(Windows)中的(UNIX) 。我的提取,转换和加载(ETL)进程在UNIX环境中运行,SYSTASK对于被问及的原因是一个很大的帮助。我使用SAS创建数据集,然后使用mv(UNIX)命令替换现有数据集。文件系统将覆盖SAS锁定。

答案 1 :(得分:2)

当你在9.4时,我提出了你的图书馆应该转换为只读metadata bound library的建议。这应该可以防止表锁定,并且无需关闭用户会话(通过丢失工作表/宏变量等对其生产力产生潜在影响)

答案 2 :(得分:1)

了解SAS / Share。如果这不是一个选项,那么两个丑陋的想法是:

  1. 如果用户使用libname语句连接到Windows共享,则只能禁用共享。然后重新启用它。这可以使用命令行指令和x命令轻松完成。

  2. 如果他们通过SAS服务进行连接,请停止该服务并重新启动它。同样,这可以通过命令行和x完成。

  3. 完成上述任何一项(或两项)之后。确保首先发生的是您发出lock <tablename>;语句,以确保在您的工作完成之前,没有人可以再次使用这些表。然后,您可以重新启动服务/重新启用共享。

    完成后,请确保发出锁定命令的SAS会话已关闭或清除锁定。