Scripting a geodatabase upgrade in DB2
You can modify and use one of the Python scripts provided in this topic to connect to and upgrade an enterprise geodatabase.
The first set of scripts use an existing database connection file to connect to and upgrade a geodatabase.
The second script shows how you can provide connection information in the same script used to upgrade the geodatabase. This is especially useful if you do not have access to ArcGIS for Desktop; you can run the Python script from a computer where ArcGIS Engine with the Geodatabase Update extension or ArcGIS for Server (Standard or Advanced) is installed, provide connection information, and upgrade the geodatabase.
The connection you make to the geodatabase, whether as an existing database connection file or through parameters in the script, is a direct connection. You must have the following on the machine from which you will run the script:
- A local user named sde
- An IBM DB2 client, configured to connect to the database
If you will be upgrading from a 32-bit ArcGIS client, you must use a 32-bit DB2 client.
You cannot use a DSNless connection when upgrading a geodatabase.
- An ArcGIS client, either ArcGIS for Desktop (Standard or Advanced), ArcGIS Engine Runtime with the Geodatabase Update extension, or ArcGIS for Server (Standard or Advanced)
Be sure to authorize the ArcGIS client before you run the script.
Be sure you have read and performed the steps in Preparing to upgrade a geodatabase in DB2 before you upgrade.
- First, check if the geodatabase can be upgraded.
- Open Python.
cd /arcgis/server/tools ./python
- Use the Describe function to find if your geodatabase release matches your ArcGIS client release.
import arcpy isCurrent = arcpy.Describe('/tmp/egdb_connection.sde').currentRelease print isCurrent
If false is returned, you can upgrade your geodatabase. Proceed to the next step. If true is returned, you do not need to upgrade your geodatabase.
- Open Python.
- To upgrade the geodatabase, copy one of these example scripts into a text editor. Alter any variable values to match the information at your site.
- If you have an existing database connection file that uses a direct connection and connects as the geodatabase administrator, copy and modify one of the following scripts, depending on your operating system:
# 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")
- If you do not have a database connection file on the computer from which you are scripting the upgrade, you can copy and modify the following script:
""" 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)
- If you have an existing database connection file that uses a direct connection and connects as the geodatabase administrator, copy and modify one of the following scripts, depending on your operating system:
- Run the script you copied and altered to perform the prerequisite check and upgrade the geodatabase.