APEX 4.2 auf Oracle 12c manuell deinstallieren

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;
begin

if 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;
begin

if 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.

Eine Antwort auf „APEX 4.2 auf Oracle 12c manuell deinstallieren“

  1. Pingback: APEX 5 auf Oracle 12c installieren | Oracle APEX - Erfahrungen, Tipps und Tricks

Schreibe einen Kommentar