【问题标题】:Kicking SAS users out programmatically以编程方式踢出 SAS 用户
【发布时间】:2016-01-30 21:39:54
【问题描述】:

是否可以从服务器以编程方式切断用户与 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 进程?

【问题讨论】:

  • 这正是我尽可能避免使用 SAS 表的原因!您可以将这些表迁移到数据库中吗?这样您就可以运行更新而无需启动您的用户。或者,您可以将这些表更改为一系列视图(指向原始表),然后可以在 ETL 阶段重命名/删除它们..
  • 恐怕我们现在被 SAS 表困住了。就我个人而言,我也更喜欢“适当的”数据库来存储数据。使用视图是个好主意;话又说回来,用户仍然可以访问真实的表(例如使用 libname),所以我们不能确定没有表被锁定。
  • 在 9.4 中,您可以拥有元数据绑定库。这将阻止直接 libname 连接
  • @RawFocus 如果您想做这些类型的事情,通常这就是您许可 SAS/Share 的原因。不幸的是,这是额外的$$$,并不总是一种选择。 IMO 它应该是 Base/SAS 的一部分,因为这是非常标准的功能......
  • SAS/Share 不会阻止在 EG 中打开的表被锁定(可以肯定的是,我刚刚对此进行了测试)。同意并发读/写应该是基本功能!

标签: windows sas


【解决方案1】:

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

【讨论】:

  • 嗯,您与 SAS 文档的链接似乎已损坏。
  • 已修复。这就是我尝试使用手机中的链接添加答案的结果。
  • 谢谢,我喜欢这个解决方案。看来我最初的问题(如何从 SAS 表中删除人员)没有一个简单的答案,但是在其他地方创建表,然后通过简单的移动命令覆盖文件系统中的 SAS 锁在我看来是最不混乱的解决方案。 SAS 并不容易……
【解决方案2】:

当您在 9.4 上时,我提出了将您的库转换为只读库的建议,metadata bound library。这应该可以防止表锁定,并消除关闭用户会话的需要(通过丢失工作表/宏变量等可能影响他们的生产力)

【讨论】:

  • 我知道这并不能回答问题,但如果可能的话,绝对应该避免踢用户!
  • 我不知道这种可能性,所以谢谢你。但是,这不会阻止用户创建自己的指向相同表的库吗?
  • 如果你想让用户更新表格,最好给他们datacontroller.io(我们构建这个是为了为最终用户启用并发编辑访问)
【解决方案3】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-06-15
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 2016-09-27
    相关资源
    最近更新 更多