SPFile : Nouveau fichier Binaire dinitialisation géré par Oracle
Toutes les modifications par ALTER SYSTEM deviennent permanentes.
Paramètres dinitialisation dynamiques grâce au SPfile.
Sil existe, est prioritaire par rapport au PFile (Pfile devient facultatif).
Se trouve par défaut sous %ORACLE_HOME%/database (NT) $ORACLE_HOME%/dbs (Unix)
A comme nom spfile<sid>.ora et ne peut pas être mentionné dans la commande Startup (au contraire du Pfile).
Est créé à partir du Pfile (nécessite les privilèges Sysdba ou Sysoper) avec :
CREATE SPFILE = NomDuSpfile
FROM PFILE = NomPfile
On peut le créer avec les noms par défaut avec:
CREATE SPFILE FROM PFILE
Est modifiable par la commande :
ALTER SYSTEM SET paramètre = valeur
[COMMENT=moncommentaire]
[SCOPE = MEMORY | SPFILE |BOTH]
[DEFERRED]
Où MEMORY : en mémoire uniquement (par défaut comme la 8i).
SPFILE : uniquement dans le SPFILE.
BOTH : en mémoire et dans le SPFILE.
DEFERRED : pour les paramètres dynamiques, les active pour les sessions futures (pas celles en cours).
COMMENT : commentaire associé au paramètre de longueur maximale de 255 caractères.
Son contenu est montré par la vue V$SPPARAMETER.
Est exportable vers un Pfile (nécessite les privilèges Sysdba ou Sysoper) avec :
CREATE PFILE = NomDuPfile FROM SPFILE = NomDuSpfile
Peut être partagé entre plusieurs instances dun parallel server (Real Application Cluster en 9i).
2. Gestion mémoire
2.1. Mémoire PGA
2.1.1. Nouveaux paramètres dynamiques
PGA_AGGREGATE_TARGET
Représente le total PGA de toutes les sessions ouvertes à atteindre.
WORKAREA_SIZE_POLICY (MANUAL OU AUTO)
Valeur par défaut à MANUAL si PGA_AGGREGATE_TARGET nest pas défini (le tuning mémoire est alors géré par les *_AREA_SIZE)
Taille total de la PGA < PGA_AGGREGATE_TARGET en mode auto.
2.1.2. Statistiques supplémentaires dans :
a - V$SYSSTAT et V$SESSTAT : work area memory allocate
work area executions optimal size
work area executions one pass size
work area executions multipass size
b - V$PROCESS PGA_USED_MEM
PGA_ALLOC_MEM
PGA_MAX_MEM
2.2. Mémoire SGA dynamique
Sa taille peut changer dynamiquement pendant le fonctionnement dune instance (par lintermédiaire du Buffer Cache et de la Shared Pool Size).
Nouvelle unité dallocation : Le Granule.
Cest une unité dallocation mémoire contiguë et qui dépend de la taille de la SGA :
=> Si SGA_MAX_SIZE < 128 Mo, taille granule = 4Mo.
=> Si SGA_MAX_SIZE >= 128 Mo, taille granule = 16Mo.
=> taille de la SGA exprimée en granules et en contient au moins 3 (Fixed SGA (dont Redo Buffer), buffer Cache, Share Pool)
Lallocation des granules est montrée par la vue V$BUFFER_POOL.
La Shared Pool peut être retaillée dynamiquement avec la commande :
ALTER SYSTEM
SET SHARED_POOL_SIZE = 128 M;
Cette taille doit être un multiple du granule et doit être inférieure à SGA_MAX_SIZE.
Le Buffer Cache peut être retaillé dynamiquement avec la commande :
ALTER SYSTEM
SET DB_CACHE_SIZE= 64 M;
Cette taille doit être un multiple du granule et doit être inférieure à
SGA_MAX_SIZE. Elle doit être différente de 0
=> db_block_buffer inutilisé en 9i Nouveaux paramètres : DB_CACHE_SIZE, DB_KEEP_CACH_SIZE, et DB_RECYCLE_CACHE_SIZE.
Paramètres obsolètes et bientôt supprimés : DB_BLOCK_BUFFER, BUFFER_POOL_KEEP et BUFFER_POOL_RECYCLE.
2.3. Statistiques
Statistiques qui prédisent le comportement de la base lorsque l'on modifie la taille du cache.
Est activé en utilisant la commande ALTER SYSTEM sur le paramètre DB_CACHE_ADVICE (ON, OFF ou READY)
Les résultats sont consultables à laide de la vue V$DB_CACHE_ADVICE.
Nb : Les paramètres LOG_BUFFER, LARGE_POOL_SIZE et JAVA_POOL_SIZE restent statiques en 9i.
3. Gestion des fichiers de données et des tablespaces
3.1. OMF : Oracle Managed Files
Fichier géré par le SGBD, sert pour les control files, les datafiles et les redo logs.
sert principalement pour les bases de test.
Crée un nom unique pour chaque fichier et se charge de les supprimer automatiquement en cas de suppression logique.
Les répertoires physiques sont gérés par 2 paramètres dynamiques :
DB_CREATE_FILE_DEST : Utilisé pour les Data Files(Fichiers de données)
DB_CREATE_ONLINE_LOG_DEST_n (1 <= n <= 5) : Utilisé pour les controls files et les redo logs.
Ex : La commande suivante peut être lancée pour définir le premier paramètre :
ALTER SYSTEM SET db_create_file_dest = /oracle/dbs/files ;
Si seul le premier paramètre est positionné, alors tous les fichiers (control, données et redo) seront localisés dans le même répertoire.
Nommage des fichiers gérés par OMF (Voir note Métalink n° 159888.1):
Oracle Version 9.0.1.1 : ora_<nomdutablespace>_8caracteresaleatoires.dbf (même chose pour .log)
Oracle Version 9.0.1.2 : o1_mf_<nomdutablespace>_8caracteresaleatoires_.dbf (même chose pour .log)
OMF reconnaît ses fichiers par le préfixe et lextension, la syntaxe a changé à partir de la 9.0.1.2 car ora_ était beaucoup utilisé avant OMF.
Pour créer des control files OMFs :
Il faut définir un ou les deux paramètres dynamiques.
Ne pas spécifier le paramètre CONTROL_FILES lors de la création de la base.
un control file est créé dans chacun des DB_CREATE_ONLINE_LOG_DEST_n
ou dans DB_CREATE_FILE_DEST sinon.
les fichiers sont affichés dans le fichier dalerte.
si SPFILE est défini, les controls files générés sont automatiquement inclus dans ce fichier binaire.
Pour créer des redo logs OMFs :
Définir les paramètres DB_CREATE_ONLINE_LOG_DEST, les groupes seront créés dans chacun des DB_CREATE_ONLINE_LOG_DEST_1 et DB_CREATE_ONLINE_LOG_DEST_2.
Chaque groupe aura 2 membres.
Chaque fichier a comme taille par défaut : 100 Mo.
Pour ajouter un groupe :
ALTER DATABASE ADD LOGFILE ;
Pour supprimer un groupe :
ALTER DATABASE DROP LOGFILE GROUP 3 ;
Les fichiers journaux archivés ne peuvent être de type OMF.
Pour créer des tablespaces de type OMF :
DB_CREATE_FILE_DEST doit être défini.
Utiliser la syntaxe :
CREATE TABLESPACE omf_2 ;
Le fichier de données associé est créé dans DB_CREATE_FILE_DEST.
La clause DATAFILE nest pas obligatoire.
La taille par défaut est de 100 Mo.
Le tablespace est créé en AUTOEXTENT UNLIMITED.
A la suppression du tablespace, le fichier associé est supprimé automatiquement.
On peut lancer aussi la commande :
CREATE TABLESPACE omf_2
DATAFILE SIZE 500M ;
Nb : Les tablespaces sont créés automatiquement en EXTENT MANAGEMENT LOCAL en 9i. Pour utiliser le dictionnaire de données, il faut spécifier EXTENT MANAGEMENT DICTIONARY.
Pour ajouter un fichier de données à un tablespace OMF :
ALTER TABLESPACE TBS1 ADD DATAFILE;
Pour supprimer un tablespace et ses fichiers de données non OMFs :
DROP TABLESPACE TBS1
INCLUDING CONTENTS AND DATAFILES;
3.2. Tablespace temporaire par défaut
En 9i, possibilité de définir un tablespace temporaire par défaut autre que SYSTEM.
A la création de la base avec la clause :
DEFAULT TEMPORARY TABLESPACE tmp1
TEMPFILE '/oracle/dbs/temp01.dbf' SIZE 100M
Avec la commande:
ALTER DATABASE db1
DEFAULT TEMPORARY TABLESPACE tmp1.
3.3. Gestion des segments d'annulation
Nouveau paramètre d'initialisation : UNDO_MANAGEMENT
2 valeurs :
AUTO : Géré par l'instance (sur un seul tablespace de type UNDO_TABLESPACE).
nécessite d'avoir les paramètres suivants:
UNDO_MANAGEMENT = AUTO
UNDO_TABLESPACE = UNDO1
(Le fonctionnement des rollbacks segments de SYSTEM est identique aux versions antérieures et un rollback segment est créé automatiquement dans le tablespace SYSTEM).
MANUAL : Géré par le DBA. (Identique à la gestion des rollbacks segments avant la 9i).
nécessite d'avoir les paramètres suivants:
UNDO_MANAGEMENT=MANUAL
CREATE TABLESPACE RBS
CREATE ROLLBACK SEGMENT rbs1 STORAGE ( )
ROLLBACK_SEGMENTS= (rbs1,rbs2)
Création d'un undo tablespace :
A la création de la base, avec la clause supplémentaire:
(si au démarrage d'une instance, UNDO_MANAGEMENT=AUTO et qu'il n'y a pas de clause UNDO_TABLESPACE, il en crée un par défaut, de nom SYS_UNDOTBS, en AUTOEXTEND ON, et dans un fichier de 10 Mo).
(Ce tablespace ne peut servir que pour stocker les données d'annulation).
Modification d'un undo tablespace :
ALTER TABLESPACE undotbs1
ADD DATAFILE
RENAME
DATAFILE [ONLINE, OFFLINE]
BEGIN BACKUP
END BACKUP
suppression d'un undo tablespace :
DROP TABLESPACE undotbs1 INCLUDING CONTENTS AND DATAFILES;
le undo tablespace utilisé (1 à la fois) peut être modifié à l'aide de la commande :
ALTER SYSTEM
SET UNDO_TABLESPACE=tbsundo2;
En résumé, la gestion des segments d'annulation peut se faire avec les nouveaux paramètres:
UNDO_MANAGEMENT: MANUAL ou AUTO
UNDO_TABLESPACE : Nom du tablespace d'annulation
UNDO_SUPPRESS_ERRORS : TRUE OU FALSE (par défaut).
=> si positionné à TRUE, supprime les messages d'erreurs affichés, quand on est en mode AUTO et qu'une opération manuelle est exécutée (telle que ALTER ROLLBACK SEGMENT ou ALTER SESSION SET TRANSACTION USE ROLLBACK SEGMENT).
UNDO_RETENTION: Durée (par défaut 30 s) pendant laquelle la donnée modifiée est gardée= Flashback.
Les informations d'utilisation des segments UNDO (auto ou manuel) sont stockées dans la vue V$UNDOSTAT.
3.4. Support de taille multiple de bloc
Le DB_BLOCK_SIZE utilisé à la création de la base (et servant pour la création du tablespace SYSTEM), ne peut être changé sans recréer la base et sert comme taille par défaut lors de la création dun tablespace.
Néanmoins, pour chaque tablespace créé manuellement, la taille du bloc est maintenant paramétrable :
CREATE TABLESPACE TBS1
DATAFILE '/oracle/dbs/tbs01.dbf' SIZE 10 M
BLOCKSIZE 4096;
(2 Ko <= BLOCKSIZE <= 32Ko).
Nb :
Toutes les partitions d'un objet partitionné doivent être réparties dans des tablespaces de tailles de bloc identiques.
Tous les tablespaces temporaires doivent utiliser la taille de bloc standard.
Pour gérer ces tailles différentes de bloc, des paramètres (dynamiques) de taille de buffer doivent être configurés :
DB_CACHE_SIZE : Taille réservée aux blocs standard de la base.
DB_nK_CACHE_SIZE : Taille allouée aux différents blocs non standard, par défaut à 0 (n=2, 4, 8,16 et 32), excluant celle des blocs standard.
Uniquement pour les blocs standard, 2 paramètres peuvent être utilisés (il ne sont pas inclus dans DB_CACHE_SIZE):
DB_KEEP_CACHE_SIZE (au lieu de BUFFER_POOL_KEEP auparavant) : garde les tables en mémoire plus longtemps.
DB_RECYCLE_CACHE_SIZE (au lieu de BUFFER_POOL_RECYCLE auparavant) : inverse du précédent.
3.5. Gestion automatique d'espace libre dans les tablespaces gérés localement
Espaces libres et occupés sont décrits dans des bitmaps, et permet de savoir combien de blocs sont libres dans chaque segment.
Stockés dans des bitmapped blocs (BMBs).
Permet d'améliorer le processus d'insertion.
Un tablespace géré avec des bitmaps doit être de la forme :
CREATE TABLESPACE tbs1
DATAFILE '/oracle/dbs/tbs1.dbf'
SIZE 10M EXTENT MANAGEMENT LOCAL SEGMENT (tablespace géré localement).
SPACE MANAGEMENT AUTO. (Gestion automatique).
Les vues DBA_TABLESPACES, DBA_TABLES et DBA_SEGMENTS ont été modifiées pour stocker ces nouvelles informations.
4. Gestion des transactions récupérables (RESUMABLE)
Permet de suspendre une opération qui est en train de planter par manque d'espace et de la reprendre une fois la correction apportée (sans message d'erreur affiché).
Erreurs récupérables du type: ORA-1653: Unable to extend table by in tablespace
Liste complète : ORA-1562, 1628, 1630, 1631, 1632, 1650, 1652, 1653, 1654, 1655, 1656, 1683, 1684, 1685, 1688, 1691, 1692, 1693, 1694, 3233, 3234, 3235, 3236, 3238, 3239 et 1536.
Activation du mode récupérable :
ALTER SESSION ENABLE RESUMABLE
NAME 'update ma table' TIMEOUT 3600; (par défaut à 2h)
Désactivation du mode récupérable :
ALTER SESSION DISABLE RESUMABLE;
Pour pouvoir effectuer ces opérations, il faut posséder le privilège système : RESUMABLE.
Pour modifier le délai d'expiration (timeout), on peut utiliser :
ALTER SESSION ENABLE RESUMABLE TIMEOUT montimeout;
Utiliser le package DBMS_RESUMABLE :
DBMS_RESUMABLE.Set_Timeout (montimeout) => ma session en cours.
DBMS_RESUMABLE.Set_Session_Timeout (Session_Id, montimeout) => n'importe quelle session en cours.
Pour modifier le timeout, on peut utiliser :
ALTER SESSION ENABLE RESUMABLE NAME 'monnom';
Quand une opération de type récupérable tombe en erreur par manque de place, seul le fichier ALERT trace l'erreur.
Les opérations suivantes sont récupérables :
Requêtes de type Select.
Ordres DML.
Ordres DDL.
Import et Export.
SQL*Loader.
Les sessions "Récupérées" peut être tracées en utilisant un trigger de type : AFTER SUSPEND ON DATABASE.
2 vues ont été créées pour suivre les opérations récupérable en cours (pas de persistance des infos) :
USER_RESUMABLE
DBA_RESUMABLE
5. Améliorations de Database Resource Manager
5.1. Active Session Pool
Définit le nombre de sessions simultanées actives par groupe de consommateurs (de ressources).
=> géré par plusieurs paramètres d'initialisation (positionnés par défaut à UNLIMITED) :
ACTIVE_SESSION_POOL_P1 : nombre de sessions actives qui établissent le seuil d'un groupe de consommateurs.
QUEUEING_P1 : Temps d'attente maximum (en s) pour une session en file d'attente, après cette durée, la session est annulée avec une erreur.
Temps maximum d'exécution estimé (par défaut à UNLIMITED) :
MAX_ESTIMATED_EXEC_TIME: Temps maximal estimé autorisé pour une transaction avant son exécution. Si la transaction dépasse ce seuil, elle n'est pas exécutée.
Changement automatique de groupe de consommateurs :
3 directives sont possibles (par défaut, les 2 premières sont à UNLIMITED, le 3ème à FALSE) :
SWITCH_GROUP: Groupe sur lequel on a commuté.
SWITCH_TIME : Temps (en s) durant laquelle une session doit être exécutée avant de changer de groupe.
SWITCH_ESTIMATE : Si positionné à TRUE, le temps d'exécution est utilisé pour décider quand une opération va être switchée, et ce peut être avant qu'elle commence.
Si les 2 derniers paramètres sont positionnés, la session est commutée automatiquement
5.2. Quota d'undo
Nouveau paramètre de directive de plan de ressource:
UNDO_POOL (Kb), par défaut à UNLIMITED, restreint les opérations de type DML, et correspond au quota d'annulation par groupe de consommateurs (après ce quota, aucun ordre DML n'est autorisé).
Est créé ou modifié par les procédures suivantes :
Les vues suivantes ont été adaptées : V$SESSION, V$MYSESSION, V$RSRC_CONSUMER_GROUP et DBA_RSRC_PLANS.
6. Améliorations de Enterprise Manager
OEM est géré par Entreprise Manager Console (= fusion de la console et de DBA Studio dans Oracle 8i).
Il peut se lancer en 2 modes :
Autonome (Standalone) : Connexion directe aux bases Oracle.
OMS : Oracle Management Server(sysman/oracle), basé sur un référentiel (repository) propre et qui se connecte aux bases via un agent (service sous NT) installé sur chacune d'elles.
En mode autonome, certaines fonctionnalités nécessitent l'installation d'un référentiel (en local), indépendant d'un OMS.
Nouvelle entité en 9i : Management Region = Groupe de nuds (bases) et de serveurs d'administration (management server)(OMS) propre à une région géographique.
OEM gère via l'interface graphique toutes les nouvelles fonctionnalités de 9i décrites dans les chapitres précédents:
SPFILE.
UNDO MANAGEMENT (gestion des segments d'annulation automatique).
Jeu de caractères (Character set) UNICODE.
Gestion dynamique de la mémoire.
Tablespace temporaire par défaut.
Différentes tailles de blocs.
Temps moyen de récupération de la base (MTTR: Mean Time to Recovery).
Améliorations des sauvegardes et récupérations (géré par RMAN).
"Advanced Queuing".
OEM comporte une vue graphique de la vue dynamique V$DB_CACHE_ADVICE
=> permet de déterminer quelle taille de cache est optimale afin de diminuer les lectures physiques sur le disque.
Autres nouvelles fonctionnalités:
Génération de rapports en HTML
=> sur la configuration complète de la base
=> sur les propriétés d'un objet sélectionné dans l'arbre graphique de la console.
Amélioration de la gestion des événements (events)(nécessite l'agent Oracle9i).
7. Amélioration des performances
7.1. Optimiseur CBO
Ajout de 3 colonnes dans la table PLAN_TABLE:
cpu_cost : Coût CPU estimé de l'opération.
io_cost : Coût accès disque estimé de l'opération.
temp_space : Espace temporaire estimé par l'opération.
Estimation tient compte de l'utilisation réseau et CPU, des effets du cache (sur les jointures) et de la préextraction (prefetching) (rapatrie plusieurs blocs feuilles d'un index en un seul accès disque).
7.2. Package DBMS_STATS
Nouvelle valeur pour le paramètre estimate_percent : AUTO_SAMPLE_SIZE
=> estime la taille de l'échantillon nécessaire pour obtenir les meilleurs gains de performances.
Nouvelles options pour le paramètre size :
REPEAT : répète la forme de l'histogramme déjà existant.
AUTO : Histogramme basé sur la distribution des données et l'utilisation de la colonne par l'application.
SKEWONLY : Histogramme basé uniquement sur la distribution des données => intéressant pour la première "collecte" de statistiques (sinon AUTO).
stattab : nom de la table où seront stockées les stats
statid : identifiant des stats générées.
(avant de lancer cette commande, il faut activer une tâche (job) avec : ALTER SYSTEM SET job_queue_process=1, si la commande est lancée à l'aide d'un job).
7.3. Nouveaux indicateurs d'optimisation (hints) et modes pour l'optimiseur
OPTIMIZER_MODE (paramètre d'initialisation) ou OPTIMIZER_GOAL (à l'intérieur d'une session) peuvent prendre ces nouvelles valeurs:
FIRST_ROWS_1
FIRST_ROWS_10
FIRST_ROWS_100
FIRST_ROWS_1000
Ex:
ALTER SESSION SET OPTIMIZER_GOAL = FIRST_ROWS_100;
L'indicateur FIRST_ROWS (à l'intérieur d'une commande SQL) peut prendre n'importe quelle valeur.
Ex:
Select /*+ FIRST_ROWS (25) */
7.4. Edition/Modication des plans d'exécution stockés
Les plans d'exécution stockés dans les tables réservées du schéma "outln", peuvent êtres édités puis publiés vers les autres utilisateurs après optimisation du (des) plan(s) en question.
Les différentes parties modifiables sont :
l'ordre des jointures
méthodes des jointures
méthodes d'accès (full scan ou par index).
méthodes de distribution (parallel query).
ré-écriture des sous-requêtes et vues.
En plus des plans publics qui sont stockés dans le schéma outln et ne sont pas modifiables, 9i ajoute les plans privés propres à une session et stockés sur son propre schéma d'exécution. Ce plan n'est visible par les autres sessions que s'il est sauvegardé en tant que "public".
Les plans publics sont utilisés quand le paramètre USE_STORED_OUTLINES vaut TRUE.
Les plans privés sont utilisés quand le paramètre USE_PRIVATE_OUTLINES vaut TRUE.
Pour utiliser la commande CREATE OUTLINE FROM, il est nécessaire de posséder :
le privilège SELECT_ANY_CATALOG.
le privilège CREATE ANY_OUTLINE.
La commande DBMS_OUTLN_EDIT.create_edit_tables (valable depuis la 8i) :
crée les tables nécessaire dans le schéma en cours pour dupliquer et éditer les plans stockés (<=> exécution du script utledtol.sql)
nécessite d'avoir le privilège EXECUTE sur le package DBMS_OUTLN_EDIT.
La colonne outline_sid à été ajoutée à V$SQL : session oracle à partir de laquelle le plan a été rapatrié.
Pour contrôler l'utilisation des plans privés, le paramètre de session peut être modifié :
ALTER SESSION SET USE_PRIVATE_OUTLINES = [TRUE|FALSE|nom_categorie]
TRUE : Active les plans privés dans la catégorie DEFAULT.
FALSE : Désactive les plans privés.
nom_categorie : Active les plans privés dans la catégorie nom_categorie.
La commande qui crée les plans stockés est la suivante:
Plans d'exécution non recalculés à chaque fois : les valeurs littérales sont remplacées par des variables de substitution.(et différents plans possibles avec différentes valeurs).
Trois valeurs possibles pour le paramètre dynamique CURSOR_SHARING:
FORCE : pas de remplacement.
EXACT (par défaut): partage pour toutes les valeurs.
SIMILAR (nouveauté 9i) :l'optimiseur examine l'ordre SQL avant de décider de recalculer (ou pas) le plan.
Les plans d'exécution sont maintenant stockés en cache et consultables avec la vue V$SQL_PLAN.
Pour activer (/désactiver) le monitoring sur un index:
Ces infos sont stockées dans la vue V$OBJECT_USAGE.(purgés à chacun des ces ordres sur l'index suivi).
7.6. Index
Utilisation d'un index même si la 1ère colonne n'est pas spécifiée ( sauf pour les reverses ou bitmap index) = skip scanning.
Bitmap Join Index : Index bitmap créé à partir de jointures.
CREATE BITMAP INDEX mon_index_bitmap
ON sales (c.region)
FROM sales s, customers c
Where c.cust_id = s.cust_id
=> sera utilise dans l'ordre suivant :
SELECTSUM(s.cost)
FROM sales s, customers c
WHERE s.cust_id = c.cust_id
AND c.region ='Est';
=> permet d'utiliser seulement une table (sales) et l'index bitmap.
Restrictions :
Limitation au parallel DML sur la table fille uniquement (pas sur les tables de référence).
Les tables concernées peuvent être mises à jour une à la fois seulement.
Les tables ne peuvent apparaître plus d'une fois dans la requête.
Les tables ne peuvent pas être organisées en index ou être temporaires.
Les colonnes citées dans l'index n'appartiennent qu'aux tables maîtres (ou de référence).
La colonne de jointure sur la table maître ne peut être qu' une clé primaire ou unique.
Si la clé primaire est une clé composée, toutes les colonnes doivent apparaître dans la jointure.
=> les instructions de stockage pour la table servent d'information par défaut pour les partitions
(sauf si celles-ci sont spécifiées au niveau de la partition, (STORAGE(INITIAL 25K, NEXT 5K) TABLESPACE tbs_cli1))
=> si une valeur insérée au niveau de la table n'appartient pas aux listes, une erreur Oracle sera générée.
=> on peut, dans un select, faire une recherche à l'aide d'une égalité, d'une liste de valeurs (opérateur IN) ou d'un opérateur de comparaison (<=, <, >, >= ).
Ajout d'une partition : les valeurs ajoutées ne doivent pas exister dans les listes déjà créées.
=> Les instructions de stockage pour la table servent d'information par défaut pour la partition de fusion (Sauf si celles-ci sont spécifiées au niveau de la partition)
Les index (locaux et globaux) deviennent "Unusable".
=> il ne doit pas exister de ligne en table pour la valeur supprimée (DELETE obligatoire dans le cas inverse).
=> ne supprime pas toutes les valeurs de la partition.
=> les 3 valeurs spécifiées ci-dessous remplissent la première sous-partition créée, les autres valeurs remplissant la seconde sous-partition.
=> les index globaux deviennent "unusable"
Restrictions :
la valeur Null n'est pas acceptée dans les listes.
partition sur plusieurs colonnes non acceptées.
la liste des valeurs ne peut dépasser 4 Ko.
chaque liste doit comporter au moins une valeur.
8.2. Maintien des Index globaux
En 8i, les index globaux sur une table partagée sur plusieurs partitions deviennent 'unusable' si un ordre DDL est exécuté sur la table portant l'index;
En 9i, ceux-ci peuvent rester utilisables si la clause suivante est ajoutée :
ALTERTABLE matable
DROP SUBPARTITION tab1
UPDATE GLOBAL INDEXES
PARALLEL (DEGREE 4);
=> valables pour les ordres ADD, DROP, MOVE, TRUNCATE, SPLIT, MERGE, EXCHANGE et COALESCE.
=> ne fonctionne pas sur les tables organisées en index.
8.3. Chargement direct en parallèle
En 8i, les chargements directs en parallèle (après le high water mark) ne se faisaient qu'avec un processus esclave par partition.
En 9i, plusieurs processus esclaves peuvent être utilisés par partition, ceci améliorant les temps de chargement. L'indicateur (hint) à utiliser est le suivant :
/*+ PARALLEL DEGREE n */ (avec n = nombre de processus /partition).
9. Améliorations pour le DataWareHouse
Tablespaces transportables : Support de différentes tailles de bloc entre deux bases.
Oracle Change Data Capture (CDC) : A l'aide de déclencheurs (triggers), Oracle capture les ordres DML et les insère dans une table de modifications (change table) afin que les changements puissent être publiés ultérieurement (et seulement les changements).
Pour publier les changement d'une application transactionnelle vers un DataWareHouse:
Sélectionner les tables (sources) pour lesquelles on veut surveiller les changements
Utiliser le package DBMS_LOGMNR_CDC_PUBLISH pour récupérer les changements sur ces tables.
Publier les changements à l'aide des tables de modifications
Donner ou révoquer les droits de select sur ces tables de modification.
Pour Souscrire :
Utiliser le package DBMS_LOGMNR_CDC_SUBSCRIBE pour souscrire aux tables sources.
Préparer les vues du souscripteur qui permettent de faire un select sur les tables de modification
Purger puis supprimer les vues devenues inutiles.
Note : Il faut bien sûr donner les droits d'exécution sur les 2 packages précités. Les tables de modification sont gérées en interne par LogMiner.
Vues supportant CDC :
CHANGE_SOURCES: Liste des changements des sources.
CHANGE_SETS: Liste des ensembles de changements.
CHANGE_TABLES: Liste les tables de modification.
DBA_SOURCE_TABLES : Liste des tables sources publiées.
DBA_PUBLISHED_COLUMNS : Liste des colonnes des tables sources publiées.
DBA_SUBSCRIPTIONS : Liste des souscriptions enregistrées.
DBA_SUBSCRIBED_TABLES : Liste des tables publiées pour lesquelles les souscripteurs ont souscrit.
DBA_SUBSCRIBED_COLUMNS : Liste des colonnes des tables publiées pour lesquelles les souscripteurs ont souscrit.
Pipelines Data Transformation (9i)
External Tables : Tables en lecture seule dont les données sont stockées dans des fichiers plats et décrivent comment les données sont présentées à la base de données.
table virtuelle
aucun ordre DML n'est autorisé
pas d'indexation possible
droits gérés par les privilèges système : SELECT TABLE et READ DIRECTORY
complémentaires à SQL*Loader
créées avec l'ordre SQL :
CREATETABLE order_items_ext
(order_id number (12), line_item_id number (3) ,
product_id number (6), unit_price number (8,2),
quantity number(8))
ORGANIZATION EXTERNAL => table externe
(TYPE oracle_loader => type d'accès (drivers utilisés)
DEFAULT DIRECTORY ext_tables => Répertoire contenant les fichiers
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY ','
BADFILE 'bad_order'
LOGFILE 'log_order'
MISSING FIELS ARE NULL)
LOCATION ('order_items1.dat','order_items2.dat'));
Les vues suivantes ont été créées pour stocker les informations des tables externes :
DBA_EXTERNAL_TABLES
DBA_EXTERNAL_LOCATIONS
Fonctions sur tables :
permettent de faire des transformations sur les données d'une table
les données en entrée peuvent consister en un ensemble de données
renvoient un ensemble d'enregistrements.
peuvent être parallélisées
utilisées dans la clause FROM d'un ordre SELECT;
Ex :
CREATEOR REPLACE FUNCTION transform (p r.ref_cur_type)
RETURN table_order_items_type (=> type prédéfini par l'utilisateur)
PIPELINED isBEGINFOR enr in p LOOP-- This is simple but in the real world.....
enr.quantity:= enr.quantity*2;
pipe row (enr);
ENDLOOP;
RETURN;
END;
La nouvelle instruction PL/SQL PIPELINED ramène un seul enregistrement résultat, suspend l'exécution de la fonction et la redémarre quand le programme appelant demande l'enregistrement suivant.
Cette fonction peut être appelé par :
SELECT * FROMTABLE ( transform (cursor (select * from order_items_ext)));
Multitable INSERT :
insertion dans plusieurs tables simultanément.
peut être utilisé en interne pour rafraîchir des vues matérialisées.
peut bénéficier de la parallélisation et du mécanisme "Direct Load".
Insert Inconditionnel (ALL) : Les clauses INTO sont exécutées une fois par enregistrement.
INSERTALLINTO sales VALUES (today,product_id,quantity)
INTO prd_sales VALUES (today,product_id,total)
SELECT TRUNC(s.sales_date) today,
S.product_id,
SUM(s.amount_sold) total,
SUM(s.quantity) quantity,
FROM sales_activity_direct s, product_information p
WHERE s.product_id = p.product_id
AND trunc(sales_date)=trunc(sysdate)
GROUPBY trunc(sales_date), s.product_id;
Pivoting Insert : Idem que précédemment sauf que toutes les insertions se font dans la même table
plusieurs enregistrements créés pour un enregistrement lu.
Insert Conditionnel (ALL) :
INSERTALLWHEN product_id in ('01','05','06') THENINTO sales_01 VALUES (today, product_id, total)
WHEN product_id in ('02','03','04') THENINTO sales_02 VALUES (today, product_id, total)
SELECT TRUNC (s.sales_date) today,
S.product_id,
SUM (s.amount_sold) total,
FROM sales;
Conditionnel FIRST_INSERT : Si la 1ère condition est vraie, il ne traite pas les autres
INSERT FIRST
WHEN SALARY > 40000 THENINTO EMPLOYE_BOSS (name, salary)
WHEN SALARY > 25000 THENINTO EMPLOYE_CADRE (name, salary)
WHEN SALARY > 15000 THENINTO EMPLOYE_SIMPLE (name, salary)
ELSEINTO EMPLOYE_OTHERS (name, salary)
SELECT name, salary from emp;
Instruction MERGE : "Fusion" d'insert et update suivant conditions
Si l'enregistrement existe => UPDATE
Si l'enregistrement n'existe pas => INSERT
MERGE INTO emp e
USING emp_ref s
ON (e.emp_id = s.emp_id)
WHEN MATCHED THENUPDATESET e.name = s.name
WHENNOT MATCHED THENINSERT (emp_id, name )
VALUES (emp_id, name );
Améliorations sur les vues matérialisées :
Les différentes actions possibles ( rafraîchissement, réécriture) sur ces vues sont identifiables par les procédures DBMS_MVIEW.EXPLAIN_MVIEW et DBMS_MVIEW.EXPLAIN_REWRITE.
10. Migration et mise à niveau de la base de données
Utilisation de SQL*PLUS qui possède les mêmes fonctionnalités.
sqlplus /nolog : pour ouvrir SQL*Plus sans se connecter
puis connect . as sysdba
connect internal ne fonctionne plus.
Remplacer tous les LONG par des LOBs (LONG=>CLOB ou LONG RAW => BLOB) avec l'ordre :
ALTERTABLE matable
MODIFY(nom_long CLOB);
( il faut vérifier qu'il y a deux fois la place du LOB pour faire la conversion).
Utiliser plutôt DBMS_STAT que ANALYZE.
Nouveaux types :
AnyData
AnyDataSet
AnyType
XMLType
TIMESTAMP (Précision) : Stocke la date avec les heures, minutes, secondes et fractions de secondes (de 0 à 9 décimales).
INTERVAL DAY TO SECOND : Période de temps en jours, heures, minutes et secondes.
INTERVAL YEAR TO MONTH : Période de temps en années et mois.
11. Oracle 9i : Conforme à la norme ISO SQL 1999
11.1. Jointures
11.1.1. Produit cartésien de 2 tables (Cross Joins)
Select e.ename,
d.deptno
From emp e CROSS JOIN
dept d;
11.1.2. Jointures "Naturelles"
Jointures qui lient toutes les colonnes communes aux 2 tables.
(Ici équivalent à une jointure explicite sur deptno)
Select e.ename,
deptno
From emp e NATURAL JOIN
dept d;
=> Les colonnes de même nom doivent avoir le même type
=> On ne préfixe jamais les colonnes communes (dans ce cas là)., sinon message d'erreur.
=> Un " select * " ne ramènera que les colonnes distinctes des 2 tables.
11.1.3. Equi-jointures
similaire au "Natural joins"
Select e.ename,
deptno
From emp e JOIN
dept d USING (deptno)
Where d.dept_name = 'PARIS';
11.1.4. Jointures avec clause "ON"
Select e.ename,
deptno
From emp e JOIN
dept d ON (e.deptno = d.deptno) JOIN
region r ON (d.regionno = r.regionno)
Where r.region_name = 'EUROPE';
=> La clause "ON" peut contenir n'importe quel prédicat, y compris des sous-requêtes.
11.1.5. Jointures externes
Select e.ename,
deptno
From emp e {LEFT|RIGHT|FULL} OUTER JOIN
dept d ON (e.deptno = d.deptno)
Where d.dept_name = 'PARIS';
=> Avec :
LEFT : rapatrie les données de la table de gauche.
RIGHT : rapatrie les données de la table de droite.
FULL : rapatrie les données des deux tables.
11.2. Expressions de type CASE
11.2.1. Fonction EXTRACT
EXTRACT (YEARFROM madate)
=> récupère l'année stockée dans la date fournie.
11.2.2. CASE simple : similaire au DECODE
Select e.ename , (CASE salary
WHEN 10000 THEN 'EMPLOYE'
WHEN 15000 THEN 'CADRE'
ELSE 'BIG BOSS' END) status
From Emp e;
11.2.3. CASE de recherche
Select e.ename, (CASEWHEN salary < 10000 THEN 'EMPLOYE'
WHEN salary > 15000 THEN 'CADRE'
ELSE 'BIG BOSS' END) status
From Emp e;
11.2.4. NULLIF
Ramène Null si la 1ère expression est égale à la 2ème sinon ramène la 1ère.
NULLIF (expr1,expr2)
Equivalence <=>
IF expr1 = expr2 Then
return null
ELSE
return expr1;
EndIf;
11.2.5. COALESCE
Extension de NVL => ramène la 1ère valeur non nulle.
Equivalence
COALESCE(expr1,expr2,expr3,...,exprn)
11.3. Sous-requêtes scalaires
Ramène une ligne avec une seule valeur
Select t.libelle_type_client ,
(Select count (*)
From Client c
Where c.typ_cli = t.typ_cli) Total
From Type_Client T;
=> peut être utilisé partout sauf dans les clauses GROUP BY ou condition WHEN des triggers.
11.4. Groupes d'enregistrements
11.4.1. GROUPING SETS
équivalent à des unions de requêtes avec des GROUP BY mais cette fois ci, la requête n'est exécutée qu'une fois.
=> ramène trois groupes d'enregistrements : un pour le 1er triplet, un pour le 2ème couple et un pour le dernier couple.
11.4.2. Colonnes composites
GROUP BY ROLLUP (a, b, c) -> crée 4 regroupements
un pour le triplet (a,b,c)
un pour le couple (a,b)
un pour (a)
un pour le total général.
((a,(b,c)) ne ramène alors que 3 trois groupes).
GROUP BY CUBE (a, b, c) => ramène 2 puissance 3 soit 8 groupes possibles :
a, b et c
a, b, tout (c)
a, tout (b), c
a, tout (b), tout(c)
tout (a), b et c
tout (a), b, tout (c)
tout (a), tout (b), c
tout (a), tout (b), tout (c) = total général.
Ces 3 types de regroupement sont bien sûr cumulables.
12. Améliorations du SQL, PL/SQL et nouveaux types de données
12.1. Nouveaux Types
TIMESTAMP : Format de date incluant jusqu'au milliardième de secondes
TIMESTAMP WITH TIME ZONE : TIMESTAMP + décalage en heures de la zone.
TIMESTAMP WITH LOCAL TIME ZONE : TIMESTAMP + décalage en heures et minutes de la zone intégrée dans la date affichée.
INTERVAL YEAR TO MONTH : stocke le nombre d'années et de mois d'une période.
INTERVAL DAY TO SECOND : stocke le nombre de jours, heures, minutes, secondes et fractions de seconde d'une période.
Paramètre statique de base TIME_ZONE :
peut avoir comme valeur soit un nombre d'heures et de minutes, soit un nom de zone.
peut être spécifié à la création de la base ou après avec un ALTER DATABASE.
Heures d'été / d'hiver : géré automatiquement par la base pour TIMESTAMP WITH TIME ZONE et TIMESTAMP WITH LOCAL TIME ZONE (pas pour TIMESTAMP).
La vue V$TIMEZONE_NAMES décrit tous les fuseaux horaires.
12.2. Support de l'Unicode
Seul utilisable pour le national character set.
En UTF-8 (1 à 4 octets) ou UTF-16 (2 * 2 octets).
12.3. Compilation du PL/SQL en mode natif
Nouveaux paramètres d'initialisation pour pouvoir compiler en C :
PLSQL_NATIVE_LIBRARY_DIR : Répertoire de stockage des objets créés par le compilateur.
PLSQL_NATIVE_MAKE_UTILITY : Nom de l'utilitaire Make.
PLSQL_NATIVE_MAKE_FILE_NAME : Chemin complet du Make File.
PLSQL_NATIVE_C_COMPILER : Chemin complet du compilateur C(prend par défaut celui du système d'exploitation).
PLSQL_NATIVE_LINKER : Chemin complet de l'éditeur de liens (linker) (sous UNIX).
PLSQL_COMPILER_FLAG : 'INTERPRETED' ou 'NATIVE' (peut être modifié au cours de la session).
12.4. Amélioration niveau Objet
Héritage complet pour les types SQL.
Combinaisons multiples possibles entre les collections, tables imbriquées (Nested tables) et VARRAY.
Type : FINAL ou NOT FINAL (signifie qu'il y a encore des fils dessous ).
Pouvoir de substitution: une colonne d'un type peut contenir des instances de son type ou de n'importe quel de ses sous-types.
Vues hiérarchiques : du même genre que pour les types et sous-types.
Privilèges système:
UNDER ANY TYPE : permet de créer des sous-types sous des types non finaux.
UNDER ANY VIEW : permet de créer des sous-vues.
WITH HIERARCHY OPTION : Donne (par un GRANT) un privilège objet sur tous ses fils.
SQL*Loader, Import et Export supportent ces nouvelles fonctionnalités.
Possibilité d'évolution des Types d'Objet :
Avant 9i, seul l'ajout de méthodes était autorisé;
Une modification de l'objet est répercutée sur les objets le référençant.
Les attributs et méthodes peuvent être ajoutés, supprimés ou modifiés.
Les types SQL peuvent être modifiés sans être recréés.
13. Haute disponibilité
13.1. Restauration
Pour améliorer le temps de restauration, Oracle ne restaure que les blocs en mémoire qui n'ont pas été écrits sur le disque (il balaye pour cela 2 fois les redo logs).
Un nouveau paramètre dynamique FAST_START_MTTR_TARGET détermine le temps maximal (en secondes: de 0 à 3600) que prendra une restauration (défini par le DBA).
Le changement de ce paramètre induit automatiquement le changement de 2 autres :
FAST_START_IO_TARGET : nombre de blocs de données à récupérer;
LOG_CHECKPOINT_INTERVAL : intervalle de temps maximum pour limiter le nombre d'enregistrements de redo logs à lire.
(Ces 2 paramètres ne peuvent pas être modifiés manuellement).
La vue V$INSTANCE_RECOVERY permet de suivre les points de synchronisation (checkpoints) et leurs impacts sur le temps de restauration.
13.2. Index
De nouveaux types d'index peuvent être reconstruits en ligne :
Index à clé inversée.
Index basé sur une fonction
Index à clé compressée sur les tables normales
Index à clé compressée sur les tables organisées en index.
Une table organisée en index peut être reconstruite en ligne :
Pour améliorer les performances d'un index basé sur un IOT, il stocke chaque entrée de l'index dans la DBA (Data Block Address). Si beaucoup de mises à jour sont intervenues, cette DBA n'est alors plus à jour, pour la reconstruire, il faut lancer en ligne l'ordre suivant :
ALTERINDEX monindex UPDATE BLOCK REFERENCES;
13.3. Tables
Une table peut être réorganisée en ligne si celle-ci contient une clé primaire (Oracle utilise des vues matérialisées pour cela).
Etapes pour réorganiser une table :
Vérifier que la table est réorganisable en ligne avec DBMS_REDEFINITION.Can_Redef_Table.
Créer la table d'intérim qui servira à stocker les mises à jour effectuées lors de la redéfinition.
Réorganiser la table avec DBMS_REDEFINITION.Start_Redef_Table.
Créer les objets et triggers rattachés à la table d'intérim.
Finir la réorganisation avec DBMS_REDEFINITION.Finish_Redef_Table.
Pour synchroniser la table initiale et celle d'intérim, on appelle la procédure DBMS_REDEFINITION.Sync_Interim_Table.
Pour arrêter le traitement en cas d'erreur, on appelle la procédure DBMS_REDEFINITION.Abort_Redef_Table.
Limitations :
colonnes de clés primaires non modifiables.
tables des schémas SYS ou SYSTEM non modifiables.
colonnes de type LONG ou FILE non modifiables.
réorganisation dans le même schéma.
nouvelles colonnes ne peuvent être déclarées NOT NULL qu'après la réorganisation.
13.4. Analyse Validate Structure: Exécutable même pendant l'accès intensif de la table
13.5. Oracle Flashback
Permet de créer une vue de la base à une date située dans le passé.
Peut démarrer à partir d'une date ou d'un numéro SCN.
Seules les transactions commités jusqu'à ce moment sont visibles.
Valable au niveau de la session.
Se base sur les tablespaces d'annulation : plus on veut regarder loin dans le temps, plus ceux ci doivent être importants.
14. Real Application Clusters(9i) (Parallel Server en 8i)
Les ressources utilisées en commun par plusieurs instances sont gérées par le Global Cache Service. Elles peuvent avoir trois états :
Null (N) => non utilisée.
Shared (S) => partagée entre plusieurs instances.
Exclusive (X) => réservée par une seule instance.
Les ressources peuvent être de 2 types :
Local => utilisées par 1 seul serveur.
Global => utilisées par plusieurs serveurs.
Le processus de Cache Fusion permet d'éviter une écriture sur le disque, en créant une copie locale d'un bloc en cache (sur une instance A) sur une autre instance (instance B).
La configuration typique d'un RAC est d'avoir une seule instance active primaire (ACTIVE_INSTANCE_COUNT=1) et une instance secondaire.
Cette instance primaire reçoit toutes les demandes Oracle Net Service et est basculée, en cas de défaillance, sur l'instance B qui devient à son tour, primaire.
Les paramètres d'initialisation à utiliser sont les suivants pour activer un RAC :
GC_FILES_TO_LOCKS : Assigne le Global Cache Service à de multiples blocs.
INSTANCE_NUMBER : Identifiant de l'instance, un numéro par instance, par défaut à 1.
INSTANCE_NAME : nom de l'instance, généralement le nom du SID.
15. Logminer : Améliorations
Oracle LogMiner est un outil permettant de lire, analyser et interpréter le contenu des redo logs.
Une fois lancé avec DBMS_LOGMNR.LogMnr_Start ( ), les résultats apparaissent dans la vue V$LOGMNR_CONTENTS (vide si Logminer n'est pas démarré) avec, entre autres les colonnes :
sql_redo : donne l'ordre SQL exécuté puis stocké dans les fichiers redo.
sql_undo : génère l'ordre inverse à l'ordre SQL utilisé.
Pour afficher la clé primaire d'une table mise à jour, il faut lancer l'ordre suivant :
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
(Si la table ne contient pas de clé primaire, toutes les colonnes de la table sont tracées).
Depuis la 9i, les ordres DDL sont maintenant lisibles avec LogMiner.
Pour extraire le dictionnaire de données, la commande suivante doit être lancée:
DBMS_LOGMNR_D.Build('dictionary.ora','/oracle/dbs',option =>dbms_logmnr_d.store_in_flat_file) (vers un fichier plat)
option => dbms_logmnr_d.store_in_redo_logs) (vers les redo logs).
Nb: Pour extraire vers les fichiers redo, la base doit être en mode Archive Log.
Logminer ne supporte pas les objets suivants :
LONG
Type Objet
Les collections (Varray )
Objet de type REF
Les tables organisées en index (IOTs).
LogMiner Viewer est l'outil graphique qui permet d'effectuer les mêmes opérations mais à partir de Enterprise Manager.
La physical standby database est une copie exacte de la base de données active (primaire) et qui prend le relais si la base primaire ne fonctionne plus. Elle est synchronisée bloc par bloc à la base primaire et est soit montée non ouverte, soit ouverte mais en lecture seule.
Data Guard Broker : interface graphique qui administre une base de données primaire avec ses standby databases associées, et envoie les redo logs sur les autres sites en mode :
synchrone : toute modification est répercutée immédiatement sur la standby => pas de perte de données
asynchrone : modification envoyée avec un délai par l'intermédiaire d'un processus esclave.
(cet outil existe aussi en ligne de commande : DGMGRL
Data Guard Manager : outil de suivi de l'environnement et de la configuration des différentes bases (nodes) de données (primaire et standby).
nécessite d'avoir installé Oracle Management Server (OMS) et les agents sur chacune des bases.
Graceful Switchover : permutation volontaire de la base primaire en base de standby (et réciproquement).
Pour pouvoir exécuter la permutation (switchover), il faut que :
la base de données primaire soit arrêtée proprement (en mode normal, immédiate ou transactionnel).
les redo logs archivés soient disponibles.
les redo logs, datafiles et control files de la base primaire soient disponibles.
La commande SQL à exécuter est :
pour la base primaire :
ALTER DATABASE COMMITTO SWITCHOVER TO PHYSICAL STANDBY
puis faire un shutdown, un start nomount puis un mount standby database.
pour la base de standby :
ALTER DATABASE COMMITTO SWITCHOVER TO PHYSICAL PRIMARY
(Les mêmes commandes sont exécutées de manière transparente à travers l'outil graphique).
L'état de la base est visible avec la vue V$DATABASE et la colonne DATABASE_ROLE (valeur PRIMARY (par défaut) ou STANDBY).
Un nouveau paramètre STANDBY_PRESERVE_NAMES , s'il est positionné à TRUE, implique que si un fichier est créé ou supprimé sur la base primaire, léquivalent sera effectué sur la base de STANDBY.
Le Log Transport Service (indépendant depuis la 9i) copie les fichiers redo de la primaire vers la standby et ce, sous 3 modes :
synchronous data copy : fichier copié par logwriter (LGWR) de manière synchrone.
asynchronous data copy : fichier copié par logwriter (LGWR) de manière asynchrone.
batched data copy : fichier copié de manière traditionnelle (comme 8i) avec le processus ARCH.
Le paramètre Log_Archive_Dest_n (n=1..10): permet de spécifier des paramètres pour la base primaire et les autres bases de type standby.
(Il faut donc positionner au moins 2 paramètres, les résultats sont affichés dans la vue V$ARCHIVE_DEST).
L'écriture des archives logs sur disque peut être :
synchrone : Attribut AFFIRM positionné dans le paramètre Log_Archive_Dest_n.
asynchrone : Attribut NOAFFIRM positionné dans le paramètre Log_Archive_Dest_n.
Pour se protéger d un problème d'écriture des archives logs du primaire vers la standby, il faut utiliser la commande :
ALTER DATABASE SET STANDBY DATABASE PROTECTED
et pour supprimer cette protection :
ALTER DATABASE SET STANDBY DATABASE UNPROTECTED
Log_Gap : délai en minutes des redos sur la base standby avant que ceux-ci soient disponibles (attribut de Log_Archive_Dest_n).
Depuis la 9i, Logwriter écrit à la fois en local et dans les redo logs distants (appelés STANDBY_REDO_LOG).
Et depuis la 9.2, un nouveau mode apparaît, c'est le LOGICAL STANDBY :
la base de secours (standby) est ouverte
les modifications sur la primaire sont écrites sur la standby par le process server de cette dernière, ce qui ne garantit plus une équivalence totale entre les deux bases.
Remerciements
Chaleureux remerciements à Developpez.com, l'équipe SGBD, et particulièrement
Goshiz et Pomalaix.
Responsable bénévole de la rubrique Oracle : Vincent Rogier - Contacter par EMail :