SAP HANA でのジオデータベースのアップグレード

Standard または Advancedのライセンスで利用可能。

エンタープライズ ジオデータベースをアップグレードする目的は、新機能と修正された不具合を利用するために、ジオデータベースのシステム テーブル、ストアド プロシージャ、タイプ、および機能を更新することです。

新しいバージョンの ArcGIS Pro または ArcGIS Server をインストールし、ジオデータベースをアップグレードします。

アップグレードの前に必要な手順を完了してから、[ジオデータベースのアップグレード (Upgrade Geodatabase)] ジオプロセシング ツールまたは Python スクリプトを使用してジオデータベースをアップグレードします。

アップグレードする前に

ジオデータベースを含め、エンタープライズ システムをアップグレードする場合は、まず計画を立てます。 開発サーバーまたはテスト サーバーで新しいバージョンをテストして、すべてのクライアント アプリケーションで動作することを確認します。

新しいシステムが想定したとおりに機能することが確認できたら、アップグレードのスケジュールを設定します。アップグレードに必要な人員を確保し、各担当者が割り当てられたタスクを実行するために必要な権限を持っていることを確認します。

ジオデータベースを以前のバージョンにダウングレードするための正式のメカニズムはないことに注意してください。 新しいバージョンにアップグレードした後でジオデータベースをダウングレードする場合は、元のデータベースをバックアップ ファイルから復元する必要があります。

以下は、ジオデータベースをアップグレードする前に実行する手順のチェックリストです。

  1. 使用する SAP HANA と ArcGIS のバージョンの組み合わせが Esri でサポートされているかどうかを確認するには、「ArcGIS の SAP HANA データベース要件」をご参照ください。

    SAP HANA データベース リリースがアップグレード対象の ArcGIS バージョンをサポートしている場合は、バージョン 10.6.x 以降のジオデータベースから直接アップグレードできます。

  2. ジオデータベースをアップグレードできるかどうかを確認します。 これを行うには、移行する ArcGIS Pro または ArcGIS Server のバージョンを、1 台のコンピューターにインストールします。
    • ArcGIS Pro から確認するには、[カタログ] ウィンドウでジオデータベースに接続し、[データベース プロパティ] を開きます。 アップグレードが可能かどうかを示すメッセージが [アップグレード ステータス] の下に表示されます。
    • ArcGIS Server から確認するには、ArcPy Describe 関数を使用し、ジオデータベースをアップグレードできるかどうかを判断します。 次に、ジオデータベースへの接続を作成し、ジオデータベースをアップグレードできるかどうかを確認する例を示します。
      # Open Python.
      cd /arcgis/server/tools
      ./python
      
      # Create a connection to the geodatabase. You must connect as the sde user.
      arcpy.CreateDatabaseConnection_management("/usr/tmp/",
                                                "egdb_connection.sde",
                                                "SAP HANA",
                                                sys.argv[1],
                                                "DATABASE_AUTH",
                                                "sde",
                                                sys.argv[2],
                                                "SAVE_USERNAME")
      
      # Import ArcPy and check the geodatabase release.
      import arcpy
      
      isCurrent = arcpy.Describe('/usr/tmp/egdb_connection.sde').currentRelease
      
      print isCurrent
      False が返された場合、ジオデータベースをアップグレードできます。 残りの手順を続行します。 True が返された場合、アップグレードする必要はありません。 以降の手順を省略してください。
  3. sde ユーザーにデータベースの catalog read 権限があることを確認します。
  4. データベースのバックアップを作成します。
  5. ArcGIS の外部にあるジオデータベース システム テーブルに追加したカスタム機能をすべて削除します。

    アップグレード手順は、ユーザーがシステム テーブルに加えたカスタマイズに対応できません。 このようなカスタマイズによってシステム テーブルのスキーマ変更が妨げられた場合、アップグレードが失敗します。

  6. アップグレード対象のジオデータベースへの接続が他に存在しないことを確認します。

これで、ジオデータベースをアップグレードできるようになりました。

