Standard または Advancedのライセンスで利用可能。
データベースでは、インデックスを使用してクエリの述語フィルターに一致する行をすばやく識別します。ほとんどのジオデータベース システム テーブルにはインデックスが作成されていますが、バージョン対応エンタープライズ ジオデータベースの states、state_lineages、および mv_tables_modified システム テーブルでは大量の変更が発生する傾向があり、これらのテーブルのインデックスは高い頻度で再構築する必要があります。ジオデータベース管理者は、[インデックスの再構築 (Rebuild Indexes)] ジオプロセシング ツールを使用して、IBM Db2、Microsoft SQL Server、Oracle、または PostgreSQL に格納されたジオデータベースの各テーブルにインデックスを再構築できます。
大量の編集が行われる (トラディショナルの) バージョン対応登録されたジオデータベースでは、states、state_lineages、および mv_tables_modified の各テーブルのインデックスを夜間に更新できます。これを行うには、[インデックスの再構築 (Rebuild Indexes)] ツールを呼び出す スタンドアロン Python スクリプトを作成し、Windows タスク スケジューラまたは cron ジョブを使用して実行するように、このスクリプトのスケジュールを設定します。
インデックスの再構築 (Rebuild Indexes)ツールの使用
[インデックスの再構築 (Rebuild Indexes)] ツールを使用して states、state_lineages、および mv_tables_modified の各ジオデータベース システム テーブルのインデックスを再構築するには、以下の手順を実行します。
- ArcGIS Desktop クライアントを起動し、ジオデータベース管理者でジオデータベースに接続します。
- [インデックスの再構築 (Rebuild Indexes)] ジオプロセシング ツールを開きます。
このツールは [データ管理] ツールボックスの [ジオデータベース管理] ツールセットにあります。
- ステップ 1 で作成したデータベース接続を [入力データベース接続] として使用します。
- [システム テーブルを含む] チェックボックスをオンにします。
- [差分テーブルのみを再構築] をオフにします。
- [OK] (ArcMap) または [実行] (ArcGIS Pro) をクリックします。
Python スクリプトのスケジュール設定
スクリプトを実行するには、ジオデータベース管理者としてジオデータベースに接続できる必要があります。接続ファイル (*.sde) を作成して、このファイルをスクリプトから指定するか、接続情報を直接スクリプトに入力することができます。次に、Windows タスク スケジューラまたは Linux の cron デーモンを使用して、スクリプトの実行をスケジュールします。
- Python および以下のいずれかの ArcGIS 製品がインストールされているコンピューターに、次のスクリプトのいずれかをコピーします。
- ArcGIS Desktop (Desktop Standard または Desktop Advanced)
- ArcGIS Engine と Geodatabase Update エクステンション
- ArcGIS Server
環境に固有の情報に基づいて、スクリプトを変更します。
このサンプル スクリプトには、Oracle データベースに接続して、states、state_lineages、および mv_tables_modified システム テーブルのインデックスを更新するために必要な情報が含まれています。
# Name: RSysIdxOracle.py # Description: Rebuilds indexes on the states, state_lineages, # and mv_tables_modified tables in an enterprise geodatabase # in Oracle. # Import system modules import sys import arcpy import os # Provide connection information platform = ORACLE instance = "myserver/orcl" account_authentication = OPERATING_SYSTEM_AUTH | DATABASE_AUTH #Leave username and password blank if using OPERATING_SYSTEM_AUTH username = gdb_admin password = gdb_admin_password # Set local variables if os.name.lower() == "nt": slashsyntax = "\\" if os.environ.get("TEMP") == None: temp = "c:\\temp" else: temp = os.environ.get("TEMP") else: slashsyntax = "/" if os.environ.get("TMP") == None: temp = "/usr/tmp" else: temp = os.environ.get("TMP") Connection_File_Name = temp + slashsyntax + "connection.sde" # Check for the .sde file and delete it if present if os.path.exists(Connection_File_Name): os.remove(Connection_File_Name) #Variable defined within the script; other variable options commented out at the end of the line saveUserInfo = "SAVE_USERNAME" #DO_NOT_SAVE_USERNAME print ("Creating Database Connection File...") # Create Database Connection File # Usage: out_folder_path, out_name, database_platform, instance, account_authentication, username, password, save_user_pass arcpy.CreateDatabaseConnectionFile_management(temp, "connection.sde", platform, instance, account_authentication, username, password, saveUserInfo) # Rebuild indexes on system tables arcpy.RebuildIndexes_management(Connection_File_Name, "SYSTEM", "", "ALL") print ("Rebuild Complete")
このサンプル スクリプトには、オペレーティング システムで認証された dbo ユーザーを使用して SQL Server に接続し、sde_states、sde_state_lineages、および sde_mv_tables_modified システム テーブルのインデックスを更新するための情報が含まれています。
# Name: RSysIdxSqlServer.py # Description: Rebuilds indexes on the sde_states, sde_state_lineages, # and sde_mv_tables_modified tables in an enterprise geodatabase # in SQL Server. # Import system modules import sys import arcpy import os # Provide connection information platform = SQL_SERVER instance = sqlserver_instance_name account_authentication = OPERATING_SYSTEM_AUTH database = database_name # Set local variables if os.name.lower() == "nt": slashsyntax = "\\" if os.environ.get("TEMP") == None: temp = "c:\\temp" else: temp = os.environ.get("TEMP") else: slashsyntax = "/" if os.environ.get("TMP") == None: temp = "/usr/tmp" else: temp = os.environ.get("TMP") Connection_File_Name = temp + slashsyntax + "connection.sde" # Check for the .sde file and delete it if present if os.path.exists(Connection_File_Name): os.remove(Connection_File_Name) print ("Creating Database Connection File...") # Create Database Connection File # Usage: out_folder_path, out_name, database_platform, instance, account_authentication, database arcpy.CreateDatabaseConnectionFile_management(temp, "connection.sde", platform, instance, account_authentication, database) # Rebuild indexes on system tables arcpy.RebuildIndexes_management(Connection_File_Name, "SYSTEM", "", "ALL") print ("Rebuild Complete")
この例では、sde ユーザーは PostgreSQL データベースに接続します。
# Name: RSysIdxpg.py # Description: Rebuilds indexes on the sde_states, sde_state_lineages, # and sde_mv_tables_modified tables in an enterprise geodatabase # in PostgreSQL. # Import system modules import sys import arcpy import os # Provide connection information platform = POSTGRESQL instance = pg_cluster account_authentication = DATABASE_AUTH username = gdb_admin password = gdb_admin_password database = database_name # Set local variables if os.name.lower() == "nt": slashsyntax = "\\" if os.environ.get("TEMP") == None: temp = "c:\\temp" else: temp = os.environ.get("TEMP") else: slashsyntax = "/" if os.environ.get("TMP") == None: temp = "/usr/tmp" else: temp = os.environ.get("TMP") Connection_File_Name = temp + slashsyntax + "connection.sde" # Check for the .sde file and delete it if present if os.path.exists(Connection_File_Name): os.remove(Connection_File_Name) #Variable defined within the script; other variable options commented out at the end of the line saveUserInfo = "SAVE_USERNAME" #DO_NOT_SAVE_USERNAME print ("Creating Database Connection File...") # Create Database Connection File # Usage: out_folder_path, out_name, database_platform, instance, account_authentication, username, password, save_user_pass, database arcpy.CreateDatabaseConnectionFile_management(temp, "connection.sde", platform, instance, account_authentication, username, password, saveUserInfo, database) # Rebuild indexes on system tables arcpy.RebuildIndexes_management(Connection_File_Name, "SYSTEM", "", "ALL") print ("Rebuild Complete")
この例では、sde ユーザーは DB2 データベースに接続します。
# Name: RSysIdxDb2.py # Description: Rebuilds indexes on the states, state_lineages, # and mv_tables_modified tables in an enterprise geodatabase # in DB2. # Import system modules import sys import arcpy import os # Provide connection information platform = DB2 instance = db2gdb account_authentication = OPERATING_SYSTEM_AUTH | DATABASE_AUTH #Leave username and password blank if using OPERATING_SYSTEM_AUTH username = sde password = gdb_admin_password # Set local variables if os.name.lower() == "nt": slashsyntax = "\\" if os.environ.get("TEMP") == None: temp = "c:\\temp" else: temp = os.environ.get("TEMP") else: slashsyntax = "/" if os.environ.get("TMP") == None: temp = "/usr/tmp" else: temp = os.environ.get("TMP") Connection_File_Name = temp + slashsyntax + "connection.sde" # Check for the .sde file and delete it if present if os.path.exists(Connection_File_Name): os.remove(Connection_File_Name) #Variable defined within the script; other variable options commented out at the end of the line saveUserInfo = "SAVE_USERNAME" #DO_NOT_SAVE_USERNAME print ("Creating Database Connection File...") # Create Database Connection File # Usage: out_folder_path, out_name, database_platform, instance, account_authentication, username, password, save_user_pass arcpy.CreateDatabaseConnectionFile_management(temp, "connection.sde", platform, instance, account_authentication, username, password, saveUserInfo) # Rebuild indexes on system tables arcpy.RebuildIndexes_management(Connection_File_Name, "SYSTEM", "", "ALL") print ("Rebuild Complete")
- ユーザーの接続情報を含むようにスクリプトを変更した後、スクリプトを毎晩指定した時刻に実行するようにスケジュールします。
- Windows では、コントロール パネルからタスク スケジューラを開き、ウィザードを使用してタスクのスケジュールを設定します。実行するプログラムを指定するときに、作成した Python スクリプトを参照します。
- Linux では、スクリプトを実行する曜日と時刻の情報を含む cron テキスト ファイルを作成し、crontab プログラムを使用してファイルを cron に読み込みます。
たとえば、次の情報では、毎週水曜の午後 10 時に Python スクリプト (rsysidxdb2.py) を実行するように設定されます。:
0 22 * * 3 /usr/bin/rsysidxdb2.py
cron の使用方法については、Linux のインストールに付属の man ページをご参照ください。