Ausgewählte PL/SQL Packages (2)

Preview:

Citation preview

Ausgewählte PL/SQL Packages (Teil 2)DBMS_QOPATCH DBMS_SPACE DBMS_SERVICE DBMS_SERVICE DBMS_FLASHBACK_ARCHIVE

Ulrike Schwinn (Follow @uschwinn)Business Unit Database

ORACLE Deutschland B.V. & Co. KG.

1. DBMS_XDB_CONFIG – XDB Port Konfiguration

2. DBMS_COMPRESSION – Compression Ratio, Komprimierte Zeilen

3. DBMS_REDEFINITION – Online Neudefinition von Tabellen

In Teil 1 ...

2 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

4. DBMS_SQL_MONITOR – Real Time Monitoring

5. DBMS_PARALLEL_EXECUTE – Manuelle Parallellisierung

Folien dazu unter

http://apex.oracle.com/folien

Schlüsselwort: webinar_packages1

1. DBMS_QOPATCH – Informationen zu Patches mit PL/SQL

2. DBMS_SPACE – Platzverbrauch abschätzen

3. DBMS_SERVICE – Services anlegen, löschen, ändern

Heutige Agenda

3 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

4. DBMS_FLASHBACK_ARCHIVE – Flashback Data Archive Funktionen

4 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Etwas Grundsätzliches

Wie findet man obsolete Packages?

� Upgrade Guide 12c Release 1 (12.1) in Kapitel 8 “Deprecated and Desupported Features for Oracle Database 12c”

5 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Wie findet man obsolete Packages?SELECT name FROM

(SELECT synonym_name name FROM dba_synonyms@system11g

WHERE table_name in

(SELECT object_name name FROM dba_objects@system11g

WHERE object_type = 'PACKAGE')

MINUS

SELECT synonym_name name FROM dba_synonyms

WHERE table_name IN

6 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

WHERE table_name IN

(SELECT object_name name FROM dba_objects

WHERE object_type = 'PACKAGE'))

DBMS_DBLINK

DBMS_EXPFIL

DBMS_RLMGR

STATSPACK …

Wie findet man PL/SQL Objekte überhaupt?

� Data Dictionary

– ALL_OBJECTS mit object_type=PACKAGE|PACKAGE_BODY|FUNCTION|PROCEDURE

– ALL_SOURCE mit type=PACKAGE|PACKAGE_BODY|FUNCTION|PROCEDURE

Mit SQL Developer 4.0

7 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

� Mit SQL Developer 4.0

– Funktion Find Database Objects

Im SQL Developer

8 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Im SQL Developer

9 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

10 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Das Package DBMS_QOPATCH

Aufgaben und Funktionen

� Patch Informationen über OPATCH abfragen

opatch lsinventory -XML

� In 12c nun auch in PL/SQL mit DBMS_QOPATCH

� Einige wichtige Funktionen:– GET_OPATCH_BUGS: Bug Liste für bestimmmte Patch Nummer

11 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

– GET_OPATCH_ LIST: Patch Liste installierter Patches

– GET_OPATCH_LSINVENTORY: Gesamte opatch Inventory

– IS_PATCH_INSTALLED: Abfrage auf einzelne Patches

� Ausgabe in XML

Gesamtes Inventory in XML FormatSQL> set long 2000000000 pagesize 0 linesize 32000

SQL> SELECT DBMS_QOPATCH.GET_OPATCH_LSINVENTORY FROM dual;

GET_OPATCH_LSINVENTORY

------------------------------------------------------------

<?xml version="1.0" encoding="CP850" standalone='yes'?>

<InventoryInstance>

12 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

<InventoryInstance>

<oracleHome> <UId>OracleHome-75909c1d-7269-45d1-802e-

75deb9104053</UId> <targetTypeId>oracle_home</targetTypeId>

<patchingModel>oneoff</patchingModel>

