管理与 PostgreSQL 中地理数据库的连接

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

作为地理数据库管理员,可能偶尔需要识别哪些用户连接到了地理数据库以及哪些连接锁定了资源。 如果用户无法自行断开连接,则可能还需要移除某些连接。 例如,一位编辑者可能在编辑时使 ArcGIS Pro 处于打开状态,将数据锁定在编辑会话中,导致其他编辑者无法访问数据,数据所有者无法更改表的方案。 或者,您可能需要所有人断开连接,以便对数据库应用修补程序、恢复数据库或压缩地理数据库。

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

警告:

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

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

识别并移除 ArcGIS Pro 中的连接

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

  1. 启动 ArcGIS Pro
  2. 以 sde 用户身份连接到地理数据库
  3. 右键单击数据库连接,然后单击 管理 > 连接

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

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

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

  6. 关闭地理数据库管理 对话框。

使用 ArcPy 识别并移除连接

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

  1. 通过在 Python 窗口中运行 CreateDatabaseConnection_management 函数来创建数据库连接。 将用户名和密码随文件保存。

    在本例中,将在临时文件夹中创建连接文件 (pgdb.sde)。 以 sde 用户身份登录,连接到数据库集群 mydbc 上的地理数据库 pg1。

    import arcpy
    arcpy.CreateDatabaseConnection_management ("c:\\temp", "pgdb.sde", "POSTGRESQL", "mydbc", "DATABASE_AUTH", "sde", "mysdepwd", "SAVE_USERNAME", "pg1")

  2. 运行 ListUsers 函数以获取当前到 pg1 地理数据库的所有连接的列表。

    传递在上一步中创建的连接文件。

    ##No need to import arcpy if you are running functions in the same Python window.
    import arcpy
    
    arcpy.ListUsers("c:\\temp\pgdb.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'sde')]

  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\pgdb.sde",33)

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