管理与 SQL Server 中企业级地理数据库的连接

在 Standard 或 Advanced 许可等级下可用。

作为地理数据库管理员,可能偶尔需要查看哪些用户连接到了地理数据库以及哪些连接锁定了资源。如果用户处于离开状态,则甚至可能还需要移除某些连接才能注销。例如,某位编辑者可能未关闭编辑会话,这将锁定编辑会话中的数据且使其他编辑者无法对其进行访问。如果建立到地理数据库的连接的数量受限,则可能需要断开某一位未能注销的用户的连接,以释放连接。或者您可能希望每一位用户均进行注销,以便对数据库应用修补程序、恢复数据库或压缩地理数据库。

您能够以地理数据库管理员的身份从 ArcGIS Pro 连接到地理数据库,以查看连接并在必要时将其删除。 或者您可以使用 ArcPy 函数完成相同的工作流。

警告:

在断开用户连接时请谨慎操作。Esri 建议您避免断开活动会话,特别是已连接用户正在进行编辑时。只有处于打开状态但当前未使用的会话(例如,某个会话整个周末都处于打开状态)、正在锁定某个对象的孤立会话或者处于死锁情况的会话可以断开连接。

要从 Microsoft SQL Server 中的企业级地理数据库断开用户连接,地理数据库管理员可能需要附加权限。

  • sde 方案地理数据库 (sde) 中的地理数据库管理员需要对数据库具有 VIEW DEFINITION 权限才能查看已连接用户的列表,并且必须是 processadmin 固定服务器角色的成员才能断开与用户的连接。
  • 如果 dbo 方案地理数据库的地理数据库管理员是数据库所有者,必须将地理数据库管理员添加到 processadmin 固定服务器角色才能断开用户连接。
如果地理数据库管理员是 sysadmin 固定服务器角色的成员,则 dbo 方案地理数据库的地理数据库管理员不需要任何附加权限。

首先确定哪些用户连接到了地理数据库。然后根据需要移除连接。

识别并移除 ArcGIS Pro 中的连接

您可以在 ArcGIS Pro 中以地理数据库管理员的身份连接至地理数据库,以通过地理数据库管理对话框查看连接。

  1. 启动 ArcGIS Pro.。
  2. 以地理数据库管理员身份连接到地理数据库
  3. 右键单击地理数据库连接,然后单击属性
  4. 单击连接,然后单击显示已连接用户

    将显示当前连接到地理数据库的所有会话的列表。您的会话以斜体文本显示。

  5. 请联系各个用户并要求其关闭其对话。如果您无法联系到用户且仍需要断开他们与地理数据库的连接,则可继续执行下一步骤。
  6. 右键单击要从地理数据库移除的指定会话,然后单击断开连接

    该会话将立即与地理数据库断开连接。

  7. 关闭地理数据库管理 对话框。
  8. 数据库属性对话框中,单击确定

使用 Python 识别并移除连接

您可以运行 Python 函数,为地理数据库管理员创建地理数据库连接文件,使用该连接文件连接到地理数据库,然后获取当前所有地理数据库连接的列表,并根据需要从地理数据库移除连接。

  1. 通过在 Python 窗口中运行 CreateDatabaseConnection_management 函数来创建数据库连接。

    在本例中,将在临时文件夹中创建连接文件 (ssgdb.sde)。此连接是通过 sa 身份登录对 sdept4 SQL Server 实例中的 gisprod 数据库建立的。

    import arcpy
    arcpy.CreateDatabaseConnection_management ("c:\\temp","ssgdb.sde","SQL_SERVER","sdept4","DATABASE_AUTH","sa","esayP@ss","SAVE_USERNAME","gisprod")

  2. 运行 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')]

  3. 请联系各个用户并要求其关闭其对话。如果您无法联系到用户且仍需要断开他们与地理数据库的连接,则可继续执行下一步骤。
  4. 使用通过 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)

    该会话将立即与地理数据库断开连接。