<path>/opt/oracle/product/12.1.0/db</path>

<targetTypeId>oracle_home</targetTypeId>

<inventoryLocation>/opt/oraInventory</inventoryLocation> …

Formatierte Ausgabe von Einzelpatcheshttp://sql-plsql-de.blogspot.co.uk/2014/02/sql-anstatt-opatch-lsinventory-mit.html

SQL> set long 2000000000 pagesize 0 linesize 32000

SQL> SELECT patch_id, apply_time, rollbackable

FROM xmltable

('//patch' passing DBMS_QOPATCH.GET_OPATCH_LSINVENTORY

COLUMNS

patch_id number PATH 'patchID',

13 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

patch_id number PATH 'patchID',

apply_time timestamp with time zone PATH 'appliedDate',

rollbackable varchar2(10) PATH 'rollbackable')

PATCH_ID APPLY_TIME ROLLBACKAB

---------- ----------------------------------- ----------

16527374 08.11.13 14:02:02,000000 +01:00 true

17027533 08.11.13 10:24:12,000000 +01:00 true

Abfrage auf einzelne PatchesSQL> SELECT DBMS_QOPATCH.IS_PATCH_INSTALLED(17027533) FROM dual;

DBMS_QOPATCH.IS_PATCH_INSTALLED(17027533)

-----------------------------------------

<patchInfo><patchID xmlns:xsi="http://www.w3.org/2001/XMLSchema-

instance">17027533</patchID><appliedDate

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2013-10-

22T14:00:51+02:00</appliedDate><sqlPatch

14 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

22T14:00:51+02:00</appliedDate><sqlPatch

xmlns:xsi="http://www.w3.org/2001/XMLSchema-

instance">true</sqlPatch><sqlPatchDatabaseStartupMode

xmlns:xsi="http://www.w3.org/2001/XMLSchema-

instance">normal</sqlPatchDatabaseStartupMode></patchInfo>

15 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Das Package DBMS_SPACE

Aufgaben und Funktionen

�Über DBA_SEGMENTS hinaus ... – Informiert detailliert über den Speicherplatz von Segmenten

– Auch für genaue Analyse von Securefiles geeignet

– Schnittstelle für automatischen Segment Advisor

– Trendberechnungen

16 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

– Trendberechnungen

– Anzeige der abhängigen Objekte

�Anwendungsbeispiele– Compression Tests zur Analyse des genauen

Platzverbrauchs

– Unterstützung bei SQL Statement Analyse

Wichtige Komponenten im Einzelnen

Genaue Speicheranalyse (im ASSM) SPACE_USAGE

Freier Platz (im ASSM) UNUSED_SPACE

Kosten für Index/Tabellen Create CREATE_[INDEX/TABLE]_COST

Abhängige Objekte OBJECT_DEPENDENT_SEGMENTS

17 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Abhängige Objekte OBJECT_DEPENDENT_SEGMENTS

Objekt Wachstum OBJECT_GROWTH_TREND

Segment Advisor automatischSegment Advisor Empfehlungen

AUTO_SPACE_ADVISOR_JOB_PROCASA_RECOMMENDATIONS

Automatic Segment Space Management (ASSM)� Freier und genutzter Platz liegt als Bitmap vor.� Ein Bitmap beschreibt wie voll ein Block ist wie z.B.

(0-25, 25-50, 50-75, 75-100%) � Die Funktion SPACE_USAGE bestimmt den genauen Platzverbrauch

� Geignet für – TABLE, TABLE PARTITION, BMB BMB BMB BMB BMB

18 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

– TABLE, TABLE PARTITION,TABLE SUBPARTITION,INDEX,INDEX PARTITION/SUBPARTITIONCLUSTER, LOBs

BMBBMBBMB

BLOCK

BMB BMB BMB BMB

SPACE_USAGE für Tabellen

.

set serveroutput ondeclare

