Als PDF Downloaden!

Werbung
Tipps & Tricks: Februar 2014
Bereich:
SQL, DBA
Erstellung:
02/2014 MP
Versionsinfo:
12.1
Letzte Überarbeitung:
02/2014 MP
SQL*Plus Hilfe erweitern
Die SQL*Plus Hilfe war bis zur Version 8.1 eigentlich recht hilfreich, da sie bei der Syntax von SQL und PL/SQL
immer recht gut weitergeholfen hat. Leider wird dieser Bereich von Oracle nicht mehr gepflegt, es wurde nur noch
die SQL*Plus Syntax in der Hilfe gelassen.
Es ist Zeit, hier etwas zu verbessern. Hinweis: Dies ist von Oracle nicht supported! und sollte deshalb nur auf
Testdatenbanken verwendet werden.
Wenn die Hilfe-Tabelle noch nicht existiert, legen Sie diese bitte mit folgendem Skript an:
connect system/sys
@?/sqlplus/admin/help/hlpbld.sql helpus.sql
Dann schauen wir uns die Struktur der Tabelle einmal genauer an:
SQL> desc system.help
Name
Null?
Typ
------ --------- ---------------TOPIC NOT NULL VARCHAR2(50)
SEQ
NOT NULL NUMBER
INFO
VARCHAR2(80)
Die Topic-Spalte ist für den Text verantwortlich nach dem gesucht wird, die Info-Spalte gibt dann den Hilfetext
zurück. Die SEQ-Spalte ist für mehrzeilige Texte gedacht. Sie muss pro Topic eindeutig sein.
Wenn wir in die Tabelle die Werte ('Muniqsoft',1,'Schulung Tel.: 089 67909040') eintragen dann liefert der Befehl
zurück:
SQL> help muniqsoft
Schulung Tel.: 089 67909040
Hinweis:
Für einige Hilfetexte ist in den Spalten zu wenig Platz, deswegen vergrößern wir zwei Spalten. In der Version 12.1
hat das funktioniert. In älteren Versionen kann es zu Problemen kommen, dann lassen Sie den Schritt weg.
Jedoch können Sie dann natürlich auch nicht so viel Text in die Spalten eintragen.
ALTER TABLE system.help MODIFY (info VARCHAR2(140));
ALTER TABLE system.help MODIFY (topic VARCHAR2(100));
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 1 von 4
Zum warm werden, tragen wir ein paar Texte ein (Ein bisschen Schleichwerbung muss schon sein :-) ):
INSERT INTO system.help VALUES('MUNIQSOFT',0,'Muniqsoft GmbH www.muniqsoft.de Tel.:
089/67 90 90 40');
INSERT INTO system.help VALUES('MUNIQSOFT',1,'Beratung, Schulungen, Consulting,
Lizenzvertrieb');
INSERT INTO system.help VALUES('MUNIQSOFT',2,'Ihr Oracle Partner, wenn es um RAC,
Administration, Migration,');
INSERT INTO system.help VALUES('MUNIQSOFT',3,'Schulungen (auch Inhouse), Tuning oder
Backup + Recovery geht');
Und testen das mit:
help muniqsoft
Nun legen wir richtig los:
INSERT INTO system.help VALUES('ALTER DATABASE',0,'REM +++ Muniqsoft GmbH
www.muniqsoft.de Tel.: 089/67909040 +++');
INSERT INTO system.help VALUES('ALTER DATABASE',1,'ALTER DATABASE DEFAULT TEMPORARY
TABLESPACE <temp>;');
INSERT INTO system.help VALUES('ALTER DATABASE',2,'ALTER DATABASE DATAFILE ''<file>''
RESIZE <x>M;');
INSERT INTO system.help VALUES('ALTER DATABASE',3,'ALTER DATABASE ADD LOGFILE <name>
SIZE <x>M;');
INSERT INTO system.help VALUES('ALTER DATABASE',4,'ALTER DATABASE DROP LOGFILE GROUP
<n>;');
INSERT INTO system.help VALUES('ALTER DATABASE',5,'ALTER DATABASE DROP LOGFILE MEMBER
''<file>'';');
INSERT INTO system.help VALUES('ALTER DATABASE',10,'ALTER DATABASE RENAME GLOBAL_NAME
TO <demo.world.muniqsoft.com>;');
INSERT INTO system.help VALUES('ALTER DATABASE',11,'ALTER DATABASE CHARACTER SET
<charset>;');
INSERT INTO system.help VALUES('ALTER DATABASE',12,'ALTER DATABASE NATIONAL CHARACTER
SET <charset>;');
INSERT INTO system.help VALUES('ALTER DATABASE',13,'ALTER DATABASE OPEN RESETLOGS;');
REM RECOVERY
INSERT INTO system.help VALUES('RECOVER',100,'REM +++ Muniqsoft GmbH www.muniqsoft.de
Tel.: 089/67909040 +++');
INSERT INTO system.help VALUES('RECOVER',101,'RECOVER DATABASE [USING BACKUP
CONTROLFILE];');
INSERT INTO system.help VALUES('RECOVER',102,'RECOVER DATABASE UNTIL CANCEL [USING
BACKUP CONTROLFILE];');
INSERT INTO system.help VALUES('RECOVER',103,'RECOVER DATABASE UNTIL TIME
''YYYY-MM-DD:HH24:MI:SS''[USING BACKUP CONTROLFILE];');
INSERT INTO system.help VALUES('RECOVER',104,'RECOVER DATABASE UNTIL CHANGE <nr>;');
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 2 von 4
Wie wäre es mit allen undokumentierten Parametern mit Beschreibung (in zwei Zeilen wegen der Länge):
connect sys/<pwd>@db as sysdba
INSERT INTO system.help
SELECT b.ksppinm ,1,b.ksppinm||'='||a.ksppstvl||' (Def:'||a.ksppstdf||')'
FROM sys.x$ksppi b, sys.x$ksppcv a
WHERE a.indx = b.indx
AND substr(b.ksppinm,1,1)='_';
INSERT INTO system.help
SELECT b.ksppinm,2,'Info: '||substr(b.ksppdesc,1,130)
FROM sys.x$ksppi b, sys.x$ksppcv a
WHERE a.indx = b.indx
AND substr(b.ksppinm,1,1)='_';
Aber es geht noch besser: Wenn wir dynamische Infos wie z. B. aus V$SESSION oder DBA_USER oder ... mit
der Hilfe anzeigen wollen, dann verschieben Sie die Ursprungstabelle help in eine Tabelle help_tab und
konsolidieren alle Informationen in einer View:
GRANT SELECT ON dba_users TO system;
GRANT SELECT ON dba_data_files TO system;
GRANT SELECT ON sys.v_$session TO system;
GRANT SELECT ON system.help TO <user>; -- Geben Sie den Benutzer an, der mit dem HELP
Befehl arbeiten soll. Dieser muss dann auch auf die obigen Views Rechte bekommen.
ALTER TABLE SYSTEM.help RENAME TO help_tab;
CREATE OR REPLACE VIEW system.help
AS
SELECT * FROM system.help_tab
UNION ALL /* ++++ Benutzer ++++++ */
SELECT 'USERS',0,rpad('ID',3,' ')||' '||rpad('USER',25,' ')||rpad(' Account
Status',19,' ')
||rpad('DEF TBS',27,' ')||rpad('TMP TBS',18,' ') FROM DUAL
UNION ALL
SELECT 'USERS',0,rpad('-',3,'-')||' '||rpad('-',25,'-')||' '||rpad('-',17,'-')||'
'||
rpad('-',26,'-')||' '||rpad('-',18,'-') FROM DUAL
UNION ALL
select 'USERS',user_id+1,rpad(user_id,3,' ')||' '||rpad(username,25,' ')||'
'||rpad(account_status,17,' ')||
rpad(default_tablespace,18,' ')||temporary_tablespace
from dba_users
UNION ALL /* +++++ Tablespace und deren Größe ++++++*/
SELECT 'TABLESPACES',0,rpad('TABLESPACE',22,' ')||' F_id Fileame (Groesse)' FROM DUAL
UNION ALL
SELECT 'TABLESPACES',0,rpad('-',22,'-')||' '||rpad('-',2,'-')||'
'||rpad('-',62,'-') FROM DUAL
UNION ALL
SELECT 'TABLESPACES',file_id,rpad(tablespace_name,25,' ')||' '||file_id||'
'||file_name||' ('||
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 3 von 4
round(bytes/1024/1024,2)||' MB)' FROM dba_data_files
UNION ALL /* +++++++ Sessions +++++++++ */
SELECT 'SESSIONS',0,rpad('USER',12,' ')||' Status
SQLID
Last
CALL
EVENT' FROM DUAL
UNION ALL
SELECT 'SESSIONS',0,rpad('-',12,'-')||' '||rpad('-',15,'-')||' '||rpad('-',15,'-')
||' '||rpad('-',16,'-')||' '||rpad('-',34,'-') FROM DUAL
UNION ALL
select 'SESSIONS',sid,rpad(username,12,' ')||' Status:'||rpad(status,8,' ')||'
SQLID:'||rpad(nvl(sql_id,'-'),10,' ')
||' Last Call:'||rpad(last_call_et,6,' ')||' Event:'||event from v$session
where type='USER' and username is not null
;
Das testen wir z. B. mit:
SQL> help sessions
USER Status
SQLID
Last CALL
EVENT
----- --------------- --------------- ------------------------------------------------SYS Status:ACTIVE SQLID:b9jqaugh1w Last Call:0
Event:SQL*Net message to
client
SYS Status:INACTIVE SQLID:Last Call:75900 Event:SQL*Net message from
client
SQL> help users
ID USER
Account Status
DEF TBS
TMP TBS
--- ------- ----------------- --------------- --------0 SYS
OPEN
SYSTEM
TEMP
7 AUDSYS EXPIRED & LOCKED USERS
TEMP
8 SYSTEM EXPIRED(GRACE)
SYSTEM
TEMP
13 OUTLN EXPIRED
SYSTEM
TEMP
SQL> help tablespaces
TABLESPACE F_id Fileame (Groesse)
------------ -- ------------------------------------------------SYSTEM
1 D:\ORACLE\ORADATA\O12C\SYSTEM01.DBF (700 MB)
SYSAUX
3 D:\ORACLE\ORADATA\O12C\SYSAUX01.DBF (650 MB)
UNDOTBS1
5 D:\ORACLE\ORADATA\O12C\UNDOTBS01.DBF (630 MB)
USERS
6 D:\ORACLE\ORADATA\O12C\USERS01.DBF (5 MB)
KUNDEN_TBS
12 D:\ORACLE\ORADATA\O12C\KUNDEN01.DBF (6144 MB)
Weitere Ideen zu diesem Thema lernen Sie in unserem SQL*Plus Tageskurs. Sie können das Konzept natürlich
selbst nach Belieben erweitern, z. B. SQL Area Befehle anhand der SQL_ID ausgeben oder alle Locks anzeigen.
Wenn Sie weitere Punkte integriert haben, schicken Sie sie uns doch bitte, dann machen wir nochmal einen
Bonus Track zu diesem Tipp.
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 4 von 4
Herunterladen