gdb에서 잠금을 해제하는 방법은 무엇입니까?


11

ArcGIS10에서 gdb를 해제하는 데 문제가 있습니다. 내 도구는 로컬 gdb와 함께 작동하지만 프로세스 후에 해제하지 못했습니다. Ag9.3에서는 Marshal.ReleaseComObject (workspace)에 의해 간단하게 릴리스 할 수 있지만 AG10에서는 작동하지 않습니다. 또한 모든 FeatureCursors를 해제해도 도움이되지 않습니다. 전체 응용 프로그램을 닫으면 잠금이 "삭제"됩니다. 누구나 내 gdb를 해제하고 응용 프로그램을 닫지 않고 잠금을 "삭제"하는 방법을 알고 있습니까?


이 사이트에서 "파일 지오 데이터베이스 잠금"을 검색하면 도움이 될 수 있습니다.
채드 쿠퍼

물론 전에 사이트를 검색했습니다. 그러나 불행히도 어떤 제안도 나를 도와주지 못했습니다. Compact-GP를 사용해 보았지만 이것은 gdb를 잠금 해제하지 않았습니다. 또한 고아 잠금이 아닌 것 같습니다. 응용 프로그램을 닫기 전에 ArcCatalog에서 gdb를 편집 할 수 없습니다. 그러나 작업 공간을 릴리스하는 것 외에도 gdb를 잠금 해제하기 위해 어떤 객체를 해제해야합니까?
AnnemieK


1
에서 gis.stackexchange.com/questions/6230/... , 당신이 버그에 위배되는 사항이 나타납니다. 아래 답변 중 어느 것도 해당되지 않으면 Esri 기술 지원팀에 문의하십시오.
매트 윌키

답변:


2

잠깐 살펴보고 잠금 시나리오에 대한 정보를 찾았습니다. ArcObjects 10에는 SetWriteLock 및 FreeWriteLock 옵션이 있습니다.

포럼 링크에서 Esri http://forums.arcgis.com/threads/36881-the-performance-fgdb-api-amp-arcobjects의 Lance Shipman 샘플을 살펴보십시오.

CDB를 즐기십시오


SetWriteLock 및 FreeWriteLock은 ArcObject가 아니라 FileGeodatabase API (별도의 arcobject)에 있습니다. 이 라이브러리는 쓰기 / 릴리스 잠금을 수행 할 수 있지만이 라이브러리로 작성된 잠금 만 가능합니다. 파일 이름 패턴이 다릅니다 (컴퓨터 이름 등은 포함하지 않음).
mstaessen

2

이 조건에 도달하는 것은 쉽습니다. 필요한 것은 작업 공간을 유지하기 위해 필요한 작업에 대한 참조를 보유하고있는 객체입니다. 예를 들어 기능을 보유한 사용자 정의 개체처럼.

그런 참조가 없으면 GC.collect ()를 호출하여 가비지 수집기를 준 결정적 정리 모드로 설정하십시오.


2

응용 프로그램에서 커서를 사용하는 경우 ComReleaser를 사용하여 커서 수명을 관리하고 완료되면 커서를 폐기하십시오. 그렇지 않으면 DBMS를 잠글 수 있습니다. 나는 틀릴 수도 있지만 작업 공간에서만 ReleaseComObject를 호출하는 것은 커서에 대한 참조를 제거하지 않습니다. 이 ESRI 블로그 게시물을 살펴보십시오 ...

http://blogs.esri.com/Dev/blogs/geodatabase/archive/2008/12/18/Using-the-ComReleaser-to-manage-the-lifetime-of-cursors-in-.NET.aspx


0

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//003n0000007w000000 에서 아이디어를 찾았습니다 .

"지오 프로세싱 Compact 도구를 실행할 때마다이 .lock 파일이 제거됩니다"

string[] lockfiles = Directory.GetFiles(project.Path, "*.lock",   SearchOption.AllDirectories);

if(lockfiles.Length > 0)
{
int lockCt = 0;
while (lockCt < lockfiles.Length)
{
 string inFGDB = System.IO.Path.GetDirectoryName(lockfiles[lockCt]);

 ESRI.ArcGIS.DataManagementTools.Compact compactProcess = new   ESRI.ArcGIS.DataManagementTools.Compact();

 compactProcess.in_workspace = inFGDB;

 geoprocessor.Execute(compactProcess ,null);

  lockCt++;
}
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.