在 SQL Server 中创建地理数据库

在 Standard 或 Advanced 许可等级下可用。

要在 Microsoft SQL Server 数据库中创建地理数据库,请从 ArcGIS 客户端运行地理处理工具或 Python 脚本。

如果在 ArcGIS AllSource 3.3 中创建地理数据库,则地理数据库版本为 11.3.0。

首先阅读先决条件,然后按照适合实际情况的说明进行操作。

先决条件

要创建地理数据库 SQL Server,请执行以下操作:

  1. 请确认您想使用的 ArcGIS、SQL Server 和操作系统组合相互兼容
  2. 下载 SQL Server ODBC 客户端,您需使用该客户端连接到将用于存储地理数据库的 SQL Server 版本。
  3. 获取 ArcGIS Server 密钥代码文件,并将其放置到用于创建地理数据库的 ArcGIS 客户端可访问的位置。
  4. 确定将创建地理数据库的人员(这会影响创建数据库的人员),以及运行哪个工具来创建地理数据库。 按照适合实际情况的说明进行操作:

您是 SQL Server 和地理数据库管理员

如果您同时行使数据库管理员和地理数据库管理员的角色,并知晓两个登录帐户的密码,则可以使用创建企业级地理数据库地理处理工具或 Python 脚本在 SQL Server 数据库中创建地理数据库。

创建企业级地理数据库工具可令您轻松创建地理数据库,因为此工具可创建数据库对象并授予您所需的权限。 为此,该工具使用以下默认设置并创建以下数据库对象:

  • 该工具可在服务器上的默认 SQL Server 位置创建数据库文件(MDFLDF)。
  • 该工具可以将 SQL Server 数据库选项 READ_COMMITTED_SNAPSHOT 和 ALLOW_SNAPSHOT_ISOLATION 设置为 ON。
  • 它使用您为 SQL Server 模型数据库定义的默认数据库文件大小,或者可针对 MDF 文件取 500 MB,针对 LDF 文件取 125 MB,两者比较后取其中较大值。
  • 如果选择在名为 sde 的方案中创建地理数据库,则该工具将在 SQL Server 实例中创建经 sde 数据库身份验证的登录帐户、在数据库中创建 sde 用户并将其映射到 sde 登录帐户、在数据库中创建 sde 方案,并授予 sde 用户创建地理数据库以及终止与 SQL Server 实例的连接所需的权限。
  • 它会在 SQL Server 实例中创建地理数据库对象。

运行工具或脚本创建地理数据库前,您必须安装和配置 SQL Server 实例。

安装并配置 SQL Server

创建地理数据库前,必须安装 SQL Server 并配置实例。 实例的配置方式取决于您的组织的需求。

注:

SQL Server 实例必须使用区分大小写的排序方式,且数据库无法使用土耳其语排序方式。

您或 IT 部门安装完 SQL Server 后,请确保将 SQL Server 实例配置为可接受远程连接;默认情况下,远程连接处于未启用状态。

有关 SQL Server 安装和配置信息,请参考 Microsoft 文档。

安装和配置 SQL Server 后,安装 ArcGIS 和 SQL Server 客户端。

安装客户端

您可以安装 ArcGIS AllSourceDesktop StandardDesktop Advanced)或 ArcGIS Server(企业版),然后运行 Python 脚本来创建地理数据库。 要运行创建企业级地理数据库地理处理工具,而非脚本,请安装 ArcGIS AllSource

注:

您需要一个 ArcGIS Server(企业版)密钥代码文件,以便在下一部分中授权地理数据库。 即使不在 ArcGIS Server 计算机上运行 Python 脚本来创建地理数据库,也需安装和授权 ArcGIS Server 才能获取密钥代码文件。 可能需要将 ArcGIS Server 计算机中的密钥代码文件复制到可使用创建企业级地理数据库地理处理工具访问的位置。

