Standard または Advancedのライセンスで利用可能。
ジオデータベースの設定方法は、使用している環境によって変わります。該当するシナリオの手順に従ってください。
このトピックは、Linux サーバーでの PostgreSQL のインストールに適用されます。PostgreSQL を Windows サーバーにインストールする場合は、「Windows での PostgreSQL のジオデータベースの作成」をご参照ください。
PostgreSQL およびジオデータベースの管理者である場合
データベース管理者とジオデータベース管理者の両方のロールを実行するため、両方のログイン ロールのパスワードを知っている場合、[エンタープライズ ジオデータベースの作成 (Create Enterprise Geodatabase)] ジオプロセシング ツールまたは Python スクリプトを使用して、PostgreSQL にジオデータベースを作成できます。
[エンタープライズ ジオデータベースの作成 (Create Enterprise Geodatabase)] ツールを使用すると、データベース オブジェクトが作成され、必要な権限が付与されるため、ジオデータベースの設定が簡単になります。これを実行する場合、特定のデフォルト設定を使用します。以下では、[エンタープライズ ジオデータベースの作成 (Create Enterprise Geodatabase)] ツールの機能と使用する設定について説明します。
- PostgreSQL のデフォルトのテンプレート (template1) を使用してデータベースを作成します。
別のテンプレートを使用してデータベースを作成する必要がある場合 (たとえば、postgis テンプレートを使用する場合) は、このツールを実行する前に、データベースを作成する必要があります。その後、[エンタープライズ ジオデータベースの作成 (Create Enterprise Geodatabase)] ツールまたはスクリプトを実行し、事前に作成したデータベースの名前を指定できます。
- sde ログイン ロールをデータベース クラスターに作成し、スーパーユーザー ステータスを付与します。
ジオデータベースを作成するには、sde ユーザーがスーパーユーザーである必要があります。
- sde スキーマをデータベースに作成します。
ジオデータベースのシステム テーブル、ビュー、関数、およびプロシージャは、sde スキーマに格納されます。
- sde ユーザーを sde スキーマの所有者として設定し、sde スキーマに対する使用権限を public ロールに付与します。
ジオデータベースを使用するログイン ロールは、sde スキーマにアクセスできる必要があります。ジオデータベースのログイン ロールがまだ存在しない可能性があるため、このツールは使用権限を public に対して付与します。ジオデータベースの作成後、sde スキーマに対する使用権限を public から取り消し、ジオデータベースにアクセスする必要のあるログイン グループおよびロールにのみ使用権限を付与することによって、ジオデータベースのセキュリティを厳しくすることができます。
- ジオデータベースを作成します。
まず、PostgreSQL をインストールし、データベース クラスターを構成する必要があります。
PostgreSQL のインストールと設定
Linux サーバーでジオデータベースを格納するように PostgreSQL データベース クラスターを設定するには、以下の手順に従います。
-
サポートされている PostgreSQL のバージョンを入手、インストールし、データベース クラスターを設定します。
My Esri から PostgreSQL のインストールをダウンロードできます。このインストールを使用する場合、ArcGIS で PostgreSQL を使用するのにデフォルト以外の設定は必要ありません。デフォルト以外の設定を使用する場合は、ロケールと場所の設定を変更します。あるいは、PostgreSQL のインストールを自分で入手することもできます。
PostgreSQL のインストールと構成の手順については PostgreSQL のドキュメントをご参照ください。
- 接続を受け入れるようにデータベース クラスターを設定します。
これには、pg_hba.conf ファイルを変更して、データベース クラスターがリモート接続を受け入れるようにすることが含まれます。
- postgres ユーザーに次の環境変数が正しく設定されていなければ設定します。
- PGDATA: これは、PostgreSQL のインストールによって設定されています。設定されていない場合、PostgreSQL データ ディレクトリの場所に設定します (この場所は、PostgreSQL のインストール ディレクトリにあります)。
- LD_LIBRARY_PATH: LD_LIBRARY_PATH 変数を PostgreSQL の lib ディレクトリに設定します。lib ディレクトリの場所は、PostgreSQL をインストールした方法によって異なります。PostgreSQL のインストールにおける正しい場所を調べるには、postgres ユーザーで pg_config を実行します。LD_LIBRARY_PATH を、PKGLIBDIR に対して返される値に設定します。
- PATH: postgresql/bin を含むように PATH 変数を設定します。
- 表領域を、データベースを格納するデータベース クラスターに作成します。表領域を作成しない場合は、pg_default 表領域を使用します。
次に、ArcGIS クライアントをインストールして構成します。
ArcGIS クライアントのインストール
ArcGIS Desktop (Desktop Standard または Desktop Advanced)、または ArcGIS Server (エンタープライズ エディション) をインストールし、Python スクリプトを実行してジオデータベースを作成できます。スクリプトの代わりに [エンタープライズ ジオデータベースの作成 (Create Enterprise Geodatabase)] ジオプロセシング ツールを実行する場合は、ArcGIS Desktop をインストールします。
ArcGIS Desktop は、Windows オペレーティング システムでしかサポートされていないため、PostgreSQL とは別のコンピューターにインストールします。ArcGIS Server を PostgreSQL と同じコンピューターにインストールすることもできますが、データベース管理システムはメモリを大量に消費するアプリケーションであるため、お勧めしません。
- ジオデータベースの作成元となる ArcGIS クライアントをインストールします。
通常は、ArcGIS Server または ArcGIS Desktop (Standard または Advanced) からジオデータベースを作成します。
- PostgreSQL 内のジオデータベースを ArcGIS Server で使用する場合、ArcGIS アカウントに対して次の変数を設定または変更します。
- SDEHOME: この変数を ArcGIS Server のインストール ディレクトリに設定します。
たとえば、ArcGIS Server が Linux サーバー上のデフォルトの場所にインストールされている場合は、「export SDEHOME=/home/ags/arcgis/server」と設定します。
- PG_HOME: PG_HOME を /opt/PostgreSQL/<version> に設定します。
この例では、PG_HOME が PostgreSQL 9.6.3 のインストール ディレクトリ「export PG_HOME=/opt/PostgreSQL/9.6.3」に設定されています。
- ArcGIS Server が Windows サーバーにインストールされている場合は、PG_HOME\bin および SDEHOME\bin の場所を PATH 変数に追加します。
たとえば、Linux では、「export PATH=$PATH:$PG_HOME/bin:$SDEHOME/bin」と設定します。
- ArcGIS Server が Linux サーバーにインストールされている場合は、$PG_HOME/lib および $SDEHOME/lib の場所を LD_LIBRARY_PATH 変数に追加します。
たとえば、「export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PG_HOME/lib:$SDEHOME/lib」と設定します。
- SDEHOME: この変数を ArcGIS Server のインストール ディレクトリに設定します。
これで ArcGIS がインストールされ、st_geometry.so ファイルにアクセスできるようになりました。このファイルは、PostgreSQL サーバーに配置する必要があります。
st_geometry.so ファイルの配置
ジオデータベースを作成するには、まず st_geometry.so ファイルを PostgreSQL の lib ディレクトリに配置する必要があります。Linux 上の lib ディレクトリの場所は、PostgreSQL をインストールした方法によって異なります。PostgreSQL のインストールにおける正しい場所を調べるには、postgres ユーザーで pg_config を実行します。PKGLIBDIR に対して返された値が、st_geometry ライブラリを配置する必要のある lib ディレクトリです。
st_geometry.so ファイルは、My Esri から、あるいは ArcMap または ArcGIS Server のインストール場所から取得できます。下の表は、インストール ディレクトリ内での、st_geometry.so ライブラリの各バージョンの場所を示しています。
PostgreSQL のバージョン | ArcGIS クライアントのインストール ディレクトリ |
---|---|
PostgreSQL 9.4.x (ArcMap と ArcGIS Server 10.6.1 では使用できません) | DatabaseSupport/PostgreSQL/9.4/Linux64 |
PostgreSQL 9.5.x | DatabaseSupport/PostgreSQL/9.5/Linux64 |
PostgreSQL 9.6.x | DatabaseSupport/PostgreSQL/9.6/Linux64 |
PostgreSQL 10.3 (ArcMap および ArcGIS Server 10.6.1 でのみ使用できます) | DatabaseSupport/PostgreSQL/10/Linux64 |
ルート ユーザーとして、使用している PostgreSQL のバージョンに固有の st_geometry.so ライブラリ ファイルを PostgreSQL の lib ディレクトリに配置します。有効な st_geometry.so ライブラリを PostgreSQL の lib ディレクトリに配置していない場合は、ジオデータベースを作成できません。
これで、ジオデータベースを作成するためのデータベース クラスターと ArcGIS クライアントの準備が整いました。
ジオデータベースの作成
ArcGIS Desktop (Desktop Standard または Desktop Advanced) から [エンタープライズ ジオデータベースの作成 (Create Enterprise Geodatabase)] ツールを実行するか、ArcGIS Desktop (Desktop Standard または Desktop Advanced)、ArcGIS Server (エンタープライズ エディション) クライアントから Python スクリプト を実行して、ジオデータベースを作成できます。
[エンタープライズ ジオデータベースの作成 (Create Enterprise Geodatabase)] ツールの実行
ArcGIS Desktop にアクセスできる場合は、ジオプロセシング ツールを実行してジオデータベースを作成できます。
以下の手順に従って、ArcMap で [エンタープライズ ジオデータベースの作成 (Create Enterprise Geodatabase)] ツールを使用してジオデータベースを作成します。
- ArcMap または ArcCatalog を起動します。
- [エンタープライズ ジオデータベースの作成 (Create Enterprise Geodatabase)] ツールを開きます。
このツールは、[データ管理] ツールボックスの [ジオデータベース管理] ツールセットで検索または選択できます。
- [データベース プラットフォーム] ドロップダウン リストから [PostgreSQL] を選択します。
- [インスタンス] テキスト ボックスに PostgreSQL サーバーの名前を入力します。
- [データベース] テキスト ボックスに、ジオデータベースを格納するデータベースの名前を入力します。
- データベースやその他のオブジェクトを作成するには、データベース クラスターに postgres スーパーユーザーとして接続する必要があります。そのため、[データベース管理者] テキスト ボックスの値は、デフォルトで postgres になっています。postgres スーパーユーザーの名前が異なる場合は、その名前を [データベース管理者] テキスト ボックスに入力します。
- [データベース管理者パスワード] テキスト ボックスに postgres スーパーユーザーのパスワードを入力します。
- [ジオデータベース管理者パスワード] テキスト ボックスに、sde ユーザーのパスワードを入力します。
sde ユーザーがデータベース クラスター内にすでに存在する場合、既存ユーザーのパスワードを入力すると、データベース内に sde スキーマが作成されます。ユーザーがまだ存在しない場合、sde ユーザーと指定したパスワードがデータベース クラスター内に作成され、対応するスキーマがデータベースに作成されます。PUBLIC グループ ロールに sde スキーマの USAGE 権限が付与されます。
- データベースのデフォルト表領域として使用する表領域が事前に構成されている場合は、[表領域名] テキスト ボックスにその名前を入力します。
このツールは表領域を作成しません。既存の表領域を指定するか、このテキスト ボックスは空白のままにしてください。表領域を指定しない場合、データベースは pg_default に作成されます。
- [認証ファイル] を指定するには、ArcGIS Server Enterprise を認証したときに作成されたキーコード ファイルを参照して選択します。
このファイルは、Windows サーバーの場合は \\Program Files\ESRI\License<release#>\sysgen フォルダー、Linux の場合は /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen に書き込まれます。このファイルを、ジオデータベースの作成元のクライアントにアクセスできる場所にコピーします。このファイルをまだ作成していない場合には、ArcGIS Server を認証して作成します。
- [OK] をクリックして、このツールを実行します。
ジオデータベース作成に関連するメッセージは、sde_setup.log ファイルにあります。このファイルは、ツールを実行したコンピューター上の %TEMP% 変数で指定されたディレクトリに作成されます。ジオデータベースの作成時に問題が発生した場合は、このファイルを確認して問題を解決します。
これで、ジオデータベースが PostgreSQL に作成されました。
次に、データをジオデータベースに読み込む権限のあるユーザーを作成できます。
Python スクリプトの実行
ジオデータベースを作成するには、下に示したスクリプトをコピーおよび保存して、ArcGIS Desktop (Desktop Standard または Desktop Advanced) または ArcGIS Server (エンタープライズ エディション) から実行します。
-
ArcGIS クライアント コンピューター上でテキスト ファイルを作成し、そのファイルに以下のスクリプトをコピーします。
""" Name: create_enterprise_gdb.py Description: Provide connection information to a DBMS instance and create an enterprise geodatabase. Type create_enterprise_gdb.py -h or create_enterprise_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 1.0 for " + arcpy.GetInstallInfo()['Version'] ) #Define help and options parser.add_option ("--DBMS", dest="Database_type", type="choice", choices=['SQLSERVER', 'ORACLE', 'POSTGRESQL', ''], 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 ("-D", dest="Database", type="string", default="none", help="Database name: Do not specify for Oracle") 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="Dbms_admin", type="string", default="", help="DBMS administrator user") parser.add_option ("-P", dest="Dbms_admin_pwd", type="string", default="", help="DBMS administrator password") parser.add_option ("--schema", dest="Schema_type", type="choice", choices=['SDE_SCHEMA', 'DBO_SCHEMA'], default="SDE_SCHEMA", help="Schema type applies to geodatabases in SQL Server only. Type SDE_SCHEMA to create geodatabase in SDE schema or type DBO_SCHEMA to create geodatabase in DBO schema. Default=SDE_SCHEMA") parser.add_option ("-u", dest="Gdb_admin", type="string", default="", help="Geodatabase administrator user name; Must always be sde for PostgreSQL, sde-schema geodatabases in SQL Server, and master sde geodatabase in Oracle") parser.add_option ("-p", dest="Gdb_admin_pwd", type="string", default="", help="Geodatabase administrator password") parser.add_option ("-t", dest="Tablespace", type="string", default="", help="Tablespace name; For PostgreSQL, type name of existing tablespace in which to store database. If no tablespace name specified, pg_default is used. For Oracle, type name of existing tablespace, or, if tablespace with specified name does not exist, it will be created and set as the default tablespace for the sde user. If no tablespace name is specified, SDE_TBS tablespace is created and set as sde user default. Tablespace name not supported for SQL Server.") parser.add_option ("-l", dest="Authorization_file", type="string", default="", help="Full path and name of authorization file; file created when ArcGIS Server Enterprise authorized, and stored in \\Program Files\ESRI\License<release#>\sysgen on Windows or /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen on Linux") # 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 database_type = options.Database_type.upper() instance = options.Instance database = options.Database.lower() account_authentication = options.Account_authentication.upper() dbms_admin = options.Dbms_admin dbms_admin_pwd = options.Dbms_admin_pwd schema_type = options.Schema_type.upper() gdb_admin = options.Gdb_admin gdb_admin_pwd = options.Gdb_admin_pwd tablespace = options.Tablespace license = options.Authorization_file if (database_type == "SQLSERVER"): database_type = "SQL_SERVER" if( database_type ==""): print(" \n%s: error: \n%s\n" % (sys.argv[0], "DBMS type (--DBMS) must be specified.")) parser.print_help() sys.exit(3) if (license == ""): print(" \n%s: error: \n%s\n" % (sys.argv[0], "Authorization file (-l) must be specified.")) parser.print_help() sys.exit(3) if(database_type == "SQL_SERVER"): if(schema_type == "SDE_SCHEMA" and gdb_admin.lower() != "sde"): print("\n%s: error: %s\n" % (sys.argv[0], "To create SDE schema on SQL Server, geodatabase administrator must be SDE.")) sys.exit(3) if (schema_type == "DBO_SCHEMA" and gdb_admin != ""): print("\nWarning: %s\n" % ("Ignoring geodatabase administrator specified when creating DBO schema...")) if( account_authentication == "DATABASE_AUTH" and dbms_admin == ""): print("\n%s: error: %s\n" % (sys.argv[0], "DBMS administrator must be specified with database authentication")) sys.exit(3) if( account_authentication == "OPERATING_SYSTEM_AUTH" and dbms_admin != ""): print("\nWarning: %s\n" % ("Ignoring DBMS administrator specified when using operating system authentication...")) else: if (schema_type == "DBO_SCHEMA"): print("\nWarning: %s %s, %s\n" % ("Only SDE schema is supported on", database_type, "switching to SDE schema..." )) if( gdb_admin.lower() == ""): print("\n%s: error: %s\n" % (sys.argv[0], "Geodatabase administrator must be specified.")) sys.exit(3) if( gdb_admin.lower() != "sde"): if (database_type == "ORACLE"): print("\nGeodatabase admin user is not SDE, creating user schema geodatabase on Oracle...\n") else: print("\n%s: error: %s for %s.\n" % (sys.argv[0], "Geodatabase administrator must be SDE", database_type)) sys.exit(3) if( dbms_admin == ""): print("\n%s: error: %s\n" % (sys.argv[0], "DBMS administrator must be specified!")) sys.exit(3) if (account_authentication == "OPERATING_SYSTEM_AUTH"): print("Warning: %s %s, %s\n" % ("Only database authentication is supported on", database_type, "switching to database authentication..." )) # Get the current product license product_license=arcpy.ProductInfo() # Checks required license level if product_license.upper() == "ARCVIEW" or product_license.upper() == 'ENGINE': print("\n" + product_license + " license found!" + " Creating an enterprise geodatabase requires an ArcGIS Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS Server license.") sys.exit("Re-authorize ArcGIS before creating enterprise geodatabase.") else: print("\n" + product_license + " license available! Continuing to create...") arcpy.AddMessage("+++++++++") try: print("Creating enterprise geodatabase...\n") arcpy.CreateEnterpriseGeodatabase_management(database_platform=database_type,instance_name=instance, database_name=database, account_authentication=account_authentication, database_admin=dbms_admin, database_admin_password=dbms_admin_pwd, sde_schema=schema_type, gdb_admin_name=gdb_admin, gdb_admin_password=gdb_admin_pwd, tablespace_name=tablespace, authorization_file=license) for i in range(arcpy.GetMessageCount()): arcpy.AddReturnMessage(i) arcpy.AddMessage("+++++++++\n") except: for i in range(arcpy.GetMessageCount()): arcpy.AddReturnMessage(i) #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)
- *.py 拡張子を付けてファイルを保存します。
- ユーザーの環境に固有のオプションと情報を指定して、スクリプトを実行します。
以下の例では、Linux コンピューターから、pgprod という名前のデータベース クラスターに対して、パスワード N0pe3king! を持つ postgres スーパーユーザーで create_gdb.py ファイルを実行しています。entgdb という名前のデータベースが gis という名前の既存の表領域に作成され、パスワード Tgdbst@rtsh3r3 を持つ sde ログイン ロールが作成されます。ジオデータベースを認証するために、ArcGIS Server のデフォルトの場所のキーコード ファイルが指定されます。
./create_gdb.py --DBMS POSTGRESQL -i pgprod -D entgdb --auth DATABASE_AUTH -U postgres -P N0pe3king! -u sde -p Tgdbst@rtsh3r3 -t gis -l '/usr/arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License/sysgen/keycodes'
次の例では、同じスクリプトが Windows コンピューターから実行されます。
create_gdb.py --DBMS POSTGRESQL -i pgprod -D entgdb --auth DATABASE_AUTH -U postgres -P N0pe3king! -u sde -p Tgdbst@rtsh3r3 -t gis -l '\\Program Files\ESRI\License\sysgen\keycodes'
これで、ジオデータベースが PostgreSQL に作成されました。
ジオデータベース作成に関連するメッセージは、sde_setup.log ファイルにあります。このファイルは、このスクリプトを実行した TEMP 変数または TMP 変数で指定されたディレクトリに作成されます。ジオデータベースの作成時に問題が発生した場合は、このファイルを確認して問題を解決します。
次に、データをジオデータベースに読み込む権限のあるユーザーを作成できます。
PostgreSQL 管理者がデータベースを作成し、ジオデータベース管理者がジオデータベースを作成する場合
ジオデータベースを作成するユーザーがデータベース管理者 (postgres スーパーユーザー) のパスワードを使用できない場合は、データベース管理者がデータベースを設定し、その後、ジオデータベース管理者が sde ログイン ロールを使用してデータベースに接続し、[エンタープライズ ジオデータベースの有効化 (Enable Enterprise Geodatabase)] ジオプロセシング ツールまたは Python スクリプトを使用してジオデータベースをデータベースに作成できます。
[エンタープライズ ジオデータベースの有効化 (Enable Enterprise Geodatabase)] ツールは、データベース接続ファイルを入力として受け取り、ジオデータベースのシステム テーブル、ビュー、関数、プロシージャを sde スキーマに作成します。このツールを実行するには、まず、データベース管理者が PostgreSQL データベース クラスターで以下を設定する必要があります。
- スーパーユーザー ステータスを持つ sde という名前のログイン ロール
- データベース
- データベース内で sde ログイン ロールが所有する sde スキーマ
- st_geometry ライブラリが PostgreSQL のインストール ディレクトリに存在する必要がある
すべてのデータベース オブジェクト名には、小文字のみを使用する必要があります。
PostgreSQL および st_geometry ライブラリをインストールして構成します。
ジオデータベースを格納するには、まず、データベース管理者が PostgreSQL を準備する必要があります。
以下の手順では、データベース管理者が Linux サーバー上で PostgreSQL データベース クラスターを設定します。なお、データベース オブジェクト名 (データベース、スキーマ、およびログイン ロール) には、小文字のみを使用する必要があります。
-
サポートされている PostgreSQL のバージョンを入手、インストールし、データベース クラスターを設定します。
My Esri から PostgreSQL のインストールをダウンロードできます。このインストールを使用する場合、ArcGIS で PostgreSQL を使用するのにデフォルト以外の設定は必要ありません。デフォルト以外の設定を使用する場合は、ロケールと場所の設定を変更します。あるいは、PostgreSQL のインストールを自分で入手することもできます。
PostgreSQL のインストールと構成の手順については PostgreSQL のドキュメントをご参照ください。
- 接続を受け入れるようにデータベース クラスターを設定します。
これには、pg_hba.conf ファイルを変更して、データベース クラスターがリモート接続を受け入れるようにすることが含まれます。
- postgres ユーザーに次の環境変数が正しく設定されていなければ設定します。
- PGDATA: これは、PostgreSQL のインストールによって設定されています。設定されていない場合、PostgreSQL データ ディレクトリの場所に設定します (この場所は、PostgreSQL のインストール ディレクトリにあります)。
- LD_LIBRARY_PATH: LD_LIBRARY_PATH 変数を PostgreSQL の lib ディレクトリに設定します。lib ディレクトリの場所は、PostgreSQL をインストールした方法によって異なります。PostgreSQL のインストールにおける正しい場所を調べるには、postgres ユーザーで pg_config を実行します。LD_LIBRARY_PATH を、PKGLIBDIR に対して返される値に設定します。
- PATH: postgresql/bin を含むように PATH 変数を設定します。
- 必要に応じて、表領域を、データベースを格納するデータベース クラスターに作成できます。
- sde という名前のログイン ロールを作成し、スーパーユーザー ステータスを付与します。
- ジオデータベースを格納するデータベースを作成します。
- sde という名前のスキーマをデータベースに作成し、そのスキーマに対する権限を sde ログイン ロールに付与します。
- st_geometry.so ライブラリ ファイルを PostgreSQL の lib ディレクトリに配置する必要もあります。st_geometry.so ファイルは、My Esri からダウンロードできます。必ず、使用する PostgreSQL のバージョンに適合するライブラリをダウンロードしてください。間違ったライブラリを使用すると、ジオデータベース作成が失敗します。
正しい st_geometry.so ファイルの入手後、root ユーザーとしてログインして、そのファイルを PostgreSQL の lib ディレクトリに配置します。Linux 上の lib ディレクトリの場所は PostgreSQL をインストールした方法によって異なることに注意してください。PostgreSQL のインストールにおける正しい場所を調べるには、postgres ユーザーで pg_config を実行します。PKGLIBDIR に対して返された値が、st_geometry ライブラリを配置する必要のある lib ディレクトリです。
- 必ず st_geometry.so ファイルに対するアクセス権を 755 に設定してください。設定しない場合、sde ユーザーはライブラリにアクセスできず、ジオデータベースを作成することができません。
- ジオデータベース管理者にデータベース接続情報を提供します。
ジオデータベース管理者は、データベース クラスター名、データベース名、および sde ログイン ロールのパスワードを知る必要があります。
これで、データベースが存在し、構成が行われ、ジオデータベース管理者が ArcGIS クライアントを準備してジオデータベースを作成できるようになりました。
ArcGIS クライアントのインストール
ジオデータベースを作成するには、ジオデータベース管理者が以下の手順に従って ArcGIS クライアントを準備する必要があります。
- ジオデータベースの作成元となる ArcGIS クライアントをインストールします。
通常は、ArcGIS Server または ArcGIS Desktop (Desktop Standard または Desktop Advanced) からジオデータベースを作成します。
- PostgreSQL 内のジオデータベースを ArcGIS Server で使用する場合、ArcGIS アカウントに対して次の変数を設定または変更します。
- SDEHOME: この変数を ArcGIS Server のインストール ディレクトリに設定します。
たとえば、ArcGIS Server が Linux サーバー上のデフォルトの場所にインストールされている場合は、「export SDEHOME=/home/ags/arcgis/server」と設定します。
- PG_HOME: PG_HOME を /opt/PostgreSQL/<version> に設定します。
この例では、PG_HOME が PostgreSQL 10.3 のインストール ディレクトリ「export PG_HOME=/opt/PostgreSQL/10.3」に設定されています。
- ArcGIS Server が Windows サーバーにインストールされている場合は、PG_HOME\bin および SDEHOME\bin の場所を PATH 変数に追加します。
たとえば、Linux では、「export PATH=$PATH:$PG_HOME/bin:$SDEHOME/bin」と設定します。
- ArcGIS Server が Linux サーバーにインストールされている場合は、$PG_HOME/lib および $SDEHOME/lib の場所を LD_LIBRARY_PATH 変数に追加します。
たとえば、「export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PG_HOME/lib:$SDEHOME/lib」と設定します。
- SDEHOME: この変数を ArcGIS Server のインストール ディレクトリに設定します。
ArcGIS クライアントをデータベースに接続し、ジオデータベースを作成する準備が整いました。
ジオデータベースの作成
ジオデータベース管理者は、ArcGIS Desktop (Desktop Standard または Desktop Advanced) から [エンタープライズ ジオデータベースの有効化 (Enable Enterprise Geodatabase)] ツールを実行するか、ArcGIS Desktop、ArcGIS Server、クライアントから Python スクリプトを実行して、既存のデータベース内にジオデータベースを作成できます。
[エンタープライズ ジオデータベースの有効化 (Enable Enterprise Geodatabase)] ツールの実行
ArcGIS Desktop にアクセスできる場合は、ジオプロセシング ツールを実行してジオデータベースを作成できます。
以下の手順に従って、ArcMap で [エンタープライズ ジオデータベースの有効化 (Enable Enterprise Geodatabase)] ツールを使用してジオデータベースを作成します。
- ArcMap または ArcCatalog を起動します。
- sde ログイン ロールを使用してカタログ ツリーからPostgreSQL データベースに接続します。
[データベース接続] ダイアログ ボックスで、必ずユーザーのパスワードを保存してください。
- データベース接続を右クリックして、[ジオデータベースの有効化] をクリックします。
[エンタープライズ ジオデータベースの有効化 (Enable Enterprise Geodatabase)] ツールが開き、[入力データベース接続] フィールドに接続ファイルの名前と場所が入力されます。
- ArcGIS Server を認証したときに作成された ArcGIS Server の認証ファイルを選択し、それを [認証ファイル] テキスト ボックスに追加します。
ウィザードを使用して ArcGIS Server を認証する際に、ソフトウェアがインストールされているサーバーにキーコード ファイルが書き込まれます。Linux ボックス上で ArcGIS Server を認証した場合、このキーコード ファイルは /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release>/sysgen に作成されています。Windows サーバー上で認証した場合、このファイルは Program Files\ESRI\License<release>\sysgen に作成されています。まだ作成していない場合には、ArcGIS Server を認証して作成します。
- [OK] をクリックしてツールを実行します。
データベース内にジオデータベースが作成されます。
ジオデータベース作成に関連するメッセージは、sde_setup.log ファイルにあります。このファイルは、ツールを実行したコンピューター上の %TEMP% 変数で指定されたディレクトリに作成されます。ジオデータベースの作成時に問題が発生した場合は、このファイルを確認して問題を解決します。
次に、データベース管理者はログイン ロールをデータベースに作成できます。
Python スクリプトの実行
ArcGIS Server、または ArcGIS Desktop (Desktop Standard または Desktop Advanced) のインストールからスクリプトを実行してジオデータベースを作成する場合、下に示すスクリプトを使用できます。
- ArcGIS クライアント コンピューター上でテキスト ファイルを作成し、そのファイルに以下のスクリプトをコピーします。
""" Name: enable_enterprise_gdb.py Description: Provide connection information to an enterprise database and enable enterprise geodatabase. Type enable_enterprise_gdb.py -h or enable_enterprise_gdb.py --help for usage """ # 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 ("--DBMS", dest="Database_type", type="choice", choices=['SQLSERVER', 'ORACLE', 'POSTGRESQL', 'DB2','INFORMIX','DB2ZOS', ''], default="", help="Type of enterprise DBMS: SQLSERVER, ORACLE, POSTGRESQL, DB2, INFORMIX, or DB2ZOS.") 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 ("-D", dest="Database", type="string", default="none", help="Database name: Not required for Oracle") parser.add_option ("-l", dest="Authorization_file", type="string", default="", help="Full path and name of authorization file") # 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 database_type = options.Database_type.upper() instance = options.Instance account_authentication = options.account_authentication.upper() username = options.User.lower() password = options.Password database = options.Database.lower() license = options.Authorization_file if( database_type ==""): print " \n%s: error: \n%s\n" % (sys.argv[0], "DBMS type (--DBMS) must be specified.") parser.print_help() sys.exit(3) if (license == ""): print " \n%s: error: \n%s\n" % (sys.argv[0], "Authorization file (-l) must be specified.") parser.print_help() sys.exit(3) if (database_type == "SQLSERVER"): database_type = "SQL_SERVER" # Get the current product license product_license=arcpy.ProductInfo() if (license == ""): print " \n%s: error: %s\n" % (sys.argv[0], "Authorization file (-l) must be specified.") parser.print_help() sys.exit(3) # Checks required license level if product_license.upper() == "ARCVIEW" or product_license.upper() == 'ENGINE': print "\n" + product_license + " license found!" + " Enabling enterprise geodatabase functionality requires an ArcGIS Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS Server license." sys.exit("Re-authorize ArcGIS before enabling an enterprise geodatabase.") else: print "\n" + product_license + " license available! Continuing to enable..." 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") # Process: Enable geodatabase... try: print "Enabling Enterprise Geodatabase...\n" arcpy.EnableEnterpriseGeodatabase_management(input_database=Connection_File_Name_full_path, authorization_file=license) 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)
- *.py 拡張子を付けてファイルを保存します。
- ユーザーの環境に固有のオプションと情報を指定して、スクリプトを実行します。
以下の例では、enable_gdb.py ファイルを、データベース クラスター pgprod 上のデータベース spdata に対して実行しています。パスワード Tgdbst@rtsh3r3 を使用して sde ログインで接続が確立されます。ジオデータベースを認証するために、ArcGIS Server のデフォルトの場所のキーコード ファイルが指定されます。
./enable_gdb.py --DBMS POSTGRESQL -i pgprod --auth DATABASE_AUTH -u sde -p Tgdbst@rtsh3r3 -D spdata -l '/usr/arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License/sysgen/keycodes'
これで、ジオデータベースが PostgreSQL に作成されました。
ジオデータベース作成に関連するメッセージは、sde_setup.log ファイルにあります。このファイルは、スクリプトを実行したコンピューター上の TEMP 変数または TMP 変数で指定されたディレクトリに作成されます。ジオデータベースの作成時に問題が発生した場合は、このログ ファイルを確認して問題を解決してください。
次に、データベース管理者はログイン ロールをデータベースに作成できます。