ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Hilfe
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Die Mapping-Plattform für Ihre Organisation

ArcGIS Desktop

Ein vollständiges professionelles GIS

ArcGIS Enterprise

GIS in Ihrem Unternehmen

ArcGIS Developers

Werkzeuge zum Erstellen standortbezogener Apps

ArcGIS Solutions

Kostenlose Karten- und App-Vorlagen für Ihre Branche

ArcGIS Marketplace

Rufen Sie Apps und Daten für Ihre Organisation ab.

  • Dokumentation
  • Support
Esri
  • Anmelden
user
  • Eigenes Profil
  • Abmelden

ArcMap

  • Startseite
  • Erste Schritte
  • Karte
  • Analysieren
  • Verwalten von Daten
  • Werkzeuge
  • Erweiterungen

Automatisieren von Abgleich- und Zurückschreibevorgängen für Daten mit aktivierter Synchronisierung

  • Identifizieren von Geodatabase-Versionen anhand von Service-Namen
  • Batch-Abgleich von Versionen und Zurückschreiben von Änderungen
  • Komprimieren der Geodatabase
  • Erneutes Erstellen von Indizes und Aktualisieren der Statistik
  • Replikate verweisen nicht länger auf gelöschte Versionen.
  • Vollständiger Code – Beispiel

ArcGIS-Geodatabase-Administratoren können viele Tasks, die normalerweise mit verschiedenen Geoverarbeitungswerkzeugen durchgeführt werden, mithilfe der Python-Skripterstellung automatisieren. In diesem Thema wird das mögliche Vorgehen des Administrators bei einem geplanten nächtlichen Abgleich von Versionen erläutert, nachdem Außendienstmitarbeiter ihre Änderungen an versionierten Daten synchronisiert haben.

Identifizieren von Geodatabase-Versionen anhand von Service-Namen

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

Batch-Abgleich von Versionen und Zurückschreiben von Änderungen

Das Werkzeug Version abgleichen kann verwendet werden, um alle Versionen in einer Enterprise-Geodatabase abzugleichen und zurückzuschreiben. Dieses Werkzeug stellt Optionen bereit, um alle Versionen in der Geodatabase mit einer Zielversion (ALL_VERSIONS) abzugleichen. Es können aber auch nur die Versionen abgeglichen werden, die die Komprimierung der Zielversion verhindern (BLOCKING_VERSIONS). Dieses Werkzeug ist ein Mittel, um eine effektive Komprimierung zu erreichen, da es das gleichzeitige Abgleichen und sofortige Zurückschreiben mehrerer Versionen in entsprechender Reihenfolge ermöglicht. Die Versionen können auch mithilfe der Abgleich- oder Zurückschreiben-Vorgänge unter Angabe des Schlüsselworts DELETE_VERSION gelöscht werden. In diesem Beispiel wird das Werkzeug als Geodatabase-Administrators ausgeführt. Indem eine Verbindung als Geodatabase-Administrator hergestellt wird, können alle Versionen in der Geodatabase – selbst private oder geschützte Versionen anderer Benutzer – abgeglichen und zurückgeschrieben werden.

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

Komprimieren der Geodatabase

Nach dem Abgleichen und Zurückschreiben der Änderungen ist es wichtig, die Geodatabase zu komprimieren, um überflüssige Informationen zu entfernen und die Änderungen in die Business-Tabellen zu verschieben.

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

Erneutes Erstellen von Indizes und Aktualisieren der Statistik

Nach dem Durchführen eines Komprimierungsvorgangs empfiehlt es sich, die Indizes neu zu erstellen und die Statistiken zu aktualisieren. Diese Schritte können mit den Werkzeugen Indizes neu erstellen und Datasets analysieren durchgeführt werden. Diese Werkzeuge ermöglichen die Eingabe einer Liste mit Eingabe-Datasets und das gleichzeitige Durchführen ihrer Funktionen bei allen Datasets. Mit diesen Werkzeugen werden außerdem Statistiken aktualisiert und Indizes für entsprechende Systemtabellen neu erstellt, wenn sie als Geodatabase-Administrator ausgeführt werden. Im ersten Schritt dieses Prozesses wird eine Liste mit den Daten und den Benutzern, denen die Daten gehören, abgerufen. Indizes und Statistiken können nur vom Datenbesitzer aktualisiert werden.

# 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)
Hinweis:

Die verwendeten Platzhaltertoken zur Einschränkung der Datasets der Datenbesitzer variieren je nach Betriebssystem. In dem oben aufgeführten Beispiel kann ('*.'+ userName + '.*') für SQL Server, PostgreSQL oder DB2 verwendet werden. Für Oracle kann der folgende Platzhalter verwendet werden: (userName + '.*'). Für Informix kann der folgende Platzhalter verwendet werden: ('*:' + userName + '.*').