在大多数情况下,ArcGIS 客户端将安装在不同于 SQL Server 的计算机上。 因此,要连接到该数据库,必须在 ArcGIS 客户端计算机上安装受支持的 SQL Server 客户端。 请参阅 SQL Server 的 ArcGIS 系统要求,确定应安装哪个版本的 SQL Server 客户端才能连接到您正在使用的 SQL Server 版本。

要连接到 Microsoft Windows 计算机上的 SQL Server,可以从 My EsriMicrosoft 下载中心下载 SQL Server 客户端。 要连接到 Linux 计算机上的 SQL Server,请从 Microsoft 下载中心下载 SQL Server 客户端文件。 之后请遵照 Microsoft 的说明在客户端计算机上安装 SQL Server 客户端。

请按照这些步骤安装并配置创建地理数据库所需的客户端。 如果您没有安装软件的权限,请让 IT 部门执行这些步骤。

  1. 安装要用于创建地理数据库的 ArcGIS 客户端。

    按照软件安装指南中提供的说明进行操作。

  2. 在 ArcGIS 客户端计算机上安装 SQL Server 客户端。

    如果将 SQL Server 客户端安装在 64 位操作系统上,则请使用 64 位的 SQL Server 客户端可执行文件。 如果在 64 位操作系统上运行 32 位 SQL Server 客户端,则安装将失败。

现在,可创建地理数据库。

创建地理数据库

您可以运行 ArcGIS AllSourceDesktop StandardDesktop Advanced)中的创建企业级地理数据库工具或运行 ArcGIS AllSourceDesktop StandardDesktop Advanced)、ArcGIS Server(企业版)客户端的 Python 脚本来创建数据库和地理数据库。

运行创建企业级地理数据库工具

如果您有权访问 ArcGIS AllSource,则可运行地理处理工具来创建地理数据库。

请遵照以下步骤在 ArcGIS AllSource 中使用创建企业级地理数据库工具创建地理数据库:

  1. 启动 ArcGIS AllSource
  2. 打开创建企业级地理数据库工具。

    您可以搜索或浏览到此工具,它位于“数据管理”工具箱的“地理数据库管理”工具集中。

  3. 数据库平台下拉列表中选择 SQL Server
  4. 实例文本框中输入您将要连接的 SQL Server 实例的名称。
  5. 数据库文本框中输入用于存储地理数据库的数据库的名称。

    如果 SQL Server 实例中不存在具有该名称的数据库,则该工具将创建该数据库。 如果数据库存在,则该工具将使用它来存储地理数据库。

  6. 以系统管理员身份连接到 SQL Server。 可使用作为 SQL Server 中 sysadmin 固定服务器角色成员的经操作系统身份验证的登录帐户,也可以输入 sysadmin 用户的数据库用户名和密码。
    • 要使用经操作系统验证的 sysadmin 登录帐户进行验证,请选中操作系统身份验证。 您必须使用正确的登录帐户登录到 Windows 才能使用此选项。
    • 要以 sysadmin 进行身份验证,可以在数据库管理员文本框中输入 sysadmin 用户名,并在数据库管理员密码文本框中输入相应的密码。
  7. 选择将包含地理数据库的方案。
    • 如果想使名为 sde 的用户成为地理数据库管理员,并将地理数据库存储在 sde 用户的方案中,可以选中 Sde 拥有的方案
    • 如果想使 dbo 用户成为地理数据库管理员,并将地理数据库存储在 dbo 方案中,可以取消选中 Sde 拥有的方案

    有关在 sde 或 dbo 方案中存储地理数据库的详细信息,请参阅 SQL Server 中地理数据库所有者的比较

  8. 如果选择 sde 拥有的方案,则地理数据库管理员文本框将以 sde 来填充。 如果不存在使用该名称的用户,则工具将创建该用户及其对应的方案,并且会向该用户授予创建地理数据库所需的权限。

    如果使用数据库身份验证和 dbo 方案存储地理数据库,可以在地理数据库管理员文本框中输入 SQL Server 实例中 dbo 的用户名。

    如果使用的是操作系统身份验证来连接数据库,则您的当前登录必须在 SQL Server sysadmin 固定服务器角色中才能创建 dbo 方案地理数据库。

  9. 地理数据库管理员密码文本框中输入地理数据库管理员的密码。

    如果数据库中已存在您指定的地理数据库管理员,请确保为现有用户输入正确的密码;此工具不会更改密码。

  10. 要指定授权文件,请浏览到在授权 ArcGIS Server(企业版)时创建的密钥代码文件,并选择该文件。

    此文件将在 Windows 服务器的 \\Program Files\ESRI\License<release#>\sysgen 文件夹和 Linux 服务器的 /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen 中创建。 将密钥代码文件复制到可使用创建企业级地理数据库工具访问的位置。 如果尚未执行此操作,则立即授权 ArcGIS Server 创建此文件。

  11. 单击运行

