Mit der Standard- oder Advanced-Lizenz verfügbar.
Die Datenbank verwendet Indizes, um Zeilen, die mit dem Prädikatfilter einer Abfrage übereinstimmen, schnell zu identifizieren. Die meisten der Geodatabase-Systemtabellen haben Indizes, aber die Tabellen, die tendenziell die größte Menge an Änderungen in einer versionierten Enterprise-Geodatabase aufweisen und die häufigste Neuerstellung der Indizes erfordern, sind die Status-, state_lineages- und mv_tables_modified-Systemtabellen. Als Geodatabase-Administrator können Sie die Indizes in diesen Tabellen in Geodatabases in IBM DB2-, Microsoft SQL Server-, Oracle- oder PostgreSQL mit dem Geoverarbeitungswerkzeug Indizes neu erstellen erneut erstellen.
In einer stark bearbeiteten versionierten Geodatabase könnten Sie jede Nacht die Indizes in den Status-, state_lineages- und mv_tables_modified-Tabellen 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 Status-, state_lineages- und mv_tables_modified-Geodatabase-Systemtabellen mit dem Werkzeug Indizes neu erstellen neu zu erstellen.
- Starten Sie ArcMap oder ArcCatalog, und stellen Sie eine Verbindung mit der ArcSDE-Geodatabase als Geodatabase-Administrator her.
- Öffnen Sie das Geoverarbeitungswerkzeug Indizes neu erstellen.
Dieses Werkzeug befindet sich im Toolset "Geodatabase-Verwaltung" der Toolbox "Data Management".
- Verwenden Sie die Verbindung, die Sie in Schritt 1 erstellt haben, als Eingabe-Workspace.
- Aktivieren Sie das Kontrollkästchen Systemtabellen einbeziehen.
- Klicken Sie auf OK, um das Werkzeug auszufü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 zeigen 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.
- Kopieren Sie eines der folgenden Skripte auf einen Computer, auf dem Python und einer der folgenden ArcGIS-Clients installiert sind:
- ArcGIS for Desktop (Standardoder Advanced)
- ArcGIS Engine mit der Erweiterung Geodatabase-Aktualisierung
- ArcGIS Runtime
- ArcGIS for Server (Standard oder Advanced)
Ä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 Status-, state_lineages- und mv_tables_modified-Systemtabellen zu aktualisieren:
# Name: RSysIdxOracle.py # Description: Rebuilds indexes on the states, state_lineages, # and mv_tables_modified tables in an enterprise geodatabase # in Oracle. # Author: Esri # Import system modules import sys import arcpy import os # Provide connection information database_platform = Oracle instance = Oracle_instance account_authentication = OPERATING_SYSTEM_AUTH | DATABASE_AUTH #Leave username and password blank if using OPERATING_SYSTEM_AUTH username = gdb_admin_user_name password = gdb_admin_password version = sde.DEFAULT # 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 saveVersionInfo = "SAVE_VERSION" #DO_NOT_SAVE_VERSION print "Creating database connection file..." # Usage: out_folder_path, out_name, database_platform, instance, account_authentication, username, password, saveUserInfo, version, saveVersionInfo arcpy.CreateDatabaseConnection_management(temp, "connection.sde", database_platform, instance, account_authentication, username, password, saveUserInfo, version, saveVersionInfo) # 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 zum SQL-Server herzustellen und die Indizes in den sde_states-, sde_state_lineages- und sde_mv_tables_modified-Systemtabellen 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. # Author: Esri # Import system modules import sys import arcpy import os # Provide connection information database_platform = SQL_Server instance = dbms_instance_name account_authentication = OPERATING_SYSTEM_AUTH | DATABASE_AUTH database = database_name #Leave username and password blank if using OPERATING_SYSTEM_AUTH username = gdb_admin_user_name password = gdb_admin_password version = sde.DEFAULT # 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 saveVersionInfo = "SAVE_VERSION" #DO_NOT_SAVE_VERSION print "Creating database connection file..." # Usage: out_folder_path, out_name, database_platform, instance, account_authentication, username, password, saveUserInfo, database, version, saveVersionInfo arcpy.CreateDatabaseConnection_management(temp, "connection.sde", instance, account_authentication, username, password, saveUserInfo, database, version, saveVersionInfo) # 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. # Author: Esri # Import system modules import sys import arcpy import os # Provide connection information database_platform = PostgreSQL instance = PostgreSQL_servername database = database_name account_authentication = DATABASE_AUTH username = gdb_admin_user_name password = gdb_admin_password version = sde.DEFAULT # 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 saveVersionInfo = "SAVE_VERSION" #DO_NOT_SAVE_VERSION print "Creating database connection file..." # Usage: out_folder_path, out_name, database_platform, instance, account_authentication, username, password, saveUserInfo, database, version, saveVersionInfo arcpy.CreateDatabaseConnection_management(temp, "connection.sde", instance, account_authentication, username, password, saveUserInfo, database, version, saveVersionInfo) # 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. # Author: Esri # Import system modules import sys import arcpy import os # Provide connection information database_platform = DB2 instance = odbc_dsn account_authentication = OPERATING_SYSTEM_AUTH | DATABASE_AUTH #Leave username and password blank if using OPERATING_SYSTEM_AUTH username = gdb_admin_user_name password = gdb_admin_password version = sde.DEFAULT # 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 saveVersionInfo = "SAVE_VERSION" #DO_NOT_SAVE_VERSION print "Creating database connection file..." # Usage: out_folder_path, out_name, database_platform, instance, account_authentication, username, password, saveUserInfo, version, saveVersionInfo arcpy.CreateDatabaseConnection_management(temp, "connection.sde", database_platform, instance, account_authentication, username, password, saveUserInfo, version, saveVersionInfo) # Rebuild indexes on system tables arcpy.RebuildIndexes_management(Connection_File_Name, "SYSTEM", "", "ALL") print 'Rebuild Complete'
- 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 unter Windows die Aufgabenplanung in der Systemsteuerung, und verwenden Sie den Assistenten, um einen geplanten Task hinzuzufügen. Wenn Sie gefragt werden, welches Programm ausgeführt werden soll, wechseln Sie zum Python-Skript.
- Erstellen Sie unter Linux eine cron-Textdatei, die Informationen zu Tag und Uhrzeit für die Ausführung des Skripts enthält, und laden Sie die Datei mit dem crontab-Programm in cron.
Die folgenden Informationen legen z. B. das Python-Skript (rsysidxdb2.py genannt) so fest, dass es jeden Mittwoch um 22:00 Uhr ausgeführt wird:
0 22 * * 3 /usr/bin/rsysidxdb2.py
Informationen zur Verwendung von cron finden Sie auf den Linux-man-Seiten zu Ihrer Linux-Installation.