Auswahl  

APEX Datenbank Initialisierungsparameterempfehlungen 

Oracle
APEX
RDBMS 12.x
02.08.18 (MP)
11.12.18 (MD)
APEX Initialisierungsparameter

Body

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   >=350M
sga_target             440M   >=350M
db_create_file_dest    NULL   C:\ORACLE\PRODUCT\10.2.0\ORADATA\O10G
dispatchers            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     >5
audit_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;


Ausgabe:

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 dual
UNION ALL
SELECT 2,'------------','---------------','--------------','------------------' FROM dual
UNION ALL
SELECT 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 u
WHERE (u.username IN ('ANONYMOUS','FLOWS_FILES')
OR u.username LIKE 'APEX%'
OR u.username LIKE 'ORDS%') AND u.username<>'ORDSYS'
UNION ALL
SELECT 4,'#################','#############','#############','#################' FROM dual
UNION ALL
SELECT 5,'COMPO_NAME','VERSION','Status','Modified' FROM dual
UNION ALL
SELECT 6,'------------','---------------','--------------','------------------' FROM dual
UNION ALL
SELECT 7,replace(comp_name,'Oracle ',''),version,status,modified
FROM dba_registry
WHERE comp_id='APEX'
UNION ALL
SELECT 8,'#################','#############','#############','#################' FROM dual
UNION ALL
SELECT 9,'HTTP Port','FTP Port','Image Count','Allow Anonymus Repo Access'
FROM dual
UNION ALL
SELECT 10,'------------','---------------','--------------','------------------' FROM dual
UNION ALL
SELECT 11,to_char(dbms_xdb.gethttpport ),to_char(dbms_xdb.getftpport),
(SELECT count(*)||' ' FROM PATH_VIEW
WHERE UNDER_PATH(res, '/images/',1)>0),(select extractValue(dbms_xdb.cfg_get(), '/xdbconfig/sysconfig/protocolconfig/httpconfig/allow-repository-anonymous-access')  
from dual) FROM dual
UNION ALL
SELECT 12,'#################','#############','#############','#################' FROM dual
UNION ALL
SELECT 14,'Workspace','Username','Admin/Dev','Account Locked' FROM dual
UNION ALL
SELECT 15,'#################','#############','#############','#################' FROM dual
UNION ALL
SELECT 16,workspace_display_name,user_name,is_admin||'/'||is_application_developer,account_locked
FROM apex_workspace_developers
UNION ALL
SELECT 17,'Parameter','Value','--------------','------------------' FROM dual
UNION ALL
SELECT 18,'------------','---------------','--------------','------------------' FROM dual
UNION ALL
SELECT 19,name,value,null,null from v$parameter where name in ('local_listener','session_cached_cursors')
UNION ALL
SELECT 20,'#################','#############','#############','#################' FROM dual
UNION ALL
SELECT 21,'DAD Names','-----------','--------------','------------------' FROM dual
UNION ALL
SELECT 22,'------------','---------------','--------------','------------------' FROM dual
UNION ALL
SELECT 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!

Besuchen Sie uns doch bei einer unsere über 40 Oracle Schulungen in München - Unterhaching.