在 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 权限。
  4. 创建一个临时表空间并授予地理数据库用户对该表空间的访问权限。

    临时表空间必须至少有 8K 的页面空间。

    在以下示例中,创建了一个名为 geospace 的用户临时表空间,页面大小为 8K。 将向名为 geodatausers 的组授予临时表使用权限,该组包含执行地理数据库操作的所有数据库用户,例如创建地理数据库存档、使用要素图格以及在地理数据库中创建用于生成日志文件表的大型选择集。

    CREATE USER TEMPORARY TABLESPACE geospace PAGESIZE 8 K MANAGED BY AUTOMATIC STORAGE BUFFERPOOL IBMDEFAULTBP;
    
    GRANT USE OF TABLESPACE geospace TO geodatausers WITH GRANT OPTION;

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

配置客户端

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

注:

您需要一个 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. 或者,创建数据库目录以允许使用数据源名称进行连接。

    有关创建数据源名称的说明,请参阅 IBM Db2 文档。

    从 ArcGIS 连接到 Db2 数据库不需要数据源名称;您可以改用 DSNless 连接字符串。

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

创建地理数据库

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

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

如果您安装和配置了 ArcGIS Pro 以连接到 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 中创建文件。 如果在 Microsoft Windows 服务器上进行授权,则文件在 Program Files\ESRI\License<release>\sysgen 中创建。 将该文件复制到可使用启用企业级地理数据库工具访问的位置。 如果尚未执行此操作,则授权 ArcGIS Server 创建此文件。

  6. 单击运行

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

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

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

使用 Python 脚本

可在 ArcGIS ProDesktop StandardDesktop Advanced)或 ArcGIS Server(企业版)客户端计算机中运行 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. 运行脚本,同时提供特定于您的站点的选项和信息。

    在以下从 Microsoft 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 信息中心。