以编程方式踢出SAS用户

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

情况如下:

我们在Windows Server 2008 R2服务器上安装SAS 9.4。 服务器上有一堆文件夹,其中包含SAS表格,还有一些最终用户通过SAS Enterprise Guide(已安装在桌面上)使用这些SAS表格。 现在,还有一个大的SAS批处理运行,我们每天运行更新所有的SAS表。 我们希望确保在批处理运行时没有用户通过EG打开任何SAS表; 否则可能会因为表被locking而失败。 当然,批量运行通常是在夜间完成的,但是由于时间安排依赖于很多其他的事情,我们不能100%确定在人们上class之前完成。

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

任何提示将不胜感激!

编辑 :是否有可能编写一个使用taskkill cmd脚本,将停止所有其他用户比当前运行的所有sas.exe进程? 在这种情况下,SAS甚至会为每个用户在服务器上创build一个sas.exe进程吗?

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

正如你在9.4,我提出的建议,你的图书馆应该转换为只读, 元数据绑定库 。 这应该防止表锁,并消除关闭用户会话的需要(通过丢失工作表/宏变量等可能会影响他们的生产力)

看看SAS /共享。 如果这不是一个选项,那么两个丑陋的想法是:

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

  2. 如果他们通过SAS服务连接,请停止服务并重新启动。 再次,这可以通过命令行和x

完成上述任一项(或两项)之后。 确保发生的第一件事情是发出一个lock <tablename>; 声明,以确保没有人可以再次使用这些表,直到您的工作完成。 然后,您可以重新启动服务/重新启用共享。

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