Donnerstag, 30. September 2010

APEX und die Frage: Wo sind meine Metadaten geblieben?

Wer schon mal eine kleine oder auch größere APEX-Geo-Anwendung erstellt hat, wird die nachfolgend beschriebene Situation vielleicht schon mal erlebt haben.

Jede Tabelle mit einer SDO_GEOMETRY-Spalte benötigt eine Registrierung in den SDO-Metadaten der Oracle Datenbank. Das ist ein INSERT in die Nutzer-bezogene View USER_SDO_GEOM_METADATA und kann z.B. so aussehen:
SQL> insert into user_sdo_geom_metadata (
  table_name,
  column_name,
  diminfo,
  srid)
values (
  'GEOTAB',
  'geometry',
  sdo_dim_array(sdo_dim_element('X',-180,180,0.005),
  sdo_dim_element('Y',-90,90,0.005)),
  8307);
Entwickelt man eine Anwendung in APEX und benutzt für das Registrieren der SDO_GEOMETRY Spalte in den Metadaten den SQL Workshop, dann läuft das soweit auch ohne Probleme durch.

Dann wird ordentlicherweise auch gleich noch der Spatial Index angelegt und schon erscheint die Fehlermeldung ORA-00942: table or view does not exist.

Ein kurzes
SQL> select * from user_sdo_geom_metadata where table_name = 'GEOTAB';
bringt kein Ergebnis zurück.

Was ist passiert? Wo ist der Eintrag in die Metadaten geblieben?
Mit DBA-Rechten ist es recht einfach, in der entsprechenden Tabelle des Nutzers MDSYS nachzuschauen.
SQL> select * from mdsys.sdo_geom_metadata_table;
Dort ist in der Spalte SDO_OWNER dann anstatt des erwarteten Nutzers (hier im Beispiel SPATIAL) je nach dem von APEX verwendeten Web Listener entweder ANONYMOUS, APEX_PUBLIC_USER oder HTMLDB_PUBLIC_USER zu finden. Das ist der Nutzername der APEX-Session, in dessen Schema dann auch die SDO_GEOMETRY Metadaten registriert werden.

Wie kann das jetzt bereinigt werden?
Bitten Sie Ihren DBA, Ihrem Nutzer UPDATE-Rechte für die MDSYS-Tabelle SDO_GEOM_METADATA_TABLE zuzuweisen.

SQL> grant update on mdsys.sdo_geom_metadata_table;
Dann ändern Sie den SDO_OWNER-Eintrag wie folgt ab:
SQL> update MDSYS.SDO_GEOM_METADATA_TABLE
  set sdo_owner='SPATIAL'
  where sdo_table_name = 'GEOTAB' and sdo_owner = 'ANONYMOUS';
Wenn Sie jetzt die Metadaten überprüfen, sollte nunmehr alles im grünen Bereich sein.

1 Kommentar:

  1. Neu in APEX 5.0 !
    Hier gibt es jetzt das Package APEX_SPATIAL. Damit können die SDO-Metadaten registriert, geändert und auch wieder gelöscht werden.
    In der Doku gibt es dazu die notwendigen Informationen: http://docs.oracle.com/cd/E59726_01/doc.50/e39149/apex_spatial.htm#AEAPI29874

    AntwortenLöschen