Almacenamiento ST_Geometry en Oracle

El tipo de datos espaciales ST_Geometry de Esri se puede usar en las bases de datos de Oracle que contienen una geodatabase y en las que no. Permite integrar datos espaciales con otros tipos de datos de negocios, de modo que la base de datos multiusuario obtiene la ventaja de agregar un componente geográfico a los análisis y productos de datos. Mantener sus datos espaciales junto con otros objetos comerciales también simplifica el acceso multiusuario, la administración y seguridad de sus datos, porque tendrá que administrar menos recursos de almacenamiento de datos.

El tipo de datos espaciales ST_Geometry de Esri es el tipo de almacenamiento de geometría predeterminado para las geodatabases en Oracle. También puede instalar el tipo ST_Geometry en las bases de datos de Oracle usando Crear tipo espacial.

NotaNota:

El tipo ST_Geometry no es compatible con transacciones XA de Oracle.

Para crear una geodatabase y utilizar el índice de dominio y el tipo ST_Geometry en el DBMS de Oracle, el usuario administrador de la geodatabase (sde) debe tener concedidos los privilegios del sistema adecuados para crear instancia de tipos, operadores y procedimientos almacenados. Consulte Permisos de usuario para geodatabases en Oracle para obtener información sobre los permisos necesarios. Para instalar el tipo ST_Geometry en una base de datos de Oracle, también debe haber un usuario sde presente y debe tener concedidos los privilegios para crear instancia de tipos, operadores y procedimientos almacenados. Para obtener más información, vea Agregar el tipo ST_Geometry para una base de datos de Oracle.

Con el tipo espacial Esri ST_Geometry en una geodatabase en Oracle o una base de datos de Oracle, puede obtener acceso a los datos espaciales a través de funciones SQL que implementan el estándar SQL/MM Spatial de ISO y a Simple Feature Specification del OGC. Puede utilizar comandos SQL para almacenar, recuperar y manipular entidades espaciales al igual que cualquier otro tipo de datos. Puede utilizar una lista larga de funciones basadas en estándares con comandos SQL y procedimientos almacenados para recuperar y analizar datos espaciales. El acceso de SQL a los datos permite utilizar otras aplicaciones para acceder a los datos que se crearon en Oracle.

Para obtener acceso a entidades espaciales con SQL, las bibliotecas ST_Geometry se deben instalar en el mismo servidor que el sistema de administración de bases de datos (DBMS) de Oracle. Si desea ejecutar el DBMS de Oracle en un servidor independiente de un servicio de ArcSDE, asegúrese de que el sistema operativo del servidor de Oracle también sea compatible con ArcSDE y de que las bibliotecas ST_Geometry estén instaladas en esa ubicación.

Si desea usar SQL para obtener acceso a tablas de Oracle que utilizan el tipo espacial, debe configurar Oracle Listener. Consulte Configurar Oracle Listener para utilizar SQL para obtener más detalles.

Cómo ST_Geometry almacena datos espaciales

A continuación se ofrece una descripción de ST_Geometry en Oracle:

Nombre

Tipo

ENTITY

NÚMERO(38)

NUMPTS

NÚMERO(38)

MINX

FLOTANTE(64)

MINY

FLOTANTE(64)

MAXX

FLOTANTE(64)

MAXY

FLOTANTE(64)

MINZ

FLOTANTE(64)

MAXZ

FLOTANTE(64)

MINM

FLOTANTE(64)

MAXM

FLOTANTE(64)

ÁREA

FLOTANTE(64)

LEN

FLOTANTE(64)

SRID

NÚMERO(38)

POINTS

BLOB

Los atributos del tipo espacial representan la siguiente información:

Al igual que otros tipos de objeto, el tipo de datos ST_Geometry contiene un método de constructor y funciones. Un método de constructor es una función que devuelve una nueva instancia (objeto) del tipo de datos y establece los valores de sus atributos.

El nombre del constructor es el mismo que el tipo (ST_Geometry). Cuando crea una instancia de un objeto del tipo ST_Geometry, invoca el método de constructor. Por ejemplo:

CREATE TABLE hazardous_sites (name        varchar2(128),
                              location    st_geometry);

Las siguientes funciones del descriptor de acceso ST_Geometry aceptan un único ST_Geometry como entrada y devuelven el valor de propiedad solicitado como un número.

Por ejemplo, la siguiente consulta devuelve el nombre y área de los estados individuales en los Estados Unidos.

SELECT name, st_area(geometry)
FROM us_states
ORDER BY name;

ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point y ST_Polygon son todos subtipos (o subclases) de ST_Geometry. ST_Geometry y los subtipos comparten atributos y funciones comunes. La definición del constructor para ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point, y ST_Polygon es la misma. El nombre de constructor coincide con el tipo que construye.

Dado que ST_Point es un objeto finito (un valor de punto único), también se puede crear con uno de los siguientes métodos.

Este método utiliza puntos de coordenadas y un SRID.

METHOD

 FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
 Argument Name                  Type                    In/Out Default?

 PT_X                           NUMBER                  IN
 PT_Y                           NUMBER                  IN
 SRID                           NUMBER                  IN

SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 1) );

Este método permite al usuario especificar puntos de coordenadas y un valor de elevación para cada punto.

METHOD

 FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
 Argument Name                  Type                    In/Out Default?
 
 PT_X                           NUMBER                  IN
 PT_Y                           NUMBER                  IN
 PT_Z                           NUMBER                  IN
 SRID                           NUMBER                  IN

SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 5, 1) );

Este último método para ST_Point permite además que se especifique un valor de medida como parte del objeto de punto creado.

METHOD

 FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
 Argument Name                  Type                    In/Out Default?

 PT_X                           NUMBER                  IN
 PT_Y                           NUMBER                  IN
 PT_Z                           NUMBER                  IN
 MEASURE                        NUMBER                  IN
 SRID                           NUMBER                  IN

SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 5, 401, 1) );

Esquema de metadatos

El tipo ST_Geometry para Oracle y las tablas de metadatos pertenecen al esquema SDE. La definición de esquema es la descripción de la tabla base para las tablas de metadatos que se utilizan para definir y describir la columna y la tabla del tipo, el índice espacial (el índice de dominio ST_Spatial_Index) y la información de las referencias espaciales. Todas las tablas de metadatos, paquetes y definiciones de tipo de índice de dominio y de tipo se crean en el esquema SDE.

Dado que las definiciones para ST_Geometry pertenecen al usuario SDE, nunca elimine el usuario SDE de la base de datos si tiene tablas en la base de datos que contienen columnas ST_Geometry. Si lo hace, puede hacer que dichas tablas no estén accesibles.

Como se menciona en la Guía de desarrolladores de aplicaciones de Oracle, cuando un usuario se elimina de una base de datos, una de las instrucciones de eliminación es DROP TYPE con la opción FORCE. Esta instrucción quita todos los tipos que pertenecen a ese usuario, de modo que el usuario se puede quitar de la base de datos. DROP TYPE FORCE hace que se descarten los tipos incluso si tienen tablas o tipos dependientes asociados a estos. Una vez que eso ocurre, las tablas asociadas se marcan como no válidas, lo que hace que no se pueda obtener acceso a los datos en las tablas.

Consulte Tablas del sistema de una geodatabase almacenadas en Oracle para obtener una descripción de las siguientes tablas de metadatos ST_Geometry:

  • ST_COORDINATE_SYSTEMS
  • ST_GEOMETRY_COLUMNS
  • ST_GEOMETRY_INDEX
  • ST_SPATIAL_REFERENCES
InmersiónInmersión:

Además, se crean los siguientes objetos de bases de datos para mantener los metadatos de ST_Geometry:

  • Un usuario de base de datos de SDE
  • Un espacio de tabla predeterminado para el usuario SDE.
  • Funciones ST_Geometry
  • Vistas ST_Geometry
    • ALL_ST_GEOMETRY_COLUMNS_V
    • USER_ST_GEOMETRY_COLUMNS_V
    • USER_ST_GEOM_INDEX_V
  • Desencadenadores ST_Geometry
    • DB_EV_DROP_ST_METADATA
    • DB_EV_ALTER_ST_METADATA
    • DB_EV_RENAME_ST_METADATA
    • TG_ST_SPATIAL_REF_SRID
    • TG_ST_CREF_SYS
    • TG_GCOL_NAME
    • TG_ST_GEOMINDEX_NAME
  • Un paquete y un cuerpo de paquete SPX_UTIL
  • Un operador SDEXMLTOTEXT
  • Tipos ST_Geometry
    • BLOB_ARRAY_TAB
    • INT_ARRAY_TAB
    • FLT_ARRAY_TAB
    • BND_ROWID_TAB
    • SP_GRID_INFO

      SP_Grid_Info se utiliza como el tipo de datos para el campo GRID en la tabla ST_Geometry_Index. Contiene la información de nivel de cuadrícula para índices espaciales.

Crear clases de entidad en Oracle con el almacenamiento ST_Geometry

En las bases de datos que tienen instalado el tipo de datos espaciales ST_Geometry, ST_Geometry se especifica como tipo de almacenamiento cuando se crea una clase de entidad.

En las geodatabases, el tipo de almacenamiento de geometría utilizado para una clase de entidad se determina con el ajuste GEOMETRY_STORAGE en la palabra clave de configuración que se especifica al crear la clase de entidad.

Configurar ST_Geometry para que sea el tipo de almacenamiento predeterminado para las nuevas clases de entidad de geodatabase

A partir de ArcGIS 9.3, ST_Geometry es el tipo de almacenamiento predeterminado para las clases de entidad en una nueva geodatabase en Oracle. Eso significa que el parámetro GEOMETRY_STORAGE de la palabra clave DEFAULTS en la tabla DBTUNE se establece en ST_GEOMETRY.

Si inicialmente creó la geodatabase antes de ArcGIS 9.3 y desea crear todas las nuevas clases de entidad utilizando el almacenamiento ST_Geometry por defecto, debe modificar el parámetro GEOMETRY_STORAGE en la palabra clave DEFAULTS en la tabla DBTUNE. Establezca el parámetro GEOMETRY_STORAGE en ST_GEOMETRY.

