Bonjour amis DBAs Oracle !
Je viens vers vous pour avoir vos éclairages une fois de plus à une question qui me pose problème
Si ça se trouve c'est hyper basique mais je sèche.
J'ai une table avec N blocs, j'en modifie un en mémoire et je ne fais pas de Commit.
Un ALTER SYSTEM CHECKPOINT arrive et là que se passe t-il? Tous les dirty blocs sont écrits sur disque dur MAIS le bloc non commité en mémoire ne va pas écraser le bloc commité sur disque dur sinon quid du ROLLBACK après?
Comment est-ce que Oracle gère cela?
1) Il écrit sur le disque dur le deuxième bloc en plus du premier? Pb : le nombre de blocs dans DBA_TABLES (colonne BLOCKS) est faux.
2) Il écrit dans le premier bloc, en plus des données commitées, les données non commitées et il nettoiera le bloc lors du prochain COMMIT ou ROLLBACK? Pb : le nombre de bytes dans la table DBA_SEGMENTS (colonne BYTES) est faux.
Et non, la réponse ne peut pas être : "Quand tu fais un ALTER, un COMMIT est fait d'office donc pas de question".
Oracle nous dit que les ALTER SESSION et ALTER SYSTEME ne font pas partie du DDL donc pas de COMMIT implicite (ALTER DATABASE oui à priori).
https://docs.oracle.com/cd/B28359_01...htm#SQLRF52344
"The DDL statements are:
ALTER ... (All statements beginning with ALTER, except ALTER SESSION and ALTER SYSTEM—see "Session Control Statements" and "System Control Statement")"
Partager