Erstellen einer Geodatabase in einem cloudbasierten PostgreSQL-Datenbank-Service

ArcGIS unterstützt mehrere Cloud-Database-as-a-Service-Angebote, die auf PostgreSQL basieren. Sie können eine Enterprise-Geodatabase in den meisten cloudbasierten PostgreSQL-Datenbank-Services erstellen, wenn diese von Esri unterstützt werden.

Wenn Sie eine Enterprise-Geodatabase mit ArcGIS Pro 3.2 erstellen, lautet die Geodatabase-Version 11.2.0.

Erfüllen der Voraussetzungen

Bevor Sie eine Geodatabase erstellen können, müssen Sie die Datenbankinstanz in Ihrem Cloud-Konto erstellen und so konfigurieren, dass Verbindungen empfangen werden, einen Benutzer und ein Schema mit dem Namen "sde" erstellen und dem Benutzer "sde" die Benutzerberechtigungen zum Erstellen einer Geodatabase gewähren.

Führen Sie die Anweisungen Ihres Cloud-Anbieters aus, um diese Schritte durchzuführen.

Sie müssen außerdem die Keycode-Autorisierungsdatei von ArcGIS Server auf den Cloud-Computer kopieren, auf dem Sie den ArcGIS-Client, mit dem Sie die Geodatabase erstellen, installieren.

Bevor Sie eine Geodatabase erstellen, müssen Sie die folgenden Schritte ausführen:

  1. Stellen Sie sicher, dass die verwendeten ArcGIS-Versionen den Typ und die Version des gewünschten cloudbasierten Datenbank-Service unterstützen.
  2. Erstellen Sie die Datenbank-Service-Instanz in der gewünschten Cloud-Plattform.
  3. Erstellen Sie eine Benutzeranmeldung mit dem Namen "sde" für die Datenbankinstanz.
  4. Gewähren Sie dem Benutzer "sde" die erforderlichen Berechtigungen zum Erstellen einer Geodatabase für den verwendeten Datenbank-Service-Typ.
  5. Erstellen Sie in der Datenbankinstanz ein Schema mit dem Namen "sde", und gewähren Sie dem Benutzer "sde" Berechtigungen für dieses Schema.
  6. Installieren Sie den ArcGIS-Client – ArcGIS Pro oder ArcGIS Server –, mit dem Sie die Geodatabase erstellen.

    Installieren Sie den ArcGIS-Client in derselben Cloud-Plattform und Region, in der auch der Datenbank-Service ausgeführt wird.

  7. Stellen Sie sicher, dass die Datenbankinstanz so konfiguriert wird, dass Verbindungen vom ArcGIS-Client zugelassen werden.
  8. Erstellen Sie eine Datenbankverbindung zur Datenbankinstanz auf dem ArcGIS-Client, den Sie in Schritt 6 installiert haben, wobei Sie sich als Benutzer "sde" verbinden.

    Beispiele zu Instanzzeichenfolgen finden Sie im Thema Datenbankverbindungen in ArcGIS Pro.

    Wenn es sich beim SDE-Benutzer um einen Benutzer mit Datenbankauthentifizierung handelt, müssen Sie das Kennwort des SDE-Benutzers in der Datenbankverbindung speichern.

  9. Rufen Sie eine ArcGIS Server-Keycode-Datei ab, und legen Sie sie an einem Speicherort ab, auf den Sie über den ArcGIS-Client zugreifen können, den Sie zum Erstellen der Geodatabase verwenden möchten.

Jetzt können Sie eine Geodatabase in der Datenbankinstanz in der Cloud erstellen.

Erstellen einer Geodatabase in der Datenbank-Service-Instanz

Wenn Sie ArcGIS Pro in derselben Cloud-Region wie den Datenbank-Service installiert haben, können Sie das Geoverarbeitungswerkzeug Enterprise-Geodatabase aktivieren ausführen, um eine Geodatabase in der Datenbankinstanz zu erstellen, wie im ersten Abschnitt oben beschrieben.

