매일 밤 데이터베이스의 일부 기능을 업데이트하는 스크립트가 있습니다 (일부 기능을 복사하고 교체하기 위해). 이 기능은 “읽기 전용”입니다. 내 문제는 사용자가 이러한 기능을 여는 것을 피할 수 없으며 스크립트에 다음 오류가 표시 될 수 있다는 것입니다.
ExecuteError: ERROR 000464: Cannot get exclusive schema lock.
Either being edited or in use by another application.
일부 명령으로 파일을 복사하고 일부 사용자가 열어 놓은 상태에서 피톤 스크립트를 강제로 실행할 수 있습니까? 스크립트를 실행하기 전에 데이터베이스에서 모든 연결을 해제 할 수 있습니까?
답변
SDE와 협력하고 있다고 가정합니다.
sdemon
명령 행 도구를 사용하여 모든 연결을 종료해야합니다 .
답변
SDE를 사용한다고 말한 이후의 또 다른 가능성은 SQL, PL / SQL, T-SQL 등을 사용하여 layer_locks
및 table_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에 익숙하지 않지만이 게시물이 올바른 방향으로 이끌 수 있다고 생각합니다.