ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Справка
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Картографическая платформа вашей организации

ArcGIS Desktop

Полноценная профессиональная ГИС

ArcGIS Enterprise

ГИС предприятия

ArcGIS for Developers

Инструменты для встраивания приложений с местоположениями

ArcGIS Solutions

Бесплатные шаблоны карт и приложений для отрасли

ArcGIS Marketplace

Получение приложения и данных для вашей организации.

  • Документация
  • Поддержка
Esri
  • Войти
user
  • Мой профиль
  • Выход

ArcGIS Help

  • На главную
  • Начало работы
  • Карта
  • Анализ
  • Управление данными
  • Инструменты
  • Больше...

Операции по автоматическому согласованию и закреплению синхронизированных данных

  • Идентификация версий баз геоданных по имени сервиса
  • Пакетное согласование и фиксация изменений
  • Сжатие базы геоданных
  • Перестроение индексов и обновление статистики
  • Удаление версий, на которые не ссылается реплика
  • Пример полного кода

Администраторы баз геоданных ArcGIS могут использовать скрипты Python для автоматизации многих задач, которые обычно выполняются с использованием нескольких инструментов геообработки. В данном разделе описывается процесс, через который должен пройти администратор, чтобы запустить запланированное согласование версий в ночное время после того, как полевые работники синхронизируют изменения, внесенные в версионные данные.

Идентификация версий баз геоданных по имени сервиса

# Create a list of user names that will be used to find versions.
userList = ['???', '###']
# Get a list of versions for the service named '???' and '###' to pass into the ReconcileVersions tool.
versions = arcpy.da.ListVersions('//connectionLocation/admin.sde')
# Create an empty list that will be used to hold version names that we want to reconcile.
verReconcileList = []
# Loop through the versions list to look for versions with appropriate names.
# if these names are found append them to the verReconcileList.
for user in userList:
    for version in versions:
        if user.lower() in version.name.lower():
            verReconcileList.append(version.name)

Пакетное согласование и фиксация изменений

Чтобы согласовать и закрепить все версии в многопользовательской базе геоданных, можно использовать инструмент Согласовать версии. Этот инструмент предоставляет возможности для согласования всех версий в базе геоданных с целевой версией (ALL_VERSIONS) или только тех версий, которые блокируют сжатие целевой версии (BLOCKING_VERSIONS). Этот инструмент является средством для выполнения эффективного сжатия, так как он обеспечивает одновременное согласование и закрепление нескольких версий в надлежащем порядке. По завершении операций согласования и закрепления эти версии могут также быть удалены с помощью ключевого слова DELETE_VERSION. В этом примере инструмент запускается администратором базы геоданных. Подключение в качестве администратора дает возможность согласовать и закрепить все версии в базе геоданных, включая частные или защищенные версии других пользователей.

# Get a list of versions to pass into the ReconcileVersions tool. versionList = arcpy.ListVersions('//connectionLocation/admin.sde')
# Execute the ReconcileVersions tool.
arcpy.ReconcileVersions_management('//connectionLocation/admin.sde', "ALL_VERSIONS", "sde.DEFAULT", verReconcileList, "LOCK_ACQUIRED", "NO_ABORT", "BY_OBJECT", "FAVOR_TARGET_VERSION", "POST", "KEEP_VERSION", "c:/temp/reconcilelog.txt")

Сжатие базы геоданных

После согласования и закрепления изменений важно выполнить сжатие базы геоданных, чтобы удалить всю лишнюю информацию и переместить изменения в бизнес-таблицы.

# Run the compress tool. 
arcpy.Compress_management('//connectionLocation/admin.sde')

Перестроение индексов и обновление статистики

По завершении сжатия рекомендуется перестроить индексы и обновить статистику. Эти шаги можно выполнить с использованием инструментов Перестроить индексы и Анализировать наборы данных. Эти инструменты позволяют ввести список наборов данных и выполнить их функции для всех наборов данных одновременно. Эти инструменты, при запуске от имени администратора базы геоданных, также обновляют статистику и перестраивают индексы соответствующих системных таблиц. Первый этап этого процесса – получение списка данных и пользователей, которые ими владеют. Индексы и статистика могут быть обновлены только владельцем данных.

# set the workspace arcpy.env.workspace = '//connectionLocation/dataOwner.sde'
# Get the user name for the workspace
# this assumes you are using database authentication. # OS authentication connection files do not have a 'user' property. userName = arcpy.Describe(arcpy.env.workspace).connectionProperties.user
# Get a list of all the datasets the user has access to. # First, get all the stand-alone tables, feature classes and rasters owned by the current user. oDataList = arcpy.ListTables('*.' + userName + '.*') + arcpy.ListFeatureClasses('*.' + userName + '.*') + arcpy.ListRasters('*.' + userName + '.*')
# Next, for feature datasets owned by the current user
# get all of the featureclasses and add them to the master list. for dataset in arcpy.ListDatasets('*.' + userName + '.*'):
    oDataList += arcpy.ListFeatureClasses(feature_dataset=dataset)
Примечание:

Токены подстановочных знаков используются для выбора наборов данных, принадлежащих пользователям, и являются ОС-специфичными. Вышеуказанный пример ('*.' + userName + '.*') будет работать в SQL Server, PostgreSQL или DB2. В Oracle можно использовать следующие знаки: (userName + '.*'). В Informix можно использовать следующие знаки: ('*:' + userName + '.*') .

После того как определен список данных, которыми владеет пользователь, их можно обработать с использованием инструментов Перестроить индексы и Анализировать наборы данных.

Если у вас имеется несколько владельцев данных, необходимо построить список данных для каждого владельца и запустить инструменты Перестроить индексы и Анализировать наборы данных при подключении от имени каждого пользователя.

