Skip To Content

Neuerstellen von Systemtabellen-Indizes

Mit der Standard- oder Advanced-Lizenz verfügbar.

Die Datenbank verwendet Indizes, um Zeilen schnell zu identifizieren, wenn ein Client die Datenbank abfragt. Die meisten Geodatabase-Systemtabellen haben Indizes. Die Tabellen, die tendenziell die größte Menge an Änderungen in einer Enterprise-Geodatabase mit traditioneller Versionierung aufweisen und daher die häufigste Neuerstellung der Indizes erfordern, sind jedoch die Systemtabellen "states", "state_lineages" und "mv_tables_modified". Als Geodatabase-Administrator können Sie die Indizes in diesen Tabellen in IBM Db2, Microsoft SQL Server, Oracle oder PostgreSQL mit dem Geoverarbeitungswerkzeug Indizes neu erstellen erneut erstellen.

In einer stark bearbeiteten Geodatabase mit traditioneller Versionierung können Sie jede Nacht die Indizes in den Tabellen "states", "state_lineages" und "mv_tables_modified" aktualisieren. Hierzu erstellen Sie ein eigenständiges Python-Skript, das das Werkzeug Indizes neu erstellen aufruft und es so plant, dass es mit der Windows-Aufgabenplanung oder einem Cronjob ausgeführt wird.

Verwenden des Werkzeugs "Indizes neu erstellen"

Gehen Sie wie folgt vor, um Indizes in den Geodatabase-Systemtabellen "states", "state_lineages" und "mv_tables_modified" mit dem Werkzeug Indizes neu erstellen neu zu erstellen.

  1. Starten Sie ArcGIS Pro, und stellen Sie als Geodatabase-Administrator eine Verbindung mit der Geodatabase her.
  2. Öffnen Sie das Geoverarbeitungswerkzeug Indizes neu erstellen.

    Dieses Werkzeug befindet sich im Toolset "Geodatabase-Verwaltung" der Toolbox "Data Management".

  3. Verwenden Sie als Eingabe-Datenbankverbindung die Verbindung, die Sie in Schritt 1 erstellt haben.
  4. Aktivieren Sie das Kontrollkästchen Systemtabellen einbeziehen.
  5. Deaktivieren Sie das Kontrollkästchen Nur Delta-Tabellen neu erstellen.
  6. Klicken Sie auf Ausführen.

Planen eines Python-Skripts

