Aktualisieren einer Geodatabase in PostgreSQL

Mit der Standard- oder Advanced-Lizenz verfügbar.

Ziel der Aktualisierung einer Enterprise-Geodatabase ist die Aktualisierung der Geodatabase-Systemtabellen, gespeicherter Prozeduren, Typen und Funktionen, um die neuen Funktionen und Korrekturen nutzen zu können. Möglicherweise müssen Sie auch die Datenbank aktualisieren, wenn die von Ihnen verwendete Version nicht mehr für Ihre ArcGIS-Clients unterstützt wird.

Installieren Sie eine neue Version von ArcGIS AllSource oder ArcGIS Server oder wenden Sie ein Service Pack, ein Patch oder einen Hotfix auf eine vorhandene Installation an, und aktualisieren Sie die Geodatabase.

Hinweis:

Selbst wenn Sie die Geodatabase nicht aktualisieren, wird die von Ihnen verwendete Datenbankversion möglicherweise nicht mehr mit der aktuellen Version der ArcGIS-Software unterstützt. Wenn die Datenbankversion nicht mehr unterstützt wird, müssen Sie möglicherweise ein Upgrade der Geodatabase durchführen. Je größer der Abstand zwischen den Upgrades ist, desto aufwendiger wird der Upgrade-Vorgang.

Wenn Sie ein Upgrade für die Geodatabase mit ArcGIS AllSource 3.3 durchführen, lautet die Geodatabase-Version nach dem Upgrade 11.3.0.

Führen Sie die Schritte durch, die vor der Aktualisierung erforderlich sind, und aktualisieren Sie dann die Geodatabase mit dem Geoverarbeitungswerkzeug Geodatabase aktualisieren oder einem Python-Skript.

Bevor Sie die Aktualisierung ausführen

Es empfiehlt sich, vor der Aktualisierung eines Enterprise-Systems, einschließlich einer Geodatabase, vorauszuplanen. Testen Sie die neue Version auf einem Entwicklungs- oder Testserver, um sicherzustellen, dass sie mit allen Client-Anwendungen funktioniert.

Wenn Sie feststellen, dass das neue System wie erwartet läuft, planen Sie die Aktualisierung. Stellen Sie sicher, dass die für die Aktualisierung erforderlichen Mitarbeiter verfügbar sind und dass diese für die ihnen zugewiesenen Aufgaben über die erforderlichen Berechtigungen verfügen.

Folgende Punkte sind zu beachten:

  • Upgrades von Beta- oder Pre-Release-Versionen der Software werden nicht unterstützt.
  • Von einer 10.9.x- oder 11.x-Geodatabase können Sie direkt eine Aktualisierung durchführen, sofern die Version der PostgreSQL-Datenbank für die aktuelle ArcGIS-Version unterstützt wird.

    Wenn die Version der PostgreSQL-Datenbank für die aktuelle Geodatabase-Version nicht unterstützt wird, müssen Sie die Datenbank und die Geodatabase ggf. mehrmals aktualisieren, bevor Sie die Geodatabase auf die aktuelle Version aktualisieren können. Je länger Sie zwischen den Aktualisierungen der Geodatabase warten, desto mehr Aktualisierungen müssen Sie durchführen, um die neueste Version der Geodatabase zu erhalten.

    Im folgenden Szenario müssen Sie zum Beispiel jeweils zwei Upgrades für die Datenbank und die Geodatabase durchführen:

    Eine Aktualisierung von einer deutlich älteren Geodatabase-Version erfordert eine mehrstufige Aktualisierung der Geodatabase und der Datenbank.

    Folgen Sie bei jedem Geodatabase-Upgrade auf eine Zwischenversion den Aktualisierungsanweisungen für die Geodatabase-Version, und testen Sie die Geodatabase beim Wechsel von einer Version zur nächsten. Folgen Sie auch für jede Datenbankversion den Aktualisierungsanweisungen des Datenbankanbieters, und testen Sie die Datenbank beim Wechsel von einer Version zur nächsten.

  • Es gibt kein offizielles Verfahren für das Herunterstufen einer Geodatabase auf eine frühere Version. Wenn Sie die Geodatabase nach der Aktualisierung auf eine neuere Version herunterstufen möchten, können Sie die Datenbank aus einer Sicherungsdatei, die die ältere Geodatabase-Version enthält, wiederherstellen.
  • Wenn Sie eine Aktualisierung von einer Geodatabase der Version 11.2.0 durchführen, die den Geometrietyp "ST_Geometry" verwendet, werden die für die ST_Geometry-Spalten definierten räumlichen Indizes im Rahmen der Aktualisierung gelöscht und neu erstellt.

