2017-09-11 3 views
-1

Je veux mettre les instructions SQL suivantes dans un script shell en utilisant une seule variable que je peux envoyer à 3 personnes dans le cadre de mes contrôles de santé quotidiens de notre côté client. S'il vous plaît aidez-moi avec les idées ici. Je veux aussi ajouter 2 commandes pour vérifier le diaglog et l'espace.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)); 

Jusqu'à présent, je donne les résultats suivants:

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" 

Obtenir l'erreur ci-dessous. Même en supprimant le "", je reçois toujours les mêmes erreurs. Please help

SQL0104N Un "jeton" inattendu a été trouvé après "ECT DB_STATUS comme DB". Les jetons attendus peuvent inclure: "". SQLSTATE = 42601

+0

Considérons un design différent. Organisez l'exécution du script de vérification de l'intégrité et créez un fichier de sortie. Envoyez ensuite ce fichier de sortie par e-mail aux destinataires séparément. Pour le shell-script, choisissez soit d'avoir le SQL dans le shell-script, ou alternativement mettre le SQL dans un fichier texte et obtenir le shell-script pour exécuter le clp Db2 sur ce fichier texte (fichier de sortie db2 -o -tvf text-file.sql). Si vous placez le SQL dans un fichier texte, évitez de citer des problèmes susceptibles de provoquer les erreurs que vous voyez. Si vous mettez le SQL en ligne dans le shell-script, vous devez prendre plus de soin avec des guillemets. – mao

+0

Vous devez échapper les guillemets autour de "DB Status" dans l'instruction SQL entre guillemets. – mustaccio

Répondre

0

Si vous utilisez 'db2 -x' alors les rubriques ne seront pas transmises à $ Santé vous pourriez donc simplement utiliser:

db2 -x « SELECT DB_STATUS, LAST_BACKUP, APPLS_CUR_CONS DE TABLE (MON_GET_DATABASE (-2)) '

Sinon, comme mustaccio dit que les guillemets doubles sont un problème:

db2' SELECT DB_STATUS comme "DB Etat", LAST_BACKUP que "Dernière sauvegarde", APPLS_CUR_CONS « Nombre de courant Connexions "FROM TABLE (MON_GET_DATABASE (-2)) '