Reconstruir índices de tablas del sistema

Disponible con una licencia Standard o Advanced.

La base de datos emplea índices para identificar rápidamente las filas cuando un cliente consulta la base de datos. La mayoría de tablas de sistema de geodatabase tienen índices, pero las tablas que tienden a tener la mayor cantidad de cambios en una geodatabase corporativa que utiliza el versionado tradicional y, por tanto, requieren que los índices se vuelvan a generar con más frecuencia, son las tablas del sistema states, state_lineages y mv_tables_modified. Como administrador de la geodatabase, puede reconstruir los índices de estas tablas en geodatabases de IBM Db2, Microsoft SQL Server, Oracle o PostgreSQL mediante el uso de la herramienta de geoprocesamiento Reconstruir índices.

En geodatabases con muchas ediciones que utilizan el versionado tradicional, puede actualizar los índices de las tablas state, state_lineages y mv_tables_modified durante la noche. Para ello, cree un script de Python independiente que utilice la herramienta Reconstruir índices y prográmelo para ejecutarlo mediante Tareas programadas de Windows o un trabajo cron.

Utilizar la herramienta Reconstruir índices

Para reconstruir los índices de las tablas del sistema de geodatabase state, state_lineages y mv_tables_modified con la herramienta Reconstruir índices, realice lo siguiente:

  1. Inicie ArcGIS Pro y conéctese a la geodatabase como administrador de la geodatabase.
  2. Abra la herramienta de geoprocesamiento Reconstruir índices.

    Esta herramienta se puede encontrar en el conjunto de herramientas Administración de geodatabase de la caja de herramientas Administración de datos.

  3. Use la conexión de la base de datos que creó en el paso 1 como Conexión de base de datos de entrada.
  4. Marque la casilla de verificación Incluir tablas del sistema.
  5. Desactive Reconstruir solo tablas delta.
  6. Haga clic en Ejecutar.

Programar un script de Python

Para ejecutar el script, debe habilitarlo para conectarse a la geodatabase como el administrador de la geodatabase. Puede crear un archivo de conexión (.sde) e indicarlo en el script o introducir la información de la conexión directamente en la script. A continuación, programe el script para ejecutarse mediante las Tareas programadas de Windows o el demonio cron de Linux.

  1. Copie uno de los siguientes scripts en un equipo en el que estén instalados Python y uno de los siguientes productos de ArcGIS:
    • ArcGIS Pro (Desktop Standard o Desktop Advanced)
    • ArcGIS Desktop (Desktop Standard o Desktop Advanced)
    • ArcGIS Engine con la extensión Geodatabase Update
    • ArcGIS Server

    Altere la secuencia de comando con información específica para su sitio.

    Este script de muestra contiene la información necesaria para conectarse a una base de datos de Oracle para actualizar los índices de los estados, state_lineages y tablas del sistema mv_tables_modified:

    # 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")

    Este script de muestra contiene información para utilizar un usuario dbo autenticado del sistema operativo para conectarse a SQL Server y actualizar los índices de las tablas del sistema sde_states, sde_state_lineages y 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")

    En este ejemplo, el usuario sde se conecta a una base de datos de 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")

    En este ejemplo, el usuario sde se conecta a una base de datos de 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")
  2. Después de que altere el script para que incluya la información de conexión, programe el script para que se ejecute a una hora específica cada noche. Abra Tareas programadas en el Panel de control y utilice el asistente para agregar una tarea programada. Cuando se le pregunte qué programa ejecutar, vaya a su script de Python.