Wie löse ich die Sperre einer GDB?

11

Ich habe Probleme, meine GDB in ArcGIS10 freizugeben. Mein Tool funktioniert mit einer lokalen GDB, aber ich konnte es nach dem Vorgang nicht freigeben. In Ag9.3 kann ich es einfach von Marshal.ReleaseComObject (Arbeitsbereich) veröffentlichen, aber dies funktioniert nicht in AG10. Auch das Freigeben aller FeatureCursors hilft nicht. Nur das Schließen der gesamten Anwendung "löscht" die Sperre. Weiß jemand, wie man meine GDB freigibt und die Sperre "löscht", ohne die Anwendung zu schließen?

AnnemieK
quelle
Durchsuchen Sie diese Site nach "File Geodatabase Lock". Einige davon könnten hilfreich sein.
Chad Cooper
Natürlich habe ich die Seite vorher durchsucht. Leider half mir keiner der Vorschläge. Ich habe den Compact-GP ausprobiert, aber dadurch wurde die GDB nicht freigeschaltet. Es schien auch keine verwaiste Sperre zu sein, da ich die GDB in ArcCatalog nicht bearbeiten kann, bevor ich meine Anwendung schließe. Aber welches Objekt muss ich freigeben, um meine GDB zu entsperren und zusätzlich den Arbeitsbereich freizugeben?
AnnemieK
1
Aus gis.stackexchange.com/questions/6230/… geht hervor , dass möglicherweise ein Fehler aufgetreten ist. Wenn keine der folgenden Antworten zutrifft, würde ich mich an den technischen Support von Esri wenden.
Matt Wilkie

Antworten:

2

Ich habe einen kurzen Blick darauf geworfen und Informationen zu dem Sperrszenario gefunden, das Sie anscheinend haben. In ArcObjects 10 gibt es die Optionen SetWriteLock und FreeWriteLock.

Schauen Sie sich den Forum-Link an, insbesondere das Beispiel von Lance Shipman von Esri http://forums.arcgis.com/threads/36881-the-performance-fgdb-api-amp-arcobjects

Viel Spaß, CDB

CDBrown
quelle
SetWriteLock und FreeWriteLock befinden sich nicht in ArcObjects, sondern in der FileGeodatabase-API (Separate of Arcobjects). Diese Bibliothek kann Sperren schreiben / freigeben, aber nur diejenigen, die mit dieser Bibliothek erstellt wurden. Das Dateinamenmuster ist unterschiedlich (enthält keinen Computernamen usw.).
Mstaessen
2

Es ist einfach, zu diesem Zustand zu gelangen. Sie benötigen lediglich ein Objekt, das einen Verweis auf etwas enthält, das den Arbeitsbereich benötigt, um am Leben zu bleiben. Wie ein benutzerdefiniertes Objekt, das beispielsweise ein Feature enthält.

Wenn Sie sicher sind, dass Sie keine solchen Referenzen haben, rufen Sie GC.collect () auf, um den Garbage Collector in einen quasi-deterministischen Bereinigungsmodus zu zwingen

Ragi Yaser Burhum
quelle
2

Wenn Sie in Ihrer Anwendung Cursor verwenden, stellen Sie sicher, dass Sie den ComReleaser verwenden, um die Lebensdauer der Cursor zu verwalten und sie zu zerstören, wenn Sie damit fertig sind. Andernfalls können sie Ihr DBMS sperren. Ich könnte mich irren, aber wenn ich ReleaseComObject nicht allein im Arbeitsbereich aufrufe, wird der Verweis auf die Cursor entfernt. Schauen Sie sich diesen ESRI-Blogbeitrag an ...

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

Jeff Berry
quelle
0

Gefundene Idee von http://help.arcgis.com/de/arcgisdesktop/10.0/help/index.html#//003n0000007w000000

"Diese .lock-Dateien werden entfernt, wenn Sie das Geoprocessing Compact-Tool ausführen."

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++;
}
}
Ajay
quelle