diff --git a/.env.local b/.env.local index 561a0e3..f3c413c 100644 --- a/.env.local +++ b/.env.local @@ -1 +1 @@ -export EXPDP_DIR="/u04/expdp" \ No newline at end of file +export EXPDP_DIR="/u04/expdp" diff --git a/.gitignore b/.gitignore index 62da81e..fad6481 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ # fichier avec les variables d'environnement -.env \ No newline at end of file +.env +AGENTS.md +chat_gemin_db_report.md +DOCUMENTATION.md +GEMINI.md +LEGENDE_COMMANDES.md \ No newline at end of file diff --git a/README.md b/README.md index e384c80..85a7266 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,62 @@ -Ensemble de scripts qui génèrent des rapports html avec quelques infos du serveur, les bases de données en cours d'exécution, les fichiers, les logs et les sauvegardes +# DB Report + +Génère des rapports HTML détaillés sur la configuration d'un serveur et de ses bases de données Oracle. + +## Fonctionnalités + +- Génération d'un rapport de configuration pour le serveur hôte. +- Collecte automatique des bases de données Oracle en cours d'exécution. +- Génération d'un rapport HTML structuré et détaillé pour chaque base de données. +- Support pour les instances ASM et les PDBs (Pluggable Databases). +- Scripts modulaires pour une personnalisation facile. + +## Prérequis + +- Système Linux/Unix avec Bash. +- Oracle Database installé et configuré (avec `sqlplus` et `oraenv`). +- Permissions pour exécuter des requêtes SQL en tant que `sysdba`. + +## Installation -## Sous Linux ```bash git clone https://github.com/Yacine31/db_report cd db_report -# Copier le fichier .env.local dans .env -cp .env.lcal .env -# Executer le script +# Copier le fichier d'exemple de configuration (optionnel) +cp .env.local .env +# Éditer .env si nécessaire (e.g., pour personnaliser OUTPUT_DIR) +``` + +## Utilisation + +```bash +# Exécuter le script principal bash rapport_bdd.sh ``` -Le résultat est dans le sous répertoire ``` output/YYYYMMDD ``` +## Sortie +Le script génère deux types de rapports dans le répertoire `output/YYYYMMDD/`: +1. **Rapport Serveur** : Un rapport unique contenant les informations de configuration du système d'exploitation. + - Nom du fichier : `Rapport_{hostname}_{timestamp}.html` -## Sous Windows -Télécharger le zip ici : [https://github.com/Yacine31/db_report/archive/refs/heads/main.zip](https://github.com/Yacine31/db_report/archive/refs/heads/main.zip) +2. **Rapports Base de Données** : Un rapport détaillé pour chaque instance de base de données Oracle détectée. + - Nom du fichier : `Rapport_{hostname}_{SID}_{timestamp}.html` -- Décompresser dans c:\db_report -- Exécuter le script rapport_bdd.cmd +Un script de synthèse (`summary.sh`) est également exécuté pour agréger certaines données des différentes bases. + +## Structure du projet + +- `rapport_bdd.sh` : Script principal qui orchestre la génération du rapport serveur et des rapports de base de données. +- `sh/` : Scripts Bash pour la collecte des informations système (utilisés pour le rapport serveur). +- `sql/` : Requêtes SQL pour les données de base de données. +- `html/` : Templates HTML pour l'en-tête et le pied de page des rapports. +- `asm/` : Scripts SQL spécifiques aux instances ASM. +- `summary/` : Scripts SQL utilisés par le script de synthèse. +- `summary.sh` : Script d'agrégation des rapports. + +## Personnalisation + +- Modifiez `.env` pour changer le répertoire de sortie. +- Ajoutez des scripts dans `sh/` ou `sql/` pour étendre les rapports. -Ou avec GIT : -Installer git [https://git-scm.com/download/win](https://git-scm.com/download/win) -```cmd -cd /d c:\ -git clone https://github.com/Yacine31/db_report -cd db_report -rapport_bdd.cmd -``` diff --git a/asm/01_asm.sql b/asm/01_asm.sql index a02544d..dcfc67e 100644 --- a/asm/01_asm.sql +++ b/asm/01_asm.sql @@ -1,6 +1,6 @@ PRO
" -ps -ef | grep pmon | grep -v grep -echo "" +print_h2 "Bases de données en cours d'exécution" +run_and_print "ps -ef | grep pmon | grep -v grep" -echo "
" -ps -ef | grep tnslsnr | grep -v grep -echo "" +print_h2 "Listeners en cours d'exécution" +run_and_print "ps -ef | grep tnslsnr | grep -v grep" -echo "
" - echo $lsnrctl_command - echo export TNS_ADMIN=$binary_path/network/admin - export TNS_ADMIN=$binary_path/network/admin - eval "$lsnrctl_command" - echo "
" -uptime -echo "" +print_h2 "Uptime" +run_and_print "uptime" case "$os_type" in AIX) - echo "
" - lsfs - echo "" + print_h2 "Espace disque (lsfs)" + run_and_print "lsfs" ;; Linux) - echo "
" - cat /etc/fstab | egrep -v '^#|^$' - echo "" + print_h2 "Contenu du fichier /etc/fstab" + run_and_print "cat /etc/fstab | egrep -v '^#|^$'" ;; esac -echo "
" -crontab -l -echo "" +print_h2 "Contenu du contab du compte oracle" +run_and_print "crontab -l" -echo "
" -ulimit -a | sort -echo "" +print_h2 "Limites de l'utilisateur (ulimit -a)" +run_and_print "ulimit -a | sort" -# espace disque en fonction de l'OS case "$os_type" in AIX) - echo "
" - df -g - echo "" + print_h2 "Espace disque (df -g)" + run_and_print "df -g" ;; Linux) - echo "
" - df -h - echo "" + print_h2 "Espace disque (df -h)" + run_and_print "df -h" ;; esac - case "$os_type" in Linux) - echo "
" - lsblk - echo "" + print_h2 "Liste des disques disponibles (lsblk)" + run_and_print "lsblk" - echo "
" - free -m - echo "" + print_h2 "Taille mémoire en Mo (free -m)" + run_and_print "free -m" - echo "
" - lscpu - echo "" + print_h2 "Caractéristiques CPU (lscpu)" + run_and_print "lscpu" - echo "
" - sudo cat /var/log/messages | egrep -i 'error|failed' | tail -50 - echo "" - else - echo "
" - echo "L'utilisateur n'a les droits pour lire les fichiers log." - echo "" - fi + print_h2 "Statistiques VM (vmstat 2 20)" + run_and_print "vmstat 2 20" + + print_h2 "Top 10 processus par utilisation CPU (ps --width 150)" + run_and_print "ps -eo pid,user,%cpu,%mem,vsz,rss,tty,stat,start,time,command --sort=-%cpu --width 1000 | head -n 17 | cut -c 1-180" + + print_h2 "Derniers messages du noyau (dmesg -T | tail -n 30)" + if sudo -ln &> /dev/null; then + run_and_print "sudo dmesg -T | tail -n 30" + else + echo "
L'utilisateur n'a pas les droits sudo pour exécuter dmesg." + fi + + print_h2 "Les 30 dernières erreurs dans /var/log/messages" + if sudo -ln &> /dev/null; then + run_and_print "sudo cat /var/log/messages | egrep -i 'error|failed' | tail -30" + else + echo "
L'utilisateur n'a pas les droits sudo pour lire les fichiers log." + fi ;; esac case "$os_type" in AIX) - echo "
" - prtconf - echo "" + print_h2 "Configuration système (prtconf)" + run_and_print "prtconf" ;; esac diff --git a/sh/09_os_info.sh_modified b/sh/09_os_info.sh_modified deleted file mode 100644 index 31df1ce..0000000 --- a/sh/09_os_info.sh_modified +++ /dev/null @@ -1,73 +0,0 @@ -# faire des commandes pour AIX et pour Linux -os_type=$(uname -s) - -# Function to execute command and format output -execute_command() { - command="$1" - output="$(eval "$command" 2>&1)" # Capture both stdout and stderr using eval - # Print the command and its output in the specified format - echo "--- Commande ---" - echo "$command" - echo "--- Résultat ---" - echo "$output" - echo "--- Fin Bloc ---" -} - -execute_command "ps -ef | grep pmon | grep -v grep" -execute_command "ps -ef | grep tnslsnr | grep -v grep" - -# Listener status -ps -ef | grep tnslsnr | egrep -i " LISTENER |${ORACLE_SID}" | grep -v grep | while read l -do - binary_path=$(echo $l | perl -lne 'print $1 if /(\S*tnslsnr\S*)/' | sed 's#/bin/tnslsnr##') - listener_name=$(echo $l | perl -lne 'print $1 if /\btnslsnr\s+(\S+)/' | sed 's/tnslsnr //') - lsnrctl_command="$binary_path/bin/lsnrctl status $listener_name" - export TNS_ADMIN=$binary_path/network/admin - execute_command "$lsnrctl_command" -done - -execute_command "uptime" - -case "$os_type" in - AIX) - execute_command "lsfs" - ;; - Linux) - execute_command "cat /etc/fstab | egrep -v '^#|^$'" - ;; -esac - -execute_command "crontab -l" -execute_command "ulimit -a | sort" - -case "$os_type" in - AIX) - execute_command "df -g" - ;; - Linux) - execute_command "df -h" - ;; -esac - -case "$os_type" in - Linux) - execute_command "lsblk" - execute_command "free -m" - execute_command "lscpu" - if sudo -l &> /dev/null ; then - execute_command "sudo cat /var/log/messages | egrep -i 'error|failed' | tail -50" - else - echo "--- Commande ---" - echo "sudo cat /var/log/messages | egrep -i 'error|failed' | tail -50" - echo "--- Résultat ---" - echo "L'utilisateur n'a les droits pour lire les fichiers log." - echo "--- Fin Bloc ---" - fi - ;; -esac - -case "$os_type" in - AIX) - execute_command "prtconf" - ;; -esac diff --git a/sh/10_oracle_installation.sh b/sh/10_oracle_installation.sh index d80514a..a42a027 100644 --- a/sh/10_oracle_installation.sh +++ b/sh/10_oracle_installation.sh @@ -1,25 +1,40 @@ -# /etc/oratab -echo "
" -cat /etc/oratab | egrep -v "^$|^#" -echo "" +#!/bin/bash -# inventory.xml -echo "
" -ORA_INVENTORY=$(cat /etc/oraInst.loc | grep inventory_loc | cut -d= -f2) -cat $ORA_INVENTORY/ContentsXML/inventory.xml | grep "" + fi +else + echo "" +# Importe les fonctions utilitaires +source "$(dirname "$0")/utils.sh" -# opatch -echo " Niveau de patch des ORACLE_HOME (opatch lspatches) :
" -cat /etc/oratab | egrep -v "^$|^#" | cut -d: -f2 | sort -u | while read oh -do - echo "" - echo "ORACLE_HOME="$oh - echo "" - export ORACLE_HOME=$oh - $oh/OPatch/opatch lspatches - echo "
" -done +# --- Script principal --- + +print_h2 "Contenu du fichier /etc/oratab" +run_and_print "cat /etc/oratab | egrep -v '^$|^#'" + +print_h2 "Contenu du fichier Inventory.xml" +# On s'assure que le fichier oraInst.loc existe et est lisible +if [ -r /etc/oraInst.loc ]; then + ORA_INVENTORY=$(grep inventory_loc /etc/oraInst.loc | cut -d= -f2) + if [ -n "${ORA_INVENTORY}" ] && [ -r "${ORA_INVENTORY}/ContentsXML/inventory.xml" ]; then + run_and_print "grep 'Impossible de lire le fichier inventory.xml ou chemin non trouvé.
Fichier /etc/oraInst.loc non trouvé." +fi + +print_h2 "Niveau de patch des ORACLE_HOME (opatch lspatches)" +if [ -r "${ORA_INVENTORY}/ContentsXML/inventory.xml" ]; then + # Utilise un `while read` pour plus de robustesse que `cat ... | while` + while read -r line; do + # Ignore les lignes vides ou commentées + [[ "$line" =~ ^# ]] || [ -z "$line" ] && continue + + oh=$(echo "$line" | cut -d: -f2 | sort -u) + if [ -d "$oh" ]; then + export ORACLE_HOME=$oh + run_and_print "\"$oh/OPatch/opatch\" lspatches" + fi + done < <(grep -oP 'LOC="\K[^"]+' ${ORA_INVENTORY}/ContentsXML/inventory.xml) +else + echo "
Fichier ${ORA_INVENTORY}/ContentsXML/inventory.xml non trouvé."
+fi
diff --git a/sh/20_dbvisit_infos.sh b/sh/20_dbvisit_infos.sh
index 84159cc..71fcffa 100644
--- a/sh/20_dbvisit_infos.sh
+++ b/sh/20_dbvisit_infos.sh
@@ -1,18 +1,22 @@
+#!/bin/bash
+
+# Importe les fonctions utilitaires
+source "$(dirname "$0")/utils.sh"
+
+# --- Script principal ---
+
# script à exécuter si seulement dbvctl existe et une instance avec le nom de service dbv existe aussi
-count=$(ps -ef | grep dbvctl | grep -v grep | grep ${ORACLE_SID} | wc -l)
+count=$(ps -ef | grep dbvctl | grep -v grep | grep "${ORACLE_SID}" | wc -l)
-if [ $count -gt 0 ]; then
+if [ "$count" -gt 0 ]; then
echo "" - ps -ef | grep dbvctl | grep -v grep - echo "" + print_h2 "Process DBVisit en cours d'exécution" + run_and_print "ps -ef | grep dbvctl | grep -v grep" # on récupère le chemin de l'executable dbvctl - export DBV_HOME=$(dirname $(ps -ef | grep dbvctl | grep -v grep | awk '{print $8}' | sort -u)) + export DBV_HOME=$(dirname "$(ps -ef | grep dbvctl | grep -v grep | awk '{print $8}' | sort -u)") # si les exacutables sont lancé avec ./dbvctl, le résultat retourné est . # dans ce cas on remplace par la valeur par défaut : /usr/dbvisit/standby if [ "$DBV_HOME" = "." ]; then @@ -20,18 +24,13 @@ if [ $count -gt 0 ]; then export DBV_HOME="/usr/dbvisit/standby" fi - # statut de la base de données - echo "
"
- ${DBV_HOME}/dbvctl -d ${ORACLE_SID} -o status
- echo ""
+ print_h2 "Statut de la base : ${ORACLE_SID} sur le serveur $(hostname)"
+ run_and_print "${DBV_HOME}/dbvctl -d ${ORACLE_SID} -o status"
# on récupère le statut de la base pour exécuter la commande sur la base primaire
- db_prim=$(${DBV_HOME}/dbvctl -d ${ORACLE_SID} -o status | grep -i "read write" | wc -l)
- if [ ${db_prim} -gt 0 ]; then
- echo ""
- ${DBV_HOME}/dbvctl -d ${ORACLE_SID} -i
- echo ""
+ db_prim=$("${DBV_HOME}/dbvctl" -d "${ORACLE_SID}" -o status | grep -i "read write" | wc -l)
+ if [ "${db_prim}" -gt 0 ]; then
+ print_h2 "Rapport de GAP DBVisit pour la base ${ORACLE_SID}"
+ run_and_print "${DBV_HOME}/dbvctl -d ${ORACLE_SID} -i"
fi
fi
\ No newline at end of file
diff --git a/sh/30_crs.sh b/sh/30_crs.sh
index b664651..597da94 100644
--- a/sh/30_crs.sh
+++ b/sh/30_crs.sh
@@ -1,16 +1,22 @@
+#!/bin/bash
+
+# Importe les fonctions utilitaires
+source "$(dirname "$0")/utils.sh"
+
+# --- Script principal ---
+
# script à exécuter si couche grid/crs
count=$(ps -ef | grep ohasd | grep -v grep | wc -l)
-if [ $count -gt 0 ]; then
+if [ "$count" -gt 0 ]; then
- echo ""
- ${BIN_DIR}/crsctl status res -t
- echo ""
+
+ if [ -n "$BIN_DIR" ] && [ -x "$BIN_DIR/crsctl" ]; then
+ run_and_print "${BIN_DIR}/crsctl status res -t"
+ else
+ echo "Impossible de trouver le répertoire d'installation CRS ou crsctl n'est pas exécutable." + fi fi \ No newline at end of file diff --git a/sh/local/check_expdp_log.sh b/sh/local/check_expdp_log.sh index ff255b2..76e18d6 100644 --- a/sh/local/check_expdp_log.sh +++ b/sh/local/check_expdp_log.sh @@ -1,35 +1,47 @@ #!/bin/bash # script pour vérifier les logs des fichiers datapump et voir si des erreurs sont présentes +# Importe les fonctions utilitaires +source "$(dirname "$0")/../utils.sh" + +# --- Script principal --- + # EXPDP_DIR="/u04/backup" : la variable d'environnement est chargée depuis le fichier .env CURRENT_DATE=$(date +%Y_%m) # date au format 2025_04 -echo "
Aucune erreur ORA- détectée dans les fichiers logs du mois ${CURRENT_DATE}."
+
+if [ -z "${EXPDP_DIR}" ]; then
+ echo "La variable EXPDP_DIR n'est pas définie. Impossible de vérifier les logs Datapump." +elif [ ! -d "${EXPDP_DIR}" ]; then + echo "
Le répertoire EXPDP_DIR ('${EXPDP_DIR}') n'existe pas ou n'est pas accessible."
else
- echo "$RESULT" -fi + RESULT=$(find "${EXPDP_DIR}" -iname "export_*.log" -exec grep -H "ORA-" "{}" \;) + if [ -z "$RESULT" ]; then + echo "
Aucune erreur ORA- détectée dans les fichiers logs du mois ${CURRENT_DATE}."
+ else
+ echo "$RESULT" + fi -# afficher les dernières lignes des fichiers log pour voir les les exports se sont bien déroulés -echo "
" - head -10 "$file" # affiche les 10 première lignes dans le bloc PRE - echo "
" - tail -10 "$file" # affiche les 10 dernières lignes dans le bloc PRE - echo "" -} -# export pour rendre la fonction accessible à bash -c -export -f show_log_excerpt + # afficher les dernières lignes des fichiers log pour voir les les exports se sont bien déroulés + echo "
" + head -10 "$file" # affiche les 10 première lignes dans le bloc PRE + echo "
" + tail -10 "$file" # affiche les 10 dernières lignes dans le bloc PRE + echo "" + } + # export pour rendre la fonction accessible à bash -c + export -f show_log_excerpt -# find appelle la fonction en lui passant $0 comme paramètre -find "${EXPDP_DIR}" -iname "export_*.log" -exec bash -c 'show_log_excerpt "$0"' {} \; \ No newline at end of file + # find appelle la fonction en lui passant $0 comme paramètre + find "${EXPDP_DIR}" -iname "export_*.log" -exec bash -c 'show_log_excerpt "$0"' {} \; +fi \ No newline at end of file diff --git a/sh/utils.sh b/sh/utils.sh new file mode 100644 index 0000000..f13fb24 --- /dev/null +++ b/sh/utils.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# Fichier de fonctions utilitaires pour les scripts de rapport + +# Fonction: log_info +# Description: Affiche un message d'information dans les logs avec un timestamp. +# Paramètres: +# $1 - Le message à afficher. +log_info() { + echo "[INFO] $(date +'%Y-%m-%d %H:%M:%S') - ${1}" +} + +# Affiche un titre H2 +print_h2() { + echo "
+# Si la commande échoue, elle affiche un message d'erreur mis en évidence.
+run_and_print() {
+ local cmd="$1"
+ local cmd_html
+
+ # Échapper les caractères HTML pour un affichage sûr
+ cmd_html=$(echo "${cmd}" | sed 's/&/\&/g; s/\</g; s/>/\>/g')
+
+ echo "
"
+ # Affiche la commande échappée en rouge et gras
+ echo "${cmd_html}"
+
+ # Ajoute une ligne vide pour la séparation
+ echo ""
+
+ # Exécute la commande originale, redirige stderr vers stdout pour tout capturer
+ if output=$(eval "${cmd}" 2>&1); then
+ echo "$output"
+ else
+ echo ""
+ echo "ERREUR: La commande a échoué avec le message suivant :"
+ echo "$output"
+ echo ""
+ fi
+ echo ""
+}
diff --git a/sql/01_system_info.sql b/sql/01_system_info.sql
index 29537bd..8fa808c 100644
--- a/sql/01_system_info.sql
+++ b/sql/01_system_info.sql
@@ -1,6 +1,6 @@
prompt System Information
WITH /* 1a.1 */
- rac AS (SELECT /*+ MATERIALIZE NO_MERGE */ COUNT(*) instances, CASE COUNT(*) WHEN 1 THEN 'Single-instance' ELSE COUNT(*)||'-node RAC cluster' END db_type FROM gv$instance),
+ rac AS (select /* db-html-report */ /*+ MATERIALIZE NO_MERGE */ COUNT(*) instances, CASE COUNT(*) WHEN 1 THEN 'Single-instance' ELSE COUNT(*)||'-node RAC cluster' END db_type FROM gv$instance),
hrac AS (SELECT /*+ MATERIALIZE NO_MERGE */ CASE 1 WHEN 1 THEN ' (historically Single-instance in AWR)' ELSE ' (historicly 1-node RAC cluster in AWR)' END db_type
FROM rac WHERE TO_CHAR(RAC.instances)<>1),
mem AS (SELECT /*+ MATERIALIZE NO_MERGE */ SUM(value) target FROM gv$system_parameter2 WHERE name = 'memory_target'),
diff --git a/sql/11_get_db_size.sql b/sql/11_get_db_size.sql
index c6514cd..9782369 100644
--- a/sql/11_get_db_size.sql
+++ b/sql/11_get_db_size.sql
@@ -2,7 +2,7 @@ prompt Taille de la base de données :
WITH
sizes AS (
-SELECT /*+ MATERIALIZE NO_MERGE */ /* 1f.60 */
+select /* db-html-report */ /*+ MATERIALIZE NO_MERGE */ /* 1f.60 */
'Data' file_type,
SUM(bytes) bytes
FROM v$datafile
diff --git a/sql/12a_instance_status.sql b/sql/12a_instance_status.sql
index 91f8217..7510909 100644
--- a/sql/12a_instance_status.sql
+++ b/sql/12a_instance_status.sql
@@ -1,7 +1,7 @@
prompt Database/Instance Status
alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';
-SELECT 'DATABASE_NAME' AS property, name AS value FROM gv$database
+select /* db-html-report */ 'DATABASE_NAME' AS property, name AS value FROM gv$database
UNION ALL
SELECT 'DATABASE_ROLE' AS property, DATABASE_ROLE AS value FROM gv$database
UNION ALL
diff --git a/sql/12c_db_version.sql b/sql/12c_db_version.sql
index 0d0a706..dce6ef6 100644
--- a/sql/12c_db_version.sql
+++ b/sql/12c_db_version.sql
@@ -1,6 +1,6 @@
prompt Database/Version
-SELECT
+select /* db-html-report */
*
FROM
V$VERSION;
\ No newline at end of file
diff --git a/sql/13_database_parameters.sql b/sql/13_database_parameters.sql
index 3414966..972e575 100644
--- a/sql/13_database_parameters.sql
+++ b/sql/13_database_parameters.sql
@@ -1,6 +1,6 @@
prompt Paramèters de la base de données :
-SELECT
+select /* db-html-report */
NAME,
DISPLAY_VALUE,
DESCRIPTION,
diff --git a/sql/14_nls_database_parameters.sql b/sql/14_nls_database_parameters.sql
index fb7b405..1481548 100644
--- a/sql/14_nls_database_parameters.sql
+++ b/sql/14_nls_database_parameters.sql
@@ -1,4 +1,3 @@
prompt Paramètres NLS au niveau de la base de données :
--- SELECT * FROM NLS_DATABASE_PARAMETERS ORDER BY PARAMETER;
-select * from gv$nls_parameters order by PARAMETER ;
\ No newline at end of file
+select /* db-html-report */ * from gv$nls_parameters order by PARAMETER ;
\ No newline at end of file
diff --git a/sql/15_check_supplemntal_logging.sql b/sql/15_check_supplemntal_logging.sql
index 19283ba..de61e58 100644
--- a/sql/15_check_supplemntal_logging.sql
+++ b/sql/15_check_supplemntal_logging.sql
@@ -1,6 +1,6 @@
prompt Database supplemental logging :
-select 'force_logging' as property, force_logging as value from v$database
+select /* db-html-report */ 'force_logging' as property, force_logging as value from v$database
union all
select 'supplemental_log_data_min' as property, supplemental_log_data_min as value from v$database
union all
diff --git a/sql/16_dba_registry.sql b/sql/16_dba_registry.sql
index d5b862e..ed72cef 100644
--- a/sql/16_dba_registry.sql
+++ b/sql/16_dba_registry.sql
@@ -1,6 +1,6 @@
prompt Fonctionnalités installées dans la base de données (DBA_REGISTRY) :
-SELECT
+select /* db-html-report */
*
FROM
DBA_REGISTRY
diff --git a/sql/17_resource_limits.sql b/sql/17_resource_limits.sql
index 584e15a..2e6d4da 100644
--- a/sql/17_resource_limits.sql
+++ b/sql/17_resource_limits.sql
@@ -1,6 +1,6 @@
prompt Resource Limit (GV$RESOURCE_LIMIT)
-SELECT
+select /* db-html-report */
*
FROM
GV$RESOURCE_LIMIT
diff --git a/sql/18_memory_configuration.sql b/sql/18_memory_configuration.sql
index 9344ae8..0ce2948 100644
--- a/sql/18_memory_configuration.sql
+++ b/sql/18_memory_configuration.sql
@@ -1,7 +1,7 @@
prompt Memory Information
WITH
system_parameter AS (
-SELECT inst_id,
+select /* db-html-report */ inst_id,
name,
value
FROM gv$system_parameter2
diff --git a/sql/19a_memory_resize_operations.sql b/sql/19a_memory_resize_operations.sql
index de50be0..4c0c411 100644
--- a/sql/19a_memory_resize_operations.sql
+++ b/sql/19a_memory_resize_operations.sql
@@ -2,7 +2,7 @@ prompt Les 50 dernières opérations de Resize de la mémoire :
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
-SELECT
+select /* db-html-report */
*
FROM
GV$MEMORY_RESIZE_OPS
diff --git a/sql/19b_memory_target_advice.sql b/sql/19b_memory_target_advice.sql
index ab43c41..6d0390e 100644
--- a/sql/19b_memory_target_advice.sql
+++ b/sql/19b_memory_target_advice.sql
@@ -1,6 +1,6 @@
prompt SGA Target Advice
-SELECT
+select /* db-html-report */
*
FROM
GV$SGA_TARGET_ADVICE;
diff --git a/sql/20a_tbs_details.sql b/sql/20a_tbs_details.sql
index 93ae3d4..1a1753d 100644
--- a/sql/20a_tbs_details.sql
+++ b/sql/20a_tbs_details.sql
@@ -12,7 +12,7 @@ COL free FORMAT 99999999.00 HEAD "Free MB"
COL max FORMAT 99999999.00 HEAD "MaxSize MB"
COL Pct_Used FORMAT 999.00 HEAD "% Used"
-select
+select /* db-html-report */
a.tablespace_name,
t.bigfile,
a.bytes_alloc/1024/1024 alloc,
diff --git a/sql/20b_datafile.sql.old b/sql/20b_datafile.sql.old
deleted file mode 100644
index d39a66b..0000000
--- a/sql/20b_datafile.sql.old
+++ /dev/null
@@ -1,49 +0,0 @@
-prompt Détail des datafiles :
-
-
-COL file_id HEAD "File ID"
-COL file_name HEAD "Datafile"
-COL tablespace_name FORMAT A20 HEAD "Tablespace"
-
-COL file_size_mb FORMAT 999999999.00 HEAD "File Size MB"
-COL space_used_mb FORMAT 999999999.00 HEAD "Space Used MB"
-COL space_free_mb FORMAT 999999999.00 HEAD "Space Free MB"
-COL maxsize_mb FORMAT 999999999.00 HEAD "Max Size MB"
-COL percent_used FORMAT 999.00 HEAD "% Used"
-
-COL autoextensible FORMAT A15 HEAD "Auto Extensible"
-COL status head "Status"
-COL online_status format a15 head "Online Status"
-
-select
- d.file_id,
- d.file_name,
- d.tablespace_name,
- a.bytes_alloc/1024/1024 file_size_mb,
- (a.bytes_alloc - nvl(b.bytes_free, 0))/1024/1024 space_used_mb,
- nvl(b.bytes_free, 0)/1024/1024 space_free_mb,
- a.maxbytes/1024/1024 maxsize_mb,
- round((a.bytes_alloc - nvl(b.bytes_free, 0)) / a.maxbytes * 100,2) percent_used,
- d.autoextensible,
- d.status,
- d.online_status
-from
- (
- select
- f.file_id,
- sum(f.bytes) bytes_alloc,
- sum(decode(f.autoextensible, 'YES', f.maxbytes, 'NO', f.bytes)) maxbytes
- from dba_data_files f group by file_id
- ) a,
- (
- select
- f.file_id,
- sum(f.bytes) bytes_free
- from dba_free_space f group by file_id
- ) b,
- dba_data_files d
-where
- a.file_id = b.file_id (+) and d.file_id=a.file_id
-order by
- d.file_name
-;
diff --git a/sql/20c_datafile.sql b/sql/20c_datafile.sql
index 48d9c7b..00099e1 100644
--- a/sql/20c_datafile.sql
+++ b/sql/20c_datafile.sql
@@ -20,7 +20,7 @@ WITH
-- Sous-requête pour les fichiers de données dans une CDB
cdb_files AS (
-- cdb_files.sql
- SELECT
+ select /* db-html-report */
p.con_id AS pdb_id,
p.pdb_name AS pdb_name,
d.file_id,
diff --git a/sql/20d_tempfile.sql b/sql/20d_tempfile.sql
index 13e7b43..88e8e59 100644
--- a/sql/20d_tempfile.sql
+++ b/sql/20d_tempfile.sql
@@ -20,7 +20,7 @@ WITH
-- Sous-requête pour les fichiers de données dans une CDB
cdb_files AS (
-- cdb_files.sql
- SELECT
+ select /* db-html-report */
p.con_id AS pdb_id,
p.pdb_name AS pdb_name,
d.file_id,
diff --git a/sql/20e_undo.sql b/sql/20e_undo.sql
index a27836a..5701a13 100644
--- a/sql/20e_undo.sql
+++ b/sql/20e_undo.sql
@@ -1,6 +1,6 @@
prompt Détail du tablespace UNDO :
-SELECT
+select /* db-html-report */
a.tablespace_name,
a.file_id,
a.bytes / 1024 / 1024 AS size_mb,
diff --git a/sql/21c_block_corruption.sql b/sql/21c_block_corruption.sql
index 2063f91..af2e924 100644
--- a/sql/21c_block_corruption.sql
+++ b/sql/21c_block_corruption.sql
@@ -1,6 +1,6 @@
prompt Existance de blocks corrompus :
-SELECT
+select /* db-html-report */
*
FROM
V$DATABASE_BLOCK_CORRUPTION;
\ No newline at end of file
diff --git a/sql/22a_online_log.sql b/sql/22a_online_log.sql
index 70cec9d..26955dc 100644
--- a/sql/22a_online_log.sql
+++ b/sql/22a_online_log.sql
@@ -2,7 +2,7 @@ prompt Fichiers de journalisation (Redolog) :
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
-SELECT
+select /* db-html-report */
*
FROM
V$LOG
diff --git a/sql/22b_online_log.sql b/sql/22b_online_log.sql
index 8eecf57..b38b719 100644
--- a/sql/22b_online_log.sql
+++ b/sql/22b_online_log.sql
@@ -3,7 +3,7 @@ alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';
COL MEMBER FORMAT A90 WRAPPED
BREAK ON GROUP# SKIP 1 ON THREAD# ON SEQUENCE# ON TAILLE_MIB ON "STATUS(ARCHIVED)"
-SELECT
+select /* db-html-report */
'OnlineLog' t,
g.group#,
g.thread#,
diff --git a/sql/23a_archive_log_per_day.sql b/sql/23a_archive_log_per_day.sql
index ded55b4..389105a 100644
--- a/sql/23a_archive_log_per_day.sql
+++ b/sql/23a_archive_log_per_day.sql
@@ -31,7 +31,7 @@ col 23 for 999
col 24 for 999
-select to_char(first_time, 'YYYY/MM/dd') "Date",
+select /* db-html-report */ to_char(first_time, 'YYYY/MM/dd') "Date",
count(1) "Total",
sum(decode(to_char(first_time, 'hh24'),'00',1,0)) "00",
sum(decode(to_char(first_time, 'hh24'),'01',1,0)) "01",
diff --git a/sql/23b_archive_log_per_day.sql b/sql/23b_archive_log_per_day.sql
index 81d574e..c697d45 100644
--- a/sql/23b_archive_log_per_day.sql
+++ b/sql/23b_archive_log_per_day.sql
@@ -1,6 +1,6 @@
prompt Taille des redolog par jour :
-SELECT
+select /* db-html-report */
TO_CHAR(FIRST_TIME, 'YYYY/MM/dd') "Jour",
COUNT(*) "Nbr de fichiers",
ROUND(SUM(BLOCKS*BLOCK_SIZE)/1024/1024, 0) "Taille_Mo"
diff --git a/sql/24a_fra_usage.sql b/sql/24a_fra_usage.sql
index 07ecbe8..fe77fdd 100644
--- a/sql/24a_fra_usage.sql
+++ b/sql/24a_fra_usage.sql
@@ -1,6 +1,6 @@
prompt Fast Recovery Area Usage
-SELECT
+select /* db-html-report */
'Taille FRA MiB' AS PROPERTY,
P.VALUE / 1024 / 1024 AS VALUE
FROM
diff --git a/sql/24b_fra_usage.sql b/sql/24b_fra_usage.sql
index bb8f77f..da5fe0b 100644
--- a/sql/24b_fra_usage.sql
+++ b/sql/24b_fra_usage.sql
@@ -1,2 +1,2 @@
prompt Fast Recovery Area Usage
-SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;
+select /* db-html-report */ * FROM V$FLASH_RECOVERY_AREA_USAGE;
diff --git a/sql/25_last_alertlog_errors.sql b/sql/25_last_alertlog_errors.sql
index a0e667f..09dbeca 100644
--- a/sql/25_last_alertlog_errors.sql
+++ b/sql/25_last_alertlog_errors.sql
@@ -1,6 +1,6 @@
prompt Les dernières erreurs de la base de données (Les 30 derniers jours et les 50 dernières lignes)
-SELECT
+select /* db-html-report */
TO_CHAR(ORIGINATING_TIMESTAMP, 'DD-MM-YYYY HH24:MM:SS') "Date",
MESSAGE_TEXT "Message"
FROM
diff --git a/sql/26_rman_configuration.sql b/sql/26_rman_configuration.sql
index f0f5492..a5e1897 100644
--- a/sql/26_rman_configuration.sql
+++ b/sql/26_rman_configuration.sql
@@ -1,6 +1,6 @@
prompt Configuration RMAN: pramètres modifiés :
-SELECT
+select /* db-html-report */
*
FROM
V$RMAN_CONFIGURATION;
\ No newline at end of file
diff --git a/sql/27_last_rman_backup.sql b/sql/27_last_rman_backup.sql
index 88c6f80..de84e8f 100644
--- a/sql/27_last_rman_backup.sql
+++ b/sql/27_last_rman_backup.sql
@@ -2,7 +2,7 @@ prompt Les dernières sauvegardes RMAN (30 derniers jours/50 dernières lign
ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS';
-SELECT
+select /* db-html-report */
B.SESSION_KEY "Session Key",
B.INPUT_TYPE "Type",
TO_CHAR(B.START_TIME, 'DD-MM-YYYY HH24:MI') "Start Time",
diff --git a/sql/28_sysaux_occupants.sql b/sql/28_sysaux_occupants.sql
index 6f67099..1790134 100644
--- a/sql/28_sysaux_occupants.sql
+++ b/sql/28_sysaux_occupants.sql
@@ -1,6 +1,6 @@
prompt SYSAUX Occupants
-SELECT /*+ NO_MERGE */
+select /* db-html-report */ /*+ NO_MERGE */
V.*,
ROUND(V.SPACE_USAGE_KBYTES / POWER(10, 6), 3) SPACE_USAGE_GBS
FROM
diff --git a/sql/30a_users.sql b/sql/30a_users.sql
index ad4f07c..7faba83 100644
--- a/sql/30a_users.sql
+++ b/sql/30a_users.sql
@@ -2,7 +2,7 @@ prompt DBA Users
ALTER SESSION SET NLS_DATE_FORMAT ='YYYY/MM/DD HH24:MI';
-SELECT
+select /* db-html-report */
X.USERNAME,
X.USER_ID,
X.ACCOUNT_STATUS,
diff --git a/sql/30b_users.sql b/sql/30b_users.sql
index 9a8a267..cb60e90 100644
--- a/sql/30b_users.sql
+++ b/sql/30b_users.sql
@@ -1,6 +1,6 @@
prompt DBA_Profiles
-SELECT
+select /* db-html-report */
*
FROM
DBA_PROFILES
diff --git a/sql/30c_schema_size.sql b/sql/30c_schema_size.sql
index c606171..e4b00b7 100644
--- a/sql/30c_schema_size.sql
+++ b/sql/30c_schema_size.sql
@@ -1,6 +1,6 @@
prompt Taille des objets par schéma (Mo):
-SELECT
+select /* db-html-report */
DS.OWNER "Owner",
ROUND(SUM(DS.BYTES) / 1024 / 1024) "Schema Size MB",
DU.DEFAULT_TABLESPACE "Default Tablespace"
diff --git a/sql/31a_who_is_connected.sql b/sql/31a_who_is_connected.sql
index 90e99bf..ace330f 100644
--- a/sql/31a_who_is_connected.sql
+++ b/sql/31a_who_is_connected.sql
@@ -2,7 +2,7 @@
prompt Sessions Aggregate per User and Type
WITH X AS (
- SELECT
+ select /* db-html-report */
COUNT(*),
--con_id,
USERNAME,
diff --git a/sql/31b_who_is_connected.sql b/sql/31b_who_is_connected.sql
index e6a815b..b09feb5 100644
--- a/sql/31b_who_is_connected.sql
+++ b/sql/31b_who_is_connected.sql
@@ -1,7 +1,7 @@
prompt Sessions Aggregate per Module and Action
WITH X AS (
- SELECT
+ select /* db-html-report */
COUNT(*),
--con_id,
MODULE,
diff --git a/sql/31c_who_is_connected.sql b/sql/31c_who_is_connected.sql
index 5be8b56..377ce74 100644
--- a/sql/31c_who_is_connected.sql
+++ b/sql/31c_who_is_connected.sql
@@ -10,7 +10,7 @@ col OSUSER for a10
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
-SELECT
+select /* db-html-report */
OSUSER,
MACHINE,
PROGRAM,
diff --git a/sql/32_invalid_objects.sql b/sql/32_invalid_objects.sql
index ac4a430..9c252a4 100644
--- a/sql/32_invalid_objects.sql
+++ b/sql/32_invalid_objects.sql
@@ -1,6 +1,6 @@
prompt Invalid objects
-SELECT
+select /* db-html-report */
OWNER,
COUNT(*) "invalid objects"
FROM
diff --git a/sql/33_get_users_objects.sql b/sql/33_get_users_objects.sql
index 5c5747c..ffffe2a 100644
--- a/sql/33_get_users_objects.sql
+++ b/sql/33_get_users_objects.sql
@@ -1,6 +1,6 @@
prompt Les objets par utilisateur
-SELECT
+select /* db-html-report */
*
FROM
(
diff --git a/sql/34_disable_auto_tasks.sql b/sql/34_disable_auto_tasks.sql
index 027b7d5..c12609d 100644
--- a/sql/34_disable_auto_tasks.sql
+++ b/sql/34_disable_auto_tasks.sql
@@ -1,6 +1,6 @@
prompt Statut des jobs autotask
-SELECT
+select /* db-html-report */
CLIENT_NAME,
STATUS,
ATTRIBUTES,
diff --git a/sql/35a_get_cursor_usage.sql b/sql/35a_get_cursor_usage.sql
index a15e36e..4132c31 100644
--- a/sql/35a_get_cursor_usage.sql
+++ b/sql/35a_get_cursor_usage.sql
@@ -1,7 +1,7 @@
-- SCRIPT - to Set the 'SESSION_CACHED_CURSORS' and 'OPEN_CURSORS' Parameters Based on Usage (Doc ID 208857.1)
prompt Sessions and Cursors usage
-SELECT
+select /* db-html-report */
'session_cached_cursors' PARAMETER,
LPAD(VALUE, 5) VALUE,
DECODE(VALUE, 0, ' n/a', TO_CHAR(100 * USED / VALUE, '990')
diff --git a/sql/35b_cursors_count.sql b/sql/35b_cursors_count.sql
index 0240713..0dbe0f3 100644
--- a/sql/35b_cursors_count.sql
+++ b/sql/35b_cursors_count.sql
@@ -1,6 +1,6 @@
prompt Curseurs par Session (sans les users SYS, SYSTEM, SYSMAN)
-select c.sid, s.username, count(*) open_cursors
+select /* db-html-report */ c.sid, s.username, count(*) open_cursors
from gv$open_cursor c, gv$session s
where s.sid = c.sid
and s.username is not null and s.username not like 'SYS%'
diff --git a/sql/36_check_failed_cheduler_jobs.sql b/sql/36_check_failed_cheduler_jobs.sql
index 9aaaf92..ed2a36b 100644
--- a/sql/36_check_failed_cheduler_jobs.sql
+++ b/sql/36_check_failed_cheduler_jobs.sql
@@ -1,6 +1,6 @@
prompt Failed scheduled jobs
-SELECT
+select /* db-html-report */
OWNER,
JOB_NAME,
JOB_TYPE,
diff --git a/sql/37_table_statistics_summary.sql b/sql/37_table_statistics_summary.sql
index 0001d3d..857e97a 100644
--- a/sql/37_table_statistics_summary.sql
+++ b/sql/37_table_statistics_summary.sql
@@ -3,7 +3,7 @@ prompt Table Statistics Summary
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
WITH X AS (
- SELECT /*+ NO_MERGE */
+ select /* db-html-report */ /*+ NO_MERGE */
--con_id,
OWNER,
OBJECT_TYPE,
diff --git a/sql/38_dictionary_stats.sql b/sql/38_dictionary_stats.sql
index daaf23a..e01a906 100644
--- a/sql/38_dictionary_stats.sql
+++ b/sql/38_dictionary_stats.sql
@@ -1,6 +1,6 @@
prompt Dictionary Stats / Fixed Objects Stats
-SELECT
+select /* db-html-report */
TO_CHAR(MAX(END_TIME), 'dd/mm/yyyy hh24:mi') LATEST,
OPERATION
FROM
diff --git a/sql/39_feature_usage_statistics.sql b/sql/39_feature_usage_statistics.sql
index 2b7fe5d..5e26aa9 100644
--- a/sql/39_feature_usage_statistics.sql
+++ b/sql/39_feature_usage_statistics.sql
@@ -2,7 +2,7 @@ prompt Les options utilisée (à partir de DBA_FEATURE_USAGE_STATISTICS):
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
-SELECT
+select /* db-html-report */
NAME,
LAST_USAGE_DATE,
DETECTED_USAGES,
diff --git a/sql/40_dba_jobs.sql b/sql/40_dba_jobs.sql
index 2f77ed1..476014e 100644
--- a/sql/40_dba_jobs.sql
+++ b/sql/40_dba_jobs.sql
@@ -1,8 +1,12 @@
-prompt Liste des jobs dans : dba_jobs
+prompt Liste des derniers jobs dans : CDB_SCHEDULER_JOB_LOG
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
-SELECT
- *
-FROM
- DBA_JOBS;
\ No newline at end of file
+select /* db-html-report */
+* from
+(
+ select log_date, owner, job_name, status
+ from CDB_SCHEDULER_JOB_LOG
+ order by log_date desc
+) where rownum <= 20
+;
\ No newline at end of file
diff --git a/sql/41_sql_stat.sql b/sql/41_sql_stat.sql
new file mode 100644
index 0000000..543975d
--- /dev/null
+++ b/sql/41_sql_stat.sql
@@ -0,0 +1,23 @@
+prompt Top SQL
+
+alter session set nls_date_format='DD/MM/YYYY HH24:MI:SS';
+
+select /* db-html-report */
+* from (
+select
+ a.inst_id,
+ a.sql_id,
+ a.elapsed_time / 1000000 as elapsed,
+ substrb(replace(a.sql_text,'',' '),1,55) as sql_text,
+ a.cpu_time / 1000000 as cpu_time,
+ a.buffer_gets, -- Lecture en memoire
+ a.disk_reads, -- Lecture sur disque
+ a.physical_read_bytes,
+ a.executions,
+ a.rows_processed,
+ a.last_active_time, -- Last time the statistics of a contributing cursor were updated
+ b.module
+from gv$sqlstats a, gv$sql b
+where a.sql_id=b.sql_id
+order by a.elapsed_time desc
+) where rownum <= 25;
\ No newline at end of file
diff --git a/sql/cdb/01_show_pdbs.sql b/sql/cdb/01_show_pdbs.sql
index 20c57ee..037b1d7 100644
--- a/sql/cdb/01_show_pdbs.sql
+++ b/sql/cdb/01_show_pdbs.sql
@@ -4,7 +4,7 @@ col application_root for a25
col application_pdb for a25
col application_seed for a25
-SELECT
+select /* db-html-report */
p.con_id,
p.dbid,
p.name,
diff --git a/summary.sh b/summary.sh
index 7e900c1..5a9e031 100644
--- a/summary.sh
+++ b/summary.sh
@@ -3,91 +3,82 @@
# Ce script exécute des sql pour fournir une vue global de certains aspect de la base
# tous les datafiles, toutes les sauvegardes, toutes les erreur dans alertlog, ...
#------------------------------------------------------------------------------
-export LANG=en_US
-DATETIME=`date +%Y%m%d%H%M`
-HNAME=$(hostname)
-OUTPUT_DIR=output/$(date +%Y%m%d)
-mkdir -p ${OUTPUT_DIR}
+
+# Importe les fonctions utilitaires
+# Le chemin est relatif au script appelant (rapport_bdd.sh)
+source "$(dirname "$0")/sh/utils.sh"
+
+# Les variables DATETIME, HNAME, OUTPUT_DIR, et l'environnement .env sont déjà gérés par rapport_bdd.sh
+# On s'assure que OUTPUT_DIR est défini
+: "${OUTPUT_DIR:?OUTPUT_DIR not set by calling script}"
+: "${DATETIME:?DATETIME not set by calling script}"
+: "${HNAME:?HNAME not set by calling script}"
+
+log_info "Début de l'exécution des scripts de synthèse."
#------------------------------------------------------------------------------
-# inititalisation des variables d'environnement
-#------------------------------------------------------------------------------
-export SCRIPTS_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P)
-
-# Nom du fichier .env
-ENV_FILE=${SCRIPTS_DIR}"/.env"
-
-# Vérifier si le fichier .env existe
-if [ ! -f "$ENV_FILE" ]; then
- echo "Erreur : Le fichier $ENV_FILE n'existe pas."
- echo "Erreur : Impossible de charger les variables d'environnement."
- exit 1
-fi
-
-# Charger les variables d'environnement depuis le fichier .env
-source "$ENV_FILE"
-
-
-#------------------------------------------------------------------------------
-# Execution des scripts sql
+# Execution des scripts sql de synthèse
#------------------------------------------------------------------------------
for sqlfile in summary/*.sql
do
# on prepare le fichier output
FILENAME=$(basename "$sqlfile" | cut -d_ -f2)
BASENAME="${FILENAME%.*}"
- HTML_FILE=${OUTPUT_DIR}/Summary_${BASENAME}_${HNAME}_${DATETIME}.html
+ HTML_FILE="${OUTPUT_DIR}/Summary_${BASENAME}_${HNAME}_${DATETIME}.html"
+
+ log_info "Génération du rapport de synthèse SQL pour ${FILENAME} dans ${HTML_FILE}"
+
# insertion du header HTML
- cat html/00_html_header.html >> ${HTML_FILE}
+ cat html/00_html_header.html > "${HTML_FILE}"
for sid in $(ps -eaf | grep pmon | egrep -v 'grep|ASM|APX1' | cut -d '_' -f3)
do
export ORAENV_ASK=NO
- export ORACLE_SID=$sid
+ export ORACLE_SID="$sid"
+ # shellcheck source=/dev/null
. oraenv -s > /dev/null
# ajout du nom de la base
- echo 'Base de données : '$sid'
' >> ${HTML_FILE}
+ echo "Base de données : ${sid}
" >> "${HTML_FILE}"
# ajouter le resultat du script sql dans la page html
- cat summary/01_sql_header.txt $sqlfile | sqlplus -s / as sysdba >> ${HTML_FILE}
+ # Utilise le sql_header.txt standard
+ cat sql/sql_header.txt "$sqlfile" | sqlplus -s / as sysdba >> "${HTML_FILE}"
done
# insertion du footer HTML
- cat html/99_html_footer.html >> ${HTML_FILE}
-
- echo Rapport synthèse pour ${FILENAME} dans : ${HTML_FILE}
-done
-
-#------------------------------------------------------------------------------
-# exécution des scripts dans sh/local si présents
-# Chemin du dossier local
-#------------------------------------------------------------------------------
-LOCAL_DIR="sh/local"
-
-for shfile in ${LOCAL_DIR}/*.sh
-do
-
- # on prépare le fichier output
- FILENAME=$(basename "$shfile")
- BASENAME="${FILENAME%.*}"
- HTML_FILE=${OUTPUT_DIR}/Summary_${BASENAME}_${HNAME}_${DATETIME}.html
-
- # insertion du header HTML
- cat html/00_html_header.html >> ${HTML_FILE}
-
+ cat html/99_html_footer.html >> "${HTML_FILE}"
+ log_info "Rapport synthèse pour ${FILENAME} généré."
+ echo "
" >> "${HTML_FILE}"
+ done
+
+ #------------------------------------------------------------------------------
+ # exécution des scripts dans sh/local si présents
+ #------------------------------------------------------------------------------
+ LOCAL_DIR="sh/local"
+
if [ -d "$LOCAL_DIR" ]; then
- echo "[INFO] Détection du dossier local : $LOCAL_DIR"
- for f in "$LOCAL_DIR"/*.sh; do
- [ -f "$f" ] || continue
- echo "[INFO] Exécution du script local : $f"
- bash "$f" >> ${HTML_FILE}
+ log_info "Détection du dossier local : ${LOCAL_DIR}"
+ for shfile in "${LOCAL_DIR}"/*.sh
+ do
+ [ -f "$shfile" ] || continue
+ # on prépare le fichier output
+ FILENAME=$(basename "$shfile")
+ BASENAME="${FILENAME%.*}"
+ HTML_FILE="${OUTPUT_DIR}/Summary_${BASENAME}_${HNAME}_${DATETIME}.html"
+ log_info "Génération du rapport de synthèse Shell pour ${FILENAME} dans ${HTML_FILE}"
+ # insertion du header HTML
+ cat html/00_html_header.html > "${HTML_FILE}"
+ # Exécution du script local en utilisant run_and_print
+ print_h2 "Résultat du script : ${FILENAME}" >> "${HTML_FILE}"
+ # Le script shfile lui-même doit être exécuté, et il contient déjà ses propres print_h2/run_and_print
+ # Donc, on l'exécute directement.
+ bash "$shfile" >> "${HTML_FILE}"
+ # insertion du footer HTML
+ cat html/99_html_footer.html >> "${HTML_FILE}"
+ log_info "Rapport synthèse pour ${FILENAME} généré."
+ echo "" >> "${HTML_FILE}"
done
else
- echo "[INFO] Aucun script local détecté dans ${LOCAL_DIR}."
+ log_info "Aucun script local détecté dans ${LOCAL_DIR}."
fi
-
- # insertion du footer HTML
- cat html/99_html_footer.html >> ${HTML_FILE}
-
- echo Rapport synthèse pour ${FILENAME} dans : ${HTML_FILE}
-done
\ No newline at end of file
+ log_info "Fin de l'exécution des scripts de synthèse."
\ No newline at end of file
diff --git a/summary/01_sql_header.txt b/summary/01_sql_header.txt
deleted file mode 100644
index ddae063..0000000
--- a/summary/01_sql_header.txt
+++ /dev/null
@@ -1 +0,0 @@
-SET PAGES 999 FEEDBACK OFF MARKUP HTML ON SPOOL ON PREFORMAT OFF ENTMAP OFF