当前位置:  开发笔记 > 数据库 > 正文

对于SAS数据集,防止多用户访问锁定的最佳方法是什么

如何解决《对于SAS数据集,防止多用户访问锁定的最佳方法是什么》经验,为你挑选了1个好方法。

感谢您阅读本文.

我在设置libref时使用共享服务(server = sharedLib),以允许我的SAS/IntrNet应用程序的用户修改和更新(添加新的)单个数据集的记录.该应用程序还将用于查询我的数据集.为了最小化锁定,我只使用数据步骤来修改和更新而不是Proc SQL(它锁定整个成员).但是,我想知道,如果只更新/修改数据访问权限使用共享服务但查询没有,则锁定是否或多或少.

%if &type=QUERY %then %do ;
 LIBNAME lib '/myServer/library' ;
%end ;
%else %do ;
 LIBNAME lib '/myServer/library' server=shareLib ;
%end;

这不是我的实际代码,但我知道请求是否只是发送数据或修改现有记录或添加新记录(更新);

我最初做出这种区分是因为我们在共享服务上附加了一些失败(不确定这是正确的术语),但引用lib来查询数据并没有失败.从那以后我们就有了,我认为解决了这个问题,但我想知道我是否正在为自己的问题做好准备.

谢谢



1> Martin Bøgel..:

由于您的问题更像是对SAS中数据访问和并发性的一般建议的请求,我的答案将形成一般建议,而不仅仅是一个特定的解决方案.

有优秀的SAS在线文档.请访问索引,并找到与您进一步阅读相关的信息.

    请进一步查看" ACCESS=READONLY"libname选项.它几乎完成了它所说的内容,即将对libname中数据成员的访问限制为只读.这样做的好处是,在非更改查询期间不会意外更改数据.它还使SAS能够为数据更改查询留出一些空间,以获得更高级别的数据控制.

    SAS/SHARE支持并发数据访问,因此如果您需要为同一数据提供并发访问(读/写),SAS/SHARE是一个不错的选择.这意味着您只需一次分配您的libname,为您的libname语句提供选项" SERVER=SHARELIB",并让SAS/SHARE管理并发数据访问.如果将libname分配给SAS/SHARE服务器进程,则需要访问此libname的所有后续SAS进程只需分配libname "LIBNAME LIB SERVER=SHARELIB"(注意没有物理路径 - SAS/SHARE服务器进程负责处理).如果您的SAS/SHARE服务器具有单独的SAS进程,则此设置最佳运行.

    您还可以使用LOCK语句或LOCK命令锁定您的libname.这意味着您的SAS程序可以确保自己对libname的独占访问权限,以防您需要.然后,其他SAS进程可以使用lock命令查询特定的libname,并查看它是否可以获得(独占)访问权限.

    您还可以控制数据成员级别的访问权限.这是通过CNTLLEV数据集选项完成的.例如," DATA LIB.MYDATA(CNTLLEV=LIB);"指定访问控制位于库级别,限制对库的一个更新过程的并发访问.CNTLLEV=MEM并分别CNTLLEV=REC限制成员级别和记录级别的并发访问.

这些选项可以以多种不同的方式组合,为您提供大量空间,使您可以根据需要进行细粒度访问.我希望这些选择能帮助您完成任务.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有