Ist es Ihnen schon passiert, dass Sie in Application Express ein Schema einem Workspace zuordnen wollten, aber dieses Schema wurde Ihnen nicht angeboten? Und wenn Sie den Schemanamen trotzdem manuell eingetragen haben, wurde der Versuch mit folgender Fehlermeldung quittiert: "The requested schema is reserved or is restricted and the site administrator does not have the privilege to assign restricted schemas to workspaces.".
Das liegt daran, dass standardmäßig alle vordefinierten Schemata (z.B. SYSTEM, SCOTT, RMAN, HR, SH ....) für den Zugriff über Application Express gesperrt sind. Die Liste aller gesperrten Schemata erhalten Sie mit folgendem Select:
SELECT schema FROM FLOWS_020000.WWV_FLOW_RESTRICTED_SCHEMAS;
Anmerkung: Hier wie im folgenden wird von der Application Express Version 2.0 ausgegangen. bei anderen Versionen muss der Schemaname entsprechend angepasst werden.
Schemanamen der Unterschiedlichen Apex Versionen:
FLOWS_020100
FLOWS_020200
FLOWS_030000
FLOWS_030100
APEX_030200
APEX_040000
Version 2.1
Version 2.2
Version 3.0
Version 3.1
Version 3.2
Version 4.0
Über das Package FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS kann ein Datenbankadministrator Schemata freigeben oder sperren.
In der APEX Version 3.2 wurde das Schema umbenannt. Der korrekte Name lautet nun, z.B. in der Version 4.0, APEX_040000.HTMLDB_SITE_ADMIN_PRIVS. Es gibt aber auch ein Synonym für das Package mit dem Namen APEX_SITE_ADMIN_PRIVS. ;-)
Es beinhaltet folgende Prozeduren:
Alle Freigaben und Sperren müssen mit COMMIT abgeschlossen werden, um in Kraft zu treten. Wird ein Schema gesperrt, so sind bereits getroffene Workspace-Zuordnungen davon nicht betroffen. Generell freigegebene Schemata verschwinden aus WWW_FLOW_RESTRICTED_SCHEMAS, begrenzt freigegebene jedoch nicht. Mit CREATE_EXCEPTION erzeugte Ausnahmen sind in WWV_FLOW_RSCHEMA_EXCEPTIONS zu finden:
SELECT schema_id, workspace_name FROM FLOWS_020000.WWV_FLOW_RSCHEMA_EXCEPTIONS;
Die Prozedur REPORT erzeugt nur einen SELECT-Befehl, der die beiden Tabellen verknüpft und gibt diesen SELECT-Befehl über DBMS_OUTPUT aus, nicht jedoch dessen Ergebnis. Der ausgegebene Select lautet (unabhängig vom angemeldeten User):
SELECT a.schema "SCHEMA", b.workspace_name "WORKSPACE"
FROM WWV_FLOW_RESTRICTED_SCHEMAS a, WWV_FLOW_RSCHEMA_EXCEPTIONS b
WHERE b.schema_id(+) = a.id;
Beispiele:
BEGIN
FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS.UNRESTRICT_SCHEMA(p_schema => 'SCOTT');
COMMIT;
END;
/
BEGIN
FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS.RESTRICT_SCHEMA(p_schema => 'HAS');
COMMIT;
END;
/
BEGIN
FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS.CREATE_EXCEPTION
(p_schema => 'HAS',
p_workspace => 'SCHULUNG');
COMMIT;
END;
/
BEGIN
FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS.REMOVE_EXCEPTION
(p_schema => 'HAS',
p_workspace =>'SCHULUNG');
-- oder:
FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS.REMOVE_WORKSPACE_EXCEPTIONS
(p_workspace => 'SCHULUNG');
-- oder:
FLOWS_020000.HTMLDB_SITE_ADMIN_PRIVS.REMOVE_SCHEMA_EXCEPTIONS
(p_schema => 'HAS');
COMMIT;
END;
/
Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.