在 Standard 或 Advanced 许可等级下可用。
创建地理数据库的方式取决于您站点的情况。请按照适用于您的情景的说明进行操作。
请注意,本主题适用于 Linux 服务器上的 PostgreSQL 安装。如果已在 Windows 服务器上安装了 PostgreSQL,请参阅在 Windows 上的 PostgreSQL 中创建地理数据库。
您是 PostgreSQL 和地理数据库管理员
如果您行使数据库管理员和地理数据库管理员的角色,并知晓这两个登录角色的密码,则可以使用创建企业级地理数据库地理处理工具或 Python 脚本在 PostgreSQL 中创建地理数据库。
创建企业级地理数据库工具可令您轻松设置地理数据库,因为此工具可创建数据库对象并授予您所需的权限。要达到此目的,应使用特定的默认设置。下面介绍了创建企业级地理数据库工具的用途和所使用的设置:
- 该工具使用 PostgreSQL 默认模板 (template1) 创建数据库。
如果需要使用其它模板创建数据库,例如,要使用 postgis 模板,则必须在运行此工具前创建数据库。然后便可以运行创建企业级地理数据库工具或脚本,并指定预先创建的数据库的名称。
- 该工具在数据库集群中创建 sde 登录角色并授予其超级用户身份。
sde 用户必须是超级用户才能创建地理数据库。
- 还会在数据库中创建 sde 方案。
地理数据库系统表、视图、函数和过程均存储在 sde 方案中。
- 将 sde 用户设置为 sde 方案的所有者并向公共角色授予 sde 方案的使用权限。
使用地理数据库的登录角色必须能够访问 sde 方案。地理数据库登录角色可能尚不存在,因此,该工具将向公共角色授予使用权限。创建地理数据库后,可以对该地理数据库的安全性进行加强,方法为撤消公共角色的 sde 方案使用权限并只向需要访问地理数据的登录组和登录角色授予使用权限。
- 该工具创建地理数据库。
首先,您必须安装 PostgreSQL 并配置数据库集群。
设置 PostgreSQL
按以下步骤设置 PostgreSQL 数据库集群以在 Linux 服务器上存储地理数据库:
-
获取并安装受支持的 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 目录。根据安装 PostgreSQL 方式的不同,lib 目录的位置会有所不同。要确定 PostgreSQL 安装程序的正确位置,请以 postgres 用户身份执行 pg_config。将 LD_LIBRARY_PATH 设置为所返回的 PKGLIBDIR 的值。
- PATH:设置 PATH 变量以包含 postgresql/bin。
- 在用于存储数据库的数据库集群中创建表空间。如果不创建表空间,则将使用 pg_default 表空间。
接下来,安装并配置 ArcGIS 客户端。
配置 ArcGIS 客户端
可从 ArcGIS for Desktop(Standard 或 Advanced)、具有 Geodatabase Update 扩展模块的 ArcGIS Engine Runtime 或 ArcGIS for Server 中运行 Python 脚本来创建地理数据库。如果您想要运行创建企业级地理数据库地理处理工具,而不运行脚本,请使用 ArcGIS for Desktop。
ArcGIS for Desktop 仅在 Windows 操作系统上受支持,因此应安装在不同于 PostgreSQL 的计算机上。可将 ArcGIS for Server 与 PostgreSQL 安装在同一计算机上;但是由于数据库管理系统是占用大量内存的应用程序,因此不建议您采用这种方式。
- 安装用于创建地理数据库的 ArcGIS 客户端。
通常,您可通过 ArcGIS for Server 或 ArcGIS for Desktop(Standard 或 Advanced)创建地理数据库。
- 如果要在 PostgreSQL 中将 ArcGIS for Server 和地理数据库配合使用,应为 ArcGIS 帐户设置或更改以下变量:
- SDEHOME:将此变量设置到 ArcGIS for Server 安装目录。
例如,如果 ArcGIS for Server 安装在 Linux 服务器的默认位置,应设置 export SDEHOME=/home/ags/arcgis/server。
- PG_HOME:将 PG_HOME 设置为 /opt/PostgreSQL/<version>。
在此示例中,为 PostgreSQL 9.3.9 安装程序设置 PG_HOME:export PG_HOME=/opt/PostgreSQL/9.3。
- 如果在 Windows 服务器上安装了 ArcGIS for Server,则应将 PG_HOME\bin 和 SDEHOME\bin 位置添加至 PATH 变量。
例如,在 Linux 上设置 export PATH=$PATH:$PG_HOME/bin:$SDEHOME/bin。
- 如果在 Linux 服务器上安装了 ArcGIS for Server,则应将 $PG_HOME/lib 和 $SDEHOME/lib 添加至 LD_LIBRARY_PATH 变量。
例如,设置 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PG_HOME/lib:$SDEHOME/lib。
- SDEHOME:将此变量设置到 ArcGIS for Server 安装目录。
现已安装 ArcGIS,您具有访问 st_geometry.so 文件的权限,此文件必须位于 PostgreSQL 服务器上。
放置 st_geometry.so 文件
必须将 st_geometry.so 文件放在 PostgreSQL lib 目录下,然后才能创建地理数据库。根据安装 PostgreSQL 方式的不同,Linux 上 lib 目录的位置可能会有所不同。要确定 PostgreSQL 安装程序的正确位置,请以 postgres 用户身份执行 pg_config。针对 PKGLIBDIR 返回的值是需要放置 st_geometry 库的 lib 目录。
st_geometry.so 文件随 ArcGIS 客户端一同安装。下表列出了每个版本的 st_geometry.so 库在 ArcGIS 客户端安装目录中的位置。必须使用特定于正在使用的 PostgreSQL 版本的 st_geometry.so 库。如果未将正确的 st_geometry.so 库放在 PostgreSQL lib 目录下,将无法创建地理数据库。
PostgreSQL 版本 | ArcGIS 客户端安装目录 |
---|---|
PostgreSQL 9.2.x | DatabaseSupport/PostgreSQL/9.2/Linux64 |
PostgreSQL 9.3.x | DatabaseSupport/PostgreSQL/9.3/Linux64 |
PostgreSQL 9.4.x | DatabaseSupport/PostgreSQL/9.4/Linux64 |
作为根用户,将 st_geometry.so 库文件从 ArcGIS DatabaseSupport 目录移动到 PostgreSQL lib 目录。
现在,您可以通过数据库集群和 ArcGIS 客户端创建地理数据库。
创建地理数据库
您可以运行 ArcGIS for Desktop(Standard 或 Advanced)中的创建企业级地理数据库工具、或运行 ArcGIS for Desktop(Standard 或 Advanced)、ArcGIS for Server 或 ArcGIS Engine 客户端中的 Python 脚本来创建地理数据库。
运行创建企业级地理数据库工具
如果您有权访问 ArcGIS for Desktop,则可运行地理处理工具来创建地理数据库。
- 启动 ArcMap 或 ArcCatalog。
- 打开创建企业级地理数据库工具。
您可以搜索或浏览到此工具,它位于“数据管理”工具箱的“地理数据库管理”工具集中。
- 从数据库平台下拉列表中选择 PostgreSQL。
- 在实例文本框中输入 PostgreSQL 服务器的名称。
- 在数据库文本框中,输入要创建的数据库(以包含地理数据库)的名称。
- 您必须以 postgres 超级用户的身份连接到数据库集群以创建数据库和其他对象;因此,数据库管理员文本框的默认值为 postgres。如果 postgres 超级用户具有其他名称,则在数据库管理员文本框中输入该名称。
- 在数据库管理员密码文本框中输入 postgres 超级用户的密码。
- 在地理数据库管理员密码文本框中输入地理数据库管理员用户 (sde) 的密码。
如果 sde 用户已存在于数据库集群中,则输入现有用户的密码即会在数据库中创建 sde 方案。如果用户尚不存在,则会在数据库集群中创建名为 sde 的用户(密码为指定的密码),并在数据库中创建相应的方案。向公共组角色授予对 sde 方案的使用权限。
- 如果拥有想用于数据库的默认表空间的预配置表空间,则在表空间名称文本框中输入其名称。
此工具不创建表空间;您必须指定一个现有表空间或将此文本框留空。如果不指定表空间,则以 pg_default 创建数据库。
- 要指定授权文件,请浏览到在授权 ArcGIS for Server Enterprise 时创建的密钥代码文件,并选择该文件。
将此文件写入 Windows 服务器的 \\Program Files\ESRI\License<release#>\sysgen 文件夹和 Linux 的 /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen 中。如果尚未执行此操作,则立即授权 ArcGIS for Server 创建此文件。
- 单击确定以运行工具。
有关地理数据库创建过程的日志文件 (GDBCreateGeodatabase<#>.log) 会写入为运行工具的计算机上的 %TEMP% 变量指定的目录中。
您现已在 PostgreSQL 中拥有一个地理数据库。
接下来,您可创建能够将数据加载到地理数据库中的用户。
运行 Python 脚本
您可以复制、保存并运行此处提供的脚本以在 ArcGIS for Desktop(Standard 或 Advanced)、ArcGIS for Server(Standard 或 Advanced)或(具有 Geodatabase Update 扩展模块的)ArcGIS Engine 客户端上创建地理数据库。
-
在 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 for 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 for Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS for 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 计算机运行的示例中,以 postgres 超级用户(密码为 N0pe3king!)的身份针对名为 pgprod 的数据库集群运行文件 create_gdb.py。在名为 gis 的现有表空间中创建名为 entgdb 的数据库,并创建 sde 登录角色(密码为 Tgdbst@rtsh3r3)。默认 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/License10.3/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\License10.3\sysgen\keycodes
您现已在 PostgreSQL 中拥有一个地理数据库。
接下来,您可创建能够将数据加载到地理数据库中的用户。
PostgreSQL 管理员创建数据库;地理数据库管理员创建地理数据库
如果地理数据库的创建人员无法获得数据库管理员(postgres 超级用户)的密码,数据库管理员可对数据库进行设置,然后地理数据库管理员可以 sde 登录角色连接到数据库并使用启用企业级地理数据库地理处理工具或 Python 脚本在数据库中创建地理数据库。
启用企业级地理数据库工具以数据库连接文件作为输入并在 sde 方案中创建地理数据库系统表、视图、函数和过程。要运行此工具,数据库管理员必须在 PostgreSQL 数据库集群中进行以下设置:
- 名为 sde 并具有超级用户身份的登录角色
- 数据库
- 数据库中的 sde 方案,所有者为 sde 登录角色
- st_geometry 库必须位于 PostgreSQL 安装目录下
设置 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 目录。根据安装 PostgreSQL 方式的不同,lib 目录的位置会有所不同。要确定 PostgreSQL 安装程序的正确位置,请以 postgres 用户身份执行 pg_config。将 LD_LIBRARY_PATH 设置为所返回的 PKGLIBDIR 的值。
- PATH:设置 PATH 变量以包含 postgresql/bin。
- 或者,可在用于存储数据库的数据库集群中创建表空间。
- 创建名为 sde 的登录角色并授予其超级用户身份。
- 创建要存储地理数据库的数据库。
- 在数据库中创建名为 sde 的方案并向 sde 登录角色授予该方案的权限。
- 您还必须将 st_geometry.so 库文件放在 PostgreSQL lib 目录下。此文件随 ArcGIS 客户端一同安装。安装 ArcGIS 客户端之后,便可请求地理数据库管理员提供与您的 PostgreSQL 安装程序相对应的正确文件。
具备正确的 st_geometry.so 文件后,作为根用户进行登录时应将其放在 PostgreSQL lib 目录下。请注意,根据安装 PostgreSQL 方式的不同,Linux 上 lib 目录的位置可能会有所不同。要确定 PostgreSQL 安装程序的正确位置,请以 postgres 用户身份执行 pg_config。针对 PKGLIBDIR 返回的值是需要放置 st_geometry 库的 lib 目录。
- 为地理数据库管理员提供数据库连接信息。
地理数据库管理员需要知道 sde 登录角色的数据库集群名称、数据库名称和密码。
数据库现已存在并进行了配置,地理数据库管理员可准备 ArcGIS 客户端并创建地理数据库。
配置 ArcGIS 客户端
地理数据库管理员应按以下步骤准备 ArcGIS 客户端以创建地理数据库:
- 安装用于创建地理数据库的 ArcGIS 客户端。
通常,您可通过 ArcGIS for Server 或 ArcGIS for Desktop(Standard 或 Advanced)创建地理数据库。
- 安装 ArcGIS 客户端之后,您可以访问 st_geometry.so 文件,数据库管理员需要完成对数据库集群的设置。为数据库管理员提供正确的文件。
下表列出了每个版本的 st_geometry.so 库在 ArcGIS 客户端安装目录中的位置。必须使用针对 PostgreSQL 版本(将在其中创建地理数据库)的 st_geometry.so 库。如果将不正确的 st_geometry.so 库版本放在 PostgreSQL lib 目录下,将无法创建地理数据库。
PostgreSQL 版本 ArcGIS 客户端安装目录 PostgreSQL 9.2.x
DatabaseSupport/PostgreSQL/9.2/Linux64
PostgreSQL 9.3.x
DatabaseSupport/PostgreSQL/9.3/Linux64
PostgreSQL 9.4.x
DatabaseSupport/PostgreSQL/9.4/Linux64
- 如果要在 PostgreSQL 中将 ArcGIS for Server 和地理数据库配合使用,应为 ArcGIS 帐户设置或更改以下变量:
- SDEHOME:将此变量设置到 ArcGIS for Server 安装目录。
例如,如果 ArcGIS for Server 安装在 Linux 服务器的默认位置,应设置export SDEHOME=/home/ags/arcgis/server。
- PG_HOME:将 PG_HOME 设置为 /opt/PostgreSQL/<version>。
在此示例中,为 PostgreSQL 9.2.2 安装程序设置 PG_HOME:export PG_HOME=/opt/PostgreSQL/9.2。
- 如果在 Windows 服务器上安装了 ArcGIS for Server,则应将 PG_HOME\bin 和 SDEHOME\bin 位置添加至 PATH 变量。
例如,在 Linux 上设置 export PATH=$PATH:$PG_HOME/bin:$SDEHOME/bin。
- 如果在 Linux 服务器上安装了 ArcGIS for Server,则应将 $PG_HOME/lib 和 $SDEHOME/lib 添加至 LD_LIBRARY_PATH 变量。
例如,设置 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PG_HOME/lib:$SDEHOME/lib。
- SDEHOME:将此变量设置到 ArcGIS for Server 安装目录。
ArcGIS 客户端已准备好连接到数据库并创建地理数据库。
创建地理数据库
地理数据库管理员可以在 ArcGIS for Desktop(Standard 或 Advanced)中运行启用企业级地理数据库工具,或在 ArcGIS for Desktop、ArcGIS for Server 或 ArcGIS Engine 客户端中运行 Python 脚本以在现有数据库中创建地理数据库。
运行启用企业级地理数据库工具
如果您有权访问 ArcGIS for Desktop,则可运行地理处理工具来创建地理数据库。
- 启动 ArcMap 或 ArcCatalog。
- 使用 sde 登录角色从目录树连接到 PostgreSQL 数据库。
务必在数据库连接对话框上保存用户密码。
- 右键单击数据库连接,然后单击启用地理数据库。
将打开启用企业级地理数据库工具,并且使用连接文件的名称和位置填充输入数据库连接字段。
- 浏览至授权 ArcGIS for Server 时创建的 ArcGIS for Server 授权文件,并将其添加到授权文件文本框中。
使用向导来授权 ArcGIS for Server 之后,密钥代码文件将被写入安装该软件的服务器。如果在 Linux 计算机上授权 ArcGIS for Server,则密钥代码文件在 /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release>/sysgen 中创建。如果在 Windows 服务器上进行授权,则文件在 Program Files\ESRI\License<release>\sysgen 中创建。如果尚未执行此操作,则授权 ArcGIS for Server 创建此文件。
- 单击确定以运行工具。
将在数据库中创建地理数据库。
有关地理数据库创建过程的日志文件 (GDBCreateGeodatabase<#>.log) 会写入为运行此工具的计算机上 %TEMP% 变量所指定的目录。如果在运行工具时出现任何问题,可查看此日志文件以解决这些问题。
接下来,您可创建能够将数据加载到地理数据库中的用户。
运行 Python 脚本
如果想要通过运行 ArcGIS for Server、ArcGIS for Desktop(Standard 或 Advanced)或 ArcGIS Engine 安装程序中的脚本创建地理数据库,则可使用此处提供的脚本。
- 在 ArcGIS for Server 计算机上创建文本文件,然后将以下脚本复制到此文件。
""" 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 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 ("--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 for Desktop Standard or Advanced, ArcGIS Engine with the Geodatabase Update extension, or ArcGIS for 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 扩展名保存该文件。
- 运行脚本,同时提供特定于您的站点的选项和信息。
在以下示例中,将针对数据库集群 pgprod 上的数据库 spdata 运行文件 enable_gdb.py。使用 sde 登录帐户通过密码 Tgdbst@rtsh3r3 进行连接。默认 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/License10.3/sysgen/keycodes
您现已在 PostgreSQL 中拥有一个地理数据库。
接下来,您可创建能够将数据加载到地理数据库中的用户。