Nachfolgend finden Sie eine Checkliste der Schritte, die vor der Aktualisierung der Geodatabase ausgeführt werden müssen:

  1. Weitere Informationen dazu, ob die Kombination der Versionen von PostgreSQL und ArcGIS, die Sie verwenden möchten, von Esri unterstützt wird, finden Sie unter ArcGIS-Anforderungen für PostgreSQL.

    Wenn Sie die PostgreSQL-Datenbank aktualisieren müssen, finden Sie weitere Informationen zu neuen Funktionen und zum Aktualisieren des Datenbankmanagementsystems in der PostgreSQL-Dokumentation. Achten Sie darauf, dass die aktualisierten Datenbanken den gleichen Namen und den gleichen Besitzer haben wie zuvor. Setzen Sie die Variable "search_path" für die Datenbank außerdem auf "$user", öffentlich und sde.

  2. Erstellen Sie eine Datenbankverbindung mit Authentifizierung als SDE-Benutzer.
  3. Überprüfen Sie, ob die Geodatabase aktualisiert werden kann.

    Installieren Sie dazu die gewünschte ArcGIS-Clientversion auf einen Computer. Wenn Sie ArcGIS AllSource installieren, verwenden Sie die im vorherigen Schritt erstellte Verbindung, um eine Verbindung zur Geodatabase herzustellen. Öffnen Sie dann das Dialogfeld Datenbankeigenschaften, um zu ermitteln, ob die Geodatabase aktualisiert werden kann. Wenn Sie ArcGIS Server (Enterprise Edition) installieren, können Sie die im vorherigen Schritt erstellte Verbindungsdatei verwenden und mithilfe der ArcPy-Funktion Describe ermitteln, ob die Geodatabase aktualisiert werden kann. Diese Vorgehensweise ist im Beispiel unten dargestellt.

    # Open Python.
    cd /arcgis/server/tools
    ./python
    
    # Create a connection to the geodatabase.
    arcpy.CreateDatabaseConnection_management("/tmp/",
                                              "egdb_connection.sde",
                                              "POSTGRESQL",
                                              "mypgdbcluster",
                                              "DATABASE_AUTH",
                                              "sde",
                                              "mysdepassword",
                                              "SAVE_USERNAME",
                                              "mypgdb")
    
    # Import ArcPy and check the geodatabase release.
    import arcpy
    
    isCurrent = arcpy.Describe('/tmp/egdb_connection.sde').currentRelease
    
    print isCurrent

    Wenn False zurückgegeben wird, können Sie die Geodatabase aktualisieren. Wenn True zurückgegeben wird, muss keine Aktualisierung der Geodatabase durchgeführt werden. Fahren Sie nicht mit den nachfolgenden Schritten fort.

  4. Erstellen Sie eine Sicherungskopie der Datenbank.
  5. Entfernen Sie alle benutzerdefinierten Funktionen, die Sie den Geodatabase-Systemtabellen außerhalb von ArcGIS hinzugefügt haben, z. B. Trigger oder zusätzliche Indizes.

    Bei der Aktualisierung werden keine Anpassungen unterstützt, die Sie an den Systemtabellen vornehmen. Wenn diese Anpassungen die Änderung des Schemas einer Systemtabelle verhindern, schlägt die Aktualisierung fehl.

  6. Der Datenbankadministrator muss dem SDE-Benutzer die erforderlichen Berechtigungen zum Aktualisieren der Geodatabase zuweisen.

    Weitere Informationen zu erforderlichen Berechtigungen finden Sie unter Berechtigungen für Geodatabases in PostgreSQL.

  7. Stellen sie sicher, dass keine Verbindungen zu der Geodatabase aktiv sind, die Sie aktualisieren.

    Um eine Liste der Benutzer anzuzeigen, die aktuell mit der Geodatabase verbunden sind, wechseln Sie in ArcGIS AllSource zum Dialogfeld Geodatabase-Verwaltung.

  8. Wenn die Geodatabase den Datentyp "ST_Geometry" verwendet, fahren Sie mit dem nächsten Schritt fort. Ist dies nicht der Fall, können Sie mit dem Aktualisieren der Geodatabase fortfahren.

    Wenn Sie unsicher sind, ob die Geodatabase den Datentyp "ST_Geometry" verwendet, stellen Sie als SDE-Benutzer oder Superuser von einem SQL-Client eine Verbindung mit der Datenbank her, und prüfen Sie, ob im Schema des SDE-Benutzers "ST_Geometry"-Funktionen vorhanden sind.

  9. Laden Sie die Datei "st_geometry" von My Esri herunter, und speichern Sie sie im Verzeichnis %PostgreSQL%\lib (Microsoft Windows) oder im Verzeichnis PostgreSQL lib (Linux) auf dem PostgreSQL-Server.

    Sie können den genauen Speicherort des lib-Verzeichnisses für die PostgreSQL-Installation unter Linux ermitteln, indem Sie das Dienstprogramm pg_config als postgres-Benutzer ausführen. Der Speicherort lib wird durch den Parameter PGPKGLIBDIR angegeben.

    Verwenden Sie die für die PostgreSQL-Version und das Betriebssystem des Servers geeignete Bibliothek. Die Ordner sind mit der Version der PostgreSQL-Bibliothek beschriftet.

    • Wenn auf dem PostgreSQL-Server Linux ausgeführt wird, melden Sie sich als Root-Benutzer beim Server an, und übertragen Sie die Datei st_geometry.so per FTP in das Verzeichnis PostgreSQLlib.
    • Wenn auf dem PostgreSQL-Server Windows ausgeführt wird, kopieren Sie die Datei st_geometry.dll in den Ordner lib des PostgreSQL-Installationsverzeichnisses.

