포스팅 목차
o LOCK 구문
1. 목 적
LOCK 구문은 기존에 존재하는 SAS 파일에 대한 배타적 잠금 상태를 부여하거나 해제한다. 다른 SAS 세션이 현재 사용 중인 파일을 잠금 수 없다. 일반적으로 다수의 사용자와 함께 사용하는 경우에 유용하다.
2. 문 법
LOCK libref<.member-name<.member-type | .entry-name.entry-type>> <LIST | QUERY | SHOW | CLEAR> ; |
1) libref
유효한 SAS 라이브러리 참조자를 지정한다.
Tip : | 단일 사용자 환경에서, 일반적으로 LOCK 구문을 실행하여 라이브러리를 배타적으로 잠금 상태로 변경할 필요는 없다. 다수의 사용자가 사용하는 SAS/SHARE 서버를 통하여 접근되는 라이브러리를 잠금 상태로 변경하기 위해서는 SAS/SHARE 사용자 도움말의 LOCK 구문을 참고하라. |
2) member-name
라이브러리 참조자와 연결된 SAS 라이브러리의 구성원에 대한 유효한 SAS 이름을 지정한다.
제한사항 : | SAS 파일은 잠금 상태로 변경되기 전에 생성되어야 한다. |
3) member-type
잠금 상태로 변경되는 SAS 파일의 형태를 지정한다. 유효한 값은 DATA, VIEW, CATALOG, MDDB 등이 사용될 수 있다. 기본값은 DATA이다.
4) entry-name
잠금 상태로 변경되는 카탈로그 엔트리의 이름을 지정한다.
Tip : | 단일 사용자 환경에서, 개별 카탈로그 엔트리를 잠금 상태로 변경하기 위하여 LOCK 구문을 실행하면, 전체 카탈로그가 잠금 상태로 변경된다. 일반적으로 단일 사용자 환경에서 카탈로그 엔트리를 잠금 상태로 변경하기 위하여 LOCK 구문을 실행 할 필요가 없다. 다수의 사용자가 사용하는 SAS/SHARE 서버를 통하여 접근되는 라이브러리의 카탈로그를 잠금 상태로 변경하기 위하여 SAS/SHARE 사용자 도움말의 LOCK 구문을 참고하라. |
5) entry-type
잠금 상태로 변경되는 카탈로그 엔트리의 유형을 지정한다.
Tip : | 단일 사용자 환경에서, 개별 카탈로그 엔트리를 잠금 상태로 변경하기 위하여 LOCK 구문을 실행하면, 전체 카탈로그가 잠금 상태로 변경된다. 일반적으로 단일 사용자 환경에서 카탈로그 엔트리를 잠금 상태로 변경하기 위하여 LOCK 구문을 실행 할 필요가 없다. 다수의 사용자가 사용하는 SAS/SHARE 서버를 통하여 접근되는 라이브러리의 카탈로그를 잠금 상태로 변경하기 위하여 SAS/SHARE 사용자 도움말의 LOCK 구문을 참고하라. |
6) LIST | QUERY | SHOW
지정된 SAS 파일에 대한 배타적 잠금 상태를 SAS 로그에 작성한다.
Tip : | 이 옵션은 클라이언트/서버 환경에서 더 많은 정보를 제공한다. 클라이언트/서버 환경에서 이 옵션을 사용하기 위하여 SAS/SHARE 사용자 도움말의 LOCK 구문을 참고하라. |
7) CLEAR
SAS 세션에서 LOCK 구문으로 잠겨진 SAS 파일의 잠금 상태를 해제한다.
3. 범 주
프로그램 제어
4. 상세 설명
일반 정보
LOCK 구문은 존재하는 SAS파일에 배타적 잠금을 지정하고 해제 할 수 있다. 배타적 잠금이 지정될 경우에 다른 SAS세션은 잠금 상태가 해제 될 때까지 파일을 읽거나 쓸 수 없다. XE "배타적 잠금:LOCK 구문"
배타적 잠금 상태를 해제하기 위하여 CLEAR 옵션을 사용하라. 추가적으로 데이터 세트를 삭제하기 위하여 DATASETS 프로시져의 DELETE 구문을 사용하는 경우에는 데이터 세트의 배타적 잠금 상태가 해제된다.
단일 사용자 환경에서 SAS 파일에 배타적 접근 상태를 지정하기
SAS 파일을 처리하기 위하여 SAS 구문 또는 프로시져를 실행하는 경우에 파일은 입력, 업데이트, 출력물 처리 등을 위하여 열림 상태로 변경된다. 그리고, 파일은 스텝의 끝에서 닫힘 상태로 변경된다. 다중 임무를 처리하는 프로그램에서, 파일은 여러 번 열리고 닫힌다. 단일 사용자 환경에서 다중 SAS 세션이 동일 SAS 파일에 접근 할 수 있기 때문에, 여러 단계의 프로그램에서 파일을 업데이트하기 위하여 LOCK 구문을 실행하여 파일에 배타적 잠금 상태를 부여함으로 데이터를 보호한다.
예를 들어, 더 이상 필요 없는 관측치 제거 작업, 파일을 정렬하기 위하여 SORT프로시져 작업 및 파일의 인덱스를 리빌드를 위한 DATASETS 프로시져 작업 등으로 구성된 프로세스에 대하여 야간 업데이트 작업을 계획 중 이다. 작업 중에 다른 SAS 세션이 파일 접근을 시도하여 파일에 접근하기 위한 멤버 레벨 잠금(배타적) 상태를 요구하기 때문에 SORT와 DATASETS 프로시져 작업은 실패할 것이다.
데이터 스텝 전에 LOCK 구문을 실행하여 파일에 대한 배타적 접근 상태를 부여하여서 필요한 보호 상태를 유지한다. 파일에 LOCK 구문이 적용되면, 데이터 스텝 실행 중에 파일에 접근하려고 시도하는 다른 SAS 세션은 접근이 거부되고, 야간 업데이트 작업은 에러 없이 완료 될 것이다.
LOCK 구문에 대한 처리 코드 반환
SAS매크로 변수 SYSLCKRC는 LOCK 구문에서 산출되는 반환 코드를 포함한다. 아래의 상태는 SYSLKRC에 nonzero 값을 결과로 반환한다.
- 파일을 잠금 상태로 변경하기 위하여 시도하지만 잠금 상태로 변경 할 수 없다.
(예를 들어, 파일이 사용 중이거나 또는 다른 세션에 의해 잠겼을 때)
- 잠금 상태를 출력하기 위하여 LOCK 구문과 LIST 옵션을 함께 사용.
- 소유하고 있지 않은 잠금 상태를 해제하기 위하여 LOCK 구문과 CLEAR옵션을 함께 사용
5. 비교 사항
- SAS/SHARE 소프트웨어에서 LOCK 구문을 사용 할 수 있다. 일부 LOCK 구문은 기능적으로 client/server 환경에서만 적용된다.
- CNTLLEV= 데이터 세트 옵션은 SAS 데이터 세트에 공유 업데이트 접근의 수준을 지정한다.
6. 참고 옵션
- CNTLLEV= 데이터 세트 옵션
7. 예 제
예제 : SAS 파일 잠금
다음 SAS프로그램은 SAS데이터 세트 잠금 프로세스를 설명한다. LOCK 구문의 사용으로 파일에 배타적 접근 상태를 부여하여서 여러 단계 프로그램에서 파일을 보호 할 수 있다.
데이터 스텝 실행 중에 파일 접근을 시도하는 다른 SAS 세션의 접근을 거부하여서 프로그램이 문제없이 실행 될 것이다.
SAS Program |
libname mydata 'SAS-library'; lock mydata.census; 1 data mydata.census; 2 modify mydata.census; (불필요한 관측치 삭제 구문) run; proc sort force data=mydata.census; 3 by CrimeRate; run; proc datasets library=mydata; 4 modify census; index create CrimeRate; quit; lock mydata.census clear; 5 |
1. SAS 데이터 세트 MYDATA.CENSUS에 배타적 접근 상태를 부여한다.
2. 더 이상 필요 없는 관측치를 제거하기 위하여 MYDATA.CENSUS를 연다. 데이터 스텝 끝에서 파일을 닫는다. 그러나, 배타적 잠금 상태이므로 파일에 접근을 시도하는 다른 세션은 접근이 거부된다.
3. 파일을 정렬하기 위하여 MYDATA.CENSUS를 연다. 프로시져의 끝에서 파일은 닫히지만, 다른 세션은 계속 접근하지 못한다.
4. 파일의 인덱스를 rebuild하기 위하여 MYDATA.CENSUS를 연다. 프로시져의 끝에서 파일은 닫히지만 여전히 다른 SAS 세션은 접근 할 수 없다.
5. MYDATA.CENSUS에서 배타적 접근을 해제한다. 이제부터 다른 세션이 데이터 세트를 사용 할 수 있다.
[SAS Statement] SAS 데이터 스텝 구문 사전 목록] |
SAS 함수(SAS Function) 리스트 링크 |
'SAS > SAS 구문사전' 카테고리의 다른 글
【SAS Statement】 MERGE 구문 (0) | 2022.02.03 |
---|---|
[SAS Statement] LOSTCARD 구문 (0) | 2022.02.03 |
【SAS Statement】 LIST 구문 (0) | 2022.02.03 |
【SAS Statement】 LINK 구문 (0) | 2022.02.02 |
【SAS Statement】 LIBNAME 구문 (0) | 2022.02.02 |
댓글