Wenn Sie eine Datenbank aktivieren, führt der Extender folgende Aktionen aus:
Beim Aktivieren einer Datenbank müssen Sie außerdem Tabellenbereiche angeben, die die Tabellen zur Verwaltungsunterstützung (und deren Indizes) für die Datenbank halten sollen. Für einen oder mehrere der Tabellenbereiche kann ein Nullwert angegeben werden. In diesem Fall wird ein Standardtabellenbereich verwendet.
Zum Aktivieren einer Datenbank benötigen Sie DBA-Berechtigung.
Nur EEE: Beim Aktivieren einer Datenbank für einen Extender in einer partitionierten Umgebung sollte der angegebene Tabellenbereich in einer Knotengruppe definiert sein, die alle Knoten im partitionierten Datenbanksystem umfaßt. Außerdem sollte sich der Tabellenbereich in derselben Knotengruppe befinden wie die Benutzertabelle.
In den folgenden Beispielen wird eine Datenbank zum Halten von Abbilddaten aktiviert, wobei der Standardtabellenbereich verwendet wird.
Verwendung der API: Der Code in der folgenden Abbildung stellt eine Verbindung zu einer bestehenden Datenbank her, bevor sie aktiviert wird. Dieses Beispiel ist unter Verwendung der DB2 Call Level Interface geschrieben. Es enthält unter anderem Definitions- und Fehlerprüfcode. Das vollständige Beispielprogramm befindet sich in der Datei ENABLE.C im Unterverzeichnis SAMPLES.
Abbildung 10. Beispielcode, mit dem eine Datenbank aktiviert wird
/*---- Set-up ----------------------------------------------------*/ #include <stdio.h> #include <stlib.h> #include <string.h> #include "dmbimage.h" /* image extender function prototypes (DBi) */ #include "utility.h" /* utility functions */ #define MMDB_ERROR_MSG_TEXT_LEN 1000 int main(int argc, char *argv[]) { SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbc = SQL_NULL_HDBC; SQLHSTMT hstmt = SQL_NULL_HSTMT; SQLCHAR *uid, *pwd; SQLCHAR server[SQL_MAX_DSN_LENGTH]; SQLCHAR buffer[500]; SQLCHAR szCreate[] = "CREATE TABLE %s (%s mmdbsys.DB2Image, name varchar(25), address varchar(25), jobtitle char(11), dept char(10), salary char(10))"; SQLRETURN rc = SQL_SUCCESS; SQLINTEGER sqlcode = 0; char errorMsgText[MMDB_ERROR_MSG_TEXT_LEN+1]; char dbName[18+1]; char tableName[8+18+1] = "employee"; char imageColumn[18+1] = "picture"; char *step; if (argc < 3) { printf("Usage: %s <dbname> <userid> <password>\n", argv[0]); exit(1); } else { strcpy(dbName, argv[1]); uid = (SQLCHAR*) argv[2]; pwd = (SQLCHAR*) argv[3]; } /*---- Connect to the database. -------------------------------------*/ strcpy((char*) server, dbName); rc = cliInitialize(&henv, &hdbc, server, uid, pwd); cliCheckError(henv, hdbc, SQL_NULL_HSTMT, rc); if (rc < 0) goto ERROR; /****** Enable the database. *******************************************/ printf("%s: Enabling database......\n", argv[0]); printf("%s: This may take a few minutes, please wait......\n", argv[0]); step="DBiEnableDatabase with NULL tablespace"; rc = DBiEnableDatabase(NULL); if (rc < 0) { printf("%s: %s failed!\n", argv[0], step); printMsg(rc); DBiGetError(&sqlcode, errorMsgText); printf("sqlcode=%i, errorMsgText=%s\n", sqlcode, errorMsgText);} else if (rc > 0) { printf("%s: %s, warning detected.\n", argv[0], step); printMsg(rc); DBiGetError(&sqlcode, errorMsgText); printf("sqlcode=%i, errorMsgText=%s\n", sqlcode, errorMsgText); } else printf("%s: %s OK\n", argv[0], step); |
Verwendung der db2ext-Befehlszeile: In diesem Beispiel besteht bereits eine Verbindung zur Datenbank.
enable database for db2image