lets talk about lobs please - doag.org · lets talk about lobs please beate künneke bk...

22
Lets talk about LOBs please Beate Künneke BK Unternehmensberatung [email protected] DOAG Konferenz 19.11.2015 Nürnberg

Upload: phungthuan

Post on 04-Jun-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

Lets talk about LOBs please

Beate Künneke

BK Unternehmensberatung

[email protected]

DOAG

Konferenz

19.11.2015

Nürnberg

Page 2: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

Agenda

Strukturiert, semistrukturiert, unstrukturiert

Warum alles in der DB?

LONG

LOBs

BasicFiles SecureFiles

Space Management

Chunks

UNDO

Migration

Partitionierung

House-Keeping

UTF-8 und LOBs

Flashback und LOBs

Logging

SecureFiles Verschlüsselung

SecureFiles Komprimierung

DBMS_SPACE SQL und PL/SQL

DOAG 2015, 19.11.2015 2 Lets talk about LOBs please … Beate Künneke

Page 3: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

DOAG 2015, 19.11.2015 3 Lets talk about LOBs please … Beate Künneke

Strukturiert, semistrukturiert, unstrukturiert

<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE kochrezept SYSTEM "kochrezept.dtd"> <kochrezept> <rezeptname>Cocktailsauce zum Lobster</rezeptname> <zutatenliste> <zutat>180 g Mayonnaise </zutat> <zutat>1 EL Ketchup </zutat> <zutat>2 EL geschlagene Sahne</zutat> <zutat>1 TL Weinbrand</zutat> <zutat>etwas Meerrettich</zutat> <zutat>Salz und Pfeffer</zutat> </zutatenliste> <anweisungsfolge> <anweisung>Mayonnaise mit Ketchup, Meerrettich und Weinbrand vermengen. </anweisung> <anweisung>Geschlagene Sahne vorsichtig unterziehen.</anweisung> <anweisung>Zum Schluss nach Geschmack mit Salz und Pfeffer würzen.</anweisung> </anweisungsfolge> </kochrezept>

Quelle: Wikipedia

Page 4: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

Warum alles in der DB?

DOAG 2015, 19.11.2015 Lets talk about LOBs please … Beate Künneke 4

• Speicherung

• Verwaltung

• Performance

• Verschlüsselung

• Zugriff

• Sicherung/Wiederherstellbarkeit

• Konsistenz

• Datenschutz und Datensicherheit

Page 5: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

• Verwendbar auch für Oracle Version < 8i

• Inhalte bestehen aus – Zeichen (LONG) oder – Binär -Daten(LONG RAW)

• Größenbeschränkung: 2GB-1

• Schon lange abgekündigt, wird aktuell (12c) aber immer noch unterstützt und im Data Dictionary verwendet

• Zahlreiche Einschränkungen/Nachteile – Pro Tabelle maximal 1 LONG-Spalte – Keine Indizierung von LONG-Spalten – Keine Unterstützung von Partitionierung und LONG in einer Tabelle – Kann nicht als Datentyp für den Rückgabewert einer Funktion gewählt werden – …

DOAG 2015, 19.11.2015 5 Lets talk about LOBs please … Beate Künneke

LONG

Page 6: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

LOBs

• Datentyp ab 8i verfügbar und derzeit der aktuell zu verwendende für große

Datenmengen

• CLOB= Character large objects – Text files: log files, SQL scripts, RTF documents… – Ersetzt LONG – NCLOB für nationale Zeichensätze (z.B. 红烧大虾 in Sojasoße gebratener Hummer)

• BLOB= Binary large objects – Binary files: Excel, MS Word ,PDFs, pictures, movies…. – Ersetzt LONG RAW

• Bfiles – Speicherung einer Referenz auf eine Datei im Dateisystem

• Anwendung – DBMS_LOB package – SQL functionsregexp_... tohandle CLOBs – Oracle Text supportforfulltextsearch

• Speicherung als – BasicFiless – SecureFiles (neueste Speicherform)

DOAG 2015, 19.11.2015 6 Lets talk about LOBs please … Beate Künneke

Quelle: Wikipedia

Page 7: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

BasicFiles

• Verwendbar ab 8i, derzeit (noch) gültig, ist aber nicht mehr die modernste Speicherform

• Besteht aus LOB-Segment und LOB-Index • LOB-Segment und LOB-Index sind zwangsweise in

demselben TBS • können aber unabhängig vom Tabellen-TBS abgelegt

werden • Lob-Index verwaltungstechnisch nicht mit Index

vergleichbar

Beispiel: CREATE TABLE BK.REZEPTE

( REZEPT_ID NUMBER(12,0) NOT NULL, REZ_NAME varchar2(100) NOT NULL, REZ_BILD BLOB NOT NULL ) TABLESPACE BK_TS01 COLUMN RE_BILD STORE AS BASICFILE BLOB;

