SlideShare ist ein Scribd-Unternehmen logo
Ausgewählte PL/SQL Packages 
(Teil 3) 
DBMS_XPLAN 
DBMS_ASSERT 
DBMS_RESUMABLE 
DBMS_UTILITY 
Ulrike Schwinn 
Business Unit Database 
ORACLE Deutschland B.V. & Co. KG.
Agenda 
1. DBMS_XPLAN - zur Anzeige von Ausführungspläne 
2. DBMS_ASSERT - zur Vermeidung von SQL Injektion 
3. DBMS_RESUMABLE - zum Aufschieben von Operationen 
4. DBMS_UTILITY - ausgewählte Programme zur Unterstützung 
unterschiedlicher Funktionen 
4 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Das Package DBMS_XPLAN 
5 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Ausführungspläne 
 Kommandos und Werkzeuge 
– EXPLAIN PLAN: SQL Kommando zur Generierung des Plans in der 
PLAN_TABLE 
– utlxplp.sql/utlxpls.sql:Standard Skripte zur formatierten Ausgabe (in 
$ORACLE_HOME/rdbms/admin) 
– SQL*Plus: SET AUTOTRACE ON EXPLAIN 
DBMS_XPLAN: Formatierte Ausgabe mit PL/SQL Package 
– – Graphische Werkzeuge 
 SQL Developer im SQL Worksheet 
 Cloud Control im SQL Worksheet 
6 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
SQL Developer: SQL Worksheet 
7 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
EM: Performance=SQL=SQL Worksheet 
8 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
DBMS_XPLAN - Funktionsumfang 
 Aufgabe: Anzeige von formatierten Ausführungsplänen 
 Quellen: 
– EXPLAIN PLAN 
– Laufzeit Statistiken aus dem Cursor Cache aus V$SQL_PLAN und 
V$SQL_PLAN_STATISTICS 
– AWR (Automatic Workload Repository) 
– SQL Tuning Sets (STS) 
– SQL Plan Baselines 
 Voraussetzung 
– Zugriffsrechte auf DBA Tabellen bzw. SELECT_CATALOG_ROLE 
– Interpretation von Ausführungsplänen ☺ (White Paper: The Oracle 
Optimizer Explain the Explain Plan) 
9 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
DBMS_XPLAN: einige Funktionen 
• DISPLAY – aus der PLAN_TABLE (siehe EXPLAIN PLAN) 
• DISPLAY_PLAN – wie DISPLAY mit Formatausgabe wie HTML,TEXT.. 
• DISPLAY_CURSOR – aus dem Cursor Cache 
• DISPLAY_SQLSET – aus dem SQL Tuning Set 
• DISPLAY_SQL_PLAN_BASELINE – aus der SQL Plan Baseline 
• DISPLAY_AWR – aus dem AWR 
• DIFF_PLAN – Vergleich zweier Pläne (neu in 12c) 
10 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Ausgabe mit DISPLAY 
 Stelle mit utlxplan.sql die PLAN_TABLE zur Verfügung 
 Führe EXPLAIN PLAN FOR aus 
EXPLAIN PLAN FOR 
SELECT p.prod_name, SUM(s.quantity_sold) 
FROM sh.sales s, sh.products p 
WHERE s.prod_id = p.prod_id GROUP BY p.prod_name; 
 Einstellungen wählen 
– FORMAT: BASIC, TYPICAL , ALL, SERIAL mit Keyword Kombinationen 
– FILTER_PREDS: letzter gespeicherter Plan (Default), sonst PLAN_ID 
SELECT * FROM table (DBMS_XPLAN.DISPLAY()); 
SELECT * FROM table (DBMS_XPLAN.DISPLAY(table_name = null, 
statement_id = null, format = 'BASIC'‚ filter_preds = null)); 
11 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Beispiel für DISPLAY mit FORMAT TYPICAL 
12 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Ausgabe mit DISPLAY_PLAN 
 Zusätzlich zu DISPLAY Angabe von TYPE für spezielles Format 
 Beispiele: 'TEXT‘ (default), 'ACTIVE', 'HTML', 'XML‘ 
set long 10000 heading off 
spool planausgabe.html 
SELECT DBMS_XPLAN.DISPLAY_PLAN(type='HTML') from dual; 
... 
/script 
/body 
/html 
/iframe 
/body 
/html 
spool off 
13 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Verwendung von DISPLAY_CURSOR 
1. Zuerst Statement ausführen 
2. Cursor Child aus V$SQL selektieren 
3. SQL*Plus Formatierung (set pagesize 0 linesize 130) 
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR()); 
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR( 
sql_id = 'f4py1wd1vh5nj', 
cursor_child_no = null, 
format ='BASIC ROWS')); 
14 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Ausgabe mit DISPLAY_CURSOR 
SQL SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR(sql_id='f4py1wd1vh5nj', 
CURSOR_CHILD_NO = null, format = 'BASIC ROWS')); 
EXPLAINED SQL STATEMENT: 
------------------------ 
SELECT p.prod_name, SUM(s.quantity_sold) FROM sh.sales s, 
sh.products p WHERE s.prod_id =p.prod_id GROUP By p.prod_name 
Plan hash value: 3535171836 
-------------------------------------------------- 
| Id | Operation | Name | Rows | 
-------------------------------------------------- 
| 0 | SELECT STATEMENT | | | 
| 1 | HASH GROUP BY | | 71 | 
| 2 | HASH JOIN | | 2804 | 
| 3 | TABLE ACCESS FULL | PRODUCTS | 72 | 
| 4 | PARTITION RANGE ALL| | 2804 | 
| 5 | TABLE ACCESS FULL | SALES | 2804 | 
-------------------------------------------------- 
15 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
DISPLAY_CURSOR ... Mehr Infos 
• Optimizer kann sich verschätzen ... 
• Ausgabe mit Estimated Rows (E-Rows) und Actual Rows (A-Rows) ist 
möglich 
• Dazu: 
• Hint gather_plan_statistics mitgeben 
select /*+ gather_plan_statistics */ count(*) Anzahl 
from sh.customers where 
cust_state_province = 'Bayern' and cust_city = 'Erding'; 
• Spezielles Format IOSTATS LAST nutzen 
SELECT * FROM table (DBMS_XPLAN.DISPLAY_CURSOR 
(sql_id ='1nyxryfq8mzpk', 
cursor_child_no = NULL, 
format ='IOSTATS LAST')) 
16 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Estimated Rows und Actual Rows 
SQL_ID 30xu9nkcatfx0, child number 0 
------------------------------------- 
select /*+ gather_plan_statistics */ count(*) Anzahl from sh.customers 
where cust_state_province = 'Bayern' and cust_city = 'Erding' 
Plan hash value: 296924608 
--------------------------------------------------------------------------------------------------- 
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | 
--------------------------------------------------------------------------------------------------- 
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.23 | 1473 | 1471 | 
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.23 | 1473 | 1471 | 
|* 2 | TABLE ACCESS FULL| CUSTOMERS | 1 | 1 | 69 |00:00:00.06 | 1473 | 1471 | 
--------------------------------------------------------------------------------------------------- 
Predicate Information (identified by operation id): 
--------------------------------------------------- 
2 - filter((CUST_CITY='Erding' AND CUST_STATE_PROVINCE='Bayern')) 
17 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
DISPLAY ... Indexgröße -Schätzungen? 
SQL explain plan for create index i_test on test(object_name); 
Explained. 
SQL select * from table(dbms_xplan.display); 
PLAN_TABLE_OUTPUT 
-------------------------------------------------------------------------------- 
Plan hash value: 3303956404 
-------------------------------------------------------------------------------- 
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time 
-------------------------------------------------------------------------------- 
PLAN_TABLE_OUTPUT 
-------------------------------------------------------------------------------- 
| 0 | CREATE INDEX STATEMENT | | 88616 | 2076K| 153 (1)| 00:00:01 
| 1 | INDEX BUILD NON UNIQUE| I_TEST | | | | 
| 2 | SORT CREATE INDEX | | 88616 | 2076K| | 
| 3 | TABLE ACCESS FULL | TEST | 88616 | 2076K| 77 (2)| 00:00:01 
PLAN_TABLE_OUTPUT 
-------------------------------------------------------------------------------- 
Note 
----- 
- estimated index size: 4194K bytes 
18 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Neu in 12c: Adaptive Plan Generierung 
 Ziel: Verhinderung von schlechten Plänen – 