Sie können die Geodatabase jetzt aktualisieren.

Aktualisieren der Geodatabase

Zum Aktualisieren Ihrer Geodatabase können Sie das Werkzeug Geodatabase aktualisieren in ArcGIS AllSource oder ein Python-Skript verwenden, das auf einem ArcGIS AllSource- oder ArcGIS Server-Computer ausgeführt wird.

Hinweis:

Wenn die Geodatabase nach Verzweigung versionierte Daten enthält, sind nach dem Upgrade möglicherweise einige zusätzliche Schritte erforderlich. Anweisungen finden Sie unter Funktionsweise von "Geodatabase aktualisieren".

Verwenden des Werkzeugs "Geodatabase aktualisieren"

Öffnen Sie das Geoverarbeitungswerkzeug Geodatabase aktualisieren über eines der folgenden Elemente der Bedienoberfläche:

  • das Toolset "Geodatabase-Verwaltung" in der Toolbox "Data Management"
  • die Schaltfläche Upgrade ausführen auf der Registerkarte Allgemein des Dialogfeldes Eigenschaften: Datenbank in ArcGIS AllSource

Wenn Sie das Werkzeug über das Dialogfeld Datenbankeigenschaften öffnen, werden die Geodatabase-Verbindungsinformationen in das Textfeld Eingabe-Geodatabase eingetragen.

