Category Archives: OCP

Backup/restore improvements

Rédacteur: V. Fenoll DBA Oracle Montreal & Oracle Doc.

Flashback area, une zone de récupération rapide

Il s’agit d’un emplacement centralisé pour les sauvegardes du fichier de contrôle, les fichiers d’archives, les journaux flashback et les sauvegardes de bases de données.

Lorsqu’elle est configurée, l’emplacement de cette zone est affecté à LOG_ARCHIVE_DEST_10.

Si aucun emplacement LOG_ARCHIVE_DEST_n n’est configuré ; l’emplacement par défaut devient alors la zone de récupération rapide.

Flashback area: Configuration

Dans EM : Onglet maintenance + Configure recovery settings

permet de définir l’emplacement DB_RECOVERY_FILE_DEST et la taille DB_RECOVERY_FILE_DEST_SIZE de cette zone.

Pour désactiver cette zone positionner à vide le paramètre de destination : DB_RECOVERY_FILE_DEST

Chaque fois que RMAN crée un fichier dans cette zone, il met également à jour la liste des fichiers obsolètes. Si manque d’espace, il supprime des fichiers obsolètes.

Avertissement d’espace à 85%

Alerte d’espace à 97%

Le message d’alerte peut également être trouvé dans la vue DBA_OUTSTANDING_ALERTS

Lorsque la zone de flashback est utilisée, RMAN utilise automatiquement OMF pour ses fichiers de sauvegarde et les place par défaut dans cette zone.

OMF également utilisé pour les archives ; ARCHIVE___FORMAT n’est pas utilisé.

Dans EM : Onglet maintenance + Backup Settings

Flashback area: Sauvegarde

Dans EM : Onglet maintenance + Schedule backup + All recovery Files on disk + Schedule customized backup.

Pour RMAN:

RMAN > BACKUP RECOVERY AREA

–         Archives

–         Autobackups (CF)

–         Datafiles copies

–         Backupsets

RMAN > BACKUP RECOVERY FILES

–         Idem commande ci-dessus

–         + des fichiers qui ne font pas partie de la zone de récupération

Flashback area: Vues dynamiques

V$RECOVERY_FILE_DEST

–         name : emplacement

–         size

–         used

–         space_reclaimable

–         number_of_files

–         space_limit

V$FLASH_RECOVERY_AREA_USAGE pour connaître l’utilisation de l’espace disque :

–         file_type

–         percent_space_used

–         percent_space_reclaimable

–         number_of_files

Dans V$BACKUP_PIECE et dans RC_BACKUP_PIECE nouvelles colonnes :

–         is_recovery_dest_file (yes | no)

–         bytes (taille en octets)

Oracle recommande d’utiliser OMF (DB_CREATE_FILE_DEST et DB_CREATE_ONLINE_LOG_DEST_n)

OMF + Flashback area : Modification du comportement des instructions SQL

ADD [STANDBY] LOGFILE : si aucun nom n’est spécifié ; crée le fichier dans la flashback area

DROP LOGFILE : supprime dans la flashback area

RENAME FILE : après renommage supprime le fichier dans la flashback area

Ordre de priorité pour la création du fichier de contrôle :

–         Si DB_CREATE_ONLINE_LOG_DEST_n  est défini, un CF de type OMF  est créé dans chaque répertoire

–         Sinon, si l’un ou (et) l’autre des 2 autres paramètres, DB_RECOVERY_FILE_DEST et DB_CREATE_FILE_DEST sont  définis, un CF de type OMF est créé à ces endroits

–         Si aucun de ces 3 paramètres n’est défini, le CF créé ne sera pas OMF

Il en est de même pour la création des online redologs ; ils sont créés jusqu’à la valeur MAXLOGMEMBERS.

Sauvegarde incrémentielle rapide

Effectue le suivi des blocs modifiés depuis la dernière sauvegarde incrémentale lorsque un flux redo est généré..

Background process : Change Tracking WRitter           CTWR

Par défaut il est désactivé.

ALTER DATABASE {ENABLE |DISABLE} BLOCK CHANGE TRACKING  [USING FILE ‘___’]

Si DB_CREATE_FILE_DEST est défini il n’est pas utile de nommer le fichier.

Pour le déplacer : ALTER DATABASE RENAME FILE ‘_______’  TO ‘_______’ ;

