ArcPy에서 독점 스키마 잠금 오류를 피하십니까? 밤 데이터베이스의

매일 밤 데이터베이스의 일부 기능을 업데이트하는 스크립트가 있습니다 (일부 기능을 복사하고 교체하기 위해). 이 기능은 “읽기 전용”입니다. 내 문제는 사용자가 이러한 기능을 여는 것을 피할 수 없으며 스크립트에 다음 오류가 표시 될 수 있다는 것입니다.

ExecuteError: ERROR 000464: Cannot get exclusive schema lock.
              Either being edited or in use by another application.

일부 명령으로 파일을 복사하고 일부 사용자가 열어 놓은 상태에서 피톤 스크립트를 강제로 실행할 수 있습니까? 스크립트를 실행하기 전에 데이터베이스에서 모든 연결을 해제 할 수 있습니까?



답변

SDE와 협력하고 있다고 가정합니다.

sdemon명령 행 도구를 사용하여 모든 연결을 종료해야합니다 .

  1. 스크립트를 실행하는 PC에 ArcSDE가 설치되어 있으면 sdemon -o kill로컬로 실행 하여 모든 연결 을 종료 할 수 있습니다 . 이 도움말 항목을 살펴보십시오 . 10.0에서 직접 연결을 종료하는지 확실하지 않습니다. 나는 그것이 9.3에서 일종의 문제 였고 10.1에서 직접 연결을 죽이는 것을 기억합니다.
  2. ArcSDE가 설치되어 있지 않고 별도의 서버에서만 실행중인 경우 Python에서 원격으로이 명령을 실행할 수 있습니다. 이 주제에 대한 논의가 있습니다 .

답변

SDE를 사용한다고 말한 이후의 또 다른 가능성은 SQL, PL / SQL, T-SQL 등을 사용하여 layer_lockstable_locks테이블 에서 공유 잠금을 삭제하는 것입니다 . 예 :

DELETE FROM TABLE_LOCKS WHERE SDE_ID = :b1 AND REGISTRATION_ID = :b2

버전이 지정된 지오 데이터베이스에서는이 방법을 권장하지 않습니다. 참고 : ArcSDE와 지오 데이터베이스에서 다양한 잠금 메커니즘은 어떻게 구현됩니까?


답변

환경 설정이 특정 SDE 사용자 잠금을 제거하는 경우 arcpy를 통해이를 수행 할 수 있습니다. sde 명령을 수행하기 위해 데이터베이스 서버로 이동할 필요가 없기 때문에이 방법을 선호합니다. 원치 않는 잠금을 해제 한 다음 하나의 스크립트 / 프로세스로 데이터 업데이트를 모두 수행 할 수 있습니다.

위 링크의 예는 매우 유용합니다.

import arcpy

admin_workspace = "Database Connections/tenone@sde.sde"
arcpy.env.workspace = admin_workspace
user_name = "GDB"

# Look through the users in the connected user list and get the SDE ID.
# Use the SDE ID to disconnect the user that matches the username variable
users = arcpy.ListUsers() # The environment is set, no workspace is needed.
for item in users:
    if item.Name == user_name:
        arcpy.DisconnectUser(admin_workspace, item.ID)

답변

나는 postgresql에 익숙하지 않지만이 게시물이 올바른 방향으로 이끌 수 있다고 생각합니다.

/programming/5108876/kill-a-postgresql-session-connection