LOCKステートメントによる排他制御の実現

[OS]ALL
[リリース] 8.1, 8.2
[キーワード] LOCK STATEMENT

[質問]

SASデータセット、SASカタログに対して排他制御を行ない、他からの更新処理等を抑止させることができますか。

[回答]

SAS/SHAREのLOCKステートメント等を利用することにより実現できますが、SAS System 8eでは、Base SASでLOCKステートメントの機能を利用できるようになりました。
このLOCKステートメントを利用すれば、上記の処理形態を実現させることが可能になります。
ただし、SAS/SHAREで実装されているLOCKステートメントの全機 能が利用できるわけではありません。

LOCKステートメントで排他制御が設定されている間、他のセッションからは参照・更新の一切の処理ができなくなります。

■ LOCKステートメントの書式

特定のデータセットに対して排他制御を設定する LOCK libref.datasetname ;
特定のカタログに対して排他制御を設定する LOCK libref.catname.catalog ;
特定のデータセットへの排他制御を解除する LOCK libref.datasetname CLEAR ;
特定のカタログへの排他制御を解除する LOCK libref.catname.catalog CLEAR ;

■ 使用例

        /* saslibライブラリのsasdataデータセットへの排他制御を開始 */
   LOCK saslib.sasdata ;

                  /* 他のSASセッションより、下記のプログラムを実行 */
   LIBNAME saslib 'c:\sasdata\saslib' ;
   PROC PRINT DATA=saslib.sasdata ;
   RUN ;

■ 処理結果

  ERROR: A ロックを SASLIB.SASDATA.DATA に適用できません。 
       another process によって既にロックされています。

■ 注意事項

  • 排他制御の設定はデータセット単位、またはカタログ単位になります。
  • 排他制御の情報を出力する「LISTオプション」などは使用できません。
  • このLOCKステートメントは「シングルユーザーが、複数のセッション(複数のSAS)を使用した処理を行なう場合」を想定しています。複数のユーザーがそれぞれのSASセッションから同時にアクセスを行なう場合の排他制御は、SAS System 6までと同様、SAS/SHAREの排他制御機能をご利用ください。