v_unformatted_blocks number;v_unformatted_bytes number;v_fs1_blocks number;v_fs1_bytes number;v_fs2_blocks number;v_fs2_bytes number;v_fs3_blocks number;v_fs3_bytes number;v_fs4_blocks number;v_fs4_bytes number;v_full_blocks number;v_full_bytes number;

begindbms_space.space_usage('SCOTT','EMPLOYEE','table',

19 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

dbms_space.space_usage('SCOTT','EMPLOYEE','table',v_unformatted_blocks,v_unformatted_bytes,v_fs1_blocks,v_fs1_bytes,v_fs2_blocks,v_fs2_bytes,v_fs3_blocks,v_fs3_bytes,v_fs4_blocks,v_fs4_bytes, v_full_blocks,v_full_bytes);

dbms_output.put_line('Unformatted Blocks = ' || v_unformatted_blocks);dbms_output.put_line('Unformatted Bytes = ' || v_unformatted_bytes);dbms_output.put_line('FS1 Bytes (at least 0 to 25% free space) = ' || v_fs1_bytes);dbms_output.put_line('FS1 Blocks(at least 0 to 25% free space) = ' || v_fs1_blocks);dbms_output.put_line('FS2 Bytes (at least 25 to 50% free space)= ' || v_fs2_bytes);dbms_output.put_line('FS2 Blocks(at least 25 to 50% free space)= ' || v_fs2_blocks);dbms_output.put_line('FS3 Bytes (at least 50 to 75% free space) = ' || v_fs3_bytes);dbms_output.put_line('FS3 Blocks(at least 50 to 75% free space) = ' || v_fs3_blocks);dbms_output.put_line('FS4 Bytes (at least 75 to 100% free space) = ' || v_fs4_bytes);dbms_output.put_line('FS4 Blocks(at least 75 to 100% free space)= ' || v_fs4_blocks);dbms_output.put_line('Full Blocks in segment = ' || v_full_blocks);dbms_output.put_line('Full Bytes in segment = ' || v_full_bytes);

end;

Ergebnis

.Unformatted Blocks = 0Unformatted Bytes = 0FS1 Bytes (at least 0 to 25% free space) = 8192FS1 Blocks(at least 0 to 25% free space) = 1FS2 Bytes (at least 25 to 50% free space)= 0FS2 Blocks(at least 25 to 50% free space)= 0FS3 Bytes (at least 50 to 75% free space) = 0FS3 Blocks(at least 50 to 75% free space) = 0FS4 Bytes (at least 75 to 100% free space) = 425984FS4 Blocks(at least 75 to 100% free space)= 52

20 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

FS4 Blocks(at least 75 to 100% free space)= 52Full Blocks in segment = 11070Full Bytes in segment = 90685440

PL/SQL procedure successfully completed.

DBMS_SPACE für SecureFiles

DBMS_SPACE.SPACE_USAGE(segment_owner IN VARCHAR2, segment_name IN VARCHAR2, segment_type IN VARCHAR2, segment_size_blocks OUT NUMBER, segment_size_bytes OUT NUMBER, used_blocks OUT NUMBER, used_bytes OUT NUMBER, expired_blocks OUT NUMBER, expired_bytes OUT NUMBER,

21 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

� Unbedingt separates LOB Segment mitberücksichtigen! � SHRINK Kommando gibt es nicht mit SecureFiles!

expired_bytes OUT NUMBER, unexpired_blocks OUT NUMBER, unexpired_bytes OUT NUMBER, partition_name IN VARCHAR2 DEFAULT NULL);

Wie groß ist eine Tabelle?

� Umfangreiches Beispiel, das alle möglichen Segmentarten berücksichtigt

� http://sql-plsql-de.blogspot.co.uk/2009/01/wie-gro-ist-eigentlich-eine-tabelle.html

– Funktioniert in 11g

– Man muß als Eigentümer angemeldet sein

22 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

– Man muß als Eigentümer angemeldet sein

SQL> SELECT * FROM table(get_space_info('SECURE_LOB'));

SQL> SELECT * FROM table (get_space_info('SALES'));

Welche Segmente sind abhängig? � Angabe von Segmenttypen als Zahl (1=Tabelle, 2=Nested Table usw.)

SQL> SELECT * FROM table(DBMS_SPACE.OBJECT_DEPENDENT_SEGMENTS(objowner => 'SH',objname => 'CUSTOMERS',partname => null,objtype => 1));

SEGMENT_OWNER SEGMENT_NAME SEGMENT_TYPE

23 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

SEGMENT_OWNER SEGMENT_NAME SEGMENT_TYPE-------------------- ---------------------------- --------------------TABLESPACE_NAME PARTITION_NAME LOB_COLUMN_NAME--------------- ------------------------- --------------------SH CUSTOMERS TABLEUSERSSH CUSTOMERS_PK INDEXEXAMPLESH CUSTOMERS_GENDER_BIX INDEX

Im SQL Developer

24 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Größenprognose für Tabellen und Indizes SQL> exec DBMS_SPACE.CREATE_TABLE_COST(

tablespace_name =>'USERS',colinfos => create_table_cost_columns(create_table_cost_colinfo('NUMBER',4),

create_table_cost_colinfo('VARCHAR2',30),create_table_cost_colinfo('NUMBER',6),create_table_cost_colinfo('NUMBER',4)),

row_count => 221184,pct_free => 10,used_bytes => :used_bytes,alloc_bytes => :alloc_bytes);

25 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

alloc_bytes => :alloc_bytes);

