Создать базу геоданных в облачном сервисе баз данных PostgreSQL

ArcGIS поддерживает несколько облачных предложений, где базы данных используются как сервис на основе PostgreSQL. Вы можете создать многопользовательскую базу геоданных в большинстве облачных сервисов баз данных PostgreSQL, которые поддерживают Esri .

Если вы создадите базу геоданных из ArcGIS AllSource версии 3.3, версия этой базы геоданных будет 11.3.0.

Выполните необходимые условия

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

Следуйте инструкциям, предоставленным вашим облачным провайдером, чтобы выполнить эти шаги.

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

Перед созданием базы геоданных выполните следующие обязательные шаги:

  1. Убедитесь, что используемые вами версии ArcGIS поддерживают тип и версию сервиса облачных баз данных, которые вы хотите использовать.
  2. Создайте экземпляр сервиса баз данных на выбранной вами облачной платформе.
  3. Создайте логин пользователя с именем sde для экземпляра базы данных.
  4. Предоставьте пользователю sde права, необходимые для создания базы геоданных для используемого вами типа сервиса баз данных.
  5. Создайте схему с именем sde в экземпляре базы данных и предоставьте пользователю sde права доступа к схеме.
  6. Установите клиентское приложение ArcGIS—ArcGIS AllSource или ArcGIS Server—, которое будет использоваться для создания базы геоданных.

    Установите клиентское приложение ArcGIS на той же облачной платформе и в том же регионе, где запущен сервис базы данных.

  7. Убедитесь, что экземпляр базы данных настроен таким образом, чтобы разрешать подключения из клиента ArcGIS.
  8. С помощью клиента ArcGIS, который был установлен на шаге 6, создайте подключение к базе данных с экземпляром базы данных, подключившись как пользователь sde.

    Примеры строк экземпляра смотрите в разделе Подключения к базе данных в ArcGIS AllSource.

    Если пользователь sde является пользователем, прошедшим аутентификацию в базе данных, вы должны сохранить пароль пользователя sde в соединении с базой данных.

  9. Получите файл ключей ArcGIS Server и поместите его в такое место, где он будет доступен для клиента ArcGIS, который будет использоваться для создания базы геоданных.

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

Создайте базу геоданных в экземпляре сервиса базы данных

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

Либо можно запустить функцию EnableEnterpriseGeodatabase ArcPy в окне Python или запустить скрипт Python из установки ArcGIS AllSource или ArcGIS Server в облаке.

Запустите инструмент Включить многопользовательскую базу геоданных (Enable Enterprise Geodatabase)

Следуйте приведенным шагам по созданию базы геоданных с помощью инструмента Включить многопользовательскую базу геоданных в ArcGIS AllSource:

  1. Войдите в виртуальную машину в облачной среде и запустите ArcGIS AllSource.
  2. Откройте инструмент Включить многопользовательскую базу геоданных.
  3. В качестве параметра Входное подключение к базе данных укажите файл подключения к базе данных, который вы создали в рамках выполнения необходимых шагов.
  4. Чтобы указать Файл авторизации, выберите файл keycodes, который был создан при авторизации ArcGIS Server (Enterprise).

    Этот файл записывается в \\Program Files\ESRI\License<release#>\sysgen при установке ArcGIS Server на Windows и в /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen при установке ArcGIS Server на Linux.

  5. Щелкните Запустить.

Теперь у вас есть база геоданных в экземпляре базы данных.

Вы можете найти сообщения, относящиеся к созданию базы геоданных, в файле sde_setup.log, который создается в каталоге, указанном для переменной TEMP, на том компьютере, где запущен этот скрипт. При наличии проблем с созданием базы геоданных посмотрите этот файл журнала для их устранения.

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

Запустите функцию ArcPy EnableEnterpriseGeodatabase

Чтобы запустить функции ArcPy , подключитесь к одному из клиентских компьютеров ArcGIS в облаке и запустите функцию из окна Python.

  1. Войдите в виртуальную машину в облачной среде, на которой установлен ArcGIS AllSource или ArcGIS Server.
  2. Откройте окно Python.

    Смотрите следующее для получения информации о доступе к Python из установок ArcGIS:

    • Окно Python — информация об открытии окна из ArcGIS AllSource
    • ArcGIS Server и ArcPy—Информация о доступе к окну Python при установке ArcGIS Server

  3. Запустите функцию EnableEnterpriseGeodatabase ArcPy из окна Python.

    Используйте созданный вами файл подключения к базе данных и ссылайтесь на файл авторизации ArcGIS Server, который вы разместили в доступном месте, как часть необходимых шагов.

    В следующем примере функция EnableEnterpriseGeodatabase запускается из установки ArcGIS AllSource. Файл подключения к базе данных (postresdbaas.sde) хранится в папке проекта ArcGIS AllSource (C:\proprojects\pg_proj), а файл авторизации (keycodes) хранится в C:\authcodes.

    arcpy.management.EnableEnterpriseGeodatabase(r"C:\proprojects\pg_proj\postresdbaas.sde",r"C:\authcodes\keyfile")

    В следующем примере функция запускается из установки ArcGIS Server на компьютере с Linux. Файл подключения к базе данных (postresdbaas.sde) хранится в /usr/connectionfiles, а файл кодов ключей находится в расположении ArcGIS Server по умолчанию.

    arcpy.management.EnableEnterpriseGeodatabase("/usr/connectionfiles/postresdbaas.sde","/usr/arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License/sysgen/keycodes")

