创建企业级地理数据库 (数据管理)

摘要

可创建数据库、存储位置,以及作为地理数据库管理员和地理数据库所有者的数据库用户。 其功能会根据具体使用的数据库管理系统而有所不同。 此工具授予地理数据库管理员创建地理数据库所需的权限,并可以在数据库中创建地理数据库。

使用情况

  • 下表列出了对于每种类型的数据库管理系统的工具功能:

    函数数据库

    创建数据库

    PostgreSQLMicrosoft SQL Server

    创建表空间

    Oracle

    在数据库中创建地理数据库管理员用户

    OraclePostgreSQLSQL Server

    如果您创建 sde 方案地理数据库,则此工具仅在 SQL Server 中创建用户。

    授予地理数据库管理员创建地理数据库、升级地理数据库和移除地理数据库所需的权限。

    OraclePostgreSQL

    授予地理数据库管理员创建地理数据库和移除地理数据库所需的权限。

    SQL Server(如果创建 sde 方案地理数据库)

    授予地理数据库管理员使用 Oracle Data Pump 导入数据所需的权限

    Oracle

    在指定数据库中创建地理数据库

    OraclePostgreSQLSQL Server

  • 用来创建地理数据库的计算机上必须安装有 ArcGIS Desktop(Standard 或 Advanced)、ArcGIS AllSource(Standard 或 Advanced)、或者 ArcGIS Server。 若您使用的是 OracleSQL Server,则必须在安装了 ArcGIS 客户端的计算机上安装并配置数据库管理系统客户端

  • 必须从 My Esri 下载 DatabaseSupport.zip (Windows) 或 DatabaseSupport.tar (Linux) 文件,以获取 st_shapelib (Windows) 或 libst_shapelib (Linux) 库,之后方可在 Oracle 中创建地理数据库。 将库放置在 Oracle 服务器上。 必须针对安装 Oracle 的操作系统复制正确的库。

  • 在创建地理数据库之前,您必须确保空间类型可用于 PostgreSQL 数据库集群。 要使用 ST_Geometry 类型,必须从 My Esri 下载 DatabaseSupport.zip (Windows) 或 DatabaseSupport.tar (Linux) 文件,以获取 st_geometry 库。 将库放置在 PostgreSQL 服务器的 %PostgreSQL%\lib 目录 (Windows) 或 $PKGLIBDIR 目录 (Linux) 中。 必须针对所使用 PostgreSQL 的版本和安装 PostgreSQL 的操作系统复制正确的库。 要使用 PostGIS 空间类型,必须在 PostgreSQL 数据库集群中安装 PostGIS

  • 数据库服务不支持此工具。

  • PostgreSQLOracle 中创建地理数据库后,将无法重命名存储该地理数据库的数据库。 数据库名称存储在地理数据库系统表中,并用于完全限定表和要素类的名称;使用数据库工具更改数据库名称会导致无法访问地理数据库数据。

  • 要为获得 ArcGIS Enterprise on Kubernetes 许可的企业级地理数据库生成许可文件,请使用 exportGeodatabaseLicense REST 操作

参数

标注说明数据类型
数据库平台

指定要建立连接以创建地理数据库的数据库管理系统类型。

  • Oracle将连接到 Oracle 实例。
  • PostgreSQL将连接到 PostgreSQL 数据库集群。
  • SQL Server将连接到 Microsoft SQL Server 实例。
String
实例

实例名称。

对于 SQL Server,请提供 SQL Server 实例名称。 不支持区分大小写或二进制排序规则 SQL Server 实例。

对于 Oracle,请提供 TNS 名称或 Oracle Easy Connection 字符串。

对于 PostgreSQL,请提供安装 PostgreSQL 的服务器的名称。

String
数据库
(可选)

数据库名称。

此参数对 PostgreSQLSQL Server 有效。 您可以提供现有的、预先配置的数据库名称,也可以输入此工具要创建的数据库名称。

如果该工具在 SQL Server 中创建数据库,则文件大小可与为 SQL Server 模型数据库定义的大小相同,或者对于 .mdf 文件为 500 MB,对于 .ldf 文件为 125 MB,取较大值。 .mdf 文件和 .ldf 文件均可在数据库服务器上的默认 SQL Server 位置上创建。 请勿命名数据库 sde。

如果该工具在 PostgreSQL 中创建数据库,则其会使用 template1 数据库作为您数据库的模板。 如果您需要使用其他模板(例如,您需要对 PostGIS 可用的模板),您必须在运行此工具之前创建数据库或提供现有数据库的名称。 数据库名称请始终使用小写字符。 如果您使用了大写字母,则工具会将其转换为小写形式。

String
操作系统身份验证
(可选)