während der ersten Ausführung (adaptive Pläne) bzw. 
nach der ersten Ausführung (Reoptimization) 
 Implementierung auch in DBMS_XPLAN 
19 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Neu in 12c: Adaptive Pläne 
 Adaptive Pläne haben verschiedene SQL Plan Optionen 
z.B. Subpläne (z.B. Hash Join, Nested Loop Join) 
• Während der erste Ausführung, bevor der Plan aktiviert wird, 
wird einen Entscheidung getroffen 
= Finaler Plan (Hash Join) 
20 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Neu in 12c: Anzeige der adaptiven Pläne 
select product_name 
from oe.order_items o, oe.product_information p 
where o.unit_price=15 
and quantity  1 and p.product_id = o.product_id; 
SELECT * FROM table 
(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT = 'ADAPTIVE')); 
21 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Das Ergebnis 
22 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Das Package DBMS_ASSERT 
23 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
SQL Injection: DBMS_ASSERT 
 Mitgeliefertes dokumentiertes Package zur Überprüfung von Eingabe 
Werten zum Schutz vor SQL Injection 
– Beispiele: --, 1=1, or, and, select, ... 
 Überprüfung von Literalen, Objektnamen, existierenden Objekten bzw. 
Schemas 
 Einsatz bei dynamisches SQL wie z.B. mit 
– DBMS_SQL 
– OPEN_FOR 
– EXECUTE IMMEDIATE 
24 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Wichtige Funktionen 
Existierende Objekte 
Existierendes Schema 
OBJECT_NAME 
SCHEMA_NAME 
Einfacher SQL Name 
Qualifizierter SQL Name 
SIMPLE_SQL_NAME 
QUALIFIED_SQL_NAME 
Hochkomma – einfach 
ENQUOTE_LITERAL 
Doppelte Hochkomma 
ENQUOTE_NAME 
 Arbeitsweise: 
– Rückgabe des Parameters, wenn OK 
– PL/SQL-Exception, wenn nicht OK 
25 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Exkurs – Quotes in SQL und PL/SQL 
 Statt 
SQL SELECT 'ulrike''s web blog. It''s ...' str FROM dual; 
STR 
--------------------------------- 
ulrike's web blog. It's ... 
 Nutze Quote Operator q 