# Execute rebuild indexes and analyze datasets
# Note: to use the "SYSTEM" option, the user must be an administrator.
workspace = "//connectionLocation/user1.sde"
arcpy.RebuildIndexes_management(workspace, "NO_SYSTEM", oDataList, "ALL")
arcpy.AnalyzeDatasets_management(workspace, "NO_SYSTEM", oDataList, "ANALYZE_BASE", "ANALYZE_DELTA", "ANALYZE_ARCHIVE")

Удаление версий, на которые не ссылается реплика

# set the workspace workspace = '//connectionLocation/admin.sde'
# Get a list of all the replica versions in the geodatabase replicaVersions = [replica.version for replica in arcpy.da.ListReplicas(workspace)]
# Loop through this replica version list and remove these version names from the list of versions we reconciled earlier. # We want to remove versions from this list that are still being referenced by a replica for replicaVer in replicaVersions:
  if replicaVer in verReconcileList:
    verReconcileList.remove(replicaVer)
# Loop through the verReconcileList and delete versions. 
# These versions are no longer being referenced by a replica so we can assume it's safe to delete them. if len(versionsList) > 0:
  for version in verReconcileList:
  		arcpy.DeleteVersion_management(workspace, version)

Пример полного кода

В примере кода, приведенном ниже, объединены все описанные выше действия для выполнения следующих операций:

  • Идентификация версий баз геоданных
  • Согласование и фиксация изменений.
  • Выполните сжатие базы геоданных.
  • Перестроение индексов и обновление статистики системных таблиц.
  • Перестроение индексов и обновление статистики в таблицах пользователей
import arcpy, time, smtplib

# Set the workspace 
arcpy.env.workspace = '//connectionLocation/admin.sde'

# Set a variable for the workspace
workspace = arcpy.env.workspace

# Create a list of user names that will be used to find versions.
userList = ['???', '###']

# Get a list of versions for the service named '???' and '###' to pass into the ReconcileVersions tool.
versions = arcpy.da.ListVersions('//connectionLocation/admin.sde')

# Create an empty list that will be used to hold version names that we want to reconcile.
verReconcileList = []

# Loop through the versions list to look for versions with appropriate names.
# if these names are found append them to the verReconcileList.
for user in userList:
    for version in versions:
        if user.lower() in version.name.lower():
            verReconcileList.append(version.name)

# Execute the ReconcileVersions tool.
arcpy.ReconcileVersions_management('//connectionLocation/admin.sde', "ALL_VERSIONS", "sde.DEFAULT", verReconcileList, "LOCK_ACQUIRED", "NO_ABORT", "BY_OBJECT", "FAVOR_TARGET_VERSION", "POST", "KEEP_VERSION", "c:/temp/reconcilelog.txt")

# Run the compress tool. 
arcpy.Compress_management('//connectionLocation/admin.sde')

# Rebuild indexes and analyze the states and states_lineages system tables
arcpy.RebuildIndexes_management(workspace, "SYSTEM", "", "ALL")

arcpy.AnalyzeDatasets_management(workspace, "SYSTEM", "", "ANALYZE_BASE", "ANALYZE_DELTA", "ANALYZE_ARCHIVE")


# Get a list of datasets owned by the data owner user (requires second connection file)

# Set the workspace 
arcpy.env.workspace = '//connectionLocation/dataOwner.sde'

# Set a variable for the workspace
workspace = arcpy.env.workspace

# Get the user name for the workspace
# this assumes you are using database authentication.
# OS authentication connection files do not have a 'user' property.
userName = arcpy.Describe(arcpy.env.workspace).connectionProperties.user

# Get a list of all the datasets the user has access to.
# First, get all the stand alone tables, feature classes and rasters owned by the current user.
oDataList = arcpy.ListTables('*.' + userName + '.*') + arcpy.ListFeatureClasses('*.' + userName + '.*') + arcpy.ListRasters('*.' + userName + '.*')

# Next, for feature datasets owned by the current user
# get all of the featureclasses and add them to the master list.
for dataset in arcpy.ListDatasets('*.' + userName + '.*'):
    oDataList += arcpy.ListFeatureClasses(feature_dataset=dataset)

# Rebuild indexes and analyze the data owner tables
arcpy.RebuildIndexes_management(workspace, "NO_SYSTEM", oDataList, "ALL")

arcpy.AnalyzeDatasets_management(workspace, "NO_SYSTEM", oDataList, "ANALYZE_BASE", "ANALYZE_DELTA", "ANALYZE_ARCHIVE")

# set the workspace back to the admin workspace
workspace = '//connectionLocation/admin.sde'

# Get a list of all the replica versions in the geodatabase
replicaVersions = [replica.version for replica in arcpy.da.ListReplicas(workspace)]

# Loop through this replica version list and remove these version names from the list of versions we reconciled earlier.
# We want to remove versions from this list that are still being referenced by a replica
for replicaVer in replicaVersions:
    if replicaVer in verReconcileList:
        verReconcileList.remove(replicaVer)

# Loop through the verReconcileList and delete versions that are no longer being referenced by a replica. 
# Since these versions are no longer being referenced by a replica we can assume it's safe to delete them.
if len(verReconcileList) > 0:     #check to see that the list is not empty
    for version in verReconcileList:
        arcpy.DeleteVersion_management(workspace, version)

ArcGIS Desktop

  • На главную
  • Документация
  • Поддержка

ArcGIS Platform

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Об Esri

  • О нас
  • Карьера
  • Блог Esri
  • Конференция пользователей
  • Саммит разработчиков
Esri
Расскажите нам, что вы думаете.
Copyright © 2019 Esri. | Конфиденциальность | Правовая информация