感谢您阅读本文。
我在设置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来查询数据并没有失败。从那时起我们就有了解决这个问题,但我想知道自己是否为自己的问题做好准备。
由于
答案 0 :(得分:7)
由于你的问题更像是关于SAS中数据访问和并发性的一般建议的请求,我的答案将形成一般建议,而不仅仅是一个特定的解决方案。
有优秀的SAS在线文档。请访问the index,找到与您进一步阅读相关的信息。
ACCESS=READONLY
”libname选项。它几乎完成了它所说的内容,即将对libname中数据成员的访问限制为只读。这样做的好处是,在非更改查询期间不会意外更改数据。它还使SAS能够为数据改变查询留出一些空间,以获得更高级别的数据控制。SERVER=SHARELIB
”,并让SAS / SHARE管理并发数据访问。如果将libname分配给SAS / SHARE服务器进程,则需要访问此libname的所有后续SAS进程只需分配类似"LIBNAME LIB SERVER=SHARELIB"
的libname(请注意,没有物理路径 - SAS / SHARE服务器进程需要注意那个)。如果您的SAS / SHARE服务器具有单独的SAS进程,则此设置将发挥最佳功能。DATA LIB.MYDATA(CNTLLEV=LIB);
”指定访问控制位于库级别,限制对库的一个更新过程的并发访问。 CNTLLEV=MEM
和CNTLLEV=REC
分别限制成员级别和记录级别的并发访问。这些选项可以通过多种不同方式组合,为您提供大量空间,使您可以根据需要进行细粒度访问。我希望这些选择能帮助你完成任务。