Обновить базу геоданных (Управление данными)

Краткая информация

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

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

Использование

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

  • Вы не сможете обновить многопользовательские базы геоданных из ArcGIS AllSource с лицензией Basic.

  • Перед тем как вы обновите вашу многопользовательскую базу геоданных, обязательно нужно выполнить необходимые действия в вашей системе управления базами данных, включая создание резервной копии. Для Oracle и баз геоданных в PostgreSQL, которые используют тип ST_Geometry, вы должны загрузить папку DatabaseSupport из My Esri, чтобы получить новую библиотеку ST_Geometry. Другие шаги для подготовки к работе см. в следующих разделах:

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

  • Используйте предварительную проверку перед обновлением базы геоданных, чтобы понять, все ли готово. Если инструмент обнаружит какие-либо ошибки, то ошибка будет занесена в журнал истории геообработки. Это избавит вас от запуска обновления в случае его сбоя из-за несоблюдения одного из этих предварительных условий. В случае обнаружения несоответствий, следует решить проблему, затем запустить инструмент Обновить еще раз.

  • Обновление с бета-версий баз геоданных не поддерживается.

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

    • База геоданных доступна только для чтения.
    • Больше ни один пользователь не подключен к базе геоданных.
    • Текущее подключение не редактирует данные в базе геоданных.
    • Любую информацию из системных таблиц текущей базы геоданных можно открыть.
    • При использовании многопользовательских базы геоданных происходит анализ следующих ситуаций:
      • У подключившегося пользователя есть права доступа, необходимые для выполнения обновления базы геоданных.
      • Подключенный пользователь не редактирует данные в базе геоданных.
      • Ни один пользователь не подключен к базе геоданных.
      • В базе геоданных включена поддержка типов данных XML.
      • Любую информацию из системных таблиц текущей базы геоданных можно открыть.
      • Для баз геоданных в Oracle и в PostgreSQL которые используют тип ST_Geometry, он выявляет, есть ли у базы данных доступ к текущей версии библиотеки ST_Geometry.
  • Для многопользовательской базы геоданных, содержащей данные сервис-ориентированной версии, процесс обновления анализирует сервис-ориентированные версии и данные сервис-ориентированных версий на предмет несоответствий и записывает результаты анализа в файл журнала. Дополнительную информацию см. в разделе Как работает инструмент Обновить базу геоданных.

Параметры

ПодписьОписаниеТип данных
Входная база геоданных

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

Workspace
Выполнять предварительную проверку

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

  • Не отмечено – Предварительные проверки выполняться не будут. Это значение по умолчанию
  • Отмечено – Будет запущена предварительная проверка перед обновлением базы геоданных.
Boolean
Обновить базу геоданных

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

  • Не отмечено – база геоданных обновляться не будет. Это значение по умолчанию
  • Отмечено – база геоданных будет обновлена.
Boolean

Производные выходные данные

ПодписьОписаниеТип данных
Обновленная входная база геоданных

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

Workspace

arcpy.management.UpgradeGDB(input_workspace, input_prerequisite_check, input_upgradegdb_check)
ИмяОписаниеТип данных
input_workspace

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

Workspace
input_prerequisite_check

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

  • NO_PREREQUISITE_CHECKПредварительные проверки выполняться не будут.
  • PREREQUISITE_CHECKБудет запущена предварительная проверка перед обновлением базы геоданных. Это значение по умолчанию
Boolean
input_upgradegdb_check

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

  • NO_UPGRADEБаза геоданных обновляться не будет.
  • UPGRADEБаза геоданных будет обновлена. Это значение по умолчанию
Boolean

Производные выходные данные

ИмяОписаниеТип данных
out_workspace

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

Workspace

Пример кода

UpgradeGDB, пример 1 (окно Python)

Пример скрипта с запуском в окне Python для выполнения функции UpgradeGDB, которая обновляет файловую базу геоданных.

import arcpy
default_gdb = "C:/temp/Default.gdb"
arcpy.management.UpgradeGDB(default_gdb, "PREREQUISITE_CHECK", "UPGRADE")
UpgradeGDB, пример 2 (автономный скрипт)

Пример автономного скрипта Python для выполнения функции UpgradeGDB в среде Python с целью обновления файловой базы геоданных.

 
# Description: upgrade a geodatabase
 
# Import arcpy module
import arcpy

# Local variables:
default_gdb = "C:/temp/Default.gdb"

# Process: Upgrade Geodatabase
arcpy.management.UpgradeGDB(default_gdb, "PREREQUISITE_CHECK", "UPGRADE")
UpgradeGDB, пример 3 (автономный скрипт)

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

# Description: upgrade a geodatabase

# Import arcpy module
import arcpy

# Local variables:
default_gdb = "C:/connections/gdbconnection.sde"

# Process: Upgrade Geodatabase
arcpy.management.UpgradeGDB(default_gdb, "PREREQUISITE_CHECK", "UPGRADE")
UpgradeGDB, пример 4 (автономный скрипт)

Пример автономного скрипта Python для выполнения функции UpgradeGDB в среде Python, для обновления многопользовательской базы геоданных:

"""
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)

Связанные разделы