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

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

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

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

Примечание:

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

Если вы обновляете базу геоданных с помощью ArcGIS Pro 3.2, версия обновленной базы геоданных будет 11.2.0.

Перед обновлением выполните необходимые шаги, а затем обновите базу геоданных с помощью инструмента геообработки Обновить базу геоданных или скрипта Python.

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

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

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

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

  • Обновления баз геоданных пользовательских схем больше не поддерживаются. В настоящее время вы можете обновить базу геоданных sde, но не можете обновить базы геоданных пользовательских схем. Вы все еще можете подключиться к базам геоданных пользовательских схем, но не можете обновить их.
  • Обновления с бета-или предварительных версий программного обеспечения не поддерживаются.
  • Если для версии ArcGIS, до которой вы будете выполнять обновление, поддерживается версия вашей базы данных, то база геоданных может быть сразу обновлена с версии 10.8.1, 10.9.x или 11.x.

    Чтобы перейти с более ранней версии базы геоданных, вы должны сначала обновить базу геоданных до 10.8.1, 10.9.x или 11.0. Следуйте инструкциям по обновлению этой версии перед обновлением до текущей версии базы геоданных.

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

    Например, если у вас есть база геоданных 10.7.1.x в Oracle 11.2.0.4, обновите эту базу данных до более новой версии, которая поддерживается для ArcGIS 10.7.1, например, Oracle 12.1.02.

    Затем обновите базу геоданных до версии, поддерживающей Oracle 12.1.02 и поддерживающей версию Oracle, которая также поддерживается в текущей версии ArcGIS. Например, вы можете обновить базу геоданных до версии 10.9.1. Затем выполните обновление Oracle до версии, которая поддерживается для текущей версии ArcGIS. Теперь вы можете обновить эту базу геоданных до текущей версии ArcGIS.

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

  • Вы не можете обновить базу геоданных в базе данных Oracle 12c. Сначала обновите до поддерживаемой версии Oracle, а затем можете обновить базу геоданных.
  • Не существует формального механизма для перехода на более раннюю версию базы геоданных. Если после обновления на более новую версию вы хотите вернуться на старую версию базы геоданных, вы можете восстановить базу данных из файла резервной копии, которая содержит предыдущую версию базы геоданных.
  • Убедитесь, что для параметра Oracle OPEN_CURSORS задано большое значение, например, 2000, и что эта настройка синхронизирована с базой геоданных.
  • После обновления базы геоданных до текущей версии она будет использовать только глобальные временные таблицы для таблиц файлов журналов.

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

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

    Чтобы сделать это, установите версию клиента ArcGIS, на которую вы хотите перейти, на одной машине. Если вы установите ArcGIS Pro, то вы сможете подключиться к базе геоданных и открыть диалоговое окно Свойства базы данных, чтобы определить, возможно ли обновление этой базы геоданных. Если вы установите ArcGIS Server (enterprise edition), то можно использовать функцию ArcPy Describe, чтобы определить, возможно ли повышение версии для этой базы геоданных.

    # Open Python.
    cd /arcgis/server/tools
    ./python
    
    # Create a connection to the geodatabase.
    arcpy.CreateDatabaseConnection_management("/tmp/",
                                              "egdb_connection.sde",
                                              "ORACLE",
                                              "myogdb",
                                              "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. Убедитесь, что компонент Oracle Text установлен.

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

    Чтобы понять, установлен ли он, запустите следующее SQL-выражение, выполнив перед этим вход под именем SYSTEM или под учетной записью пользователя с правами администратора данной базы данных:

    SELECT owner, object_name
    FROM all_objects
    WHERE object_type = 'PACKAGE'
      AND object_name = 'CTX_DDL';
    Если не будет возвращено ни одной записи, значит, компонент Text не установлен. Запустите файл установки Oracle, чтобы установить компонент Text.

  4. Создайте резервную копию базы данных.
  5. Удалите все пользовательские функции, которые вы могли добавить в системные таблицы базы геоданных за пределами ArcGIS, например, триггеры или дополнительные индексы.

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

  6. Предоставьте администратору базы геоданных права, необходимые для обновления базы данных.

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

  7. Если вы обращаетесь к данным непосредственно из SQL, замените существующую библиотеку st_shapelib на сервере Oracle библиотекой новой версии.

    Загрузите файл new st_shapelib из My Esri.

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

    Если вы разместили библиотеку на сервере Oracle в другой директории, необходимо перенастроить extproc и указать местоположение новой библиотеки, после чего перезапустить прослушиватель Oracle. Более подробную информацию см. в разделе Настройка extproc для доступа к ST_Geometry в Oracle.

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

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

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

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

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

Примечание:

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

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

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

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

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

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

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

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

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

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

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

  • Если у вас есть файл существующего подключения к базе данных, который использует подключение в качестве пользователя 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 ORACLE -i myogdb --auth DATABASE_AUTH -u sde -p mysdepassword --upgrade TRUE