Die Lösung: (yeah!)
Die Weitergabe an die Log-Datei hat mit “-LLogdatei.txt” nicht ohne Ausgabe der Query geklappt - mit “>> %LOGDATEI%” klappt es tadellos.
Ein kleines Tutorial - falls jemand eine ähnliches Skriptgesteuertes Monitoring anstrebt wie wir:
Voraussetzung: Windows Umbebung - PostgreSQL 9.3.4 + 9.5
Ein Verzeichnis - hier D:\PostgreSQL\Server in dem Dateien SVPG01.txt, SVPG02.txt,… liegen mit dem Inhalt der entsprechenden Ports(z.B 5432).
Einmal pro Stunde ruf ein Windows-Job (Aufgabenplanung) eine cmd-Datei auf:
@echo off
set SQLNAME=activity
set PGPASSWORD=UNSERPASSWORT
set ORDNER=D:\PostgreSQL
set PSQLTOOL=%ORDNER%\PSQL\psql.exe
set SERVERDIR=%ORDNER%\Server
set SQLSKRIPT=%ORDNER%\SQLs%SQLNAME%.sql
set LOGDATEI=%ORDNER%\LOGs%SQLNAME%.log
del %LOGDATEI%
for %%g IN (%SERVERDIR%*.txt) do set “DBSERVER=%%~ng” &CALL :Schritt2
GOTO :EOF
:Schritt2
echo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo >>%LOGDATEI%
echo. >>%LOGDATEI%
@echo Datenbankserver: %DBSERVER% >>%LOGDATEI%
FOR /F %%F IN (%SERVERDIR%%DBSERVER%.txt) DO (
@echo Datenbank-Port: %%F >>%LOGDATEI%
%PSQLTOOL% -h%DBSERVER% -p%%F -Upostgres --tuples-only --no-psqlrc < %SQLSKRIPT% >> %LOGDATEI%
)
goto :eof
::Ende
Diese cmd-Datei bewirkt mit 2 verschachtelten Schleifen, dass er für alle Dateien in dem Verzeichnis “Server” die Servernamen ausliest und für die jeweiligen Ports (die in der Datei drinstehen) das gewünschte SQL-Statement (Ordner D:\PostgreSQL\SQL) ausführt:
Hier der Inhalt:
SELECT datname as database, usename as username, application_name as application, client_addr as client_address FROM pg_stat_activity;
(natürlich auch zig andere Varianten möglich)
Ergebnis der Logdatei zur Auswertung:
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
Datenbankserver: SVPG01
Datenbank-Port: 5432
postgres | postgres | psql | 192.168.###.###
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
Datenbankserver: SVPG02
Datenbank-Port: 5434
postgres | postgres | psql | 192.168.###.###
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
Datenbankserver: SVPG03
Datenbank-Port: 5437
postgres | postgres | psql | 192.168.###.###
DATENBANKNAME | dbuser_rd | | 192.168.###.###
DATENBANKNAME | dbuser_rd | | 192.168.###.###
DATENBANKNAME | dbuser_rd | | 192.168.###.###
DATENBANKNAME | dbuser_rd | | 192.168.###.###
usw…
Bei Fragen - einfach reinschreiben…
Ich suche jetzt hilfreiche weitere SQL-Statements. Z.B. Größe der DBs, Backupzeiten und -status, Konfigurationen (WAL an/aus?), Eingerichtete User, … für Oracle, SQL-Server und MySQL habe ich entspr. Skripte. Bei Bedarf lasst es mich wissen.
Danke für die Hilfe