【发布时间】: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 中打开的表被锁定(可以肯定的是,我刚刚对此进行了测试)。同意并发读/写应该是基本功能!