DB2-Kurzanleitung
Dieses Kapitel beschreibt den Verlauf von DB2, seine Versionen, Editionen und ihre jeweiligen Funktionen.
Überblick
DB2 ist ein Datenbankprodukt von IBM. Es ist ein relationales Datenbankverwaltungssystem (RDBMS). DB2 dient zum effizienten Speichern, Analysieren und Abrufen der Daten. Das DB2-Produkt wird durch die Unterstützung objektorientierter Funktionen und nicht relationaler Strukturen mit XML erweitert.
Geschichte
Zunächst hatte IBM ein DB2-Produkt für die jeweilige Plattform entwickelt. Seit dem Jahr 1990 wurde beschlossen, einen U2B-DB2-Server (Universal Database) zu entwickeln, der auf allen maßgeblichen Betriebssystemen wie Linux, UNIX und Windows ausgeführt werden kann.
Versionen
Für IBM DB2 ist die aktuelle UDB-Version 10.5 mit den Funktionen von BLU Acceleration und dem Codenamen 'Kepler'. Alle Versionen von DB2 bis heute sind unten aufgeführt:
Ausführung | Code Name |
---|---|
3.4 | Spinnennetz |
8.1, 8.2 | Stinger |
9.1 | Viper |
9.5 | Viper 2 |
9.7 | Kobra |
9.8 | Es wurden Funktionen mit Only PureScale hinzugefügt |
10.1 | Galileo |
10.5 | Kepler |
Datenserver-Editionen und -Funktionen
Abhängig von den Anforderungen an die erforderlichen Funktionen von DB2 wählen die Organisationen die entsprechende DB2-Version aus. Die folgende Tabelle zeigt die DB2-Server-Editionen und ihre Funktionen:
Ausgaben | Eigenschaften |
---|---|
Advanced Enterprise Server Edition und Enterprise Server Edition (AESE / ESE) | Es ist für mittelständische bis große Unternehmensorganisationen konzipiert. Plattform - Linux, UNIX und Windows. Tabellenpartitionierung Hochverfügbarkeit Disaster Recovery (HARD) Materialized Query Table (MQTs) MDC-Verbindungskonzentrator (Multidimensional Clustering) Pure XML Backup-Komprimierung Homogene Verbände |
Workgroup Server Edition (WSE) | Es ist für Arbeitsgruppen- oder mittelständische Unternehmensorganisationen konzipiert. Mit dieser WSE können Sie arbeiten mit: - Hochverfügbarkeits-Notfallwiederherstellung (HARD) Online-Reorganisation Pure XML Web Service Federation unterstützt DB2 Homogene Verbände Homogene SQL-Replikation Sicherungskomprimierung |
Express -C | Es bietet alle Funktionen von DB2 ohne Ladung. Es kann auf jedem physischen oder virtuellen System mit jeder Konfigurationsgröße ausgeführt werden. |
Express edition | Es richtet sich an Einsteiger und mittelständische Unternehmen. Es ist ein voll ausgestatteter DB2-Datenserver. Es bietet nur begrenzte Dienstleistungen. Diese Edition enthält: - Homogene SQL-Replikationen für Webdienstverbände Homogene SQL Replications Backup-Komprimierung |
Enterprise Developer Edition | Es bietet nur einen einzigen Anwendungsentwickler. Es ist nützlich, die Anwendungen für die Bereitstellung auf einem beliebigen IBM Server zu entwerfen, zu erstellen und zu prototypisieren. Die Software kann nicht zum Entwickeln von Anwendungen verwendet werden. |
In diesem Kapitel werden die Installationsschritte des DB2-Servers beschrieben.
Einführung
Sie können die DB2 Server-Testversion herunterladen oder die Produktlizenz unter www.ibm.com erwerben . Abhängig von der Größe des Betriebssystems, auf dem es ausgeführt werden soll, stehen zwei separate DB2-Server zum Herunterladen zur Verfügung. Wenn Sie beispielsweise einen DB2-Server für ein 32-Bit-Linux- oder UNIX-Betriebssystem herunterladen möchten, müssen Sie einen 32-Bit-DB2-Server herunterladen. Gleiches gilt für 64-Bit-DB2-Server.
Hardware-Anforderungen
Prozessor: Minimum Core 2Duo
RAM: mindestens 1 GB
Festplatte: mindestens 30 GB
Software Anforderungen
Vor der Installation des DB2-Servers muss Ihr System mit der erforderlichen Software fertig sein. Für Linux müssen Sie "libstdc ++ 6.0" installieren.
Überprüfung der Systemkompatibilität
Vor der Installation von DB2 Server müssen Sie überprüfen, ob Ihr System mit dem DB2-Server kompatibel ist. Um die Kompatibilität zu bestätigen, müssen Sie den Befehl 'db2prereqcheck' in der Befehlskonsole aufrufen.
Installieren von DB2 unter Linux
Öffnen Sie das Terminal und legen Sie den Pfad des db2-Installationsabbildordners auf der Konsole mit dem Befehl "CD <DB2-Installationsordner>" fest. Geben Sie dann den Befehl "./db2prereqcheck" ein, der die Kompatibilität Ihres Systems mit dem DB2-Server bestätigt.
./db2prereqcheck
Abbildung 1 zeigt die Kompatibilitätsanforderungen des Linux-Betriebssystems und des Hardwaresystems.
Befolgen Sie die angegebenen Schritte zur Installation von DB2 auf Ihrem Linux-System:
- Öffnen Sie das Terminal.
- Melden Sie sich als Root an.
- Öffnen Sie den DB2-Installationsordner.
- Geben Sie "./db2setup" ein und drücken Sie die Eingabetaste.
Dieser Prozess startet die Ausführung des DB2-Server-Setups.
Geben Sie "./db2setup" ein und drücken Sie die Eingabetaste am Root-Terminal, um den Setup-Vorgang von DB2 Server zu starten.
Dabei erscheint der Bildschirm „Launch Pad einrichten“. [Figur 2]
Wählen Sie auf der Seite Setup Launch Pad im linken Menü die Option „Produkt installieren“. Wählen Sie die Option "DB2 Advanced Enterprise Server Edition". Wählen Sie die Schaltfläche "Neu installieren".
Ein neuer Frame mit dem Namen "DB2-Setup-Assistent" wird angezeigt. Weiter klicken". [Figur 3]
Der nächste Bildschirm wird mit der DB2-Lizenzvereinbarung angezeigt. Wählen Sie "Ich akzeptiere die Bedingungen ...". Klicken Sie auf "Weiter". [Figur 4]
Im nächsten Bildschirm wird ein Angebot für den Installationstyp angezeigt, das standardmäßig auf "Typisch" eingestellt ist.
Behalten Sie die gleiche Auswahl. Weiter klicken". [Abbildung 5]
Der nächste Bildschirm wird mit der Installationsaktion angezeigt.
Wählen Sie "DB2 Advanced Enterprise Server Edition installieren ...".
Weiter klicken". [Abbildung 6]
Im nächsten Bildschirm fordert das Setup-Programm die Auswahl des Installationsverzeichnisses an.
Behalten Sie die Standardeinstellung bei und klicken Sie auf "Weiter".
Der nächste Bildschirm zeigt die Benutzerauthentifizierung an. Geben Sie Ihr Passwort für den Benutzer "dasusr1" ein.
(Ihr Passwort kann mit dem Benutzernamen identisch sein, damit Sie es sich bequem merken können.)
Auf dem folgenden Bildschirm werden Sie vom Setup aufgefordert, eine DB2-Serverinstanz zu erstellen.
Hier wird eine DB2-Instanz mit dem Namen "db2inst1" erstellt.
Im nächsten Bildschirm werden Sie nach der Anzahl der Partitionen gefragt, die Sie für Ihre Standardinstanz benötigen.
Sie haben die Wahl zwischen "einzelnen" oder "mehreren" Partitionen.
Wählen Sie "Einzelpartitionsinstanz". Weiter klicken".
Im nächsten Bildschirm werden Sie vom Setup zur Authentifizierung für die zu erstellende DB2-Instanz aufgefordert.
Hier wird standardmäßig der Benutzername als "db2inst1" erstellt. Sie können das gleiche Passwort wie den Benutzernamen eingeben.
Weiter klicken".
Im nächsten Bildschirm werden Sie aufgefordert, Authentifizierungsinformationen für den Benutzer "db2fenc" einzugeben.
Hier können Sie das gleiche Passwort wie den Benutzernamen eingeben.
Weiter klicken".
Auf dem nächsten Bildschirm können Sie die Option "Richten Sie Ihren DB2-Server nicht so ein, dass zu diesem Zeitpunkt Benachrichtigungen gesendet werden" auswählen.
Weiter klicken".
Der nächste Bildschirm zeigt Ihnen die Informationen zum db2-Setup.
Klicken Sie auf "Fertig stellen".
Der DB2-Installationsvorgang ist zu diesem Zeitpunkt abgeschlossen.
Überprüfen der DB2-Installation
Sie müssen die Installation des DB2-Servers auf ihre Nützlichkeit überprüfen. Melden Sie sich nach Abschluss der DB2 Server-Installation vom aktuellen Benutzermodus ab und beim Benutzer "db2inst1" an. In der Benutzerumgebung "db2inst1" können Sie das Terminal öffnen und die folgenden Befehle ausführen, um zu überprüfen, ob Ihr db2-Produkt ordnungsgemäß installiert ist oder nicht.
db2level
Dieser Befehl zeigt die aktuelle Version und den Service Level des installierten DB2-Produkts für die aktuelle Instanz an.
Syntax:
db2level
Example:
db2level
Output:
DB21085I Instance "db2inst2" uses "64" bits
And DB2 code release "SQL10010" with level
identifier "0201010E". Informational tokens
are "DB2 v10.1.0.0", "s120403",
"LINUXAMD64101", and Fix Pack "0".
Product is installed at "/home/db2inst2/sqllib".
db2licm
Dieser Befehl zeigt alle lizenzbezogenen Informationen unseres DB2-Produkts an.
Syntax:
db2licm <parameter>
Example:
db2licm -l
Output:
Product name: "DB2 Advanced Enterprise Server Edition"
License type: "Trial"
Expiry date: "10/02/2014"
Product identifier: "db2aese"
Version information: "10.1"
Product name: "DB2 Connect Server"
License type: "Trial"
Expiry date: "10/02/2014"
Product identifier: "db2consv"
Version information: "10.1"
Befehlszeilenprozessor (CLP)
Das CLP kann in einem der drei Modi gestartet werden:
Command mode: In diesem Modus muss jedem Befehl und jeder SQL-Anweisung das Präfix "db2" vorangestellt werden. Fragen Sie beispielsweise "db2 Datenbankbeispiel aktivieren" ab.
Interactive input mode: Sie können diesen Modus mit dem Befehl „db2“ starten. Hier können Sie SQL-Anweisungen ohne Präfix übergeben. Beispiel: "Datenbankbeispiel aktivieren".
Batch mode: Hier müssen Sie eine Skriptdatei erstellen, die alle SQL-Abfragen der Anforderungen enthält, und die Datei mit der Erweiterung ".db2" speichern. Sie können dies in der Befehlszeile mit der Syntax "db2 –tf <Dateiname.db2>" aufrufen.
Einführung
Eine Instanz ist eine logische Umgebung für DB2 Database Manager. Mithilfe der Instanz können Sie Datenbanken verwalten. Abhängig von unseren Anforderungen können Sie mehrere Instanzen auf einem physischen Computer erstellen. Der Inhalt des Instanzverzeichnisses ist:
- Datenbankmanager-Konfigurationsdatei
- Systemdatenbankverzeichnis
- Knotenverzeichnis
- Knotenkonfigurationsdatei [db2nodes.cfg]
- Dateien debuggen, Dateien sichern
Für DB2 Database Server lautet die Standardinstanz "DB2". Es ist nicht möglich, den Speicherort des Instanzverzeichnisses nach seiner Erstellung zu ändern. Eine Instanz kann mehrere Datenbanken verwalten. In einer Instanz hat jede Datenbank einen eindeutigen Namen, einen eigenen Satz von Katalogtabellen, Konfigurationsdateien, Berechtigungen und Berechtigungen.
Instanzarchitektur im DB2-Produkt
Mehrere Instanzen
Sie können unter Linux, UNIX und Windows mehrere Instanzen in einem DB2Server erstellen. Es ist möglich, mehrere DB2Server auf einem physischen Computer zu installieren.
Instanz unter Linux erstellen
Sie können unter Linux und UNIX mehrere Instanzen erstellen, wenn DB2 Server als Root-Benutzer installiert ist. Eine Instanz kann unter Linux und UNIX gleichzeitig unabhängig voneinander ausgeführt werden. Sie können jeweils innerhalb einer einzelnen Instanz des Datenbankmanagers arbeiten.
Ein Instanzordner enthält Datenbankkonfigurationsdateien und -ordner. Das Instanzverzeichnis wird abhängig von den Betriebssystemversionen an verschiedenen Speicherorten unter Windows gespeichert.
Instanzen auflisten
Der folgende Befehl wird zum Auflisten von Instanzen verwendet:
db2ilist
Dieser Befehl listet alle Instanzen auf, die auf einem System verfügbar sind.
Syntax:
db2ilist
Example:[Um zu sehen, wie viele Instanzen in der DB2-Kopie erstellt wurden]
db2ilist
Output:
db2inst1
db2inst2
db2inst3
Instanzumgebungsbefehle
Diese Befehle sind nützlich, um mit der Anordnung von Instanzen in der DB2-CLI zu arbeiten.
Bekomme Instanz
Dieser Befehl zeigt Details der aktuell ausgeführten Instanz an.
Syntax:
db2 get instance
Example:[Um die aktuelle Instanz anzuzeigen, die den aktuellen Benutzer aktiviert hat]
db2 get instance
Output:
The current database manager instance is : db2inst1
Instanz festlegen
Um den Datenbankmanager einer Instanz in DB2 UDB zu starten oder zu stoppen, wird der folgende Befehl für die aktuelle Instanz ausgeführt.
Syntax:
set db2instance=<instance_name>
Example:[Um die "db2inst1" -Umgebung für den aktuellen Benutzer anzuordnen]
set db2instance=db2inst1
db2start
Mit diesem Befehl können Sie eine Instanz starten. Vorher müssen Sie "set instance" ausführen.
Syntax:
db2start
Example:[So starten Sie eine Instanz]
db2start
Output:
SQL1063N DB2START processing was successful
db2stop
Mit diesem Befehl können Sie eine laufende Instanz stoppen.
Syntax:
db2stop
Output:
SQL1064N DB2STOP processing was successful.
Instanz erstellen
Lassen Sie uns sehen, wie Sie eine neue Instanz erstellen.
db2icrt
Wenn Sie eine neue Instanz erstellen möchten, müssen Sie sich mit root anmelden. Die Instanz-ID ist keine Root-ID oder ein Root-Name.
Hier sind die Schritte zum Erstellen einer neuen Instanz:
Step1: Erstellen Sie beispielsweise einen Betriebssystembenutzer.
Syntax:
useradd -u <ID> -g <group name> -m -d <user location> <user name>
-p <password>
Example: [So erstellen Sie einen Benutzer mit dem Namen 'db2inst2' in der Gruppe 'db2iadm1' und dem Kennwort 'db2inst2']
useradd -u 1000 -g db2iadm1 -m -d /home/db2inst2 db2inst2 -p db2inst2
Step2: Wechseln Sie zum Erstellen einer neuen Instanz in das DB2-Instanzverzeichnis im Root-Benutzer.
Location:
cd /opt/ibm/db2/v10.1/instance
Step3: Erstellen Sie eine Instanz mit der folgenden Syntax:
Syntax:
./db2icrt -s ese -u <inst id> <instance name>
Example: [So erstellen Sie eine neue Instanz 'db2inst2' im Benutzer 'db2inst2' mit den Funktionen von 'ESE' (Enterprise Server Edition)]
./db2icrt -s ese -u db2inst2 db2inst2
Output:
DBI1446I The db2icrt command is running, please wait.
….
…..
DBI1070I Program db2icrt completed successfully.
Kommunikationsport und Host für eine Instanz anordnen
Bearbeiten Sie die Datei / etc / services und fügen Sie die Portnummer hinzu. In der unten angegebenen Syntax gibt 'inst_name' den Instanznamen und 'inst_port' die Portnummer der Instanz an.
Syntax:
db2c_<inst name> <inst_port>/tcp
Example: [Hinzufügen der Portnummer '50001 / tcp' zum Beispiel 'db2inst2' mit der Variablen 'db2c_db2inst2' in der Datei 'services']
db2c_db2inst2 50001/tcp
Syntax 1: [Aktualisieren Sie die Datenbankmanager-Konfiguration mit dem Dienstnamen. Die folgende Syntax 'svcename' gibt den Namen des Instanzdienstes an und 'inst_name' gibt den Namen der Instanz an]
db2 update database manager configuration using svcename db2c_&<inst_name>
Example 1: [Aktualisieren der DBM-Konfiguration mit der Variablen svcename mit dem Wert 'db2c_db2inst2' zum Beispiel 'db2inst2'
db2 update database manager configuration using svcename db2c_db2inst2
Output
DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed successfully.
Syntax 2: Legen Sie das Kommunikationsprotokoll „tcpip“ für die aktuelle Instanz fest
db2set DB2COMM=tcpip
Syntax 3: [Aktuelle Instanz stoppen und starten, um aktualisierte Werte aus der Datenbankmanager-Konfiguration zu erhalten]
db2stop
db2start
Instanz aktualisieren
Sie können eine Instanz mit dem folgenden Befehl aktualisieren:
db2iupdt
Dieser Befehl wird verwendet, um die Instanz innerhalb derselben Versionsversion zu aktualisieren. Bevor Sie diesen Befehl ausführen, müssen Sie den Instanzdatenbankmanager mit dem Befehl "db2stop" stoppen. Die Syntax unter "inst_name" gibt den zuvor freigegebenen oder installierten Namen der DB2-Serverinstanz an, den Sie auf eine neuere Version oder installierte DB2-Serverversion aktualisieren möchten.
Syntax 1: So aktualisieren Sie eine Instanz im normalen Modus
db2iupdt <inst_name>
Example1:
./db2iupdt db2inst2
Syntax 2: So aktualisieren Sie eine Instanz im Debugging-Modus
db2iupdt -D <inst_name>
Example
db2iupdt -D db2inst2
Aktualisieren einer Instanz
Sie können eine Instanz von einer früheren Version der DB2-Kopie auf die aktuell neu installierte Version der DB2-Kopie aktualisieren.
db2iupgrade
Unter Linux oder UNIX befindet sich dieser Befehl im Verzeichnis DB2DIR / instance. In den folgenden Syntaxen gibt "inst_name" die DB2-Instanz der vorherigen Version und "inst_username" den aktuell installierten Benutzer der DB2-Kopierinstanz der Version an.
Syntax 2::
db2iupgrade -d -k -u <inst_username> <inst_name>
Example::
db2iupgrade -d -k -u db2inst2 db2inst2
Command Parameters:
-d : Aktiviert den Debugging-Modus.
-k : Behält den Instanztyp vor dem Upgrade bei, wenn er in der DB2-Kopie unterstützt wird, von der aus Sie diesen Befehl ausführen.
Wenn Sie den Super User (su) unter Linux für den Befehl db2iupgrade verwenden, müssen Sie den Befehl "su" mit der Option "-" ausgeben.
Eine Instanz löschen
Sie können die Instanz löschen oder löschen, die mit dem Befehl "db2icrt" erstellt wurde.
db2idrop
Unter Linux- und UNIX-Betriebssystemen befindet sich dieser Befehl im Verzeichnis DB2_installation_folder / instance.
Syntax: [In der folgenden Syntax gibt 'inst_username' den Benutzernamen der Instanz und 'inst_name' den Instanznamen an]
db2idrop -u <inst_username> <inst_name>
Example: [Zum Löschen von db2inst2]
./db2idrop -u db2inst2 db2inst2
Verwenden anderer Befehle mit Instanz
Befehl, um herauszufinden, an welcher DB2-Instanz wir gerade arbeiten.
Syntax 1: [um die vom Datenbankmanager aktivierte aktuelle Instanz zu überprüfen]
db2 get instance
Output:
The current database manager instance is: db2inst1
Syntax 2: [Um die aktuelle Instanz mit Betriebsbits und Release-Version zu sehen]
db2pd -inst | head -2
Example:
db2pd -inst | head -2
Output:
Instance db2inst1 uses 64 bits and DB2 code release SQL10010
Syntax 3: [So überprüfen Sie den Namen der aktuell funktionierenden Instanz]
db2 select inst_name from sysibmadm.env_inst_info
Example:
db2 select inst_name from sysibmadm.env_inst_info
Output:
INST_NAME --------------------------------------
db2inst1
1 record(s) selected.
Syntax: [So legen Sie eine neue Instanz als Standard fest]
db2set db2instdef=<inst_name> -g
Example: [Neu erstellte Instanz als Standardinstanz anordnen]
db2set db2instdef=db2inst2 -g
In diesem Kapitel wird das Erstellen, Aktivieren und Deaktivieren der Datenbanken mit der zugehörigen Syntax beschrieben.
Datenbankarchitektur
Eine Datenbank ist eine Sammlung von Tabellen, Schemata, Pufferpools, Protokollen, Speichergruppen und Tabellenbereichen, die zusammenarbeiten, um Datenbankoperationen effizient abzuwickeln.
Datenbankverzeichnis
Das Datenbankverzeichnis ist ein organisiertes Repository von Datenbanken. Wenn Sie eine Datenbank erstellen, werden alle Details zur Datenbank in einem Datenbankverzeichnis gespeichert, z. B. Details zu Standardspeichergeräten, Konfigurationsdateien und Liste temporärer Tabellen usw.
Das globale Partitionsverzeichnis wird im Instanzordner erstellt. Dieses Verzeichnis enthält alle globalen Informationen zur Datenbank. Dieses globale Partitionsverzeichnis heißt NODExxxx / SQLyyy, wobei xxxx die Datenpartitionsnummer und yyy das Datenbanktoken ist.
Im partition-globalen Verzeichnis wird ein mitgliederspezifisches Verzeichnis erstellt. Dieses Verzeichnis enthält lokale Datenbankinformationen. Das mitgliederspezifische Verzeichnis heißt MEMBERxxxx, wobei xxxx eine Mitgliedsnummer ist. Die DB2 Enterprise Server Edition-Umgebung wird auf einem einzelnen Mitglied ausgeführt und verfügt nur über ein mitgliederspezifisches Verzeichnis. Dieses mitgliederspezifische Verzeichnis hat den eindeutigen Namen MEMBER0000.
Partitioniertes globales Verzeichnis
Verzeichnisverzeichnis: <Instanz> / NODExxx / SQLxxx
Das partition-globale Verzeichnis enthält datenbankbezogene Dateien, wie unten aufgeführt.
- Globale Deadlock-Ereignisüberwachungsdateien zum Schreiben in eine Datei
- Tabellenbereichsinformationsdateien [SQLSPCS.1, SQLSPCS.2]
- Speichergruppen-Steuerdateien [SQLSGF.1, SQLSGF.2]
- Temporäre Tabellenbereichscontainerdateien. [/ Speicherpfad /
/T0000011/C000000.TMP/SQL00002.MEMBER0001.TDA] - Globale Konfigurationsdatei [SQLDBCONF]
- Verlaufsdateien [DB2RHIST.ASC, DB2RHIST.BAK, DB2TSCHG.HIS, DB2TSCHG.HIS]
- Protokollierungsbezogene Dateien [SQLOGCTL.GLFH.1, SQLOGCTL.GLFH.2]
- Dateien sperren [SQLINSLK, SQLTMPLK]
- Automatische Lagerbehälter
Mitgliedsspezifisches Verzeichnis
Verzeichnisverzeichnis: / NODExxxx / SQLxxxx / MEMBER0000
Dieses Verzeichnis enthält:
- Mit Datenbanken verknüpfte Objekte
- Pufferpool-Informationsdateien [SQLBP.1, SQLBP.2]
- Lokale Ereignisüberwachungsdateien
- Protokollierungsbezogene Dateien [SQLOGCTL.LFH.1, SQLOGCTL.LFH.2, SQLOGMIR.LFH].
- Lokale Konfigurationsdateien
- Deadlocks-Ereignismonitordatei. Die detaillierten Überwachungsdateien für Deadlock-Ereignisse werden im Falle einer ESE- und einer partitionierten Datenbankumgebung im Datenbankverzeichnis des Katalogknotens gespeichert.
Datenbank erstellen
Sie können eine Datenbank beispielsweise mit dem Befehl "CREATE DATABASE" erstellen. Alle Datenbanken werden mit der Standardspeichergruppe "IBMSTOGROUP" erstellt, die zum Zeitpunkt der Erstellung einer Instanz erstellt wird. In DB2 werden alle Datenbanktabellen im "Tablespace" gespeichert, der ihre jeweiligen Speichergruppen verwendet.
Die Berechtigungen für die Datenbank werden automatisch als PUBLIC [CREATETAB, BINDADD, CONNECT, IMPLICIT_SCHEMA und SELECT] festgelegt. Wenn jedoch die Option RESTRICTIVE vorhanden ist, werden die Berechtigungen nicht als PUBLIC gewährt.
Erstellen einer nicht einschränkenden Datenbank
Mit diesem Befehl wird eine nicht einschränkende Datenbank erstellt.
Syntax: [So erstellen Sie eine neue Datenbank. 'Datenbankname' gibt einen neuen Datenbanknamen an, den Sie erstellen möchten.]
db2 create database <database name>
Example: [So erstellen Sie eine neue nicht einschränkende Datenbank mit dem Namen 'eins']
db2 create database one
Output:
DB20000I The CREATE DATABASE command completed successfully.
Restriktive Datenbank erstellen
Beim Aufrufen dieses Befehls wird eine restriktive Datenbank erstellt.
Syntax: [In der folgenden Syntax gibt "Datenbankname" den Datenbanknamen an.]
db2 create database <db_name> restrictive
Example: [So erstellen Sie eine neue restriktive Datenbank mit dem Namen 'zwei']
db2 create database two restrictive
Erstellen einer Datenbank mit einem anderen benutzerdefinierten Speicherort
Erstellen Sie eine Datenbank mit der Standardspeichergruppe "IBMSTOGROUP" auf einem anderen Pfad. Zuvor haben Sie den Befehl "Datenbank erstellen" ohne benutzerdefinierten Speicherort aufgerufen, um die Datenbank an einem bestimmten Speicherort zu speichern oder zu erstellen. Gehen Sie wie folgt vor, um die Datenbank unter Verwendung eines benutzerdefinierten Datenbankspeicherorts zu erstellen:
Syntax: [In der folgenden Syntax gibt 'db_name' den 'Datenbanknamen' und 'data_location' an, wo Daten in Ordnern gespeichert werden müssen, und 'db_path_location' gibt den Treiberspeicherort von 'data_location' an.]
db2 create database '<db_name>' on '<data location>' dbpath on '<db_path_location>'
Example: [So erstellen Sie eine Datenbank mit dem Namen 'four', in der Daten in 'data1' und dieser Ordner in 'dbpath1' gespeichert sind]
db2 create database four on '/data1' dbpath on '/dbpath1'
Anzeigen lokaler oder Systemdatenbankverzeichnisdateien
Sie führen diesen Befehl aus, um die Liste der in der aktuellen Instanz verfügbaren Verzeichnisse anzuzeigen.
Syntax:
db2 list database directory
Example:
db2 list database directory
Output:
System Database Directory
Number of entries in the directory = 6
Database 1 entry:
Database alias = FOUR
Database name = FOUR
Local database directory =
/home/db2inst4/Desktop/dbpath
Database release level = f.00
Comment =
Directory entry type = Indirect
Catalog database partition number = 0
Alternate server hostname =
Alternate server port number =
Database 2 entry:
Database alias = SIX
Database name = SIX
Local database directory = /home/db2inst4
Database release level = f.00
Comment =
Directory entry type = Indirect
Catalog database partition number = 0
Alternate server hostname =
Alternate server port number =
Datenbank aktivieren
Dieser Befehl startet alle erforderlichen Dienste für eine bestimmte Datenbank, damit die Datenbank für die Anwendung verfügbar ist.
Syntax: ['Datenbankname' gibt Datenbanknamen an]
db2 activate db <db_name>
Example: [Aktivierung der Datenbank 'one']
db2 activate db one
Datenbank deaktivieren
Mit diesem Befehl können Sie die Datenbankdienste stoppen.
Syntax:
db2 deactivate db <db_name>
Example: [Datenbank 'eins' deaktivieren]
db2 deactivate db one
Verbindung zur Datenbank herstellen
Nach dem Erstellen einer Datenbank müssen Sie eine Verbindung herstellen oder die Datenbank starten, um sie verwenden zu können.
Syntax:
db2 connect to <database name>
Example: [So verbinden Sie die erste Datenbank mit der aktuellen CLI]
db2 connect to one
Output:
Database Connection Information
Database server = DB2/LINUXX8664 10.1.0
SQL authorization ID = DB2INST4
Local database alias = ONE
Überprüfen, ob die Datenbank restriktiv ist
Um zu überprüfen, ob diese Datenbank restriktiv ist oder nicht, ist hier die Syntax:
Syntax: [In der folgenden Syntax gibt 'db' Datenbank an, 'cfg' Konfiguration an, 'Datenbankname' Datenbankname an]
db2 get db cfg for <db_name> | grep -i restrict
Example: [Um zu überprüfen, ob 'eine' Datenbank eingeschränkt ist oder nicht]
db2 get db cfg for one | grep -i restrict
Output:
Restrict access = NO
Konfigurieren des Datenbankmanagers und der Datenbank
Die Instanzkonfiguration (Datenbankmanagerkonfiguration) wird in einer Datei mit dem Namen 'db2system' und die datenbankbezogene Konfiguration in einer Datei mit dem Namen 'SQLDBCON' gespeichert. Diese Dateien können nicht direkt bearbeitet werden. Sie können diese Dateien mit Tools bearbeiten, die die API aufrufen. Mit dem Befehlszeilenprozessor können Sie diese Befehle verwenden.
Konfigurationsparameter des Datenbankmanagers
Syntax: [Um die Informationen des Instance Database Managers zu erhalten]
db2 get database manager configuration
db2 get dbm cfg
Syntax: [So aktualisieren Sie den Instanzdatenbankmanager]
db2 update database manager configuration
db2 update dbm cfg
Syntax: [Zurücksetzen früherer Konfigurationen]
db2 reset database manager configuration
db2 reset dbm cfg
Datenbankkonfigurationsparameter
Syntax: [Um die Informationen der Datenbank zu erhalten]
db2 get database configuration
db2 get db cfg
Syntax: [So aktualisieren Sie die Datenbankkonfiguration]
db2 update database configuration
db2 update db cfg
Syntax: [Zum Zurücksetzen der zuvor konfigurierten Werte in der Datenbankkonfiguration
db2 reset database configuration
db2 reset db cfg
Syntax: [So überprüfen Sie die Größe der aktuell aktiven Datenbank]
db2 "call get_dbsize_info(?,?,?,-1)"
Example: [So überprüfen Sie die Größe der aktuell aktivierten Datenbank]
db2 "call get_dbsize_info(?,?,?,-1)"
Output:
Value of output parameters
--------------------------
Parameter Name : SNAPSHOTTIMESTAMP
Parameter Value : 2014-07-02-10.27.15.556775
Parameter Name : DATABASESIZE
Parameter Value : 105795584
Parameter Name : DATABASECAPACITY
Parameter Value : 396784705536
Return Status = 0
Schätzung des für die Datenbank erforderlichen Speicherplatzes
Um die Größe einer Datenbank abzuschätzen, muss der Beitrag der folgenden Faktoren berücksichtigt werden:
- Systemkatalogtabellen
- Benutzertabellendaten
- Langfelddaten
- LOB-Daten (Large Object)
- Indexraum
- Temporärer Arbeitsbereich
- XML-Daten
- Speicherplatz der Protokolldatei
- Lokales Datenbankverzeichnis
- Systemdateien
Überprüfen der Datenbankberechtigungen
Mit der folgenden Syntax können Sie überprüfen, welche Datenbankberechtigungen PUBLIC für die nicht einschränkende Datenbank erteilt wurden.
Step 1: Stellen Sie mit der Authentifizierungsbenutzer-ID und dem Kennwort der Instanz eine Verbindung zur Datenbank her.
Syntax: [So stellen Sie mit Benutzername und Passwort eine Verbindung zur Datenbank her]
db2 connect to <db_name> user <userid> using <password>
Example: [So verbinden Sie eine Datenbank mit der Benutzer-ID 'db2inst4' und dem Kennwort 'db2inst4']
db2 connect to one user db2inst4 using db2inst4
Output:
Database Connection Information
Database server = DB2/LINUXX8664 10.1.0
SQL authorization ID = DB2INST4
Local database alias = ONE
Step2: Um die Berechtigungen der Datenbank zu überprüfen.
Syntax: [Die folgende Syntax zeigt das Ergebnis der Berechtigungsdienste für die aktuelle Datenbank]
db2 "select substr(authority,1,25) as authority, d_user, d_group,
d_public, role_user, role_group, role_public,d_role from table(
sysproc.auth_list_authorities_for_authid ('public','g'))as t
order by authority"
Example:
db2 "select substr(authority,1,25) as authority, d_user, d_group,
d_public, role_user, role_group, role_public,d_role from table(
sysproc.auth_list_authorities_for_authid ('PUBLIC','G'))as t
order by authority"
Output:
AUTHORITY D_USER D_GROUP D_PUBLIC ROLE_USER ROLE_GROUP ROLE_PUBLIC D_ROLE
------------------------- ------ ------- -------- --------- ---------- ----------- ------
ACCESSCTRL * * N * * N *
BINDADD * * Y * * N *
CONNECT * * Y * * N *
CREATETAB * * Y * * N *
CREATE_EXTERNAL_ROUTINE * * N * * N *
CREATE_NOT_FENCED_ROUTINE * * N * * N *
CREATE_SECURE_OBJECT * * N * * N *
DATAACCESS * * N * * N *
DBADM * * N * * N *
EXPLAIN * * N * * N *
IMPLICIT_SCHEMA * * Y * * N *
LOAD * * N * * N *
QUIESCE_CONNECT * * N * * N *
SECADM * * N * * N *
SQLADM * * N * * N *
SYSADM * * * * * * *
SYSCTRL * * * * * * *
SYSMAINT * * * * * * *
SYSMON * * * * * * *
WLMADM * * N * * N *
20 record(s) selected.
Datenbank löschen
Mit dem Befehl Löschen können Sie unsere Datenbank aus dem Instanzdatenbankverzeichnis entfernen. Dieser Befehl kann alle Objekte, Tabellen, Leerzeichen, Container und zugehörigen Dateien löschen.
Syntax: [So löschen Sie eine Datenbank aus einer Instanz]
db2 drop database <db_name>
Example: [So löschen Sie die 'Sechs'-Datenbank von der Instanz]
db2 drop database six
Output:
DB20000I The DROP DATABASE command completed successfully
Dieses Kapitel führt Sie in die Pufferpools in der Datenbank ein.
Einführung
Der Pufferpool ist Teil eines Hauptspeicherplatzes, der vom Datenbankmanager zugewiesen wird. Der Zweck von Pufferpools besteht darin, Tabellen- und Indexdaten von der Festplatte zwischenzuspeichern. Alle Datenbanken haben ihre eigenen Pufferpools. Zum Zeitpunkt der Erstellung einer neuen Datenbank wird ein Standardpufferpool erstellt. Es wurde als "IBMDEFAULTBP" bezeichnet. Abhängig von den Benutzeranforderungen können mehrere Pufferpools erstellt werden. Im Pufferpool platziert der Datenbankmanager die Tabellenzeilendaten als Seite. Diese Seite bleibt im Pufferpool, bis die Datenbank heruntergefahren wird oder bis der Speicherplatz mit neuen Daten geschrieben wird. Die Seiten im Pufferpool, die mit Daten aktualisiert, aber nicht auf die Festplatte geschrieben werden, werden als "Dirty" -Seiten bezeichnet. Nachdem die aktualisierten Datenseiten im Pufferpool auf die Festplatte geschrieben wurden, kann der Pufferpool weitere Daten aufnehmen.
Beziehung zwischen Tablespaces und Bufferpools
Jeder Tabellenbereich ist einem bestimmten Pufferpool in einer Datenbank zugeordnet. Ein Tablespace ist einem Bufferpool zugeordnet. Die Größe von Bufferpool und Tablespace muss gleich sein. Mit mehreren Pufferpools können Sie den von der Datenbank verwendeten Speicher konfigurieren, um die Gesamtleistung zu steigern.
Pufferpoolgrößen
Die Größe der Bufferpool-Seite wird festgelegt, wenn Sie den Befehl "CREATE DATABASE" verwenden. Wenn Sie die Seitengröße nicht angeben, wird die Standardseitengröße von 4 KB verwendet. Sobald der Pufferpool erstellt wurde, kann die Seitengröße später nicht mehr geändert werden
Auflisten der verfügbaren Pufferpools im aktuellen Datenbankverzeichnis
Syntax: [Die folgende Syntax zeigt alle verfügbaren Pufferpools in der Datenbank]
db2 select * from syscat.bufferpools
Example: [Um verfügbare Pufferpools in der aktuellen Datenbank anzuzeigen]
db2 select * from syscat.bufferpools
Output:
BPNAME BUFFERPOOLID DBPGNAME NPAGES PAGESIZE ESTORE
NUMBLOCKPAGES BLOCKSIZE NGNAME
------------------------------------------------------------
IBMDEFAULTBP
1 -
-2 4096 N 0 0 -
1 record(s) selected.
Pufferpool erstellen
Um einen neuen Pufferpool für den Datenbankserver zu erstellen, benötigen Sie zwei Parameter, nämlich "Pufferpoolname" und "Seitengröße". Die folgende Abfrage wird ausgeführt, um einen neuen Pufferpool zu erstellen.
Syntax: [In der folgenden Syntax gibt 'bp_name' den Namen des Pufferpools und 'size' die Größe der Seite an, die Sie für Pufferpools deklarieren müssen (4K, 8K, 16K, 32K)]
db2 create bufferpool <bp_name> pagesize <size>
Example: [So erstellen Sie einen neuen Pufferpool mit dem Namen "bpnew" und der Größe "8192" (8 KB).]
db2 create bufferpool bpnew pagesize 8192
Output
DB20000I The SQL command completed successfully.
Löschen des Pufferpools
Vor dem Löschen des Pufferpools muss überprüft werden, ob ihm ein Tabellenbereich zugewiesen ist.
Syntax: [So löschen Sie den Pufferpool]
drop bufferpool <bp_name>
Example: [Um 'bpnew' namens bufferpool zu löschen]
db2 drop bufferpool bpnew
Output
DB20000I The SQL command completed successfully.
In diesem Kapitel werden die Tablespaces ausführlich beschrieben
Einführung
Ein Tabellenbereich ist eine Speicherstruktur und enthält Tabellen, Indizes, große Objekte und lange Daten. Es kann verwendet werden, um Daten in einer Datenbank in einer logischen Speichergruppe zu organisieren, die sich darauf bezieht, wo Daten auf einem System gespeichert sind. Diese Tablespaces werden in Datenbankpartitionsgruppen gespeichert
Vorteile von Tablespaces in der Datenbank
Die Tabellenbereiche sind in der Datenbank auf verschiedene Weise von Vorteil:
Recoverability: Tablespaces erleichtern das Sichern und Wiederherstellen. Mit einem einzigen Befehl können Sie alle Datenbankobjekte in Tablespaces sichern oder wiederherstellen.
Automatic storage Management: Der Datenbankmanager erstellt und erweitert Container je nach Bedarf.
Memory utilization: Ein einzelner Pufferpool kann mehrere Tablespaces verwalten. Sie können ihrem eigenen Pufferpool temporäre Tablespaces zuweisen, um die Leistung von Aktivitäten wie Sortieren oder Verknüpfen zu steigern.
Container
Tablespaces enthält einen oder mehrere Container. Ein Container kann ein Verzeichnisname, ein Gerätename oder ein Dateiname sein. In einer Datenbank kann ein einzelner Tabellenbereich mehrere Container auf demselben physischen Speichergerät haben. Wenn der Tabellenbereich mit der Option "Automatischer Speichertabellenbereich" erstellt wird, wird die Erstellung und Verwaltung von Containern automatisch vom Datenbankmanager übernommen. Wenn es nicht mit der Option für den automatischen Speichertabellenbereich erstellt wurde, müssen Sie die Container selbst definieren und verwalten.
Standardtabellenbereiche
Wenn Sie eine neue Datenbank erstellen, erstellt der Datenbankmanager einige Standardtabellenbereiche für die Datenbank. Dieser Tabellenbereich wird als Speicher für Benutzer- und temporäre Daten verwendet. Jede Datenbank muss mindestens drei hier angegebene Tablespaces enthalten:
- Katalogtabellenbereich
- Benutzertabellenbereich
- Temporärer Tablespace
Catalog tablespace: Es enthält Systemkatalogtabellen für die Datenbank. Es heißt SYSCATSPACE und kann nicht gelöscht werden.
User tablespace: Dieser Tabellenbereich enthält benutzerdefinierte Tabellen. In einer Datenbank haben wir einen Standardbenutzertabellenbereich mit dem Namen USERSPACE1. Wenn Sie zum Zeitpunkt der Erstellung keinen benutzerdefinierten Tabellenbereich für eine Tabelle angeben, wählt der Datenbankmanager den Standardbenutzertabellenbereich für Sie aus.
Temporary tablespace: Ein temporärer Tabellenbereich enthält temporäre Tabellendaten. Dieser Tabellenbereich enthält temporäre Systemtabellenbereiche oder temporäre Benutzertabellenbereiche.
Der temporäre Systemtabellenbereich enthält temporäre Daten, die vom Datenbankmanager benötigt werden, während Vorgänge wie Sortieren oder Verknüpfungen ausgeführt werden. Eine Datenbank muss mindestens einen temporären Systemtabellenbereich haben und heißt TEMPSPACE1. Es wird zum Zeitpunkt der Erstellung der Datenbank erstellt. Der temporäre Tabellenbereich des Benutzers enthält temporäre Daten aus Tabellen. Es wird mit der Anweisung DECLARE GLOBAL TEMPORARY TABLE oder CREATE GLOBAL TEMPORARY TABLE erstellt. Dieser temporäre Tabellenbereich wird zum Zeitpunkt der Datenbankerstellung nicht standardmäßig erstellt.
Tablespaces and storage management:
Tablespaces können auf unterschiedliche Weise eingerichtet werden, je nachdem, wie Sie sie verwenden möchten. Sie können das Betriebssystem für die Verwaltung der Tabellenbereichszuweisung einrichten, den Datenbankmanager Speicherplatz zuweisen lassen oder die automatische Zuweisung von Tabellenbereichen für Ihre Daten auswählen.
Die folgenden drei Arten von verwalteten Bereichen sind verfügbar:
System Managed Space (SMS): Der Dateisystem-Manager des Betriebssystems weist den Speicherplatz zu und verwaltet ihn, in dem die Tabelle gespeichert ist. Speicherplatz wird bei Bedarf zugewiesen. Dieses Modell besteht aus Dateien, die Datenbankobjekte darstellen. Dieser Tabellenbereichstyp ist in Version 10.1 für benutzerdefinierte Tabellenbereiche veraltet und für Katalog- und temporäre Tabellenbereiche nicht veraltet.
Database Managed Space (DMS): Der Datenbankserver steuert den Speicherplatz. Der Speicherplatz wird im Dateisystem basierend auf der Containerdefinition vorab zugewiesen, die Sie beim Erstellen des DMS-Tabellenbereichs angeben. Es ist ab Version 10.1 Fixpack 1 für benutzerdefinierte Tabellenbereiche veraltet, für Systemtabellenbereiche und temporäre Tabellenbereiche jedoch nicht veraltet.
Automatic Storage Tablespace: Datenbankserver kann automatisch verwaltet werden. Der Datenbankserver erstellt und erweitert Container abhängig von den Daten in der Datenbank. Bei der automatischen Speicherverwaltung müssen keine Containerdefinitionen angegeben werden. Der Datenbankserver kümmert sich um das Erstellen und Erweitern von Containern, um den der Datenbank zugewiesenen Speicher zu nutzen. Wenn Sie einer Speichergruppe Speicherplatz hinzufügen, werden automatisch neue Container erstellt, wenn der vorhandene Container seine maximale Kapazität erreicht. Wenn Sie den neu hinzugefügten Speicher sofort verwenden möchten, können Sie den Tabellenbereich neu ausgleichen.
Page, table and tablespace size:
Temporäre DMS- und automatische Speichertabellenbereiche. Die Seitengröße, die Sie für Ihre Datenbank auswählen, bestimmt die maximale Grenze für die Tabellenbereichsgröße. Bei Tabellen-SMS und temporären Tabellenbereichen für die automatische Speicherung beschränkt die Seitengröße die Größe der Tabelle selbst. Die Seitengrößen können 4 KB, 8 KB, 16 KB oder 32 KB betragen.
Tablespace-Typ | 4K Seitengrößenbeschränkung | 8K Seitengrößenbeschränkung | 16K Seitengrößenbeschränkung | Begrenzung der Seitengröße auf 32 KB |
---|---|---|---|---|
DMS, regulärer nicht temporärer automatischer Speichertabellenbereich | 64G | 128G | 256G | 512G |
DMS, temporäres DMS und nicht temporärer automatischer Speichertabellenbereich groß | 1892G | 16384G | 32768G | 65536G |
In diesem Kapitel werden die Datenbankspeichergruppen beschrieben.
Einführung
Eine Reihe von Speicherpfaden zum Speichern von Datenbanktabellen oder -objekten ist eine Speichergruppe. Sie können die Tablespaces der Speichergruppe zuweisen. Wenn Sie eine Datenbank erstellen, nehmen alle Tablespaces die Standardspeichergruppe an. Die Standardspeichergruppe für eine Datenbank ist 'IBMSTOGROUP'. Wenn Sie eine neue Datenbank erstellen, ist die Standardspeichergruppe aktiv, wenn Sie den Parameter "AUTOMATIC STOGROUP NO" am Ende des Befehls "CREATE DATABASE" übergeben. Die Datenbank verfügt über keine Standardspeichergruppen.
Auflistung von Speichergruppen
Sie können alle Speichergruppen in der Datenbank auflisten.
Syntax: [Um die Liste der verfügbaren Speichergruppen in der aktuellen Datenbank anzuzeigen]
db2 select * from syscat.stogroups
Example: [Um die Liste der verfügbaren Speichergruppen in der aktuellen Datenbank anzuzeigen]
db2 select * from syscat.stogroups
Erstellen einer Speichergruppe
Hier ist eine Syntax zum Erstellen einer Speichergruppe in der Datenbank:
Syntax: [So erstellen Sie eine neue Stoggruppe. Der 'stogropu_name' gibt den Namen der neuen Speichergruppe an und der 'Pfad' gibt den Ort an, an dem Daten (Tabellen) gespeichert werden.]
db2 create stogroup
on ‘path’
Example: [So erstellen Sie eine neue Stogruppe 'stg1' im Ordner 'data1' des Pfads]
db2 create stogroup stg1 on ‘/data1’
Output:
DB20000I The SQL command completed succesfully
Tabellenbereich mit stogroup erstellen
So können Sie mit storegroup einen Tablespace erstellen:
Syntax: [So erstellen Sie einen neuen Tabellenbereich mit der vorhandenen Speichergruppe]
db2 create tablespace <tablespace_name> using stogroup <stogroup_name>
Example: [So erstellen Sie einen neuen Tabellenbereich mit dem Namen 'ts1' unter Verwendung der vorhandenen Speichergruppe 'stg1']
db2 create tablespace ts1 using stogroup stg1
Output:
DB20000I The SQL command completed succesfully
Ändern einer Speichergruppe
Sie können den Speicherort einer Speichergruppe mithilfe der folgenden Syntax ändern:
Syntax: [So verschieben Sie eine Speichergruppe vom alten zum neuen Standort]
db2 alter stogroup
add ‘location’, ‘location’
Example: [So ändern Sie den Standortpfad vom alten zum neuen Speicherort für die Speichergruppe 'sg1']
db2 alter stogroup sg1 add ‘/path/data3’, ‘/path/data4’
Ordnerpfad der Speichergruppe löschen
Bevor Sie den Ordnerpfad der Speichergruppe löschen, können Sie mit dem Befehl alter einen neuen Speicherort für die Speichergruppe hinzufügen.
Syntax: [So löschen Sie den alten Pfad vom Speicherort der Speichergruppe]
db2 alter stogroup
drop ‘/path’
Example: [Speicherort der Speichergruppe von 'stg1' löschen]
db2 alter stogroup stg1 drop ‘/path/data1’
Einen Tabellenbereich neu ausgleichen
Das Ausbalancieren des Tabellenbereichs ist erforderlich, wenn wir einen neuen Ordner für die Speichergruppe oder Tabellenbereiche erstellen, während die Transaktionen in der Datenbank ausgeführt werden und der Tabellenbereich voll wird. Durch das Neuausgleichen der Aktualisierungen der Datenbankkonfigurationsdateien mit der neuen Speichergruppe.
Syntax: [Um den Tabellenbereich vom alten Speichergruppenpfad zur neuen Speichergruppe neu auszugleichen]
db2 alter tablspace <ts_name> rebalance
Example: [Zum Ausgleich]
db2 alter tablespace ts1 rebalance
Umbenennen einer Speichergruppe
Syntax: [So ändern Sie den Namen des vorhandenen Speichernamens]
db2 rename stogroup <old_stg_name> to <new_stg_name>
Example: [Um den Namen der Speichergruppe von 'sg1' in den neuen Namen 'sgroup1' zu ändern]
db2 rename stogroup sg1 to sgroup1
Löschen einer Speichergruppe
Step 1: Bevor Sie eine Speichergruppe löschen, können Sie Tablespaces eine andere Speichergruppe zuweisen.
Syntax: [Um eine andere Speichergruppe für den Tabellenbereich zuzuweisen.]
db2 alter tablspace <ts_name> using stogroup <another sto_group_name>
Example: [Um von einer alten Stoggruppe zu einer neuen Stoggruppe mit dem Namen 'sg2' für den Tabellenbereich 'ts1' zu wechseln]
db2 alter tablespace ts1 using stogroup sg2
Step 2:
Syntax: [So löschen Sie die vorhandene Stogruppe]
db2 drop stogorup <stogroup_name>
Example: [Stoggruppe 'stg1' aus der Datenbank löschen]
db2 drop stogroup stg1
In diesem Kapitel wird das Konzept des Schemas vorgestellt und beschrieben.
Einführung
Ein Schema ist eine Sammlung benannter Objekte, die logisch in der Datenbank klassifiziert sind.
In einer Datenbank können Sie nicht mehrere Datenbankobjekte mit demselben Namen erstellen. Zu diesem Zweck bietet das Schema eine Gruppenumgebung. Sie können mehrere Schemas in einer Datenbank erstellen und mehrere Datenbankobjekte mit demselben Namen und unterschiedlichen Schemagruppen erstellen.
Ein Schema kann Tabellen, Funktionen, Indizes, Tabellenbereiche, Prozeduren, Trigger usw. enthalten. Beispielsweise erstellen Sie zwei verschiedene Schemas mit den Namen "Professional" und "Personal" für eine "Mitarbeiter" -Datenbank. Es ist möglich, zwei verschiedene Tabellen mit demselben Namen "Mitarbeiter" zu erstellen. In dieser Umgebung enthält eine Tabelle professionelle Informationen und die andere persönliche Informationen des Mitarbeiters. Obwohl zwei Tabellen denselben Namen haben, haben sie zwei unterschiedliche Schemata: "Persönlich" und "Professionell". Somit kann der Benutzer mit beiden arbeiten, ohne auf Probleme zu stoßen. Diese Funktion ist nützlich, wenn die Benennung von Tabellen Einschränkungen unterliegt.
Lassen Sie uns einige Befehle sehen, die sich auf Schema beziehen:
Derzeit aktives Schema abrufen
Syntax:
db2 get schema
Example: [Um das aktuelle Datenbankschema abzurufen]
db2 get schema
Festlegen eines anderen Schemas für die aktuelle Umgebung
Syntax:
db2 set schema=<schema_name>
Example: [Um 'schema1' an die aktuelle Instanzumgebung anzuordnen]
db2 set schema=schema1
Erstellen eines neuen Schemas
Syntax: [So erstellen Sie ein neues Schema mit der autorisierten Benutzer-ID]
db2 create schema <schema_name> authroization <inst_user>
Example: [So erstellen Sie ein mit "db2inst2" autorisiertes "Schema1" -Schema]
db2 create schema schema1 authorization db2inst2
Übung
Erstellen wir zwei verschiedene Tabellen mit demselben Namen, aber zwei verschiedenen Schemata. Hier erstellen Sie eine Mitarbeitertabelle mit zwei verschiedenen Schemata, eines für persönliche und das andere für berufliche Informationen.
Step 1: Erstellen Sie zwei Schemas.
Schema 1: [So erstellen Sie ein Schema mit dem Namen professional]
db2 create schema professional authorization db2inst2
Schema 2: [So erstellen Sie ein Schema mit dem Namen personal]
db2 create schema personal authorization db2inst2
Step 2: Erstellen Sie zwei gleichnamige Tabellen für Mitarbeiterdetails
Table1: professional.employee
[So erstellen Sie eine neue Tabelle 'Mitarbeiter' in der Datenbank mit dem Schemanamen 'Professional']
db2 create table professional.employee(id number, name
varchar(20), profession varchar(20), join_date date,
salary number);
Table2: personal.employee
[So erstellen Sie eine neue Tabelle 'Mitarbeiter' in derselben Datenbank mit dem Schemanamen 'Persönlich']
db2 create table personal.employee(id number, name
varchar(20), d_birth date, phone bigint, address
varchar(200));
Nachdem Sie diese Schritte ausgeführt haben, erhalten Sie zwei Tabellen mit demselben Namen "Mitarbeiter" mit zwei verschiedenen Schemata.
In diesem Kapitel werden verschiedene in DB2 verwendete Datentypen vorgestellt.
Einführung
In DB2-Datenbanktabellen hat jede Spalte abhängig von den Anforderungen des Entwicklers einen eigenen Datentyp. Der Datentyp wird als Typ und Bereich der Werte in Spalten einer Tabelle bezeichnet.
Integrierte Datentypen
- Terminzeit
- TIME: Es repräsentiert die Tageszeit in Stunden, Minuten und Sekunden.
- TIMESTAMP: Es repräsentiert sieben Werte für Datum und Uhrzeit in Form von Jahr, Monat, Tag, Stunden, Minuten, Sekunden und Mikrosekunden.
- DATE: Es repräsentiert das Datum des Tages in drei Teilen in Form von Jahr, Monat und Tag.
- String
- Character
- CHAR (fixed length): Feste Länge der Zeichenketten.
- Unterschiedliche Länge
- VARCHAR: Zeichenfolgen unterschiedlicher Länge.
- CLOB: große Objektzeichenfolgen, verwenden Sie diese Option, wenn eine Zeichenfolge möglicherweise die Grenzen des Datentyps VARCHAR überschreitet.
- Graphic
- GRAPHIC
- Fixed length: Grafikzeichenfolgen mit fester Länge, die Doppelbytezeichen enthalten
- Unterschiedliche Länge
- VARGRAPHIC: Unterschiedliche Zeichengrafikzeichenfolge, die Doppelbye-Zeichen enthält.
- DBCLOB: großer Objekttyp
- Binary
- BLOB (unterschiedliche Länge): Binärzeichenfolge in großem Objekt
- BOOLEAN: In Form von 0 und 1.
- Signed numeric
- Exact
- Binary integer
- SMALLINT [16BIT]: Mit dieser Option können Sie kleine int-Werte in Spalten einfügen
- INTEGER [32BIT]: Mit dieser Option können Sie große int-Werte in Spalten einfügen
- BIGINT [64BIT]: Mit dieser Option können Sie größere int-Werte in Spalten einfügen
- Decimal
- DEZIMAL (verpackt)
- DECFLOAT (Dezimal-Gleitkomma): Mit dieser Option können Sie Dezimal-Gleitkommazahlen einfügen
- Approximate
- Floating points
- REAL (einfache Genauigkeit): Mit diesem Datentyp können Sie Gleitkommazahlen mit einfacher Genauigkeit einfügen.
- DOUBLE (doppelte Genauigkeit): Mit diesem Datentyp können Sie Gleitkommazahlen mit doppelter Genauigkeit einfügen.
- eXtensible Mark-up Language
- XML: Sie können XML-Daten in dieser Datentypspalte speichern.
Tabellen sind logische Strukturen, die vom Datenbankmanager verwaltet werden. In einer Tabelle wird jeder vertikale Block als Spalte (Tupel) und jeder horizontale Block als Zeile (Entität) bezeichnet. Die Sammlung von Daten, die in Form von Spalten und Zeilen gespeichert sind, wird als Tabelle bezeichnet. In Tabellen hat jede Spalte einen anderen Datentyp. Tabellen werden zum Speichern persistenter Daten verwendet.
Art der Tabellen
- Base Tables: Sie enthalten persistente Daten. Es gibt verschiedene Arten von Basistabellen, darunter:
- Regular Tables: Allzwecktabellen, Allgemeine Tabellen mit Indizes sind Allzwecktabellen.
- Multidimensional Clustering Table (MDC): Diese Art von Tabelle, die physisch auf mehr als einem Schlüssel gruppiert ist und zur Verwaltung großer Datenbankumgebungen verwendet wird. Diese Art von Tabellen wird in DB2 pureScale nicht unterstützt.
- Insert time clustering Table (ITC): Ähnlich wie bei MDC-Tabellen werden Zeilen zum Zeitpunkt des Einfügens in die Tabellen gruppiert. Sie können partitionierte Tabellen sein. Auch sie unterstützen keine pureScale-Umgebung.
- Range-Clustered tables Table (RCT): Diese Art von Tabellen ermöglicht einen schnellen und direkten Zugriff auf Daten. Diese werden als sequentielle Cluster implementiert. Jeder Datensatz in der Tabelle hat eine Datensatz-ID. Diese Art von Tabellen wird verwendet, wenn die Daten eng mit einer oder mehreren Spalten in der Tabelle gruppiert sind. Diese Art von Tabellen wird auch in DB2 pureScale nicht unterstützt.
- Partitioned Tables: Diese Art von Tabellen wird im Datenorganisationsschema verwendet, in dem Tabellendaten in mehrere Speicherobjekte unterteilt sind. Datenpartitionen können zu einer partitionierten Tabelle hinzugefügt, an diese angehängt und von dieser getrennt werden. Sie können mehrere Datenpartitionen aus einer Tabelle in einem Tabellenbereich speichern.
- Temporal Tables: Der Verlauf einer Tabelle in einer Datenbank wird in temporären Tabellen gespeichert, z. B. Details zu den zuvor vorgenommenen Änderungen.
- Temporary Tables: Für temporäre Arbeiten verschiedener Datenbankoperationen müssen Sie temporäre Tabellen verwenden. Die temporären Tabellen (DGTTs) werden nicht im Systemkatalog angezeigt. XML-Spalten können nicht in erstellten temporären Tabellen verwendet werden.
- Materialized Query Tables: MQT kann verwendet werden, um die Leistung von Abfragen zu verbessern. Diese Tabellentypen werden durch eine Abfrage definiert, mit der die Daten in den Tabellen ermittelt werden.
Tabellen erstellen
Die folgende Syntax erstellt eine Tabelle:
Syntax: [So erstellen Sie eine neue Tabelle]
db2 create table <schema_name>.<table_name>
(column_name column_type....) in <tablespace_name>
Example: Wir erstellen eine Tabelle, um "Mitarbeiter" -Details im Schema "professionell" zu speichern. Diese Tabelle enthält die Felder "ID, Name, Jobrolle, Verbindung, Gehalt". Diese Tabellendaten werden im Tabellenbereich "ts1" gespeichert.
db2 create table professional.employee(id int, name
varchar(50),jobrole varchar(30),joindate date,
salary double) in ts1
Output:
DB20000I The SQL command completed successfully.
Auflistung der Tabellendetails
Die folgende Syntax wird verwendet, um Tabellendetails aufzulisten:
Syntax: [Um die Liste der mit Schemas erstellten Tabellen anzuzeigen]
db2 select tabname, tabschema, tbspace from syscat.tables
Example: [Um die Liste der Tabellen in der aktuellen Datenbank anzuzeigen]
db2 select tabname, tabschema, tbspace from syscat.tables
Output:
TABNAME TABSCHEMA TBSPACE
------------ ------------- --------
EMPLOYEE PROFESSIONAL TS1
1 record(s) selected.
Auflisten von Spalten in einer Tabelle
Die folgende Syntax listet Spalten in einer Tabelle auf:
Syntax: [Spalten und Datentypen einer Tabelle anzeigen]
db2 describe table <table_name>
Example: [Um die Spalten und Datentypen der Tabelle 'Mitarbeiter' anzuzeigen]
db2 describe table professional.employee
Output:
Data type Column
Column name schema Data type name Length Scale Nulls
------ ----- --------- ----------------- --------- ----- ------
ID SYSIBM INTEGER 4 0 Yes
NAME SYSIBM VARCHAR 50 0 Yes
JOBROLE SYSIBM VARCHAR 30 0 Yes
JOINDATE SYSIBM DATE 4 0 Yes
SALARY SYSIBM DOUBLE 8 0 Yes
5 record(s) selected.
Versteckte Spalten
Sie können eine ganze Spalte einer Tabelle ausblenden. Wenn Sie die Abfrage "select * from" aufrufen, werden die ausgeblendeten Spalten in der resultierenden Tabelle nicht zurückgegeben. Wenn Sie Daten in eine Tabelle einfügen, erwartet eine "INSERT" -Anweisung ohne Spaltenliste keine Werte für implizit ausgeblendete Spalten. Diese Art von Spalten wird in materialisierten Abfragetabellen häufig referenziert. Diese Art von Spalten unterstützt das Erstellen temporärer Tabellen nicht.
Tabelle mit versteckter Spalte erstellen
Die folgende Syntax erstellt eine Tabelle mit ausgeblendeten Spalten:
Syntax: [So erstellen Sie eine Tabelle mit ausgeblendeten Spalten]
db2 create table <tab_name> (col1 datatype,col2 datatype
implicitly hidden)
Example: [So erstellen Sie eine 'Kunden'-Tabelle mit versteckten Spalten' Telefon ']
db2 create table professional.customer(custid integer not
null, fullname varchar(100), phone char(10)
implicitly hidden)
Einfügen von Datenwerten in die Tabelle
Die folgende Syntax fügt Werte in die Tabelle ein:
Syntax: [Um Werte in eine Tabelle einzufügen]
db2 insert into <tab_name>(col1,col2,...)
values(val1,val2,..)
Example: [Um Werte in die 'Kunden'-Tabelle einzufügen]
db2 insert into professional.customer(custid, fullname, phone)
values(100,'ravi','9898989')
db2 insert into professional.customer(custid, fullname, phone)
values(101,'krathi','87996659')
db2 insert into professional.customer(custid, fullname, phone)
values(102,'gopal','768678687')
Output:
DB20000I The SQL command completed successfully.
Werte aus Tabelle abrufen
Die folgende Syntax ruft Werte aus der Tabelle ab:
Syntax: [Um Werte aus einer Tabelle abzurufen]
db2 select * from <tab_name>
Example: [Um Werte aus der 'Kunden'-Tabelle abzurufen]
db2 select * from professional.customer
Output:
CUSTID FULLNAME
----------- ------------------------
100 ravi
101 krathi
102 gopal
3 record(s) selected.
Abrufen von Werten aus einer Tabelle mit ausgeblendeten Spalten
Die folgende Syntax ruft Werte aus ausgewählten Spalten ab:
Syntax: [Um ausgewählte Werte für versteckte Spalten aus einer Tabelle abzurufen]
db2 select col1,col2,col3 from <tab_name>
Example: [Um ausgewählte Spaltenwerte aus einer Tabelle abzurufen]
db2 select custid,fullname,phone from professional.customer
Output:
CUSTID FULLNAME PHONE
------- --------- ------------
100 ravi 9898989
101 krathi 87996659
102 gopal 768678687
3 record(s) selected.
Wenn Sie die Daten in den ausgeblendeten Spalten anzeigen möchten, müssen Sie den Befehl "DESCRIBE" ausführen.
Syntax::
db2 describe table <table_name> show detail
Example:
db2 describe table professional.customer show detail
Output:
Column name Data type schema Data type name Column
column Partitionkey code
Length Scale Nulls
number sequence page Hidden Default
--------------- -------------------- --------------- -------- ----
---- -------- ---------- ------------- -------- ----------- ------
---
CUSTID SYSIBM INTEGER 4 0
No 0 0 0 No
FULLNAME SYSIBM VARCHAR 100 0
Yes 1 0 1208 No
PHONE SYSIBM CHARACTER 10 0
Yes 2 0 1208 Implicitly
3 record(s) selected.
Ändern des Typs der Tabellenspalten
Sie können unsere Tabellenstruktur mit diesem Befehl "ändern" wie folgt ändern:
Syntax::
db2 alter table <tab_name> alter column <col_name> set data type <data_type>
Example: [So ändern Sie den Datentyp für die Spalte "id" von "int" in "bigint" für die Mitarbeitertabelle]
db2 alter table professional.employee alter column id set data type bigint
Output:::
DB20000I The SQL command completed successfully.
Spaltennamen ändern
Sie können den Spaltennamen wie folgt ändern:
Syntax: [So ändern Sie den Spaltennamen vom alten zum neuen Namen einer Tabelle]
db2 alter table <tab_name> rename column <old_name> to <new_name>
Example: [So ändern Sie den Spaltennamen in der Tabelle "Kunden" von "vollständiger Name" in "Kundenname".]
db2 alter table professional.customer rename column fullname to custname
Die Tische fallen lassen
Um eine Tabelle zu löschen, müssen Sie den Befehl "DROP" wie folgt verwenden:
Syntax::
db2 drop table <tab_name>
Example: [Löschen der Kundentabellendatenbank]
db2 drop table professional.customers
Um die gesamte Hierarchie der Tabelle (einschließlich Trigger und Relation) zu löschen, müssen Sie den Befehl "DROP TABLE HIERARCHY" verwenden.
Syntax::
db2 drop table hierarchy <tab_name>
Example: [Um die gesamte Hierarchie einer Tabelle 'Kunde' zu löschen]
db2 drop table hierarchy professional.customers
In diesem Kapitel wird das Erstellen von Alias und das Abrufen von Daten mithilfe des Alias von Datenbankobjekten beschrieben.
Einführung
Alias ist ein alternativer Name für Datenbankobjekte. Es kann verwendet werden, um auf das Datenbankobjekt zu verweisen. Man kann sagen, es ist ein Spitzname für Datenbankobjekte. Für die Objekte werden Alias definiert, um ihren Namen kurz zu machen, wodurch die Abfragegröße verringert und die Lesbarkeit der Abfrage erhöht wird.
Datenbankobjekt-Aliase erstellen
Sie können einen Datenbankobjekt-Alias wie folgt erstellen:
Syntax::
db2 create alias <alias_name> for <table_name>
Example: Erstellen eines Aliasnamens für die Tabelle "professional.customer"
db2 create alias pro_cust for professional.customer
Wenn Sie "SELECT * FROM PRO_CUST" oder "SELECT * FROM PROFESSIONAL.CUSTOMER" übergeben, zeigt der Datenbankserver das gleiche Ergebnis an.
Syntax: [Um Werte aus einer Tabelle direkt mit dem Schemanamen abzurufen]
db2 select * from <schema_name>.<table_name>
Example: [Um Werte vom Tabellenkunden abzurufen]
db2 select * from professional.customer
Output:
CUSTID FULLNAME PHONE
------- --------- ------------
100 ravi 9898989
101 krathi 87996659
102 gopal 768678687
3 record(s) selected.
Abrufen von Werten mithilfe des Aliasnamens der Tabelle
Sie können Werte aus der Datenbank mithilfe des Aliasnamens abrufen, wie unten gezeigt:
Syntax: [Zum Abrufen von Werten aus der Tabelle durch Aufrufen des Aliasnamens der Tabelle]
db2 select * from <alias_name>
Example: [Zum Abrufen von Werten vom Tabellenkunden unter Verwendung des Aliasnamens]
db2 select * from pro_cust
Output:
CUSTID FULLNAME PHONE
------- --------- ------------
100 ravi 9898989
101 krathi 87996659
102 gopal 768678687
3 record(s) selected.
In diesem Kapitel werden verschiedene Einschränkungen in der Datenbank beschrieben.
Einführung
Um die Datenbankintegrität zu erzwingen, wird eine Reihe von Regeln definiert, die als Einschränkungen bezeichnet werden. Die Einschränkungen erlauben oder verbieten die Werte in den Spalten.
Bei einer Echtzeitdatenbankaktivität sollten die Daten mit bestimmten Einschränkungen hinzugefügt werden. Beispielsweise sollte in einer Verkaufsdatenbank die Verkaufs-ID oder die Transaktions-ID eindeutig sein. Die Einschränkungstypen sind:
- NICHT NULL
- Unique
- Primärschlüssel
- Unbekannter Schlüssel
- Check
- Informational
Einschränkungen sind nur Tabellen zugeordnet. Sie werden nur auf bestimmte Tabellen angewendet. Sie werden zum Zeitpunkt der Tabellenerstellung definiert und auf die Tabelle angewendet.
Erläuterung jeder Einschränkung:
NICHT NULL
Es ist eine Regel, Nullwerte aus einer oder mehreren Spalten in der Tabelle zu verbieten.
Syntax:
db2 create table <table_name>(col_name col_type not null,..)
Example: [Um eine Verkaufstabelle mit vier Spalten (ID, Artikelname, Menge, Preis) zu erstellen, fügen Sie allen Spalten "Nicht-Null" -Einschränkungen hinzu, um zu vermeiden, dass eine Nullzelle in der Tabelle gebildet wird.]
db2 create table shopper.sales(id bigint not null, itemname
varchar(40) not null, qty int not null,price double not null)
Einfügen von NOT NULL-Werten in die Tabelle
Sie können Werte wie folgt in die Tabelle einfügen:
Example: [FEHLERHAFTE Abfrage]
db2 insert into shopper.sales(id,itemname,qty)
values(1,'raagi',12)
Output: [Richtige Abfrage]
DB21034E The command was processed as an SQL statement because
it was not a
valid Command Line Processor command. During SQL processing
it returned:
SQL0407N Assignment of a NULL value to a NOT NULL column
"TBSPACEID=5,
TABLEID=4, COLNO=3" is not allowed. SQLSTATE=23502
Example: [Richtige Abfrage]
db2 insert into shopper.sales(id,itemname,qty,price)
values(1,'raagi',12, 120.00)
db2 insert into shopper.sales(id,itemname,qty,price)
values(1,'raagi',12, 120.00)
Output:
DB20000I The SQL command completed successfully.
Einzigartige Einschränkungen
Mit diesen Einschränkungen können Sie die Werte von Spalten eindeutig festlegen. Zu diesem Zweck werden die eindeutigen Einschränkungen zum Zeitpunkt der Tabellenerstellung mit der Einschränkung "nicht null" deklariert.
Syntax:
db2 create table <tab_name>(<col> <col_type> not null unique, ...)
Example:
db2 create table shopper.sales1(id bigint not null unique,
itemname varchar(40) not null, qty int not null,price
double not null)
Einfügen der Werte in die Tabelle
Example: So fügen Sie vier verschiedene Zeilen mit eindeutigen IDs wie 1, 2, 3 und 4 ein.
db2 insert into shopper.sales1(id, itemname, qty, price)
values(1, 'sweet', 100, 89)
db2 insert into shopper.sales1(id, itemname, qty, price)
values(2, 'choco', 50, 60)
db2 insert into shopper.sales1(id, itemname, qty, price)
values(3, 'butter', 30, 40)
db2 insert into shopper.sales1(id, itemname, qty, price)
values(4, 'milk', 1000, 12)
Example: So fügen Sie eine neue Zeile mit dem Wert "id" ein 3
db2 insert into shopper.sales1(id, itemname, qty, price)
values(3, 'cheese', 60, 80)
Output: Wenn Sie versuchen, eine neue Zeile mit vorhandenem ID-Wert einzufügen, wird das folgende Ergebnis angezeigt:
DB21034E The command was processed as an SQL statement
because it was not a
valid Command Line Processor command. During
SQL processing it returned:
SQL0803N One or more values in the INSERT statement,
UPDATE statement, or foreign key update caused by a
DELETE statement are not valid because the primary key,
unique constraint or unique index identified by "1" constrains
table "SHOPPER.SALES1" from having duplicate values for the
index key. SQLSTATE=23505
Primärschlüssel
Ähnlich wie bei den eindeutigen Einschränkungen können Sie eine Einschränkung für "Primärschlüssel" und "Fremdschlüssel" verwenden, um Beziehungen zwischen mehreren Tabellen zu deklarieren.
Syntax:
db2 create table <tab_name>(
,.., primary key ())
Example: Um eine 'Salesboys'-Tabelle mit' sid 'als Primärschlüssel zu erstellen
db2 create table shopper.salesboys(sid int not null, name
varchar(40) not null, salary double not null, constraint
pk_boy_id primary key (sid))
Unbekannter Schlüssel
Ein Fremdschlüssel ist eine Reihe von Spalten in einer Tabelle, die mindestens einem Primärschlüssel einer Zeile in einer anderen Tabelle entsprechen müssen. Es handelt sich um eine referenzielle Einschränkung oder eine referenzielle Integritätsbedingung. Es ist eine logische Regel für Werte in mehreren Spalten in einer oder mehreren Tabellen. Es ermöglicht die erforderliche Beziehung zwischen den Tabellen.
Zuvor haben Sie eine Tabelle mit dem Namen "shopper.salesboys" erstellt. Für diese Tabelle lautet der Primärschlüssel "sid". Jetzt erstellen Sie eine neue Tabelle mit den persönlichen Daten des Vertriebsmitarbeiters mit einem anderen Schema namens "Mitarbeiter" und einer Tabelle mit dem Namen "Salesboys". In diesem Fall ist "sid" der Fremdschlüssel.
Syntax:
db2 create table <tab_name>(<col> <col_type>,constraint
<const_name> foreign key (<col_name>)
reference <ref_table> (<ref_col>)
Example: [So erstellen Sie eine Tabelle mit dem Namen 'salesboys' mit der Fremdschlüsselspalte 'sid']
db2 create table employee.salesboys(
sid int,
name varchar(30) not null,
phone int not null,
constraint fk_boy_id
foreign key (sid)
references shopper.salesboys (sid)
on delete restrict
)
Example: [Einfügen von Werten in die Primärschlüsseltabelle "shopper.salesboys"]
db2 insert into shopper.salesboys values(100,'raju',20000.00),
(101,'kiran',15000.00),
(102,'radha',10000.00),
(103,'wali',20000.00),
(104,'rayan',15000.00)
Example: [Einfügen von Werten in die Fremdschlüsseltabelle "employee.salesboys" [ohne Fehler]]
db2 insert into employee.salesboys values(100,'raju',98998976),
(101,'kiran',98911176),
(102,'radha',943245176),
(103,'wali',89857330),
(104,'rayan',89851130)
Wenn Sie eine unbekannte Nummer eingegeben haben, die nicht in der Tabelle "shopper.salesboys" gespeichert ist, wird ein SQL-Fehler angezeigt.
Example: [Fehlerausführung]
db2 insert into employee.salesboys values(105,'rayan',89851130)
Output:
DB21034E The command was processed as an SQL statement because it
was not a valid Command Line Processor command. During SQL
processing it returned: SQL0530N The insert or update value of
the FOREIGN KEY "EMPLOYEE.SALESBOYS.FK_BOY_ID" is not equal to any
value of the parent key of the parent table. SQLSTATE=23503
Einschränkung überprüfen
Sie müssen diese Einschränkung verwenden, um bedingte Einschränkungen für eine bestimmte Spalte in einer Tabelle hinzuzufügen.
Syntax:
db2 create table
(
primary key (
), constraint
check (condition or condition) )
Example: [To create emp1 table with constraints values]
db2 create table empl
(id smallint not null,
name varchar(9),
dept smallint check (dept between 10 and 100),
job char(5) check (job in ('sales', 'mgr', 'clerk')),
hiredate date,
salary decimal(7,2),
comm decimal(7,2),
primary key (id),
constraint yearsal check (year(hiredate) > 1986 or salary > 40500)
)
Inserting values
You can insert values into a table as shown below:
db2 insert into empl values (1,'lee', 15, 'mgr', '1985-01-01' ,
40000.00, 1000.00)
Dropping the constraint
Let us see the syntaxes for dropping various constraints.
Dropping UNIQUE constraint
Syntax:
db2 alter table <tab_name> drop unique <const_name>
Dropping primary key
Syntax:
db2 alter table <tab_name> drop primary key
Dropping check constraint
Syntax:
db2 alter table <tab_name> drop check <check_const_name>
Dropping foreign key
Syntax:
db2 alter table <tab_name> drop foreigh key <foreign_key_name>
DB2 Indexes
This chapter covers introduction to indexes, their types, creation and dropping.
Introduction
Index is a set of pointers, which can refer to rows in a table, blocks in MDC or ITC tables, XML data in an XML storage object that are logically ordered by the values of one or more keys. It is created on DB2 table columns to speed up the data access for the queries, and to cluster and partition the data efficiently. It can also improve the performance of operation on the view. A table with a unique index can have rows with unique keys. Depending on the table requirements, you can take different types of indexes.
Types of indexes
- Unique and Non-Unique indexes
- Clustered and non-clustered indexes
Creating indexes
For creating unique indexes, you use following syntax:
Syntax:
db2 create unique index <index_name> on
<table_name>(<unique_column>) include (<column_names..>)
Example: To create index for “shopper.sales1” table.
db2 create unique index sales1_indx on
shopper.sales1(id) include (itemname)
Dropping indexes
For dropping the index, you use the following syntax:
Syntax:
db2 create unique index <index_name> on
<table_name>(<unique_column>) include (<column_names..>)
Example:
db2 drop index sales_index
DB2 Triggers
This chapter describes triggers, their types, creation and dropping of the triggers.
Introduction
A trigger is a set of actions, which are performed for responding to an INSERT, UPDATE or DELETE operation on a specified table in the database. Triggers are stored in the database at once. They handle governance of data. They can be accessed and shared among multiple applications. The advantage of using triggers is, if any change needs to be done in the application, it is done at the trigger; instead of changing each application that is accessing the trigger. Triggers are easy to maintain and they enforce faster application development. Triggers are defined using an SQL statement “CREATE TRIGGER”.
Types of triggers
There are two types of triggers:
1. BEFORE triggers
They are executed before any SQL operation.
2. AFTER triggers
They are executed after any SQL operation.
Creating a BEFORE trigger
Let us see how to create a sequence of trigger:
Syntax:
db2 create sequence <seq_name>
Example: Creating a sequence of triggers for table shopper.sales1
db2 create sequence sales1_seq as int start with 1 increment by 1
Syntax:
db2 create trigger <trigger_name> no cascade before insert on
<table_name> referencing new as <table_object> for each row set
<table_object>.<col_name>=nextval for <sequence_name>
Example: Creating trigger for shopper.sales1 table to insert primary key numbers automatically
db2 create trigger sales1_trigger no cascade before insert on
shopper.sales1 referencing new as obj for each row set
obj.id=nextval for sales1_seq
Now try inserting any values:
db2 insert into shopper.sales1(itemname, qty, price)
values('bicks', 100, 24.00)
Retrieving values from table
Let us see how to retrieve values from a table:
Syntax:
db2 select * from <tablename>
Example:
db2 select * from shopper.sales1
Output:
ID ITEMNAME QTY
------- ------------ ----------
3 bicks 100
2 bread 100
2 record(s) selected.
Creating an AFTER trigger
Let us see how to create an after trigger:
Syntax:
db2 create trigger <trigger_name> no cascade before insert on
<table_name> referencing new as <table_object> for each row set
<table_object>.<col_name>=nextval for <sequence_name>
Example: [To insert and retrieve the values]
db2 create trigger sales1_tri_after after insert on shopper.sales1
for each row mode db2sql begin atomic update shopper.sales1
set price=qty*price; end
Output:
//inseting values in shopper.sales1
db2 insert into shopper.sales1(itemname,qty,price)
values('chiken',100,124.00)
//output
ID ITEMNAME QTY PRICE
----- -------------- ----------- -----------
3 bicks 100 2400.00
4 chiken 100 12400.00
2 bread 100 2400.00
3 record(s) selected.
Dropping a trigger
Here is how a database trigger is dropped:
Syntax:
db2 drop trigger <trigger_name>
Example:
db2 drop trigger slaes1_trigger
DB2 - Sequences
This chapter introduces you to the concept of sequence, creation of sequence, viewing the sequence, and dropping them.
Introduction
A sequence is a software function that generates integer numbers in either ascending or descending order, within a definite range, to generate primary key and coordinate other keys among the table. You use sequence for availing integer numbers say, for employee_id or transaction_id. A sequence can support SMALLINT, BIGINT, INTEGER, and DECIMAL data types. A sequence can be shared among multiple applications. A sequence is incremented or decremented irrespective of transactions.
A sequence is created by CREATE SEQUENCE statement.
Types of Sequences
There are two type of sequences available:
NEXTVAL: It returns an incremented value for a sequence number.
PREVIOUS VALUE: It returns recently generated value.
Parameters of sequences
The following parameters are used for sequences:
Data type: This is the data type of the returned incremented value. (SMALLINT, BIGINT, INTEGER, NUMBER, DOUBLE)
START WITH: The reference value, with which the sequence starts.
MINVALUE: A minimum value for a sequence to start with.
MAXVALUE: A maximum value for a sequence.
INCREMENT BY: step value by which a sequence is incremented.
Sequence cycling: the CYCLE clause causes generation of the sequence repeatedly. The sequence generation is conducted by referring the returned value, which is stored into the database by previous sequence generation.
Creating a sequence
You can create sequence using the following syntax:
Syntax:
db2 create sequence <seq_name>
Example: [To create a new sequence with the name ‘sales1_seq’ and increasing values from 1]
db2 create sequence sales1_seq as int start
with 1 increment by 1
Viewing the sequences
You can view a sequence using the syntax given below:
Syntax:
db2 value <previous/next> value for <seq_name>
Example: [To see list of previous updated value in sequence ‘sales1_seq’]
db2 values previous value for sales1_seq
Output:
1
-----------
4
1 record(s) selected.
Dropping the sequence
To remove the sequence, you need to use the “DROP SEQUENCE
” command. Here is how you do it:
Syntax:
db2 drop sequence <seq_name>>
Example: [To drop sequence ‘sales1_seq’ from database]
db2 drop sequence sales1_seq
Output:
DB20000I The SQL command completed successfully.
DB2 Views
This chapter describes introduction of views, creating, modifying and dropping the views.
Introduction
A view is an alternative way of representing the data stored in the tables. It is not an actual table and it does not have any permanent storage. View provides a way of looking at the data in one or more tables. It is a named specification of a result table.
Creating a view
You can create a view using the following syntax:
Syntax:
db2 create view <view_name> (<col_name>,
<col_name1...) as select <cols>..
from <table_name>
Example: Creating view for shopper.sales1 table
db2 create view view_sales1(id, itemname, qty, price)
as select id, itemname, qty, price from
shopper.sales1
Modifying a view
You can modify a view using the following syntax:
Syntax:
db2 alter view <view_name> alter <col_name>
add scope <table_or_view_name>
Example: [To add new table column to existing view ‘view_sales1’]
db2 alter view view_sales1 alter id add
scope shopper.sales1
Dropping the view
You can drop a view using the following syntax:
Syntax:
db2 drop view <view_name>
Example:
db2 drop view sales1_view
DB2 with XML
This chapter describes use of XML with DB2.
Introduction
PureXML feature allows you to store well-formed XML documents in columns of database tables. Those columns have XML database. Data is kept in its native hierarchical form by storing XML data in XML column. The stored XML data can be accessed and managed by DB2 database server functionality. The storage of XML data in its native hierarchical form enables efficient search, retrieval, and update of XML. To update a value in XML data, you need to use XQuery, SQL or combination of both.
Creating a database and table for storing XML data
Create a database by issuing the following syntax:
Syntax:
db2 create database xmldb
By default, databases use UTF-8 (UNICODE) code set. Activate the database and connect to it:
Syntax:
db2 activate db <db_name>
db2 connect to <db_name>
Example:
db2 activate db xmldb
db2 connect to xmldb
Create a well-formed XML file and create a table with data type of the column as ‘XML’. It is mandatory to pass the SQL query containing XML syntax within double quotation marks.
Syntax:
db2 “create table <schema>.<table>(col <datatype>,
col <xml datatype>)”
Example:
db2 "create table shope.books(id bigint not null
primary key, book XML)"
Insert xml values into table, well-formed XML documents are inserted into XML type column using SQL statement ‘INSERT’.
Syntax:
db2 “insert into <table_name> values(value1, value2)”
Example:
db2 "insert into shope.books values(1000, '<catalog>
<book>
<author> Gambardella Matthew</author>
<title>XML Developers Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating application
with XML</description>
</book>
</catalog>')"
Updating XML data in a table
You can update XML data in a table by using the following syntax:
Syntax:
db2 “update <table_name> set <column>=<value> where
<column>=<value>”
Example:
db2 "update shope.books set book='<catalog>
<book>
<author> Gambardella, Matthew</author>
<title>XML Developers Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth XML</description>
</book>
</catalog>' where id=1000"
DB2 - Backup and Recovery
This chapter describes backup and restore methods of database.
Introduction
Backup and recovery methods are designed to keep our information safe. In Command Line Interface (CLI) or Graphical User Interface (GUI) using backup and recovery utilities you can take backup or restore the data of databases in DB2 UDB.
Logging
Log files consist of error logs, which are used to recover from application errors. The logs keep the record of changes in the database. There are two types of logging as described below:
Circular logging
It is a method where the old transaction logs are overwritten when there is a need to allocate a new transaction log file, thus erasing the sequences of log files and reusing them. You are permitted to take only full back-up in offline mode. i.e., the database must be offline to take the full backup.
Archive logging
This mode supports for Online Backup and database recovery using log files called roll forward recovery. The mode of backup can be changed from circular to archive by setting logretain or userexit to ON. For archive logging, backup setting database require a directory that is writable for DB2 process.
Backup
Using Backup command you can take copy of entire database. This backup copy includes database system files, data files, log files, control information and so on.
You can take backup while working offline as well as online.
Offline backup
Syntax: [To list the active applications/databases]
db2 list application
Output:
Auth Id Application Appl. Application Id
DB # of
Name Handle
Name Agents
-------- -------------- ---------- ---------------------
----------------------------------------- -------- -----
DB2INST1 db2bp 39
*LOCAL.db2inst1.140722043938
ONE 1
Syntax: [To force application using app. Handled id]
db2 "force application (39)"
Output:
DB20000I The FORCE APPLICATION command completed
successfully.
DB21024I This command is asynchronous and may not
be effective immediately.
Syntax: [To terminate Database Connection]
db2 terminate
Syntax: [To deactivate Database]
db2 deactivate database one
Syntax: [To take the backup file]
db2 backup database <db_name> to <location>
Example:
db2 backup database one to /home/db2inst1/
Output:
Backup successful. The timestamp for this backup image is :
20140722105345
Online backup
To start, you need to change the mode from Circular logging to Archive Logging.
Syntax: [To check if the database is using circular or archive logging]
db2 get db cfg for one | grep LOGARCH
Output:
First log archive method (LOGARCHMETH1) = OFF
Archive compression for logarchmeth1 (LOGARCHCOMPR1) = OFF
Options for logarchmeth1 (LOGARCHOPT1) =
Second log archive method (LOGARCHMETH2) = OFF
Archive compression for logarchmeth2 (LOGARCHCOMPR2) = OFF
Options for logarchmeth2 (LOGARCHOPT2) =
In the above output, the highlighted values are [logarchmeth1 and logarchmeth2] in off mode, which implies that the current database in “CIRCULLAR LOGGING” mode. If you need to work with ‘ARCHIVE LOGGING’ mode, you need to change or add path in the variables logarchmeth1 and logarchmeth2 present in the configuration file.
Updating logarchmeth1 with required archive directory
Syntax: [To make directories]
mkdir backup
mkdir backup/ArchiveDest
Syntax: [To provide user permissions for folder]
chown db2inst1:db2iadm1 backup/ArchiveDest
Syntax: [To update configuration LOGARCHMETH1]
db2 update database configuration for one using LOGARCHMETH1
'DISK:/home/db2inst1/backup/ArchiveDest'
You can take offline backup for safety, activate the database and connect to it.
Syntax: [To take online backup]
db2 backup database one online to
/home/db2inst1/onlinebackup/ compress include logs
Output:
db2 backup database one online to
/home/db2inst1/onlinebackup/ compress include logs
Verify Backup file using following command:
Syntax:
db2ckbkp <location/backup file>
Example:
db2ckbkp
/home/db2inst1/ONE.0.db2inst1.DBPART000.20140722112743.001
Listing the history of backup files
Syntax:
db2 list history backup all for one
Output:
List History File for one
Number of matching file entries = 4
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log
Backup ID
-- --- ------------------ ---- --- ------------ ------------
--------------
B D 20140722105345001 F D S0000000.LOG S0000000.LOG
------------------------------------------------------------
----------------
Contains 4 tablespace(s):
00001 SYSCATSPACE
00002 USERSPACE1
00003 SYSTOOLSPACE
00004 TS1
------------------------------------------------------------
----------------
Comment: DB2 BACKUP ONE OFFLINE
Start Time: 20140722105345
End Time: 20140722105347
Status: A
------------------------------------------------------------
----------------
EID: 3 Location: /home/db2inst1
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log
Backup ID
-- --- ------------------ ---- --- ------------ ------------
--------------
B D 20140722112239000 N S0000000.LOG S0000000.LOG
------------------------------------------------------------
-------------------------------------------------------------
-------------------------------
Comment: DB2 BACKUP ONE ONLINE
Start Time: 20140722112239
End Time: 20140722112240
Status: A
------------------------------------------------------------
----------------
EID: 4 Location:
SQLCA Information
sqlcaid : SQLCA sqlcabc: 136 sqlcode: -2413 sqlerrml: 0
sqlerrmc:
sqlerrp : sqlubIni
sqlerrd : (1) 0 (2) 0 (3) 0
(4) 0 (5) 0 (6) 0
sqlwarn : (1) (2) (3) (4) (5) (6)
(7) (8) (9) (10) (11)
sqlstate:
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log
Backup ID
-- --- ------------------ ---- --- ------------ ------------
--------------
B D 20140722112743001 F D S0000000.LOG S0000000.LOG
------------------------------------------------------------
----------------
Contains 4 tablespace(s):
00001 SYSCATSPACE
00002 USERSPACE1
00003 SYSTOOLSPACE
00004 TS1
-------------------------------------------------------------
----------------
Comment: DB2 BACKUP ONE OFFLINE
Start Time: 20140722112743
End Time: 20140722112743
Status: A
-------------------------------------------------------------
----------------
EID: 5 Location: /home/db2inst1
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log
Backup ID
-------------------------------------------------------------
----------------
R D 20140722114519001 F
20140722112743
------------------------------------------------------------
----------------
Contains 4 tablespace(s):
00001 SYSCATSPACE
00002 USERSPACE1
00003 SYSTOOLSPACE
00004 TS1
------------------------------------------------------------
----------------
Comment: RESTORE ONE WITH RF
Start Time: 20140722114519
End Time: 20140722115015
Status: A
------------------------------------------------------------
----------------
EID: 6 Location:
Restoring the database from backup
To restore the database from backup file, you need to follow the given syntax:
Syntax:
db2 restore database <db_name> from <location>
taken at <timestamp>
Example:
db2 restore database one from /home/db2inst1/ taken at
20140722112743
Output:
SQL2523W Warning! Restoring to an existing database that is
different from
the database on the backup image, but have matching names.
The target database
will be overwritten by the backup version. The Roll-forward
recovery logs
associated with the target database will be deleted.
Do you want to continue ? (y/n) y
DB20000I The RESTORE DATABASE command completed successfully.
Roll forward all the logs located in the log directory, including latest changes just before the disk drive failure.
Syntax:
db2 rollforward db <db_name> to end of logs and stop
Example:
db2 rollforward db one to end of logs and stop
Output:
Rollforward Status
Input database alias = one
Number of members have returned status = 1
Member ID = 0
Rollforward status = not pending
Next log file to be read =
Log files processed = S0000000.LOG -
S0000001.LOG
Last committed transaction = 2014-07-22-
06.00.33.000000 UTC
DB20000I The ROLLFORWARD command completed successfully.
DB2 - Database Security
This chapter describes database security.
Introduction
DB2 database and functions can be managed by two different modes of security controls:
- Authentication
- Authorization
Authentication
Authentication is the process of confirming that a user logs in only in accordance with the rights to perform the activities he is authorized to perform. User authentication can be performed at operating system level or database level itself. By using authentication tools for biometrics such as retina and figure prints are in use to keep the database from hackers or malicious users.
The database security can be managed from outside the db2 database system. Here are some type of security authentication process:
- Based on Operating System authentications.
- Lightweight Directory Access Protocol (LDAP)
For DB2, the security service is a part of operating system as a separate product. For Authentication, it requires two different credentials, those are userid or username, and password.
Authorization
You can access the DB2 Database and its functionality within the DB2 database system, which is managed by the DB2 Database manager. Authorization is a process managed by the DB2 Database manager. The manager obtains information about the current authenticated user, that indicates which database operation the user can perform or access.
Here are different ways of permissions available for authorization:
Primary permission: Grants the authorization ID directly.
Secondary permission: Grants to the groups and roles if the user is a member
Public permission: Grants to all users publicly.
Context-sensitive permission: Grants to the trusted context role.
Authorization can be given to users based on the categories below:
- System-level authorization
- System administrator [SYSADM]
- System Control [SYSCTRL]
- System maintenance [SYSMAINT]
- System monitor [SYSMON]
Authorities provide of control over instance-level functionality. Authority provide to group privileges, to control maintenance and authority operations. For instance, database and database objects.
- Database-level authorization
- Security Administrator [SECADM]
- Database Administrator [DBADM]
- Access Control [ACCESSCTRL]
- Data access [DATAACCESS]
- SQL administrator. [SQLADM]
- Workload management administrator [WLMADM]
- Explain [EXPLAIN]
Authorities provide controls within the database. Other authorities for database include with LDAD and CONNECT.
- Object-Level Authorization: Object-Level authorization involves verifying privileges when an operation is performed on an object.
- Content-based Authorization: User can have read and write access to individual rows and columns on a particular table using Label-based access Control [LBAC].
DB2 tables and configuration files are used to record the permissions associated with authorization names. When a user tries to access the data, the recorded permissions verify the following permissions:
- Authorization name of the user
- Which group belongs to the user
- Which roles are granted directly to the user or indirectly to a group
- Permissions acquired through a trusted context.
While working with the SQL statements, the DB2 authorization model considers the combination of the following permissions:
- Permissions granted to the primary authorization ID associated with the SQL statements.
- Secondary authorization IDs associated with the SQL statements.
- Granted to PUBLIC
- Granted to the trusted context role.
Instance level authorities
Let us discuss some instance related authorities.
System administration authority (SYSADM)
It is highest level administrative authority at the instance-level. Users with SYSADM authority can execute some databases and database manager commands within the instance. Users with SYSADM authority can perform the following operations:
- Upgrade a Database
- Restore a Database
- Update Database manager configuration file.
System control authority (SYSCTRL)
It is the highest level in System control authority. It provides to perform maintenance and utility operations against the database manager instance and its databases. These operations can affect system resources, but they do not allow direct access to data in the database.
Users with SYSCTRL authority can perform the following actions:
- Updating the database, Node, or Distributed Connect Service (DCS) directory
- Forcing users off the system-level
- Creating or Dropping a database-level
- Creating, altering, or dropping a table space
- Using any table space
- Restoring Database
System maintenance authority (SYSMAINT)
It is a second level of system control authority. It provides to perform maintenance and utility operations against the database manager instance and its databases. These operations affect the system resources without allowing direct access to data in the database. This authority is designed for users to maintain databases within a database manager instance that contains sensitive data.
Only Users with SYSMAINT or higher level system authorities can perform the following tasks:
- Taking backup
- Restoring the backup
- Roll forward recovery
- Starting or stopping instance
- Restoring tablespaces
- Executing db2trc command
- Taking system monitor snapshots in case of an Instance level user or a database level user.
A user with SYSMAINT can perform the following tasks:
- Query the state of a tablespace
- Updating log history files
- Reorganizing of tables
- Using RUNSTATS (Collection catalog statistics)
System monitor authority (SYSMON)
With this authority, the user can monitor or take snapshots of database manager instance or its database. SYSMON authority enables the user to run the following tasks:
- GET DATABASE MANAGER MONITOR SWITCHES
- GET MONITOR SWITCHES
- GET SNAPSHOT
- LIST
- LIST ACTIVE DATABASES
- LIST APPLICATIONS
- LIST DATABASE PARTITION GROUPS
- LIST DCS APPLICATIONS
- LIST PACKAGES
- LIST TABLES
- LIST TABLESPACE CONTAINERS
- LIST TABLESPACES
- LIST UTITLITIES
- RESET MONITOR
- UPDATE MONITOR SWITCHES
Database authorities
Each database authority holds the authorization ID to perform some action on the database. These database authorities are different from privileges. Here is the list of some database authorities:
ACCESSCTRL: allows to grant and revoke all object privileges and database authorities.
BINDADD: Allows to create a new package in the database.
CONNECT: Allows to connect to the database.
CREATETAB: Allows to create new tables in the database.
CREATE_EXTERNAL_ROUTINE: Allows to create a procedure to be used by applications and the users of the databases.
DATAACCESS: Allows to access data stored in the database tables.
DBADM: Act as a database administrator. It gives all other database authorities except ACCESSCTRL, DATAACCESS, and SECADM.
EXPLAIN: Allows to explain query plans without requiring them to hold the privileges to access the data in the tables.
IMPLICIT_SCHEMA: Allows a user to create a schema implicitly by creating an object using a CREATE statement.
LOAD: Allows to load data into table.
QUIESCE_CONNECT: Allows to access the database while it is quiesce (temporarily disabled).
SECADM: Allows to act as a security administrator for the database.
SQLADM: Allows to monitor and tune SQL statements.
WLMADM: Allows to act as a workload administrator
Privileges
SETSESSIONUSER
Authorization ID privileges involve actions on authorization IDs. There is only one privilege, called the SETSESSIONUSER privilege. It can be granted to user or a group and it allows to session user to switch identities to any of the authorization IDs on which the privileges are granted. This privilege is granted by user SECADM authority.
Schema privileges
This privileges involve actions on schema in the database. The owner of the schema has all the permissions to manipulate the schema objects like tables, views, indexes, packages, data types, functions, triggers, procedures and aliases. A user, a group, a role, or PUBLIC can be granted any user of the following privileges:
- CREATEIN: allows to create objects within the schema
- ALTERIN: allows to modify objects within the schema.
DROPIN
This allows to delete the objects within the schema.
Tablespace privileges
These privileges involve actions on the tablespaces in the database. User can be granted the USE privilege for the tablespaces. The privileges then allow them to create tables within tablespaces. The privilege owner can grant the USE privilege with the command WITH GRANT OPTION on the tablespace when tablespace is created. And SECADM or ACCESSCTRL authorities have the permissions to USE privileges on the tablespace.
Table and view privileges
The user must have CONNECT authority on the database to be able to use table and view privileges. The privileges for tables and views are as given below:
CONTROL
It provides all the privileges for a table or a view including drop and grant, revoke individual table privileges to the user.
ALTER
It allows user to modify a table.
DELETE
It allows the user to delete rows from the table or view.
INDEX
It allows the user to insert a row into table or view. It can also run import utility.
REFERENCES
It allows the users to create and drop a foreign key.
SELECT
It allows the user to retrieve rows from a table or view.
UPDATE
It allows the user to change entries in a table, view.
Package privileges
User must have CONNECT authority to the database. Package is a database object that contains the information of database manager to access data in the most efficient way for a particular application.
CONTROL
It provides the user with privileges of rebinding, dropping or executing packages. A user with this privileges is granted to BIND and EXECUTE privileges.
BIND
It allows the user to bind or rebind that package.
EXECUTE
Allows to execute a package.
Index privileges
This privilege automatically receives CONTROL privilege on the index.
Sequence privileges
Sequence automatically receives the USAGE and ALTER privileges on the sequence.
Routine privileges
It involves the action of routines such as functions, procedures, and methods within a database.
DB2 - Roles
Introduction
A role is a database object that groups multiple privileges that can be assigned to users, groups, PUBLIC or other roles by using GRANT statement.
Restrictions on roles
- A role cannot own database objects.
- Permissions and roles granted to groups are not considered when you create the following database objects.
- Package Containing static SQL
- Views
- Materialized Query Tables (MQT)
- Triggers
- SQL Routines
Creating and granting membership in roles
Syntax: [To create a new role]
db2 create role <role_name>
Example: [To create a new role named ‘sales’ to add some table to be managed by some user or group]
db2 create role sales
Output:
DB20000I The SQL command completed successfully.
Granting role from DBADM to a particular table
Syntax: [To grant permission of a role to a table]
db2 grant select on table <table_name> to role <role_name>
Example: [To add permission to manage a table ‘shope.books’ to role ‘sales’]
db2 grant select on table shope.books to role sales
Output:
DB20000I The SQL command completed successfully.
Security administrator grants role to the required users. (Before you use this command, you need to create the users.)
Syntax: [To add users to a role]
db2 grant role <role_name> to user <username>
Example: [To add a user ‘mastanvali’ to a role ‘sales’]
db2 grant sales to user mastanvali
Output:
DB20000I The SQL command completed successfully.
Role hierarchies
For creating a hierarchies for roles, each role is granted permissions/ membership with another role.
Syntax: [before this syntax create a new role with name of “production”]
db2 grant role <roll_name> to role <role_name>
Example: [To provide permission of a role ‘sales’ to another role ‘production’]
db2 grant sales to role production
DB2 - LDAP
Introduction
LDAP is Lightweight Directory Access Protocol. LDAP is a global directory service, industry-standard protocol, which is based on client-server model and runs on a layer above the TCP/IP stack. The LDAP provides a facility to connect to, access, modify, and search the internet directory.
The LDAP servers contain information which is organized in the form of a directory tree. The clients ask server to provide information or to perform some operation on a particular information. The server answers the client by providing required information if it has one, or it refers the client to another server for action on required information. The client then acquires the desired information from another server.
The tree structure of directory is maintained same across all the participating servers. This is a prominent feature of LDAP directory service. Hence, irrespective of which server is referred to by the client, the client always gets required information in an error-free manner. Here, we use LDAP to authenticate IBM DB2 as a replacement of operating system authentication.
There are two types of LDAP:
- Transparent
- Plug-in
Let us see how to configure a transparent LDAP.
Configuring transparent LDAP
To start with configuration of transparent LDAP, you need to configure the LDAP server.
LDAP server configuration
Create a SLAPD.conf file, which contains all the information about users and group object in the LDAP. When you install LDAP server, by default it is configured with basic LDAP directory tree on your machine.
The table shown below indicates the file configuration after modification.
The text highlighted with yellow the code box means for the following:
DBA user-id = “db2my1”, group = “db1my1adm”, password= “db2my1” Admin user-id = “my1adm”, group = “dbmy1ctl”.
# base dn: example.com
dn: dc=example,dc=com
dc: example
o: example
objectClass: organization
objectClass: dcObject
# pc box db
dn: dc=db697,dc=example,dc=com
dc: db697
o: db697
objectClass: organization
objectClass: dcObject
#
# Group: db
adm
#
dn: cn=dbmy1adm,dc=db697,dc=example,dc=com
cn: dbmy1adm
objectClass: top
objectClass: posixGroup
gidNumber: 400
objectClass: groupOfNames
member: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com
memberUid: db2my1
#
# User: db2
# dn: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com cn: db2my1 sn: db2my1 uid: db2my1 objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 400 gidNumber: 400 loginShell: /bin/csh homeDirectory: /db2/db2my1 # # Group: db
ctl # dn: cn=dbmy1ctl,dc=db697,dc=example,dc=com cn: dbmy1ctl objectClass: top objectClass: posixGroup gidNumber: 404 objectClass: groupOfNames member: uid=my1adm,cn=dbmy1adm,dc=db697,dc=example,dc=com memberUid: my1adm # # User:
adm # dn: uid=my1adm,cn=dbmy1ctl,dc=db697,dc=example,dc=com cn: my1adm sn: my1adm uid: my1adm objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 404 gidNumber: 404 loginShell: /bin/csh homeDirectory: /home/my1adm
Save the above file with name ‘/var/lib/slapd.conf’, then execute this file by following command to add these values into LDAP Server. This is a linux command; not a db2 command.
ldapadd r- -D ‘cn=Manager,dc=example,dc=com” –W –f
/var/lib/slapd.conf
After registering the DB2 users and the DB2 group at the LDAP Server, logon to the particular user where you have installed instance and database. You need to configure LDAP client to confirm to client where your server is located, be it remote or local.
LDAP client configuration
The LDAP Client configuration is saved in the file ‘ldap.conf’. There are two files available for configuration parameters, one is common and the other is specific. You should find the first one at ‘/etc/ldap.conf’ and the latter is located at ‘/etc/openldap/ldap.conf’.
The following data is available in common LDAP client configuration file
# File: /etc/ldap.conf
# The file contains lots of more entries and many of them
# are comments. You show only the interesting values for now
host localhost
base dc=example,dc=com
ldap_version 3
pam_password crypt
pam_filter objectclass=posixAccount
nss_map_attribute uniqueMember member
nss_base_passwd dc=example,dc=com
nss_base_shadow dc=example,dc=com
nss_base_group dc=example,dc=com
You need to change the location of server and domain information according to the DB2 configuration. If we are using server in same system then mention it as ‘localhost’ at ‘host’ and at ‘base’ you can configure which is mentioned in ‘SLAPD.conf’ file for LDAP server.
Pluggable Authentication Model (PAM) is an API for authentication services. This is common interface for LDAP authentication with an encrypted password and special LDAP object of type posixAccount. All LDAP objects of this type represent an abstraction of an account with portable Operating System Interface (POSIX) attributes.
Network Security Services (NSS) is a set of libraries to support cross-platform development of security-enabled client and server applications. This includes libraries like SSL, TLS, PKCS S/MIME and other security standards.
You need to specify the base DN for this interface and two additional mapping attributes. OpenLDAP client configuration file contains the entries given below:
host localhost
base dc=example,dc=com
Till this you just define the host of LDAP serve and the base DN.
Validating OpenLDAP environment
After you configured your LDAP Server and LDAP Client, verify both for communication.
Step1: Check your Local LDAP server is running. Using below command:
ps -ef | grep -i ldap
This command should list the LDAP deamon which represents your LDAP server:
/usr/lib/openldap/slapd -h ldap:/// -u ldap -g ldap -o slp=on
This indicates that you LDAP server is running and is waiting for request from clients. If there is no such process for previous commands you can start LDAP server with the ’rcldap’ command.
rcldap start
When the server starts, you can monitor this in the file ‘/var/log/messages/ by issuing the following command.
tail –f /var/log/messages
Testing connection to LDAP server with ldapsearch
The ldapsearch command opens a connection to an LDAP server, binds to it and performs a search query which can be specified by using special parameters ‘-x’ connect to your LDAP server with a simple authentication mechanism by using the –x parameter instead of a more complex mechanism like Simple Authentication and Security Layer (SASL)
ldapsearch –x
LDAP server should reply with a response given below, containing all of your LDAP entries in a LDAP Data Interchange Format(LDIF).
# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
# example.com
dn: dc=example,
dc=com dc: example
o: example
objectClass: organization
objectClass: dcObject
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
Configuring DB2
After working with LDAP server and client, you need to configure our DB2 database for use with LDAP. Let us discuss, how you can install and configure your database to use our LDAP environment for the DB2 user authentication process.
Configuring DB2 and LDAP interaction plug-ins
IBM provides a free package with LDAP plug-ins for DB2. The DB2 package includes three DB2 security plug-ins for each of the following:
- server side authentication
- client side authentication
- group lookup
Depending upon your requirements, you can use any of the three plug-ins or all of them. This plugin do not support environments where some users are defined in LDAP and others in the operating Systems. If you decide to use the LDAP plug-ins, you need to define all users associated with the database in the LDAP server. The same principle applies to the group plug-in.
You have to decide which plug-ins are mandatory for our system. The client authentication plug-ins used in scenarios where the user ID and the password validation supplied on a CONNECT or ATTACH statement occurs on the client system. So the database manager configuration parameters SRVCON_AUTH or AUTHENTICATION need to be set to the value CLIENT. The client authentication is difficult to secure and is not generally recommended. Server plug-in is generally recommended because it performs a server side validation of user IDs and passwords, if the client executes a CONNECT or ATTACH statement and this is secure way. The server plug-in also provides a way to map LDAP user IDs DB2 authorization IDs.
Now you can start installation and configuration of the DB2 security plug-ins, you need to think about the required directory information tree for DB2. DB2 uses indirect authorization which means that a user belongs to a group and this group was granted with fewer authorities. You need to define all DB2 users and DB2 groups in LDAP directory.
Image
The LDIF file openldap.ldif should contain the code below:
#
# LDAP root object
# example.com
#
dn: dc=example,
dc=com
dc: example
o: example
objectClass: organization
objectClass: dcObject
#
# db2 groups
#
dn: cn=dasadm1,dc=example,dc=com
cn: dasadm1
objectClass: top
objectClass: posixGroup
gidNumber: 300
objectClass: groupOfNames
member: uid=dasusr1,cn=dasadm1,dc=example,dc=com
memberUid: dasusr1
dn: cn=db2grp1,dc=example,dc=com
cn: db2grp1
objectClass: top
objectClass: posixGroup
gidNumber: 301
objectClass: groupOfNames
member: uid=db2inst2,cn=db2grp1,dc=example,dc=com memberUid: db2inst2
dn: cn=db2fgrp1,dc=example,dc=com
cn: db2fgrp1
objectClass: top
objectClass: posixGroup
gidNumber: 302
objectClass: groupOfNames
member: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com
memberUid: db2fenc1
#
# db2 users
#
dn: uid=dasusr1,
cn=dasadm1,
dc=example,dc=com
cn: dasusr1
sn: dasusr1
uid: dasusr1
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uidNumber: 300
gidNumber: 300
loginShell: /bin/bash
homeDirectory: /home/dasusr1
dn: uid=db2inst2,cn=db2grp1,dc=example,dc=com
cn: db2inst2
sn: db2inst2
uid: db2inst2
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uidNumber: 301
gidNumber: 301
loginShell: /bin/bash
homeDirectory: /home/db2inst2
dn: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com
cn: db2fenc1
sn: db2fenc1
uid: db2fenc1
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uidNumber: 303
gidNumber: 303
loginShell: /bin/bash
homeDirectory: /home/db2fenc1
Create a file named ‘db2.ldif’ and paste the above example into it. Using this file, add the defined structures to your LDAP directory.
To add the DB2 users and DB2 groups to the LDAP directory, you need to bind the user as ‘rootdn’ to the LDAP server in order to get the exact privileges.
Execute the following syntaxes to fill the LDAP information directory with all our objects defined in the LDIF file ‘db2.ldif’
ldapadd –x –D “cn=Manager, dc=example,dc=com” –W –f <path>/db2.ldif
Perform the search result with more parameter
ldapsearch –x |more
Preparing file system for DB2 usage
Creating instance for our LDAP user db2inst2. This user requires home directory with two empty files inside the home directory. Before you create a new instance, you need to create a user who will be the owner of the instance.
After creating the instance user, you should have to create the file ‘.profile’ and ‘.login’ in user home directory, which will be modified by DB2. To create this file in the directory, execute the following command:
mkdir /home/db2inst2
mkdir /home/db2inst2/.login
mkdir /home/db2inst2/.profile
You have registered all users and groups related with DB2 in LDAP directory, now you can create an instance with the name ‘db2inst2’ with the instance owner id ‘db2inst2’ and use the fenced user id ‘db2fenc1’, which is needed for running user defined functions (UDFs)or stored procedures.
/opt/ibm/db2/V10.1/instance/db2icrt –u db2fenc1 db2inst2
DBI1070I Program db2icrt completed successfully.
Now check the instance home directory. You can see new sub-directory called ‘sqllib’ and the .profile and .login files customized for DB2 usage.
Configuring authentication public-ins for LDAP support in DB2
Copy the required LDAP plug-ins to the appropriate DB2 directory:
cp /
/
/v10/IBMLDAPauthserver.so /home/db2inst2/sqllib/security
/plugin/server/. cp /
/
/v10/IBMLDAPgroups.so /home/db2inst2/sqllib/security
/plugin/group/.
Once the plug-ins are copied to the specified directory, you toned to login to DB2 instance owner and change the database manager configuration to use these plug-ins.
Su – db2inst2
db2inst2> db2 update dbm cfg using svrcon_pw_plugin
IBMLDAPauthserver
db2inst2> db2 update dbm cfg using group_plugin
IBMLDAPgroups
db2inst2> db2 update dbm cfg using authentication
SERVER_ENCRYPT
db2inst2> db2stop
db2inst2> db2start
This modification comes into effect after you start DB2 instance. After restarting the instance, you need to install and configure the main DB2 LDAP configuration file named “IBMLDAPSecurity.ini” to make DB2 plug-ins work with the current LDAP configuration.
IBMLDAPSecurity.ini file contains
;-----------------------------------------------------------
; SERVER RELATED VALUES
;-----------------------------------------------------------
; Name of your LDAP server(s).
; This is a space separated list of LDAP server addresses,
; with an optional port number for each one:
; host1[:port] [host2:[port2] ... ]
; The default port number is 389, or 636 if SSL is enabled.
LDAP_HOST = my.ldap.server
;-----------------------------------------------------------
; USER RELATED VALUES
;-----------------------------------------------------------
rs
; LDAP object class used for use USER_OBJECTCLASS = posixAccount
; LDAP user attribute that represents the "userid"
; This attribute is combined with the USER_OBJECTCLASS and
; USER_BASEDN (if specified) to construct an LDAP search
; filter when a user issues a DB2 CONNECT statement with an
; unqualified userid. For example, using the default values
; in this configuration file, (db2 connect to MYDB user bob
; using bobpass) results in the following search filter:
OrgPerson)(uid=bob)
; &(objectClass=inet USERID_ATTRIBUTE = uid
representing the DB2 authorization ID
; LDAP user attribute, AUTHID_ATTRIBUTE = uid
;-----------------------------------------------------------
; GROUP RELATED VALUES
;-----------------------------------------------------------
ps
; LDAP object class used for grou GROUP_OBJECTCLASS = groupOfNames
at represents the name of the group
; LDAP group attribute th GROUPNAME_ATTRIBUTE = cn
; Determines the method used to find the group memberships
; for a user. Possible values are:
; SEARCH_BY_DN - Search for groups that list the user as
; a member. Membership is indicated by the
; group attribute defined as
; GROUP_LOOKUP_ATTRIBUTE.
; USER_ATTRIBUTE - A user's groups are listed as attributes
; of the user object itself. Search for the
; user attribute defined as
TRIBUTE to get the groups.
; GROUP_LOOKUP_AT GROUP_LOOKUP_METHOD = SEARCH_BY_DN
; GROUP_LOOKUP_ATTRIBUTE
; Name of the attribute used to determine group membership,
; as described above.
llGroups
; GROUP_LOOKUP_ATTRIBUTE = ibm-a GROUP_LOOKUP_ATTRIBUTE = member
Now locate the file IBMLDAPSecurity.ini file in the current instance directory. Copy the above sample contents into the same.
Cp
/
/db2_ldap_pkg/IBMLDAPSecurity.ini
/home/db2inst2/sqllib/cfg/
Now you need to restart your DB2 instance, using two syntaxes given below:
db2inst2> db2stop
Db2inst2> db2start
At this point, if you try ‘db2start’ command, you will get security error message. Because, DB2 security configuration is not yet correctly configured for your LDAP environment.
Customizing both configurations
Keep LDAP_HOST name handy, which is configured in slapd.conf file.
Now edit IMBLDAPSecurity.ini file and type the LDAP_HOST name. The LDAP_HOST name in both the said files must be identical.
The contents of file are as shown below:
;-----------------------------------------------------------
; SERVER RELATED VALUES
;-----------------------------------------------------------
LDAP_HOST = localhost
;-----------------------------------------------------------
; USER RELATED VALUES
----------------------------
;-------------------------------
USER_OBJECTCLASS = posixAccount
USER_BASEDN = dc=example,dc=com
USERID_ATTRIBUTE = uid
AUTHID_ATTRIBUTE = uid
;-----------------------------------------------------------
; GROUP RELATED VALUES
;-----------------------------------------------------------
GROUP_OBJECTCLASS = groupOfNames
GROUP_BASEDN = dc=example,dc=com
GROUPNAME_ATTRIBUTE = cn
GROUP_LOOKUP_METHOD = SEARCH_BY_DN
GROUP_LOOKUP_ATTRIBUTE = member
After changing these values, LDAP immediately takes effect and your DB2 environment with LDAP works perfectly.
You can logout and login again to ‘db2inst2’ user.
Now your instance is working with LDAP directory.
Next Page