98 Commits

Author SHA1 Message Date
Yacine31
abfe5af25d mutualisation des headers et footer 2025-04-18 02:04:39 +02:00
Yacine31
806deb1bed header eet footer html dans un rép séparé 2025-04-18 01:17:36 +02:00
Yacine31
772f56a0c7 ajout du footer et du JS 2025-04-18 00:35:23 +02:00
Yacine31
a63254eeae modifcation du CSS et nettoyage 2025-04-18 00:30:37 +02:00
Yacine31
22232d89e3 correction de la sortie HTML 2025-04-17 20:16:51 +02:00
Yacine31
e58a87826d Adaptation de find dans local.sh à l'env de test YOU 2025-04-17 20:15:03 +02:00
Yacine31
dfb45fe9bb correction mineures 2025-04-17 19:59:58 +02:00
Yacine31
d6440e05e3 Ajout de l'exécution des scripts présents dans sh/local 2025-04-17 19:56:35 +02:00
Yacine31
5ce6a49263 ajout du répertoire sh/local pour des scripts spécifiques, ils seront ignorés par git lors de màj 2025-04-17 19:51:49 +02:00
Yacine31
920f6bca1d update undo 2025-04-17 01:21:18 +02:00
Yacine31
4ad0376ddf Ajout des infos UNDOTBS 2025-04-17 01:12:09 +02:00
Yacine31
da4bc80fad correction du bug de coloration 2025-04-17 00:59:04 +02:00
Yacine31
a2aaffcd86 coloriage via CSS 2025-04-17 00:39:49 +02:00
Yacine31
6c198f807e modif du nom de fichier output HTML 2025-04-16 23:54:12 +02:00
Yacine31
7aaf4dc860 rename des sql files 2025-04-16 23:50:50 +02:00
Yacine31
a1eb5ca51a arrangement des colonnes percent_used 2025-04-16 23:49:08 +02:00
Yacine31
2fc36734d9 ajout de la sythèse des tablespaces 2025-04-16 23:11:54 +02:00
Yacine31
b3f7817819 mise à jour des titres 2025-04-16 23:07:31 +02:00
Yacine31
7be3142a28 Ajout du nom de la base en HTML 2025-04-16 22:57:10 +02:00
Yacine31
1c62d6b3d5 correction mineure 2025-04-16 22:54:05 +02:00
Yacine31
d65ec2457d Ajout du noms de la base 2025-04-16 22:53:36 +02:00
Yacine31
74151c3d59 Mise à jour CSS 2025-04-16 22:49:04 +02:00
Yacine31
45b8b6179f Correction des références au fichiers dans le répertoire summary 2025-04-16 22:45:38 +02:00
Yacine31
0ad1bd7040 Correction de syntaxe 2025-04-16 22:44:05 +02:00
Yacine31
45a67a6e61 rename et ajout de sql pour les alertlog 2025-04-16 22:42:39 +02:00
Yacine31
b8ab331b10 déplacement de run.sh vers la racine 2025-04-16 22:37:42 +02:00
Yacine31
8be1dca641 Update run.sh 2025-04-16 21:56:23 +02:00
Yacine31
902f7e8423 consolidation des scripts 2025-04-16 21:52:18 +02:00
Yacine31
8db0bd13d3 Update 99_footer.html 2025-04-16 21:12:27 +02:00
Yacine31
60a51ee98d update CSS 2025-04-16 21:06:43 +02:00
Yacine31
a4f31f44a8 update CSS 2025-04-16 20:50:39 +02:00
Yacine31
a2d95dd682 maj style html 2025-04-16 20:44:14 +02:00
Yacine31
b646a0c12c Update run.sh 2025-04-16 20:27:22 +02:00
Yacine31
b2104c6a1d mise à jour html 2025-04-16 20:26:14 +02:00
Yacine31
54e620fc72 Update 20_datafile.sql 2025-04-16 20:22:47 +02:00
Yacine31
a99dbf20a0 Update 00_header.html 2025-04-16 20:05:25 +02:00
Yacine31
98534e827a Update 00_header.html 2025-04-16 20:02:54 +02:00
Yacine31
41e9097f99 Update 99_footer.html 2025-04-16 19:58:35 +02:00
Yacine31
436f12020a Update run.sh 2025-04-16 19:54:37 +02:00
Yacine31
fb1c136904 Update run.sh 2025-04-16 19:53:29 +02:00
Yacine31
c143a4d25d maj style html 2025-04-16 19:49:46 +02:00
Yacine31
a2f09f1275 mise à jour code html 2025-04-16 18:46:56 +02:00
Yacine31
57d57273e1 Update 01_sql_header.txt 2025-04-16 14:27:02 +02:00
Yacine31
98f57a6bc2 ajout de sql_header.txt 2025-04-16 14:24:51 +02:00
Yacine31
5713cfbe22 Synthèse des bases 2025-04-16 14:08:29 +02:00
Yacine31
7b1c4a5114 Create 09_os_info_modified.sh 2025-03-31 16:56:33 +02:00
Yacine31
09167bbf89 Update 25_last_alertlog_errors.sql
màj format date hh:mm:ss
2024-07-09 03:33:50 +02:00
Yacine31
0f7a788c6b Update 09_os_info.sh 2024-06-18 01:52:07 +02:00
Yacine31
2be3bf6552 Update 09_os_info.sh 2024-06-18 01:32:15 +02:00
Yacine31
fbfc441577 Update 09_os_info.sh 2024-06-18 01:31:23 +02:00
Yacine31
b3270d5e08 Update 09_os_info.sh 2024-06-18 01:28:59 +02:00
Yacine31
02ddef481d Update 09_os_info.sh 2024-06-18 01:25:15 +02:00
Yacine31
b3ba6414ff Update 09_os_info.sh 2024-06-18 01:17:31 +02:00
Yacine31
11d0b89490 20b remplacé par 20c 2024-06-06 09:02:02 +02:00
Yacine31
b2ddf8945f Update 20c_datafile.sql 2024-06-06 08:09:23 +02:00
Yacine31
f34d4cbcaa Update 20d_tempfile.sql 2024-06-06 08:06:13 +02:00
Yacine31
ca1afbbad6 Update 20d_tempfile.sql 2024-06-06 08:02:12 +02:00
Yacine31
50c3afd85c Update 20d_tempfile.sql 2024-06-06 08:00:39 +02:00
Yacine31
0933917e87 Update 20d_tempfile.sql 2024-06-06 07:59:22 +02:00
Yacine31
ad8b5c9221 Update 20d_tempfile.sql 2024-06-06 07:41:11 +02:00
Yacine31
b71f09f5c5 Update 20d_tempfile.sql 2024-06-06 07:35:39 +02:00
Yacine31
3f34713c52 Update 20d_tempfile.sql 2024-06-06 07:31:17 +02:00
Yacine31
31041145bf Create 20d_tempfile.sql 2024-06-06 07:21:58 +02:00
Yacine31
b2b7bc120b Update 20c_datafile.sql 2024-06-06 07:06:45 +02:00
Yacine31
673814a4c6 Update 20c_datafile.sql 2024-06-06 06:59:42 +02:00
Yacine31
7971f53c4d Update 20c_datafile.sql 2024-06-06 06:52:29 +02:00
Yacine31
97b27fd03b Update 20c_datafile.sql 2024-06-06 06:51:40 +02:00
Yacine31
b32838edea Update 20c_datafile.sql 2024-06-06 06:50:12 +02:00
Yacine31
3188a33462 Update 20c_datafile.sql 2024-06-06 06:44:59 +02:00
Yacine31
6ad8a6028c Update 20c_datafile.sql 2024-06-06 06:41:20 +02:00
Yacine31
3053b830eb Update 20c_datafile.sql 2024-06-06 06:39:56 +02:00
Yacine31
8f52a24f1a Update 20c_datafile.sql 2024-06-06 06:38:54 +02:00
Yacine31
006e08066c Update 20c_datafile.sql 2024-06-06 06:37:11 +02:00
Yacine31
00c8ad528e Update 20c_datafile.sql 2024-06-06 06:35:47 +02:00
Yacine31
482c80a6eb Update 20c_datafile.sql 2024-06-06 06:12:37 +02:00
Yacine31
b9b67f8b2b Update 20c_datafile.sql 2024-06-06 06:11:38 +02:00
Yacine31
0d0b0d8de4 Update 20c_datafile.sql 2024-06-06 06:08:28 +02:00
Yacine31
21b3ccaf18 Update 20c_datafile.sql 2024-06-06 05:36:58 +02:00
Yacine31
670ed6c2b8 Update 20c_datafile.sql 2024-06-06 05:33:57 +02:00
Yacine31
a5752dde60 Update 20c_datafile.sql 2024-06-06 05:30:34 +02:00
Yacine31
86d66b6255 Update 20c_datafile.sql 2024-06-06 05:29:06 +02:00
Yacine31
8900c8bcfc Create 20c_datafile.sql 2024-06-06 05:26:45 +02:00
Yacine31
fe3688483e Update 01_show_pdbs.sql 2024-06-06 02:58:08 +02:00
Yacine31
f49a4fe72b Update 01_show_pdbs.sql 2024-06-06 02:54:43 +02:00
Yacine31
1b3814261c Update 01_show_pdbs.sql 2024-06-05 21:13:37 +02:00
Yacine31
cc07ea4a2c Update rapport_bdd.sh 2024-06-05 21:12:30 +02:00
Yacine31
2c4333077f Update rapport_bdd.sh 2024-06-05 21:05:39 +02:00
Yacine31
e59dc7eb32 Update rapport_bdd.sh 2024-06-05 21:04:31 +02:00
Yacine31
aa22f4ed54 Update rapport_bdd.sh 2024-06-05 21:00:55 +02:00
Yacine31
36a655bbbf Update rapport_bdd.sh 2024-06-05 20:58:10 +02:00
Yacine31
a4bcab409a Update rapport_bdd.sh 2024-06-05 20:56:41 +02:00
Yacine31
24089d76a0 ajout des scripts pour CDB 2024-06-05 20:51:54 +02:00
Yacine31
0a11a0fb78 Create is_CDB.sh 2024-06-05 20:41:50 +02:00
Yacine31
8d02a42628 Update 09_os_info.sh
grep -o remplacée par perl -lne
2024-03-08 18:16:29 +01:00
Yacine31
11a88408ef Update 09_os_info.sh 2024-03-08 17:55:07 +01:00
Yacine31
163c3b7fe9 Update 09_os_info.sh 2024-03-08 16:56:22 +01:00
Yacine31
a4bc29b998 formatage SQL 2024-02-10 02:30:28 +01:00
Yacine31
2d51059e6c Create 39_feature_usage_statistics.sql 2024-02-10 02:00:34 +01:00
55 changed files with 1308 additions and 477 deletions