Esri empfiehlt, die Optionen Überprüfung von Voraussetzungen durchführen und Geodatabase aktualisieren aktiviert zu lassen. Auf diese Weise überprüft das Werkzeug, ob die Voraussetzungen zum Aktualisieren erfüllt sind, bevor die Geodatabase-Aktualisierung fortgesetzt wird.

Die Voraussetzungsprüfung erkennt andere aktive Verbindungen zur Geodatabase und bestimmt, ob der die Verbindung herstellende Benutzer über ausreichende Berechtigungen zum Aktualisieren der Geodatabase verfügt. Außerdem wird sichergestellt, dass die Master-Datenbank XML-Spalten unterstützt, dass alle Datasets geöffnet werden können, und es wird geprüft, dass die Datenbank und die Bibliotheken die gleiche Version aufweisen. Wenn irgendwelche Voraussetzungen nicht erfüllt werden, wird das Werkzeug beendet. Alle Probleme müssen behoben werden, bevor Sie den Aktualisierungsvorgang erneut ausführen.

Die Ergebnisse dieser Überprüfung werden im Dialogfeld des Geoverarbeitungswerkzeugs erfasst. Wenn die Überprüfung nicht durchgeführt werden kann, werden die Ergebnisse auch in die Datei GDBUpgrade.log geschrieben, die sich im Verzeichnis c:\Users\<user name>\AppData\Local\ESRI\<ArcGIS product> befindet.

Wenn alle Prüfungen bestanden wurden, fährt das Werkzeug mit der Aktualisierung fort. Der Status für die Voraussetzungsprüfung und die Aktualisierung wird im Dialogfeld des Geoverarbeitungswerkzeugs angezeigt. Falls die Aktualisierung fehlschlägt, werden die Informationen in die Datei GDBUpgrade.log geschrieben. Weitere Informationen werden in die Datei sde_setup.log im Verzeichnis TEMP Ihres Benutzers geschrieben. Wenn für Ihren Benutzer kein konfiguriertes temporäres Verzeichnis vorhanden ist, wird das Verzeichnis TEMP des Systems verwendet.

Ausführen eines Skripts