DOAG 2015, 19.11.2015 7 Lets talk about LOBs please … Beate Künneke

Page 8: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

SecureFiles

• Verwendbar ab 11g

• SecureFiles ist ein kein neuer Datentyp, sondern die neue Implementierung des basicfile

• SecureFiles erweitert LOBs um Features wie – Verschlüsselung – Komprimierung (Performance und Speicherplatz) – Deduplizierung (Performance und Speicherplatz) – Bei nicht-Nutzung ist der Performance und/oder Speicherplatzgewinn fragwürdig

• SecureFiles erlaubt die Konsolidierung von dateibasierten- mit relationalen Daten – Einheitliches Security-Modell – Einheitliche Datensicht – Einheitliches Datenmanagement

• Voraussetzung ist ASSM

• SecureFiles sind für die Anwendung transparent – Datentypen weiterhin BLOB/CLOB – Definition in der Storage-Clause oder durch DB-Parameter – Keine funktionalen Unterschiede – Selbst “Deduplication" ist transparent für den Entwickler

• Komprimierung/Deduplizierung und/oder Verschlüsselung sind kostenpflichtig

DOAG 2015, 19.11.2015 8 Lets talk about LOBs please … Beate Künneke

Page 9: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

Space Management

Wo muss man schauen? DBA_SEGMENTS, DBA_LOBS • Tabelle mit LOB-Spalte(n)

– Separate TBS für Tabellen und LOBs möglich – Falls mehre LOBs pro Tabelle ggfs. pro LOB separates TBS – Auswirkungen ggfs. nur für komfortablere Administration falls TBS auf derselben Platte liegen

• LOB-Daten – Inline (enable storage in row) bis 4000 Byte

• Zu empfehlen bei kleinen Lobs auf die immer gleichzeitig mit den Tabellen-Daten zugegriffen wird • Beim Zugriff auf Tabellen-Daten werden die LOB-daten mitgelesen, somit mehr Blöcke gelesen werden müssen

– Out-of-line (disable storage in row), • falls LOB-Daten > 4000 Byte, dann immer out-of-line • Tabelle speichert LOB-Locator

• LOB-Segmente sollten benannt werden • LOB-Index

– Interne Struktur für den Zugriff auf LOB-Daten – Immer in demselben TBS wie LOB-Daten – Kann nicht separat per drop, rebuild oder move verändert werden

DOAG 2015, 19.11.2015 9 Lets talk about LOBs please … Beate Künneke

Page 10: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

Chunks

• Unterteilung der Lob Segmente in Chunks • Chunk-Größe ist vielfaches der Blockgröße • Write wird durchgeführt auf Chunk-Basis • Es werden Versionen von Daten in den Chunks gehalten

• BasicFiles – statische Größe – DB-Parameter – Maximal 32K

• SecureFiles – Dynamische Größe – Auch größer 32K möglich

Wer will noch einen Tschunk?

Inhalt: Limetten, Rohrzucker,

Crushed Ice, Rum, Club Mate

DOAG 2015, 19.11.2015 10 Lets talk about LOBs please … Beate Künneke

Page 11: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

UNDO

• LOBs werden anders behandelt als bei den anderen Datentypen

• Ältere Versionen werden im LOB-Segment selbst gehalten

• Zur Steuerung gibt es 2 Parameter – PCTVERSION – RETENTION

• Parameter PCTVERSION – Relevant für basicfile – Verwendung für securefile noch möglich aber nicht sinnvoll – Kennzeichnet den Bereich der beim insert frei bleibt für

Updates

• Parameter RETENTION – Zeitperiode in denen ältere Versionen noch verfügbar sind – Unterstützt in Automatic Undo Management – Wert wird über UNDO_RETENTION gesetzt

• Entweder PCTVERSION oder RETENTION • Achtung bei Fallback Query/Table

CREATE TABLE ContainsLOB_tab (n NUMBER, c CLOB) lob (c) STORE AS BASICFILE segname (TABLESPACE lobtbs1 CHUNK 4096 RETENTION NOCACHE LOGGING STORAGE (MAXEXTENTS 5) );

DOAG 2015, 19.11.2015 11 Lets talk about LOBs please … Beate Künneke

Page 12: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

Migration

• Limits der Datentypen – VARCHAR2

• Byte-Länge für Spalte – Bis 11g 4000 Byte – Ab 12c 32K

– LONG • 2GB-1

– CLOB, BLOB, NCLOB • (4 gigabytes - 1) * (database block size)

– BFILE • Betriebssystem-abhängig

• Der Zeichensatz ist bei der Länge der zu speichernden Daten zu beachten – Z.B. bei UNICODE: 1 Zeichen sind max. 4 Byte, d.h. in einer VARCHAR2-Spalte können ggfs. nur 1000 Zeichen

