管理与 SQL Server 中企业级地理数据库的连接
在 Standard 或 Advanced 许可等级下可用。
作为地理数据库管理员,可能偶尔需要识别哪些用户连接到了地理数据库以及哪些连接锁定了资源。 如果用户无法自行断开连接,则可能还需要移除某些连接。 例如,一位编辑者可能在编辑时使 ArcGIS Pro 处于打开状态,将数据锁定在编辑会话中,导致其他编辑者无法访问数据,数据所有者无法更改表的方案。 或者,您可能需要所有人断开连接,以便对数据库应用修补程序、恢复数据库或压缩地理数据库。
您可通过 ArcGIS Pro 以数据库管理员的身份连接到地理数据库,以便查看连接并在必要时将其删除。 或者您可以使用 ArcPy 函数完成相同的工作流。
要从 Microsoft SQL Server 中的企业级地理数据库断开用户连接,地理数据库管理员可能需要附加权限。
sde 方案地理数据库 (sde) 中的地理数据库管理员需要对数据库具有
VIEW DEFINITION权限才能查看已连接用户的列表,并且必须是 processadmin 固定服务器角色的成员才能断开与用户的连接。如果 dbo 方案地理数据库的地理数据库管理员是数据库所有者,必须将地理数据库管理员添加到 processadmin 固定服务器角色才能断开用户连接。
如果地理数据库管理员是 sysadmin 固定服务器角色的成员,则 dbo 方案地理数据库的地理数据库管理员不需要任何附加权限。
注意:
在断开用户连接时请谨慎操作。 避免断开活动会话,特别是已连接用户正在进行编辑时。 只有处于打开状态但当前未使用的会话(例如,某个会话整个周末都处于打开状态)、正在锁定某个对象的孤立会话或者处于死锁情况的会话可以断开连接。
首先确定哪些用户连接到了地理数据库。 然后根据需要移除连接。
识别并移除 ArcGIS Pro 中的连接
您可以在 ArcGIS Pro 中以地理数据库管理员的身份连接至地理数据库,以通过地理数据库管理对话框查看连接。
启动 ArcGIS Pro。
以地理数据库管理员身份连接到地理数据库。
右键单击数据库连接,然后单击管理 > 连接。
将显示当前连接到地理数据库的所有会话的列表。 您的会话以斜体文本显示。
每个连接都通过用于连接的登录账户、内部 ID、连接类型、发起连接的计算机名称以及建立连接的时间来标识。
请联系各个用户并要求其关闭其对话。 如果您无法联系到用户且仍需要断开他们与地理数据库的连接,则可继续执行下一步骤。
右键单击要从地理数据库移除的指定会话,然后单击断开连接。
将立即从地理数据库中移除该会话。
关闭地理数据库管理 对话框。
使用 Python 识别并移除连接
您可以运行 ArcPy 函数,为地理数据库管理员用户创建地理数据库连接文件,使用该连接文件连接到地理数据库,然后获取当前所有地理数据库连接的列表,并根据需要从地理数据库移除连接。
通过在 Python 窗口中运行
CreateDatabaseConnection_management函数来创建数据库连接文件。在本例中,将在临时文件夹中创建连接文件 (
ssgdb.sde)。 此连接是通过 sa 身份登录对 sdept4 SQL Server 实例中的 gisprod 数据库建立的。import arcpy arcpy.management.CreateDatabaseConnection ("c:\\temp","ssgdb.sde","SQL_SERVER","sdept4","DATABASE_AUTH","sa","esayP@ss","SAVE_USERNAME","gisprod")运行
ListUsers函数以获取当前到 gisprod 地理数据库的所有连接的列表。提供在上一步中创建的连接文件。
##No need to import arcpy if you are running functions in the same Python window. import arcpy arcpy.ListUsers("c:\\temp\ssgdb.sde")将返回用户连接列表。
[user(ClientName=u'PC4', ConnectionTime=datetime.datetime(2018, 10, 18, 8, 30, 19), ID=18, IsDirecConnection=True, Name=u'PUBLISHER1')] [user(ClientName=u'PC25', ConnectionTime=datetime.datetime(2018, 10, 21, 14, 10, 43), ID=33, IsDirecConnection=True, Name=u'EDITOR2')] [user(ClientName=u'PC11', ConnectionTime=datetime.datetime(2018, 10, 22, 9, 18, 26), ID=39, IsDirecConnection=True, Name=u'READER5')] [user(ClientName=u'PCA2', ConnectionTime=datetime.datetime(2018, 10, 22, 11, 21, 2), ID=41, IsDirecConnection=True, Name=u'DBO')]请联系各个用户并要求其关闭其对话。 如果您无法联系到用户且仍需要断开他们与地理数据库的连接,则可继续执行下一步骤。
使用通过
ListUsers函数获取的信息来识别将使用DisconnectUser函数移除的连接。指定要移除的连接 ID。 在这里,ID 为 33 的连接被删除:
##No need to import arcpy if you are running functions in the same Python window. import arcpy arcpy.DisconnectUser("c:\\temp\ssgdb.sde",33)该会话将立即与地理数据库断开连接。