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