Monitoring block change tracking

SELECT filename, status, bytes from V$BLOCK_CHANGE_TRACKING.

Il est possible de calculer à partir de la vue V$BACKUP_DATAFILE le pourcentage de blocks lus dans les DF ; ce pourcentage est réduit lorsque la fréquence des backup incrémentaux est augmentée.s

Incrementally updated backups

RMAN peut maintenant restaurer des images copies en utilisant des backups incrémentaux de fichiers :

–         Les images copies sont mises à jour avec tous les changements jusqu’au SCN de la sauvegarde incrémentale

–         La durée de restauration est réduite

–         Il n’y a pas besoin de faire une image copie après une restauration incrémentale : RECOVER COPY OF DATAFILE 3

Oracle-Suggested Strategy

Dans EM : Maintenance + Backup/recovery + Schedule backup + Oracle-Suggested backup

Oracle effectue alors:

–         Une sauvegarde complete; full database copy

–         Une sauvegarde incrémentale par jour

Incremental roll forward of a database copy

En français: Ré implémentation incrémentielle des modifications d’une copie de base de données.

Incremental backups: RMAN backup command changes (R2)

Nouvelle commande pour effectuer une sauvegarde incrémentale à partir d’un SCN particulier:

RMAN> backup incremental FROM SCN 12323445 DATABASE;

Autres modifications des commandes RMAN

–         Image copies

RMAN> BACKUP AS COPY DATABASE

Avant il fallait utiliser plusieurs commandes COPY (simplifié en 10g)

–         Backup sets

RMAN> BACKUP AS BACKUPSET DATABASE    (défaut)

–         Default disk backup type

RMAN> CONFIGURE DEVICE TYPE DISK

BACKUP TYPE TO COPY

Définir comme comportement par défaut une copie de la base (l’utilisation de RMAN n’est pas obligatoire pour la restauration des fichiers vs backup sets)

Backup type enhancements by using EM

[to be continued]

Flash Back Any Error

Rédacteur: V. Fenoll DBA Oracle Montreal & Oracle Doc.

Navigation temporelle et sur 3 niveaux

Temporelle :

– Flashback query : interroger toutes les données à un point dans le temps.

– Flashback versions query : afficher toutes les versions des lignes entre 2 instants, ainsi que les transactions qui ont modifié la ligne.

– Flashback transaction query : afficher toutes les modifications apportées par une transaction

Récupération à tous les niveaux :

– DB :               Flashback database

– Table :           Flashback table et Flashback drop

– Ligne:             Flashback query (9i : restaurer des lignes)

Architecture

Utilise un nouveau type de fichier journal : les « journaux flashback » contiennent les images « avant » des blocs de données.

Nouveau processus : RVWR qui va puiser dans la nouvelle zone mémoire tampon flashback.

Lors d’une restauration :

–         application des journaux flashbacks

–         application des archives logs

Pour les bases volumineuses, il erst recommandé de positionner LOG_BUFFER = 8M pour garantir un flashback buffer de 16M.

Configurer Flashback Database

Dans EM, onglet maintenance + backup/recovery + recovery settings.

La base doit être en mode ARCHIVELOG et mount : activer la journalisation flashback.

Il est possible de faire un flashback DB à partir de EM.

SQL> ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=2880;  (min)

SQL> ALTER DATABASE FLASHBACK ON | OFF;

Les 2880 minutes sont un objectifs  uniquement et n’offre aucune garantie.

SELECT flashback_on from v$database ;

( Yes|no)

Flashback Database : exemples

Base en état mount.

Il est possible d’utiliser RMAN ou SQL*Plus, mais attention, les commandes ne sont pas exactement les mêmes.

SQL> FLASHBACK DATABASE  to timestamp (sysdate-1/24) ;

SQL>                                                  to SCN 45678;

RMAN permet en plus la recuperation via SEQ:

RMAN> FLASHBACK DATABASE   to sequence=223 thread=1;

RMAN> FLASHBACK DATABASE   to scn=4153456;

RMAN> FLASHBACK DATABASE   to time = to_date (___);

Surveiller la base de données flashback

V$FLASHBACK_DATABASE_LOG

–         estimated_flashback_size : estimation

–         flashback_size : taille réèlle

–         oldest_flashback_scn, oldest_flashback_time: jusqu’à quand on peut remonter

