lets talk about lobs please - doag.org · lets talk about lobs please beate künneke bk...
Post on 04-Jun-2018
230 Views
Preview:
TRANSCRIPT
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
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 bk@berlin.de
Lets talk about LOBs please
top related