SQL> SELECT :used_bytes, :alloc_bytes FROM dual;

:USED_BYTES :ALLOC_BYTES----------- ------------

11771904 12582912

� Größenprognose auch für Indizes möglich (über DDL Angabe)

Im EM

26 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Segment Advisor

� 2 verschiedene Funktionsweisen: – Automatic Segment Advisor (in der Automated Maintenance Task)

– Segment Advisor manuell (im EM oder DBMS_ADVISOR)

� Dabei werden berücksichtigt ... – Tablespaces, Tabellen, Partitionen, zug. Indizes und Large Objects

Was ist anders bei Automatic Segment Advisor?

28 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

� Was ist anders bei Automatic Segment Advisor? – Segmente mit hoher Wachstumsrate und hoher Aktivität in einem

Tablespace, der das Critical oder Warning Threshold überschreitet.

– Zusätzlich: OLTP Compression Empfehlungen für ausreichend große Tabellen mit mindestens 3 Indizes

Segment Advisor nutzen

� Automatic Segment Advisor in Automated Maintenance Task oder mit

� Segment Advisor (manuell) mit DBMS_ADVISOR

declare …

begin

-- Erzeugen einer Task

SQL> execute DBMS_SPACE.AUTO_SPACE_ADVISOR_JOB_PROC;

29 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

-- Erzeugen einer Task

DBMS_ADVISOR.CREATE_TASK (…);

-- Angabe von Advisortyp (Segment,Access etc) und Objekttyp

DBMS_ADVISOR.CREATE_OBJECT (…);

-- zusätzliche Parameter

DBMS_ADVISOR.SET_TASK_PARAMETER(…);

-- Ausführung

DBMS_ADVISOR.EXECUTE_TASK(…);

end;

Segment Advisor - Ergebnisse

� EM Homepage und Drill Down oder

SQL> SELECT tablespace_name, segment_owner, segment_name,

recommendations, C1 Kommando

FROM TABLE (DBMS_SPACE.ASA_RECOMMENDATIONS(all_runs => 'TRUE',

show_manual => 'TRUE', show_findings => 'FALSE'));

TABLESPACE_NAME SEGMENT_OWNE SEGMENT_NAME

------------------------------ ------------ ----------------------

RECOMMENDATIONS

30 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