V$FLASHBACK_DATABASE_STAT

Pour surveiller la surcharge liée à la journalisation ; 24h d’infos, chaque ligne représente un intervalle d’une heure.

Vue utile pour déterminer les changements de fréquence dans la génération des données flashback

Exclure un TS de flashback database

ALTER TABLESPACE test FLASHBACK OFF

Select flashback_on from v$tablespace ;

Avant de faire le flashback, il faudra mettre ce TS OFFLINE.

Flashback database : considérations

Après une opération de flashback, ouvrir la base en lecture seule pour vérifier l’heure ou le SCN, puis faire un resetlogs pour l’ouvrir en modification.

Flashback database ne peut pas être utilisé si :

–         Le fichier de contrôle a été restauré ou recréé

–         Un TS a été supprimé

–         Un DF a fait l’objet d’une récupération d’espace

Flashback drop

Annule une instruction DROP TABLE.

Paramètre RECYCLEBIN = ON

La table et les contraintes sont renommées.

La corbeille est une table qui gère les correspondances entre les  noms originaux et les noms générés par le système.

Depuis EM : Maintenance + backup/recovery + recovery + Table + Flashback dropped tables.

select USER | DBA_RECYCLEBIN original_name, type, droptime, space, …,

where can_undrop = ‘YES’;

SQL> show recyclebin

Restaurer des tables à partir de la corbeille

Restaure également les objets dépendants.

Si utilisation du nom d’origine, le système applique le principe LIFO pour déterminer la table à restaurer.

Il est également possible de modifier le nom d’origine.

FLASHBACK TABLE  matable TO BEFORE DROP  [RENAME TO table2];

Attention: Après restauration d’une table, les index et triggers gardent le nom unique (de la corbeille).

Corbeille : Stratégie de récupération de l’espace

Purge manuelle :

PURGE            TABLESPACE ts1

PURGE            [USER_ | DBA_] RECYCLEBIN

Purge automatique et allocation d’espace, dans ces ordre:

Espace libre ne correspondant pas à des objets de la corbeille

Objets de la corbeille dans l’ordre FIFO

Espace libre alloué par auto-extension

Contourner la corbeille

DROP TABLE t1 PURGE ;

DROP TS including contents ;

DROP user cascade ;

Les objets associés de la corbeille sont purgés automatiquement.

Interroger des tables supprimées

DBA_TABLES : DROPPED = YES

select name from dba_tables where dropped=’yes’

Lire les données de la table supprimée:

select * from “BIN$sfddfsc”;

SQL> desc dba_recyclebin

Name                                      Null?    Type

—————————————– ——– —————————-

OWNER                                     NOT NULL VARCHAR2(30)

OBJECT_NAME                               NOT NULL VARCHAR2(30)

ORIGINAL_NAME                                      VARCHAR2(32)

OPERATION                                          VARCHAR2(9)

TYPE                                               VARCHAR2(25)

TS_NAME                                            VARCHAR2(30)

CREATETIME                                         VARCHAR2(19)

DROPTIME                                           VARCHAR2(19)

DROPSCN                                            NUMBER

PARTITION_NAME                                     VARCHAR2(32)

CAN_UNDROP                                         VARCHAR2(3)

CAN_PURGE                                          VARCHAR2(3)

RELATED                                   NOT NULL NUMBER

BASE_OBJECT                               NOT NULL NUMBER

PURGE_OBJECT                              NOT NULL NUMBER

SPACE                                              NUMBER

Il est impossible d’effectuer des opérations LMD ou LDD sur des objets se trouvant dans la corbeille.

Flashback drop : Considérations

Tables protégées :

–         Autres que SYSTEM

–         TS locally managed

–         N’utilisent pas de stratégies FGA ou VPD

Dépendances non protégées :

–         Index de jointure Bitmap

–         Contraintes d’intégrité référentielles

–         Index supprimés avant les tables

Les tables purgées ne peuvent pas faire l’objet d’un flashback.

Flashback versions Query

Interroger la base de données à un instant donné ou à un SCN donné : utilisation de la clause VERSIONS.

Les lignes renvoyées représentent l’historique des changements.

Dans EM : Onglet maintenance + Perform Recovery + Tables

Flashback versions Query : Syntaxe

SELECT [pseudo_columns]

