Here are few helpful SQL statements. You can use it when you migrate or create new Oracle database with spatial tables.
In the case when select statement return some rows there is something wrong with your spatial tables. First statement checks for missing metadata, second checks missing spatial indexes and the third checks index validity.
Keep in mind that these queries sometimes are not sufficient to prove that everything is OK with your spatial database or spatial data definition. For example you can have invalid entries in tables related to the definition of spatial reference system (if you are using custom SRID for your spatial data).
Anyway, these posted queries can help you in many cases to detect errors related to migration or creation of spatial tables. The check is performed for all database users (schemas). If you have some restriction, run these queries as a system or sys user.. or some other user that have privileges to execute select statements on all required tables.
… enjoy ...
-- to get all spatial tables without entry in user_sdo_metadata view
select geomet.sdo_owner, geomet.sdo_table_name, geomet.sdo_column_name,
atbl.owner, atbl.table_name, atbl.column_name
from mdsys.sdo_geom_metadata_table geomet, all_tab_cols atbl
where geomet.sdo_owner (+) = atbl.owner
and geomet.sdo_table_name (+) = atbl.table_name
and geomet.sdo_column_name (+) = atbl.column_name
and geomet.sdo_owner is null
and geomet.sdo_table_name is null
and geomet.sdo_column_name is null
and atbl.data_type_owner = 'MDSYS'
and atbl.data_type = 'SDO_GEOMETRY'
and atbl.owner != 'MDSYS';
-- to get all missing spatial indexes
select alic.index_owner, alic.table_name, alic.column_name,
atbl.owner, atbl.table_name, atbl.column_name
from all_ind_columns alic, all_tab_cols atbl
where alic.index_owner (+) = atbl.owner
and alic.table_name (+) = atbl.table_name
and alic.column_name (+) = atbl.column_name
and alic.index_owner is null
and alic.table_name is null
and alic.column_name is null
and atbl.data_type_owner = 'MDSYS'
and atbl.data_type = 'SDO_GEOMETRY'
and atbl.owner != 'MDSYS';
--to check spatial index validity
select alin.owner, alin.table_name, alin.status,
alin.domidx_status, alin.domidx_opstatus
from all_indexes alin
where (alin.index_type = 'DOMAIN'
and alin.ityp_name = 'SPATIAL_INDEX'
and alin.table_name not like '%$%')
and (alin.status != 'VALID'
or alin.domidx_status != 'VALID'
or alin.domidx_opstatus != 'VALID');
No comments:
Post a Comment