gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:17:32 25 4
gpt4 key购买 nike

感谢您阅读本文。

设置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在线文档。请访问the index,并找到与您的进一步阅读相关的信息。

  • 请进一步查看“ACCESS=READONLY” libname选项。它几乎说了什么,即将对libname中数据成员的访问限制为只读。这样做的好处是,在不更改查询的过程中,您不会偶然更改数据。它还使SAS为数据更改查询留出一些空间,以便对数据进行更高级别的控制。
  • SAS/SHARE启用并发数据访问,因此,如果您需要提供对同一数据的并发访问(读/写),则SAS/SHARE是一个不错的选择。这意味着您只需分配一次libname,为libname语句提供选项“SERVER=SHARELIB”,然后让SAS/SHARE管理并发数据访问就可以了。如果将libname分配给SAS/SHARE服务器进程,则所有需要访问此libname的所有后续SAS进程仅需分配"LIBNAME LIB SERVER=SHARELIB"之类的libname(请注意,没有物理路径-SAS/SHARE服务器进程会处理该问题)。如果您的SAS/SHARE服务器具有单独的SAS流程,则此设置将发挥最大作用。
  • 您还可以使用LOCK语句或LOCK命令锁定您的libname。这意味着您的SAS程序可以确保自己具有对libname的独占访问权限,以防万一。然后,其他SAS进程可以使用lock命令来查询特定的libname,并查看它是否可以(独占)访问。
  • 您还可以在数据成员级别上控制访问。这是通过CNTLLEV数据集选项完成的。例如,“DATA LIB.MYDATA(CNTLLEV=LIB);”指定访问控制处于库级别,从而限制了仅对库的一个更新过程的并发访问。 CNTLLEV=MEMCNTLLEV=REC分别在成员级别和记录级别限制并发访问。

  • 这些选项可以通过多种不同方式组合在一起,从而为您提供了很大的空间,使您可以根据需要进行细粒度的访问。我希望这些选择将帮助您完成任务。

    关于sas - 对于SAS数据集,防止锁定多用户访问的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/573268/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com