Zur Ausführung des Skripts müssen Sie eine Verbindung zur Geodatabase als Geodatabase-Administrator herstellen können. Sie können entweder eine Verbindungsdatei (.sde) erstellen und vom Skript aus darauf verweisen oder die Verbindungsinformationen direkt in das Skript eingeben. Planen Sie danach das Skript so, dass es mit der Windows-Aufgabenplanung oder dem Linux-cron-Daemon ausgeführt wird.

  1. Kopieren Sie eines der folgenden Skripte auf einen Computer, auf dem Python und eines der folgenden ArcGIS-Produkte installiert sind:
    • ArcGIS Pro (Desktop Standard oder Desktop Advanced)
    • ArcGIS Desktop (Desktop Standard oder Desktop Advanced)
    • ArcGIS Engine mit der Erweiterung "Geodatabase Update"
    • ArcGIS Server

    Ändern Sie die Skripte, um Ihre standortspezifischen Informationen einzuschließen.

    Dieses Beispielskript enthält die notwendigen Informationen für eine Verbindung mit einer Oracle-Datenbank, um die Indizes in den Systemtabellen "states", "state_lineages" und "mv_tables_modified" zu aktualisieren:

    # Name: RSysIdxOracle.py
    # Description: Rebuilds indexes on the states, state_lineages,
    # and mv_tables_modified tables in an enterprise geodatabase
    # in Oracle.
    
    # Import system modules
    import sys
    import arcpy
    import os
    
    # Provide connection information
    platform = ORACLE
    instance = "myserver/orcl"
    account_authentication = OPERATING_SYSTEM_AUTH | DATABASE_AUTH
    #Leave username and password blank if using OPERATING_SYSTEM_AUTH
    username = gdb_admin
    password = gdb_admin_password
    
    
    # Set local variables
    if os.name.lower() == "nt":
       slashsyntax = "\\"
       if os.environ.get("TEMP") == None:
          temp = "c:\\temp"
       else:
          temp = os.environ.get("TEMP")
    else:
       slashsyntax = "/"
       if os.environ.get("TMP") == None:
          temp = "/usr/tmp"
       else:
          temp = os.environ.get("TMP")
    
    Connection_File_Name = temp + slashsyntax + "connection.sde"
    
    # Check for the .sde file and delete it if present
    if os.path.exists(Connection_File_Name):
       os.remove(Connection_File_Name)
    
    #Variable defined within the script; other variable options commented out at the end of the line
    saveUserInfo = "SAVE_USERNAME" #DO_NOT_SAVE_USERNAME
    
    print ("Creating Database Connection File...")
    # Create Database Connection File
    # Usage: out_folder_path, out_name, database_platform, instance, account_authentication, username, password, save_user_pass
    arcpy.CreateDatabaseConnectionFile_management(temp, "connection.sde", platform, instance, account_authentication, username, password, saveUserInfo)
    
    # Rebuild indexes on system tables
    arcpy.RebuildIndexes_management(Connection_File_Name, "SYSTEM", "", "ALL")
    print ("Rebuild Complete")

    Dieses Beispielskript enthält die Informationen für die Verwendung eines vom Betriebssystem authentifizierten dbo-Benutzers, um eine Verbindung mit SQL Server herzustellen und die Indizes in den Systemtabellen "sde_states", "sde_state_lineages" und "sde_mv_tables_modified" zu aktualisieren:

    # Name: RSysIdxSqlServer.py
    # Description: Rebuilds indexes on the sde_states, sde_state_lineages,
    # and sde_mv_tables_modified tables in an enterprise geodatabase
    # in SQL Server.
    
    # Import system modules
    import sys
    import arcpy
    import os
    
    # Provide connection information
    platform = SQL_SERVER
    instance = sqlserver_instance_name
    account_authentication = OPERATING_SYSTEM_AUTH
    database = database_name
    
    
    # Set local variables
    if os.name.lower() == "nt":
       slashsyntax = "\\"
       if os.environ.get("TEMP") == None:
          temp = "c:\\temp"
       else:
          temp = os.environ.get("TEMP")
    else:
       slashsyntax = "/"
       if os.environ.get("TMP") == None:
          temp = "/usr/tmp"
       else:
          temp = os.environ.get("TMP")
    
    Connection_File_Name = temp + slashsyntax + "connection.sde"
    
    # Check for the .sde file and delete it if present
    if os.path.exists(Connection_File_Name):
       os.remove(Connection_File_Name)
    
    print ("Creating Database Connection File...")
    # Create Database Connection File
    # Usage: out_folder_path, out_name, database_platform, instance, account_authentication, database
    arcpy.CreateDatabaseConnectionFile_management(temp, "connection.sde", platform, instance, account_authentication, database)
    
    # Rebuild indexes on system tables
    arcpy.RebuildIndexes_management(Connection_File_Name, "SYSTEM", "", "ALL")
    print ("Rebuild Complete")

    In diesem Beispiel stellt der sde-Benutzer eine Verbindung mit einer PostgreSQL-Datenbank her:

    # Name: RSysIdxpg.py
    # Description: Rebuilds indexes on the sde_states, sde_state_lineages,
    # and sde_mv_tables_modified tables in an enterprise geodatabase
    # in PostgreSQL.
    
    # Import system modules
    import sys
    import arcpy
    import os
    
    # Provide connection information
    platform = POSTGRESQL
    instance = pg_cluster
    account_authentication = DATABASE_AUTH
    username = gdb_admin
    password = gdb_admin_password
    database = database_name
    
    
    # Set local variables
    if os.name.lower() == "nt":
       slashsyntax = "\\"
       if os.environ.get("TEMP") == None:
          temp = "c:\\temp"
       else:
          temp = os.environ.get("TEMP")
    else:
       slashsyntax = "/"
       if os.environ.get("TMP") == None:
          temp = "/usr/tmp"
       else:
          temp = os.environ.get("TMP")
    
    Connection_File_Name = temp + slashsyntax + "connection.sde"
    
    # Check for the .sde file and delete it if present
    if os.path.exists(Connection_File_Name):
       os.remove(Connection_File_Name)
    
    #Variable defined within the script; other variable options commented out at the end of the line
    saveUserInfo = "SAVE_USERNAME" #DO_NOT_SAVE_USERNAME
    
    print ("Creating Database Connection File...")
    # Create Database Connection File
    # Usage: out_folder_path, out_name, database_platform, instance, account_authentication, username, password, save_user_pass, database
    arcpy.CreateDatabaseConnectionFile_management(temp, "connection.sde", platform, instance, account_authentication, username, password, saveUserInfo, database)
    
    # Rebuild indexes on system tables
    arcpy.RebuildIndexes_management(Connection_File_Name, "SYSTEM", "", "ALL")
    print ("Rebuild Complete")

    In diesem Beispiel stellt der sde-Benutzer eine Verbindung mit einer Db2-Datenbank her:

    # Name: RSysIdxDb2.py
    # Description: Rebuilds indexes on the states, state_lineages,
    # and mv_tables_modified tables in an enterprise geodatabase
    # in DB2.
    
    # Import system modules
    import sys
    import arcpy
    import os
    
    # Provide connection information
    platform = DB2
    instance = db2gdb
    account_authentication = OPERATING_SYSTEM_AUTH | DATABASE_AUTH
    #Leave username and password blank if using OPERATING_SYSTEM_AUTH
    username = sde
    password = gdb_admin_password
    
    
    # Set local variables
    if os.name.lower() == "nt":
       slashsyntax = "\\"
       if os.environ.get("TEMP") == None:
          temp = "c:\\temp"
       else:
          temp = os.environ.get("TEMP")
    else:
       slashsyntax = "/"
       if os.environ.get("TMP") == None:
          temp = "/usr/tmp"
       else:
          temp = os.environ.get("TMP")
    
    Connection_File_Name = temp + slashsyntax + "connection.sde"
    
    # Check for the .sde file and delete it if present
    if os.path.exists(Connection_File_Name):
       os.remove(Connection_File_Name)
    
    #Variable defined within the script; other variable options commented out at the end of the line
    saveUserInfo = "SAVE_USERNAME" #DO_NOT_SAVE_USERNAME
    
    print ("Creating Database Connection File...")
    # Create Database Connection File
    # Usage: out_folder_path, out_name, database_platform, instance, account_authentication, username, password, save_user_pass
    arcpy.CreateDatabaseConnectionFile_management(temp, "connection.sde", platform, instance, account_authentication, username, password, saveUserInfo)
    
    # Rebuild indexes on system tables
    arcpy.RebuildIndexes_management(Connection_File_Name, "SYSTEM", "", "ALL")
    print ("Rebuild Complete")
  2. Nachdem Sie das Skript geändert haben, um die Verbindungsinformationen einzuschließen, planen Sie das Skript so, dass es jede Nacht zu einem bestimmten Zeitpunkt ausgeführt wird. Öffnen Sie die Aufgabenplanung in der Systemsteuerung, und verwenden Sie den Assistenten, um eine geplante Aufgabe hinzuzufügen. Wenn Sie gefragt werden, welches Programm ausgeführt werden soll, navigieren Sie zum Python-Skript.