Alternativ können Sie die EnableEnterpriseGeodatabase ArcPy-Funktion in einem Python-Fenster oder ein Python-Skript aus einer ArcGIS Pro- oder ArcGIS Server-Installation in der Cloud ausführen.

Ausführen des Werkzeugs Enterprise-Geodatabase aktivieren

Führen Sie die folgenden Schritte aus, um eine Geodatabase mithilfe des Werkzeugs Enterprise-Geodatabase aktivieren in ArcGIS Pro zu erstellen.

  1. Melden Sie sich bei der virtuellen Maschine in der Cloud-Umgebung an, und starten Sie ArcGIS Pro.
  2. Öffnen Sie dass Werkzeug Enterprise-Geodatabase aktivieren.
  3. Geben Sie für den Parameter Eingabe-Datenbankverbindung die Datenbankverbindungsdatei an, die Sie in den erforderlichen Schritten vorab erstellt haben.
  4. Navigieren Sie für Autorisierungsdatei zu der Schlüsselcodedatei, die bei der Autorisierung von ArcGIS Server (Enterprise Edition) erstellt wurde, und wählen Sie diese aus.

    Diese Datei wird in das Verzeichnis \\Program Files\ESRI\License<release#>\sysgen geschrieben, wenn Sie ArcGIS Server unter Windows installieren, und in das Verzeichnis /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen, wenn Sie ArcGIS Server unter Linux installieren.

  5. Klicken Sie auf Ausführen.

Sie verfügen nun über eine Geodatabase in der Datenbankinstanz.

Meldungen im Zusammenhang mit der Geodatabase-Erstellung werden in der Datei sde_setup.log gespeichert. Diese Datei wird in dem Verzeichnis erstellt, das für die Variable "TEMP" auf der virtuellen Maschine, auf der das Skript ausgeführt wird, angegeben wurde. Falls Sie Probleme beim Erstellen einer Geodatabase haben, überprüfen Sie diese Protokolldatei, um das Problem zu beheben.

Als Nächstes kann der Datenbankadministrator Anmelderollen und entsprechende Schemas für Benutzer erstellen, die die Daten erstellen, bearbeiten und anzeigen sollen, und Anmelderollen für Editoren und Benutzer, die Daten anzeigen, erstellen.

Ausführen der ArcPy-Funktion "EnableEnterpriseGeodatabase"

Stellen Sie zum Ausführen von ArcPy-Funktionen eine Verbindung mit einem der ArcGIS-Client-Computer in der Cloud her, und führen Sie die Funktion in einem Python-Fenster aus.

  1. Melden Sie sich bei der virtuellen Maschine in der Cloud-Umgebung, in der ArcGIS Pro oder ArcGIS Server installiert ist, an.
  2. Rufen Sie ein Python-Fenster auf.

    Informationen zum Aufrufen von Python über ArcGIS-Installationen finden Sie hier:

  3. Führen Sie die EnableEnterpriseGeodatabase ArcPy-Funktion in einem Python-Fenster aus.

    Verwenden Sie die Datenbankverbindungsdatei, die Sie erstellt haben, und referenzieren Sie die ArcGIS Server-Autorisierungsdatei, die Sie in den erforderlichen Schritten vorab an einem verfügbaren Speicherort abgelegt haben.

    Im folgenden Beispiel wird die Funktion EnableEnterpriseGeodatabase auf einer ArcGIS Pro-Installation ausgeführt. Die Datenbankverbindungsdatei (postresdbaas.sde) wird in einem ArcGIS Pro-Projektordner (C:\proprojects\pg_proj) gespeichert, die Autorisierungsdatei (keycodes) unter C:\authcodes.

    arcpy.management.EnableEnterpriseGeodatabase(r"C:\proprojects\pg_proj\postresdbaas.sde",r"C:\authcodes\keyfile")

    Im nächsten Beispiel wird die Funktion auf einer ArcGIS Server-Installation auf einem Linux-Computer ausgeführt. Die Datenbankverbindungsdatei (postresdbaas.sde) wird unter /usr/connectionfiles gespeichert, die Keycodes-Datei befindet sich im ArcGIS Server-Standardverzeichnis.

    arcpy.management.EnableEnterpriseGeodatabase("/usr/connectionfiles/postresdbaas.sde","/usr/arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License/sysgen/keycodes")