指定数据库连接将使用的身份验证类型。

  • 选中 - 将使用操作系统身份验证。 您向运行此工具的计算机提供的登录信息将用于验证数据库连接。 如果数据库管理系统没有配置为允许操作系统身份验证,则身份验证将失败。
  • 未选中 - 将使用数据库身份验证。 您必须提供有效的数据库用户名和密码才能在数据库中进行身份验证。 这是默认设置。 如果数据库管理系统没有配置为允许数据库身份验证,则身份验证将失败。

Boolean
数据库管理员
(可选)

用于数据库身份验证的数据库管理员用户。 对于 Oracle,请使用 sys 用户。 对于 PostgreSQL,请指定具有超级用户身份的用户。 对于 SQL Server,请指定具有 sysadmin 固定服务器角色的任何成员。

String
数据库管理员密码
(可选)

用于数据库身份验证的数据库管理员密码。

Encrypted String
Sde 拥有的方案
(可选)

该参数仅对 SQL Server 有效,并指定将在数据库的 sde 用户方案中还是在 dbo 方案中创建地理数据库。 .

  • 选中 - 地理数据库将在 sde 用户的方案中创建。
  • 未选中 - 您必须以实例中 dbo 用户的身份登录到 SQL Server 实例,之后系统会在数据库的 dbo 方案中创建地理数据库。

Boolean
地理数据库管理员
(可选)

地理数据库管理员用户名称。

如果使用的是 PostgreSQL,该值必须为 sde。 如果 sde 登录角色不存在,此工具将在数据库集群中创建该登录角色并授予其超级用户状态。 如果 sde 登录角色已存在,当其没有超级用户状态时,此工具将对其授予这一状态。 此工具还会在数据库中创建 sde 方案并向公共角色授予对该方案的使用权限。

如果使用的是 Oracle,则值为 sde。 如果 Oracle 数据库中不存在 sde 用户,则此工具将创建用户并授予其创建和升级地理数据库以及断开用户与数据库之间连接所需的权限。 此工具还将授予使用 Oracle Data Pump 导入数据所需的权限。 如果 sde 用户已存在,则该工具将向现有用户授予同样的权限。

注:

Oracle 中不再支持创建或升级用户方案地理数据库。

如果使用的是 SQL Server 并指定了一个 sde 方案地理数据库,则该值必须为 sde。 此工具将创建 sde 登录、数据库用户和方案,并授予其创建地理数据库以及从 SQL Server 实例移除连接所需的权限。 如果指定了 dbo 方案,则不要为该参数提供值。

String
地理数据库管理员密码
(可选)

地理数据库管理员用户的密码。 如果地理数据库管理员用户已存在于数据库管理系统中,则提供的密码必须与现有密码相匹配。 如果地理数据库管理员用户尚未存在,则为新用户提供一个有效的数据库密码。 该密码必须符合数据库强制的密码策略。

密码是一个加密字符串。

Encrypted String
表空间名称
(可选)

表空间名称。

该参数只对 OraclePostgreSQL 数据库管理系统类型有效。 对于 Oracle,请执行以下某项操作:

  • 提供一个现有表空间的名称。 对于地理数据库管理员用户,此表空间将用作默认的表空间。
  • 为新表空间提供一个有效名称。 此工具将在 Oracle 的默认存储位置上创建一个 400 MB 的表空间,并将其设置为地理数据库管理员的默认表空间。
  • 将表空间留空。 此工具将在 Oracle 的默认存储位置上创建一个名为 SDE_TBS 的 400 MB 表空间。 SDE_TBS 表空间将被设置为地理数据库管理员的默认表空间。

此工具不会在 PostgreSQL 中创建表空间。 必须为用作数据库默认表空间的现有表空间提供名称,或者将此参数留空。 如果将此参数留空,则工具将在 pg_default 表空间中创建一个数据库。

String
授权文件

授权 ArcGIS Server 时创建的密钥代码文件。 如果尚未执行此操作,则请授权 ArcGIS Server 来创建此文件。

此文件位于 Windows<drive>\Program Files\ESRI\License<release#>\sysgen 文件夹或 Linux/arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen 目录中。

提示:

/.wine 目录是一个隐藏目录。

您可能需要从 ArcGIS Server 计算机将密钥代码文件拷贝到工具可以访问的位置。

File
空间类型
(可选)

指定要使用的空间类型。 此项仅适用于 PostgreSQL 数据库。

  • ST_Geometry将使用 ST_Geometry 空间类型。 这是默认设置。
  • PostGIS将使用 PostGIS 空间类型。
String

派生输出

标注说明数据类型
创建企业级地理数据库成功

指定是否已成功创建企业级地理数据库。

Boolean

arcpy.management.CreateEnterpriseGeodatabase(database_platform, instance_name, {database_name}, {account_authentication}, {database_admin}, {database_admin_password}, {sde_schema}, {gdb_admin_name}, {gdb_admin_password}, {tablespace_name}, authorization_file, {spatial_type})
名称说明数据类型
database_platform

