[comment]: # ({cd592738-68c88a1c})
# 8 Datenbankmonitor

[comment]: # ({/cd592738-68c88a1c})

[comment]: # ({52947967-b5170fd3})
#### Übersicht

Der *Database monitor*-Datenpunkttyp im Zabbix-Frontend wird für die ODBC-Überwachung (ODBC-Prüfungen) verwendet.

ODBC ist eine Middleware-API in der Programmiersprache C für den Zugriff auf Datenbankmanagementsysteme (DBMS).
Das ODBC-Konzept wurde von Microsoft entwickelt und später auf andere Plattformen portiert.

Zabbix kann jede Datenbank abfragen, die von ODBC unterstützt wird.
Dazu stellt Zabbix keine direkte Verbindung zu den Datenbanken her, sondern verwendet die ODBC-Schnittstelle und die in ODBC eingerichteten Treiber.
Dies ermöglicht eine effizientere Überwachung verschiedener Datenbanken für mehrere Zwecke (zum Beispiel das Prüfen bestimmter Datenbankwarteschlangen, Nutzungsstatistiken usw.).

Zabbix unterstützt unixODBC, eine der am häufigsten verwendeten Open-Source-Implementierungen der ODBC-API.

::: noteimportant
Siehe auch: [bekannte Probleme](/manual/installation/known_issues#odbc-checks) für ODBC-Prüfungen.
:::

[comment]: # ({/52947967-b5170fd3})

[comment]: # ({47a0f71f-bf6fd8ba})
#### Installation von unixODBC

Die empfohlene Methode zur Installation von unixODBC ist die Verwendung der standardmäßigen Paket-Repositories des Linux-Betriebssystems.
In den gängigsten Linux-Distributionen ist unixODBC standardmäßig im Paket-Repository enthalten.
Falls keine Pakete verfügbar sind, können die Quelldateien auf der unixODBC-Homepage bezogen werden: <http://www.unixodbc.org/download.html>.

Verwenden Sie zur Installation von unixODBC den Paketmanager des Systems Ihrer Wahl:

```bash
# Für Ubuntu/Debian-Systeme:
apt install unixodbc unixodbc-dev

# Für RedHat/Fedora-basierte Systeme:
dnf install unixODBC unixODBC-devel

# Für SUSE-basierte Systeme:
zypper in unixODBC-devel
```

::: noteimportant
Das Paket `unixodbc-dev` oder `unixODBC-devel` ist erforderlich, um Zabbix mit unixODBC-Unterstützung zu kompilieren.
Um die ODBC-Unterstützung zu aktivieren, sollte Zabbix mit der folgenden [Konfigurationsoption](/manual/installation/install/sources#configure-the-sources) kompiliert werden:
<br><br>

    --with-unixodbc[=ARG] # ODBC-Treiber mit dem unixODBC-Paket verwenden.

:::

[comment]: # ({/47a0f71f-bf6fd8ba})

[comment]: # ({07af6a39-eea09ed7})
#### Installation von unixODBC-Treibern

Der unixODBC-Datenbanktreiber sollte für die Datenbank installiert werden, die überwacht wird.
Eine Liste der unterstützten Datenbanken und Treiber finden Sie auf der unixODBC-Homepage: <http://www.unixodbc.org/drivers.html>.

::: noteclassic
In einigen Linux-Distributionen sind Datenbanktreiber in Paket-Repositories enthalten.
:::

[comment]: # ({/07af6a39-eea09ed7})

[comment]: # ({d49fdb52-e1911043})
##### MySQL

Um den MySQL-unixODBC-Datenbanktreiber zu installieren, verwenden Sie den Paketmanager des Systems Ihrer Wahl:

```bash
# Für Ubuntu-/Debian-Systeme:
apt install odbc-mariadb

# Für RedHat-/Fedora-basierte Systeme:
dnf install mariadb-connector-odbc

# Für SUSE-basierte Systeme:
zypper install mariadb-connector-odbc
```

Um den Datenbanktreiber ohne Paketmanager zu installieren, lesen Sie bitte die [MySQL-Dokumentation](https://dev.mysql.com/downloads/connector/odbc/) für `mysql-connector-odbc` oder die [MariaDB-Dokumentation](https://mariadb.com/kb/en/mariadb-connector-odbc/) für `mariadb-connector-odbc`.

[comment]: # ({/d49fdb52-e1911043})

[comment]: # ({1b513583-0842efba})
##### PostgreSQL

Um den PostgreSQL-unixODBC-Datenbanktreiber zu installieren, verwenden Sie den Paketmanager des Systems Ihrer Wahl:

```bash
# Für Ubuntu/Debian-Systeme:
apt install odbc-postgresql

# Für RedHat/Fedora-basierte Systeme:
dnf install postgresql-odbc

# Für SUSE-basierte Systeme:
zypper install psqlODBC
```

Um den Datenbanktreiber ohne Paketmanager zu installieren, lesen Sie bitte die [PostgreSQL-Dokumentation](https://www.postgresql.org/download/linux/).

[comment]: # ({/1b513583-0842efba})

[comment]: # ({b4e6cb7e-88097de9})
##### Oracle

Um den unixODBC-Datenbanktreiber zu installieren, lesen Sie bitte die [Oracle-Dokumentation](https://www.oracle.com/database/technologies/releasenote-odbc-ic.html).

[comment]: # ({/b4e6cb7e-88097de9})

[comment]: # ({0a04e88d-f1ce859d})
##### MSSQL

Um den MSSQL-unixODBC-Datenbanktreiber zu installieren, verwenden Sie den Paketmanager des Systems Ihrer Wahl:

```bash
# Für Ubuntu-/Debian-Systeme:
apt install tdsodbc

# Für RedHat-/Fedora-basierte Systeme (EPEL-Pakete: https://docs.fedoraproject.org/en-US/epel/):
dnf install epel-release
dnf install freetds

# Für SUSE-basierte Systeme:
zypper install libtdsodbc0
```

Um den Datenbanktreiber ohne Paketmanager zu installieren, lesen Sie bitte den [FreeTDS user guide](http://www.freetds.org/userguide/).

[comment]: # ({/0a04e88d-f1ce859d})

[comment]: # ({f24fde2e-b15e771b})
#### Konfiguration von unixODBC

Um unixODBC zu konfigurieren, müssen Sie die Dateien `odbcinst.ini` und `odbc.ini` bearbeiten.
Sie können den Speicherort dieser Dateien überprüfen, indem Sie den folgenden Befehl ausführen:

```bash
odbcinst -j
```

Das Befehlsergebnis sollte Informationen enthalten, die in etwa den folgenden entsprechen:

```bash
unixODBC 2.3.9
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
```

[comment]: # ({/f24fde2e-b15e771b})

[comment]: # ({72609b6e-d99c28e7})
##### odbcinst.ini

Die Datei `odbcinst.ini` listet die installierten ODBC-Datenbanktreiber auf.
Falls `odbcinst.ini` fehlt, muss sie manuell erstellt werden.

```ini
[TEST_MYSQL]
Description=ODBC for MySQL
Driver=/usr/lib/libmyodbc5.so
FileUsage=1
```

|Parameter|Beschreibung|
|--|--------|
|TEST_MYSQL|Name des Datenbanktreibers.|
|Description|Beschreibung des Datenbanktreibers.|
|Driver|Speicherort der Bibliothek des Datenbanktreibers.|
|FileUsage|Legt fest, ob der Datenbanktreiber die Verbindung zu einem Datenbank-Server ohne Unterstützung für den Zugriff auf lokale Dateien unterstützt (0); das Lesen von Daten aus Dateien unterstützt (1); das Schreiben von Daten in Dateien unterstützt (2).|
|Threading|Grad der Thread-Serialisierung. Unterstützt für PostgreSQL.<br>Seit 1.6 können Sie, wenn der Treibermanager mit Thread-Unterstützung erstellt wurde, einen weiteren Treibereintrag hinzufügen.|

[comment]: # ({/72609b6e-d99c28e7})

[comment]: # ({f10754c8-207ccff7})
##### odbc.ini

Die Datei `odbc.ini` wird verwendet, um Datenquellen zu konfigurieren.
Beachten Sie, dass die Liste der unterstützten Parameter vom Datenbanktreiber abhängt (zum Beispiel können Oracle-Datenbanken statt Server den Parameter ServerName verwenden usw.).

```ini
[TEST_MYSQL]
Description=MySQL Test Database
Driver=mysql
Server=127.0.0.1
User=root
Password=
Port=3306
Socket=
Database=zabbix
```

|Parameter|Beschreibung|
|--|--------|
|TEST_MYSQL|Name der Datenquelle (DSN).|
|Description|Beschreibung der Datenquelle.|
|Driver|Name des Datenbanktreibers (wie in `odbcinst.ini` angegeben).|
|Server|IP/DNS des Datenbank-Servers.|
|User|Datenbankbenutzer für die Verbindung.|
|Password|Passwort des Datenbankbenutzers.|
|Port|Port der Datenbankverbindung.|
|Socket|Socket der Datenbankverbindung.|
|Database|Name der Datenbank.|

Weitere mögliche Optionen für Konfigurationsparameter finden Sie in der [MySQL-Dokumentation](https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html).

[comment]: # ({/f10754c8-207ccff7})

[comment]: # ({e0fd367c-fed5e483})
Die Datei `odbc.ini` für PostgreSQL kann zusätzliche Parameter enthalten:

```ini
[TEST_PSQL]
Description=PostgreSQL Test Database
Driver=postgresql
Username=zbx_test
Password=zabbix
Servername=127.0.0.1
Database=zabbix
Port=5432
ReadOnly=No
Protocol=8.0+
ShowOidColumn=No
FakeOidIndex=No
RowVersioning=No
ShowSystemTables=No
Fetch=Yes
BoolsAsChar=Yes
SSLmode=Require
ConnSettings=
```

|Parameter|Beschreibung|
|--|--------|
|ReadOnly|Gibt an, ob die Datenbankverbindung nur Leseoperationen (`SELECT`-Abfragen) zulässt und Änderungen (`INSERT`-, `UPDATE`- und `DELETE`-Anweisungen) einschränkt; nützlich für Szenarien, in denen Daten unverändert bleiben sollen.|
|Protocol|Version des PostgreSQL-Backend-Protokolls (wird bei Verwendung von SSL-Verbindungen ignoriert).|
|ShowOidColumn|Gibt an, ob die Object ID (OID) in SQLColumns eingeschlossen werden soll.|
|FakeOidIndex|Gibt an, ob ein gefälschter eindeutiger Index für OID erstellt werden soll.|
|RowVersioning|Gibt an, ob Anwendungen erkennen können, ob Daten von anderen Benutzern geändert wurden, während Sie versuchen, eine Zeile zu aktualisieren. Beachten Sie, dass dieser Parameter den Aktualisierungsvorgang beschleunigen kann, da zum Aktualisieren einer Zeile nicht jede einzelne Spalte in der `WHERE`-Klausel angegeben werden muss.|
|ShowSystemTables|Gibt an, ob der Datenbanktreiber Systemtabellen in SQLTables als reguläre Tabellen behandeln soll; nützlich für die Zugänglichkeit, da dadurch Systemtabellen sichtbar werden.|
|Fetch|Gibt an, ob der Treiber automatisch declare cursor/fetch verwenden soll, um `SELECT`-Anweisungen zu verarbeiten und einen Cache von 100 Zeilen beizubehalten.|
|BoolsAsChar|Steuert die Zuordnung von booleschen Typen.<br>Wenn auf "Yes" gesetzt, werden boolesche Werte `SQL_CHAR` zugeordnet; andernfalls werden sie `SQL_BIT` zugeordnet.|
|SSLmode|Gibt den SSL-Modus für die Verbindung an.|
|ConnSettings|Zusätzliche Einstellungen, die beim Verbindungsaufbau an das Backend gesendet werden.|

[comment]: # ({/e0fd367c-fed5e483})

[comment]: # ({2e87263e-93c68b7f})
##### ODBC-Verbindung testen

Um zu testen, ob die ODBC-Verbindung erfolgreich funktioniert, können Sie das Dienstprogramm `isql` verwenden (im Paket `unixODBC` enthalten):

```bash
isql test
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
```

[comment]: # ({/2e87263e-93c68b7f})

[comment]: # ({458da043-ca784f43})
#### Datenpunkt-Konfiguration im Zabbix Frontend

Konfigurieren Sie einen **Datenbanküberwachungs**-[Datenpunkt](/manual/config/items/item#overview).

![](../../../../../assets/en/manual/config/items/itemtypes/db_monitor.png){width="600"}

Alle erforderlichen Eingabefelder sind mit einem roten Sternchen markiert.

Für Datenbanküberwachungs-Datenpunkte müssen Sie Folgendes angeben:

|   |   |
|--|--------|
|*Type*|Wählen Sie hier „Database monitor“ aus.|
|*Key*|Geben Sie einen der unterstützten Datenpunktschlüssel ein:<br>[**db.odbc.select[]**](#db.odbc.select) - dieser Datenpunkt gibt einen Wert zurück (die erste Spalte der ersten Zeile des SQL-Abfrageergebnisses);<br>[**db.odbc.get[]**](#db.odbc.get) - dieser Datenpunkt gibt mehrere Zeilen/Spalten im JSON-Format zurück;<br>[**db.odbc.discovery[]**](#db.odbc.discovery) - dieser Datenpunkt gibt Low-Level-Discovery-Daten zurück.|
|*User name*|Geben Sie den Benutzernamen der Datenbank ein (bis zu 255 Zeichen).<br>Dieser Parameter ist optional, wenn der Datenbankbenutzername in der Datei `odbc.ini` angegeben ist.<br>Wenn eine Verbindungszeichenfolge verwendet wird und das Feld *User name* nicht leer ist, wird es als `UID=<user>` an die Verbindungszeichenfolge angehängt.|
|*Password*|Geben Sie das Passwort des Datenbankbenutzers ein (bis zu 255 Zeichen).<br>Dieser Parameter ist optional, wenn das Passwort in der Datei `odbc.ini` angegeben ist.<br>Wenn eine Verbindungszeichenfolge verwendet wird und das Feld *Password* nicht leer ist, wird es als `PWD=<password>` an die Verbindungszeichenfolge angehängt.<br>Sonderzeichen werden in diesem Feld unterstützt.<br>Das Passwort wird in der Verbindungszeichenfolge nach dem Benutzernamen angehängt, zum Beispiel als `UID=<username>;PWD=P?;)*word`.<br>Um die resultierende Zeichenfolge zu testen, können Sie den folgenden Befehl ausführen:<br>`isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD=P?;)*word'`|
|*SQL query*|Geben Sie die SQL-Abfrage ein.<br>Beachten Sie, dass bei `db.odbc.select[]` die Abfrage nur einen Wert zurückgeben darf.|
|*Type of information*|Wählen Sie hier den Informationstyp aus, der von der Abfrage zurückgegeben wird.<br>Wenn der Informationstyp falsch ausgewählt wird, wird der Datenpunkt nicht unterstützt.|

[comment]: # ({/458da043-ca784f43})

[comment]: # ({b2cf88bb-06f9d2eb})
**Wichtige Hinweise**

-   Datenbanküberwachungs-Datenpunkte werden nicht mehr unterstützt, wenn in der Server- oder Proxy-Konfiguration keine *odbc poller*-Prozesse gestartet werden.
    Um ODBC-Poller zu aktivieren, setzen Sie den Parameter `StartODBCPollers` in der Zabbix-[Server](/manual/concepts/server/server_params)-Konfigurationsdatei oder, bei durch den Proxy ausgeführten Prüfungen, in der Zabbix-[Proxy](/manual/concepts/proxy/proxy_params)-Konfigurationsdatei.
-   Der Wert des Parameters *Timeout* im Formular der [Datenpunktkonfiguration](/manual/config/items/item#configuration) wird als ODBC-Anmelde-Timeout und als Timeout für die Ausführung der Abfrage verwendet.
    Beachten Sie, dass diese Timeout-Einstellungen ignoriert werden können, wenn der installierte ODBC-Treiber sie nicht unterstützt.
-   Der SQL-Befehl muss einen Resultset zurückgeben, wie jede Abfrage mit der Anweisung `select`.
    Die Abfragesyntax hängt vom RDBMS ab, das sie verarbeitet.
    Die Syntax einer Anfrage an eine gespeicherte Prozedur muss mit dem Schlüsselwort `call` beginnen.

[comment]: # ({/b2cf88bb-06f9d2eb})

[comment]: # ({99bf7f73-0188aaa2})
#### Details zum Datenpunktschlüssel

Parameter ohne spitze Klammern sind obligatorisch. Parameter, die mit spitzen Klammern **<** **>** gekennzeichnet sind, sind optional.

[comment]: # ({/99bf7f73-0188aaa2})

[comment]: # ({1a75e5c0-13edfcd4})
##### db.odbc.select[<eindeutige kurze Beschreibung>,<dsn>,<Verbindungszeichenfolge>] {#db.odbc.select}

<br>
Gibt einen Wert zurück, nämlich die erste Spalte der ersten Zeile des SQL-Abfrageergebnisses.<br>
Rückgabewert: Abhängig von der SQL-Abfrage.

Parameter:

-   **eindeutige kurze Beschreibung** - eine eindeutige kurze Beschreibung zur Identifizierung des Datenpunkts (zur Verwendung in Auslösern usw.);
-   **dsn** - der Name der Datenquelle (wie in `odbc.ini` angegeben);
-   **Verbindungszeichenfolge** - die Verbindungszeichenfolge (kann treiberspezifische Argumente enthalten).

Kommentare:

-   Obwohl `dsn` und `Verbindungszeichenfolge` optionale Parameter sind, ist mindestens einer von ihnen erforderlich; wenn beide definiert sind, wird `dsn` ignoriert.
-   Wenn eine Abfrage mehr als eine Spalte zurückgibt, wird nur die erste Spalte gelesen. Wenn eine Abfrage mehr als eine Zeile zurückgibt, wird nur die erste Zeile gelesen.

[comment]: # ({/1a75e5c0-13edfcd4})

[comment]: # ({77183579-ebf5d449})
##### db.odbc.get[<unique short description>,<dsn>,<connection string>] {#db.odbc.get}

<br>
Transformiert das Ergebnis der SQL-Abfrage in ein JSON-Array.<br>
Rückgabewert: *JSON object*.

Parameter:

-   **unique short description** - eine eindeutige kurze Beschreibung zur Identifizierung des Datenpunkts (zur Verwendung in Auslösern usw.);
-   **dsn** - der Name der Datenquelle (wie in `odbc.ini` angegeben);
-   **connection string** - die Verbindungszeichenfolge (kann treiberspezifische Argumente enthalten).

Kommentare:

-   Obwohl `dsn` und `connection string` optionale Parameter sind, ist mindestens einer von ihnen erforderlich; wenn beide definiert sind, wird `dsn` ignoriert.
-   Mehrere Zeilen/Spalten im JSON-Format können zurückgegeben werden.
    Dieser Datenpunkt kann als Master-Datenpunkt verwendet werden, der alle Daten in einem Systemaufruf sammelt, während die JSONPath-Vorverarbeitung in abhängigen Datenpunkten verwendet werden kann, um einzelne Werte zu extrahieren.
    Weitere Informationen finden Sie in einem [Beispiel](/manual/discovery/low_level_discovery/examples/sql_queries#using-db-odbc-get) des zurückgegebenen Formats, das in der Low-Level-Discovery verwendet wird.

Beispiel:

    # Verbindung für MySQL ODBC-Treiber 5:
    db.odbc.get[MySQL example,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]

[comment]: # ({/77183579-ebf5d449})

[comment]: # ({f6dfe740-c8148c95})
##### db.odbc.discovery[<eindeutige Kurzbeschreibung>,<dsn>,<Verbindungszeichenfolge>] {#db.odbc.discovery}

<br>
Wandelt das Ergebnis der SQL-Abfrage in ein JSON-Array um, das für [Low-Level-Discovery](/manual/discovery/low_level_discovery/examples/sql_queries) verwendet wird.
Die Spaltennamen aus dem Abfrageergebnis werden in Makronamen für die Low-Level-Discovery umgewandelt und mit den ermittelten Feldwerten verknüpft.
Diese Makros können beim Erstellen von Datenpunkt-, Auslöser- usw. Prototypen verwendet werden.<br>
Rückgabewert: *JSON-Objekt*.

Parameter:

-   **eindeutige Kurzbeschreibung** - eine eindeutige Kurzbeschreibung zur Identifizierung des Datenpunkts (zur Verwendung in Auslösern usw.);
-   **dsn** - der Name der Datenquelle (wie in `odbc.ini` angegeben);
-   **Verbindungszeichenfolge** - die Verbindungszeichenfolge (kann treiberspezifische Argumente enthalten).

Kommentare:

-   Obwohl `dsn` und `Verbindungszeichenfolge` optionale Parameter sind, ist mindestens einer von ihnen erforderlich; wenn beide definiert sind, wird `dsn` ignoriert.

[comment]: # ({/f6dfe740-c8148c95})

[comment]: # ({87547b91-718edfdc})
#### Fehlermeldungen

ODBC-Fehlermeldungen sind in Felder strukturiert, um detaillierte Informationen bereitzustellen.
Zum Beispiel könnte eine Fehlermeldung wie folgt aussehen:

    ODBC-Abfrage kann nicht ausgeführt werden: [SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]

-   "`ODBC-Abfrage kann nicht ausgeführt werden`" - Zabbix-Meldung
-   "`[SQL_ERROR]`" - ODBC-Rückgabecode
-   "`[42601]`" - SQLState
-   "`[7]`" - nativer Fehlercode
-   "`[ERROR: syntax error at or near ";"; Error while executing the query]`" - native Fehlermeldung

Beachten Sie, dass die Länge der Fehlermeldung auf 2048 Byte begrenzt ist, daher kann die Meldung abgeschnitten werden.
Wenn es mehr als einen ODBC-Diagnosedatensatz gibt, versucht Zabbix, diese zu verketten (getrennt durch `|`), soweit es die Längenbegrenzung zulässt.

[comment]: # ({/87547b91-718edfdc})
