Как убрать из базы SDE/SQL Server артефактные прямые подключения?

0 голосов
спросил 13 Янв, 20 от stepanosokin (120 баллов) в категории Программные продукты Esri
редактировать 13 Янв, 20 от stepanosokin
Здравствуйте!

ArcGIS Desktop 10.2 + ArcSDE 10.2 + MS SQL Server 2012 SP4

Имеется проблема с прямыми подключениями - не могу убить прямое подключение, имеющееся в таблице sde_process_information.

В ArcMap подключаюсь к базе SDE как DBO (в базе используется системная схема DBO). В окне Geodatabase Administration для данной базы во вкладке Connections имеется подключение. Я хочу его убить, для чего кликаю по нему правой кнопкой и выбираю Disconnect. После отрабатывания задачи ничего не изменяется - подключение остается в списке.

Команда sdemon -o kill -t <sde_id> -i sde:sqlserver:<host> -D <db_name> -N также отрабатывает, но ничего не изменяется. Подключение остается как в окне Geodatabase Administration, так и в списке-результате выполнения команды sdemon -o info -I users -i sde:sqlserver:<host> -D <db_name>.

Лезу в базу в таблицу sde_process_information. Там это подключение естественно также есть, у него имеется sde_id, spid и server_id. Лезу в таблицу sys.sysprocesses. А вот там подключения с таким spid уже нет. При этом пользователь, от имени которого это подключение создано, все приложения закрыл и ничего не делает.

То есть резюме: прямое подключение прописано в sde_process_information, но отсутствует в sys.sysprocesses. Команда sdemon его убить также не может.

Вопрос - как избавиться от такого артефактного подключения?

А избавиться от него необходимо, т.к. такие подключения накапливаются, и в какой-то момент превышается лимит подключений, установленный в sde_server_config.CONNECTIONS. Лимит, конечно, можно увеличить (как я и сделал временно), но это не выход.

Раз в неделю в пятницу ночью у меня выполняются команды:
SQLCMD -S <host> -E -Q "BACKUP DATABASE <db_name> TO DISK = <path> WITH INIT, NOFORMAT, SKIP, NOUNLOAD"
sdemon -o kill -t all -i sde:sqlserver:dbs1604 -s <host> -D <db_name> -N
sdeversion -o compress -i sde:sqlserver:dbs1604 -s <host> -D <db_name> -N
Не знаю, может ли это как-то повлиять на данную ситуацию.

Заранее спасибо!

1 Ответ

0 голосов
ответил 13 Янв, 20 от Grigoriy (127,020 баллов)

Подключаться к базе нужно прямым подключением, от пользователя с ролями sysadmin и dbowner.

Ну или "sa". Тогда Вы сможете "убивать" другие коннекты из ArcCatalog или с помощью python.

Команда "sdemon -o kill" не убивает прямые подключения. Она убивает процессы службы sde.

https://community.esri.com/docs/DOC-2551

https://community.esri.com/thread/72836

https://desktop.arcgis.com/en/arcmap/latest/manage-data/gdbs-in-sql-server/privileges-sqlserver.htm#LI_229C9382975F492D84D4DF4D6C4F7D4C

оставил комментарий 13 Янв, 20 от stepanosokin (120 баллов)
Спасибо за ответ!
Видимо, что-то с правами в SQL Server. Моя учетная запись имеет роли sysadmin и dbowner, но Python почему-то выдает следующее:
RuntimeError: Connection information provided was for a non-administrative user
оставил комментарий 13 Янв, 20 от stepanosokin (120 баллов)
Пользователем sa получилось без ошибки прогнать Python-скрипт
arcpy.DisconnectUser("Database Connections/<connection>.sde", "ALL")
Также получилось моим доменным пользователем, после того, как я ему выдал роли dbowner в базах master, model, msdb и tempdb.
Однако, в списке подключений все равно остались все старые коннекты.
оставил комментарий 13 Янв, 20 от Grigoriy (127,020 баллов)
Если на закладке "Locks" нет текущих блокировок, попробуй остановить полностью MS SQL и после старта просто "очистить" таблицу средствами sql. А потом проверь заново с "новыми" коннектами. Возможно он просто не находит логинов с такими именами и потому не удаляет из таблицы.
оставил комментарий 13 Янв, 20 от Grigoriy (127,020 баллов)
https://desktop.arcgis.com/en/arcmap/latest/manage-data/gdbs-in-sql-server/manage-connections-sqlserver.htm
Run the ListUsers function to get a list of all current connections to the gisprod geodatabase
оставил комментарий 30 Янв, 20 от stepanosokin (120 баллов)
Григорий, спасибо тебе большое! Удаление всех строк из таблицы sde_process_information решило проблему! Теперь задача - понять, откуда там взялось столько лишних строк?
Может быть, это из-за моих еженедельных команд?

sdemon -o kill -t all -i sde:sqlserver:<host>-s <host> -D <db_name> -N
sdeversion -o compress -i sde:sqlserver:<host> -s <host> -D <db_name> -N

Стоит ли в них внести какие-то исправления?
Заранее спасибо!
оставил комментарий 30 Янв, 20 от Grigoriy (127,020 баллов)
Степан, команда:
sdemon -o kill -t all
бесполезна, если Вы работаете с "прямым" подключением к СУБД.
Удалять подключения, блокирующие схему базы имеет смысл, если необходимо внести изменения в схему.
Удалять их можно через ArcCatalog или средствами СУБД.
Компрессия должна выполняться и при подключенных пользователях.
Ну и её лучше уже выполнять инструментами ArcToolBox или Python.
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...