RECOMMENDATIONS

-----------------------------------------------------------------

KOMMANDO

------------------------------------------------------------------

EXAMPLE SH CUST_BIG

Enable row movement of the table SH.CUST_BIG and perform shrink, estimated

savings is 247990931 bytes.

alter table "SH"."CUST_BIG" shrink space

...

Segment Advisor im EM

31 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

32 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Das Package DBMS_SERVICE

Datenbank Services

� Services beschreiben Anwendungen/spezielle Funktionen

� Jede Datenbank verfügt über einen oder mehrere Services, die im Datenbank Repository gespeichert sind.

� Wenn eine Instanz startet, registriert sie sich mit einem Listener, indem sie einen Service oder mehrere Services nutzt.

33 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

sie einen Service oder mehrere Services nutzt.

� Der Listener wird über die dynamische Registrierung des PMONs informiert und leitet dann die Verbindungen zwischen Client und Instanz weiter.

Einsatz von Services

� Unabdingbar in RAC und Data Guard Umgebungen

� Wichtige Informationsquelle beim Monitoren und Tunen– V$ Views wie v$session,

v$service_event etc.

– AWR Report

– SQL Monitoring etc.

34 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

– SQL Monitoring etc.

– Scheduler Jobs

� Wichtiger Bestandteil des Database Resource Managers

� Unabdingbar in 12c mit Multitenant Architektur!– Zugriff über Datenbank Service (nicht Instancename)

– Name der PDB als Service

Erzeugen von Services

� Graphisch mit Net Configuration Assistant/Net Manager– Einträge in tnsnames.ora, listener.ora, sqlnet.ora

� DBMS_SERVICE (meist im Single Instance Umfeld)– Keine graphische Implementierung

� srvctl (für Oracle Clusterware, Restart, Oracle Global Data Services)

35 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Aufgaben im Einzelnen

Erzeugen CREATE_SERVICE (*)

Löschen DELETE_SERVICE (ab 12c (*))

Disconnect aller Sessions bzgl Service DISCONNECT_SESSION

Attribute Ändern MODIFY_SERVICE (*)

36 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Attribute Ändern MODIFY_SERVICE (*)

Starten START_SERVICE (*)

Stoppen STOP_SERVICE (*)

(*) Obsolet im Oracle Clusterware, Oracle Restart und Oracle Global Data Services.Umfeld (12c)

Services in DBA_SERVICES

SQL> SELECT name, network_name FROM dba_services;

NAME NETWORK_NAME

------------------------- ------------------------------

SYS$BACKGROUND

SYS$USERS

orclXDB orclXDB

37 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

� orcl: Default Service Name = globale Datenbank Name

� SYS$BACKGROUND und SYS$USERS: interne Services

� orclXDB: Service zur Nutzung der XDB

� highprio: user definierter Service

orclXDB orclXDB

orcl orcl

highprio highprio.de.oracle.com

Einfaches Monitoring

SQL> SELECT service_name, stat_name, value FROM v$service_stats

WHERE service_name IN ('orcl','TEST','XYZ');

SERVICE_NAME STAT_NAME VALUE

-------------- ----------------- ----------

XYZ logons cumulative 1

orcl logons cumulative 201

� Views: dba_services, v$services, v$service_stats und v$session

38 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

orcl logons cumulative 201

TEST logons cumulative 1

XYZ user calls 17

orcl user calls 588456

TEST user calls 17

XYZ DB time 56341

orcl DB time 881701076

TEST DB time 60114

XYZ DB CPU 16000 ...

Verwendung

� Service anlegen (auch mit weiteren Parametern)

� Service starten (z.B. auch Trigger after startup on database) exec DBMS_SERVICE.START_SERVICE('highprio');

SQL> exec DBMS_SERVICE.CREATE_SERVICE(

SERVICE_NAME => 'highprio', -- intern

NETWORK_NAME => 'highprio.de.oracle.com'); -- zur Verbindung

