Mam skrypt aktualizujący niektóre funkcje w mojej bazie danych każdej nocy (tylko do kopiowania i zastępowania niektórych funkcji). Te funkcje są „tylko do odczytu”. Mój problem polega na tym, że nie mogę uniknąć otwarcia tych funkcji przez użytkowników, a mój skrypt może wyświetlać następujący błąd:
ExecuteError: ERROR 000464: Cannot get exclusive schema lock.
Either being edited or in use by another application.
Czy mogę wymusić skrypt phyton, za pomocą jakiegoś polecenia, kopiując pliki, nawet otwarte przez jakiegoś użytkownika? Czy mogę usunąć wszystkie połączenia z mojej bazy danych przed uruchomieniem skryptu?
Odpowiedzi:
Przypuszczam, że pracujesz z SDE.
Powinieneś zabić wszystkie połączenia za pomocą
sdemon
narzędzia wiersza poleceń.sdemon -o kill
lokalnie, aby zabić wszystkie połączenia. Spójrz na ten temat pomocy . Nie jestem pewien, czy zabija bezpośrednie połączenia na 10.0. Pamiętam, że był to pewien problem na 9.3 i że zdecydowanie zabija bezpośrednie połączenia na 10.1.źródło
sdemon -o kill
to za mało. Powinieneś przekazać dodatkowe parametry, spójrz na podany link .Inną możliwością, ponieważ powiedziałeś, że używasz SDE, jest usunięcie współdzielonych blokad z tabel
layer_locks
itable_locks
za pomocą SQL, PL / SQL, T-SQL itp. Np .:Zdecydowanie nie poleciłbym tego podejścia w wersjonowanej geobazie. Zobacz także: W jaki sposób różne mechanizmy blokujące są implementowane w ArcSDE i geobazie?
źródło
Jeśli preferowane jest usunięcie określonych blokad użytkownika SDE, istnieje sposób, aby to zrobić za pomocą arcpy . Wolę to podejście, ponieważ nie wymaga ono przeskoczenia na serwer bazy danych w celu wykonania polecenia sde. Mogę odłączyć wszelkie niechciane blokady, a następnie wykonać aktualizacje danych w jednym skrypcie / procesie.
Przykład z powyższego linku jest bardzo przydatny:
źródło
Nie jestem zbyt obeznany z postgresql, ale myślę, że ten post może doprowadzić cię we właściwym kierunku:
/programming/5108876/kill-a-postgresql-session-connection
źródło