SELECT q'/ulrike's web blog. It's .../' str FROM dual; 
SELECT q'|ulrike's web blog. It's ...|' str FROM dual; 
SELECT q'#ulrike's web blog. It's ...#' str FROM dual; 
26 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
ENQUOTE_LITERAL: Korrekte Literale? 
SQL SELECT DBMS_ASSERT.ENQUOTE_LITERAL(q'#KING#') FROM dual; 
DBMS_ASSERT.ENQUOTE_LITERAL(Q'#KING#') 
----------------------------------------------------------------- 
'KING' 
1 Zeile wurde ausgewählt. 
SQL SELECT DBMS_ASSERT.ENQUOTE_LITERAL(q'#KING' or 1=1 --#') 
FROM dual; 
SELECT dbms_assert.enquote_literal(q'#King' or 1=1 --#') FROM 
dual 
* 
ERROR at line 1: 
ORA-06502: PL/SQL: numeric or value error 
ORA-06512: at SYS.DBMS_ASSERT, line 342 
ORA-06512: at SYS.DBMS_ASSERT, line 411 
27 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Korrekte Nutzung wäre ... 
SQL SELECT DBMS_ASSERT.ENQUOTE_LITERAL(q'#King'' or 1=1 --#') 
FROM dual; 
DBMS_ASSERT.ENQUOTE_LITERAL(Q'#KING''OR1=1--#') 
----------------------------------------------------------------- 
'King'' or 1=1 --' 
1 Zeile wurde ausgewählt. 
28 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
SIMPLE_SQL_NAME: Korrekter Name? 
 Regeln: 
– Mit alphabetische und alphanumerische Zeichen und ab der 2.ten 
Stelle auch _, $, und # 
– Jedes Zeichen ist in “Double Quotes” erlaubt 
– Leerzeichen sind erlaubt 
select dbms_assert.SIMPLE_SQL_NAME('TEST') from dual; 
select dbms_assert.SIMPLE_SQL_NAME('1TEST') from dual; 
select dbms_assert.SIMPLE_SQL_NAME('TEST-') from dual; 
select dbms_assert.SIMPLE_SQL_NAME('TEST-') from dual; 
select dbms_assert.SIMPLE_SQL_NAME(' TEST') from dual; 
select dbms_assert.SIMPLE_SQL_NAME(q'#TEST'S#') from dual; 
29 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
SCHEMA_NAME: Existierendes Schema? 
SQL SELECT DBMS_ASSERT.ENQUOTE_LITERAL 
(dbms_assert.SCHEMA_NAME('SCOTT')) FROM dual; 
DBMS_ASSERT.ENQUOTE_NAME(DBMS_ASSERT.SCHEMA_NAME('SCOTT')) 
--------------------------------------------------------------- 
SCOTT 
SQL SELECT DBMS_ASSERT.ENQUOTE_LITERAL 
(DBMS_ASSERT.SCHEMA_NAME('TTT')) FROM dual; 
select dbms_assert.enquote_name(dbms_assert.SCHEMA_NAME('TTT')) 
from dual 
30 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 
* 
ERROR at line 1: 
ORA-44001: invalid schema 
ORA-06512: at SYS.DBMS_ASSERT, line 266
Beispiel: Passwort Prüfung 
CREATE OR REPLACE PROCEDURE change_passwordproc 
(username VARCHAR2, password VARCHAR2) 
AS 
stmt VARCHAR2(2000); 
BEGIN 
stmt := 'alter user '||sys.DBMS_ASSERT.ENQUOTE_NAME 
(DBMS_ASSERT.SCHEMA_NAME(username),FALSE)|| 
' identified by '||DBMS_ASSERT.SIMPLE_SQL_NAME(password); 
... 
dbms_output.put_line(stmt); 
END; 
/ 
31 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Beispiel für Passwort Prüfung 
SQL EXEC change_passwordproc('HR','test') 
alter user HR identified by test 
PL/SQL procedure successfully completed. 
SQL EXEC change_passwordproc('HR','test quota unlimited on 
system'); 
BEGIN change_passwordproc('HR','test quota unlimited on 
system'); END; 
* 
ERROR at line 1: 
ORA-44003: invalid SQL name 
ORA-06512: at SYS.DBMS_ASSERT, line 160 
ORA-06512: at SYS.CHANGE_PASSWORDPROC, line 5 
ORA-06512: at line 1 
32 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Fazit und Anwendungen 
 Unbedingt berücksichtigen bei Verwendung von dynamischem SQL 
 Auch interne Verwendung (z.B. SQL Patches etc.) 
 Vorgehen: Überprüfung vor der Durchführung der Eingabe oder 
Ausgabe einer Fehlermeldung 
 Allerdings: 
– Prüft nicht die Länge von Eingabe Strings (Buffer Overflow Attacken) oder 
TNS Connection Strings 
– Schützt nicht vor Security Risiken durch nicht ausreichende Privilegien 
Vergabe – nicht berechtigte User usw. 
– Bietet keinen Schutz vor HTML Injection 
 Weitere gute Beispiele im Internet 
33 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Das Package DBMS_RESUMABLE 
34 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Resumable Space Allocation 
 Problem: Operationen brechen wegen Speicherplatzfehlern ab 
 Lösung: Resumable Space Allocation Feature 
– Ausführung der Operationen anhalten, Fehler zu beheben und die 
Operation fortsetzen 
 Welche Operationen: 
– Abfragen, DML-Kommandos, DDL- Kommandos, SQL*Loader, 
Import/Export 
 Wann?: zu kleine Quota, zu wenig Privilegien, zu wenig TEMP 
Space, nicht ausreichende Storage Settings 
 Achtung: Automatische Verwendung bei Data Pump 
Export/Import! = Default: 2 Stunden (7200 Sekunden) 
35 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Ablauf I 
1. Ein Statement wird im RESUMABLE Mode angestartet. 
– über SYSTEM/SESSION Parameter RESUMABLE_TIMEOUT 
– über die Session-Einstellung ENABLE RESUMABLE 
– Resumable Privileg ist erforderlich! 
ALTER SESSION ENABLE RESUMABLE [TIMEOUT 3600]; 
ALTER SESSION|SYSTEM SET RESUMABLE_TIMEOUT = 3600; 
2. Ein RESUMABLE Statement wird eine definierte Zeitdauer 
(TIMEOUT-Wert) angehalten (suspended), wenn eine OUT 
OF SPACE Bedingung eintritt. 
36 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Ablauf II 
3. Die eingetretenen Fehler werden aufgezeigt in 
– Views wie DBA_RESUMABLE, V$SESSION_WAIT, 
DBA_OUTSTANDING_ALERTS 
– der Alert-Datei 
– AFTER SUSPEND Triggern, die automatisch auf das Speicherplatz- 
Problem reagieren können. 
4. Nach Lösung des Problems wird die gestoppte Operation 
weitergeführt, und das Alert Resumable Session Suspended wird 
gelöscht. 
37 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Beispiel DBA_RESUMABLE 
SQL SELECT user_id, session_id, status, timeout, start_time, 
status, start_time, suspend_time, resume_time, sql_text, error_msg 
FROM dba_resumable; 
USER_ID SESSION_ID STATUS TIMEOUT START_TIME STATUS 
---------- ---------- --------- ---------- -------------------- ----- 
START_TIME SUSPEND_TIME RESUME_TIME 
-------------------- -------------------- -------------------- 
SQL_TEXT 
--------------------------------------------------------------------- 
ERROR_MSG 
--------------------------------------------------------------------- 
110 70 SUSPENDED 28800 05/19/14 14:52:20 SUSPENDED 
05/19/14 14:52:20 05/19/14 14:52:43 
insert into t select * from t 
ORA-01653: unable to extend table SCOTT.T by 1024 in tablespace LOW_COST_STORE 
38 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Anzeige 
SQL SELECT decode(message_level,5,'WARNING',1, 'CRITICAL') alert_level, reason 
FROM dba_outstanding_alerts 
WHERE reason LIKE '%resumable%'; 
ALERT_LE 
-------- 
REASON 
--------------------------------------------------------------------- 
WARNING 
Operation on resumable session User SCOTT(110), Session 70, Instance 1 session 
id 70 suspended because of errors in tablespace LOW_COST_STORE. Error message 
is 
ORA-01653: unable to extend table SCOTT.T by 1024 in tablespace LOW_COST_STORE 
39 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
In Cloud Control 
40 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Das Package DBMS_RESUMABLE 
 Folgende Funktionen stehen zur Verfügung 
– Prozedur ABORT 
– Funktionen GET_SESSION_TIMEOUT oder GET_TIMEOUT 
SQL select DBMS_RESUMABLE.GET_TIMEOUT() FROM dual; 
DBMS_RESUMABLE.GET_TIMEOUT() 
---------------------------- 
-1 
– Prozedur SET_SESSION_TIMEOUT bzw. SET_TIMEOUT 
– Funktion SPACE_ERROR_INFO (Ergebnis Boolean) 
41 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Database Trigger 
 AFTER SUSPEND Database Trigger wird ausgeführt, sobald eine 
Resumable Operation eintritt 
 Innerhalb des Triggers können Informationen aus 
DBMS_RESUMABLE und DBA_RESUMABLE verwendet werden. 
 Beispiel 
CREATE OR REPLACE TRIGGER resumable_default_timeout 
AFTER SUSPEND 
ON DATABASE 
BEGIN 
DBMS_RESUMABLE.SET_TIMEOUT(10800); 
END; 
/ 
42 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Database Trigger 
CREATE OR REPLACE TRIGGER resumable_default 
AFTER SUSPEND ON DATABASE 
DECLARE … 
BEGIN 
ret_value := 
DBMS_RESUMABLE.SPACE_ERROR_INFO(err_type,object_type,object_owner, 
table_space_name,object_name, sub_object_name); 
IF table_space_name = 'TEST' THEN 
INSERT INTO sys.resume_error ( 
SELECT sql_text, error_msg, suspend_time FROM DBMS_RESUMABLE 
WHERE SESSION_ID = cur_sid AND INSTANCE_ID = cur_inst); 
-- email senden etc... 
DBMS_RESUMABLE.ABORT(cur_sid); 
ELSE 
DBMS_RESUMABLE.SET_TIMEOUT(28800); 
END IF; 
COMMIT; 
43 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Ergebnis 
SQL SELECT * FROM resume_error; 
ERR_TYPE 
-------------------------------------------------------------------------- 
OBJECT_OWNER OBJECT_TYPE TABLE_SPACE_NAM OBJECT_NAM SUB_OBJECT 
--------------- --------------- --------------- ---------- ---------- 
NO MORE SPACE 
TABLE SCOTT TEST T 
 Dabei gibt es folgende Error Typen: 
– NO MORE SPACE 
– MAX EXTENTS REACHED 
– SPACE QUOTA EXCEEDED 
44 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Das Package DBMS_UTILITY 
45 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
DBMS_UTILITY... ein paar Beispiele 
Messungen durchführen GET_TIME 
GET_CPU_TIME 
Informationen zur Datenbank DB_VERSION 
Warten auf Transaktionen WAIT_ON_PENDING_DML 
12c: View Subquery ausgeben EXPAND_SQL_TEXT 
46 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Informationen zur Datenbank übre DB_VERSION 
 Informationen zur genauen Version mit PL/SQL 
SQL variable version varchar2(200) 
SQL variable compatibility varchar2(200) 
SQL execute DBMS_UTILITY.DB_VERSION(:version,:compatibility); 
PL/SQL procedure successfully completed. 
SQL print version 
VERSION 
--------------------------------------------------------------- 
11.2.0.3.0 
 Weitere Möglichkeit mit DBMS_DB_VERSION 
SQL set serveroutput on 
SQL execute DBMS_OUTPUT.PUT_LINE (DBMS_DB_VERSION.VERSION || 
' und ' '||DBMS_DB_VERSION.RELEASE); 
11 und 2 
47 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Messungen mit GET_CPU_TIME 
 Zeitmessung 
 Messung der CPU Zeiten in hundertstel Sekunden 
... 
start_cpu_time := DBMS_UTILITY.GET_CPU_TIME; 
-- Programmlauf 
end_cpu_time := DBMS_UTILITY.GET_CPU_TIME; 
dbms_output.put_line('CPU Time= ' || end_cpu_time - start_cpu_time); 
... 
48 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Warten mit WAIT_ON_PENDING_DML 
 Eine Session kann so lange warten, bis die zuvor angestarteten 
Transaktionen abgeschlossen sind oder bis zu einem Timeout. 
 Wartezeit und SCN, ab wann die Transaktionen relevant sind, können 
angegeben werden 
 Implementierung in 11g Release 2 zur Unterstützung des Features 
„Edition Based Redefinition“ 
49 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Anwendungsfall: Online Application Upgrade 
aka Edition Based Redefinition 
 PL/SQL-Code im laufenden Betrieb ersetzen 
– Keine Downtime mehr nötig 
– Versionsmanagement in der Datenbank 
– Parallelbetrieb mehrerer Editionen möglich 
– Retirement nicht mehr benötigter Versionen 
50 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Beispiel WAIT_ON_PENDING_DML 
CREATE OR REPLACE PROCEDURE wait_test 
AS 
v_bool BOOLEAN; 
v_scn NUMBER; 
BEGIN 
v_bool := dbms_utility.wait_on_pending_dml 
(tables = 'SCOTT.T, SCOTT.DEPT',timeout = 10, scn = v_scn ); 
dbms_output.put_line( 'scn: ' || v_scn ); 
IF v_bool 
THEN dbms_output.put_line( 'true' ); 
ELSE dbms_output.put_line( 'false' ); 
END IF; 
END; 
/ 
– Wartezeit 10 Sekunden 
– SCN Zeitpunkt für Transaktionen 
51 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Beispiel: WAIT_ON_PENDING_DML 
 Starte eine Session mit Prozedur wait_test 
 Unabhängige davon gibt es weitere Sessions, die INSERTs 
durchführen 
– Dabei erfolgt kein Transaktionsende innerhalb von 10 Sekunden 
 Ergebnis der ersten Session nach 10 Sekunden … 
– FALSE da Transaktionen noch laufen 
SQL execute wait_test … 
scn: 13618833 
false 
52 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Neu in 12c: EXPAND_SQL_TEXT 
 Löst Abfragen auf Views auf 
 Eingabe: Subquery auf Views; Ergebnis: Abfrage auf zugeh. Tabellen 
SQL variable outclob clob 
SQL create or replace view my_view as select * from sales 
where amount_sold1300; 
SQL execute DBMS_UTILITY.EXPAND_SQL_TEXT ('select 
count(prod_id) from my_view', :outclob); 
SQL print outclob 
OUTCLOB 
--------------------------------------------------------------- 
SELECT COUNT(A1.PROD_ID) COUNT(PROD_ID) FROM (SELECT 
A2.PROD_ID PROD_ID FROM SH.SALES A2 WHERE 
A2.AMOUNT_SOLD1300) A1 
53 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Zusammenfassung 
Package Einsatz 
DBMS_XPLAN Anzeige von Ausführungspläne 
DBMS_ASSERT Vermeidung von SQL Injektion 
DBMS_RESUMABLE Aufschieben von Operationen 
DBMS_UTILITY Utility Programme 
54 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
Nützliche Informationen und Links 
 Homepage der deutschsprachigen DBA Tipps: 
blogs.oracle.com/dbacommunity_deutsch 
 Alle Veranstaltungen (events) und Links unter 
tinyurl.com/oraclebudb 
– Oracle Developers' Monthly 
– Veranstaltung in Frankfurt am 17.Juni 
 Download: apex.oracle.com/folien 
Schlüsselwort: webinar_packages3 
 Seminarreihe hat Sommerpause ☺ 
55 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Weitere ähnliche Inhalte

Was ist angesagt?

Oracle Old Features DOAG 2011
Oracle Old Features DOAG 2011Oracle Old Features DOAG 2011
Oracle Old Features DOAG 2011
Uwe Küchler
 
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Ulrike Schwinn
 
Ldap sqlnet
Ldap sqlnetLdap sqlnet
Ldap sqlnet
Gunther Pippèrr
 
PureSQL APEX Connect
PureSQL APEX ConnectPureSQL APEX Connect
PureSQL APEX Connect
Trivadis
 
Marek Adar – IT-Tage 2015 – Oracle Recovery Manager unter 12c
Marek Adar – IT-Tage 2015 – Oracle Recovery Manager unter 12cMarek Adar – IT-Tage 2015 – Oracle Recovery Manager unter 12c
Marek Adar – IT-Tage 2015 – Oracle Recovery Manager unter 12c
Informatik Aktuell
 
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Informatik Aktuell
 

Was ist angesagt? (6)

Oracle Old Features DOAG 2011
Oracle Old Features DOAG 2011Oracle Old Features DOAG 2011
Oracle Old Features DOAG 2011
 
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
 
Ldap sqlnet
Ldap sqlnetLdap sqlnet
Ldap sqlnet
 
PureSQL APEX Connect
PureSQL APEX ConnectPureSQL APEX Connect
PureSQL APEX Connect
 
Marek Adar – IT-Tage 2015 – Oracle Recovery Manager unter 12c
Marek Adar – IT-Tage 2015 – Oracle Recovery Manager unter 12cMarek Adar – IT-Tage 2015 – Oracle Recovery Manager unter 12c
Marek Adar – IT-Tage 2015 – Oracle Recovery Manager unter 12c
 
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
 

Andere mochten auch

Modelo pedagogico
Modelo pedagogicoModelo pedagogico
Modelo pedagogico
Jbespana
 
Unsere Schule ist umweltfreundlich
Unsere Schule ist umweltfreundlichUnsere Schule ist umweltfreundlich
Unsere Schule ist umweltfreundlich
Dusan Domeny
 
Modellbildung kapitel 4
Modellbildung kapitel 4Modellbildung kapitel 4
Modellbildung kapitel 4
Omar Corral
 
Memoria multiculturalidad
Memoria   multiculturalidadMemoria   multiculturalidad
Memoria multiculturalidad
Medellín Convention Bureau
 
G sec - 2011-03-15-sen-ek
G sec - 2011-03-15-sen-ekG sec - 2011-03-15-sen-ek
G sec - 2011-03-15-sen-ek
bertramgeck
 
Conozcan otros países, Japón
Conozcan otros países, JapónConozcan otros países, Japón
Conozcan otros países, Japón
Barbara Aracena Diaz
 
Unidad 4 tema 1
Unidad 4 tema 1Unidad 4 tema 1
Unidad 4 tema 1
DURLEINYS
 
Twitts & faces para corazones necesitados 2
Twitts & faces para corazones necesitados 2Twitts & faces para corazones necesitados 2
Twitts & faces para corazones necesitados 2
Victor Manuel Betemi
 
90828580 seguinforcem1-00609 ccm-26-temario
90828580 seguinforcem1-00609 ccm-26-temario90828580 seguinforcem1-00609 ccm-26-temario
90828580 seguinforcem1-00609 ccm-26-temario
Julian Santos Morales
 
B&IT-Prozessablauf: Mobile Instandhaltung auf Tablet PC / iPad - Rückmeldung
B&IT-Prozessablauf: Mobile Instandhaltung auf Tablet PC / iPad - RückmeldungB&IT-Prozessablauf: Mobile Instandhaltung auf Tablet PC / iPad - Rückmeldung
B&IT-Prozessablauf: Mobile Instandhaltung auf Tablet PC / iPad - Rückmeldung
Wolfgang Hornung
 
Entendiendo los proyectos en GTD | Primeras Jornadas Optima Lab
Entendiendo los proyectos en GTD | Primeras Jornadas Optima LabEntendiendo los proyectos en GTD | Primeras Jornadas Optima Lab
Entendiendo los proyectos en GTD | Primeras Jornadas Optima Lab
Antonio José Masiá
 
Access
AccessAccess
Internet: paradigma de la comunicación digital (TIC 1)
Internet: paradigma de la comunicación digital (TIC 1)Internet: paradigma de la comunicación digital (TIC 1)
Internet: paradigma de la comunicación digital (TIC 1)
Luis Gomez
 
Trabajo en equipo
Trabajo en equipoTrabajo en equipo
Trabajo en equipo
Susana Archondo Ormachea
 
Carta 10b
Carta 10bCarta 10b
Carta 10b
alissonmarin
 
Etapas de la vida tecnológica
Etapas de la vida tecnológicaEtapas de la vida tecnológica
Etapas de la vida tecnológica
Mari Carmen Gonzalez Lopez
 
Derechos de los niños
Derechos de los niñosDerechos de los niños
Derechos de los niños
jesus0171
 
Acces (1)
Acces (1)Acces (1)
Acces (1)
davishurrego97
 
Coaching personal
Coaching personalCoaching personal
Coaching personal
Susana Archondo Ormachea
 

Andere mochten auch (20)

Modelo pedagogico
Modelo pedagogicoModelo pedagogico
Modelo pedagogico
 
Unsere Schule ist umweltfreundlich
Unsere Schule ist umweltfreundlichUnsere Schule ist umweltfreundlich
Unsere Schule ist umweltfreundlich
 
Modellbildung kapitel 4
Modellbildung kapitel 4Modellbildung kapitel 4
Modellbildung kapitel 4
 
Memoria multiculturalidad
Memoria   multiculturalidadMemoria   multiculturalidad
Memoria multiculturalidad
 
G sec - 2011-03-15-sen-ek
G sec - 2011-03-15-sen-ekG sec - 2011-03-15-sen-ek
G sec - 2011-03-15-sen-ek
 
Conozcan otros países, Japón
Conozcan otros países, JapónConozcan otros países, Japón
Conozcan otros países, Japón
 
Unidad 4 tema 1
Unidad 4 tema 1Unidad 4 tema 1
Unidad 4 tema 1
 
Twitts & faces para corazones necesitados 2
Twitts & faces para corazones necesitados 2Twitts & faces para corazones necesitados 2
Twitts & faces para corazones necesitados 2
 
90828580 seguinforcem1-00609 ccm-26-temario
90828580 seguinforcem1-00609 ccm-26-temario90828580 seguinforcem1-00609 ccm-26-temario
90828580 seguinforcem1-00609 ccm-26-temario
 
B&IT-Prozessablauf: Mobile Instandhaltung auf Tablet PC / iPad - Rückmeldung
B&IT-Prozessablauf: Mobile Instandhaltung auf Tablet PC / iPad - RückmeldungB&IT-Prozessablauf: Mobile Instandhaltung auf Tablet PC / iPad - Rückmeldung
B&IT-Prozessablauf: Mobile Instandhaltung auf Tablet PC / iPad - Rückmeldung
 
Entendiendo los proyectos en GTD | Primeras Jornadas Optima Lab
Entendiendo los proyectos en GTD | Primeras Jornadas Optima LabEntendiendo los proyectos en GTD | Primeras Jornadas Optima Lab
Entendiendo los proyectos en GTD | Primeras Jornadas Optima Lab
 
Access
AccessAccess
Access
 
Internet: paradigma de la comunicación digital (TIC 1)
Internet: paradigma de la comunicación digital (TIC 1)Internet: paradigma de la comunicación digital (TIC 1)
Internet: paradigma de la comunicación digital (TIC 1)
 
Trabajo en equipo
Trabajo en equipoTrabajo en equipo
Trabajo en equipo
 
Carta 10b
Carta 10bCarta 10b
Carta 10b
 
Etapas de la vida tecnológica
Etapas de la vida tecnológicaEtapas de la vida tecnológica
Etapas de la vida tecnológica
 
Derechos de los niños
Derechos de los niñosDerechos de los niños
Derechos de los niños
 
Die vier kerzen
Die vier kerzenDie vier kerzen
Die vier kerzen
 
Acces (1)
Acces (1)Acces (1)
Acces (1)
 
Coaching personal
Coaching personalCoaching personal
Coaching personal
 

Ähnlich wie Ausgewählte PL/SQL Packages (3)

Ausgewählte PL/SQL Packages (1)
Ausgewählte PL/SQL Packages (1)Ausgewählte PL/SQL Packages (1)
Ausgewählte PL/SQL Packages (1)
Ulrike Schwinn
 
Oracle Text 12c New Features
Oracle Text 12c New FeaturesOracle Text 12c New Features
Oracle Text 12c New Features
Ulrike Schwinn
 
Oracle workshop sessiontracing
Oracle workshop sessiontracingOracle workshop sessiontracing
Oracle workshop sessiontracingciganek
 
Performance-Analyse mit Bordmitteln
Performance-Analyse mit BordmittelnPerformance-Analyse mit Bordmitteln
Performance-Analyse mit Bordmitteln
OPITZ CONSULTING Deutschland
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Ulrike Schwinn
 
18c: private temporary tables
18c: private temporary tables18c: private temporary tables
18c: private temporary tables
Ulrike Schwinn
 
Pure SQL for batch processing
Pure SQL for batch processingPure SQL for batch processing
Pure SQL for batch processing
Andrej Pashchenko
 
Hybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19cHybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19c
Ulrike Schwinn
 
Oracle12c für Entwickler
Oracle12c für EntwicklerOracle12c für Entwickler
Oracle12c für Entwickler
Carsten Czarski
 
Datenbank-Hausputz für Einsteiger
Datenbank-Hausputz für EinsteigerDatenbank-Hausputz für Einsteiger
Datenbank-Hausputz für Einsteiger
Markus Flechtner
 
Polymorphic Table Functions in 18c
Polymorphic Table Functions in 18cPolymorphic Table Functions in 18c
Polymorphic Table Functions in 18c
Andrej Pashchenko
 
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Peter Ramm
 
APEX 5.1 - Architektur, Installation & Betrieb
APEX 5.1 - Architektur, Installation & BetriebAPEX 5.1 - Architektur, Installation & Betrieb
APEX 5.1 - Architektur, Installation & Betrieb
Niels de Bruijn
 
MySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA'sMySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA's
FromDual GmbH
 
Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln
OPITZ CONSULTING Deutschland
 
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
OPITZ CONSULTING Deutschland
 
SAP Datashpere - von Bits und Bites zu Widgets und Charts
SAP Datashpere - von Bits und Bites zu Widgets und ChartsSAP Datashpere - von Bits und Bites zu Widgets und Charts
SAP Datashpere - von Bits und Bites zu Widgets und Charts
IBsolution GmbH
 
Real Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon DickmeißReal Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
OPITZ CONSULTING Deutschland
 
Automatisiertes disaster recovery testing mit der oracle cloud
Automatisiertes disaster recovery testing mit der oracle cloudAutomatisiertes disaster recovery testing mit der oracle cloud
Automatisiertes disaster recovery testing mit der oracle cloud
Trivadis
 
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import DataIntroduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
Gunther Pippèrr
 

Ähnlich wie Ausgewählte PL/SQL Packages (3) (20)

Ausgewählte PL/SQL Packages (1)
Ausgewählte PL/SQL Packages (1)Ausgewählte PL/SQL Packages (1)
Ausgewählte PL/SQL Packages (1)
 
Oracle Text 12c New Features
Oracle Text 12c New FeaturesOracle Text 12c New Features
Oracle Text 12c New Features
 
Oracle workshop sessiontracing
Oracle workshop sessiontracingOracle workshop sessiontracing
Oracle workshop sessiontracing
 
Performance-Analyse mit Bordmitteln
Performance-Analyse mit BordmittelnPerformance-Analyse mit Bordmitteln
Performance-Analyse mit Bordmitteln
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
 
18c: private temporary tables
18c: private temporary tables18c: private temporary tables
18c: private temporary tables
 
Pure SQL for batch processing
Pure SQL for batch processingPure SQL for batch processing
Pure SQL for batch processing
 
Hybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19cHybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19c
 
Oracle12c für Entwickler
Oracle12c für EntwicklerOracle12c für Entwickler
Oracle12c für Entwickler
 
Datenbank-Hausputz für Einsteiger
Datenbank-Hausputz für EinsteigerDatenbank-Hausputz für Einsteiger
Datenbank-Hausputz für Einsteiger
 
Polymorphic Table Functions in 18c
Polymorphic Table Functions in 18cPolymorphic Table Functions in 18c
Polymorphic Table Functions in 18c
 
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
 
APEX 5.1 - Architektur, Installation & Betrieb
APEX 5.1 - Architektur, Installation & BetriebAPEX 5.1 - Architektur, Installation & Betrieb
APEX 5.1 - Architektur, Installation & Betrieb
 
MySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA'sMySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA's
 
Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln
 
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
Schlaglichter Oracle DB 11gR2 - DOAG Regio-Treffen 2010 - OPITZ CONSULTING - ...
 
SAP Datashpere - von Bits und Bites zu Widgets und Charts
SAP Datashpere - von Bits und Bites zu Widgets und ChartsSAP Datashpere - von Bits und Bites zu Widgets und Charts
SAP Datashpere - von Bits und Bites zu Widgets und Charts
 
Real Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon DickmeißReal Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
 
Automatisiertes disaster recovery testing mit der oracle cloud
Automatisiertes disaster recovery testing mit der oracle cloudAutomatisiertes disaster recovery testing mit der oracle cloud
Automatisiertes disaster recovery testing mit der oracle cloud
 
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import DataIntroduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
 

Ausgewählte PL/SQL Packages (3)

  • 1. Ausgewählte PL/SQL Packages (Teil 3) DBMS_XPLAN DBMS_ASSERT DBMS_RESUMABLE DBMS_UTILITY Ulrike Schwinn Business Unit Database ORACLE Deutschland B.V. & Co. KG.
  • 2. Agenda 1. DBMS_XPLAN - zur Anzeige von Ausführungspläne 2. DBMS_ASSERT - zur Vermeidung von SQL Injektion 3. DBMS_RESUMABLE - zum Aufschieben von Operationen 4. DBMS_UTILITY - ausgewählte Programme zur Unterstützung unterschiedlicher Funktionen 4 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 3. Das Package DBMS_XPLAN 5 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 4. Ausführungspläne Kommandos und Werkzeuge – EXPLAIN PLAN: SQL Kommando zur Generierung des Plans in der PLAN_TABLE – utlxplp.sql/utlxpls.sql:Standard Skripte zur formatierten Ausgabe (in $ORACLE_HOME/rdbms/admin) – SQL*Plus: SET AUTOTRACE ON EXPLAIN DBMS_XPLAN: Formatierte Ausgabe mit PL/SQL Package – – Graphische Werkzeuge SQL Developer im SQL Worksheet Cloud Control im SQL Worksheet 6 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 5. SQL Developer: SQL Worksheet 7 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 6. EM: Performance=SQL=SQL Worksheet 8 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 7. DBMS_XPLAN - Funktionsumfang Aufgabe: Anzeige von formatierten Ausführungsplänen Quellen: – EXPLAIN PLAN – Laufzeit Statistiken aus dem Cursor Cache aus V$SQL_PLAN und V$SQL_PLAN_STATISTICS – AWR (Automatic Workload Repository) – SQL Tuning Sets (STS) – SQL Plan Baselines Voraussetzung – Zugriffsrechte auf DBA Tabellen bzw. SELECT_CATALOG_ROLE – Interpretation von Ausführungsplänen ☺ (White Paper: The Oracle Optimizer Explain the Explain Plan) 9 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 8. DBMS_XPLAN: einige Funktionen • DISPLAY – aus der PLAN_TABLE (siehe EXPLAIN PLAN) • DISPLAY_PLAN – wie DISPLAY mit Formatausgabe wie HTML,TEXT.. • DISPLAY_CURSOR – aus dem Cursor Cache • DISPLAY_SQLSET – aus dem SQL Tuning Set • DISPLAY_SQL_PLAN_BASELINE – aus der SQL Plan Baseline • DISPLAY_AWR – aus dem AWR • DIFF_PLAN – Vergleich zweier Pläne (neu in 12c) 10 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 9. Ausgabe mit DISPLAY Stelle mit utlxplan.sql die PLAN_TABLE zur Verfügung Führe EXPLAIN PLAN FOR aus EXPLAIN PLAN FOR SELECT p.prod_name, SUM(s.quantity_sold) FROM sh.sales s, sh.products p WHERE s.prod_id = p.prod_id GROUP BY p.prod_name; Einstellungen wählen – FORMAT: BASIC, TYPICAL , ALL, SERIAL mit Keyword Kombinationen – FILTER_PREDS: letzter gespeicherter Plan (Default), sonst PLAN_ID SELECT * FROM table (DBMS_XPLAN.DISPLAY()); SELECT * FROM table (DBMS_XPLAN.DISPLAY(table_name = null, statement_id = null, format = 'BASIC'‚ filter_preds = null)); 11 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 10. Beispiel für DISPLAY mit FORMAT TYPICAL 12 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 11. Ausgabe mit DISPLAY_PLAN Zusätzlich zu DISPLAY Angabe von TYPE für spezielles Format Beispiele: 'TEXT‘ (default), 'ACTIVE', 'HTML', 'XML‘ set long 10000 heading off spool planausgabe.html SELECT DBMS_XPLAN.DISPLAY_PLAN(type='HTML') from dual; ... /script /body /html /iframe /body /html spool off 13 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 12. Verwendung von DISPLAY_CURSOR 1. Zuerst Statement ausführen 2. Cursor Child aus V$SQL selektieren 3. SQL*Plus Formatierung (set pagesize 0 linesize 130) SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR()); SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR( sql_id = 'f4py1wd1vh5nj', cursor_child_no = null, format ='BASIC ROWS')); 14 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 13. Ausgabe mit DISPLAY_CURSOR SQL SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR(sql_id='f4py1wd1vh5nj', CURSOR_CHILD_NO = null, format = 'BASIC ROWS')); EXPLAINED SQL STATEMENT: ------------------------ SELECT p.prod_name, SUM(s.quantity_sold) FROM sh.sales s, sh.products p WHERE s.prod_id =p.prod_id GROUP By p.prod_name Plan hash value: 3535171836 -------------------------------------------------- | Id | Operation | Name | Rows | -------------------------------------------------- | 0 | SELECT STATEMENT | | | | 1 | HASH GROUP BY | | 71 | | 2 | HASH JOIN | | 2804 | | 3 | TABLE ACCESS FULL | PRODUCTS | 72 | | 4 | PARTITION RANGE ALL| | 2804 | | 5 | TABLE ACCESS FULL | SALES | 2804 | -------------------------------------------------- 15 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 14. DISPLAY_CURSOR ... Mehr Infos • Optimizer kann sich verschätzen ... • Ausgabe mit Estimated Rows (E-Rows) und Actual Rows (A-Rows) ist möglich • Dazu: • Hint gather_plan_statistics mitgeben select /*+ gather_plan_statistics */ count(*) Anzahl from sh.customers where cust_state_province = 'Bayern' and cust_city = 'Erding'; • Spezielles Format IOSTATS LAST nutzen SELECT * FROM table (DBMS_XPLAN.DISPLAY_CURSOR (sql_id ='1nyxryfq8mzpk', cursor_child_no = NULL, format ='IOSTATS LAST')) 16 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 15. Estimated Rows und Actual Rows SQL_ID 30xu9nkcatfx0, child number 0 ------------------------------------- select /*+ gather_plan_statistics */ count(*) Anzahl from sh.customers where cust_state_province = 'Bayern' and cust_city = 'Erding' Plan hash value: 296924608 --------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | --------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.23 | 1473 | 1471 | | 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.23 | 1473 | 1471 | |* 2 | TABLE ACCESS FULL| CUSTOMERS | 1 | 1 | 69 |00:00:00.06 | 1473 | 1471 | --------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter((CUST_CITY='Erding' AND CUST_STATE_PROVINCE='Bayern')) 17 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 16. DISPLAY ... Indexgröße -Schätzungen? SQL explain plan for create index i_test on test(object_name); Explained. SQL select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- Plan hash value: 3303956404 -------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time -------------------------------------------------------------------------------- PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- | 0 | CREATE INDEX STATEMENT | | 88616 | 2076K| 153 (1)| 00:00:01 | 1 | INDEX BUILD NON UNIQUE| I_TEST | | | | | 2 | SORT CREATE INDEX | | 88616 | 2076K| | | 3 | TABLE ACCESS FULL | TEST | 88616 | 2076K| 77 (2)| 00:00:01 PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- Note ----- - estimated index size: 4194K bytes 18 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 17. Neu in 12c: Adaptive Plan Generierung Ziel: Verhinderung von schlechten Plänen – während der ersten Ausführung (adaptive Pläne) bzw. nach der ersten Ausführung (Reoptimization) Implementierung auch in DBMS_XPLAN 19 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 18. Neu in 12c: Adaptive Pläne Adaptive Pläne haben verschiedene SQL Plan Optionen z.B. Subpläne (z.B. Hash Join, Nested Loop Join) • Während der erste Ausführung, bevor der Plan aktiviert wird, wird einen Entscheidung getroffen = Finaler Plan (Hash Join) 20 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 19. Neu in 12c: Anzeige der adaptiven Pläne select product_name from oe.order_items o, oe.product_information p where o.unit_price=15 and quantity 1 and p.product_id = o.product_id; SELECT * FROM table (DBMS_XPLAN.DISPLAY_CURSOR(FORMAT = 'ADAPTIVE')); 21 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 20. Das Ergebnis 22 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 21. Das Package DBMS_ASSERT 23 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 22. SQL Injection: DBMS_ASSERT Mitgeliefertes dokumentiertes Package zur Überprüfung von Eingabe Werten zum Schutz vor SQL Injection – Beispiele: --, 1=1, or, and, select, ... Überprüfung von Literalen, Objektnamen, existierenden Objekten bzw. Schemas Einsatz bei dynamisches SQL wie z.B. mit – DBMS_SQL – OPEN_FOR – EXECUTE IMMEDIATE 24 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 23. Wichtige Funktionen Existierende Objekte Existierendes Schema OBJECT_NAME SCHEMA_NAME Einfacher SQL Name Qualifizierter SQL Name SIMPLE_SQL_NAME QUALIFIED_SQL_NAME Hochkomma – einfach ENQUOTE_LITERAL Doppelte Hochkomma ENQUOTE_NAME Arbeitsweise: – Rückgabe des Parameters, wenn OK – PL/SQL-Exception, wenn nicht OK 25 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 24. Exkurs – Quotes in SQL und PL/SQL Statt SQL SELECT 'ulrike''s web blog. It''s ...' str FROM dual; STR --------------------------------- ulrike's web blog. It's ... Nutze Quote Operator q SELECT q'/ulrike's web blog. It's .../' str FROM dual; SELECT q'|ulrike's web blog. It's ...|' str FROM dual; SELECT q'#ulrike's web blog. It's ...#' str FROM dual; 26 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 25. ENQUOTE_LITERAL: Korrekte Literale? SQL SELECT DBMS_ASSERT.ENQUOTE_LITERAL(q'#KING#') FROM dual; DBMS_ASSERT.ENQUOTE_LITERAL(Q'#KING#') ----------------------------------------------------------------- 'KING' 1 Zeile wurde ausgewählt. SQL SELECT DBMS_ASSERT.ENQUOTE_LITERAL(q'#KING' or 1=1 --#') FROM dual; SELECT dbms_assert.enquote_literal(q'#King' or 1=1 --#') FROM dual * ERROR at line 1: ORA-06502: PL/SQL: numeric or value error ORA-06512: at SYS.DBMS_ASSERT, line 342 ORA-06512: at SYS.DBMS_ASSERT, line 411 27 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 26. Korrekte Nutzung wäre ... SQL SELECT DBMS_ASSERT.ENQUOTE_LITERAL(q'#King'' or 1=1 --#') FROM dual; DBMS_ASSERT.ENQUOTE_LITERAL(Q'#KING''OR1=1--#') ----------------------------------------------------------------- 'King'' or 1=1 --' 1 Zeile wurde ausgewählt. 28 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 27. SIMPLE_SQL_NAME: Korrekter Name? Regeln: – Mit alphabetische und alphanumerische Zeichen und ab der 2.ten Stelle auch _, $, und # – Jedes Zeichen ist in “Double Quotes” erlaubt – Leerzeichen sind erlaubt select dbms_assert.SIMPLE_SQL_NAME('TEST') from dual; select dbms_assert.SIMPLE_SQL_NAME('1TEST') from dual; select dbms_assert.SIMPLE_SQL_NAME('TEST-') from dual; select dbms_assert.SIMPLE_SQL_NAME('TEST-') from dual; select dbms_assert.SIMPLE_SQL_NAME(' TEST') from dual; select dbms_assert.SIMPLE_SQL_NAME(q'#TEST'S#') from dual; 29 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 28. SCHEMA_NAME: Existierendes Schema? SQL SELECT DBMS_ASSERT.ENQUOTE_LITERAL (dbms_assert.SCHEMA_NAME('SCOTT')) FROM dual; DBMS_ASSERT.ENQUOTE_NAME(DBMS_ASSERT.SCHEMA_NAME('SCOTT')) --------------------------------------------------------------- SCOTT SQL SELECT DBMS_ASSERT.ENQUOTE_LITERAL (DBMS_ASSERT.SCHEMA_NAME('TTT')) FROM dual; select dbms_assert.enquote_name(dbms_assert.SCHEMA_NAME('TTT')) from dual 30 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. * ERROR at line 1: ORA-44001: invalid schema ORA-06512: at SYS.DBMS_ASSERT, line 266
  • 29. Beispiel: Passwort Prüfung CREATE OR REPLACE PROCEDURE change_passwordproc (username VARCHAR2, password VARCHAR2) AS stmt VARCHAR2(2000); BEGIN stmt := 'alter user '||sys.DBMS_ASSERT.ENQUOTE_NAME (DBMS_ASSERT.SCHEMA_NAME(username),FALSE)|| ' identified by '||DBMS_ASSERT.SIMPLE_SQL_NAME(password); ... dbms_output.put_line(stmt); END; / 31 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 30. Beispiel für Passwort Prüfung SQL EXEC change_passwordproc('HR','test') alter user HR identified by test PL/SQL procedure successfully completed. SQL EXEC change_passwordproc('HR','test quota unlimited on system'); BEGIN change_passwordproc('HR','test quota unlimited on system'); END; * ERROR at line 1: ORA-44003: invalid SQL name ORA-06512: at SYS.DBMS_ASSERT, line 160 ORA-06512: at SYS.CHANGE_PASSWORDPROC, line 5 ORA-06512: at line 1 32 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 31. Fazit und Anwendungen Unbedingt berücksichtigen bei Verwendung von dynamischem SQL Auch interne Verwendung (z.B. SQL Patches etc.) Vorgehen: Überprüfung vor der Durchführung der Eingabe oder Ausgabe einer Fehlermeldung Allerdings: – Prüft nicht die Länge von Eingabe Strings (Buffer Overflow Attacken) oder TNS Connection Strings – Schützt nicht vor Security Risiken durch nicht ausreichende Privilegien Vergabe – nicht berechtigte User usw. – Bietet keinen Schutz vor HTML Injection Weitere gute Beispiele im Internet 33 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 32. Das Package DBMS_RESUMABLE 34 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 33. Resumable Space Allocation Problem: Operationen brechen wegen Speicherplatzfehlern ab Lösung: Resumable Space Allocation Feature – Ausführung der Operationen anhalten, Fehler zu beheben und die Operation fortsetzen Welche Operationen: – Abfragen, DML-Kommandos, DDL- Kommandos, SQL*Loader, Import/Export Wann?: zu kleine Quota, zu wenig Privilegien, zu wenig TEMP Space, nicht ausreichende Storage Settings Achtung: Automatische Verwendung bei Data Pump Export/Import! = Default: 2 Stunden (7200 Sekunden) 35 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 34. Ablauf I 1. Ein Statement wird im RESUMABLE Mode angestartet. – über SYSTEM/SESSION Parameter RESUMABLE_TIMEOUT – über die Session-Einstellung ENABLE RESUMABLE – Resumable Privileg ist erforderlich! ALTER SESSION ENABLE RESUMABLE [TIMEOUT 3600]; ALTER SESSION|SYSTEM SET RESUMABLE_TIMEOUT = 3600; 2. Ein RESUMABLE Statement wird eine definierte Zeitdauer (TIMEOUT-Wert) angehalten (suspended), wenn eine OUT OF SPACE Bedingung eintritt. 36 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 35. Ablauf II 3. Die eingetretenen Fehler werden aufgezeigt in – Views wie DBA_RESUMABLE, V$SESSION_WAIT, DBA_OUTSTANDING_ALERTS – der Alert-Datei – AFTER SUSPEND Triggern, die automatisch auf das Speicherplatz- Problem reagieren können. 4. Nach Lösung des Problems wird die gestoppte Operation weitergeführt, und das Alert Resumable Session Suspended wird gelöscht. 37 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 36. Beispiel DBA_RESUMABLE SQL SELECT user_id, session_id, status, timeout, start_time, status, start_time, suspend_time, resume_time, sql_text, error_msg FROM dba_resumable; USER_ID SESSION_ID STATUS TIMEOUT START_TIME STATUS ---------- ---------- --------- ---------- -------------------- ----- START_TIME SUSPEND_TIME RESUME_TIME -------------------- -------------------- -------------------- SQL_TEXT --------------------------------------------------------------------- ERROR_MSG --------------------------------------------------------------------- 110 70 SUSPENDED 28800 05/19/14 14:52:20 SUSPENDED 05/19/14 14:52:20 05/19/14 14:52:43 insert into t select * from t ORA-01653: unable to extend table SCOTT.T by 1024 in tablespace LOW_COST_STORE 38 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 37. Anzeige SQL SELECT decode(message_level,5,'WARNING',1, 'CRITICAL') alert_level, reason FROM dba_outstanding_alerts WHERE reason LIKE '%resumable%'; ALERT_LE -------- REASON --------------------------------------------------------------------- WARNING Operation on resumable session User SCOTT(110), Session 70, Instance 1 session id 70 suspended because of errors in tablespace LOW_COST_STORE. Error message is ORA-01653: unable to extend table SCOTT.T by 1024 in tablespace LOW_COST_STORE 39 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 38. In Cloud Control 40 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 39. Das Package DBMS_RESUMABLE Folgende Funktionen stehen zur Verfügung – Prozedur ABORT – Funktionen GET_SESSION_TIMEOUT oder GET_TIMEOUT SQL select DBMS_RESUMABLE.GET_TIMEOUT() FROM dual; DBMS_RESUMABLE.GET_TIMEOUT() ---------------------------- -1 – Prozedur SET_SESSION_TIMEOUT bzw. SET_TIMEOUT – Funktion SPACE_ERROR_INFO (Ergebnis Boolean) 41 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 40. Database Trigger AFTER SUSPEND Database Trigger wird ausgeführt, sobald eine Resumable Operation eintritt Innerhalb des Triggers können Informationen aus DBMS_RESUMABLE und DBA_RESUMABLE verwendet werden. Beispiel CREATE OR REPLACE TRIGGER resumable_default_timeout AFTER SUSPEND ON DATABASE BEGIN DBMS_RESUMABLE.SET_TIMEOUT(10800); END; / 42 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 41. Database Trigger CREATE OR REPLACE TRIGGER resumable_default AFTER SUSPEND ON DATABASE DECLARE … BEGIN ret_value := DBMS_RESUMABLE.SPACE_ERROR_INFO(err_type,object_type,object_owner, table_space_name,object_name, sub_object_name); IF table_space_name = 'TEST' THEN INSERT INTO sys.resume_error ( SELECT sql_text, error_msg, suspend_time FROM DBMS_RESUMABLE WHERE SESSION_ID = cur_sid AND INSTANCE_ID = cur_inst); -- email senden etc... DBMS_RESUMABLE.ABORT(cur_sid); ELSE DBMS_RESUMABLE.SET_TIMEOUT(28800); END IF; COMMIT; 43 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 42. Ergebnis SQL SELECT * FROM resume_error; ERR_TYPE -------------------------------------------------------------------------- OBJECT_OWNER OBJECT_TYPE TABLE_SPACE_NAM OBJECT_NAM SUB_OBJECT --------------- --------------- --------------- ---------- ---------- NO MORE SPACE TABLE SCOTT TEST T Dabei gibt es folgende Error Typen: – NO MORE SPACE – MAX EXTENTS REACHED – SPACE QUOTA EXCEEDED 44 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 43. Das Package DBMS_UTILITY 45 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 44. DBMS_UTILITY... ein paar Beispiele Messungen durchführen GET_TIME GET_CPU_TIME Informationen zur Datenbank DB_VERSION Warten auf Transaktionen WAIT_ON_PENDING_DML 12c: View Subquery ausgeben EXPAND_SQL_TEXT 46 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 45. Informationen zur Datenbank übre DB_VERSION Informationen zur genauen Version mit PL/SQL SQL variable version varchar2(200) SQL variable compatibility varchar2(200) SQL execute DBMS_UTILITY.DB_VERSION(:version,:compatibility); PL/SQL procedure successfully completed. SQL print version VERSION --------------------------------------------------------------- 11.2.0.3.0 Weitere Möglichkeit mit DBMS_DB_VERSION SQL set serveroutput on SQL execute DBMS_OUTPUT.PUT_LINE (DBMS_DB_VERSION.VERSION || ' und ' '||DBMS_DB_VERSION.RELEASE); 11 und 2 47 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 46. Messungen mit GET_CPU_TIME Zeitmessung Messung der CPU Zeiten in hundertstel Sekunden ... start_cpu_time := DBMS_UTILITY.GET_CPU_TIME; -- Programmlauf end_cpu_time := DBMS_UTILITY.GET_CPU_TIME; dbms_output.put_line('CPU Time= ' || end_cpu_time - start_cpu_time); ... 48 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 47. Warten mit WAIT_ON_PENDING_DML Eine Session kann so lange warten, bis die zuvor angestarteten Transaktionen abgeschlossen sind oder bis zu einem Timeout. Wartezeit und SCN, ab wann die Transaktionen relevant sind, können angegeben werden Implementierung in 11g Release 2 zur Unterstützung des Features „Edition Based Redefinition“ 49 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 48. Anwendungsfall: Online Application Upgrade aka Edition Based Redefinition PL/SQL-Code im laufenden Betrieb ersetzen – Keine Downtime mehr nötig – Versionsmanagement in der Datenbank – Parallelbetrieb mehrerer Editionen möglich – Retirement nicht mehr benötigter Versionen 50 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 49. Beispiel WAIT_ON_PENDING_DML CREATE OR REPLACE PROCEDURE wait_test AS v_bool BOOLEAN; v_scn NUMBER; BEGIN v_bool := dbms_utility.wait_on_pending_dml (tables = 'SCOTT.T, SCOTT.DEPT',timeout = 10, scn = v_scn ); dbms_output.put_line( 'scn: ' || v_scn ); IF v_bool THEN dbms_output.put_line( 'true' ); ELSE dbms_output.put_line( 'false' ); END IF; END; / – Wartezeit 10 Sekunden – SCN Zeitpunkt für Transaktionen 51 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 50. Beispiel: WAIT_ON_PENDING_DML Starte eine Session mit Prozedur wait_test Unabhängige davon gibt es weitere Sessions, die INSERTs durchführen – Dabei erfolgt kein Transaktionsende innerhalb von 10 Sekunden Ergebnis der ersten Session nach 10 Sekunden … – FALSE da Transaktionen noch laufen SQL execute wait_test … scn: 13618833 false 52 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 51. Neu in 12c: EXPAND_SQL_TEXT Löst Abfragen auf Views auf Eingabe: Subquery auf Views; Ergebnis: Abfrage auf zugeh. Tabellen SQL variable outclob clob SQL create or replace view my_view as select * from sales where amount_sold1300; SQL execute DBMS_UTILITY.EXPAND_SQL_TEXT ('select count(prod_id) from my_view', :outclob); SQL print outclob OUTCLOB --------------------------------------------------------------- SELECT COUNT(A1.PROD_ID) COUNT(PROD_ID) FROM (SELECT A2.PROD_ID PROD_ID FROM SH.SALES A2 WHERE A2.AMOUNT_SOLD1300) A1 53 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 52. Zusammenfassung Package Einsatz DBMS_XPLAN Anzeige von Ausführungspläne DBMS_ASSERT Vermeidung von SQL Injektion DBMS_RESUMABLE Aufschieben von Operationen DBMS_UTILITY Utility Programme 54 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
  • 53. Nützliche Informationen und Links Homepage der deutschsprachigen DBA Tipps: blogs.oracle.com/dbacommunity_deutsch Alle Veranstaltungen (events) und Links unter tinyurl.com/oraclebudb – Oracle Developers' Monthly – Veranstaltung in Frankfurt am 17.Juni Download: apex.oracle.com/folien Schlüsselwort: webinar_packages3 Seminarreihe hat Sommerpause ☺ 55 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.