指定要建立连接以创建地理数据库的数据库管理系统类型。

  • Oracle将连接到 Oracle 实例。
  • PostgreSQL将连接到 PostgreSQL 数据库集群。
  • SQL_Server将连接到 Microsoft SQL Server 实例。
String
instance_name

实例名称。

对于 SQL Server,请提供 SQL Server 实例名称。 不支持区分大小写或二进制排序规则 SQL Server 实例。

对于 Oracle,请提供 TNS 名称或 Oracle Easy Connection 字符串。

对于 PostgreSQL,请提供安装 PostgreSQL 的服务器的名称。

String
database_name
(可选)

数据库名称。

此参数对 PostgreSQLSQL Server 有效。 您可以提供现有的、预先配置的数据库名称,也可以输入此工具要创建的数据库名称。

如果该工具在 SQL Server 中创建数据库,则文件大小可与为 SQL Server 模型数据库定义的大小相同,或者对于 .mdf 文件为 500 MB,对于 .ldf 文件为 125 MB,取较大值。 .mdf 文件和 .ldf 文件均可在数据库服务器上的默认 SQL Server 位置上创建。 请勿命名数据库 sde。

如果该工具在 PostgreSQL 中创建数据库,则其会使用 template1 数据库作为您数据库的模板。 如果您需要使用其他模板(例如,您需要对 PostGIS 可用的模板),您必须在运行此工具之前创建数据库或提供现有数据库的名称。 数据库名称请始终使用小写字符。 如果您使用了大写字母,则工具会将其转换为小写形式。

String
account_authentication
(可选)

指定数据库连接将使用的身份验证类型。

  • OPERATING_SYSTEM_AUTH将使用操作系统身份验证。 您向运行此工具的计算机提供的登录信息将用于验证数据库连接。如果数据库管理系统没有配置为允许操作系统身份验证,则身份验证将失败。
  • DATABASE_AUTH将使用数据库身份验证。 您必须提供有效的数据库用户名和密码才能在数据库中进行身份验证。 这是默认设置。如果数据库管理系统没有配置为允许数据库身份验证,则身份验证将失败。
Boolean
database_admin
(可选)

用于数据库身份验证的数据库管理员用户。 对于 Oracle,请使用 sys 用户。 对于 PostgreSQL,请指定具有超级用户身份的用户。 对于 SQL Server,请指定具有 sysadmin 固定服务器角色的任何成员。

String
database_admin_password
(可选)

用于数据库身份验证的数据库管理员密码。

Encrypted String
sde_schema
(可选)

该参数只与 SQL Server 相关,并指定地理数据库是在名为 sde 的用户方案中创建还是在数据库的 dbo 方案中创建。 如果创建的是一个 dbo 方案地理数据库,连接的用户为 SQL Server 实例中的 dbo。

  • SDE_SCHEMA地理数据库资料档案库将存储在名为 sde 的用户方案中并归该用户所有。 这是默认设置。
  • DBO_SCHEMA地理数据库资料档案库将存储在数据库的 dbo 方案中。
Boolean
gdb_admin_name
(可选)

地理数据库管理员用户名称。

如果使用的是 PostgreSQL,该值必须为 sde。 如果 sde 登录角色不存在,此工具将在数据库集群中创建该登录角色并授予其超级用户状态。 如果 sde 登录角色已存在,当其没有超级用户状态时,此工具将对其授予这一状态。 此工具还会在数据库中创建 sde 方案并向公共角色授予对该方案的使用权限。

如果使用的是 Oracle,则值为 sde。 如果 Oracle 数据库中不存在 sde 用户,则此工具将创建用户并授予其创建和升级地理数据库以及断开用户与数据库之间连接所需的权限。 此工具还将授予使用 Oracle Data Pump 导入数据所需的权限。 如果 sde 用户已存在,则该工具将向现有用户授予同样的权限。

注:

Oracle 中不再支持创建或升级用户方案地理数据库。

如果使用的是 SQL Server 并指定了一个 sde 方案地理数据库,则该值必须为 sde。 此工具将创建 sde 登录、数据库用户和方案,并授予其创建地理数据库以及从 SQL Server 实例移除连接所需的权限。 如果指定了 dbo 方案,则不要为该参数提供值。

String
gdb_admin_password
(可选)

地理数据库管理员用户的密码。 如果地理数据库管理员用户已存在于数据库管理系统中,则提供的密码必须与现有密码相匹配。 如果地理数据库管理员用户尚未存在,则为新用户提供一个有效的数据库密码。 该密码必须符合数据库强制的密码策略。

密码是一个加密字符串。

Encrypted String
tablespace_name
(可选)

