Доступно с лицензией Standard или Advanced.
База данных использует индексы для быстрого нахождения строк, когда фильтр выполняет запрос к базе данных. .Большинство системных таблиц базы геоданных имеют индексы, но таблицы, которые, как правило, имеют наибольшее количество изменений в многопользовательской базе геоданных, использующей традиционное управление версиями и поэтому требующей перестроения индексов, чаще всего являются состояниями, state_lineages, и mv_tables_modified системные таблицы. Как администратор базы геоданных, вы можете перестроить индексы в этих таблицах баз геоданных в IBM Db2, Microsoft SQL Server, Oracle или PostgreSQL, используя инструмент геообработки Перестроить индексы.
В активно редактируемой версионной базе геоданных вы можете обновлять индексы в таблицах states, state_lineages и mv_tables_modified в ночное время. Для этого создайте автономный скрипт Python, вызывающий инструмент Перестроить индексы и планирующий его запуск с использованием Планировщика задач Windows или задания cron.
Использование инструмента Перестроить индексы
Чтобы перестроить индексы в системных таблицах базы геоданных states, state_lineages и mv_tables_modified с помощью инструмента Перестроить индексы, необходимо сделать следующее:
- Запустите клиент ArcGIS Desktop и подключитесь к базе геоданных в качестве администратора базы геоданных.
- Откройте инструмент геообработки Перестроить индексы.
Этот инструмент вы найдете в группе инструментов Администрирование баз геоданных набора Управление данными.
- Используйте подключение, созданное в шаге 1, в поле Входное подключение к базе данных.
- Отметьте опцию Включить системные таблицы.
- Снимите отметку Перестроить только таблицы различий.
- Нажмите OK.
Планировка запуска скрипта Python
Для запуска скрипта необходимо подключиться к базе геоданных с правами доступа администратора базы геоданных. Существует два способа: создать файл подключения (.sde) и указать этот файл в скрипте, или непосредственно в скрипте ввести инструкцию для подключения. Далее установите расписание для запуска скрипта с помощью Назначенных заданий Windows или Linux cron daemon.
- Скопируйте один из следующих скриптов на компьютер, где установлены Python и один из следующих продуктов ArcGIS:
- ArcGIS Pro (Desktop Standard или Desktop Advanced)
- ArcGIS Desktop (Desktop Standard или Desktop Advanced)
- ArcGIS Engine с дополнительным модулем Geodatabase Update
- ArcGIS Server
Измените скрипты, внеся в них информацию о вашем сайте.
В приведенном образце скрипта содержится информация, необходимая для подключения к базе данных Oracle для обновления индексов системных таблиц states, state_lineages и 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")
В приведенном образце скрипта содержатся инструкции для подключения авторизованного dbo-пользователя операционной системы к SQL Server и обновления индексов системных таблиц sde_states, sde_state_lineages и 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")
В следующем примере sde-пользователь подключается к базе 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")
В следующем примере sde-пользователь подключается к базе 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")
- После занесения в скрипт информации о подключении, запланируйте запуск скрипта в определенный час в ночное время.
- В Windows откройте утилиту Назначенные задания из Панели управления и используйте мастер для добавления запланированного задания. На запрос указать программу, которую нужно запускать, укажите свой скрипт Python.
- В Linux создайте текстовый файл cron, в котором указывается день и время, в которые необходимо запускать скрипт и загрузите файл в cron с помощью программы crontab.
Например, для запуска скрипта Python (с именем rsysidxdb2.py) каждую среду в 22:00 необходимо ввести следующую информацию.:
0 22 * * 3 /usr/bin/rsysidxdb2.py
Для получения сведений по использованию cron, см. справочные страницы Linux, поставляемые вместе с операционной системой.