NotaNota:

Utilice el comando de administración sdedbtune para modificar la configuración DBTUNE. Consulte Modificar el contenido de la tabla DBTUNE y la Referencia de comandos de administración de ArcSDE proporcionada con el servidor de aplicaciones de ArcSDE para Oracle con el fin de obtener detalles sobre el uso del comando sdedbtune.

Utilizar el almacenamiento ST_Geometry para algunas clases de entidad de la geodatabase

Las geodatabases en Oracle son compatibles con una cantidad de tipos de almacenamiento de geometría diferentes; estos tipos diferentes se pueden utilizar todos juntos en la misma base de datos. Aunque solo puede haber un tipo de almacenamiento de geometría predeterminado, se pueden crear tablas individuales con diferentes tipos de datos.

Si desea que solo algunas clases de entidad usen el almacenamiento de tipo espacial ST_Geometry, puede establecer DEFAULTS GEOMETRY_STORAGE en un tipo de almacenamiento diferente y crear una palabra clave independiente para el almacenamiento ST_Geometry. Por ejemplo, puede usar el comando sdedbtune para exportar la tabla DBTUNE a un archivo de texto, agregar una palabra clave al archivo como la que se muestra a continuación y volver a importar el archivo en la tabla DBTUNE:

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
ATTRIBUTE_BINARY    "BLOB"
RASTER_STORAGE	    "BLOB"
ST_GEOM_LOB_STORAGE  " STORE AS (
#               TABLESPACE <tablespace_name>
                ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"

UI_TEXT             "User Interface text description for ST_GEOMETRY"

COMMENT             "Any general comment for ST_GEOMETRY keyword"

END

Una vez que se haya agregado la palabra clave, puede usarla cuando cree clases de entidad con las que desee utilizar el almacenamiento de tipo de datos ST_Geometry. Por ejemplo, si tiene un pequeño subconjunto de datos a los que se debe acceder usando SQL, puede crear tan solo ese subconjunto de clases de entidad para usar el tipo de datos espaciales ST_Geometry para el almacenamiento de geometría.

¿Qué objetos de base de datos se crean para los datos de usuarios?

Hay tres objetos de base de datos creados cuando utiliza ArcGIS para crear una clase de entidad que utiliza el almacenamiento ST_Geometry. Estos objetos y los parámetros DBTUNE utilizados para controlar el almacenamiento se enumeran en la siguiente tabla:

Objetos de base de datos

Parámetros de almacenamiento

Una tabla con una columna ST_Geometry

El parámetro B_STORAGE define el almacenamiento para la tabla.

El parámetro ST_GEOM_LOB_STORAGE define el almacenamiento para los segmentos LOB en la tabla.

Un índice espacial

El parámetro S_STORAGE define el almacenamiento de índice espacial.

Un índice en la columna ObjectID

El parámetro B_INDEX_ROWID define el almacenamiento para este índice.

Para obtener más información sobre los parámetros de configuración, consulte Parámetros de configuración DBTUNE de Oracle y la siguiente sección sobre el almacenamiento de LOB.

Configurar almacenamiento para el segmento LOB

Debe modificar el parámetro ST_GEOM_LOB_STORAGE en la lista de palabras clave DEFAULTS. Al agregarse a la palabra clave DEFAULTS, sin embargo, el nombre del segmento LOB no se debe incluir en la definición de este parámetro. Si se incluye, a menos que modifique el valor del nombre, al crear una segunda entidad se produce una falla debido a que cada nombre de segmento LOB debe ser único para un esquema determinado. El siguiente ejemplo de parámetro ST_GEOM_LOB_STORAGE no contiene ningún nombre de objeto y por lo tanto evita colisiones de nombre dentro del mismo esquema:

ST_GEOM_LOB_STORAGE  " STORE AS (
  ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"

Los ejemplos de valores válidos para el parámetro ST_GEOM_LOB_STORAGE incluyen los siguientes:

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
ATTRIBUTE_BINARY    "BLOB"
RASTER_STORAGE	    "BLOB"
ST_GEOM_LOB_STORAGE  " STORE AS (TABLESPACE TERRA_NDX ENABLE STORAGE IN ROW CHUNK 8K
 RETENTION CACHE)"

UI_TEXT             "User Interface text description for ST_GEOMETRY"

COMMENT             "Any general comment for ST_GEOMETRY keyword"

END

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
ATTRIBUTE_BINARY    "BLOB"
RASTER_STORAGE	    "BLOB"
ST_GEOM_LOB_STORAGE  " STORE AS (ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"

UI_TEXT             "User Interface text description for ST_GEOMETRY"

COMMENT             "Any general comment for ST_GEOMETRY keyword"

END

Como se mencionó anteriormente en esta sección, si define los nombres de LOB y de espacio de tabla de índice de LOB, debe modificar estos valores antes de la creación de cada clase de entidad. Si no lo hace, las creaciones de clases de entidad subsiguientes fallan debido a que cada nombre de segmento debe ser único.

5/10/2014