Sie verfügen nun über eine Geodatabase in der Datenbankinstanz.

Meldungen im Zusammenhang mit der Geodatabase-Erstellung werden in der Datei sde_setup.log gespeichert. Diese Datei wird in dem Verzeichnis erstellt, das für die Variable "TEMP" auf der virtuellen Maschine, auf der die Funktion ausgeführt wird, angegeben wurde. Falls Sie Probleme beim Erstellen einer Geodatabase haben, überprüfen Sie diese Protokolldatei, um das Problem zu beheben.

Als Nächstes kann der Datenbankadministrator Anmelderollen und entsprechende Schemas für Benutzer erstellen, die die Daten erstellen, bearbeiten und anzeigen sollen, und Anmelderollen für Editoren und Benutzer, die Daten anzeigen, erstellen.

Ausführen eines Python-Skripts auf einem ArcGIS-Client

Zum Erstellen der Geodatabase durch Ausführen eines Skriptes auf einem Computer mit ArcGIS Pro (Desktop Standard oder Desktop Advanced) oder ArcGIS Server können Sie das hier verfügbare Skript verwenden.

Führen Sie die folgenden Schritte aus, um mit einem Python-Skript, das die ArcPy-Funktionen CreateDatabaseConnection und EnableEnterpriseGeodatabase ausführt, eine Verbindung mit der Datenbank herzustellen und eine Geodatabase in einem PostgreSQL-Datenbank-Service auszuführen:

  1. Erstellen Sie eine Textdatei auf einem ArcGIS-Client-Computer, und kopieren Sie das folgende Skript in die Datei:

    """
    Name: enable_enterprise_gdb.py
    Description: Provide connection information to an enterprise database
    and enable enterprise geodatabase.
    Type enable_enterprise_gdb.py -h or enable_enterprise_gdb.py --help for usage
    """
    
    # Import system modules
    import arcpy, os, optparse, sys
    
    
    # Define usage and version
    parser = optparse.OptionParser(usage = "usage: %prog [Options]", version="%prog 1.0 for " + arcpy.GetInstallInfo()['Version'] )
    
    #Define help and options
    parser.add_option ("--DBMS", dest="Database_type", type="choice", choices=['SQL_SERVER', 'ORACLE', 'POSTGRESQL', 'DB2','INFORMIX','DB2ZOS', ''], default="", help="Type of enterprise DBMS:  SQL_SERVER, ORACLE, POSTGRESQL, DB2, INFORMIX, or DB2ZOS.")
    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 ("-D", dest="Database", type="string", default="none", help="Database name:  Not required for Oracle")
    parser.add_option ("-l", dest="Authorization_file", type="string", default="", help="Full path and name of authorization file")
    
    
    # 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
    	database_type = options.Database_type.upper()
    	instance = options.Instance
    	account_authentication = options.account_authentication.upper()
    	username = options.User.lower() 
    	password = options.Password	
    	database = options.Database.lower()
    	license = options.Authorization_file
    
    
    	if( database_type ==""):	
    		print(" \n%s: error: \n%s\n" % (sys.argv[0], "DBMS type (--DBMS) must be specified."))
    		parser.print_help()
    		sys.exit(3)		
    		
    	if (license == ""):
    		print(" \n%s: error: \n%s\n" % (sys.argv[0], "Authorization file (-l) must be specified."))
    		parser.print_help()
    		sys.exit(3)
    
    		
    	# Get the current product license
    	product_license=arcpy.ProductInfo()
    	
    	if (license == ""):
    		print(" \n%s: error: %s\n" % (sys.argv[0], "Authorization file (-l) must be specified."))
    		parser.print_help()
    		sys.exit(3)
    	
    	# Checks required license level
    	if product_license.upper() == "ARCVIEW" or product_license.upper() == 'ENGINE':
    		print("\n" + product_license + " license found!" + "  Enabling enterprise geodatabase functionality requires an ArcGIS Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS Server license.")
    		sys.exit("Re-authorize ArcGIS before enabling an enterprise geodatabase.")
    	else:
    		print("\n" + product_license + " license available!  Continuing to enable...")
    		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")
    	
    	# Process: Enable geodatabase...
    	try:
    		print("Enabling Enterprise Geodatabase...\n")
    		arcpy.EnableEnterpriseGeodatabase_management(input_database=Connection_File_Name_full_path, authorization_file=license)
    		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)

  2. Speichern Sie die Datei mit der Erweiterung .py.
  3. Führen Sie das Skript aus, indem Sie für Ihre Instanz spezifische Optionen und Informationen bereitstellen.

    In den folgenden Beispielen wird die Datei enable_gdb.py auf einer virtuellen Maschine ausgeführt, die sich in derselben Cloud-Region wie der Datenbank-Service befindet.

    In diesem Beispiel wird das Skript auf einer ArcGIS Server-Installation auf einem Linux-Computer ausgeführt. Es stellt eine Verbindung mit einer Datenbank namens "myauroradb" in einer Amazon Aurora PostgreSQL-Instanz in der Region "us-west-2" (database-1-instance-1.zyxjtlpj9fer.us-west-2.rds.amazonaws.com) her. Die Keycodes-Datei wurde unter /usr/arcgis/auth auf dem ArcGIS Server-Computer gespeichert.

    ./enable_gdb.py --DBMS POSTGRESQL -i database-1-instance-1.zyxjtlpj9fer.us-west-2.rds.amazonaws.com --auth DATABASE_AUTH 
    -u sde -p sdeP@ss -D myauroradb -l '/usr/arcgis/auth/keycodes'

    Im nächsten Beispiel wird das Skript auf einem Microsoft Windows-Computer in Azure ausgeführt. Es stellt eine Verbindung mit einer Datenbank namens "azurepgf" in der (flexiblen) Microsoft Azure Database for PostgreSQL-(Server-)Instanz my-pg-flex.postgres.database.azure.com her. Die Keycodes-Datei befindet sich im ArcGIS Server-Standardverzeichnis.

    enable_gdb.py --DBMS POSTGRESQL -i my-pg-flex.postgres.database.azure.com --auth DATABASE_AUTH 
    -u sde -p EsDeeEpass -D azurepgf -l '\\Program Files\ESRI\License\sysgen\keycodes'

    Im folgenden Beispiel wird das Skript auf einem Computer ausgeführt, auf dem ArcGIS Pro installiert und die Keycodes-Datei unter Users\MyUser\Documents\AuthFiles\keycodes gespeichert wurde. Das Skript stellt eine Verbindung mit einer Datenbank (gcspostgres) in einer Google Cloud SQL for PostgreSQL-Instanz her, die über die öffentliche IP-Adresse 98.765.43.210 aufgerufen wird.

    enable_gdb.py --DBMS POSTGRESQL -i 98.765.43.210 --auth DATABASE_AUTH 
    -u sde -p Zpassw0rd -D gcspostgres -l '\\Users\MyUser\Documents\AuthFiles\keycodes'

    Tipp:

    Geben Sie in der Eingabeaufforderung -h oder --help ein, um die Syntaxhilfe für dieses Skript aufzurufen.

Sie verfügen nun über eine Geodatabase in der Datenbankinstanz.

Meldungen im Zusammenhang mit der Geodatabase-Erstellung werden in der Datei sde_setup.log gespeichert. Diese Datei wurde in dem Verzeichnis erstellt, das für die Variable "TEMP" oder "TMP" auf dem virtuellen Computer angegeben wurde, auf dem das Skript ausgeführt wird. Falls Sie Probleme beim Erstellen einer Geodatabase haben, überprüfen Sie diese Protokolldatei, um das Problem zu beheben.

Als Nächstes kann der Datenbankadministrator Anmelderollen und entsprechende Schemas für Benutzer erstellen, die die Daten erstellen, bearbeiten und anzeigen sollen, und Anmelderollen für Editoren und Benutzer, die Daten anzeigen, erstellen.