如果未指定现有数据库,则在 SQL Server 默认位置中创建数据库和日志文件。 将在数据库中创建地理数据库。 如果选择 sde 方案地理数据库,则会创建经数据库身份验证的 sde 登录帐户、数据库用户和方案。

将创建地理数据库的相关消息写入 sde_setup.log 文件,该文件是在为运行工具的计算机上的 %TEMP% 变量指定的目录中创建的。 如果在创建地理数据库时出现任何问题,可查看此文件以解决这些问题。

接下来,您可创建能够将数据加载到地理数据库中的用户

运行 Python 脚本

您可以复制、保存和运行此处提供的脚本以在 ArcGIS AllSource(Standard 或 Advanced)、ArcGIS Server(企业版)中创建地理数据库。

  1. 在 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
    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)
  2. .py 扩展名保存该文件。
  3. 运行脚本,同时提供特定于您的站点的选项和信息。

    在以下示例中,运行 create_gdb.py 文件在 porthos\gisprod SQL Server 实例中创建数据库 entgdb。 使用数据库身份验证以 sa 用户的身份运行该工具,然后该工具将在 sde 用户的方案中创建地理数据库。 默认 ArcGIS Server 位置中指定的密钥代码文件用于授权地理数据库。

    create_gdb.py --DBMS SQL_SERVER -i porthos\gisprod -D entgdb --auth DATABASE_AUTH 
    -U sa -P N0pe3king! --schema SDE_SCHEMA -u sde -p Tgdbst@rtsh3r3 -l '\\Program Files\ESRI\License\sysgen\keycodes'

    在此示例中,以 sysadmin 固定服务器角色成员的登录帐户登录到客户端计算机时,运行同一脚本在 dbo 方案中创建地理数据库:

    create_gdb.py --DBMS SQL_SERVER -i porthos\gisprod -D entgdb --auth OPERATING_SYSTEM_AUTH 
    --schema DBO_SCHEMA -l '\\Program Files\ESRI\License\sysgen\keycodes'
    提示:

    Type -h or --help at the command prompt to get syntax help.

您现已在 SQL Server 中具有一个地理数据库。

将创建地理数据库的相关消息写入 sde_setup.log 文件,该文件是在为运行脚本的计算机上的 %TEMP% 变量指定的目录中创建的。 如果在创建地理数据库时出现任何问题,可查看此文件以解决这些问题。

接下来,您可创建能够将数据加载到地理数据库中的用户

SQL Server 管理员创建数据库;地理数据库管理员创建地理数据库

如果创建地理数据库的用户不具有数据库管理员的密码,则数据库管理员可以创建数据库并创建地理数据库管理员的登录帐户、用户和方案。 如果要将地理数据库存储在 sde 方案中,数据库管理员可创建 sde 登录帐户、用户和方案。 如果要将地理数据库存储在 dbo 方案中,数据库管理员可创建登录帐户和用户,并将用户分配为数据库的所有者。 有关地理数据库存储选项的信息,请参阅 SQL Server 中地理数据库所有者的比较

