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:

Be sure you have read and performed the steps in Preparing to upgrade a geodatabase in DB2 before you upgrade.

Steps:
  1. First, check if the geodatabase can be upgraded.
    1. Open Python.

      cd /arcgis/server/tools
      ./python
      

    2. 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.

  2. 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)
      
  3. Run the script you copied and altered to perform the prerequisite check and upgrade the geodatabase.

Related Topics

11/6/2014