Wenn Sie die Aktualisierung der Geodatabase mit einem Python-Skript durchführen möchten, kopieren Sie eines dieser Beispielskipte in einen Texteditor. Ändern Sie die Variablenwerte so, dass sie mit den Informationen Ihrer Site übereinstimmen.

  • Wenn Sie über eine vorhandene Datenbankverbindungsdatei verfügen, die eine Verbindung als SDE-Benutzer herstellt, kopieren Sie das für Ihr Betriebssystem geeignete Skript, fügen Sie es in einen Texteditor ein, ändern Sie es, um für Ihre Site spezifische Informationen zu verwenden, speichern und schließen Sie die Datei, und führen Sie das Skript anschließend aus:
    # Name: upgradesdegdb_example.py
    # Description: Connect from a Windows computer 
    # with an existing database connection file 
    # and upgrade an enterprise geodatabase in PostgreSQL
    
    # Import arcpy module
    import arcpy
     
    # Local variables:
    Output_Workspace = "C:\\ArcGIS\connection_files\<Connection file>"
    Default_gdb = "C:\\ArcGIS\connection_files\<Connection file>"
    
    # Process: Upgrade Geodatabase
    arcpy.UpgradeGDB_management(Default_gdb, "PREREQUISITE_CHECK", "UPGRADE")
    # Name: upgradesdegdb_example.py
    # Description: Connect from a Linux computer 
    # with an existing database connection file 
    # and upgrade an enterprise geodatabase in PostgreSQL
    
    # Import arcpy module
    import arcpy
     
    # Local variables:
    Output_Workspace = "<user>/connections/<Connection_file>"
    Default_gdb = "<user>/connections/<Connection_file>"
    
    # Process: Upgrade Geodatabase
    arcpy.UpgradeGDB_management(Default_gdb, "PREREQUISITE_CHECK", "UPGRADE")
  • Wenn sich keine Datenbankverbindungsdatei auf dem Computer befindet, von dem Sie das Skript für die Aktualisierung erstellen, können Sie das folgende Skript kopieren und Ihre Site-spezifischen Informationen in der Befehlszeile angeben:
    """
    Name: upgrade_gdb.py
    Description: Provide connection information to an Enterprise geodatabase 
    and upgrade the geodatabase
    Type upgrade_gdb.py -h or upgrade_gdb.py --help for usage
    """
    
    # Import system modules
    import arcpy
    import os
    import optparse
    import sys
    
    
    # Define usage and version
    parser = optparse.OptionParser(usage = "usage: %prog [Options]", version="%prog 2.0; valid for 10.1 only")
    
    #Define help and options
    parser.add_option ("--DBMS", dest="Database_type", type="choice", choices=['SQLSERVER', 'ORACLE', 'POSTGRESQL', 'DB2','INFORMIX','DB2ZOS',''], default="", help="Type of enterprise DBMS:  SQLSERVER, ORACLE, or POSTGRESQL.")
    parser.add_option ("-i", dest="Instance", type="string", default="", help="DBMS instance name")
    parser.add_option ("--auth", dest="account_authentication", type ="choice", choices=['DATABASE_AUTH', 'OPERATING_SYSTEM_AUTH'], default='DATABASE_AUTH', help="Authentication type options (case-sensitive):  DATABASE_AUTH, OPERATING_SYSTEM_AUTH.  Default=DATABASE_AUTH")
    parser.add_option ("-u", dest="User", type="string", default="", help="Geodatabase administrator user name")
    parser.add_option ("-p", dest="Password", type="string", default="", help="Geodatabase administrator password")
    parser.add_option ("--upgrade", dest="Upgrade", type="choice", choices=['TRUE', 'FALSE'], default="FALSE", help="Upgrade Options (case-sensitive):  TRUE=Perform Pre-requisite check and upgrade geodatabase, FALSE=Perform Pre-requisite check only.  Default=FALSE")                   
    parser.add_option ("-D", dest="Database", type="string", default="none", help="Database name:  Not required for Oracle")
    
    
    # Check if value entered for option
    try:
    	(options, args) = parser.parse_args()
    
    	
    #Check if no system arguments (options) entered
    	if len(sys.argv) == 1:
    		print("%s: error: %s\n" % (sys.argv[0], "No command options given"))
    		parser.print_help()
    		sys.exit(3)
    
    	#Usage parameters for spatial database connection to upgrade
    	account_authentication = options.account_authentication.upper()
    	username = options.User.lower() 
    	password = options.Password	
    	do_upgrade = options.Upgrade
    	database = options.Database.lower()
    	database_type = options.Database_type.upper()
    	instance = options.Instance
    	
    	if (database_type == ""):
    		print("\nDatabase type must be specified!\n")
    		parser.print_help()
    		sys.exit(3)
    	
    	if (database_type == "SQLSERVER"):
    		database_type = "SQL_SERVER"
    	
    	# Get the current product license
    	product_license=arcpy.ProductInfo()
    	
    	# Checks required license level to upgrade
    	if product_license.upper() == "ARCVIEW" or product_license.upper() == 'ENGINE':
    		print("\n" + product_license + " license found!" + "  Enterprise geodatabase upgrade requires an ArcGIS Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS Server license.")
    		sys.exit("Re-authorize ArcGIS before upgrading.")
    	else:
    		print("\n" + product_license + " license available!  Continuing to upgrade...")
    		arcpy.AddMessage("+++++++++")
    	
    	# Local variables
    	instance_temp = instance.replace("\\","_")
    	instance_temp = instance_temp.replace("/","_")
    	instance_temp = instance_temp.replace(":","_")
    	Conn_File_NameT = instance_temp + "_" + database + "_" + username     
    	
    	if os.environ.get("TEMP") == None:
    		temp = "c:\\temp"	
    	else:
    		temp = os.environ.get("TEMP")
    	
    	if os.environ.get("TMP") == None:
    		temp = "/usr/tmp"		
    	else:
    		temp = os.environ.get("TMP")  
    	
    	Connection_File_Name = Conn_File_NameT + ".sde"
    	Connection_File_Name_full_path = temp + os.sep + Conn_File_NameT + ".sde"
    	
    	# Check for the .sde file and delete it if present
    	arcpy.env.overwriteOutput=True
    	if os.path.exists(Connection_File_Name_full_path):
    		os.remove(Connection_File_Name_full_path)
    	
    	print("\nCreating Database Connection File...\n")
    	# Process: Create Database Connection File...
    	# Usage:  out_file_location, out_file_name, DBMS_TYPE, instnace, database, account_authentication, username, password, save_username_password(must be true)
    	arcpy.CreateDatabaseConnection_management(out_folder_path=temp, out_name=Connection_File_Name, database_platform=database_type, instance=instance, database=database, account_authentication=account_authentication, username=username, password=password, save_user_pass="TRUE")
            for i in range(arcpy.GetMessageCount()):
    		if "000565" in arcpy.GetMessage(i):   #Check if database connection was successful
    			arcpy.AddReturnMessage(i)
    			arcpy.AddMessage("\n+++++++++")
    			arcpy.AddMessage("Exiting!!")
    			arcpy.AddMessage("+++++++++\n")
    			sys.exit(3)            
    		else:
    			arcpy.AddReturnMessage(i)
    			arcpy.AddMessage("+++++++++\n")
    			
    	# Check whether geodatabase needs upgrade
    	isCurrent = arcpy.Describe(Connection_File_Name_full_path).currentRelease
    	
    	if isCurrent == True:
    		print("The geodatabase is already at the current release and cannot be upgraded!")
    		sys.exit("Upgrade did not run.")
    	
    	
    	# Process: Upgrade geodatabase...
    	try:
    		if do_upgrade.lower() == "true":
    			print("Upgrading Geodatabase...\n")
    			arcpy.UpgradeGDB_management(input_workspace=Connection_File_Name_full_path, input_prerequisite_check="PREREQUISITE_CHECK", input_upgradegdb_check="UPGRADE")
    			for i in range(arcpy.GetMessageCount()):
    				arcpy.AddReturnMessage(i)
    			arcpy.AddMessage("+++++++++\n")
    	
    		else:
    			print("Running Pre-Requisite Check...\n")
    			arcpy.UpgradeGDB_management(input_workspace=Connection_File_Name_full_path, input_prerequisite_check="PREREQUISITE_CHECK", input_upgradegdb_check="NO_UPGRADE")
    			for i in range(arcpy.GetMessageCount()):
    				arcpy.AddReturnMessage(i)
    			arcpy.AddMessage("+++++++++\n")
    		
    	        
    	except:
    		for i in range(arcpy.GetMessageCount()):
    			arcpy.AddReturnMessage(i)
    		
    	if os.path.exists(Connection_File_Name_full_path):
    		os.remove(Connection_File_Name_full_path)
    	
    #Check if no value entered for option	
    except SystemExit as e:
    	if e.code == 2:
    		parser.usage = ""
    		print("\n")
    		parser.print_help()
    		parser.exit(2)
    Wenn Sie die Textdatei beispielsweise als "gdbupgrade" gespeichert haben, das Datenbank-Cluster "mypgdbcluster" und die Datenbank "mypgdb" ist, geben Sie Folgendes in die Eingabeaufforderung ein:

    gdbupgrade --DBMS POSTGRESQL -i mypgdbcluster --auth DATABASE_AUTH -u sde -p mysdepassword --upgrade TRUE -D mypgdb