在 Db2 中创建地理数据库

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

安装并配置 IBM Db2 和 ArcGIS 客户端,然后使用启用企业级地理数据库地理处理工具或 Python 脚本在 Db2 数据库中创建地理数据库。

先决条件

Db2 中创建地理数据库之前,需要执行以下操作:

  • 确认要使用的 ArcGIS、Db2 和操作系统版本兼容
  • 获取连接用于存储地理数据库的 Db2 版本所需的 Db2 客户端。
  • 获取 ArcGIS Server 密钥代码文件,然后将其放置到可从用于创建地理数据库的 ArcGIS 客户端访问的位置。
  • 安装并配置 Db2

安装并配置 Db2

您(或者 IT 部门或数据库管理员)必须安装并配置 Db2 数据库管理系统,然后才能运行启用企业级地理数据库工具或脚本以在 Db2 中创建地理数据库。

应按照 IBM 提供的说明来安装和配置 Db2 实例。然后,按照这些步骤来配置用于地理数据库的数据库和登录帐户。

  1. Db2 服务器上创建名为 sde 的操作系统登录帐户。

    您将通过 sde 登录帐户连接到数据库来创建地理数据库。

  2. 创建 Db2 数据库并将其注册到 Spatial Extender 模块。
  3. 在数据库中授予 sde 用户 DBADM 权限。

接下来,设置用于连接的 ArcGIS 客户端,然后在 Db2 数据库中创建地理数据库。

配置客户端

可以从 ArcGIS Desktop (Desktop StandardDesktop Advanced)、ArcGIS Engine Geodatabase Update、或 ArcGIS Server(企业版)中运行 Python 脚本,来创建地理数据库。如果您想要运行启用企业级地理数据库地理处理工具,而并非脚本,则使用 ArcGIS Desktop

注:

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

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

    遵循软件安装指南中提供的说明。

  2. 在大多数情况下,ArcGIS 客户端将在与 Db2 服务器不同的计算机上安装;因此,请在 ArcGIS 客户端计算机上安装和配置 Db2 客户端。

    可从 My Esri 下载 IBM Data Server Runtime Client for Db2,或使用自己的 Db2 客户端安装程序。有关安装的说明,请参阅 Db2 文档。如果要在 64 位操作系统上安装 Db2 客户端,请运行 64 位可执行文件;该文件将同时安装 32 位和 64 位文件,以供从 32 位和 64 位 ArcGIS 客户端进行连接。

  3. 可使用非 DSN 连接字符串从 ArcGIS 连接至 Db2 数据库。但是,如果要使用数据源名称进行连接,则必须将数据库编入目录,从而配置数据源名称。有关创建数据源名称的说明,请参阅 IBM Db2 文档。

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

创建地理数据库

使用以下方法之一在 Db2 数据库中创建地理数据库:

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

如果已安装 ArcGIS Desktop 并将其配置为连接 Db2 数据库,则可以运行启用企业级地理数据库工具。

请按照以下步骤通过 ArcGIS Pro 创建地理数据库:

  1. 启动 ArcGIS Pro
  2. 连接 Db2 数据库。通过 sde 登录帐户进行连接。

    确保将 sde 用户密码保存在数据库连接对话框中。

  3. 打开启用企业级地理数据库工具。
  4. Db2 数据库的数据库连接文件添加至输入数据库文本框。
  5. 浏览至授权 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 来创建此文件。

  6. 单击运行

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

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

接下来,创建用户以便将数据加载到地理数据库中。有关创建用户的说明,请参阅 IBM Db2 信息中心。

使用 Python 脚本

可以从 ArcGIS DesktopDesktop StandardDesktop Advanced)、ArcGIS Server(企业版)、或 ArcGIS Engine Geodatabase Update 客户端计算机运行 Python 脚本以在 Db2 数据库中创建地理数据库。

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

  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. 运行脚本,同时提供特定于您的站点的选项和信息。

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

    enable_gdb.py --DBMS DB2 -i db2prod --auth DATABASE_AUTH 
    -u sde -p Tgdbst@rtsh3r3 -D spdata -l '\\Program Files\ESRI\License\sysgen\keycodes'

    这是在 Linux 计算机上运行脚本的示例:

    /enable_gdb.py --DBMS DB2 -i db2prod --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'
    提示:

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

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

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

接下来,创建用户以便将数据加载到地理数据库中。有关创建用户并授予数据加载权限的说明,请参阅 IBM Db2 信息中心。