Available with Standard or Advanced license.
The goal of upgrading an enterprise geodatabase is to update the geodatabase system tables, stored procedures, types, and functions to take advantage of new functionality and bug fixes.
Install a new version of the ArcGIS client or apply a service pack, patch, or hot fix to an existing installation and upgrade the geodatabase.
Before you upgrade
When you upgrade any enterprise system, including a geodatabase, plan ahead. Test the new version on a development or test server to ensure that it works with all your client applications.
When you have determined that the new system works the way you expected, schedule the upgrade; be sure the necessary staff are available to perform the upgrade and that they have the permissions necessary to complete their assigned tasks.
Be aware of the following:
- The ArcSDE application server for PostgreSQL is not available with ArcGIS 10.3 and later releases. You must migrate all application server connections used in maps or services to connect directly to the database before you can upgrade your geodatabase.
- Upgrades from beta versions of the software are not supported.
- You can upgrade directly from a 10.1, 10.2, 10.2.1, 10.2.2, 10.3, 10.3.1, 10.4, 1.0, 1.1, or 1.2 geodatabase if your database is at a supported release.
- If your geodatabase is at release 10 or earlier, you must first upgrade to a supported geodatabase release before you can upgrade to the current ArcGIS release.
- Once a geodatabase has been upgraded, previous versions of ArcGIS may not be able to connect since some older versions of ArcGIS cannot read newer versions of the geodatabase. Releases prior to ArcGIS 10.1 cannot connect to a 10.4.1 or 1.2 geodatabase.
- There is no formal mechanism to downgrade a geodatabase to a previous version. If after upgrading to a newer version you want to downgrade the geodatabase, you must restore the old database from a backup file.
The following is a checklist of steps to complete before you upgrade your geodatabase:
- Read PostgreSQL database requirements for ArcGIS to confirm that Esri supports the PostgreSQL and ArcGIS version combination you want to use.
If you need to upgrade your PostgreSQL database, see your PostgreSQL documentation for information on new functionality in the DBMS and how to upgrade it. Remember that the upgraded databases must have the same name and owner that they had before. Also, set the search_path variable for the database to "$user", public, and sde.
- Check to see if your geodatabase can be upgraded. To do this, install the ArcGIS client version you want to move to onto one machine. If you install ArcGIS for Desktop, you can connect to the geodatabase and open the Database Properties dialog box to see if a geodatabase upgrade is possible. If you install ArcGIS for Server or the ArcGIS Engine Geodatabase Update extension, you can use the ArcPy Describe function to determine if the geodatabase can be upgraded.
# 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
If False is returned, you can upgrade your geodatabase. If True is returned, you do not need to upgrade your geodatabase. Do not proceed with the subsequent steps.
- Convert any application server connections used in existing maps or services to direct connections.
- Create a backup of the database.
- Remove any custom functionality you may have added to the geodatabase system tables outside ArcGIS, such as triggers or additional indexes.
The upgrade procedure cannot accommodate customizations you make to the system tables. If such customizations prevent the alteration of a system table's schema, the upgrade will fail.
- Grant the sde user superuser status in the database.
This is required to upgrade a geodatabase.
- Make sure there are no connections to the geodatabase you are upgrading.
To see a list of who is currently connected to your geodatabase, go to the Geodatabase Administration dialog box in an ArcGIS for Desktop client.
- Copy the st_geometry file (and libst_raster_pg, if you are using the ST_Raster storage type in your geodatabase) from the DatabaseSupport directory in your ArcGIS 10.4 client installation, and place them in the %PostgreSQL%\lib
directory (Windows) or PostgreSQL lib
directory (Linux) on the PostgreSQL server. You can determine the exact location of the lib directory for your PostgreSQL installation on Linux by running the pg_config utility as the postgres user. The lib location is indicated by the PGPKGLIBDIR parameter.
Be sure to use the library appropriate to your PostgreSQL version and server operating system. Folders are labeled with the PostgreSQL library version.
- If your PostgreSQL server is running Linux, log in as the root user to the server and use FTP to transfer the st_geometry.so file (and libst_raster_pg.so file if using ST_Raster) to the PostgreSQL lib directory.
- If your PostgreSQL server is running Windows, copy the st_geometry.dll file (and the libst_raster_pg.dll file if using ST_Raster) to the lib folder of the PostgreSQL installation directory.
You can now upgrade your geodatabase.
Upgrade the geodatabase
You can use the Upgrade Geodatabase tool in ArcGIS for Desktop or a Python script run on the ArcGIS client computer to upgrade your geodatabase.
Use the Upgrade Geodatabase tool
You can open the Upgrade Geodatabase geoprocessing tool from
- The Geodatabase Administration toolset in the Data Management toolbox
- The Upgrade Geodatabase button on the General tab of the Database Properties dialog box in ArcMap or ArcCatalog
- The Run Upgrade button on the General tab of the Database Properties dialog box in ArcGIS Pro
Esri recommends that you leave both the Pre-requisites check and Upgrade geodatabase options checked. That way, the tool checks to see if the prerequisites to upgrade have been met before continuing with the geodatabase upgrade.
The prerequisite check detects other active connections to the geodatabase, determines whether the connecting user has sufficient privileges to upgrade the geodatabase, ensures that the database can support XML columns, makes sure all datasets can be opened, and ascertains that the database and libraries are at the same release. If any prerequisites are not met, the tool terminates. You must correct any problems before you run the upgrade procedure again.
The results of this check are reported on the geoprocessing tool dialog box. If the check (or upgrade) fails, results are also written to the GDBUpgrade.log file, which can be found in c:\Users\<user name>\AppData\Local\ESRI\<ArcGIS product>.
If all checks are passed, the tool proceeds with the upgrade. The status for the prerequisites check and the upgrade are shown on the geoprocessing tool progress dialog box. If the upgrade fails, information is written to the GDBUpgrade.log file. Additional information is written to the sde_setup.log file, which can be found in the system TEMP directory.
Run a script
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 sde user, copy the script that applies to your operating system, paste it into a text editor, alter it to use information specific to your site, save and close the file, then run it:
# 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 or UNIX 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")
- If you do not have a database connection file on the computer from which you are scripting the upgrade, you can copy the following script and provide your site-specific information at the command line:For example, if you saved the text file as gdbupgrade, your database cluster is mypgdbcluster, and your database is mypgdb, type the following at a command prompt:
""" 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 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 ("--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 for Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS for 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)
gdbupgrade --DBMS POSTGRESQL -i mypgdbcluster --auth DATABASE_AUTH -u sde -p mysdepassword --upgrade TRUE -D mypgdb