lets talk about lobs please - doag.org · lets talk about lobs please beate künneke bk...
TRANSCRIPT
Lets talk about LOBs please
Beate Künneke
BK Unternehmensberatung
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
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
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
• 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
• 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
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