地理数据库管理员可以以地理数据库管理员的身份连接到数据库,并使用启用企业级地理数据库地理处理工具或 Python 脚本创建地理数据库。

启用企业级地理数据库工具以数据库连接文件作为输入,并创建地理数据库系统表、视图、函数和过程。

安装并配置 SQL Server

地理数据库管理员创建地理数据库前,SQL Server 管理员必须执行以下操作:

  • 安装 SQL Server 并配置实例。 实例的配置方式取决于您的组织的需求。 在继续操作之前,请查看 ArcGIS 系统要求,以确保要使用的数据库管理系统、ArcGIS 和硬件组合能够得到支持。 安装完 SQL Server 后,请确保将 SQL Server 实例配置为可接受远程连接;默认情况下,远程连接处于未启用状态。 有关 SQL Server 安装和配置信息,请参考 Microsoft 文档。

    注:

    SQL Server 实例必须使用区分大小写的排序方式,且数据库无法使用土耳其语排序方式。

  • 创建数据库。
  • SQL Server 数据库选项 READ_COMMITTED_SNAPSHOT 和 ALLOW_SNAPSHOT_ISOLATION 设置为 ON。 如果 SQL Server 管理员未将这些选项设置为 ON,但是授予地理数据库管理员在数据库中的 ALTER 权限,则启用企业级地理数据库工具会在运行时更改数据库上的这些设置。 如果 SQL Server 管理员未对这些选项进行设置,并且地理数据库管理员也没有足够的权限更改它们,则地理数据库的创建将会失败。
  • 添加或创建一个登录帐户,该登录帐户映射到名为 sde 的数据库用户或作为数据库所有者的数据库用户。
  • 如果使用 sde 方案地理数据库,请在数据库中创建一个名为 sde 的方案。 将其设置为 sde 用户的默认方案。
  • 如果使用 sde 方案地理数据库,则 sde 用户必须至少具有以下权限:CREATE FUNCTION、CREATE PROCEDURE、CREATE TABLE 和 CREATE VIEW。 有关其他权限,请参阅 SQL Server 中地理数据库的权限

安装客户端

地理数据库管理员可以安装 ArcGIS AllSourceDesktop StandardDesktop Advanced)或 ArcGIS Server(企业版),然后运行 Python 脚本来创建地理数据库。 要运行启用企业级地理数据库地理处理工具,而非脚本,请安装 ArcGIS AllSource

注:

您需要一个 ArcGIS Server(企业版)密钥代码文件,以便在下一部分中授权地理数据库。 即使不在 ArcGIS Server 计算机上运行 Python 脚本来创建地理数据库,也必须安装和授权 ArcGIS Server 才能获取密钥代码文件。 可能需要将 ArcGIS Server 计算机中的密钥代码文件复制到可使用启用企业级地理数据库地理处理工具访问的位置。

在大多数情况下,ArcGIS 客户端将安装在不同于 SQL Server 的计算机上。 因此,要连接到该数据库,必须在 ArcGIS 客户端计算机上安装受支持的 SQL Server 客户端。 请参阅 SQL Server 的 ArcGIS 系统要求,确定应安装哪个版本的 SQL Server 客户端才能连接到您正在使用的 SQL Server 版本。

要连接到 Microsoft Windows 计算机上的 SQL Server,可以从 My EsriMicrosoft 下载中心下载 SQL Server 客户端。 要连接到 Linux 计算机上的 SQL Server,请从 Microsoft 下载中心下载 SQL Server 客户端文件。 之后请遵照 Microsoft 的说明在客户端计算机上安装 SQL Server 客户端。

  1. 安装要用于创建地理数据库的 ArcGIS 客户端。

    按照软件安装指南中提供的说明进行操作。

  2. 在 ArcGIS 客户端计算机上安装 SQL Server 客户端。

    如果将 SQL Server 客户端安装在 64 位操作系统上,则请使用 64 位的 SQL Server 客户端可执行文件。 如果在 64 位操作系统上运行 32 位 SQL Server 客户端,则运行将失败。