View File

@@ -1,53 +1,50 @@
PRO <h2>Configuratiom ASM</h2>
SELECT
dg.name,
dg.state,
dg.type,
dg.total_mb,
dg.free_mb,
dg.usable_file_mb,
compatibility,
dg.database_compatibility
DG.NAME,
DG.STATE,
DG.TYPE,
DG.TOTAL_MB,
DG.FREE_MB,
DG.USABLE_FILE_MB,
COMPATIBILITY,
DG.DATABASE_COMPATIBILITY
FROM
v$asm_diskgroup dg;
V$ASM_DISKGROUP DG;
-- Viewing disks in disk groups with V$ASM_DISK
SELECT
dg.name "Disk Grp Name",
a.name "Name",
a.failgroup,
a.path,
a.os_mb,
a.total_mb,
a.free_mb,
a.cold_used_mb,
a.header_status,
a.mode_status,
a.state,
a.redundancy,
to_char(a.create_date, 'DD/MM/YYYY HH24:MI') "Create Date"
DG.NAME "Disk Grp Name",
A.NAME "Name",
A.FAILGROUP,
A.PATH,
A.OS_MB,
A.TOTAL_MB,
A.FREE_MB,
A.COLD_USED_MB,
A.HEADER_STATUS,
A.MODE_STATUS,
A.STATE,
A.REDUNDANCY,
TO_CHAR(A.CREATE_DATE, 'DD/MM/YYYY HH24:MI') "Create Date"
FROM
v$asm_disk a,
v$asm_diskgroup dg
V$ASM_DISK A,
V$ASM_DISKGROUP DG
WHERE
a.group_number = dg.group_number
A.GROUP_NUMBER = DG.GROUP_NUMBER
ORDER BY
dg.name,
a.name
;
DG.NAME,
A.NAME;
-- Viewing disk group clients with V$ASM_CLIENT
SELECT
dg.name AS diskgroup,
c.instance_name AS instance,
db_name AS dbname,
software_version AS software,
compatible_version AS compatible
DG.NAME AS DISKGROUP,
C.INSTANCE_NAME AS INSTANCE,
DB_NAME AS DBNAME,
SOFTWARE_VERSION AS SOFTWARE,
COMPATIBLE_VERSION AS COMPATIBLE
FROM
v$asm_diskgroup dg,
v$asm_client c
V$ASM_DISKGROUP DG,
V$ASM_CLIENT C
WHERE
dg.group_number = c.group_number;
DG.GROUP_NUMBER = C.GROUP_NUMBER;

View File

@@ -1,10 +1,13 @@
prompt <h2>Les dernières erreurs ASM (Les 30 derniers jours et les 50 dernières lignes)</h2>
-- set pages 99
select to_char(ORIGINATING_TIMESTAMP, 'DD-MM-YYYY HH-MM-SS') "Date", message_text "Message"
FROM X$DBGALERTEXT
WHERE originating_timestamp > systimestamp - 30
AND regexp_like(message_text, '(ORA-)')
AND rownum <=50
order by originating_timestamp desc;
SELECT
TO_CHAR(ORIGINATING_TIMESTAMP, 'DD-MM-YYYY HH-MM-SS') "Date",
MESSAGE_TEXT "Message"
FROM
X$DBGALERTEXT
WHERE
ORIGINATING_TIMESTAMP > SYSTIMESTAMP - 30
AND REGEXP_LIKE(MESSAGE_TEXT, '(ORA-)')
AND ROWNUM <=50
ORDER BY
ORIGINATING_TIMESTAMP DESC;

44
html/00_html_header.html Normal file
View File