39 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

� Connect (z.B mit Easy Connect)

� Verbindungsabbau der Sessions

sqlplus benutzer/passwort@host:port/highprio.de.oracle.com

exec DBMS_SERVICE.DISCONNECT_SESSION (

service_name => 'highprio',

disconnect_option => DBMS_SERVICE.POST_TRANSACTION);

40 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Das Package DBMS_FLASHBACK_ARCHIVE

Aufgaben und Funktionen � Wozu überhaupt all diese Flashback Technologien?

– Abfragen um Informationen aus der Vergangenheit zu selektieren

– Rollback von Transaktionen

– Wiederherstellen von gelöschten Tabellen

– Zurücksetzen der gesamten Datenbank ohne Point-in-Time Recovery

Zusätzlich seit Oracle 11g: Versionierung der Daten und Schutz vor

41 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

� Zusätzlich seit Oracle 11g: Versionierung der Daten und Schutz vor Zugriff mit Flashback Data Archive

� Seit 11.2.0.4 steht die Verwendung von Flashback Data Archive ohne Optimierung in allen Editionen oder mit Optimierung mit Advanced Compression Option zur Verfügung!

� Archive einrichten

� Aktivierung über einzelne Tabellen

CREATE FLASHBACK ARCHIVE fla_10y TABLESPACE tbs1

QUOTA 100G RETENTION 10 YEAR;

Flashback Data Archive Einrichten

ALTER FLASHBACK DATA ARCHIVE archiv1 SET DEFAULT; …

42 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

� Aktivierung über einzelne Tabellen

� Zugriff

CREATE TABLE test(ang_nr NUMBER,… ) FLASHBACK ARCHIVE fla_10y

ALTER TABLE emp FLASHBACK ARCHIVE;

SELECT * FROM emp AS OF TIMESTAMP TO_TIMESTAMP('29.10.07 14:01', 'dd.mm.yy hh24:mi')

WHERE ename = 'KING'

Monitoren

SQL> SELECT * FROM user_flashback_archive_tables;

TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NA

------------------------------ ---------- --------------------

ARCHIVE_TABLE_NAME STATUS

----------------------------------------------------- ---------

43 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

CUSTOMERS SH FLA_10Y

SYS_FBA_HIST_110158 ENABLED

COUNTRIES SH FLA_10Y

SYS_FBA_HIST_92375 ENABLED

Hintergrund� Basis der Archive sind Undo-Informationen

– Datenbank muß automatisches Undo-Management nutzen

� Undo-Informationen werden nicht gelöscht, bis diese archiviert wordensind

� Daten werden asynchron von einem eigenen Hintergrundprozess(fbda) erfasst

44 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

(fbda) erfasst– Default Capture Intervall 5 Minuten– Capture Intervall wird in Abhängigkeit von der Systemauslastung

automatisch geändert– Der Prozess versucht, die Undo-Informationen aus dem Buffer Cache zu

lesen

� Nicht alle Änderungen werden unterstützt – allerdings– ADD, DROP, RENAME, MODIFY Column– ADD, DROP, RENAME Constraint– DROP, TRUNCATE Partition– RENAME, TRUNCATE Table

� Alle anderen Änderungen möglich mit

Wichtig zu wissen

45 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

� Alle anderen Änderungen möglich mit– DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA

– DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA

� Abfragen auch über DDL Änderungen hinweg

� FDA auf logischer Applikationsebene

12c: Ein Kommando für mehrere Tabellen

execute DBMS_FLASHBACK_ARCHIVE.REGISTER_APPLICATION(

application_name =>'APP1', flashback_archive_name =>'FLA_10Y')

execute DBMS_FLASHBACK_ARCHIVE.ADD_TABLE_TO_APPLICATION

(application_name=>'APP1', table_name=>'T1', schema_name=>'SH')

46 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

