Pürner Unternehmensberatung

Neue Funktionen in DB2 for LUW Version 9

 

Die wichtigste Neuerung in der Version 9 ist zweifellos die Integration von XML. Darüber hinaus gibt es eine Reihe von Verbesserungen und neuen Funktionen im relationalen Teil von DB2. Da sich die meisten Veröffentlichungen zur Version von DB2 for LUW mit den XML-Erweiterungen ausführlich beschäftigt haben, konzentrieren wir uns hier einmal auf die anderen Neuerungen:

Table Partitioning

Bisher kannte DB2 for LUW nur die Partitionierung auf Datenbankebene über mehrere Rech­nerknoten hinweg. Jeder Knoten besitzt dabei eine DB2-Instanz und einen Teil der Daten­bank, auf den nur er zugreifen kann (Shared-nothing-Prinzip).

Neu ist nun die Partitionierung von Tabellen an einem Rechnerknoten. Diese Möglichkeit ist schon länger in DB2 for z/OS bekannt. Die Funktionalität in DB2 for LUW ist aber nicht identisch mit den Möglichkeiten in DB2 for z/OS (Version 8) und betrifft nur Tabellen, keine Indizes.

Dennoch gibt es im Zusammenhang mit Tabellenpartitionierung auch für Indizes Fortschritte: Bei nicht partitionierten Tabellen werden alle Indizes in demselben Speicherobjekt angelegt, das bei DMS (Data Managed Storage) in einem anderen Tablespace liegen kann. Für partitionierte Tabellen wird jeder Index in einem eigenen Speicherobjekt angelegt. Jeder Index kann somit in einem anderen Tablespace liegen. Die Vorteile davon sind

  • effizienterer konkurrierender Zugriff
  • verbesserte Verfügbarkeit bei Operationen wie CREATE, DROP ALTER TABLE/ DETACH oder Reorganisation.

Die Tabellenpartitionen können wie eigenständige Tabellen behandelt werden und in unterschiedlichen Tablespaces oder einem angelegt werden. So können Partitionen einzeln gesichert oder wiederhergestellt werden statt der gesamten Tabelle. Performance-Vorteile resultieren aus der Parallelverarbeitung von Partitionen in Abfragen oder dem Ausschluss von Partitionen beim Table-Scan.

Beispiel:

Die Vorteile der Partitionierungsfunktion werden an einem Beispiel mit zeitbezogenen Daten wie Versand-Aufträgen deutlich. Die Tabelle VAUFTRAG wird nach dem Versanddatum (VDATUM) partitioniert. Je Quartal ist eine Partition vorgesehen. In die erste werden aber alle Daten mit einem Versanddatum vor dem 1.1.2006 aufgenommen (Angabe MINVALUE). Ein Versanddatum nach dem 31.12.2006 ist nicht erlaubt.

create table VAUFTRAG(oid int not null primary key,
              VDATUM date not null,
              VERSTEXT varchar(3200))
          partition by range(VDATUM) (
            partition q405 starting minvalue,
            partition q106 starting '01.01.2006',
            partition q206 starting '01.04.2006',
            partition q306 starting '01.07.2006',
            partition q406 starting '01.10.2006' ending '31.12.2006'); 

Ein besonders interessanter Aspekt der Partitionierung ist die Möglichkeit, Partitionen rollieren zu lassen. Werden die Daten von 2005 nicht mehr in der Tabelle VAUFTRAG benötigt, so können sie per DETACH abgehängt werden. Die Partition bildet dann eine eigenständige Tabelle, die anschließend archiviert werden kann.

alter table VAUFTRAG detach partition q405 into VAUFTRAG4q05

Die betroffenen Indizes werden im Hintergrund asynchron angepasst (Asynchronous Index Cleanup AIC).

Analog ist es möglich, eine Tabelle mit kompatibler Struktur per ATTACH als neue Partition zu integrieren. Hierbei muss der Befehl SET INTEGRITY nach dem ATTACH ausgeführt werden, um die Operation zu vollenden. SET INTEGRITY prüft die Einhaltung des Partitionsbereiches und sonstiger Bedingungen und pflegt die Indizes.

Für neue Daten wie die Aufträge im ersten Quartal 2007 kann eine Partition mit ADD hinzugefügt werden:

alter table VAUFTRAG
     add partition q107 starting '01.01.2007' ending '31.03.2007';

Table Partitioning kann mit den bisher bekannten Möglichkeiten der Datenanordnung wie Database Partitioning oder Multidimensional Clustering (MDC) kombiniert werden.

Seitenanfang

Datenkompression