@@ -0,0 +1,44 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- $Header: DB Report -->
<!-- Author: yacine.oumghar@axiome.io -->
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Rapport de Base Oracle</title>
<style type="text/css">
body { font:12pt; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f9f9f9; padding: 20px; color: #333; }
h1 { font-size:16pt; font-weight:bold; color:#336699; border-bottom:1px solid #336699; margin-top:0pt; margin-bottom:0pt; padding:0px 0px 0px 0px; }
h2 { font-size:14pt; font-weight:bold; color:#336699; margin-top:10pt; margin-bottom:0pt; }
h3 { font-size:14pt; font-weight:normal; color:#336699; margin-top:4pt; margin-bottom:0pt; }
p { line-height: 1.0; margin-bottom: 1.2em; }
pre { display: inline-block; background-color: #f8f8f8; border: 1px solid #ccc; padding: 1em; overflow-x: auto; font-family: monospace; font-size: 0.9em; line-height: 1.2; color: #333; white-space: pre-wrap; word-break: break-all; }
a {color:#663300; }
table { font-size:10pt; border-collapse: collapse; margin: 10px 0; background-color: #fff; empty-cells:show; white-space:nowrap; box-shadow: 0 2px 5px rgba(0,0,0,0.1); }
li { font-size:10pt; color:black; padding-left:4px; padding-right:4px; padding-bottom:2px; }
tr { color:black; background:white; }
tr:hover { color:white; background:#0066CC; }
tr.main { color:black; background:white; }
tr.main:hover { color:black; background:white; }
tr.selected { background-color: #d1eaff !important; }
td { padding: 1px 5px; border: 1px solid #ddd; }
th { background-color: #0066CC; color: white; font-weight:normal; cursor: pointer; }
th:hover { background-color: #0066AA; }
th.asc::after { content: " 🔼"; }
th.desc::after { content: " 🔽"; }
td.c { text-align:center; }
font.n { font-size:10pt; font-style:italic; color:#336699; }
font.f { font-size:10pt; color:#999999; border-top:1px solid #336699; margin-top:30pt; }
.highlight { background: red; }
.pct_warning { background: yellowgreen; }
.pct_error { background: red; }
/* Style pour les couleurs conditionnelles */
.orange { background-color: #ff9800; }
.red { background-color: #f44336; }
/* Alignement des cellules numériques à droite */
.numeric { text-align: right; }
</style>

144
html/99_html_footer.html Normal file
View File

@@ -0,0 +1,144 @@
<br />
</body>
<script>
document.addEventListener('DOMContentLoaded', () => {
const getCellValue = (tr, idx) => tr.children[idx].innerText || tr.children[idx].textContent;
const comparer = (idx, asc) => (a, b) => {
const v1 = getCellValue(asc ? a : b, idx).replace(',', '.');
const v2 = getCellValue(asc ? b : a, idx).replace(',', '.');
return !isNaN(v1) && !isNaN(v2) ? parseFloat(v1) - parseFloat(v2) : v1.localeCompare(v2);
};
// 🎯 Configuration des règles de colorisation
const rules = [
{
keywords: ["percent_used", "% used", "utilisation", "%"],
thresholds: [
{ min: 90, color: "#fecaca", text: "#991b1b" }, // rouge
{ min: 80, color: "#fef08a", text: "#92400e" }, // jaune
{ min: 0, color: "#bbf7d0", text: "#065f46" } // vert
]
},
{
keywords: ["status"], // 👈 règle pour la colonne STATUS
matchText: "FAILED", // mot-clé à détecter
style: { // style à appliquer si trouvé
color: "#fff",
backgroundColor: "#dc2626", // rouge foncé
fontWeight: "bold"
}
},
{
keywords: ["status"], // 👈 règle pour la colonne STATUS
matchText: "COMPLETED", // mot-clé à détecter
style: { // style à appliquer si trouvé
backgroundColor: "#bbf7d0", // vert
fontWeight: "bold"
}
},
{
keywords: ["account_status"], // 👈 règle pour la colonne STATUS
matchText: "OPEN", // mot-clé à détecter
style: { // style à appliquer si trouvé
backgroundColor: "#bbf7d0", // vert
fontWeight: "bold"
}
}
// Tu peux ajouter dautres règles ici si besoin
];
// 🎨 Appliquer les règles de coloration dynamiquement
const colorizeDynamicColumns = () => {
document.querySelectorAll("table").forEach(table => {
const rows = table.querySelectorAll("tr");
if (rows.length === 0) return;
const headerRow = rows[0];
const ths = headerRow.querySelectorAll("th");
rules.forEach(rule => {
let targetIndex = -1;
ths.forEach((th, index) => {
const text = th.textContent.trim().toLowerCase();
const match = rule.keywords.some(keyword => text.includes(keyword));
if (match && targetIndex === -1) {
targetIndex = index;
}
});
if (targetIndex !== -1) {
rows.forEach((row, i) => {
if (i === 0) return; // skip header
const cell = row.children[targetIndex];
if (!cell) return;
const rawText = cell.textContent.trim();
const numeric = parseFloat(rawText.replace('%', '').replace(',', '.'));
if (rule.matchText) {
if (rawText.toUpperCase().includes(rule.matchText.toUpperCase())) {
Object.entries(rule.style).forEach(([prop, val]) => {
cell.style[prop] = val;
});
}
} else if (!isNaN(numeric)) {
for (const threshold of rule.thresholds) {
if (numeric >= threshold.min) {
cell.style.backgroundColor = threshold.color;
cell.style.color = threshold.text;
cell.style.fontWeight = 'bold';
break;
}
}
}
// alignement à droite si numérique
if (!isNaN(numeric)) {
cell.classList.add("numeric");
}
});
}
});
});
};
// Appliquer alignement numérique à toutes les cellules numériques
const alignNumericCells = () => {
document.querySelectorAll('table tr:nth-child(n+2)').forEach(row => {
Array.from(row.children).forEach(cell => {
const value = parseFloat(cell.textContent.replace(',', '.'));
if (!isNaN(value)) {
cell.classList.add('numeric');
}
});
});
};
// 🔁 Tri au clic sur les entêtes
document.querySelectorAll('table th').forEach(th => {
th.addEventListener('click', () => {
const table = th.closest('table');
const tbody = table.querySelector('tbody') || table;
const rows = Array.from(tbody.querySelectorAll('tr:nth-child(n+2)'));
const index = Array.from(th.parentNode.children).indexOf(th);
const asc = !th.classList.contains('asc');
table.querySelectorAll('th').forEach(th => th.classList.remove('asc', 'desc'));
th.classList.toggle('asc', asc);
th.classList.toggle('desc', !asc);
rows.sort(comparer(index, asc)).forEach(row => tbody.appendChild(row));
// Recoloriser après le tri (au cas où les lignes changent de position)
colorizeDynamicColumns();
});
});
// 🚀 Initialisation
colorizeDynamicColumns();
alignNumericCells();
});
</script>
</html>

View File

@@ -1,3 +1,4 @@
#!/bin/bash
export LANG=en_US
DATETIME=`date +%Y%m%d%H%M`
HNAME=$(hostname)
@@ -11,7 +12,7 @@ do
export HTML_FILE=${OUTPUT_DIR}/Rapport_${HNAME}_${ORACLE_SID}_${DATETIME}.html
. oraenv -s > /dev/null
cat sql/00_html_header.html >> ${HTML_FILE}
cat html/00_html_header.html >> ${HTML_FILE}
DATE_JOUR=$(date +"%d/%m/%Y %Hh%M")
echo "<h1>Rapport de base de données ${ORACLE_SID} sur le serveur $HNAME </h1>
<h2>Date : ${DATE_JOUR}</h2>
@@ -23,7 +24,7 @@ do
echo "<h1>Configuration système</h1>" >> ${HTML_FILE}
for f in sh/*.sh
do
/bin/sh $f >> ${HTML_FILE}
bash $f >> ${HTML_FILE}
done
echo "<br><br>" >> ${HTML_FILE}
@@ -33,33 +34,46 @@ do
echo "<h1>Configuration de l'instance ASM</h1>" >> ${HTML_FILE}
for f in asm/*.sql
do
# sed '1 s/^/SET PAGES 999 FEEDBACK OFF MARKUP HTML ON SPOOL ON PREFORMAT OFF ENTMAP OFF\n/' $f | sqlplus -s / as sysdba >> ${HTML_FILE}
cat asm/sql_header.txt $f | sqlplus -s / as sysdba >> ${HTML_FILE}
done
fi
# vérifier si la base est une CDB
if [ "$(/bin/sh sql/cdb/is_CDB.sh | tail -1)" == "YES" ]; then
# Executer les scripts sql pour les PDB
for f in sql/cdb/*.sql; do
# Exécuter les scripts SQL pour les PDB
cat sql/sql_header.txt $f | sqlplus -s / as sysdba >> ${HTML_FILE}
done
fi
# execution des scripts sql
echo "<h1>Configuration de la base de données ${ORACLE_SID}</h1>" >> ${HTML_FILE}
for f in sql/*.sql
do
# sed '1 s/^/SET PAGES 999 FEEDBACK OFF MARKUP HTML ON SPOOL ON PREFORMAT OFF ENTMAP OFF\n/' $f | sqlplus -s / as sysdba >> ${HTML_FILE}
cat sql/sql_header.txt $f | sqlplus -s / as sysdba >> ${HTML_FILE}
done
sed -i 's/<table.*>$/<table class="table table-striped">/g' ${HTML_FILE}
# exécution des scripts dans sh/local si présents
# Chemin du dossier local
LOCAL_DIR="sh/local"
cat sql/99_html_footer.html >> ${HTML_FILE}
# Exécution des scripts locaux si le dossier existe
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}
done
else
echo "[INFO] Aucun script local détecté dans ${LOCAL_DIR}."
fi
# coloriage des mots clé en rouge ou en vert
for txt in INVALID FAILED NOARCHIVELOG OFFLINE MOUNTED
do
sed -i "s#<td>${txt}</td>#<td style='color: red; background-color: yellow;'>${txt}</td>#g" ${HTML_FILE}
done
for txt in COMPLETED
do
sed -i "s#<td>${txt}</td>#<td style='color: white; background-color: green;'>${txt}</td>#g" ${HTML_FILE}
done
cat html/99_html_footer.html >> ${HTML_FILE}
echo Rapport dans le fichier html : ${HTML_FILE}
done
# execution des scripts de synthèse :
bash summary.sh

View File

@@ -8,16 +8,20 @@ echo "</pre>"
echo "<h2>Listeners en cours d'exécution :</h2>"
echo "<pre>"
ps -ef | grep tnslsnr| grep -v grep
ps -ef | grep tnslsnr | grep -v grep
echo "</pre>"
echo "<h2>Statut des listeners :</h2>"
ps -ef | grep tnslsnr| grep -v grep | while read l
echo "<h2>Statut du listener :</h2>"
# ps -ef | grep tnslsnr | egrep -i "LISTENER_${ORACLE_SID}" | grep -v grep | while read l
ps -ef | grep tnslsnr | egrep -i " LISTENER |${ORACLE_SID}" | grep -v grep | while read l
do
# Récupérer le chemin du binaire tnslsnr à partir de la sortie de ps
binary_path=$(echo $l | awk '{print $8}' | sed 's#/bin/tnslsnr##')
# Récupérer le chemin ORACLE_HOME à partir de la sortie de ps -ef
# ---- La commande grep -o ne fonctionne pas sur AIX, on la remplace par perl -lne
# binary_path=$(echo $l | grep -o '/[^ ]*' | sed 's#/bin/tnslsnr##')
binary_path=$(echo $l | perl -lne 'print $1 if /(\S*tnslsnr\S*)/' | sed 's#/bin/tnslsnr##')
# Extraire le nom du listener
listener_name=$(echo $l | awk '{print $9}')
# listener_name=$(echo $l | grep -o 'tnslsnr [^ ]*' | sed 's/tnslsnr //')
listener_name=$(echo $l | perl -lne 'print $1 if /\btnslsnr\s+(\S+)/' | sed 's/tnslsnr //')
# Construire la commande lsnrctl status
lsnrctl_command="$binary_path/bin/lsnrctl status $listener_name"
# exécuter la commande

73
sh/09_os_info.sh_modified Normal file
View File

@@ -0,0 +1,73 @@
# 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

View File

@@ -0,0 +1,22 @@
#!/bin/bash
# script pour vérifier les logs des fichiers datapump et voir si des erreurs sont présentes
EXPDP_DIR="/u04/expdp"
CURRENT_DATE=$(date +%Y_%m) # date au format 2025_04
echo "<h2>Vérification des logs des exports Datapump</h2>"
# vérifier si une erreur ORA- est pésente dans les fichiers logs
echo "<h3>Vérification de la présence d'erreurs dans les logs :</h3>"
RESULT=$(find "${EXPDP_DIR}" -iname "export_*.log" -exec grep -H "ORA-" "{}" \;)
if [ -z "$RESULT" ]; then
echo "<pre>Aucune erreur ORA- détectée dans les fichiers logs du mois ${CURRENT_DATE}.</pre>"
else
echo "<pre>$RESULT</pre>"
fi
# afficher les dernières lignes des fichiers log pour voir les les exports se sont bien déroulés
echo "<h3>Vérification des dernières lignes dans les logs :</h3>"
echo "<pre>"
find "${EXPDP_DIR}" -iname "export_*.log" -exec bash -c 'echo "--- {} ---"; tail -3 "{}"' \;
echo "</pre>"

View File

@@ -1,35 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- $Header: DB Report -->
<!-- Author: yacine.oumghar@axiome.io -->
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Rapport Base Oracle</title>
<style type="text/css">
body {font:12pt Arial,Helvetica,Geneva,sans-serif; color:black; background:white;}
h1 {font-size:16pt; font-weight:bold; color:#336699; border-bottom:1px solid #336699; margin-top:0pt; margin-bottom:0pt; padding:0px 0px 0px 0px;}
h2 {font-size:14pt; font-weight:bold; color:#336699; margin-top:10pt; margin-bottom:0pt;}
h3 {font-size:12pt; font-weight:bold; color:#336699; margin-top:4pt; margin-bottom:0pt;}
pre {font:10pt monospace,Monaco,"Courier New",Courier; display: inline-block; padding: 10px; border: 1px solid #000; border-radius: 5px; background-color: #f5f5f5; overflow: auto;}
a {color:#663300;}
table {font-size:10pt; border-collapse:collapse; empty-cells:show; white-space:nowrap; border:1px solid #336699;}
li {font-size:10pt; color:black; padding-left:4px; padding-right:4px; padding-bottom:2px;}
th {font-weight:bold; color:white; background:#0066CC; padding-left:4px; padding-right:4px; padding-bottom:2px;}
tr {color:black; background:white;}
tr:hover {color:white; background:#0066CC;}
tr.main {color:black; background:white;}
tr.main:hover {color:black; background:white;}
td {vertical-align:top; border:1px solid #336699;padding-left: 5px;padding-right: 5px;}
td.c {text-align:center;}
font.n {font-size:10pt; font-style:italic; color:#336699;}
font.f {font-size:10pt; color:#999999; border-top:1px solid #336699; margin-top:30pt;}
div.google-chart {width:&&edb360_chart_width.; height:500px;}
.highlight {background: red;}
.pct_warning {background: yellowgreen;}
.pct_error {background: red}
</style>

View File

@@ -39,14 +39,6 @@ CASE WHEN sga.target > 0 THEN 'SGA ' ||TRIM(TO_CHAR(ROUND(sga.target / POWER(2
CASE WHEN pga.target > 0 THEN 'PGA ' ||TRIM(TO_CHAR(ROUND(pga.target / POWER(2,30), 1), '999,990.0'))||' GB, ' END||
CASE WHEN mem.target > 0 THEN 'AMM' ELSE CASE WHEN sga.target > 0 THEN 'ASMM' ELSE 'MANUAL' END END
FROM mem, sga, pga
-- UNION ALL
-- SELECT 'Hardware:', 'Unknown' FROM dual
-- UNION ALL
-- SELECT 'Storage:','' FROM DUAL WHERE '' IS NOT NULL
-- UNION ALL
-- SELECT 'Storage Version:','' FROM DUAL WHERE '' IS NOT NULL
-- UNION ALL
-- SELECT 'Processor:', 'Common KVM processor' FROM DUAL
UNION ALL
SELECT 'Physical CPUs:', core.cnt||' cores'||CASE WHEN rac.instances > 0 THEN ', on '||rac.db_type END FROM rac, core
UNION ALL

View File

@@ -1,21 +1,4 @@
prompt <h2>Taille de la base de données :</h2>
-- set head off
-- col "Database Size" format 99,999.99
-- select 'Database Size (Go) : ' || (
-- SELECT ROUND(SUM(TAILLE_BYTES)/1024/1024/1024,2) "Database Size" FROM
-- (
-- SELECT SUM(FILE_SIZE_BLKS*BLOCK_SIZE) TAILLE_BYTES FROM V$CONTROLFILE
-- UNION ALL
-- SELECT SUM(BYTES) FROM V$TEMPFILE
-- UNION ALL
-- SELECT SUM(BYTES) FROM V$DATAFILE
-- UNION ALL
-- SELECT SUM(MEMBERS*BYTES) FROM V$LOG
-- UNION ALL
-- SELECT BYTES FROM V$STANDBY_LOG SL, V$LOGFILE LF WHERE SL.GROUP# = LF.GROUP#
-- )
-- )
-- from dual;
WITH
sizes AS (

View File

@@ -1,2 +1,6 @@
prompt <h2>Database/Version</h2>
select * from v$version;
SELECT
*
FROM
V$VERSION;

View File

@@ -1,2 +1,13 @@
prompt <h2>Paramèters de la base de données : </h2>
select NAME, DISPLAY_VALUE, DESCRIPTION, UPDATE_COMMENT from v$parameter where ISDEFAULT='FALSE' order by name;
SELECT
NAME,
DISPLAY_VALUE,
DESCRIPTION,
UPDATE_COMMENT
FROM
V$PARAMETER
WHERE
ISDEFAULT='FALSE'
ORDER BY
NAME;

View File

@@ -1,3 +1,8 @@
prompt <h2>Paramètres NLS au niveau de la base de données :</h2>
select * from nls_database_parameters order by parameter;
SELECT
*
FROM
NLS_DATABASE_PARAMETERS
ORDER BY
PARAMETER;

View File

@@ -1,8 +1,8 @@
prompt <h2>Fonctionnalités installées dans la base de données (DBA_REGISTRY) :</h2>
SELECT *
FROM dba_registry
SELECT
*
FROM
DBA_REGISTRY
ORDER BY
comp_id;
COMP_ID;

View File

@@ -1,10 +1,11 @@
prompt <h2>Resource Limit (GV$RESOURCE_LIMIT)</h2>
SELECT
*
FROM
gv$resource_limit
GV$RESOURCE_LIMIT
WHERE
resource_name IN ( 'processes', 'sessions' )
RESOURCE_NAME IN ( 'processes', 'sessions' )
ORDER BY
resource_name,
inst_id;
RESOURCE_NAME,
INST_ID;

View File

@@ -1,9 +1,14 @@
prompt <h2>Les 50 dernières opérations de Resize de la mémoire :</h2>
alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';
SELECT *
FROM gv$memory_resize_ops
where rownum <=50
ORDER BY
inst_id,
start_time DESC,
component;
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
SELECT
*
FROM
GV$MEMORY_RESIZE_OPS
WHERE
ROWNUM <=50
ORDER BY
INST_ID,
START_TIME DESC,
COMPONENT;

View File

@@ -1,4 +1,19 @@
prompt <h2>SGA Target Advice</h2>
select * from gv$sga_target_advice;
SELECT
*
FROM
GV$SGA_TARGET_ADVICE;
prompt <h2>PGA Target Advice</h2>
select * from gv$pga_target_advice;
SELECT
*
FROM
GV$PGA_TARGET_ADVICE;
prompt <h2>Memory Target Advice</h2>
SELECT
*
FROM
GV$MEMORY_TARGET_ADVICE;

View File

@@ -1,40 +1,9 @@
prompt <h2>Détail des tablespaces : </h2>
COL TABLESPACE_NAME FORMAT A20 HEAD "Nom Tablespace"
COL PCT_OCCUPATION_THEORIQUE FORMAT 990.00 HEAD "% Occup"
COL TAILLE_MIB FORMAT 99999990.00 HEAD "Taille MB"
COL TAILLE_MAX_MIB FORMAT 99999990.00 HEAD "Taille max MB"
COL TAILLE_OCCUPEE_MIB FORMAT 99999990.00 HEAD "Espace occupé MiB"
-- WITH TS_FREE_SPACE AS
-- (select tablespace_name, file_id, sum(bytes) FREE_O from dba_free_space group by tablespace_name, file_id
-- ), TEMP_ALLOC AS
-- (select tablespace_name, file_id, sum(bytes) USED_O from v$temp_extent_map group by tablespace_name, file_id
-- )
-- SELECT
-- TABLESPACE_NAME,
-- SUM(TAILLE_MIB) TAILLE_MIB,
-- SUM(TAILLE_MAX_MIB) TAILLE_MAX_MIB,
-- SUM(TAILLE_OCCUPEE_MIB) TAILLE_OCCUPEE_MIB,
-- ROUND(SUM(TAILLE_OCCUPEE_MIB)*100/SUM(GREATEST(TAILLE_MAX_MIB,TAILLE_MIB)),2) PCT_OCCUPATION_THEORIQUE
-- FROM
-- (
-- SELECT D.FILE_NAME, D.TABLESPACE_NAME, D.BYTES/1024/1024 TAILLE_MIB, DECODE(D.AUTOEXTENSIBLE,'NO',D.BYTES,D.MAXBYTES)/1024/1024 TAILLE_MAX_MIB,
-- (D.BYTES-FO.FREE_O)/1024/1024 TAILLE_OCCUPEE_MIB
-- FROM
-- DBA_DATA_FILES D, TS_FREE_SPACE FO
-- WHERE
-- D.TABLESPACE_NAME=FO.TABLESPACE_NAME
-- AND D.FILE_ID=FO.FILE_ID
-- UNION ALL
-- SELECT T.FILE_NAME, T.TABLESPACE_NAME, T.BYTES/1024/1024 TAILLE_MIB, DECODE(T.AUTOEXTENSIBLE,'NO',T.BYTES,T.MAXBYTES)/1024/1024 TAILLE_MAX_MIB,
-- (TA.USED_O)/1024/1024 TAILLE_OCCUPEE_MIB
-- FROM
-- DBA_TEMP_FILES T, TEMP_ALLOC TA
-- WHERE
-- T.TABLESPACE_NAME=TA.TABLESPACE_NAME
-- AND T.FILE_ID=TA.FILE_ID
-- )
-- GROUP BY TABLESPACE_NAME
-- ORDER BY TABLESPACE_NAME;--
-- COL TABLESPACE_NAME FORMAT A20 HEAD "Nom Tablespace"
-- COL PCT_OCCUPATION_THEORIQUE FORMAT 990.00 HEAD "% Occup"
-- COL TAILLE_MIB FORMAT 99999990.00 HEAD "Taille MB"
-- COL TAILLE_MAX_MIB FORMAT 99999990.00 HEAD "Taille max MB"
-- COL TAILLE_OCCUPEE_MIB FORMAT 99999990.00 HEAD "Espace occupé MiB"
COL TABLESPACE_NAME FORMAT A20 HEAD "Tablespace"
COL alloc FORMAT 99999999.00 HEAD "Allocated MB"

96
sql/20c_datafile.sql Normal file
View File

@@ -0,0 +1,96 @@
prompt <h2>CDB/PDB - Détail des datafiles : </h2>
COL con_id HEAD "CON ID"
COL pdb_name HEAD "PDB Name"
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"
WITH
-- Sous-requête pour les fichiers de données dans une CDB
cdb_files AS (
-- cdb_files.sql
SELECT
p.con_id AS pdb_id,
p.pdb_name AS pdb_name,
d.file_id,
d.tablespace_name,
d.file_name,
a.bytes_alloc/1024/1024 AS file_size_mb,
(a.bytes_alloc - NVL(b.bytes_free, 0))/1024/1024 AS space_used_mb,
NVL(b.bytes_free, 0)/1024/1024 AS space_free_mb,
a.maxbytes/1024/1024 AS maxsize_mb,
ROUND((a.bytes_alloc - NVL(b.bytes_free, 0)) / a.maxbytes * 100, 2) AS percent_used,
d.autoextensible,
d.status,
d.online_status
FROM
(
SELECT
f.file_id,
SUM(f.bytes) AS bytes_alloc,
SUM(DECODE(f.autoextensible, 'YES', f.maxbytes, 'NO', f.bytes)) AS maxbytes
FROM cdb_data_files f GROUP BY file_id
) a
LEFT JOIN (
SELECT
f.file_id,
SUM(f.bytes) AS bytes_free
FROM cdb_free_space f GROUP BY file_id
) b ON a.file_id = b.file_id
JOIN cdb_data_files d ON a.file_id = d.file_id
RIGHT JOIN cdb_pdbs p ON d.con_id = p.pdb_id
WHERE
(SELECT cdb FROM v$database) = 'YES'
ORDER BY p.pdb_id, d.tablespace_name, d.file_name
),
-- Sous-requête pour les fichiers de données dans une non-CDB
non_cdb_files AS (
-- non_cdb_files.sql
SELECT
NULL AS pdb_id,
NULL AS pdb_name,
d.file_id,
d.tablespace_name,
d.file_name,
a.bytes_alloc/1024/1024 AS file_size_mb,
(a.bytes_alloc - NVL(b.bytes_free, 0))/1024/1024 AS space_used_mb,
NVL(b.bytes_free, 0)/1024/1024 AS space_free_mb,
a.maxbytes/1024/1024 AS maxsize_mb,
ROUND((a.bytes_alloc - NVL(b.bytes_free, 0)) / a.maxbytes * 100, 2) AS percent_used,
d.autoextensible,
d.status,
d.online_status
FROM
(
SELECT
f.file_id,
SUM(f.bytes) AS bytes_alloc,
SUM(DECODE(f.autoextensible, 'YES', f.maxbytes, 'NO', f.bytes)) AS maxbytes
FROM dba_data_files f GROUP BY file_id
) a
LEFT JOIN (
SELECT
f.file_id,
SUM(f.bytes) AS bytes_free
FROM dba_free_space f GROUP BY file_id
) b ON a.file_id = b.file_id
JOIN dba_data_files d ON a.file_id = d.file_id
-- WHERE
-- (SELECT cdb FROM v$database) = 'NO'
ORDER BY d.tablespace_name, d.file_name
)
-- Requête finale combinant les résultats des sous-requêtes
SELECT * FROM cdb_files
UNION ALL
SELECT * FROM non_cdb_files;

62
sql/20d_tempfile.sql Normal file
View File

@@ -0,0 +1,62 @@
prompt <h2>Détail des tempfile : </h2>
COL con_id HEAD "CON ID"
COL pdb_name HEAD "PDB Name"
COL file_id HEAD "File ID"
COL file_name HEAD "Tempfile"
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"
WITH
-- Sous-requête pour les fichiers de données dans une CDB
cdb_files AS (
-- cdb_files.sql
SELECT
p.con_id AS pdb_id,
p.pdb_name AS pdb_name,
d.file_id,
d.tablespace_name,
d.file_name,
d.bytes/1024/1024 AS file_size_mb,
d.maxbytes/1024/1024 AS maxsize_mb,
d.autoextensible,
d.status
FROM
cdb_temp_files d
RIGHT JOIN cdb_pdbs p ON d.con_id = p.pdb_id
WHERE
(SELECT cdb FROM v$database) = 'YES'
ORDER BY p.pdb_id, d.tablespace_name, d.file_name
),
-- Sous-requête pour les fichiers de données dans une non-CDB
non_cdb_files AS (
-- non_cdb_files.sql
SELECT
0 AS pdb_id,
NULL AS pdb_name,
d.file_id,
d.tablespace_name,
d.file_name,
d.bytes/1024/1024 AS file_size_mb,
d.maxbytes/1024/1024 AS maxsize_mb,
d.autoextensible,
d.status
FROM
dba_temp_files d
WHERE
(SELECT cdb FROM v$database) = 'NO'
ORDER BY d.tablespace_name, d.file_name
)
-- Requête finale combinant les résultats des sous-requêtes
SELECT * FROM cdb_files
UNION ALL
SELECT * FROM non_cdb_files;

18
sql/20e_undo.sql Normal file
View File

@@ -0,0 +1,18 @@
prompt <h3>Détail du tablespace UNDO : </h3>
SELECT
a.tablespace_name,
a.file_id,
a.bytes / 1024 / 1024 AS size_mb,
a.autoextensible,
b.bytes_free / 1024 / 1024 AS free_mb,
(a.bytes - b.bytes_free) / 1024 / 1024 AS used_mb,
ROUND(((a.bytes - b.bytes_free) / a.bytes) * 100, 2) AS pct_used
FROM
dba_data_files a
JOIN
(SELECT file_id, SUM(bytes) AS bytes_free
FROM dba_free_space
GROUP BY file_id) b
ON a.file_id = b.file_id
WHERE a.tablespace_name like 'UNDO%';

View File

@@ -1,2 +1,6 @@
prompt <h2>Existance de blocks corrompus :</h2>
select * from v$database_block_corruption;
SELECT
*
FROM
V$DATABASE_BLOCK_CORRUPTION;

View File

@@ -1,13 +1,12 @@
prompt <h2>Fichiers de journalisation (Redolog) :</h2>
alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
SELECT
*
FROM
v$log
V$LOG
ORDER BY
group#,
thread#,
sequence#;
GROUP#,
THREAD#,
SEQUENCE#;

View File

@@ -1,10 +1,14 @@
prompt <h2>Taille des redolog par jour :</h2>
select
to_char(first_time, 'YYYY/MM/dd') "Jour",
count(*) "Nbr de fichiers",
ROUND(sum(BLOCKS*BLOCK_SIZE)/1024/1024, 0) "Taille_Mo"
from v$archived_log
where first_time > systimestamp - 30
group by to_char(first_time, 'YYYY/MM/dd')
order by to_char(first_time, 'YYYY/MM/dd')
;
SELECT
TO_CHAR(FIRST_TIME, 'YYYY/MM/dd') "Jour",
COUNT(*) "Nbr de fichiers",
ROUND(SUM(BLOCKS*BLOCK_SIZE)/1024/1024, 0) "Taille_Mo"
FROM
V$ARCHIVED_LOG
WHERE
FIRST_TIME > SYSTIMESTAMP - 30
GROUP BY
TO_CHAR(FIRST_TIME, 'YYYY/MM/dd')
ORDER BY
TO_CHAR(FIRST_TIME, 'YYYY/MM/dd');

View File

@@ -1,11 +1,36 @@
prompt <h2>Fast Recovery Area Usage</h2>
select 'Taille FRA MiB' as property, p.value / 1024 / 1024 as value from
v$parameter p WHERE name = 'db_recovery_file_dest_size'
union all
select 'Espace utilise MiB' as property, round((p.value * tot_pct / 100) / 1024 / 1024, 0) as value from
( SELECT SUM(percent_space_used) tot_pct FROM v$flash_recovery_area_usage ) , V$PARAMETER P
WHERE name = 'db_recovery_file_dest_size'
union all
select 'Pourcentage utilise' as property, tot_pct as value from
( SELECT SUM(percent_space_used) tot_pct FROM v$flash_recovery_area_usage )
;
SELECT
'Taille FRA MiB' AS PROPERTY,
P.VALUE / 1024 / 1024 AS VALUE
FROM
V$PARAMETER P
WHERE
NAME = 'db_recovery_file_dest_size'
UNION
ALL
SELECT
'Espace utilise MiB' AS PROPERTY,
ROUND((P.VALUE * TOT_PCT / 100) / 1024 / 1024, 0) AS VALUE
FROM
(
SELECT
SUM(PERCENT_SPACE_USED) TOT_PCT
FROM
V$FLASH_RECOVERY_AREA_USAGE
) ,
V$PARAMETER P
WHERE
NAME = 'db_recovery_file_dest_size'
UNION
ALL
SELECT
'Pourcentage utilise' AS PROPERTY,
TOT_PCT AS VALUE
FROM
(
SELECT
SUM(PERCENT_SPACE_USED) TOT_PCT
FROM
V$FLASH_RECOVERY_AREA_USAGE
) ;

View File

@@ -1,10 +1,13 @@
prompt <h2>Les dernières erreurs de la base de données (Les 30 derniers jours et les 50 dernières lignes)</h2>
-- set pages 99
select to_char(ORIGINATING_TIMESTAMP, 'DD-MM-YYYY HH-MM-SS') "Date", message_text "Message"
FROM X$DBGALERTEXT
WHERE originating_timestamp > systimestamp - 30
AND regexp_like(message_text, '(ORA-)')
AND rownum <=50
order by originating_timestamp desc;
SELECT
TO_CHAR(ORIGINATING_TIMESTAMP, 'DD-MM-YYYY HH:MM:SS') "Date",
MESSAGE_TEXT "Message"
FROM
X$DBGALERTEXT
WHERE
ORIGINATING_TIMESTAMP > SYSTIMESTAMP - 30
AND REGEXP_LIKE(MESSAGE_TEXT, '(ORA-)')
AND ROWNUM <=50
ORDER BY
ORIGINATING_TIMESTAMP DESC;

View File

@@ -1,2 +1,6 @@
prompt <h2>Configuration RMAN: pramètres modifiés :</h2>
select * from V$RMAN_CONFIGURATION;
SELECT
*
FROM
V$RMAN_CONFIGURATION;

View File

@@ -1,33 +1,30 @@
prompt <h2>Les dernières sauvegardes RMAN (30 derniers jours/50 dernières lignes)</h2>
alter session set nls_date_format='DD/MM/YYYY HH24:MI:SS' ;
-- set linesize 250 heading off;
-- set heading on pagesize 999;
-- column status format a25;
-- column input_bytes_display format a12;
-- column output_bytes_display format a12;
-- column device_type format a10;
ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS';
SELECT
b.SESSION_KEY "Session Key",
b.input_type "Type",
to_char(b.start_time, 'DD-MM-YYYY HH24:MI') "Start Time",
to_char(b.end_time, 'DD-MM-YYYY HH24:MI') "End Time",
to_char(trunc(sysdate) + numtodsinterval(ELAPSED_SECONDS, 'second'),'hh24:mi:ss') "Duration",
b.output_device_type "Device Type",
b.input_bytes_display "Input Bytes",
b.output_bytes_display "Output Bytes",
B.SESSION_KEY "Session Key",
B.INPUT_TYPE "Type",
TO_CHAR(B.START_TIME, 'DD-MM-YYYY HH24:MI') "Start Time",
TO_CHAR(B.END_TIME, 'DD-MM-YYYY HH24:MI') "End Time",
TO_CHAR(TRUNC(SYSDATE) + NUMTODSINTERVAL(ELAPSED_SECONDS, 'second'), 'hh24:mi:ss') "Duration",
B.OUTPUT_DEVICE_TYPE "Device Type",
B.INPUT_BYTES_DISPLAY "Input Bytes",
B.OUTPUT_BYTES_DISPLAY "Output Bytes",
CASE
WHEN b.status = 'FAILED' THEN
'<span class="highlight">' || b.status || '</span>'
WHEN B.STATUS = 'FAILED' THEN
'<span class="highlight">'
|| B.STATUS
|| '</span>'
ELSE
b.status
END "Status"
B.STATUS
END "Status"
FROM
v$rman_backup_job_details b
V$RMAN_BACKUP_JOB_DETAILS B
WHERE
b.start_time > ( sysdate - 30 )
B.START_TIME > ( SYSDATE - 30 )
AND ROWNUM <= 50
ORDER BY
b.SESSION_KEY desc;
-- b.start_time DESC;
B.SESSION_KEY DESC;
-- b.start_time DESC;

View File

@@ -1,5 +1,9 @@
prompt <h2>SYSAUX Occupants</h2>
SELECT /*+ NO_MERGE */
v.*, ROUND(v.space_usage_kbytes / POWER(10,6), 3) space_usage_gbs
FROM v$sysaux_occupants v
ORDER BY 1;
V.*,
ROUND(V.SPACE_USAGE_KBYTES / POWER(10, 6), 3) SPACE_USAGE_GBS
FROM
V$SYSAUX_OCCUPANTS V
ORDER BY
1;

View File

@@ -1,18 +1,19 @@
prompt <h2>DBA Users </h2>
set pages 999
ALTER SESSION SET NLS_DATE_FORMAT ='YYYY/MM/DD HH24:MI';
SELECT
x.username,
x.user_id,
x.account_status,
x.lock_date,
x.expiry_date,
x.default_tablespace,
x.temporary_tablespace,
x.created,
x.profile,
x.password_versions
FROM dba_users x
ORDER BY x.username
;
ALTER SESSION SET NLS_DATE_FORMAT ='YYYY/MM/DD HH24:MI';
SELECT
X.USERNAME,
X.USER_ID,
X.ACCOUNT_STATUS,
X.LOCK_DATE,
X.EXPIRY_DATE,
X.DEFAULT_TABLESPACE,
X.TEMPORARY_TABLESPACE,
X.CREATED,
X.PROFILE,
X.PASSWORD_VERSIONS
FROM
DBA_USERS X
ORDER BY
X.USERNAME;

View File

@@ -1,2 +1,9 @@
prompt <h2>DBA_Profiles </h2>
select * from DBA_Profiles order by profile, resource_name;
SELECT
*
FROM
DBA_PROFILES
ORDER BY
PROFILE,
RESOURCE_NAME;

View File

@@ -1,16 +1,16 @@
prompt <h2>Taille des objets par schéma (Mo):</h2>
select
ds.owner "Owner",
round(sum(ds.bytes) / 1024 / 1024) "Schema Size MB",
du.default_tablespace "Default Tablespace"
from
dba_segments ds,
dba_users du
where
ds.OWNER = du.USERNAME
group by
ds.owner,
du.default_tablespace
order by
ds.owner
;
SELECT
DS.OWNER "Owner",
ROUND(SUM(DS.BYTES) / 1024 / 1024) "Schema Size MB",
DU.DEFAULT_TABLESPACE "Default Tablespace"
FROM
DBA_SEGMENTS DS,
DBA_USERS DU
WHERE
DS.OWNER = DU.USERNAME
GROUP BY
DS.OWNER,
DU.DEFAULT_TABLESPACE
ORDER BY
DS.OWNER;

View File

@@ -1,29 +1,39 @@
-- Qui est connecté à la base :
prompt <h2>Sessions Aggregate per User and Type</h2>
WITH x as (
SELECT COUNT(*),
--con_id,
username,
inst_id,
type,
server,
status,
state
FROM gv$session
GROUP BY
--con_id,
username,
inst_id,
type,
server,
status,
state
WITH X AS (
SELECT
COUNT(*),
--con_id,
USERNAME,
INST_ID,
TYPE,
SERVER,
STATUS,
STATE
FROM
GV$SESSION
GROUP BY
--con_id,
USERNAME,
INST_ID,
TYPE,
SERVER,
STATUS,
STATE
)
SELECT x.*
--,c.name con_name
FROM x
--LEFT OUTER JOIN v$containers c ON c.con_id = x.con_id
ORDER BY
SELECT
X.*
--,c.name con_name
FROM
X
--LEFT OUTER JOIN v$containers c ON c.con_id = x.con_id
ORDER BY
1 DESC,
--x.con_id,
x.username, x.inst_id, x.type, x.server, x.status, x.state;
--x.con_id,
X.USERNAME,
X.INST_ID,
X.TYPE,
X.SERVER,
X.STATUS,
X.STATE;

View File

@@ -1,30 +1,41 @@
prompt <h2>Sessions Aggregate per Module and Action</h2>
WITH x AS (
SELECT COUNT(*),
--con_id,
module,
action,
inst_id,
type,
server,
status,
state
FROM gv$session
GROUP BY
--con_id,
module,
action,
inst_id,
type,
server,
status,
state
WITH X AS (
SELECT
COUNT(*),
--con_id,
MODULE,
ACTION,
INST_ID,
TYPE,
SERVER,
STATUS,
STATE
FROM
GV$SESSION
GROUP BY
--con_id,
MODULE,
ACTION,
INST_ID,
TYPE,
SERVER,
STATUS,
STATE
)
SELECT x.*
--,c.name con_name
FROM x
--LEFT OUTER JOIN v$containers c ON c.con_id = x.con_id
ORDER BY
1 DESC,
--x.con_id,
x.module, x.action, x.inst_id, x.type, x.server, x.status, x.state;
SELECT
X.*
--,c.name con_name
FROM
X
--LEFT OUTER JOIN v$containers c ON c.con_id = x.con_id
ORDER BY
1 DESC,
--x.con_id,
X.MODULE,
X.ACTION,
X.INST_ID,
X.TYPE,
X.SERVER,
X.STATUS,
X.STATE;

View File

@@ -1,9 +1,23 @@
prompt <h2>Who is connected ? </h2>
set pages 999 lines 200
col PROGRAM for a35
col MACHINE for a20
col OSUSER for a10
alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';
select OSUSER, MACHINE, PROGRAM, STATE, LOGON_TIME, EVENT from v$session order by LOGON_TIME asc;
col PROGRAM for a35
col MACHINE for a20
col OSUSER for a10
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
SELECT
OSUSER,
MACHINE,
PROGRAM,
STATE,
LOGON_TIME,
EVENT
FROM
V$SESSION
ORDER BY
LOGON_TIME ASC;

View File

@@ -1,3 +1,13 @@
prompt <h2>Invalid objects</h2>
select owner, count(*) "invalid objects" FROM dba_objects WHERE status <> 'VALID' group by owner order by owner;
exit
SELECT
OWNER,
COUNT(*) "invalid objects"
FROM
DBA_OBJECTS
WHERE
STATUS <> 'VALID'
GROUP BY
OWNER
ORDER BY
OWNER;

View File

@@ -1,26 +1,31 @@
prompt <h2>Les objets par utilisateur</h2>
select * from
(
select owner, object_type ,count(*) as object_count from dba_objects
where owner not in ('ANONYMOUS','APEX_180200','APEX_INSTANCE_ADMIN_USER','APEX_PUBLIC_USER','APPQOSSYS','AUDSYS','CTXSYS','DBSFWUSER','DBSNMP','DIP','DVF','DVSYS','FLOWS_FILES','GGSYS','GSMADMIN_INTERNAL','GSMCATUSER','GSMUSER','LBACSYS','MDDATA','MDSYS','OJVMSYS','OLAPSYS','ORACLE_OCM','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','REMOTE_SCHEDULER_AGENT','SI_INFORMTN_SCHEMA','SYS','SYS$UMF','SYSBACKUP','SYSDG','SYSKM','SYSRAC','SYSTEM','WMSYS','XDB','XS$NULL')
group by owner, object_type order by owner, object_type
)
pivot
SELECT
*
FROM
(
max(object_count)
for object_type in (
'TABLE',
'VIEW',
'INDEX',
'FUNCTION',
'LOB',
'PACKAGE',
'PROCEDURE',
'TRIGGER',
'SYNONYM'
)
)
order by owner
;
SELECT
OWNER,
OBJECT_TYPE,
COUNT(*) AS OBJECT_COUNT
FROM
DBA_OBJECTS
WHERE
OWNER NOT IN ('ANONYMOUS', 'APEX_180200', 'APEX_INSTANCE_ADMIN_USER', 'APEX_PUBLIC_USER', 'APPQOSSYS', 'AUDSYS', 'CTXSYS', 'DBSFWUSER', 'DBSNMP', 'DIP', 'DVF', 'DVSYS', 'FLOWS_FILES', 'GGSYS', 'GSMADMIN_INTERNAL', 'GSMCATUSER', 'GSMUSER', 'LBACSYS', 'MDDATA', 'MDSYS', 'OJVMSYS', 'OLAPSYS', 'ORACLE_OCM', 'ORDDATA', 'ORDPLUGINS', 'ORDSYS', 'OUTLN', 'REMOTE_SCHEDULER_AGENT', 'SI_INFORMTN_SCHEMA', 'SYS', 'SYS$UMF', 'SYSBACKUP', 'SYSDG', 'SYSKM', 'SYSRAC', 'SYSTEM', 'WMSYS', 'XDB', 'XS$NULL')
GROUP BY
OWNER,
OBJECT_TYPE
ORDER BY
OWNER,
OBJECT_TYPE
) PIVOT ( MAX(OBJECT_COUNT) FOR OBJECT_TYPE IN ( 'TABLE',
'VIEW',
'INDEX',
'FUNCTION',
'LOB',
'PACKAGE',
'PROCEDURE',
'TRIGGER',
'SYNONYM' ) )
ORDER BY
OWNER;

View File

@@ -1,2 +1,9 @@
prompt <h2>Statut des jobs autotask </h2>
select client_name, status,attributes,service_name from dba_autotask_client;
SELECT
CLIENT_NAME,
STATUS,
ATTRIBUTES,
SERVICE_NAME
FROM
DBA_AUTOTASK_CLIENT;

View File

@@ -1,40 +1,55 @@
-- SCRIPT - to Set the 'SESSION_CACHED_CURSORS' and 'OPEN_CURSORS' Parameters Based on Usage (Doc ID 208857.1)
prompt <h2>Sessions and Cursors usage </h2>
select
'session_cached_cursors' parameter,
lpad(value, 5) value,
decode(value, 0, ' n/a', to_char(100 * used / value, '990') || '%') usage
from
(
select max(s.value) used
from v$statname n, v$sesstat s
where
n.name = 'session cursor cache count'
and s.statistic# = n.statistic#
),
(
select value
from v$parameter
where name = 'session_cached_cursors'
)
union all
select
'open_cursors',
lpad(value, 5),
to_char(100 * used / value, '990') || '%'
from
(
select max(sum(s.value)) used
from v$statname n, v$sesstat s
where
n.name in ('opened cursors current') and
s.statistic# = n.statistic#
group by s.sid
),
(
select value
from v$parameter
where name = 'open_cursors'
)
;
SELECT
'session_cached_cursors' PARAMETER,
LPAD(VALUE, 5) VALUE,
DECODE(VALUE, 0, ' n/a', TO_CHAR(100 * USED / VALUE, '990')
|| '%') USAGE
FROM
(
SELECT
MAX(S.VALUE) USED
FROM
V$STATNAME N,
V$SESSTAT S
WHERE
N.NAME = 'session cursor cache count'
AND S.STATISTIC# = N.STATISTIC#
),
(
SELECT
VALUE
FROM
V$PARAMETER
WHERE
NAME = 'session_cached_cursors'
)
UNION
ALL
SELECT
'open_cursors',
LPAD(VALUE, 5),
TO_CHAR(100 * USED / VALUE, '990')
|| '%'
FROM
(
SELECT
MAX(SUM(S.VALUE)) USED
FROM
V$STATNAME N,
V$SESSTAT S
WHERE
N.NAME IN ('opened cursors current')
AND S.STATISTIC# = N.STATISTIC#
GROUP BY
S.SID
),
(
SELECT
VALUE
FROM
V$PARAMETER
WHERE
NAME = 'open_cursors'
);

View File

@@ -1,7 +1,14 @@
prompt <h2>Failed scheduled jobs </h2>
SELECT owner, job_name, job_type, state, TRUNC(start_date) SDATE, TRUNC(next_run_date) NXTRUN, failure_count
FROM dba_scheduler_jobs
WHERE failure_count <> 0;
SELECT
OWNER,
JOB_NAME,
JOB_TYPE,
STATE,
TRUNC(START_DATE) SDATE,
TRUNC(NEXT_RUN_DATE) NXTRUN,
FAILURE_COUNT
FROM
DBA_SCHEDULER_JOBS
WHERE
FAILURE_COUNT <> 0;

View File

@@ -1,41 +1,53 @@
prompt <h2>Table Statistics Summary</h2>
alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';
WITH x as (
SELECT /*+ NO_MERGE */
--con_id,
owner,
object_type,
COUNT(*) type_count,
SUM(DECODE(last_analyzed, NULL, 1, 0)) not_analyzed,
SUM(DECODE(stattype_locked, NULL, 0, 1)) stats_locked,
SUM(DECODE(stale_stats, 'YES', 1, 0)) stale_stats,
SUM(num_rows) sum_num_rows,
MAX(num_rows) max_num_rows,
SUM(blocks) sum_blocks,
MAX(blocks) max_blocks,
MIN(last_analyzed) min_last_analyzed,
MAX(last_analyzed) max_last_analyzed,
MEDIAN(last_analyzed) median_last_analyzed,
PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY last_analyzed) last_analyzed_75_percentile,
PERCENTILE_DISC(0.90) WITHIN GROUP (ORDER BY last_analyzed) last_analyzed_90_percentile,
PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY last_analyzed) last_analyzed_95_percentile,
PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY last_analyzed) last_analyzed_99_percentile
FROM dba_tab_statistics s
WHERE table_name NOT LIKE 'BIN$%' -- bug 9930151 reported by brad peek
AND NOT EXISTS (
SELECT /*+ NO_MERGE */ NULL
FROM dba_external_tables e
WHERE e.owner = s.owner
--AND e.con_id = s.con_id
AND e.table_name = s.table_name)
GROUP BY
--con_id,
owner, object_type
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
WITH X AS (
SELECT /*+ NO_MERGE */
--con_id,
OWNER,
OBJECT_TYPE,
COUNT(*) TYPE_COUNT,
SUM(DECODE(LAST_ANALYZED, NULL, 1, 0)) NOT_ANALYZED,
SUM(DECODE(STATTYPE_LOCKED, NULL, 0, 1)) STATS_LOCKED,
SUM(DECODE(STALE_STATS, 'YES', 1, 0)) STALE_STATS,
SUM(NUM_ROWS) SUM_NUM_ROWS,
MAX(NUM_ROWS) MAX_NUM_ROWS,
SUM(BLOCKS) SUM_BLOCKS,
MAX(BLOCKS) MAX_BLOCKS,
MIN(LAST_ANALYZED) MIN_LAST_ANALYZED,
MAX(LAST_ANALYZED) MAX_LAST_ANALYZED,
MEDIAN(LAST_ANALYZED) MEDIAN_LAST_ANALYZED,
PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY LAST_ANALYZED) LAST_ANALYZED_75_PERCENTILE,
PERCENTILE_DISC(0.90) WITHIN GROUP (ORDER BY LAST_ANALYZED) LAST_ANALYZED_90_PERCENTILE,
PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY LAST_ANALYZED) LAST_ANALYZED_95_PERCENTILE,
PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY LAST_ANALYZED) LAST_ANALYZED_99_PERCENTILE
FROM
DBA_TAB_STATISTICS S
WHERE
TABLE_NAME NOT LIKE 'BIN$%' -- bug 9930151 reported by brad peek
AND NOT EXISTS (
SELECT /*+ NO_MERGE */
NULL
FROM
DBA_EXTERNAL_TABLES E
WHERE
E.OWNER = S.OWNER
--AND e.con_id = s.con_id
AND E.TABLE_NAME = S.TABLE_NAME
)
GROUP BY
--con_id,
OWNER,
OBJECT_TYPE
)
SELECT x.*
--,c.name con_name
FROM x
--LEFT OUTER JOIN v$containers c ON c.con_id = x.con_id
ORDER BY
--x.con_id,
owner, object_type;
SELECT
X.*
--,c.name con_name
FROM
X
--LEFT OUTER JOIN v$containers c ON c.con_id = x.con_id
ORDER BY
--x.con_id,
OWNER,
OBJECT_TYPE;

View File

@@ -1,10 +1,11 @@
prompt <h2>Dictionary Stats / Fixed Objects Stats</h2>
SELECT
to_char(max(end_time),'dd/mm/yyyy hh24:mi') latest, operation
TO_CHAR(MAX(END_TIME), 'dd/mm/yyyy hh24:mi') LATEST,
OPERATION
FROM
dba_optstat_operations
DBA_OPTSTAT_OPERATIONS
WHERE
operation in ('gather_dictionary_stats', 'gather_fixed_objects_stats')
OPERATION IN ('gather_dictionary_stats', 'gather_fixed_objects_stats')
GROUP BY
operation;
OPERATION;

View File

@@ -0,0 +1,15 @@
prompt <h2>Les options utilisée (à partir de DBA_FEATURE_USAGE_STATISTICS): </h2>
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
SELECT
NAME,
LAST_USAGE_DATE,
DETECTED_USAGES,
DESCRIPTION
FROM
DBA_FEATURE_USAGE_STATISTICS
WHERE
DETECTED_USAGES>0
ORDER BY
NAME;

View File

@@ -1,6 +1,8 @@
prompt <h2>Liste des jobs dans : dba_jobs </h2>
alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';
SELECT * FROM dba_jobs;
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
SELECT
*
FROM
DBA_JOBS;

View File

@@ -1,21 +0,0 @@
<br />
</body>
<script>
function colorerMots(element) {
const tds = document.querySelectorAll("td");
for (const td of tds) {
const text = td.textContent;
const motsACouleur = ["Error", "Failed", "COMPLETED"];
for (const mot of motsACouleur) {
text = text.replace(mot, `<span style="color: red; background-color: yellow;">${mot}</span>`);
}
td.textContent = text;
}
}
colorerMots(element);
</script>
</html>

20
sql/cdb/01_show_pdbs.sql Normal file
View File

@@ -0,0 +1,20 @@
prompt <h2>Liste des PLuggables Databases</h2>
col application_root for a25
col application_pdb for a25
col application_seed for a25
SELECT
p.con_id,
p.dbid,
p.name,
p.open_mode,
p.restricted,
p.open_time,
p.application_root,
p.application_pdb,
p.application_seed
FROM
v$pdbs p
ORDER BY
con_id;

7
sql/cdb/is_CDB.sh Normal file
View File

@@ -0,0 +1,7 @@
#! /bin/sh
# Retourne YES ou NO selon que la base est une CDB ou non
echo "
SET PAGES 999 FEEDBACK OFF HEAD OFF
select cdb from v\$database;
exit" | sqlplus -s / as sysdba

37
summary.sh Normal file
View File

@@ -0,0 +1,37 @@
#!/bin/bash
# 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}
# Execution des scripts sql
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
# insertion du header HTML
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
. oraenv -s > /dev/null
# ajout du nom de la base
echo '<h3>Base de données : '$sid'</h3>' >> ${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}
done
# insertion du footer HTML
cat html/99_html_footer.html >> ${HTML_FILE}
echo Rapport synthèse pour ${FILENAME} dans : ${HTML_FILE}
done

View File

@@ -0,0 +1 @@
SET PAGES 999 FEEDBACK OFF MARKUP HTML ON SPOOL ON PREFORMAT OFF ENTMAP OFF

93
summary/20_datafile.sql Normal file
View File

@@ -0,0 +1,93 @@
COL con_id HEAD "con_id"
COL pdb_id HEAD "pdb_id"
COL pdb_name HEAD "pdb_name"
COL file_id HEAD "file_id"
COL file_name HEAD "file_name"
COL tablespace_name FORMAT A20 HEAD "tablespace"
COL file_size_mb FORMAT 999999999.00 HEAD "file_size_mb"
COL percent_used FORMAT 999.00 HEAD "percent_used"
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 "maxsize_mb"
COL autoextensible FORMAT A15 HEAD "autoextensible"
COL status head "status"
COL online_status format a15 head "online_status"
WITH
-- Sous-requête pour les fichiers de données dans une CDB
cdb_files AS (
-- cdb_files.sql
SELECT
p.con_id AS pdb_id,
p.pdb_name AS pdb_name,
d.file_id,
d.tablespace_name,
d.file_name,
a.bytes_alloc/1024/1024 AS file_size_mb,
ROUND((a.bytes_alloc - NVL(b.bytes_free, 0)) / a.maxbytes * 100, 2) AS percent_used,
(a.bytes_alloc - NVL(b.bytes_free, 0))/1024/1024 AS space_used_mb,
NVL(b.bytes_free, 0)/1024/1024 AS space_free_mb,
a.maxbytes/1024/1024 AS maxsize_mb,
d.autoextensible,
d.status,
d.online_status
FROM
(
SELECT
f.file_id,
SUM(f.bytes) AS bytes_alloc,
SUM(DECODE(f.autoextensible, 'YES', f.maxbytes, 'NO', f.bytes)) AS maxbytes
FROM cdb_data_files f GROUP BY file_id
) a
LEFT JOIN (
SELECT
f.file_id,
SUM(f.bytes) AS bytes_free
FROM cdb_free_space f GROUP BY file_id
) b ON a.file_id = b.file_id
JOIN cdb_data_files d ON a.file_id = d.file_id
RIGHT JOIN cdb_pdbs p ON d.con_id = p.pdb_id
WHERE
(SELECT cdb FROM v$database) = 'YES'
ORDER BY p.pdb_id, d.tablespace_name, d.file_name
),
-- Sous-requête pour les fichiers de données dans une non-CDB
non_cdb_files AS (
-- non_cdb_files.sql
SELECT
NULL AS pdb_id,
NULL AS pdb_name,
d.file_id,
d.tablespace_name,
d.file_name,
a.bytes_alloc/1024/1024 AS file_size_mb,
ROUND((a.bytes_alloc - NVL(b.bytes_free, 0)) / a.maxbytes * 100, 2) AS percent_used,
(a.bytes_alloc - NVL(b.bytes_free, 0))/1024/1024 AS space_used_mb,
NVL(b.bytes_free, 0)/1024/1024 AS space_free_mb,
a.maxbytes/1024/1024 AS maxsize_mb,
d.autoextensible,
d.status,
d.online_status
FROM
(
SELECT
f.file_id,
SUM(f.bytes) AS bytes_alloc,
SUM(DECODE(f.autoextensible, 'YES', f.maxbytes, 'NO', f.bytes)) AS maxbytes
FROM dba_data_files f GROUP BY file_id
) a
LEFT JOIN (
SELECT
f.file_id,
SUM(f.bytes) AS bytes_free
FROM dba_free_space f GROUP BY file_id
) b ON a.file_id = b.file_id
JOIN dba_data_files d ON a.file_id = d.file_id
ORDER BY d.tablespace_name, d.file_name
)
-- Requête finale combinant les résultats des sous-requêtes
SELECT * FROM cdb_files
UNION ALL
SELECT * FROM non_cdb_files;

View File

@@ -0,0 +1,69 @@
prompt <h3>Détail des tablespaces : </h3>
COL TABLESPACE_NAME FORMAT A20 HEAD "tablespace"
COL BIGFILE FORMAT A10 HEAD "bigfile"
COL alloc FORMAT 99999999.00 HEAD "allocated_mb"
COL used FORMAT 99999999.00 HEAD "used_mb"
COL free FORMAT 99999999.00 HEAD "free_mb"
COL max FORMAT 99999999.00 HEAD "maxsize_mb"
COL Pct_Used FORMAT 999.00 HEAD "percent_used"
select
a.tablespace_name,
t.bigfile,
a.bytes_alloc/1024/1024 alloc,
(a.bytes_alloc - nvl(b.bytes_free, 0))/1024/1024 used,
(nvl(b.bytes_free, 0))/1024/1024 free,
maxbytes/1024/1024 Max,
(a.bytes_alloc - nvl(b.bytes_free, 0)) / maxbytes * 100 Pct_Used
from
(
select
f.tablespace_name,
sum(f.bytes) bytes_alloc,
sum(decode(f.autoextensible, 'YES', f.maxbytes, 'NO', f.bytes)) maxbytes
from
dba_data_files f
group by
tablespace_name
) a,
(
select
f.tablespace_name,
sum(f.bytes) bytes_free
from
dba_free_space f
group by
tablespace_name
) b,
dba_tablespaces t
where
a.tablespace_name = b.tablespace_name (+)
and b.tablespace_name = t.tablespace_name
union all
select
h.tablespace_name,
dt.bigfile,
(sum(h.bytes_free + h.bytes_used))/1024/1024 alloc,
(sum(nvl(p.bytes_used, 0)))/1024/1024 used,
(sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0)))/1024/1024 free,
(sum(f.maxbytes))/1024/1024 max,
(sum(h.bytes_free + h.bytes_used) - sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0))) / sum(f.maxbytes) Pct_Used
from
sys.v_$temp_space_header h,
sys.v_$temp_extent_pool p,
dba_temp_files f,
dba_tablespaces dt
where
p.file_id(+) = h.file_id
and p.tablespace_name(+) = h.tablespace_name
and f.file_id = h.file_id
and f.tablespace_name = h.tablespace_name
and h.tablespace_name = dt.tablespace_name
group by
h.tablespace_name,
dt.contents,
dt.bigfile
order by
1
;

View File

@@ -0,0 +1,13 @@
prompt <h3>Les dernières erreurs de la base de données (Les 30 derniers jours et les 50 dernières lignes)</h3>
SELECT
TO_CHAR(ORIGINATING_TIMESTAMP, 'DD-MM-YYYY HH:MM:SS') "Date",
MESSAGE_TEXT "Message"
FROM
X$DBGALERTEXT
WHERE
ORIGINATING_TIMESTAMP > SYSTIMESTAMP - 30
AND REGEXP_LIKE(MESSAGE_TEXT, '(ORA-)')
AND ROWNUM <=50
ORDER BY
ORIGINATING_TIMESTAMP DESC;

View File

@@ -0,0 +1,28 @@
prompt <h3>Les dernières sauvegardes RMAN (30 derniers jours/50 dernières lignes)</h3>
ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS';
SELECT
B.SESSION_KEY "Session Key",
B.INPUT_TYPE "Type",
TO_CHAR(B.START_TIME, 'DD-MM-YYYY HH24:MI') "Start Time",
TO_CHAR(B.END_TIME, 'DD-MM-YYYY HH24:MI') "End Time",
TO_CHAR(TRUNC(SYSDATE) + NUMTODSINTERVAL(ELAPSED_SECONDS, 'second'), 'hh24:mi:ss') "Duration",
B.OUTPUT_DEVICE_TYPE "Device Type",
B.INPUT_BYTES_DISPLAY "Input Bytes",
B.OUTPUT_BYTES_DISPLAY "Output Bytes",
CASE
WHEN B.STATUS = 'FAILED' THEN
'<span class="highlight">'
|| B.STATUS
|| '</span>'
ELSE
B.STATUS
END "Status"
FROM
V$RMAN_BACKUP_JOB_DETAILS B
WHERE
B.START_TIME > ( SYSDATE - 30 )
AND ROWNUM <= 50
ORDER BY
B.SESSION_KEY DESC;