Bei meinen ersten „Gehversuchen“ mit Oracle 12c und einer APEX 5 Installation kam ich leider in den „Genuss“, die von 12c mitgebrachte APEX 4.2 Installation deinstallieren zu müssen. Dabei lief ich leider auf diverse Schwierigkeiten, die verhinderten, dass der Aufruf von „@apxremov.sql“ durchgelaufen ist. Nach diversen Versuchen habe ich den diesen Versuch aufgegeben und APEX 4.2 von komplett manuell deinstalliert.
Tipp: Das Skript „apxremov.sql“ ruft in der 4.2 2 weitere Skripte auf. Ich habe mir einfach diese Skript angeschaut und die wichtigen Anweisungen rauskopiert und manuell ausgeführt.
Um das Ganze aber zu vereinfachen, hier eine Anleitung der manuellen Schritte.
Deinstallation in CDB
— sqlplus.exe aufrufen als SYSDBA in CDB connecten
sqlplus / as sysdba
— CURRENT_SCHEMA setzen: das sollte APEX_040200 sein
ALTER SESSION SET CURRENT_SCHEMA = APEX_040200;
begin
wwv_flow_upgrade.drop_public_synonyms;
end;/
— speziellen undokumentierten Parameter setzen, um den Fehler ORA-28014 zu umgehen
ALTER SESSION SET „_oracle_script“ = TRUE;
DROP USER apex_040200 CASCADE;
DROP USER flows_files CASCADE;
DROP USER apex_public_user CASCADE;
DROP ROLE apex_administrator_role;
— Cleanup XDB
declare
cfg XMLType;
l_dad_list dbms_epg.varchar2_table;
beginif dbms_xdb.existsresource(‚/i/‘) then
dbms_xdb.deleteresource(‚/i/‘, dbms_xdb.delete_recursive_force);
end if;if dbms_xdb.existsresource(‚/images/‘) then
dbms_xdb.deleteresource(‚/images/‘,dbms_xdb.delete_recursive_force);
end if;dbms_epg.get_dad_list( l_dad_list );
for i in 1..l_dad_list.count loop
if upper(l_dad_list(i)) = ‚APEX‘ then
dbms_epg.drop_dad(‚APEX‘);
end if;
end loop;cfg := dbms_xdb.cfg_get();
if cfg.existsNode(‚/xdbconfig/sysconfig/protocolconfig/httpconfig/webappconfig/servletconfig/servlet-mappings/servlet-mapping/servlet-name[text()=“PublishedContentServlet“]‘) = 1 then
cfg := cfg.deleteXML(‚/xdbconfig/sysconfig/protocolconfig/httpconfig/webappconfig/servletconfig/servlet-mappings/servlet-mapping/servlet-name[text()=“PublishedContentServlet“]/..‘);
end if;if cfg.existsNode(‚/xdbconfig/sysconfig/protocolconfig/httpconfig/webappconfig/servletconfig/servlet-list/servlet/servlet-name[text()=“PublishedContentServlet“]‘) = 1 then
cfg := cfg.deleteXML(‚/xdbconfig/sysconfig/protocolconfig/httpconfig/webappconfig/servletconfig/servlet-list/servlet/servlet-name[text()=“PublishedContentServlet“]/..‘);
end if;dbms_xdb.cfg_update(cfg);
commit;
dbms_xdb.cfg_refresh;end;
/
— SYS owned Objects:
DROP PROCEDURE validate_apex;
DROP PACKAGE wwv_flow_val;
DROP PACKAGE wwv_dbms_sql;
DROP PACKAGE wwv_flow_key;
DROP LIBRARY wwv_flow_val_lib;
DROP VIEW wwv_flow_gv$session;
Deinstallation in PDB(s)
— SQLPLUS als SYSDBA aufrufen
sqlplus / as sysdba
— connecten gegen PDB (ich habe nur eine PDB und die heißt „PDBORA12C“.
ALTER SESSION SET CONTAINER=pdbora12c;
— CURRENT_SCHEMA auf APEX_040200 setzen
ALTER SESSION SET CURRENT_SCHEMA = apex_040200;
BEGIN
wwv_flow_upgrade.drop_public_synonyms;
END;/
DROP USER apex_040200 CASCADE;
DROP USER FLOWS_FILES CASCADE;
DROP USER APEX_PUBLIC_USER CASCADE;
DROP ROLE APEX_ADMINISTRATOR_ROLE;
DROP USER APEX_LISTENER CASCADE;
DROP USER APEX_REST_PUBLIC_USER CASCADE;— Cleanup XDB
declare
cfg XMLType;
l_dad_list dbms_epg.varchar2_table;
beginif dbms_xdb.existsresource(‚/i/‘) then
dbms_xdb.deleteresource(‚/i/‘, dbms_xdb.delete_recursive_force);
end if;if dbms_xdb.existsresource(‚/images/‘) then
dbms_xdb.deleteresource(‚/images/‘,dbms_xdb.delete_recursive_force);
end if;dbms_epg.get_dad_list( l_dad_list );
for i in 1..l_dad_list.count loop
if upper(l_dad_list(i)) = ‚APEX‘ then
dbms_epg.drop_dad(‚APEX‘);
end if;
end loop;cfg := dbms_xdb.cfg_get();
if cfg.existsNode(‚/xdbconfig/sysconfig/protocolconfig/httpconfig/webappconfig/servletconfig/servlet-mappings/servlet-mapping/servlet-name[text()=“PublishedContentServlet“]‘) = 1 then
cfg := cfg.deleteXML(‚/xdbconfig/sysconfig/protocolconfig/httpconfig/webappconfig/servletconfig/servlet-mappings/servlet-mapping/servlet-name[text()=“PublishedContentServlet“]/..‘);
end if;if cfg.existsNode(‚/xdbconfig/sysconfig/protocolconfig/httpconfig/webappconfig/servletconfig/servlet-list/servlet/servlet-name[text()=“PublishedContentServlet“]‘) = 1 then
cfg := cfg.deleteXML(‚/xdbconfig/sysconfig/protocolconfig/httpconfig/webappconfig/servletconfig/servlet-list/servlet/servlet-name[text()=“PublishedContentServlet“]/..‘);
end if;dbms_xdb.cfg_update(cfg);
commit;
dbms_xdb.cfg_refresh;end;
/
Nun können wir noch mal prüfen, ob die APEX Schemata alle entfernt wurden:
— connecten als SYSDBA gegen CDB
sqlplus / as sysdba
show con_name
— hier sollte CDB$ROOT angezeigt werden
SELECT username FROM dba_users WHERE username LIKE ‚APEX%‘ OR username LIKE ‚FLOWS%‘;
— hier sollte nun nichts mehr angezeigt werden.
— connecten gegen PDB(s)
ALTER SESSION SET CONTAINER = pdbora12c;
show con_name
— hier sollte PDBORA12C bzw. der Name Ihrer PDB angezeigt werden.
SELECT username FROM dba_users WHERE username LIKE ‚APEX%‘ OR username LIKE ‚FLOWS%‘;
— hier sollte nun auch nichts mehr angezeigt werden.
Nun sollten wir eine saubere, APEX-freie Datenbank haben.
Pingback: APEX 5 auf Oracle 12c installieren | Oracle APEX - Erfahrungen, Tipps und Tricks