表空间名称。

该参数只对 OraclePostgreSQL 数据库管理系统类型有效。 对于 Oracle,请执行以下某项操作:

  • 提供一个现有表空间的名称。 对于地理数据库管理员用户,此表空间将用作默认的表空间。
  • 为新表空间提供一个有效名称。 此工具将在 Oracle 的默认存储位置上创建一个 400 MB 的表空间,并将其设置为地理数据库管理员的默认表空间。
  • 将表空间留空。 此工具将在 Oracle 的默认存储位置上创建一个名为 SDE_TBS 的 400 MB 表空间。 SDE_TBS 表空间将被设置为地理数据库管理员的默认表空间。

此工具不会在 PostgreSQL 中创建表空间。 必须为用作数据库默认表空间的现有表空间提供名称,或者将此参数留空。 如果将此参数留空,则工具将在 pg_default 表空间中创建一个数据库。

String
authorization_file

授权 ArcGIS Server 时创建的密钥代码文件。 如果尚未执行此操作,则请授权 ArcGIS Server 来创建此文件。

此文件位于 Windows<drive>\Program Files\ESRI\License<release#>\sysgen 文件夹或 Linux/arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen 目录中。

提示:

/.wine 目录是一个隐藏目录。

您可能需要从 ArcGIS Server 计算机将密钥代码文件拷贝到工具可以访问的位置。

File
spatial_type
(可选)

指定要使用的空间类型。 此项仅适用于 PostgreSQL 数据库。

  • ST_GEOMETRY将使用 ST_Geometry 空间类型。 这是默认设置。
  • POSTGIS将使用 PostGIS 空间类型。
String

派生输出

名称说明数据类型
out_result

指定是否已成功创建企业级地理数据库。

Boolean

代码示例

CreateEnterpriseGeodatabase 示例 1(Python 窗口)

以下脚本可在 Oracle 数据库中创建地理数据库。

它创建 sde 用户并为该 sde 用户创建默认表空间 sdetbs。

密钥代码文件位于远程 Linux 服务器上。


import arcpy
arcpy.management.CreateEnterpriseGeodatabase(
    "ORACLE", "ora11g:1521/elf", "", "DATABASE_AUTH", "sys", 
    "manager", "", "sde", "supersecret", "sdetbs", 
    "//myserver/mymounteddrive/myaccessibledirectory/keycodes")
CreateEnterpriseGeodatabase 示例 2(Python 窗口)

该脚本连接到 SQL Server 实例 (tor\ssinstance),在其中创建一个名为 sp_data 的数据库和一个 sde 方案数据库。

使用操作系统身份验证建立连接。 密钥代码文件位于远程 Windows 服务器上。


import arcpy
arcpy.management.CreateEnterpriseGeodatabase(
    "SQL_SERVER", "tor\ssinstance1", "sp_data", "OPERATING_SYSTEM_AUTH", "", "", 
    "SDE_SCHEMA", "sde", "sde", "", "//myserver/myaccessibledirectory/keycodes")
CreateEnterpriseGeodatabase 示例 3(Python 窗口)

该脚本连接到服务器上名为 feldspar 的 PostgreSQL 数据库集群。

如同在现有表空间 gdbspace 中创建数据库 pggdb 那样来创建 sde 用户。

密钥代码文件位于本地 Linux 服务器上。

地理数据库将使用 ST_Geometry 空间类型。


import arcpy
arcpy.management.CreateEnterpriseGeodatabase(
    "POSTGRESQL", "feldspar", "pggdb", "DATABASE_AUTH", "postgres", "averturis", 
    "", "sde", "nomira", "gdbspace", 
    "//arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License/sysgen/keycodes" "ST_GEOMETRY")
CreateEnterpriseGeodatabase 示例 4(独立脚本)

通过以下独立 Python 脚本,可以提供特定于使用选项的站点的信息。

"""
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
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 10.1 and higher releases")

#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:  Not required 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 for SQL Server geodatabase, SDE or DBO. Default=SDE_SCHEMA")
parser.add_option ("-u", dest="Gdb_admin", type="string", default="", help="Geodatabase administrator user name")
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")
parser.add_option ("-l", dest="Authorization_file", type="string", default="", help="Full path and name of authorization file")
parser.add_option ("--type", dest="Spatial_type", type="choice", choices=['ST_GEOMETRY', 'POSTGIS'], default="ST_GEOMETRY", help="Spatial Type for PostgreSQL geodatabase, ST_GEOMETRY or POSTGIS. Default=ST_GEOMETRY")

# 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
	spatial_type = options.Spatial_type.upper()
	
	
	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( 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.management.CreateEnterpriseGeodatabase(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, spatial_type=spatial_type)
		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)

环境

此工具不使用任何地理处理环境。

相关主题