gespeichert werden

• VARCHAR2 kann zu LONG konvertiert werden – Mit der Einschränkung: die Tabelle darf nicht partioniert sein.

• LONG- Spalte kann in LOB konvertiert werden

• Bascisfile in SecureFiles – Keine einfache Konvertierung möglich – CTAS – Alter table move … lob – Data Pump – Online Table Redefinition (DBMS_REDEFINITION)

DOAG 2015, 19.11.2015 12 Lets talk about LOBs please … Beate Künneke

Page 13: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

Partitionierung

• Für Tabellen mit LOBs bietet sich Partitionierung an – Beliebt ist Range-Partitionierung

– 1 oder auch 2 Ebenen

– Beachtung verdient auch die Reference-Partitionierung

– Für LOBs gilt: LOB-Segmente und LOB-Indexe folgen der Partitionierungsstrategie der Tabelle

– Interessante Besonderheit für die Umstellung von BasicFiles auf SecureFiles: • Neue Partitionen können als SecureFiles angelegt werden, auch

wenn die bisher verwendeten als BasicFiles angelegt wurden

– Eine „normale“ Tabelle kann über dbms_redefiniton in eine partitionierte Tabelle konvertiert werden.

DOAG 2015, 19.11.2015 13 Lets talk about LOBs please … Beate Künneke

Page 14: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

Logging

• LOGGING/NOLOGGING – Bei LOBs wird keine Rollback-Information (UNDO) für die Daten

erzeugt, da (überschriebene) LOB-Daten in Versionen gehalten werden, Rollback Information gibt es nur für LOB Index Änderungen (unerheblich ob LOGGING oder NOLOGGING)

– LOGGING bedeutet FULL REDO für LOB-Daten

• FILESYSTEM_LIKE_LOGGING für SecureFiles – Für SecureFiles zusätzliche Option:

NOLOGGING wird zu FILESSYSTEM_LIKE_LOGGING

• NOLOGGING/FILESYSTEM_LIKE_LOGGING interessant für BULK Loads oder INSERTS

• CACHE impliziert LOGGING

DOAG 2015, 19.11.2015 14 Lets talk about LOBs please … Beate Künneke

Page 15: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

House-Keeping

• Shrink-Befehl gibt es auch für BasicFile-Lobs, aber nicht für SecureFiles: ALTER TABLE employees MODIFY LOB (emp_lob) (SHRINK SPACE);

• Ansonsten Reorganisieren über MOVE, DBMS_REDEFINITION,..

• Nützliches Feature: DROP_EMPTY_SEGMENTS – Im Package DBMS_SPACE_ADMIN – Bereinigt leere Segmente – Erforderlich sind SYS-Privilegien – Segment-Creation kann auch bereits mit der Option DEFERRED verzögert

werden durch den Initialisierungsparameter “deferred_segment_creation“

SELECT name, type, value, isses_modifiable, issys_modifiable FROM v$parameter WHERE name LIKE 'defer%';

DOAG 2015, 19.11.2015 15 Lets talk about LOBs please … Beate Künneke

Page 16: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

Flashback und LOBs

• Flashback Query oder Flashback Table – werden normalerweise aus dem UNDO-TBS bedient

• Dies gilt für LOBs nicht – Es sind keine Rollback-Informationen für LOB-Daten vorhanden, denn

für LOB-Daten gibt es Versionen in den LOB-Segmenten

• Potentieller Platz im UNDO nützt für Flashback Query oder Table nichts!

• Steuerung über PCTVERSION oder RETENTION • Weiterhin ist die Art des Space-Managements zu beachten

– AUTO (ASSM) • bei SecureFiles ist RETENTION maßgeblich • Bei BasicFiless kann PCTVERSION genutzt werden

– MANUEL (MSSM) • PCTVERSION

„Delorean5“ von ADC - Wikipedia

DOAG 2015, 19.11.2015 16 Lets talk about LOBs please … Beate Künneke

Page 17: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

UTF-8 und LOBs

• Bei der Benutzung von Multibyte-Datensätzen ist bei der Bearbeitung auf die korrekte Längenangabe zu achten

• Dies führt zu einem fehlerhaften BLOB – dbms_lob.writeappend(v_blob, dbms_lob.getlength(v_data),

utl_raw.cast_to_raw(v_data)); -- falsch

• Dies ist korrekt – dbms_lob.writeappend(v_blob, utl_raw.length(

utl_raw.cast_to_raw(v_data)), utl_raw.cast_to_raw(v_data)); -- korrekt

红烧大虾

DOAG 2015, 19.11.2015 17 Lets talk about LOBs please … Beate Künneke

Page 18: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

SQL und PL/SQL

• Beispiel für ein einfaches Insert: INSERT INTO Print_media (product_id, ad_id, ad_sourcetext) VALUES (1, 1, 'This is a One Line Advertisement');

