Ich habe ein Skript zum Aktualisieren einiger Funktionen in meiner Datenbank jeden Abend (nur zum Kopieren und Ersetzen einiger Funktionen). Diese Funktionen sind "schreibgeschützt". Mein Problem ist, dass ich nicht vermeiden kann, dass diese Funktionen von Benutzern geöffnet werden, und mein Skript den folgenden Fehler anzeigen kann:
ExecuteError: ERROR 000464: Cannot get exclusive schema lock.
Either being edited or in use by another application.
Kann ich das Phyton-Skript über einen Befehl erzwingen, indem ich die Dateien kopiere, die sogar von einem Benutzer geöffnet wurden? Kann ich alle Verbindungen in meiner Datenbank trennen, bevor ich das Skript ausführe?
Antworten:
Ich nehme an, Sie arbeiten mit SDE.
Sie sollten alle Verbindungen mit dem
sdemon
Befehlszeilentool beenden.sdemon -o kill
lokal ausführen , um alle Verbindungen zu beenden. Schauen Sie sich dieses Hilfethema an . Ich bin nicht sicher, ob es Direktverbindungen auf 10.0 beendet. Ich erinnere mich, dass es in 9.3 eine Art Problem war und dass es in 10.1 definitiv direkte Verbindungen beendet.quelle
sdemon -o kill
ist nicht genug. Sie sollten zusätzliche Parameter übergeben und sich den bereitgestellten Link ansehen .Eine andere Möglichkeit, da Sie angegeben haben, dass Sie SDE verwenden, besteht darin, gemeinsam genutzte Sperren mit SQL, PL / SQL, T-SQL usw. aus den Tabellen
layer_locks
und zu löschentable_locks
. Beispiel:Ich würde diesen Ansatz auf keinen Fall für eine versionierte Geodatabase empfehlen. Siehe auch: Wie sind die verschiedenen Sperrmechanismen in ArcSDE und der Geodatabase implementiert?
quelle
Wenn bestimmte SDE-Benutzersperren bevorzugt entfernt werden sollen, gibt es eine Möglichkeit, dies über arcpy zu tun . Ich bevorzuge diesen Ansatz, da Sie nicht auf den Datenbankserver springen müssen, um einen sde-Befehl auszuführen. Ich kann unerwünschte Sperren aufheben und dann Datenaktualisierungen in einem Skript / Prozess durchführen.
Beispiel aus dem obigen Link ist sehr nützlich:
quelle
Ich bin mit postgresql nicht sehr vertraut, aber ich denke, dieser Beitrag kann Sie in die richtige Richtung führen:
/programming/5108876/kill-a-postgresql-session-connection
quelle