Für DB2 for z/OS ist Datenkompression eine bewährte Funktion, die bei klassischen kaufmännisch-administrativen Anwendungen Kompressionsraten von 50-80 % erzielt. Mit Version 9 wird die Datenkompression auch in DB2 for LUW verfügbar.

Die Bitmuster-Kompression (mit dem Lempel-Ziv -Algorithmus) benötigt ein Dictionary zur Umsetzung. Dieses Dictionary gilt für die gesamte Tabelle und wird im gespeicherten Objekt abgelegt. Diese wird beim CREATE TABLE oder mit ALTER TABLE eingeschaltet.

Die Vorteile der Kompression liegen

  • in der Einsparung von belegtem Speicher,
  • in weniger I/Os,
  • in mehr gelesener Zeilen je physischen Zugriff
  • geringerer Bufferpool-Belegung bei verbesserter Hit-Ratio.

Der mit der Datenkompression verbundene Nachteil ist die zusätzliche CPU-Belastung für die Komprimierung und Dekomprimierung.

Beispiel:

Die Tabelle DB2INST9.EMPLOYEE belegt 14,9 MB mit 172032 Zeilen in 3825 Pages. Zur Abschätzung des Komprimierungseffekts kann der INSPECT-Befehl genutzt werden:

inspect rowcompestimate table name employee
              results keep empcomp; 

INSPECT gibt seine Schätzung in einem internen Format in die Datei empcomp aus. Die Aufbereitung erfolgt mit Programm db2inspf:

db2inspf empcomp compempf 

Das formatierte Ergebnis steht in Datei compempf und sieht wie folgt aus:

DATABASE: TESTV9 
   VERSION : SQL09000 
   2006-06-09-13.51.07.045534
         
   Action: ROWCOMPESTIMATE TABLE 
   Schema name: DB2INST9 
   Table name: EMPLOYEE 
   Tablespace ID: 2  Object ID: 18 
   Result file name: empcomp
         
    Table phase start (ID Signed: 18, Unsigned: 18; Tablespace ID: 2)
                                                         : DB2INST9.EMPLOYEE
         
     Data phase start. Object: 18  Tablespace: 2
     Row compression estimate results:
     Percentage of pages saved from compression: 78
     Percentage of bytes saved from compression: 78
     Percentage of rows ineligible for compression due to small row size: 0
     Compression dictionary size: 23680 bytes.
     Expansion dictionary size: 32768 bytes.
     Data phase end.
    Table phase end. 
   Processing has completed. 2006-06-09-13.51.13.901962 

Es wird also eine Ersparnis von 78 % geschätzt, sodass sich die Komprimierung lohnt. Mit ALTER TABLE wird sie definiert:

ALTER TABLE DB2INST9.EMPLOYEE COMPRESS YES 

Mit einer Reorganisation (REORG TABLE) wird sie durchgeführt. Nur das Dienstprogramm REORG kann das Dictionary aufbauen. Danach belegt die Tabelle DB2INST9.EMPLOYEE noch 3,2 MB mit unverändert 172032 Zeilen in 809 Pages.

Seitenanfang

LBAC - Label Based Access Control

Steigende Benutzeranforderungen und rechtliche Regelungen bezüglich des Datenschutzes beantwortet IBM in DB2 V9 mit der Label Based Access Control (LBAC) und einem neuen Berechtigungsprofil, dem Security Administrator (SECAM).

Der Security Administrator definiert Label Based Access Control und vergibt oder widerruft Label-Berechtigungen. Dazu ist kein anderes Profil berechtigt, auch nicht SYSADM.

Logische Voraussetzung für die Nutzung von LBAC ist ein Sicherheitskonzept (Security Policy), das die Kriterien beschreibt, wonach ein Nutzer Zugriff auf bestimmte Daten erhält. Aufgrund dieses Konzepts werden Security Labels definiert und Daten zugeordnet. Benutzer erhalten Zugriff auf die geschützten Daten durch die Zuordnung von Security Labels. Durch den Vergleich der Security Labels von Benutzer und Daten wird festgestellt, ob dieser zum Zugriff berechtigt ist. Ist der Benutzer nicht zum Zugriff berechtigt, behandelt DB2 die Daten in einem solchen Fall, als ob sie nicht existieren. Auch Funktionen wie COUNT() oder SUM() berücksichtigen nur die Daten, für deren Zugriff der Benutzer berechtigt ist.

  • Die Regeln (Rules) für den Vergleich von Benutzer- und Daten-Label sind derzeit in DB2 fest vorgegeben (DB2LBACRULES)
  • Eine Security Policy besteht aus maximal 16 Komponenten, in denen die Sicherheitsstufen definiert werden. Es gibt drei Strukturen dafür:
    • Set (Aufzählung)
    • Array (geordnete Aufzählung, einfache Hierarchie)
    • Tree (Baumstruktur, komplexe Hierarchie)     
  • In Labels werden Werte dieser Komponenten definiert und DB2-Objekten oder Benutzern zugeordnet.
  • Durch die Labels können Spalten oder Zeilen einer Tabelle oder eine Kombination aus Spalten und Zeilen gegenüber unbefugten Zugriffen geschützt werden.

