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

对于SAS数据集,防止多用户访问锁定的最佳方法是什么,sas,Sas,谢谢你阅读这篇文章 设置libref时,我使用共享服务(server=sharedLib),以允许SAS/IntrNet应用程序的用户修改和更新(添加新)单个数据集的记录。该应用程序还将用于查询我的数据集。为了最小化锁定,我只使用一个数据步骤来修改和更新,而不是Proc-SQL(它锁定整个成员)。但是,我想知道,如果只有对数据的更新/修改访问使用共享服务,而查询不使用共享服务,那么锁定的可能性是大还是小 %if &type=QUERY %then %do ; LIBNAME lib '

谢谢你阅读这篇文章

设置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查询数据并没有失败。从那时起,我想我们已经解决了这个问题,但我想知道我是否在为自己的问题做准备


谢谢

因为您的问题更像是请求有关SAS中数据访问和并发性的一般建议,所以我的回答将是一般建议,而不是具体的解决方案

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

  • 请进一步查看“
    ACCESS=READONLY
    ”libname选项。它几乎做到了它所说的,即限制对libname中数据成员的访问为只读。这样做的好处是,在非更改查询过程中不会意外更改数据。它还允许SAS为数据更改查询留出一些空间,以获得对数据的更高级别的控制
  • SAS/SHARE支持并发数据访问,因此,如果您需要提供对相同数据的并发访问(读/写),SAS/SHARE是一个不错的选择。这意味着您可以只分配一次libname,为libname语句提供选项“
    SERVER=SHARELIB
    ”,并让SAS/SHARE管理并发数据访问。如果将libname分配给SAS/SHARE server进程,则需要访问此libname的所有后续SAS进程只需分配libname,如
    “libname LIB server=SHARELIB”
    (注意,没有物理路径-SAS/SHARE server进程会处理此问题)。如果您的SAS/SHARE服务器有一个单独的SAS进程,则此设置功能最佳
  • 还可以使用lock语句或lock命令锁定libname。这意味着您的SAS程序可以确保自己拥有对libname的独占访问权限,以备不时之需。然后,其他SAS进程可以使用lock命令查询特定的libname,并查看它是否可以获得(独占)访问权限
  • 您还可以控制数据成员级别的访问。这是通过CNTLEV数据集选项完成的。例如“
    DATA LIB.MYDATA(cntlev=LIB);
    ”指定访问控制在库级别,将并发访问限制为仅对库的一个更新进程
    cntlev=MEM
    cntlev=REC
    分别在成员级别和记录级别限制并发访问
  • 这些选项可以以多种不同的方式组合在一起,为您提供了很大的空间,使您可以根据需要进行细粒度的访问。我希望这些选择能帮助你完成任务