FROM  tables1

VERSIONS BETWEEN

{ SCN | TIMESTAMP  { MINVALUE  and MAXVALUE }

[AS OF {SCN | TIMESTAMP expr}]

WHERE [pseudo_columns]

Pseudo columns:

Limite inférieure de la plage de validité de la version

VERSIONS_STARTTIME

VERSIONS_STARTSCN

Limite supérieure de la plage de validité de la version

VERSIONS_ENDTIME

VERSIONS_ENDSCN

Identifiant de transaction ayant créé la version

VERSIONS_XID

Opération ayant généré la version

VERSIONS_OPERATION

Ex :

SELECT versions_XID, versions_startscn, versions_endscn,

versions_opérations,

First_name

FROM EMP

VERSIONS BETWEEN  SCN  MINVALUE  and MAXVALUE

AS OF SCN 45889621 (MAXVALUE, si pas de AS OF: sysdate)

WHERE  employee_id=5;

Operation         = Insert

= Delete

= Update

Flashback versions Query : Considérations

VERSIONS ne peut pas être utilisée pour interroger :

–         Tables externes

–         Tables temporaires

–         Vues V$

–         Vues

On ne peut pas obtenir les versions de lignes après la date d’une opération LDD (on a tout même les lignes avant l’opération LDD).

Les opérations de récupération d’espace sont filtrées (supprimées de la liste des versions car les données n’ont pas changées).

Flashback Transaction Query

Utilisation de la vue FLASHBACK_TRANSACTION_QUERY pour déterminer toutes les instructions SQL nécessaires pouvant être utilisées pour annuler les modifications apportées par une transaction spécifique ou au cours d’une période particulière.

Flashback Transaction Query offre un moyen plus rapide que LogMiner pour générer les SQL d’annulation car il utilise également un chemin d’accès indexé pour annuler les données.

select operation, undo_sql, table_name from FLASHBACK_TRANSACTION_QUERY

where XID = …           (numéro de transaction)

|

where start_timestamp >=  …   and commit_timestamp <= …   (intervalle de temps)

order by undo_change#;

Privilège: SELECT ANY TRANSACTION

Dans EM: Recovery wizard + Perform object level recovery + SCN

Utilisation conjointe de Flashback Versions et Transaction Query

SELECT versions_XID, First_name

FROM EMP

VERSIONS BETWEEN  SCN  MINVALUE  and MAXVALUE

AS OF SCN 45889621

WHERE  employee_id=5;

Puis

SELECT operation, undo_sql, table_name from FLASHBACK_TRANSACTION_QUERY

where XID = hextoraw(‘8C545623684A54’);

Flashback Transaction Query : Considérations

Les opérations LDD sont considérées comme des opérations de mises à jour du dictionnaire.

Les update de clé primaire sur IOT : considérées comme Delete + Insert

Les objets supprimés apparaissent comme des numéros d’objets

Les utilisateurs supprimés apparaissent comme des identificateurs d’utilisateurs.

Il peut être nécessaire d’ajouter des « supplemental logs » (ALTER DATABASE ADD SUPPLEMENTAL LOG DATA) en particulier pour prendre en charge les lignes chainées ou les tables en cluster.

Flashback table

Récupération de tables jusqu’à un point dans le temps.

C’est une instruction atomique ; toutes les tables sont récupérées ou aucune.

EM : Maintenance + Perform recovery + Object type = Table + Operation type = Flashback existing table.

Il est nécessaire d’avoir “ENABLE ROW MOVEMENT” car Flashback table utilise des opérations LMD et ne préserve pas les ID de ligne.

FLASHBACK TABLE emp TO TIMESTAMP (sysdate-1);

FLASHBACK TABLE emp, dept TO SCN 54454 ENABLE TRIGGERS;

Il n’y a pas de rollback possible sur les opérations de flashback. Pour revenir en arrière il faut donc faire un nouveau Flashback en utilisant le SCN de la base d’origine (colonne CURRENT_SCN de V$DATABASE).

Flashback table : considérations

Transaction unique.

Des verrous externes LMD sont acquis.

Les stats ne sont pas soumises au flashback.

Les index actuels et les objets dépendants sont conservés.

L’opération est écrite dans l’alerte.

L’intégrité des données est conservée.

Ne fonctionne pas sur les tables externes.