Zum Beispiel kann es sinnvoll sein, die Personalstammdaten eines Unternehmens so zu schützen, dass nur bestimmte Sachbearbeiter die Datensätze eines Bereichs lesen oder pflegen dürfen. Weiterhin ist die Bearbeitung von AT-Angestellten und Führungskräften besonderen Sachbearbeitern oder Gruppenleitern vorbehalten. Der Vorstand wird nur vom Leiter der Personalabteilung betreut. Dieses Beispiel erfordert eine Zugriffskontrolle auf Zeilenebene.

Sollen jedoch bei den Personaldaten Name, Organisationseinheit und Telefon für jeden abfragbar sein, die übrigen Spalten mit Geburtsdatum, Ausbildung und Gehalt nur der Personalabteilung vorbehalten bleiben, ist eine Zugriffskontrolle auf Spaltenebene notwendig.

Wenn jetzt noch für die der Personalabteilung vorbehaltenen Daten die Beschränkungen nach Bereichszugehörigkeit und Dienststellung gelten, ist eine Kombination von zeilen- und spaltenbezogener Zugriffskontrolle notwendig.

Vorgehensweise:

Die Umsetzung eines Sicherheitskonzepts ist recht aufwendig und zu komplex, um es in einem Überblick über DB2 V9 darstellen zu können. Daher beschreiben wir nur die prinzipielle Vorgehensweise: Zuerst müssen die Sicherheitsanforderungen analysiert und in einem Konzept festgehalten werden. Dann kann die Umsetzung in DB2-Defintionen durch den Security Administrator mit der Beschreibung der Komponenten beginnen:

   CREATE SECURITY LABEL COMPONENT ...

Die Komponenten werden zu  einer Policy zusammengefasst:

   CREATE SECURITY POLICY ... COMPONENTS .... WITH DB2LBACRULES

Dann werden die Labels mit ihren Werten definiert:

   CREATE SECURITY LABEL . COMPONENT . 'wert' .

Und an Benutzer vergeben:

   GRANT SECURITY LABEL .TO USER ... FOR

Benutzer können jeweils für lesenden oder schreibenden Zugriff nur ein Security Label erhalten.

Eine bestehende Tabelle wird um die Security Policy und für den Zugriffsschutz auf Zeilenebene um eine Spalte ergänzt:

   ALTER TABLE ... ADD ... SECURITY POLICY ....
                    ADD COLUMN .... DB2SECURITYLABEL 

Dann müssen die Zeilen das vorgesehene Security Label erhalten

   UPDATE TABLE ... SET ... = SECLABEL_BY_NAME( ...)
                     WHERE ...

Drei Funktionen ermöglichen das Setzen und Lesen der Labels:

SECLABEL() 
SECLABEL_BY_NAME()
SECLABEL_TO_CHAR()

Es sei noch darauf hingewiesen werden, dass die LBAC der DB2 UDB Version 9 sich hinsichtlich ihrer Implementierung deutlich von der Labeled Security Protection in DB2 z/OS Version 8 unterscheidet.

Diese drei oben erläuterten Erweiterungen sind leider der Enterprise Server Edition (ESE) von DB2 vorbehalten.

Seitenanfang

Weitere Verbesserungen

Bezüglich der Installation von DB2 wird die Flexibilität durch Version 9 deutlich verbessert:

  • Es können mehrere Kopien der DB2-Software auf einem Server installiert werden.
  • Der Installationspfad kann frei gewählt werden.
  • Die installierten DB2-Systeme sind bezüglich ihrer FixPak-Levels voneinander unabhängig.
  • Ein neuer ODBC/CLI-Treiber ist unabhängig von DB2-Server- oder Client-Paketen und kann auch mehrfach installiert werden.

Diese Verbesserungen helfen Software-Häusern, DB2 in ihre Anwendungen zu integrieren und in einem Paket dem Kunden auszuliefern.

Seitenanfang

linie
Homepage | Informationstechnologie | Aktuelles | Datenbanken | DB2 | Publikationen
Links | Kontakt | Impressum | International Pages