Erstellen eines Skripts für die Aktualisierung einer Geodatabase in DB2
Sie können eines der Python-Skripte ändern und verwenden, die in diesem Thema bereitgestellt werden, um eine Verbindung mit einer Enterprise-Geodatabase herzustellen und sie zu aktualisieren.
Die erste Gruppe von Skripten verwendet eine vorhandene Datenbankverbindungsdatei, um eine Verbindung mit einer Geodatabase herzustellen und sie zu aktualisieren.
Das zweite Skript zeigt an, wie Sie Verbindungsinformationen in demselben Skript, das zur Aktualisierung der Geodatabase verwendet wird, bereitstellen können. Dies ist besonders nützlich, wenn Sie keinen Zugriff auf ArcGIS for Desktop haben; Sie können das Python-Skript von einem Computer ausführen, auf dem ArcGIS Engine mit der Erweiterung "Geodatabase Update" oder ArcGIS for Server (Standard oder Advanced) installiert ist, Verbindungsinformationen bereitstellen und die Geodatabase aktualisieren.
Die Verbindung, die Sie mit der Geodatabase herstellen, ist eine direkte Verbindung, unabhängig davon, ob Sie eine vorhandene Datenbankverbindungsdatei oder Parameter im Skript verwenden. Daher muss Folgendes auf dem Computer installiert sein, auf dem Sie das Skript ausführen:
- Ein lokaler Benutzer mit dem Namen "sde"
- Ein IBM DB2-Client, der für eine Verbindung mit der Datenbank konfiguriert ist
Wenn Sie von einem 32-Bit-ArcGIS-Client aktualisieren, müssen Sie einen 32-Bit-DB2-Client verwenden.
Beim Aktualisieren einer Geodatabase kann keine DSNless-Verbindung verwendet werden.
- Ein ArcGIS-Client, ArcGIS for Desktop (Standard oder Advanced), ArcGIS Engine Runtime mit der Erweiterung "Geodatabase-Aktualisierung" oder ArcGIS for Server (Standard oder Advanced)
Stellen Sie sicher, dass der ArcGIS-Client autorisiert wird, bevor Sie das Skript ausführen.
Vor der Aktualisierung sollten Sie unbedingt die folgenden Themen gelesen und die darin enthaltenen Schritte ausgeführt haben: Vorbereiten der Aktualisierung einer Geodatabase in DB2.
- Überprüfen Sie zuerst, ob die Geodatabase aktualisiert werden kann.
- Öffnen Sie Python.
cd /arcgis/server/tools ./python
- Verwenden Sie die Funktion Beschreiben, um zu ermitteln, ob die Geodatabase-Version mit Ihrer ArcGIS-Client-Version übereinstimmt.
import arcpy isCurrent = arcpy.Describe('/tmp/egdb_connection.sde').currentRelease print isCurrent
Wenn false zurückgegeben wird, können Sie die Geodatabase aktualisieren. Fahren Sie mit dem nächsten Schritt fort. Wenn true zurückgegeben wird, muss die Geodatabase nicht aktualisiert werden.
- Öffnen Sie Python.
- Zum Aktualisieren der Geodatabase kopieren Sie eines dieser Beispielskripte in einen Texteditor. Ändern Sie die Variablenwerte so, dass sie mit den Informationen an Ihrem Standort übereinstimmen.
- Wenn Sie eine vorhandene Datenbankverbindungsdatei haben, die eine direkte Verbindung verwendet und sich als Geodatabase-Administrator verbindet, kopieren und ändern Sie eines der folgenden Skripte, abhängig vom Betriebssystem:
# Name: upgradesdegdb_example.py # Description: Connect from a Windows computer # with an existing database connection file # and upgrade an enterprise geodatabase in DB2 # Author: Esri # 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 or UNIX computer # with an existing database connection file # and upgrade an enterprise geodatabase in DB2 # Author: Esri # 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 Sie keine Datenbankverbindungsdatei auf dem Computer haben, von dem Sie die das Skript für die Aktualisierung erstellen, können Sie das folgende Skript kopieren und ändern:
""" Name: upgrade_gdb_db2.py Description: Create a connection file and upgrade an enterprise geodatabase in DB2. Author: Esri """ # 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 ("-s", dest="Server", type="string", default="", help="RDBMS server name") parser.add_option ("-i", dest="Service", type="string", default="", help="Use direct connection syntax") 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") 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") # 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 server = options.Server service = options.Service account_authentication = options.account_authentication.upper() username = options.User.lower() password = options.Password database = options.Database.lower() do_upgrade = options.Upgrade # 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!" + " Upgrading enterprise geodatabase requires an ArcGIS for Desktop Standard or Advanced license, or an ArcGIS Server license." sys.exit("Re-authorize ArcGIS before enabling enterprise geodatabase.") else: print "\n" + product_license + " license available! Continuing to enable..." arcpy.AddMessage("+++++++++") # Check if direct connection if service.find(":") <> -1: #This is direct connect ServiceConnFileName = service.replace(":", "") ServiceConnFileName = ServiceConnFileName.replace(";", "") ServiceConnFileName = ServiceConnFileName.replace("=", "") ServiceConnFileName = ServiceConnFileName.replace("/", "") ServiceConnFileName = ServiceConnFileName.replace("\\", "") else: arcpy.AddMessage("\n+++++++++") arcpy.AddMessage("Exiting!!") arcpy.AddMessage("+++++++++") sys.exit("\nSyntax for a direct connection in the Service parameter is required for enabling enterprise geodatabase.") # Local variables Conn_File_NameT = server + "_" + ServiceConnFileName + "_" + 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 = temp + os.sep + Conn_File_NameT + ".sde" # Check for the .sde file and delete it if present arcpy.env.overwriteOutput=True # Variables defined within the script; other variable options commented out at the end of the line saveUserInfo = "SAVE_USERNAME" saveVersionInfo = "SAVE_VERSION" # The Version shouldn't matter for non-geodatabase connection version = "" print "\nCreating ArcSDE Connection File...\n" # Process: Create ArcSDE Connection File... # Usage: out_folder_path, out_name, server, service, database, account_authentication, username, password, save_username_password, version, save_version_info arcpy.CreateArcSDEConnectionFile_management(temp, Conn_File_NameT, server, service, database, account_authentication, username, password, saveUserInfo, version, saveVersionInfo) 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: Upgrade geodatabase... try: if do_upgrade.lower() == "true": print "Upgrading Geodatabase...\n" arcpy.UpgradeGDB_management(Connection_File_Name, "PREREQUISITE_CHECK", "UPGRADE") for i in range(arcpy.GetMessageCount()): arcpy.AddReturnMessage(i) arcpy.AddMessage("+++++++++\n") else: print "Running Pre-Requisite Check...\n" arcpy.UpgradeGDB_management(Connection_File_Name, "PREREQUISITE_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) #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 eine vorhandene Datenbankverbindungsdatei haben, die eine direkte Verbindung verwendet und sich als Geodatabase-Administrator verbindet, kopieren und ändern Sie eines der folgenden Skripte, abhängig vom Betriebssystem:
- Führen Sie das Skript aus, das Sie kopiert und geändert haben, um die Voraussetzungsprüfung auszuführen und die Geodatabase zu aktualisieren.