Sobald die Liste der Daten abgerufen wurde, deren Besitzer der Benutzer ist, kann diese an die Werkzeuge Indizes neu erstellen und Datasets analysieren übergeben werden.

Bei mehreren Datenbesitzern muss eine Datenliste für jeden Datenbesitzer generiert werden, wobei die Werkzeuge Indizes neu erstellen und Datasets analysieren während der Verbindung als die einzelnen Benutzer ausgeführt werden.

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

Replikate verweisen nicht länger auf gelöschte Versionen.

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

Vollständiger Code – Beispiel

Im folgenden Beispiel werden alle oben angesprochenen Schritte zusammengeführt, um die folgenden Vorgänge durchzuführen:

  • Identifizieren von Geodatabase-Versionen
  • Batch-Abgleich von Versionen und Zurückschreiben von Änderungen
  • Komprimieren der Geodatabase
  • Erneutes Erstellen von Indizes und Aktualisieren der Statistik in Systemtabellen
  • Erneutes Erstellen von Indizes und Aktualisieren der Statistik in Benutzertabellen

Hinweis:

Das folgende Skript enthält zusätzliche Logik im Vergleich zu den anderen Codebeispielen in diesem Thema. Durch die zusätzliche Logik sollen Fehler besser gehandhabt werden. Beachten Sie zudem, dass einige Kommentare und Variablennamen im folgenden Skript geändert wurden.

import arcpy

try:
    # Set the workspace 
    arcpy.env.workspace = 'Database Connections/admin.sde'
    
    # Set variables
    workspace = arcpy.env.workspace
    arcpy.env.overwriteOutput = True
    targetVersion = 'sde.DEFAULT'
    
    # 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(workspace)
    
    # Create an empty list that will be used to hold version names that we want to reconcile.
    verReconcileList = []
    
    # Loop through the list to look for versions with our user names in their name where the parent version is the target version.
    # 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():
                if version.parentVersionName.lower() == targetVersion.lower():
                    verReconcileList.append(version.name)
    
    # Perform maintenance if versions are found, otherwise there is no maintenance to perform.
    if len(verReconcileList)>0:
        
        # Execute the ReconcileVersions tool.
        arcpy.ReconcileVersions_management(workspace, "ALL_VERSIONS", targetVersion, verReconcileList, "LOCK_ACQUIRED", "NO_ABORT", "BY_OBJECT", "FAVOR_TARGET_VERSION", "POST", "KEEP_VERSION", "c:/temp/reconcilelog.txt")
        
        # Run the compress tool. 
        arcpy.Compress_management(workspace)
        
        # 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")
        
        
        '''
        *********************
        Data Owner(s) Section
        *********************
        '''
        # Get a list of datasets owned by the data owner user (requires second connection file)
        
        # Set the workspace 
        arcpy.env.workspace = 'Database Connections/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")
        
        '''
        *************************
        End Data Owner(s) Section
        *************************
        '''
        
        # set the workspace back to the admin workspace
        workspace = 'Database Connections/admin.sde'
        
        # Get a list of all the replica versions in the geodatabase
        replicaVersions = [replica.version for replica in arcpy.da.ListReplicas(workspace)]
        
        '''
        - We now have a list of versions that were created by taking a map offline (verReconcileList)
        - We also have a list of replica versions (replicaVersions)
        - The versions that we were reconciling are ready to be deleted if they are not currently pointing to a version
        - We are going to loop through the reconcile versions list and remove any versions that are still pointing to a replica
        - The versions remaining in the reconcile list are ready to be cleaned (deleted) up because there are no maps/replicas pointing to them. 
        '''
        
        # Using the list of versions associated with users/maps that we reconciled earlier. Remove any versions from the list that are still being used by a replica. 
        for replicaVer in replicaVersions:
            if replicaVer in verReconcileList:
                verReconcileList.remove(replicaVer)
        
        # Loop through the versionsList 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:
                try:
                    arcpy.DeleteVersion_management(workspace, version)
                except:
                    print("Failed to delete version.")
                    print(arcpy.GetMessages(2))
        else:
            print("No versions to delete.")
    
    else:
        print("No versions to reconcile, aborting version maintenance routine.")

except:
    print(arcpy.GetMessages(2))
    
print("Done.")

ArcGIS Desktop

  • Startseite
  • Dokumentation
  • Support

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

Über Esri

  • Über uns
  • Karriere
  • Esri Blog
  • User Conference
  • Developer Summit
Esri
Wir sind an Ihrer Meinung interessiert.
Copyright © 2021 Esri. | Datenschutz | Rechtliches