Bei manchen (äh fast allen) Applikationen gibt es die geliebten ReadMe (RTFM) Dateien. Jeder von uns liest diese Dateien natürlich ordnungsgemäß komplett von vorne bis hinten durch. :-)
Sollten durch die Installation einer Applikation diverse Initialisierungsparameter auf bestimmte Werte gesetzt werden müssen, könnte man dem Benutzer folgenden kleinen SQL-Befehl (natürlich angepasst an Ihre Wünsche) mitgeben:
Beispielempfehlung für die Installation von Apex 5.1/18.x mit dem EPG Gateway auf Oracle 12.x/18.x Datenbanken:
SELECT * FROM ( SELECT name, nvl(display_value,'NULL') as Wert, CASE WHEN name='db_create_file_dest' THEN (select substr(name,1,instr(name,'\',-1)-1) FROM v$datafile where rownum=1) WHEN name='shared_servers' THEN '>=10 bei EPG' WHEN name='max_shared_servers' THEN '>=20 bei EPG' WHEN name='job_queue_processes' THEN '>=10' WHEN name='session_cached_cursors' THEN '>=100' WHEN name='sga_max_size' THEN '>=550M' WHEN name='sga_target' THEN '>=550M' WHEN name='dispatchers' THEN (select'(PROTOCOL=TCP) (SERVICE='||value ||'XDB) (DISPATCHERS=3)' from v$parameter where name='instance_name') WHEN name='audit_trail' THEN 'db,extended oder xml,extended' END as empfehlung FROM v$parameter) WHERE empfehlung IS NOT NULL;
Ausgabe:
NAME Wert EMPFEHLUNG---------------------- ------ ----------------------------------------sga_max_size 440M >=350Msga_target 440M >=350Mdb_create_file_dest NULL C:\ORACLE\PRODUCT\10.2.0\ORADATA\O10Gdispatchers NULL (PROTOCOL=TCP)(SERVICE=o10gXDB) (DISPATCHERS=3)shared_servers 0 >=5 max_shared_servers NULL >=20 session_cached_cursors 20 >=50 job_queue_processes 10 >5audit_trail NONE db,extended oder xml,extended
Oder Sie basteln dem Benutzer ein Skript, das die Parameter gleich selber umsetzt:
SELECT * FROM ( SELECT CASE WHEN name='db_create_file_dest' THEN (select 'ALTER SYSTEM SET db_create_file_dest=' ||substr(name,1,decode(instr(name,'\'),0, instr(name,'/',-,2),instr(name,'\',-1,2))-1) ||';' from v$datafile where rownum=1) WHEN name='shared_servers' THEN 'ALTER SYSTEM SET shared_servers=5;' WHEN name='max_shared_servers' THEN 'ALTER SYSTEM SET max_shared_servers=20;' WHEN name='job_queue_processes' THEN 'ALTER SYSTEM SET job_queue_processes=10;' WHEN name='session_cached_cursors' THEN 'ALTER SYSTEM SET session_cached_cursors=50;' WHEN name='sga_max_size' THEN 'ALTER SYSTEM SET sga_max_size=350M SCOPE=SPFILE;' WHEN name='sga_target' THEN 'ALTER SYSTEM SET sga_target=350M SCOPE=SPFILE;' WHEN name='dispatchers' THEN (select 'ALTER SYSTEM SET dispatchers= (PROTOCOL=TCP)(SERVICE='|| value || 'XDB) (DISPATCHERS=3) scope=spfile;' from v$parameter where name='instance_name') WHEN name='audit_trail' THEN 'ALTER SYSTEM SET audit_trail='||chr(39)|| 'db,extended'||chr(39)||'scope=spfile;' END as empfehlung FROM v$parameter) WHERE empfehlung IS NOT NULL;
ALTER SYSTEM SET sga_max_size=350M SCOPE=SPFILE;ALTER SYSTEM SET sga_target=350M SCOPE=SPFILE;ALTER SYSTEM SET db_create_file_dest=/opt/oracle/oradata;ALTER SYSTEM SET dispatchers=(PROTOCOL=TCP) (SERVICE=orclXDB) (DISPATCHERS=3) scope=spfile;ALTER SYSTEM SET shared_servers=5;ALTER SYSTEM SET max_shared_servers=20;ALTER SYSTEM SET session_cached_cursors=50;ALTER SYSTEM SET job_queue_processes=10;ALTER SYSTEM SET audit_trail='db,extended' scope=spfile;
Natürlich können Sie die Parameterempfehlungen mit Ihren eigenen Wünschen optimieren.
Auch ganz praktisch ist Netzwerk und Konfig Check, der (fast) alles beinhaltet:SELECT * FROM (SELECT 1,'Username' as Info1, 'Account Status' as Info2,'Lock Date' as Info3, 'Expirary Date' as Info4 FROM dualUNION ALLSELECT 2,'------------','---------------','--------------','------------------' FROM dualUNION ALLSELECT 3,u.username,u.account_status,to_char(u.lock_date,'DD.MM.YY HH24:MI'),to_char(u.EXPIRY_DATE,'DD.MM.YY HH24:MI')FROM dba_users uWHERE (u.username IN ('ANONYMOUS','FLOWS_FILES')OR u.username LIKE 'APEX%'OR u.username LIKE 'ORDS%') AND u.username<>'ORDSYS'UNION ALLSELECT 4,'#################','#############','#############','#################' FROM dualUNION ALLSELECT 5,'COMPO_NAME','VERSION','Status','Modified' FROM dualUNION ALLSELECT 6,'------------','---------------','--------------','------------------' FROM dualUNION ALLSELECT 7,replace(comp_name,'Oracle ',''),version,status,modifiedFROM dba_registryWHERE comp_id='APEX'UNION ALLSELECT 8,'#################','#############','#############','#################' FROM dualUNION ALLSELECT 9,'HTTP Port','FTP Port','Image Count','Allow Anonymus Repo Access'FROM dualUNION ALLSELECT 10,'------------','---------------','--------------','------------------' FROM dualUNION ALLSELECT 11,to_char(dbms_xdb.gethttpport ),to_char(dbms_xdb.getftpport),(SELECT count(*)||' ' FROM PATH_VIEWWHERE UNDER_PATH(res, '/images/',1)>0),(select extractValue(dbms_xdb.cfg_get(), '/xdbconfig/sysconfig/protocolconfig/httpconfig/allow-repository-anonymous-access') from dual) FROM dualUNION ALLSELECT 12,'#################','#############','#############','#################' FROM dualUNION ALLSELECT 14,'Workspace','Username','Admin/Dev','Account Locked' FROM dualUNION ALLSELECT 15,'#################','#############','#############','#################' FROM dualUNION ALLSELECT 16,workspace_display_name,user_name,is_admin||'/'||is_application_developer,account_lockedFROM apex_workspace_developersUNION ALLSELECT 17,'Parameter','Value','--------------','------------------' FROM dualUNION ALLSELECT 18,'------------','---------------','--------------','------------------' FROM dualUNION ALLSELECT 19,name,value,null,null from v$parameter where name in ('local_listener','session_cached_cursors')UNION ALLSELECT 20,'#################','#############','#############','#################' FROM dualUNION ALLSELECT 21,'DAD Names','-----------','--------------','------------------' FROM dualUNION ALLSELECT 22,'------------','---------------','--------------','------------------' FROM dualUNION ALLSELECT 23, u.dad ,null,null,null FROM XMLTable(XMLNAMESPACES (DEFAULT 'http://xmlns.oracle.com/xdb/xdbconfig.xsd' ),'//servlet-list/*[servlet-language="PL/SQL"]' PASSING DBMS_XDB.CFG_GET()COLUMNS DAD varchar2(15) PATH '/servlet/servlet-name/text()') u)ORDER BY 1,2;
Diese und noch viele weitere Tricks lernen Sie in einem unserer schönen APEX Kurse!