Ajouter le type ST_Geometry à une base de données Oracle

Disponible avec une licence Standard ou Advanced.

Vous pouvez ajouter le type, le sous-type et les fonctions ST_Geometry Esri à une base de données Oracle à l’aide de l’outil de géotraitement Créer le type spatial ou d’un script Python qui appelle la fonction ArcPy CreateSpatialType.

Lorsque vous ajoutez le type ST_Geometry à votre base de données, vous pouvez l’utiliser pour conserver des données spatiales.

L'outil et la fonction créent tous les deux un utilisateur nommé sde dans la base de données. L'utilisateur sde possède le type, les sous-types, les fonctions et les tables ST_Geometry.

Remarque :

La bibliothèque ST_Geometry requiert Microsoft Visual C++ Redistributable Package (x64) lorsqu’elle est déployée sur un serveur Microsoft Windows. Reportez-vous à la rubrique Configuration ArcGIS requise pour Oracle pour connaître la version requise du paquetage. Si ce paquetage n’est pas présent sur le serveur, téléchargez-le depuis le site de Microsoft et installez-le.

Utilisez l'outil de géotraitement Créer le type spatial.

Les étapes suivantes expliquent comment exécuter l’outil de géotraitement Créer le type spatial pour installer le type ST_Geometry dans une base de données Oracle :

  1. Téléchargez la bibliothèque st_shapelib (Windows) ou libst_shapelib (Linux) depuis My Esri et déplacez-la sur le serveur Oracle.

    Utilisez la bibliothèque appropriée au système d’exploitation de votre serveur Oracle.

    Le répertoire dans lequel vous placez la bibliothèque sur le serveur doit être accessible depuis la machine sur laquelle vous allez exécuter l'outil Créer un type spatial ou le script. Si vous placez la bibliothèque sur une machine UNIX ou Linux, vérifiez que l’administrateur de base de données dispose d’un accès en lecture sur le répertoire et des privilèges pour exécuter le fichier de bibliothèque.

  2. Ouvrez un projet dans ArcGIS Pro, ouvrez la fenêtre Catalog (Catalogue), puis connectez-vous à la base de données en tant qu’administrateur de la base de données sys Oracle.

    Vous créez ainsi un fichier .sde dans le dossier de votre projet.

  3. Ouvrez l’outil de géotraitement Créer le type spatial.

    Vous pouvez utiliser la fenêtre Rechercher pour trouver l'outil ou l'ouvrir à partir du jeu d'outils Espace de travail de la boîte à outils Gestion des données.

  4. Ajoutez la connexion à la base de données que vous avez créée à l'étape 3 dans la zone de texte Base de données en entrée.
  5. Entrez le mot de passe de l'utilisateur de base de données sde dans la zone de texte Mot de passe utilisateur SDE.
  6. Pour créer un espace de table par défaut pour l’utilisateur sde, entrez-le dans la zone de texte Tablespace Name (Nom de l’espace de table).

    L’outil Créer le type spatial crée un espace disque logique de 400 Mo dans l’emplacement de stockage par défaut de Oracle. Pour contrôler l’endroit où l’espace de table est créé ou sa taille, créez-le d’abord dans Oracle, puis spécifiez l’espace de table existant dans la zone de texte Tablespace Name (Nom de l’espace de table). L'outil définit cet espace de table prédéfini comme espace de table par défaut pour l'utilisateur sde.

  7. Accédez à la bibliothèque ou saisissez la valeur ST_Geometry Shape Library Path (Chemin d'accès à la bibliothèque de formes ST_Geometry).

    Il s’agit du chemin d’accès au répertoire sur le serveur Oracle où vous avez placé le fichier libst_shapelib.so ou st_shapelib.dll, y compris le nom du fichier.

    Si, par exemple, vous avez placé le fichier libst_shapelib.so dans le répertoire libraries sur le serveur Linux boxy, vous pouvez saisir /boxy/libraries/libst_shapelib.so.

  8. Cliquez sur Run (Exécuter).

Le type, les sous-types et les fonctions ST_Geometry sont créés dans la structure de l’utilisateur sde et une entrée est créée dans Oracle pour la bibliothèque de formes.

Si vous comptez utiliser la fonction ST_Transform pour procéder à des transformations géographiques, vous devez copier le dossier pedata de votre répertoire d’installation ArcGIS Pro, le placer sur le serveur Oracle et définir une variable d’environnement PEDATAHOME sur le serveur qui pointe vers cet emplacement.

Utiliser la fonction CreateSpatialType

Vous exécutez un script Python qui appelle la fonction CreateSpatialType ArcPy sur une machine ArcGIS Pro ou ArcGIS Server pour créer le type ST_Geometry, le sous-type et les fonctions Esri dans une base de données Oracle.

  1. Téléchargez la bibliothèque st_shapelib (Windows) ou libst_shapelib (Linux) depuis My Esri et déplacez-la sur le serveur Oracle.

    Vérifiez que vous utilisez la bibliothèque appropriée au système d’exploitation de votre serveur Oracle.

    Le répertoire dans lequel vous placez la bibliothèque sur le serveur doit être accessible depuis la machine sur laquelle vous allez exécuter l'outil Créer un type spatial ou le script. Si vous placez la bibliothèque sur une machine UNIX ou Linux, vérifiez que l’administrateur de base de données dispose d’un accès en lecture sur le répertoire et des privilèges pour exécuter le fichier de bibliothèque.

  2. Créez un fichier texte sur l'ordinateur du client ArcGIS, puis copiez-y le script suivant.
    """
    Name: create_spatial_type.py
    Description: Provide connection information to an enterprise database
    and create spatial type in the Oracle or PostgreSQL database.
    Type create_spatial_type.py -h or create_spatial_type.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=['ORACLE', 'POSTGRESQL', ''], default="", help="Type of enterprise DBMS: ORACLE, or POSTGRESQL.")
    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="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 ("-D", dest="Database", type="string", default="none", help="Database name:  Not required for Oracle")
    parser.add_option ("-p", dest="Password", type="string", default="", help="SDE user password")
    parser.add_option ("-t", dest="tablespace", type="string", default="", help="Default tablespace for SDE user")
    parser.add_option ("--path", dest="libpath", type="string", default="", help="path to the ST shape library including library file name.")
    
    # 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("{}: error: {}\n".format(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()
    	password = options.Password 
    	tablespace = options.tablespace
    	database = options.Database.lower()
    	dbms_admin = options.Dbms_admin
    	dbms_admin_pwd = options.Dbms_admin_pwd
    	lib_path = options.libpath
    
    	if( database_type ==""):	
    		print("{}: error: {}\n".format(sys.argv[0], "DBMS type (--DBMS) must be specified."))
    		parser.print_help()
    		sys.exit(3)		
    
    	# Local variables
    	instance_temp = instance.replace("\\","_")
    	instance_temp = instance_temp.replace("/","_")
    	instance_temp = instance_temp.replace(":","_")
    	Conn_File_NameT = instance_temp + "_" + database
    	
    	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.management.CreateDatabaseConnection(out_folder_path=temp, out_name=Connection_File_Name, database_platform=database_type, instance=instance, database=database, account_authentication=account_authentication, username=dbms_admin, password=dbms_admin_pwd, 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: Create spatial type...
    	try:
    		print("Create spatial type...\n")
    		arcpy.management.CreateSpatialType(input_database=Connection_File_Name_full_path, sde_user_password=password, tablespace_name=tablespace, st_shape_library_path=lib_path)
    		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)
  3. Enregistrez le fichier avec l’extension .py.
  4. Exécutez le script en indiquant les options et informations propres à votre site.

    Par exemple, ce script crée le type ST_Geometry dans l’instance Oracle oserve/orcl et la bibliothèque ST_Geometry se trouve dans le répertoire /ora/shape du serveur Oracle (oserve).

    create_spatial_type.py --DBMS ORACLE -i oserve/orcl --auth DATABASE_AUTH -U sys -P M3tsy$ -p 3$@b0eg -t sde --path /net/oserve/ora/shape/libst_shapelib.so

Le type, les sous-types et les fonctions ST_Geometry sont créés dans la structure de l’utilisateur sde et une entrée est créée dans Oracle pour la bibliothèque de formes.

Si vous comptez utiliser la fonction ST_Transform pour procéder à des transformations géographiques, vous devez copier le dossier pedata de votre répertoire d’installation ArcGIS Pro, le placer sur le serveur Oracle et définir une variable d’environnement PEDATAHOME sur le serveur qui pointe vers cet emplacement.