Теперь у вас есть база геоданных в экземпляре базы данных.

Вы можете найти сообщения, относящиеся к созданию базы геоданных, в файле sde_setup.log, который создается в каталоге, указанном для переменной TEMP, на том компьютере, где запущена эта функция. При наличии проблем с созданием базы геоданных посмотрите этот файл журнала для их устранения.

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

Запуск скрипта Python из клиента ArcGIS

Вы можете использовать этот скрипт, чтобы создать базу геоданных, запустив скрипт из ArcGIS AllSource (Desktop Standard или Desktop Advanced) или на компьютере с ArcGIS Server.

Выполните следующие шаги, чтобы запустить скрипт Python, который вызывает функции CreateDatabaseConnection и EnableEnterpriseGeodatabase ArcPy для подключения к базе данных и создания базы геоданных в сервисе баз данных PostgreSQL:

  1. Создайте текстовый файл на клиентском компьютере ArcGIS и скопируйте следующий скрипт в файл.

    """
    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
    """
    
    # 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=['SQL_SERVER', 'ORACLE', 'POSTGRESQL', 'DB2','INFORMIX','DB2ZOS', ''], default="", help="Type of enterprise DBMS:  SQL_SERVER, 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)
    
    		
    	# 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 Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS 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)

  2. Сохраните файл с расширением .py.
  3. Запустите скрипт, предоставив параметры и информацию, специфичные для вашего экземпляра.

    В следующих примерах файл enable_gdb.py запускается с виртуальной машины в том же облачном регионе, что и сервис базы данных.

    В этом примере скрипт запускается из установки ArcGIS Server на компьютере Linux: Он подключается к базе данных с именем myauroradb в экземпляре Amazon Aurora PostgreSQL в регионе us-west-2 (database-1-instance-1.zyxjtlpj9fer.us-west-2.rds.amazonaws.com). Файл с кодами ключей был помещен в /usr/arcgis/auth на компьютере с ArcGIS Server.

    ./enable_gdb.py --DBMS POSTGRESQL -i database-1-instance-1.zyxjtlpj9fer.us-west-2.rds.amazonaws.com --auth DATABASE_AUTH 
    -u sde -p sdeP@ss -D myauroradb -l '/usr/arcgis/auth/keycodes'

    В следующем примере скрипт запускается с компьютера Microsoft Windows в Azure. Он подключается к базе данных с именем azure pdf в экземпляре Microsoft Azure Database for PostgreSQL (гибкий сервер) в my-pg-flex.postgres.database.azure.com. Файл кодов ключей находится в расположении ArcGIS Server по умолчанию.

    enable_gdb.py --DBMS POSTGRESQL -i my-pg-flex.postgres.database.azure.com --auth DATABASE_AUTH 
    -u sde -p EsDeeEpass -D azurepgf -l '\\Program Files\ESRI\License\sysgen\keycodes'

    В следующем примере скрипт запускается с компьютера, на котором установлен ArcGIS AllSource и в который был помещен файл кодов ключей в Users\MyUser\Documents\AuthFiles\keycodes. Скрипт подключается к базе данных (gcspostgres) в экземпляре Google Cloud SQL for PostgreSQL, доступ к которому осуществляется через общедоступный IP-адрес 98.765.43.210.

    enable_gdb.py --DBMS POSTGRESQL -i 98.765.43.210 --auth DATABASE_AUTH 
    -u sde -p Zpassw0rd -D gcspostgres -l '\\Users\MyUser\Documents\AuthFiles\keycodes'

    Подсказка:

    Введите -h или --help в командной строке для получения справки по синтаксису для этого скрипта.

Теперь у вас есть база геоданных в экземпляре базы данных.

Вы можете найти сообщения, относящиеся к созданию базы геоданных, в файле sde_setup.log, который создается в каталоге, указанном для вашей переменной TEMP или TMP на той виртуальной машине, где запущен этот скрипт. При наличии проблем с созданием базы геоданных посмотрите этот файл журнала для их устранения.

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