5

これを読んでくれてありがとう。

SAS/IntrNet アプリケーションのユーザーが単一のデータセットのレコードを変更および更新 (新規追加) できるように、ライブラリ参照名を設定するときに共有サービス (server=sharedLib) を使用しています。このアプリケーションは、データセットのクエリにも使用されます。ロックを最小限に抑えるために、(メンバー全体をロックする) Proc SQL ではなく、変更と更新にデータ ステップのみを使用しています。ただし、データへの更新/変更アクセスのみが共有サービスを使用し、クエリは使用しない場合、ロックが発生する可能性が高いかどうかは疑問です。

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

これは私の実際のコードではありませんが、リクエストが単にデータを送り返すか、既存のレコードを変更するか、新しいレコードを追加 (更新) するかはわかっています。

共有サービスへの接続に失敗したため(正しい用語かどうかはわかりません)、データをクエリするための lib の参照は失敗しませんでした。それ以来、この問題は解決したと思いますが、問題に備えているのではないかと思います。

ありがとう

4

1 に答える 1

7

あなたの質問は、SAS でのデータ アクセスと同時実行性に関する一般的なアドバイスの要求に似ているため、私の回答は、具体的な解決策というよりも、一般的なアドバイスとして形成されます。

優れた SAS オンライン ドキュメントがあります。indexにアクセスして、さらに読むために関連する情報を見つけてください。

  1. ACCESS=READONLY" " libname オプションを詳しく見てください。つまり、libname 内のデータ メンバーへのアクセスを読み取り専用に制限します。これには、非変更クエリ中に誤ってデータを変更しないという利点があります。また、SAS は、データを変更するクエリの余地を残して、データをより高度に制御できるようになります。
  2. SAS/SHARE は同時データ アクセスを可能にするため、同じデータへの同時アクセス (読み取り/書き込み) を提供する必要がある場合は、SAS/SHARE が適しています。これは、libname ステートメントにオプション " " を指定して、libname を 1 回割り当てるだけでSERVER=SHARELIB済み、SAS/SHARE が同時データ アクセスを管理できることを意味します。libname を SAS/SHARE サーバー プロセスに割り当てた場合、この libname へのアクセスを必要とする後続のすべての SAS プロセスは、次のように libname を割り当てるだけで済みます"LIBNAME LIB SERVER=SHARELIB"(物理パスがないことに注意してください - SAS/SHARE サーバー プロセスが処理します)。このセットアップは、SAS/SHARE サーバー用に別の SAS プロセスがある場合に最適に機能します。
  3. LOCK ステートメントまたは LOCK コマンドを使用して libname をロックすることもできます。これは、必要な場合に備えて、SAS プログラムが libname への排他的アクセス権を確保できることを意味します。その後、他の SAS プロセスは lock コマンドを使用して特定の libname を照会し、(排他的) アクセスを取得できるかどうかを確認できます。
  4. データ メンバー レベルでアクセスを制御することもできます。これは、CNTLLEV データ セット オプションで実行されます。たとえば、" DATA LIB.MYDATA(CNTLLEV=LIB);" は、アクセス制御がライブラリ レベルであることを指定し、同時アクセスをライブラリへの 1 つの更新プロセスのみに制限します。メンバー レベルとレコード レベルでそれぞれ同時アクセスを制限しますCNTLLEV=MEMCNTLLEV=REC

これらのオプションはさまざまな方法で組み合わせることができるため、必要に応じてきめ細かいアクセスを行うための余地がたくさんあります。これらの選択があなたの仕事を完了するのに役立つことを願っています.

于 2009-03-11T12:41:48.477 に答える