2017-09-11 21 views
-1

Ich möchte die folgenden SQL-Anweisungen in ein Shell-Skript mit nur einer Variablen, die ich als Teil meiner täglichen Gesundheits-Checks auf unserer Client-Seite an 3 Personen senden können. Bitte helfen Sie mir mit den Ideen hier. Ich möchte auch 2 Befehle hinzufügen, um das Diaglog und den Raum zu überprüfen.Linux DB2 Shell Script

!df -h; 
!db2diag -f; 


SELECT DB_STATUS as "DB Status", 
     LAST_BACKUP as "Last Backup", 
     APPLS_CUR_CONS "No. of Current Connections" 
    FROM TABLE(MON_GET_DATABASE(-2)); 

select 
    NUM_INDOUBT_TRANS as "Indoubt Transactions" 
    from table(mon_get_transaction_log(-2)); 

SELECT lock_name, 
     hld_member, 
     lock_status, 
     hld_application_handle 
    FROM TABLE (MON_GET_APPL_LOCKWAIT(NULL, -2)); 

select 
    varchar(tbsp_name, 30) as tbsp_name, 
    varchar(tbsp_state, 40) as tbsp_state 
    from table(mon_get_tablespace('',-2)); 

Bisher habe ich folgendes:

connect to DBNAME 

Health=`db2 -x "SELECT DB_STATUS as "DB Status", 
     LAST_BACKUP as "Last Backup", 
     APPLS_CUR_CONS "No. of Current Connections" 
    FROM TABLE(MON_GET_DATABASE(-2))"` 
echo $Health 

mail -s "health Check" [email protected] <<< "$Health" 

den unten Fehler. Auch beim Entnehmen der "" bekomme ich immer noch die gleichen Fehler. Bitte helfen Sie

SQL0104N Ein unerwarteter Token "Status" wurde nach "ECT DB_STATUS als DB" gefunden. Erwartete Tokens können enthalten: "". SQLSTATE = 42601

+0

Betrachten Sie ein anderes Design. Veranlassen Sie, dass das Systemdiagnose-Skript geplant ausgeführt wird, und erstellen Sie eine Ausgabedatei. Senden Sie diese Ausgabedatei dann separat per E-Mail an die Empfänger. Wählen Sie für das Shell-Skript entweder die SQL-Datei im Shell-Skript oder alternativ die SQL-Datei in eine Textdatei und rufen Sie das Shell-Skript zum Ausführen des Db2-Clp für diese Textdatei (db2 -o-Ausgabedatei) ab -tvf Textdatei.sql). Wenn Sie das SQL in eine Textdatei schreiben, vermeiden Sie Probleme, die zu den angezeigten Fehlern führen können. Wenn Sie das SQL-Inline in das Shell-Skript einfügen, müssen Sie vorsichtiger mit Anführungszeichen umgehen. – mao

+0

Sie müssen doppelte Anführungszeichen um "DB-Status" in der doppelt zitierten SQL-Anweisung vermeiden. – mustaccio

Antwort

0

Wenn Sie mit 'db2 -x' dann die Überschriften nicht zu $ ​​Health geführt werden, so könnte man einfach nutzen:

db2 -x ‚SELECT db_status, LAST_BACKUP, appls_cur_cons FROM TABLE (MON_GET_DATABASE (-2)) '

Ansonsten wie gesagt mustaccio die doppelten Anführungszeichen sind ein Thema:

db2' SELECT db_status als "DB-Status", LAST_BACKUP als "Last Backup", appls_cur_cons „Anzahl der Strom Verbindungen "FROM TABLE (MON_GET_DATABASE (-2))"