execute DBMS_FLASHBACK_ARCHIVE.ADD_TABLE_TO_APPLICATION

(application_name=>'APP1', table_name=>'T2', schema_name=>'SH')

execute DBMS_FLASHBACK_ARCHIVE.ENABLE_APPLICATION(

application_name=>'APP1')

� Falls FDA eingeschaltet ist auch ein Locking möglich

12c: Sogar Locking möglich

execute DBMS_FLASHBACK_ARCHIVE.LOCK_DOWN_APPLICATION(

application_name => 'APP1')

SQL> update t1 set country_id=100 ….

47 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

*

ERROR at line 1:

ORA-55622: DML, ALTER and CREATE UNIQUE INDEX operations are

not allowed on table "SH"."COPY_COUNTRIES"

12c: Temporal Validity und FDA

� Die Gültigkeit einer Tabellenzeile wird überzusätzliche Spalten wie “Gültig Von" und "Gültig Bis“ definiert

� SQL Abfrage "zu einem Zeitpunkt" mit gültigen Rows möglich

� Nützlich für ILM oder Flashback Abfragen

Bei Änderungen

48 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Bei Änderungenwerden Spalten

"Gültig Von" und "Gültig Bis"geschrieben Abfragen erfassen nur

"gültige" Zeilen

� Hinzufügen von “hidden Spalten” durch CREATE/ALTER

12c: Valid Time Temporal

ALTER TABLE emp_neu ADD PERIOD FOR emp_valid;

Table created.

SELECT column_name, hidden_column, data_type

FROM user_tab_cols WHERE table_name='EMP_NEU';

49 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

COLUMN_NAME HID DATA_TYPE

--------------------------- --- --------------------------

EMP_VALID YES NUMBER

EMP_VALID_START YES TIMESTAMP(6) WITH TIME

ZONE

EMP_VALID_END YES TIMESTAMP(6) WITH TIME

ZONE

...

EMPNO NO NUMBER

� Mit DBMS_FLASHBACK_ARCHIVE für alle Queries in der Session

Valid Time Temporal mit FDA

execute DBMS_FLASHBACK_ARCHIVE.ENABLE_AT_VALID_TIME(

LEVEL => 'ASOF',

QUERY_TIME => TO_DATE('20-JAN-2007', 'DD-MON-YYYY'))

execute DBMS_FLASHBACK_ARCHIVE.ENABLE_AT_VALID_TIME(

LEVEL => 'ALL')

50 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

� Kein AS OF beim SELECT mehr erforderlich …

SELECT * from emp_neu WHERE ename = 'Miller';

LEVEL => 'ALL')

� Import von weiteren zusätzlichen Historien Informationen mit einer temporären Hilfstabelle

– CREATE_HISTORY_TEMP_TABLE

– IMPORT_HISTORY

� User Kontext Informationen tracken über

Weitere Neuigkeiten in 12c

51 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

� User Kontext Informationen tracken über– SET_SYS_CONTEXT

– GET_SYS_CONTEXT

Zusammenfassung

Package Einsatz

DBMS_QOPATCH Patch Informationen mit PL/SQL

DBMS_SPACE Segment Speicherplatz ausgeben

52 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

DBMS_SERVICE DB Services anlegen und verwalten

DBMS_FLASHBACK_ARCHIVE Flashback Data Archive nutzen

� Alle Veranstaltungen und Links unter– tinyurl.com/oraclebudb

� Homepage der deutschsprachigen DBA Tipps: blogs.oracle.com/dbacommunity_deutsch

� Dojos: tinyurl.com/dojoonline

Nützliche Informationen und Links

53 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

� Dojos: tinyurl.com/dojoonline

� Alles auf einen Blick: tinyurl.com/oraclebudb

� Nächstes Webseminar zum Thema PL/SQL Packages am 05. Juni

� Download: apex.oracle.com/folienSchlüsselwort: webinar_packages2

Recommended