J'ai un script pour mettre à jour certaines fonctionnalités de ma base de données tous les soirs (juste pour copier et remplacer certaines fonctionnalités). Ces fonctionnalités sont en "lecture seule". Mon problème est que je ne peux pas éviter que ces fonctionnalités soient ouvertes par les utilisateurs, et mon script peut afficher l'erreur suivante:
ExecuteError: ERROR 000464: Cannot get exclusive schema lock.
Either being edited or in use by another application.
Puis-je forcer le script phyton, via une commande, en copiant les fichiers, même ouvert par un utilisateur? Puis-je supprimer toutes les connexions de ma base de données avant d'exécuter le script?
Réponses:
Je suppose que vous travaillez avec SDE.
Vous devez tuer toutes les connexions à l'aide de l'
sdemon
outil de ligne de commande.sdemon -o kill
localement pour supprimer toutes les connexions. Jetez un œil à cette rubrique d'aide . Je ne suis pas sûr que cela tue les connexions directes sur 10.0. Je me souviens que c'était une sorte de problème sur 9.3 et qu'il tuait définitivement les connexions directes sur 10.1.la source
sdemon -o kill
ne suffit pas. Vous devez passer des paramètres supplémentaires, jetez un œil au lien fourni .Une autre possibilité puisque vous avez dit que vous utilisez SDE est de supprimer les verrous partagés des tables
layer_locks
et entable_locks
utilisant SQL, PL / SQL, T-SQL, etc. Par exemple:Je ne recommanderais certainement pas cette approche sur une géodatabase versionnée. Voir aussi: Comment les différents mécanismes de verrouillage sont-ils implémentés dans ArcSDE et la géodatabase?
la source
Si la préférence est de supprimer des verrous utilisateur SDE spécifiques, il existe un moyen de le faire via arcpy . Je préfère cette approche car elle ne nécessite pas que vous sautiez sur le serveur de base de données pour exécuter une commande sde. Je peux déconnecter tous les verrous indésirables, puis effectuer des mises à jour de données en un seul script / processus.
L'exemple du lien ci-dessus est très utile:
la source
Je ne connais pas très bien postgresql mais je pense que ce post peut vous conduire dans la bonne direction:
/programming/5108876/kill-a-postgresql-session-connection
la source