Создание базы геоданных с помощью скриптов в Informix

Для создания базы геоданных в системе управления базами данных IBM Informix, вы можете скопировать и отредактировать пример скрипта.

Перед запуском скрипта необходимо выполнить дополнительные действия. Описание этих действий и самого скрипта приводится ниже.

Шаги:
  1. Установите и настройте Informix на своем сервере.
  2. Убедитесь, что модуль Informix Basic Text Search зарегистрирован
  3. Зарегистрируйте модуль Informix Spatial DataBlade.
  4. В операционной системе на сервере Informix создайте пользователя с именем sde.
  5. Внесите следующие изменения в файл ONCONFIG в Informix:
    1. Снимите комментарий с параметра VPCLASS jvp,num=1.

      Это позволяет создать в базе геоданных функцию sde.retrieve_uid(), которая требуется для репликации, автономного использования карт и SQL-редактирования таблиц, содержащих столбцы глобальных идентификаторов ID или GUID.

    2. Задайте параметру USEOSTIME значение 1, чтобы использовать значения времени менее секунды.

      Задание этого параметра позволяет вам выполнять редактирование рабочих процессов, которые требуют редактирования неверсионных данных в автономном режиме.

    3. Перезапустите Informix, чтобы применить изменения, внесенные в файл ONCONFIG.
  6. Создайте базу данных в экземпляре Informix и сконфигурируйте пространство хранения.
  7. Определите роль EXTEND и права доступа RESOURCE для пользователя sde, которого вы создали в шаге 4.
  8. Если вы будете запускать скрипт Python с другого компьютера, а не с сервера Informix, установите и конфигурируйте клиент Informix на компьютере, с которого будет запускаться скрипт Python.

    Клиент Informix можно загрузить с портала поддержки пользователей Esri (Esri Customer Care Portal). Информацию об установке клиента Informix смотрите в документации IBM. Если вы устанавливаете клиент Informix, чтобы запустить 32-разрядный клиент ArcGIS, установите клиентское 32-разрядное приложение Informix IConnect. Если вы устанавливаете клиент Informix для ArcGIS for Server, установите 64-разрядное клиентское приложение IConnect. Дополнительные сведения см. в разделе Настройка подключения к Informix.

  9. Скопируйте этот пример скрипта в окно Python в ArcGIS for Desktop или на любой Python IDE, например, PythonWin или WING, на компьютере, где установлен ArcGIS for Desktop (Standard или Advanced), ArcGIS for Server (Standard или Advanced) или ArcGIS Engine с установленным расширением Geodatabase Update.

    В этом примере показан скрипт, который запускает функциональность базы геоданных в существующей базе данных Informix:

    """
    Name: enable_enterprise_gdb.py
    Description: Provide connection information to an enterprise database
    and enable enterprise geodatabase.
    Type enable_enterprise_gdb.py -h or enable_enterprise_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, POSTGRESQL, DB2, INFORMIX, or DB2ZOS.")
    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 ("-D", dest="Database", type="string", default="none", help="Database name:  Not required for Oracle")
    parser.add_option ("-l", dest="Authorization_file", type="string", default="", help="Full path and name of authorization file")
    
    
    # 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
    	database_type = options.Database_type.upper()
    	instance = options.Instance
    	account_authentication = options.account_authentication.upper()
    	username = options.User.lower() 
    	password = options.Password	
    	database = options.Database.lower()
    	license = options.Authorization_file
    
    
    	if( database_type ==""):	
    		print " \n%s: error: \n%s\n" % (sys.argv[0], "DBMS type (--DBMS) must be specified.")
    		parser.print_help()
    		sys.exit(3)		
    		
    	if (license == ""):
    		print " \n%s: error: \n%s\n" % (sys.argv[0], "Authorization file (-l) must be specified.")
    		parser.print_help()
    		sys.exit(3)
    
    	if (database_type == "SQLSERVER"):
    		database_type = "SQL_SERVER"
    		
    	# 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!" + "  Enabling enterprise geodatabase functionality 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 enabling an enterprise geodatabase.")
    	else:
    		print "\n" + product_license + " license available!  Continuing to enable..."
    		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")
    	
    	
    	# Process: Enable geodatabase...
    	try:
    		print "Enabling Enterprise Geodatabase...\n"
    		arcpy.EnableEnterpriseGeodatabase_management(input_database=Connection_File_Name_full_path, authorization_file=license)
    		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)
    
  10. Измените скрипт, чтобы включить в него вашу локальную информацию.
  11. Запустите скопированный и измененный скрипт.

Файл отчета о создании базы геоданных (GDBCreateGeodatabase<#>.log) будет записан в папку, заданную переменной TEMP или TMP на компьютере, где был запущен скрипт.

Связанные темы

5/10/2014