• Oder Nutzung von EMPTY_CLOB() • Viele SQL VARCHAR2 Funktionen und Operatoren funktionieren

auch für LOBs

• PL/SQL – ein wichtiges Package ist dbms_lob

• Neue Features in 12c – Mehr Möglichkeiten zur parallelen Ausführung von INSERT, INSERT AS

SELECT, CREATE TABLE AS SELECT, DELETE, UPDATE, MERGE, Multi-table INSERT, SQL*Loader und Import/Export

– Bei BasicFiles nur wenn partitioniert ist

DOAG 2015, 19.11.2015 18 Lets talk about LOBs please … Beate Künneke

Page 19: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

DBMS_SPACE

• Wieviel Speicherplatz benötigt eine Tabelle mit LOB-Spalte(n)? – Tabelle mit Zugriff auf dba_segments ggfs. auch für Partitionen – Zugehörige LOB-Daten und LOB-Indexe haben eigenständige Namen

und können über das DD ausfindig gemacht werden über den Zugriff auf dba_lobs

– Ggfs. gibt es auch noch IOT (dba_indexes) – Nachteil: Es wird nicht gefüllter Platz innerhalb des Segmentes

mitgezählt!

• Genauere Antwort liefert das Package Dbms_space – Dbms_space.space_usage – Dbms_space.unused_space mit 2 überlagerten Prozeduren für

• BasicFiles • SecureFiles (hier werden genauere Werte geliefert)

• Hinweis mit einem Anwendungsbeispiel: s. Carsten Czarski Blog

DOAG 2015, 19.11.2015 19 Lets talk about LOBs please … Beate Künneke

Page 20: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

SecureFiles Verschlüsselung

• TDE: Transparent für den Benutzer

• Verschlüsselt bei Betriebssyste-Zugriff

• Beispiel: – CREATE TABLE tabellenname (spaltenname varchar2(2000) ENCRYPT USING 'AES256'

SALT, lobspalte blob) LOB (lobspalte) STORE AS SECUREFILE (ENCRYPT USING 'AES256') ;

• NO SALT wird nicht unterstützt

• Mögliche Verschlüsselungsalgorithmen: AES192 (default), 3DES168, AES128, and AES256

• Alle LOBs in einer LOB-Spalte sind verschlüsselt

• Alle Partitionen einer LOB-Spalte sind verschlüsselt

• ALTER TABLE kann für enable/disable genutzt werden

• Schlüssel im Wallet oder Passwort

• Datapump unterstützt Verschlüsslung, export/import nicht

DOAG 2015, 19.11.2015 20 Lets talk about LOBs please … Beate Künneke

Page 21: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

• Beispiel: – Ausgangstext:

• WENN HINTER FLIEGEN FLIEGEN FLIEGEN, FLIEGEN FLIEGEN FLIEGEN NACH. (66 Zeichen)

– Eine sehr einfache, aber nicht sehr effiziente Entropiekodierung besteht darin, alle Teile einer Nachricht nach ihrer Häufigkeit zu sortieren, und mittels binären Zahlen zu nummerieren.

– Kodiertext: • 10 100 1 1 1 101 1 1 1 11 (25 Zeichen)

• Lizenzpflichtige Option bei der Benutzung von SecureFiles – 3 Level: low, medium (default) und high – Deduplication

• Kandidaten sind identische Lobs • Innerhalb eines LOB-Sgements, kann nicht Partitionen oder Subpartitionen übergreifend wirken • Kann auf Partitions-Ebene spezifiziert werden • Mit DBMS_LOB.SETOPTIONS kann für einzelne LOBs die Option enabled/disabled werden.

• Komprimierung verspricht Performance-Gewinn – Denn weniger Blöcke müssen in die SGA eingelesen werden

DOAG 2015, 19.11.2015 21 Lets talk about LOBs please … Beate Künneke

SecureFiles Komprimierung Textteil... ...wird ersetzt durch...

_FLIEGEN 1

WENN_ 10

_NACH. 11

HINTER 100

, 101

Page 22: Lets talk about Lobs please - doag.org · Lets talk about LOBs please Beate Künneke BK Unternehmensberatung bk@berlin.de DOAG Konferenz 19.11.2015 Nürnberg

Strukturiert, semistrukturiert, unstrukturiert

Warum alles in der DB?

LONG LOBs

BasicFiles SecureFiles

Space Management

Chunks

UNDO Migration

Partitionierung

House-Keeping

UTF-8 und LOBs

Flashback und LOBs

Logging

SecureFiles Verschlüsselung

SecureFiles Komprimierung

DBMS_SPACE SQL und PL/SQL

DOAG 2015, 19.11.2015 Lets talk about LOBs please Beate Künneke [email protected]

Lets talk about LOBs please