Disponible avec une licence Standard ou Advanced.
La base de données utilise des index pour identifier rapidement les lignes qui correspondent au filtre de prédicat d'une requête. La plupart des tables système de géodatabase possèdent des index, mais les tables qui ont tendance à avoir la plus grande quantité de modifications dans une géodatabase d'entreprise versionnée et, par conséquent, qui nécessitent la recréation la plus fréquente des index sont les tables système states, state_lineages et mv_tables_modified. En tant qu’administrateur de géodatabase, vous pouvez recréer les index sur ces tables dans IBM Db2, Microsoft SQL Server, Oracle ou PostgreSQL à l’aide de l’outil de géotraitement Recréer les index.
Dans une géodatabase (traditionnelle) versionnée, lourdement modifiée, vous pouvez mettre à jour, de nuit, les index sur les tables mv_tables_modified, state_lineages et states. Pour ce faire, créez un script Python autonome qui appelle l’outil Recréer les index et programmez-le pour l’exécuter avec les tâches planifiées de Windows ou un script planifié.
Utiliser l'outil Recréer les index
Pour recréer les index sur les tables système de géodatabase states, state_lineages et mv_tables_modified à l'aide de l'outil Recréer les index, procédez comme suit :
- Lancez un client ArcGIS Desktop et connectez-vous à la géodatabase en tant qu’administrateur de géodatabase.
- Ouvrez l'outil de géotraitement Recréer les index.
Cet outil se trouve dans le jeu d'outils Geodatabase Administration de la boîte à outils Gestion des données.
- Utilisez la connexion que vous avez créée à l'étape 1 comme Connexion à la géodatabase en entrée.
- Cochez la case Inclure les tables du système.
- Décochez la case Recréer les tables de deltas uniquement.
- Cliquez sur OK.
Planifier un script Python
Pour exécuter ce script, vous devez être en mesure de vous connecter à la géodatabase en tant qu'administrateur de géodatabase. Vous pouvez créer un fichier de connexion (.sde) et pointer dessus à partir du script, ou saisir directement les informations de connexion dans le script. Ensuite, planifiez l'exécution du script à l'aide des tâches planifiées de Windows ou du démon Linux cron.
- Copiez un des scripts suivants vers un ordinateur où Python et un des produits ArcGIS suivants sont installés :
- ArcGIS Desktop (Desktop Standard ou Desktop Advanced)
- ArcGIS Engine Avec l’extension Geodatabase Update
- ArcGIS Server
Modifiez les scripts avec les informations spécifiques à votre site.
Ce modèle de script contient les informations nécessaires pour se connecter à une base de données Oracle pour mettre à jour les index sur les tables système mv_tables_modified, state_lineages et states.
# 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")
Ce modèle de script contient les informations pour utiliser un utilisateur dbo authentifié par système d’exploitation à connecter à SQL Server et mettre à jour les index sur les tables système sde_states, sde_state_lineages et sde_mv_tables_modified :
# 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")
Dans cet exemple, l’utilisateur sde se connecte à une base de données PostgreSQL :
# 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")
Dans cet exemple, l’utilisateur sde se connecte à une base de données Db2 :
# 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")
- Après avoir modifié le script pour qu'il contienne vos informations de connexion, planifiez le script pour qu'il s'exécute à une heure spécifique chaque nuit.
- Sur Windows, ouvrez Tâches planifiées depuis le panneau de configuration et utilisez l’assistant pour ajouter une tâche planifiée. À l’invite du programme à exécuter, accédez à votre script Python.
- Sur Linux, créez un fichier texte de script qui contient les informations sur le jour et l’heure auxquels vous souhaitez exécuter le script, et chargez le fichier dans le script à l’aide du programme crontab.
Par exemple, les informations suivantes définissent le script Python (intitulé rsysidxdb2.py) afin qu’il s’exécute chaque mercredi à 22 h 00.:
0 22 * * 3 /usr/bin/rsysidxdb2.py
Reportez-vous aux pages Linux fournies avec votre installation Linux pour utiliser le script.