Обновление базы геоданных в Db2

Доступно с лицензией Standard или Advanced.

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

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

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

До начала обновления

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

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

Имейте в виду следующее:

  • Обновления с бета-или предварительных версий программного обеспечения не поддерживаются.
  • Если для версии ArcGIS, до которой вы будете выполнять обновление, поддерживается версия вашей базы данных, то база геоданных может быть сразу обновлена с версии 10.2.x , 10.3.x, 10.4.x, 10.5.x, 10.6.x, 10.7.x, 10.8.x, или 10.9.x.
  • Не существует формального механизма для перехода на более раннюю версию базы геоданных. Если после обновления на более новую версию вы хотите вернуться на старую версию базы геоданных, необходимо восстановить старую базу данных из файла резервной копии.
  • Если вы собираетесь обновить базу геоданных версии 10.4.1 или более ранней, удалите все локаторы из базы геоданных перед обновлением.

Ниже приводится перечень необходимых шагов, которые нужно выполнить перед обновлением базы геоданных:

  1. Убедитесь, что комбинация версий Db2 и ArcGIS, которые вы хотите использовать, поддерживается. Более подробные сведения см. в разделе Требования базы данных IBM Db2 для ArcGIS.

    База данных должна быть поддерживаемой версии, а аппаратное обеспечение соответствовать минимальным системным требованиям перед обновлением базы геоданных.

  2. Проверьте, может ли быть обновлена ваша база геоданных. Чтобы сделать это, установите версию клиента ArcGIS, на которую вы хотите перейти, на одной машине. Если вы устанавливаете ArcGIS Desktop, то вы можете подключиться к базе геоданных и открыть диалоговое окно Свойства базы данных чтобы определить, возможно ли обновление базы геоданных. Если вы устанавливаете ArcGIS Server (enterprise) или дополнительный модуль ArcGIS Engine Geodatabase Update , вы можете использовать функцию ArcPy Describe для определения того, возможно ли обновление базы геоданных. В примере ниже создается подключение к базе геоданных и проверяется возможность ее обновления:
    # Open Python.
    cd /arcgis/server/tools
    ./python
    # Create a connection to the geodatabase.
    arcpy.CreateDatabaseConnection_management("/tmp/",
                                              "egdb_connection.sde",
                                              "DB2",
                                              "mydbgdb",
                                              "DATABASE_AUTH",
                                              "sde",
                                              "mysdepassword",
                                              "SAVE_USERNAME")
    # Import ArcPy and check the geodatabase release.
    import arcpy
    isCurrent = arcpy.Describe('/tmp/egdb_connection.sde').currentRelease
    print isCurrent

    Если возвращается значение false, базу геоданных можно обновить. Если возвращается true, обновлять базу геоданных не нужно. Не приступайте к последующим шагам.

  3. Конвертируйте любое подключение сервера приложений, используемое в картах или сервисах, в прямое подключение.
  4. Создайте резервную копию базы данных.
  5. Пользователю sde требуется выполнить функцию MON_GET_CONNECTION для очистки ненужных подключений в системной таблице PROCESS_INFORMATION. Таким образом, разрешите EXECUTE на MON_GET_CONNECTION для sde.
  6. Если ваш администратор базы данных отозвал права SELECT на представление каталога SYSIBM.SYSDUMMY1, ему может быть нужно либо повторно предоставить права для роли PUBLIC, либо предоставить их для всех пользователей, которые подключаются к базе геоданных в Db2. Эти права необходимы для SQL-запросов к базе данных.

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

    SQL0551N  "ANYA" does not have the privilege to perform operation "SELECT" on object "SYSIBM.SYSDUMMY1".  SQLSTATE=42501

    Чтобы предоставить права SELECT на это представление для роли PUBLIC, выполните следующую команду, войдя в систему из-под пользователя с правами DBADM.

    GRANT SELECT 
     ON SYSIBM.SYSDUMMY1 
     TO PUBLIC;
  7. Предоставьте пользователю sde права DBADM в базе данных. Это необходимо для обновления базы геоданных.
  8. Удалите все пользовательские функции, которые вы могли добавить в системные таблицы базы геоданных за пределами ArcGIS, например, триггеры или дополнительные индексы.

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

  9. На этой стадии вам может потребоваться создание второй резервной копии базы данных для сохранения изменений, произведенных ранее.
  10. Установите текущую версию клиента ArcGIS (ArcGIS Desktop Desktop Standard или Desktop Advanced, дополнительный модуль ArcGIS Engine Geodatabase Update или ArcGIS ServerEnterprise) на компьютер, который имеет возможность подключения к базе геоданных для выполнения обновления.
  11. Убедитесь, что во время обновления никто не подключен к базе геоданных.

    Чтобы увидеть список пользователей, подключенных к базе геоданных, перейдите в диалоговое окно Администрирование базы геоданных в клиенте ArcGIS Desktop.

Теперь вы можете обновить вашу базу геоданных.

Обновление базы геоданных

Для обновления вашей базы геоданных можно использовать инструмент Обновить базу геоданных в ArcGIS Desktop или скрипт Python на компьютере, где установлен клиент ArcGIS.

Используйте инструмент Обновить базу геоданных.

Откройте инструмент геообработки Обновить базу геоданных любым из способов, перечисленных ниже:

  • группы инструментов Администрирование базы геоданных в наборе Управление данными
  • Кнопка Обновить базу геоданных на вкладке Общие в диалоговом окне Свойства базы данных в ArcMap или ArcCatalog
  • Кнопка Запуск обновления на вкладке Общие в диалоговом окне Свойства базы данных в ArcGIS Pro

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

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

Проверка предварительных условий определяет наличие других активных подключений к базе геоданных, имеет ли подключенный пользователь права, достаточные для обновления базы геоданных, и может ли база данных поддерживать работу с XML-столбцами. Такая проверка также позволяет убедиться, что все наборы данных могут быть открыты и что используемые база данных и библиотеки одинаковой версии. Если какое-либо из предварительных условий не выполнено, работа инструмента завершается. Перед повторным запуском процедуры обновления вы должны исправить все проблемы.

Результаты этой проверки отображаются в диалоговом окне инструмента геообработки. Если проверка (или обновление) заканчивается сбоем, то результаты также записываются в GDBUpgrade.log, который расположен в папке c:\Users\<user name>\AppData\Local\ESRI\<ArcGIS product>.

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

Запустите скрипт

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

  • Если у вас есть файл существующего подключения к базе данных, который использует прямое подключение и подключается в качестве пользователя sde, скопируйте скрипт для вашей операционной системы, вставьте его в текстовый редактор, измените его для использования специфичной для вашего сайта информации, сохраните и закройте файл, затем запустите его:
    # Name: upgradesdegdb_example.py
    # Description: Connect from a Windows computer 
    # with an existing database connection file 
    # and upgrade an enterprise geodatabase
    # 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
    # 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")
  • Если у вас нет файла подключения к базе данных на компьютере, на котором создается скрипт обновления, то вы можете скопировать следующий скрипт и предоставить специфичную для вашего сайта информацию в командной строке:
    """
    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
    """
    
    # Import system modules
    import arcpy
    import os
    import optparse
    import sys
    
    
    # Define usage and version
    parser = optparse.OptionParser(usage = "usage: %prog [Options]", version="%prog 2.0; valid for 10.1 only")
    
    #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 Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS 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 и вашей каталогизированной базой данных является mydbgdb, то введите в командной строке следующее:

    gdbupgrade --DBMS DB2 -i mydbgdb --auth DATABASE_AUTH -u sde -p mysdepassword --upgrade TRUE