1 votos

Consulta de tablas no registradas con opción de trasladar las ediciones a la base

Tengo una geodatabase empresarial de Oracle. En teoría, las más de 500 tablas de la base de datos deberían estar registradas como versionadas, con la opción de trasladar las ediciones a la base .

Sin embargo, me ha llamado la atención que algunas de las mesas estaban no registrado con la opción de mover las ediciones a la base.

Me gustaría encontrar todas las tablas que no fueron registradas con la base (y luego volver a registrarlas manualmente de forma correcta).

¿Es posible escribir una consulta SQL para este fin?

0voto

user62572 Puntos 587

He hecho algunas tablas de prueba.

Este es el aspecto que tienen en el sde.table_registry tabla del sistema:

+-----------------+------------------------+----------+---------------+--------------+---------------+--------------------+-----------------+-------------+----------------------------+
| REGISTRATION_ID |      TABLE_NAME        |  OWNER   | ROWID_COLUMN  | DESCRIPTION  | OBJECT_FLAGS  | REGISTRATION_DATE  | CONFIG_KEYWORD  | MINIMUM_ID  |       IMV_VIEW_NAME        |
+-----------------+------------------------+----------+---------------+--------------+---------------+--------------------+-----------------+-------------+----------------------------+
|          107101 | A_TEST_FC_NOREG        | ENG      | OBJECTID      |              |         16391 |         1520010751 | DEFAULTS        |           1 |                            |
|          107099 | A_TEST_FC_REGBASE      | ENG      | OBJECTID      |              |        114703 |         1520010643 | DEFAULTS        |           1 | A_TEST_FC_REGBASE_EVW      |
|          107100 | A_TEST_FC_REGNOBASE    | ENG      | OBJECTID      |              |         16399 |         1520010715 | DEFAULTS        |           1 | A_TEST_FC_REGNOBASE_EVW    |
|          107092 | A_TEST_TABLE_NOREG     | ENG      | OBJECTID      |              |             3 |         1520010203 | DEFAULTS        |           1 |                            |
|          107056 | A_TEST_TABLE_REGBASE   | ENG      | OBJECTID      |              |         98315 |         1520007082 | DEFAULTS        |           1 | A_TEST_TABLE_REGBASE_EVW   |
|          107057 | A_TEST_TABLE_REGNOBASE | ENG      | OBJECTID      |              |            11 |         1520007121 | DEFAULTS        |           1 | A_TEST_TABLE_REGNOBASE_EVW |
+-----------------+------------------------+----------+---------------+--------------+---------------+--------------------+-----------------+-------------+----------------------------+

Puedo consultar el gdb_items y sde.table_registry tablas para obtener la información que necesito:

select
    cast(rownum as number(38,0)) as rownum_,
    iu.name,
    iu.versioned,
    cast(tr.object_flags as number(38,0)) as object_flags,
    case tr.object_flags
        when 114703 then 'REGISTERED WITH BASE'
        when 98315  then 'REGISTERED WITH BASE'
        when 11     then 'NOT REGISTERED WITH BASE'
        when 16399  then 'NOT REGISTERED WITH BASE'
    end as versioning_type
from
    (
    select  --non spatial tables
        i.name as name,
        extractvalue(definition_xml.column_value, 'Versioned') as versioned
    from        
         sde.gdb_items_vw i 
    cross join 
        table(xmlsequence(xmltype(i.definition).extract('/DETableInfo/Versioned'))) definition_xml
    union all
    select  --feature classes     
        i.name as name,
        extractvalue(definition_xml.column_value, 'Versioned') as versioned
    from        
         sde.gdb_items_vw i 
    cross join 
        table(xmlsequence(xmltype(i.definition).extract('/DEFeatureClassInfo/Versioned'))) definition_xml
    ) iu
left join 
    sde.table_registry tr
    on iu.name = tr.owner || '.' || tr.table_name
where        
    iu.name like 'ENG.%'

La respuesta:

+---------------------------------+-----------+---------------+--------------------------+
|           TABLE_NAME            | VERSIONED | OBJECT_FLAGS  |     VERSIONING_TYPE      |
+---------------------------------+-----------+---------------+--------------------------+
| INFRASTR.A_TEST_FC_NOREG        | false     |         16391 |                          |
| INFRASTR.A_TEST_FC_REGBASE      | true      |        114703 | REGISTERED WITH BASE     |
| INFRASTR.A_TEST_FC_REGNOBASE    | true      |         16399 | NOT REGISTERED WITH BASE |
| INFRASTR.A_TEST_TABLE_NOREG     | false     |             3 |                          |
| INFRASTR.A_TEST_TABLE_REGBASE   | true      |         98315 | REGISTERED WITH BASE     |
| INFRASTR.A_TEST_TABLE_REGNOBASE | true      |            11 | NOT REGISTERED WITH BASE |
+---------------------------------+-----------+---------------+--------------------------+

Como puede ver, el conjunto de resultados tiene un versioning_type que contiene la información que necesito:

  • null (no versionado)
  • REGISTRADO EN LA BASE
  • NO ESTÁ REGISTRADO EN LA BASE

La columna object_flags:

No pude entender cómo el tipo de versión (con o sin base) se almacena en la base de datos. Mi mejor conjetura/resolución fue interpretar los valores en el object_flags columna:

    when 114703 then 'REGISTERED WITH BASE'
    when 98315  then 'REGISTERED WITH BASE'
    when 11     then 'NOT REGISTERED WITH BASE'
    when 16399  then 'NOT REGISTERED WITH BASE'

Sin embargo, estas interpretaciones son sólo conjeturas. No tengo ni idea de lo que el object_flags (no he podido encontrar nada en los documentos).


Error:

La consulta se ejecuta sin problemas en SQL Developer. Sin embargo, da error cuando se ejecuta en ArcMap. Mi mejor suposición es que la causa es algún tipo de error en los datos XML de las tablas de mi sistema de geodatabase (que ArcMap no puede manejar, pero SQL Developer sí).

Error reading OID from table. Reading rows has been stopped. Check that the datasource is valid.
Underlying DBMS error[ORA-31011: XML parsing failed
ORA-1923:error occurred in XML processing at lines 1
LPX-00245: extra data after end of document
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at line 1]
The operation is not supported by this implementation.

Me gustaría saber si alguien más tiene este problema, o si es sólo mi base de datos geográfica la que causa el error.


Rutas XML:

El acceso a las rutas XML puede ser complicado. Tengo una respuesta aquí que podría ser útil para otros: Lista de todos los campos y sus dominios, para cada tabla usando SQL

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X