Доступно с лицензией Standard или Advanced.
Целью обновления многопользовательской базы геоданных является модернизация системных таблиц баз геоданных, процедур хранения, типов и функций для того, чтобы воспользоваться преимуществами новых функциональных возможностей и исправления ошибок.
Установите новую версию клиента ArcGIS или примените пакет обновлений, патч или пакет исправлений к существующей инсталляции и обновите базу геоданных.
Завершите необходимые шаги до обновления, затем обновите базу геоданных с помощью инструмента геообработки Обновить базу геоданных или скрипта Python.
До начала обновления
При обновлении любой многопользовательской системы, включая базу геоданных, необходимо сначала все спланировать. Протестируйте новую версию на сервере для разработки или тестовом сервере, чтобы убедиться, что она работает со всеми вашими клиентскими приложениями.
Когда вы определили, что новая система работает ожидаемым образом, запланируйте обновление; убедитесь, что необходимые сотрудники доступны для проведения обновления, и что они имеют необходимые права для выполнения назначенных им задач.
Имейте в виду следующее:
- Клиенты ArcGIS Pro 2.2 и ArcGIS 10.6.1 и более ранних версий не могут подключиться к базам геоданных 11.x в Microsoft SQL Server. Если кто-то в вашей организации все еще работает с базой геоданных через клиенты этих версий, не обновляйте базу геоданных.
- При повышении версии базы геоданных в SQL Server до 11.0 или более поздней, полные имена таблиц и классов объектов более не будут содержать имя базы данных. Например, класс объектов с именем productdata.dataowner.inventory в базе геоданных 10.9.x после обновления базы геоданных будет назван dataowner.inventory.
- Обновления с бета-или предварительных версий программного обеспечения не поддерживаются.
- Если для версии ArcGIS, до которой вы будете выполнять обновление, поддерживается версия вашей базы данных, то база геоданных может быть сразу обновлена с версии 10.4.x, 10.5.x, 10.6.x, 10.7x, 10.8.x, 10.9x или 11.x.
Чтобы перейти с более ранней версии базы геоданных, вы должны сначала обновить базу геоданных до 10.4.x, 10.5.x, 10.6.x, 10.7.x, 10.8.x, 10.9.x или 11.0. Следуйте инструкциям по обновлению этой версии перед обновлением до текущей версии базы геоданных.
- Не существует формального механизма для перехода на более раннюю версию базы геоданных. Если после обновления на более новую версию вы хотите вернуться на старую версию базы геоданных, вы можете восстановить базу данных из файла резервной копии, которая содержит предыдущую версию базы геоданных.
- Если вы обновляете базу геоданных 10.4.x, удалите все локаторы из базы геоданных перед обновлением.
- При обновлении базы геоданных до текущей версии ArcGIS инструмент Обновить базу геоданных включает опции базы данных ALLOW_SNAPSHOT_ISOLATION и READ_COMMITTED_SNAPSHOT SQL Server на ON. Это необходимо для баз геоданных в версии 10.4.1.2 и выше в SQL Server.
- Хранилище ST_Raster более не поддерживается. Перед обновлением необходимо конвертировать имеющиеся данные ST_Raster в другой формат.
Ниже приводится перечень необходимых шагов перед обновлением базы геоданных:
- Ознакомьтесь с Требованиями ArcGIS к Microsoft SQL Server, чтобы убедиться, что Esri поддерживает комбинацию SQL Server, драйвера ODBC и версии ArcGIS, которую вы хотите использовать.
- Определите, можно ли обновить базу геоданных.
Чтобы сделать это, установите версию клиента ArcGIS, на которую вы хотите перейти, на одной машине. Если вы устанавливаете ArcGIS Pro, то вы можете подключиться к базе геоданных и открыть диалоговое окно Свойства базы данных чтобы определить, возможно ли обновление базы геоданных. Если вы устанавливаете ArcGIS Server (версию Enterprise), вы можете использовать функцию ArcPy Describe для определения того, возможно ли обновление базы геоданных.
# Open Python. cd /arcgis/server/tools ./python # Create a connection to the geodatabase. arcpy.CreateDatabaseConnection_management("/tmp/", "egdb_connection.sde", "SQL_SERVER", "prod9", "DATABASE_AUTH", "sde", "mysdepassword", "SAVE_USERNAME", "myssgdb") # Import ArcPy and check the geodatabase release. import arcpy isCurrent = arcpy.Describe('/tmp/egdb_connection.sde').currentRelease print isCurrent
Если возвращается значение False, базу геоданных можно обновить. Если возвращается True, обновлять базу геоданных не нужно. Не приступайте к последующим шагам.
- Создайте резервную копию базы данных.
- Удалите всю добавленную вручную функциональность, которую вы могли добавить в системные таблицы базы геоданных вне системы ArcGIS, например, триггеры, участие в репликации SQL Server или дополнительные индексы.
Процедура обновления не сможет использовать настройки, которые вы произвели в системных таблицах. Если эти модификации помешают изменению схемы системной таблицы, обновление будет прервано с ошибкой.
- Убедитесь, что учетная запись, которая используется для обновления базу геоданных, имеет соответствующие привилегии.
Более подробно о подходящих правах см. раздел Права доступа для баз геоданных в SQL Server.
Примечание:
Не добавляйте пользователя sde к роли sysadmin.
- Убедитесь, что во время обновления никто не подключен к базе геоданных.
Чтобы увидеть список пользователей, подключенных к базе геоданных, откройте диалоговое окно Администрирование базы геоданных в ArcGIS Pro.
Теперь вы можете обновить базу геоданных.
Обновление базы геоданных
Для обновления базы геоданных можно использовать инструмент Обновить базу геоданных в ArcGIS Pro или скрипт Python на компьютере, где установлен клиент ArcGIS.
Используйте инструмент Обновить базу геоданных.
Откройте инструмент геообработки Обновить базу геоданных любым из способов, перечисленных ниже:
- группы инструментов Администрирование базы геоданных в наборе Управление данными
- Кнопка Запуск обновления на вкладке Общие в диалоговом окне Свойства базы данных в ArcGIS Pro
Текстовое поле Входная база геоданных будет предварительно заполнено информацией о подключении базы геоданных, если инструмент был запущен с помощью кнопки Обновить базу геоданных.
Esri рекомендует оставить выбранными обе опции: Проверка требований и Обновить базу геоданных. Таким образом, инструмент подтверждает, что предварительные условия для обновления выполнены, прежде чем продолжить обновление базы геоданных.
Проверка предварительных условий определяет наличие других активных подключений к базе геоданных, имеет ли подключенный пользователь права, достаточные для обновления базы геоданных, и может ли база данных поддерживать работу с XML-столбцами. Такая проверка также позволяет убедиться, что все наборы данных могут быть открыты и что используемые база данных и библиотеки одинаковой версии. Если какое-либо из предварительных условий не выполнено, работа инструмента завершается. Перед повторным запуском процедуры обновления вы должны исправить все проблемы.
Результаты этой проверки отображаются в диалоговом окне инструмента геообработки. Если проверка (или обновление) заканчивается сбоем, то результаты также записываются в файл GDBUpgrade.log, который расположен в папке c:\Users\<user name>\AppData\Local\ESRI\<ArcGIS product>.
Если все этапы проверки проходят успешно, инструмент запустит процесс обновления. Статус проверки предварительных условий и обновления отображается в диалоговом окне инструмента геообработки. Если обновление заканчивается сбоем, информация об этом записывается в файл GDBUpgrade.log. Дополнительная информация записывается в файл sde_setup.log, находящийся в системной директории TEMP.
Запустите скрипт
Для обновления базы геоданных используя скрипт Python, скопируйте один из этих примеров скриптов в текстовой редактор. Измените значения переменных, чтобы они соответствовали информации на вашем сайте.
- Если у вас есть существующий файл подключения к базе данных, который подключается в качестве администратора базы геоданных, скопируйте этот скрипт, вставьте его в текстовый редактор, измените его, чтобы использовать информацию, относящуюся к вашему сайту, сохраните и закройте файл и запустите его:
# 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")
- Если у вас нет файла подключения к базе данных на компьютере, на котором создается скрипт обновления, то вы можете скопировать следующий скрипт и предоставить специфичную для вашего сайта информацию в командной строке:
Например, если вы сохранили текстовый файл как gdbupgrade, экземпляр SQL Server называется prod9, база данных называется myssgdb, а вы подключаетесь с использованием аутентификации средствами ОС, введите в командной строке следующее:""" 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 --DBMS SQL_SERVER -i prod9 --auth OPERATING_SYSTEM_AUTH --upgrade TRUE -D myssgdb