deux fichiers :
_pg_include
setdb.bash
à adapter selon l'installation du moteur postgres
En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies. Ces derniers assurent le bon fonctionnement de nos services. En savoir plus.
deux fichiers :
_pg_include
setdb.bash
à adapter selon l'installation du moteur postgres
Roles creation using hvault :
- dynamic roles
The roles are created with this command :
vault write -ns="$VAULT_NAMESPACE/$ECOSYSTEM" database/postgres/${SERVER}/roles/${ROLE}
db_name=${SERVER}
creation_statements=@${ORA2PG_HOME}/dynamic_role/${TYPE}/create_dyna_role_${TYPE}_${ASSET}.sql
revocation_statements=@${ORA2PG_HOME}/dynamic_role/${TYPE}/drop_dyna_role_${TYPE}_${ASSET}.sql
default_ttl=${ROTATION}
max_ttl=${ROTATION}
Pourquoi OEM "cherche" le SPFILE dans ASM :
clean_asm_disks.sh
#!/bin/bash
# =================================================================
# clean_asm_disks.sh → À exécuter en oracle AVANT tout delete Azure
# Auteur : toi + moi
# Objectif : garantir à 100 % que tu peux supprimer un disque sans crasher la base
# =================================================================
export ORACLE_SID=+ASM1 # ou +ASM2 sur l'autre nœud RAC
export ORAENV_ASK=NO
. oraenv > /dev/null 2>&1
echo "================================================================="
echo "VÉRIFICATION DE SÉCURITÉ ASM - $(date)"
echo "Instance : ( ORACLE_SID - Host : )(hostname)"
echo "================================================================="
sqlplus -S / as sysasm <<EOF
SET PAGESIZE 200 LINESIZE 200
COL dg_name FORMAT A12
COL disk_path FORMAT A50
COL header_status FORMAT A12
COL mount_status FORMAT A12
COL mode_status FORMAT A12
COL state FORMAT A10
COL failgroup FORMAT A20
PROMPT
PROMPT 1. État des diskgroups
SELECT name, state, type FROM v$asm_diskgroup;
PROMPT
PROMPT 2. Opérations de rebalance en cours ou en erreur
SELECT group_number, operation, state, power, est_minutes FROM v$asm_operation;
SELECT * FROM gv$asm_operation WHERE state!='DONE';
PROMPT
PROMPT 3. Disques à risque (FORMER mais rebalance pas fini, ou MISSING)
SELECT group_number,
name,
path disk_path,
header_status,
mount_status,
mode_status,
state,
failgroup
FROM v$asm_disk
WHERE header_status IN ('FORMER','MISSING')
OR (header_status='MEMBER' AND mode_status!='ONLINE')
ORDER BY header_status, group_number;
PROMPT
PROMPT 4. Disques vraiment supprimables en toute sécurité (rebalance 100% terminé)
PROMPT → HEADER_STATUS = CANDIDATE ou PROVISIONED uniquement
SELECT 'SUPPRIMABLE EN TOUTE SÉCURITÉ' statut,
path disk_path,
header_status,
failgroup
FROM v$asm_disk
WHERE header_status IN ('CANDIDATE','PROVISIONED')
UNION ALL
SELECT 'ATTENTION - encore dans le diskgroup' statut,
path, header_status, failgroup
FROM v$asm_disk
WHERE header_status = 'FORMER';
PROMPT
PROMPT ================================================================
PROMPT RÈGLE D’OR :
PROMPT Seuls les disques en CANDIDATE ou PROVISIONED peuvent être
PROMPT détachés/supprimés dans Azure sans aucun risque.
PROMPT Si tu vois du FORMER → attends la fin du rebalance ou force le DROP DISK
PROMPT ================================================================
EOF
echo
echo "Fin du check : $(date)"
echo "Tu peux supprimer dans Azure UNIQUEMENT les disques marqués SUPPRIMABLE EN TOUTE SÉCURITÉ"
echo
safe_clean_asm_disks.sh
#!/bin/bash
# ================================================================
# safe_clean_asm_disks.sh → Version AUTO (nettoyage intelligent)
# Exécuter en user oracle sur un nœud où +ASM est vivant
# ================================================================
export ORACLE_SID=+ASM1 # change en +ASM2 si tu es sur le nœud 2
export ORAENV_ASK=NO
. oraenv > /dev/null 2>&1
LOG=/tmp/safe_clean_asm_$(date +%Y%m%d_%H%M%S).log
exec > $LOG 2>&1
echo "============================================================"
echo "SAFE CLEAN ASM DISKS - Démarrage $(date)"
echo "Instance : ( ORACLE_SID - Host : )(hostname)"
echo "============================================================"
# 1. Vérification préalable
sqlplus -S / as sysasm <<EOF
SET PAGESIZE 0 FEEDBACK OFF HEADING OFF
SELECT COUNT(*) FROM v$asm_operation WHERE state IN ('RUN','WAIT');
EXIT
EOF
REBAL_IN_PROGRESS=$(sqlplus -S / as sysasm <<EOF
SET PAGESIZE 0 FEEDBACK OFF HEADING OFF
SELECT COUNT(*) FROM v$asm_operation WHERE state IN ('RUN','WAIT');
EXIT
EOF
)
if [ "$REBAL_IN_PROGRESS" -gt 0 ]; then
echo "ERREUR : Un rebalance est encore en cours !"
echo " → Attends qu'il soit terminé avant de relancer ce script."
exit 1
fi
# 2. Liste des disques FORMER (ceux qu’on peut nettoyer proprement)
FORMER_DISKS=$(sqlplus -S / as sysasm <<EOF
SET PAGESIZE 0 FEEDBACK OFF HEADING OFF
SELECT name
FROM v$asm_disk
WHERE header_status = 'FORMER';
EXIT
EOF
)
if [ -z "$FORMER_DISKS" ]; then
echo "Aucun disque en statut FORMER → Rien à nettoyer dans ASM."
echo "Tu peux supprimer directement dans Azure les disques CANDIDATE/PROVISIONED si tu veux."
echo "Fin du script."
exit 0
fi
echo "Disques en statut FORMER détectés (on va les DROP proprement) :"
echo "$FORMER_DISKS"
# 3. DROP automatique par diskgroup avec rebalance en parallèle
echo
echo "Lancement du DROP DISK + rebalance (power 8 pour aller vite)..."
sqlplus -S / as sysasm <<EOF
WHENEVER SQLERROR EXIT FAILURE
SET FEEDBACK ON ECHO ON
-- On regroupe par diskgroup pour faire un seul ALTER par DG
SELECT 'ALTER DISKGROUP ' || dg.name || ' DROP DISK ' ||
LISTAGG(d.name, ',') WITHIN GROUP (ORDER BY d.name) ||
' REBALANCE POWER 8;'
FROM v$asm_disk d
JOIN v$asm_diskgroup dg ON d.group_number = dg.group_number
WHERE d.header_status = 'FORMER'
GROUP BY dg.name;
-- Exécution réelle
DECLARE
v_sql VARCHAR2(4000);
BEGIN
FOR rec IN (
SELECT dg.name dg_name,
LISTAGG(d.name, ''',''') WITHIN GROUP (ORDER BY d.name) disk_list
FROM v$asm_disk d
JOIN v$asm_diskgroup dg ON d.group_number = dg.group_number
WHERE d.header_status = 'FORMER'
GROUP BY dg.name
) LOOP
v_sql := 'ALTER DISKGROUP ' || rec.dg_name ||
' DROP DISK ''' || rec.disk_list || ''' REBALANCE POWER 8';
EXECUTE IMMEDIATE v_sql;
DBMS_OUTPUT.PUT_LINE('Exécuté : ' || v_sql);
END LOOP;
END;
/
SET FEEDBACK OFF
PROMPT
PROMPT Nettoyage terminé.
PROMPT Les disques viennent de passer en CANDIDATE/PROVISIONED.
PROMPT Tu peux maintenant les détacher/supprimer dans Azure en toute sécurité.
PROMPT
EOF
echo
echo "============================================================"
echo "Tout est propre dans ASM !"
echo "Tu peux maintenant supprimer les disques dans Azure sans aucun risque."
echo "Log complet : $LOG"
echo "============================================================"
Un bon guide à suivreHow to Convert SQL Server to PostgreSQL – Complete Migration Guide.PDF
https://dbconvert.com/blog/sql-server-to-postgresql-migration-guide/
Yes we are in 2025 but this is sill under review !
Article intéressant sur le 0 downtime des cartes mastercard.
script : prepare_dba_static_role.sh