ジオデータベースのアップグレード

ArcGIS Pro[ジオデータベースのアップグレード (Upgrade Geodatabase)] ツール、または ArcGIS Pro または ArcGIS Server コンピューターで実行する Python スクリプトを使用して、ジオデータベースをアップグレードできます。

ジオデータベースのアップグレード (Upgrade Geodatabase) ツールの使用

[ジオデータベースのアップグレード (Upgrade Geodatabase)] ジオプロセシング ツールは、次のいずれかから開きます。

  • [データ管理] ツールボックス内の [ジオデータベース管理] ツールセット
  • ArcGIS Pro 内の [データベース プロパティ] ダイアログ ボックスの [一般] タブにある [アップグレードの実行] ボタン

[データベース プロパティ] からツールを開いた場合、[入力ジオデータベース] テキスト ボックスにジオデータベース接続情報が事前に入力されています。

Esri では、[前提条件を確認] および [ジオデータベースをアップグレード] オプションをオンのままにすることをお勧めします。 これにより、ジオデータベースのアップグレードを続ける前に、アップグレードを行うための前提条件を満たしているかどうかが確認されます。

前提条件のチェックを実行してジオデータベースをアップグレードするには、sde ユーザーとしてジオデータベースに接続する必要があります。

前提条件のチェックでは、ジオデータベースへの他のアクティブな接続の検出、sde ユーザーとして接続されているかどうかの判断、sde ユーザーにジオデータベースをアップグレードするための十分な権限があることの確認 (catalog read) が行われます。 前提条件のいずれかが満たされていない場合、ツールは終了します。 アップグレードの手順を再度実行する前に、問題を修正する必要があります。

確認の結果は、ジオプロセシング ツールのダイアログ ボックスで報告されます。 チェックで不合格になった (またはアップグレードに失敗した) 場合は、c:\Users\<user name>\AppData\Local\ESRI\<ArcGIS product> フォルダーにある GDBUpgrade.log ファイルにも結果が書き込まれます。

すべてのチェックに合格した場合、ツールはアップグレードに進みます。 前提条件チェックとアップグレードの状態は、ジオプロセシング ツールの進行状況を示すダイアログ ボックスに表示されます。 アップグレードが失敗すると、情報が GDBUpgrade.log ファイルに書き込まれます。 システムの TEMP ディレクトリにある sde_setup.log ファイルに追加情報が書き込まれます。

スクリプトの実行

ジオデータベースをアップグレードするには、次のスクリプトをコピーしてテキスト ファイルに貼り付け、保存します。 コマンド ラインでサイト固有の情報を含むスクリプトを実行できます。

"""
Name: upgrade_gdb_for_sap_hana.py
Type upgrade_gdb_for_sap_hana.py -h or upgrade_gdb_sap_hana.py --help for usage
Author: Esri
"""

# 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 ("-i", dest="data_source", type="string", default="", help="SAP HANA ODBC data source name")
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")                   


# 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 = "DATABASE_AUTH"
	username = options.User.lower() 
	password = options.Password	
	do_upgrade = options.Upgrade
	database = ""
	database_type = "SAP HANA"
	instance = options.data_source
	
	
	# 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 for Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS for Server license.")
		sys.exit("Re-authorize ArcGIS before upgrading.")
	else:
		print ("\n" + product_license + " license available!  Continuing to upgrade...")
		arcpy.AddMessage("+++++++++")
	
	# Local variables
	Conn_File_NameT = instance + "_" + 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.management.CreateDatabaseConnection(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")
        			

	# Process: Upgrade geodatabase...
	try:
		if do_upgrade.lower() == "true":
			print ("Upgrading Geodatabase...\n")
			arcpy.management.UpgradeGDB(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.management.UpgradeGDB(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 として保存し、SAP HANA データ ソース名が mydata、sde パスワードが mysdepassword である場合、コマンド プロンプトで以下を入力します。

gdbupgrade --DBMS SAP HANA -i mydata -u sde -p mysdepassword --upgrade TRUE