Programar una actualización de una geodatabase en DB2
Puede modificar y utilizar una de las secuencias de comandos de Python que se presentan en este tema para actualizar y conectarse a una geodatabase corporativa.
El primer conjunto de secuencias de comandos utiliza un archivo de conexión de base de datos existente para conectarse y actualizar una geodatabase.
La segunda secuencia de comandos muestra cómo puede proporcionar información de conexión en la misma secuencia de comandos utilizada para actualizar la geodatabase. Esto es especialmente útil si no obtiene acceso a ArcGIS for Desktop; puede ejecutar la secuencia de comandos de Python desde un equipo donde esté instalado ArcGIS Engine con la extensión Geodatabase Update o ArcGIS for Server (Standard o Advanced), proporcionar información de conexión y actualizar la geodatabase.
La conexión que establece a la geodatabase, ya sea mediante un archivo de conexión de base de datos existente o parámetros en la secuencia de comandos, es una conexión directa. Debe tener lo siguiente en el equipo en que ejecute la secuencia de comandos deberá disponer de lo siguiente:
- Un usuario local con el nombre sde
- Un cliente de IBM DB2 configurado para conectarse a una base de datos
Si actualiza desde un cliente ArcGIS de 32 bits, debe utilizar un cliente DB2 de 32 bits.
No se puede usar una conexión DSNless cuando se actualiza una geodatabase.
- Un cliente ArcGIS, ya sea ArcGIS for Desktop (Standard o Advanced), ArcGIS Engine con la extensión Geodatabase Update o ArcGIS for Server (Standard o Advanced)
Asegúrese de autorizar el cliente ArcGIS antes de ejecutar la secuencia de comandos.
Asegúrese de haber leído y realizado los pasos en Preparar la actualización de una geodatabase en DB2 antes de actualizar.
- En primer lugar, compruebe si la geodatabase se puede actualizar.
- Abra Python.
cd /arcgis/server/tools ./python
- Use la función Describir para determinar si la versión de su geodatabase coincide con la versión de su cliente ArcGIS.
import arcpy isCurrent = arcpy.Describe('/tmp/egdb_connection.sde').currentRelease print isCurrent
Si aparece el texto false, puede actualizar la geodatabase. Continúe con el siguiente paso. Si aparece el texto true, no necesita actualizar la geodatabase.
- Abra Python.
- Para actualizar la geodatabase, copie una de estas secuencias de comandos de ejemplo en un editor de texto. Modifique cualquier valor de variable para que coincidan con la información del sitio.
- Si tiene un archivo de conexión de base de datos existente que utiliza una conexión directa y se conecta como el administrador de la geodatabase, copie y modifique una de las siguientes secuencias de comandos en el sistema operativo:
# 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")
- Si no tiene un archivo de conexión de la base de datos en el equipo desde el que programa la actualización, puede copiar y modificar la siguiente secuencia de comandos:
""" 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)
- Si tiene un archivo de conexión de base de datos existente que utiliza una conexión directa y se conecta como el administrador de la geodatabase, copie y modifique una de las siguientes secuencias de comandos en el sistema operativo:
- Ejecute la secuencia de comandos que copió y modificó para realizar la verificación de requisitos previos y actualice la geodatabase.