ArcGIS 客户端可连接到数据库并创建地理数据库。 为此,请使用下一部分所述方法之一。

创建地理数据库

地理数据库管理员可以从 ArcGIS AllSourceDesktop StandardDesktop Advanced)中运行启用企业级地理数据库工具,或从 ArcGIS AllSourceDesktop StandardDesktop Advanced)或 ArcGIS Server(企业版)计算机中运行 Python 脚本在现有数据库中创建地理数据库。

运行启用企业级地理数据库工具

您可以在 ArcGIS AllSource 中运行启用企业级地理数据库工具以在现有的 SQL Server 数据库中创建地理数据库。

请遵照以下步骤使用 ArcGIS AllSource 中的启用企业级地理数据库工具创建地理数据库:

  1. 启动 ArcGIS AllSource
  2. 地理数据库管理员身份连接到 SQL Server 数据库

    数据库连接对话框上保存用户的密码。

  3. 打开启用企业级地理数据库工具。
  4. 将新的数据库连接拖动到输入数据库连接字段中。
  5. 浏览至授权 ArcGIS Server 时创建的 ArcGIS Server 授权文件,并将其添加到授权文件文本框中。

    使用向导来授权 ArcGIS Server 之后,密钥代码文件将被写入安装该软件的服务器。 密钥代码文件将在 Windows 服务器上的 Program Files\ESRI\License<release>\sysgen 中和 Linux 服务器上的 /arcgis/server/framework/runtime/.wine/drive_c/Program Files/ESRI/License<release#>/sysgen 中创建。 将该文件复制到可使用启用企业级地理数据库工具访问的位置。 如果尚未执行此操作,则授权 ArcGIS Server 创建此文件。

  6. 单击运行

将在数据库中创建地理数据库。

将创建地理数据库的相关消息写入 sde_setup.log 文件,该文件是在为运行工具的计算机上的 %TEMP% 变量指定的目录中创建的。 如果在创建地理数据库时出现任何问题,可查看此文件以解决这些问题。

接下来,数据库管理员可创建能够将数据加载到地理数据库中的用户

运行 Python 脚本

要通过 Windows 计算机上安装的 ArcGIS AllSourceDesktop StandardDesktop Advanced)或 ArcGIS Server(企业版)运行脚本来创建地理数据库,可使用此处提供的脚本。

按照以下步骤运行 Python 脚本以在现有 SQL Server 数据库中创建地理数据库:

  1. 在 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=['SQL_SERVER', 'ORACLE', 'POSTGRESQL', 'DB2','INFORMIX','DB2ZOS', ''], default="", help="Type of enterprise DBMS:  SQL_SERVER, 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)
    
    		
    	# 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)

  2. .py 扩展名保存该文件。
  3. 运行脚本,同时提供特定于您的站点的选项和信息。

    在以下示例中,将针对实例 ssprod 上的数据库 spdata 运行文件 enable_gdb.py。 使用 sde 登录帐户通过密码 Tgdbst@rtsh3r3 进行连接。 默认 ArcGIS Server 位置中指定的密钥代码文件用于授权地理数据库。

    enable_gdb.py --DBMS SQL_SERVER -i ssprod --auth DATABASE_AUTH 
    -u sde -p Tgdbst@rtsh3r3 -D spdata -l '\\Program Files\ESRI\License\sysgen\keycodes'
    提示:

    Type -h or --help at the command prompt to get syntax help.

您现已在 SQL Server 数据库中具有一个地理数据库。

有关创建地理数据库的日志文件 (GDBCreateGeodatabase<#>.log) 会写入为运行脚本的计算机上的 %TEMP% 变量指定的目录。

接下来,数据库管理员可创建能够将数据加载到地理数据库中的用户