Category Archives: OCP

Tuning des applications

Rédacteur: V. Fenoll & Oracle Doc.

Collecte auto des stats GATHER_STATS_JOB

Job créé automatiquement lors de la création de la base
Il appelle la procédure GATHER_DATABASE_STATS_JOB_PROC qui affecte des priorités aux objets nécessitant des stats.
La collecte auto n’est pas prise en charge pour les tables externes, les statistiques systèmes et les objets fixes.

Optimisation des interrogations OPTIMIZER_DYNAMIC_SAMPLING = 2

Il est préférable de ne pas calculer de stats sur les objets très MAJ et d’augmenter ce paramètre à 4 ou 5. Quelquefois utilisé par l’optimiseur conjointement aux stats s’il pense que c’est utile..
PGA_AGREGATE_TARGET = AUTO par défaut maintenant
Nouvelle colonne TIME dans PLAN_TABLE

Statistiques sur les objets du dictionnaire avec DBMS_STATS

GATHER_FIXED_OBJETS_STATS  et     GATHER_DICTIONARY_STATS
Ou utiliser GATHER_DATABASE_STATS ( …    GATHER_FIXED=’TRUE’  et
GATHER_SYS = ‘true’)

Méthode recommandée pour le calcul des stats

DBMS_STATS (options => ‘GATHER AUTO’)

Diverses MAJ statistiques

DBMS_STATS comporte de nouvelles valeurs :
GRANULARITY     => AUTO (default)
=> GLOBAL AND PARTITION
DEGREE        => AUTO_DEGREE

Verrouiller les stats avec DBMS_STATS

.LOCK_[TABLES | SCHEMA]
.UNLOCK_[TABLES | SCHEMA]
select stattype_locked from dba_tab_statistics

Divers DBMS_STATS

FORCE        => ‘true’
Pour forcer la suppression/remplacement des statistiques même si elles sont verrouillées.

Historique des stats

Les anciennes version des stats sont enregistrées.
DBA_OPTSTAT_OPERATIONS pour connaître l’heure de début et de fin de toutes les opérations
DBA_TAB_STATS_HISTORY pour connaître l’historique des modifications apportées aux stats au cours des 31 derniers jours.

Gérer l’historique des statistiques

Pour restaurer DBMS_STATS.RESTORE_[TABLE | SCHEMA | DATABASE]_STATS en utilisant un timestamp.

.RESTORE_FIXED_OBJECTS_STATS requiert le privilège ANALYZE ANY DICTIONARY
.RESTORE_DICTIONARY_STATS requiert le privilège ANALYZE ANY ou ANALYZE ANY DICTIONARY
.RESTORE_SYSTEM_STATS

Configuration / récupération de la période de conservation:
.ALTER_STATS_HISTORY_RETENTION
.GET_STATS_HISTORY_RETENTION

Purge manuelle des stats :
.PURGE_STATS

Gérer les stats dans EM

Page Manage optimizer Statistics

Modification de la surveillance LMD des tables

Le paramètre STATISTICS_LEVEL est le commutateur de surveillance (MONITORING) des tables. Avec TYPICAL et ALL toutes les tables sont monitorées.

ALTER TABLE MONITORING devient obsolète.

Obsolescence de l’optimiseur RBO

Les valeurs CHOOSE et RULE ne sont plus prises en charge pour OPTIMIZER_MODE.
ALL_ROWS est la valeur par défaut pour  OPTIMIZER_MODE.

Automatic SQL Tuning : Présentation

Automatic SQL Tuning est proposé à l’utilisateur par l’intermédiaire de la fonction de conseil STA (SQL Tuning Advisor).

STA remplace le réglage tuning manuel des instructions SQL.

Lorsqu’il est appelé en mode réglage, l’optimiseur est nommé optimiseur ATO (Automatic Tuning Optimizer). Le réglage effectué par ATO est appelé Automatic SQL Tuning .

La tâche qui consiste à identifier les instructions SQL à forte consomamtion de ressources a été automatisée au moyen du moniteur ADDM (Automatic Database Diagnostic Monitor).

STA : Présentation

STA (SQL Tuning Advisor) appelle l’optimiseur ATO pour effectuer 4 types d’analyses :
–    Analyse des stats
–    Profiling des instructions SQL
–    Analyse de chemin d’accès  (proposition de création / maj index)
–    Analyse de structure SQL (modification syntaxique ou sémantique d’une requête)

STA accepte une ou plusieurs instructions SQL en entrée :
–    Requête spécifique
–    Cache
–    AWR
–    Charge globale personnalisée

STA créé une tâche de réglage sous réserve du privilège ADVISOR.

Option LIMITED : vérification des stats, chemins d’accès et structure SQL. Pas de profil généré
Option COMPREHENSIVE : appelle également l’optimiseur en mode Profiling.

Analyse des stats

Recherche de stats obsolètes
Génération de stats auxiliaires

Profiling des instructions SQL

Au cours du profiling, ATO effectue des vérifications afin de valider ses propres estimations. La validation consiste à appliquer les prédicats à un échantillon de données ou à exécuter un fragment de l’instruction SQL.

ATO utilise l’historique d’exécution de l’instruction SQL.

ATO construit un profil SQL s’il a généré des infos auxiliaires puis il recommande l’acceptation du profil généré afin de l’activer.

Le profil est stocké dans le schéma SYS. Le plan correspondant n’est pas gelé.

STA   ATO   Profil   Dict   User

Analyse de chemin d’accès

Toute recommandation est spécifique à l’instruction SQL réglée.
L’analyse de chemin d’accès génère les recommandations suivantes :
–    Créer de nouveaux index
–    Exécuter SAA (SQL Access Advisor)

Analyse de structure SQL

Permet de détecter :
–    Utilisation de NOT IN à la place de NOT EXIST
–    Utilisation de UNION à la place de UNION ALL
–    L’utilisation de prédicats qui ne permettent pas d’utiliser les index
–    Des erreurs de conception (e.g produits cartésiens)

Package DBMS_TUNE

.create_tuning_task
.execute_tuning_task
.report_tuning_task
.accept_sql_profile

Argument FORCE_MATCH =’true’ permet de « binder » les instructions SQL.

Pour créer un profil : CREATE ANY SQL PROFILE

Import/export de profils SQL ou de STS (SQL Tuning Sets)

Utile d’une base de test vers une base de prod.

–    Création d’une table intermédiaire : CREATE_STGTAB_SQLPROF
–    Exécuter la proc : PACK_STGTAB_SQLPROF
–    Déplacer la table intermédiaire
–    Sur la cible, exécuter la proc : UNPACK_STGTAB_SQLPROF

Catégorie de réglage

Paramètre d’initialisation SQLTUNE_CATEGORY = nom de la catégorie du profil SQL utilisé.
Par défaut, la fonction de conseil STA applique automatiquement les profils SQL de cette catégorie.

Chaque session peut changer de catégorie en modifiant de manière dynamique ce paramètre.

Présentation SAA

SAA = SQL Access Advisor

Recommande la création, mise à jour ou suppression :
–    d’index (1)
–    de vue matérialisées (2)
–    de journaux de vue matérialisées

EM propose une analyse de (1) ou (2) ou (1 et 2)

Ne recommande pas de suppression pour les charges globales partielles
Optimise les vues pour une utilisation mex de la réécriture et de rafraichissement Fast.
Combine des index similaires en index uniques

SAA accepte une ou plusieurs instructions SQL en entrée :
–    Une source hypothétique
–    Cache V$SQL
–    STS
–    Charge globale personnalisée

SAA fournit également des filtres de charge ; e.g les 30 instructions les plus consommatrices, certaines tables ou utilisateurs

Définition de la charge globale pour SAA

Permet par la suite de générer des recommandations (contrairement à une charge partielle).

Les sources sont les suivantes :
–    current and recent sql activity
–    import workload from SQL repository (pour désigner un STS)
–    user defined workload : import SQL from a table or view
–    hypothetical workload: fourniture d’un schema

Options relatives aux recommendations

Dans les “Advanced options”:
–    Workload Volatility / Scope : pour favoriser les operations en lecture seule ou tenir compte de la volatilité des objets lors des recommandations
–    Il est possible de personnaliser les recommandations générées en classant par « Optimizer cost, buffer gets, … »

Flux de procédure pour SAA

Etape 1 : Créer et gérer les tâches et les données (utilise objet workload + 1 tâche)
CREATE[DELETE]_TASK
CREATE[DELETE]_SQLWKLD
Etape 2 : Préparer les tâches (utilise charge globale et paramètres d’accès)
Etape 3 : Collecter et gérer la charge globale  (utilise objet workload)
Etape 4 : Préparer et analyser les données (utilise objets workload)

La procédure DBMS_ADVISOR.QUICK_TUNE est un raccourci qui effectue toutes les opérations nécessaires pour analyser une instruction SQL unique.

Resource Manager

Rédacteur: V. Fenoll Administrateur de bases de données Oracle à Montreal & Oracle Documentation

DBMS_RESOURCE_MANAGER (RM)

Définir des délais d’inactivité

GUI : « Edit Resource Plan »

Utiliser l’onglet « Idle Time » pour définir les délais d’inactivité max pour un plan d’allocation de ressrouces. :
.CREATE_PLAN_DIRECTIVE
(max_idle_time =>600, max_idle_blocker_time => 300)

max_idle_time dépassé : PMON force la fermeture de la session (il vérifie 1/min)
max_idle_blocker_time: durée (également en seconde) pendant laquelle une session inactive peut bloquer une autre session.

Renvoi vers le groupe de consommateurs initial à la fin d’un appel

.CREATE_PLAN_DIRECTIVE
(switch_group  => ‘longrun_group’,
switch_time_in_call => 600)
Définition d’une horloge sur appel avant exécution d’une action, laquelle est dictée par switch_group. A la fin de l’appel principal, RM renvoie automatiquement l’utilisateur vers le groupe d’origine.

Créer un mapping

.SET_CONSUMER_GROUP_MAPPING
(DBMS_RESOURCE_MANAGER.ORACLE_USER,
‘scott’, ‘OLTP_GROUP’) ;
Affectation auto de groupe de conso en définissant des mappings entre les attributs de sessio et les groupes de conso.
Une session déjà connectée peut être affectée à un autre groupe de conso sur la base de ses attributs d’exécution.

Affecter des priorités

.SET_CONSUMER_GROUP_MAPPING_PRI
(EXPLICIT => 1,         –highest
ORACLE_USER => 5,
CLIENT_MACHINE => 8,
…)
Utilisé lorsqu’il y a des ambiguïtés lors du mapping.

Mises à jour du package RM

.CREATE_CONSUMER_GROUP
(cpu_mth => ‘RUN-TO-COMPLETION’)
Nouvelle méthode d’allocation de ressources: les sessions présentant la durée d’activité la plus importante sont planifiées avant les autres sessions.
Avant 10g la seule méthode est ‘round robin’

.CREATE_PLAN
(cpu_mth => ‘RATIO’)
+
.CREATE_PLAN_DIRECTIVE
(GROUP_OR_SUBPLAN => ‘GOLD’, CPU_P1 =>10 …)
.CREATE_PLAN_DIRECTIVE
(GROUP_OR_SUBPLAN => ‘SILVER’, CPU_P1 =>6 …)
.CREATE_PLAN_DIRECTIVE
(GROUP_OR_SUBPLAN => ‘SILVER’, CPU_P1 =>4 …)
Nouvelle méthode d’allocation de ressources: permet d’indiquer la quantité de CPU affectée à chaque groupe ou sous-plan. Dans l’exemple SILVER = 4 vingtième.

Pour surveiller Resource Manager à l’aide EM :
Dans l’onglet Administration, cliquer sur le lien « Monitor »

Nouvelles vues V$

V$RSRC_SESSION_INFO
Pour consulter les statistiques RM par session

V$RSRC_PLAN_HISTORY
Historique des plans d’allocation activés, désactivés et modifiés

V$RSRC_CONS_GROUP_HISTORY
Historique des stats sur un groupe de consommateurs

V$BLOCKING_QUIESCE
Indique si une session bloque ou risque de bloquer un « quiesce »alors qu’elle ne fait pas partie du groupe de consommateurs de ressources SYS_GROUP

Scheduler

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

Créer un programme

.CREATE_PROGRAM

C’est une fonction optionnelle. Elle permet de modifier la planification d’un travail sans avoir à recréer le bloc PL*SQL. On peut également utiliser des arguments.

Grant : CREATE [ANY] JOB

Par défaut un prog est désactivé sauf si enabled => TRUE.

L’action associée peut être : une procédure, un exécutable, un bloc PL*SQL

Créer une planification

.CREATE_SCHEDULE

Planifier des exécutions répétées : repeat_interval => « expression de planification »

e.g ‘FREQ=HOURLY ; INTERVAL=4’

Une « expression de planification » comporte 3 parties :

–         Fréquence (obligatoire)

–         Intervalle (facultatif)

–         Spécificateurs

e.g FREQ=MONTHLY ; BYDAY=MON, TU3E, TUE ; BYSETPOS=-1

Doc: 11.2 pour plus d’exemples

Créer un travail

.CREATE_JOB

(job_name, job_type, job_action)

Les paramètres de planif peuvent également être définis lors de la création d’un travail (start_date, repeat_interval)

Par défaut un job est créé dans le schéma actuel sauf si son nom utilise un préfixe de schéma.

Le propriétaire est l’utilisateur (le schéma) alors que le créateur peut être différent.

Job_type => PLSQL_BLOCK  |  STORED_PROCEDURE  |  EXECUTABLE

Si aucun intervalle de répétition n’est indique, le job s’exécute une seule fois.

Privilèges

CREATE JOB : créer un travail, une planification ou un programme dans son schéma

CREATE EXTERNAL JOB : créer un travail qui exécute un programme externe

MANAGE SCHEDULER : Créer des fenêtres, des classes ou des groupes de fenêtres. Démarrer et arrêter des fenêtres prématurément.

SCHEDULER_ADMIN : il a reçu tous les privilèges systèmes, il fait partie du rôle DBA

Pour accorder à Scott le droit d’utiliser mon programme CALC_STATS dans son travail :

GRANT           EXECUTE ON CALC_STATS TO SCOTT [WITH GRANT OPTION]

EXECUTE ANY PROGRAM (Utiliser tous les programmes)

ALTER            “           “           (modifier..)

Cependant ces derniers privilèges ne permettent pas de modifier les attributs (name, type, action, arguments).

Les classes de travail, les fenêtres et les groupes de fenêtres sont créées dans le schéma SYS.

Pour affecter un travail à une classe de travail spécifique, il faut disposer du privilège EXECUTE pour la classe de travail ou du privilège système EXECUTE ANY CLASS.

Gérer les composants du planificateur

.ENABLE (HR.CALC_STATS)

Ne peut pas être utilisé pour les classes de travail ou les planifications

.DISABLE

.RUN_JOB

.STOP_JOB

.DROP_JOB

Pour une planification:

.SET_ATTRIBUTE

.SET_ATTRIBUTE_NULL (pour affecter la valeur NULL à un attribut)

Lors de la définition de l’attribut, si le composant est activé, il est désactivé avant sa modification, puis réactivé.

.DROP_SCHEDULE (‘schedule1’, ‘schedule2’)

Afficher les attributs d’un composant

*_SCHEDULER_JOBS

*_SCHEDULER_PROGRAMS

[ALL | DBA] _SCHEDULER_SCHEDULES

[ALL | DBA] _SCHEDULER_WINDOWS

Afficher les détails de l’exécution d’un travail

DBA_SCHEDULER_JOB_RUN_DETAILS

Elle comporte une ligne pour chaque instance d’un travail

Afficher les journaux des travaux

DBA_SCHEDULER_JOB_LOG

Elle comporte une ligne pour chaque opération ou modification d’un travail.

Des entrées sont créées dans cette vue si la valeur LOGGING_FULL ou LOGGINS_RUNS a été affectée au paramètre logging_level

Le créateur d’un travail peut uniquement activer une journalisation plus étendue pour un travail, mais pas moins étendue.

Gestion des fenêtres

.CREATE_WINDOW

Une seule fenêtre peut être active à un instant donné

e.g 11.59

Pour une fenêtre particulière, plusieurs classes de travail peuvent être en cours d’exécution, chacune avec sa propre priorité.

Deux niveaux d’affectation de priorité pour les travaux :

–         Le niveau CLASSE ; à l’aide de plans d’allocation de ressources (effectué sur la base de l’allocation des ressources)

–         Le niveau TRAVAIL ; avec l’attribut de priorité du travail

Les niveaux de priorité ne sont importants que lorsque 2 travaux de la même classe ont supposés démarrer en même temps. Le travail avec la priorité la plus élevée démarre en premier.

.SET_ATTRIBUTE (‘job2’, attribute =>’job_priority’, value => 2)

Pour visualiser les priorités:

Select job_name, job_priority from DBA_SCHEDULER_JOBS;

Créer une classe de travail

.CREATE_JOB_CLASS

Requiert MANAGE_SCHEDULER.

Dans DB Control, page JOBCLASS pour affecter une classe et un groupe de consommateur de ressources à un travail.

Classe de travail par défaut : DEFAULT_JOB_CLASS

Groupe de consommateur de ressources par défaut : DEFAULT_CONSUMER_GROUP

Space Management

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

Les informations collectées sont stockées dans le référentiel AWR.

Surveillance espace tablespaces

TS TEMP : le seuil correspond à l’espace actuellement utilisé par les sessions

TS UNDO : le seuil correspond à l’espace utilisé par les extents actifs et n’ayant pas expiré.

Fichiers en auto-extent : seuil basé sur la taille max du fichier (ou taille max OS)

Le processus MMON checks les violations et retours à la normale toutes les 10min.

Seuils par défaut : 85% et  97%

Pour modifier les seuils : Lien Manage Metrics.

DBMS_SERVER_ALERT.SET_THRESHOLD (

dbms_server_alert.tablespace_pct_full,

…)

DBMS_SERVER_ALERT.GET_THRESHOLD (

Surveillances UNDO TS

Alerte d’avertissement des interrogations longues informe que:

–         rétention trop courte

–         TS sous-dimensionné

Un max d’une alerte par 24h est généré.

Récupérer l’espace des segments

ALTER … SHRINK SPACE [CASCADE]

ALTER TABLE toto MODIFY LOB(colonne1) (SHRINK SPACE)

Améliore les performances :

–         FTS : blocs moins nombreux et plus dance J

–         Accès aux index : réduction des E/Ssur les balayages des ROWID par intervalle grâce à une arborescence plus compacte.

Renforce également l’efficacité de l’utilisation de l’espace.

C’est une opération ONLINE et « sur place » pour les segments qui résident dans des TS ASSM.

« Row movement » doit être activé pour les tables en heap (par défaut disabled) :

ALTER TABLE toto ENABLE ROW MOVEMENT;

Exclusions :

–         tables clusters

–         tables avec LONG

–         tables avec vues matérialisées basées sur ROWID ou « on commit »

–         Mapping tables de type IOT

–         Table contenant de des function based index

Processus interne :

–         ALTER TABLE toto SHRINK SPACE COMPACT ;   (operation ONLINE)

–         et ensuite ALTER TABLE toto SHRINK SPACE;       (attention : invalide les curseurs).

Il est possible de ne demander qu’un compact mais le HWM n’est pas ajusté.

Segment Advisor

Détermine s’il est souhaitable de soumettre un objet à une opération de récupération d’espace (Shrink segment). Détecte également les lignes migrées suite à des updates.

Segment advisor peut être appelé au niveau segment ou au niveau tablespace. Elle est exécutée de manière automatique à chaque ouverture de fenêtre de maintenance.

Pour les tables organisées « HEAP », activer préalablement « row movement ».

Privilège : ADVISOR

Remarque : DBMS_SPACE.ASA_RECOMMANDATIONS pour générer les recommandations.

Space usage Trend

Cet état est utilisé par Segment Advisor. Les stats d’utilisation de l’espace sont collectées dans AWR.

Estimation des ressources d’un segment

Dans la page de création de tables, il est possible d’estimer la taille que prendra cette table (en fournissant le nombre estimé de lignes).

Page Undo Management

En plus de mettre à jour toutes les informations concernant la gestion des UNDO, permet également d’accéder à l’Undo Advisor pour définir la période de conservation des données et analyser l’impact des nouveaux paramètres.

Le graphique Undo Advisor affiche le calcul de l’espace nécessaire basé sur undo_retention..

Undo Advisor analyse également les éventuels ORA-01555.

Réaction rapide

En 10g, Oracle va plus vite pour déterminer le nombre de RS à mettre en ligne lors du démarrage de l’instance ou lors de permutation de TS UNDO ; il utilise pour cela le référentiel AWR.

Cluster hash trié

Nouvelle structure de données utilisée pour stocker les données triées selon les colonnes de clé non primaire.

Utilisé pour garantir que les lignes sont renvoyées par les interrogations sans tri des données.

La clause « order by » n’est pas obligatoire.

Avantages : évite le temps cpu et la mémoire privée nécessaires pour le tri des données.

CREATE CLUSTER clus1

( origin  number  , ß clé de cluster

call_timestamp  number SORT, ß clé de tri

call_duration number SORT) ß clé de tri

hashkey 10000

single table hash is origin

size 50;


CREATE TABLE calls

( origin  number

call_timestamp  number,

call_duration number ,

other_info varchar2(100))

CLUSTER clus1 (

origin, call_timestamp, call_duration) ;

Dans l’exemple, les appels sont traités selon l’ordre “premier entré, premier sorti”.

Hashkey représente le nombre de numéros de téléphones distincts et size représente le nombre d’octets utilisé pour stocker les métadonnées de chaque clé de cluster (déterminé par la taille des colonnes de clés de cluster).

Il est possible de créer des index sur ce type d’objet.

L’insertion de lignes selon l’ordre des clés de tri est plus rapide.

VLDB Management

Rédacteur: Vincent Fenoll DBA Oracle à Montreal & Oracle Doc.

BIGFiles : Présentation

Un Tablespace Bigfile (BFT) contient un fichier unique ; taille max entre 8 et 128To.
Toutes les opérations que l’on pouvait effectuer sur les DF peuvent maintenant être effectuées sur les TS (ALTER tablespace ____  resize ___) ; c’est ce qu’on appelle la transparence avec les fichiers de données.

Les BFT simplifient donc la gestion de l’espace pour les grosses bases et permet une certaine.

Les BFT sont pris en charge pour tous les TS gérés localement et avec bitmaps.

Il faut éviter de créer des BFT sur un système ne prenant pas en charge le stripping.

La taille des extents est également définie avec AUTOALLOCATE ou avec UNIFORM.

La définition de leur taille est importante car de trop nombreux extents peuvent ralentir les opérations de type DDL

Pour créer un BFT dans EM cocher la case «Use Bigfile ».

Le type de TS par défaut, BIGFILE ou SMALLFILE est stocké de manière persistante dans le dict. Ces mots clé sont utilisés dans la clause datafile du CREATE TS.

CREATE DATABASE test

SET DEFAULT BIGFILE TABLESPACE

Datafile ‘________’ size 1G

SMALLFILE DEFAULT TEMPORARY TS temp

SMALLFILE UNDO TS undo datafile ‘__’;

ALTER DB SET DEFAULT BIGFILE TABLESPACE;

ALTER TABLESPACE users AUTOEXTEND ON;

Pour la migration d’un TS vers l’un ou l’autre, il faut utiliser soit Datapump ou « ALTER TABLE MOVE » ou « CREATE TABLE AS SELECT ».

Bigfiles; dictionnaire de données

Ajout de la colonne BIGFILE aux vues: DBA_TABLESPACES et V$TABLESPACE.

Ajout d’une ligne dans la vue database_properties ;

where property_name=’DEFAULT_TBS_TYPE’

Bigfiles; dbverify

Avec les BFT il est impossible de lancer en parallèle des instances de dbverify sauf en mentionnant explicitement les adresses de blocs de début et de fin.

Bigfiles; dbms_utility

Les fonctions DATA_BLOCK_ADDRESS_FILE et DATA_BLOCK_ADDRESS_BLOCK ne doivent pas être utilisées avec les BFT.

 

Ces fonctions renvoient le numéro de fichier et de block à partir d’une structure d’adresse du bloc de données.

Le numéro de fichier est toujours 1024 pour les BFT et l’adresse du bloc représente le numéro du bloc.

Bigfiles ; ROWID

Pour les BFT il n’est pas nécessaire d’inclure le numéro de fichier (FFF) dans les ROWID

SMALLFILE :             000000            FFF BBBBBB              RRR

BIGFILE :                   000000 LLL LLLLLLL             RRR

Avec,

000000 numéro d’objet

FFF numéro de fichier relatif

BBBBBBB numéro de bloc de données

RRR numéro de ligne

LLL numéro de bloc encodé

Pour les BFT, les numéros de blocs sont relatifs par rapport au tablespace et sont uniques dans un tablespace.

Il faut toujours utiliser DBMS_ROWID pour obtenir les composantes des ROW ID étendus

Groupes de TS temporaires

Regroupe plusieurs TS temporaires. Il est créé implicitement lorsque le premier TS lui est affecté et est supprimé lors de la suppression du dernier TS TEMP.

Il a le même espace de nom que les TS ; par conséquent il ne peut pas porter un nom identique à un TS.

Avantages :

–         Permet d’utiliser plusieurs TS TEMP dans plusieurs sessions

–         Permet aux processus esclaves d’un opération en parallèle d’utiliser plusieurs TS TEMP

–         Permet d’indiquer plusieurs TS TEMP par défaut au niveau base de données

Dans EM : « Temporary TS Groups ».

CREATE TEMPORARY TABLESPACE temp1 ________________

TABLESPACE GROUP group1 ;

CREATE TEMPORARY TABLESPACE temp1 ________________

TABLESPACE GROUP ‘’;

à affecté à aucun groupe, équivaut à la syntaxe historique.
ALTER TABLESPACE temp1 GROUP group2 ;

ALTER TABLESPACE temp1 GROUP ‘’;  (dissociation)

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE group2;

CREATE USER __________ TEMPORARY TABLESPACE group2;

Un TS temp ou un groupe de TS temp ne peut être supprimé que s’il ne fait plus partie de la liste des TS ou group par défaut.

Nouvelle vue : DBA_TABLESPACE_GROUPS

Partitions

EM prend en charge la création complète des tables partitionnées ainsi que leur maintenance.

Améliorations IOT partitionnées

Nouvelles options prises en charge :

–         Par liste de valeurs (avant juste par intervalle)

–         Maintenance des index globaux pour les IOT partitionnées ; quelque soit les opérations de maintenance effectuées sur les partitions les index restent USABLE

–         Index bitmap locaux partitionnés

–         Les colonnes LOB sont prises en charge dans tous les types de tables IOT partitionnées.

Améliorations index partitionnés locaux

Dans les versions antérieures les opérations de maintenance effectuées sur les partitions rendaient les index UNUSABLE (add, split, merge, move), en outre, les partitions d’index locales associées étaient placées dans le TS par défaut ou dans le même TS.

Avec 10g, nouvelle clause UPDATE INDEXES pour indiquer les attributs de stockage et pour les reconstruire automatiquement.

ALTER TABLE t1 MOVE PARTITION p3 TABLESPACE usr

UPDATE INDEXES (___________ TABLESPACE exemple)

Cette fonctionnalité augmente la disponibilité des données

Ignorer les index UNUSABLE

SKIP_UNUSABLE_INDEXES est maintenant dynamique, valeur par défaut est TRUE.

Par contre il faut surveiller DBA_IND_PARTITIONS et les nouvelles entrées de l’Alert.log.

Ce paramètre ne désactive pas les erreurs remontées pour les index uniques (sinon pb d’intégrité référentielle).

Index globaux partitionnés par hashage

C’est une nouveauté (avant juste par plage).

L’optimiseur procède à la sélection des partitions avec les prédicats « IN (__,__,__ » ou « d’égalité ».

Cette nouvelle méthode de partitionnement améliore les perf des index au cours d’insertion en parallèle de numéros de séquence qui se suivent ; permet de réduire la contention et le déséquilibre du b-tree à droite (dans ce cas de figure ce sont les mêmes feuilles d’index qui sont mises à jour en même temps) .

Les avantages sont expliqués en détail P13-37 (complexe).

Avec le hashage, la contention est répartie sur le nombre de partitions définies car les numéros de séquences sont répartis sur toutes les partitions

Les interrogations les performances sont égales avec les index non partitionnés sauf si on utilise le hint /*+ PARALLEL_INDEX(indx1) */

CREATE INDEX _____on t1(order_id)   GLOBAL

PARTITION BY HASH (order_id)  (

partition p1 tablespace t1

partition p2 tablespace t2);

ou

CREATE INDEX _____on t1(order_id)   GLOBAL

PARTITION BY HASH (order_id)  (

PARTITIONS 4

STORE IN (t1, t2);

Ajouter une partition :

ALTER INDEX indx1 ADD PARTITION p4 TABLESPACE t4 PARALLEL ;

Réduire le nombre de partitions :

ALTER INDEX indx1 COALESCE PARTITION PARALLEL ;

Opérations non prises en charge :

ALTER TABLE SPLIT INDEX PARTITION

ALTER TABLE MERGE INDEX PARTITIONS

ALTER INDEX REBUILD

ALTER INDEX MODIFY PARTITION

Index bitmaps: Améliorations

Ils offrent de meilleures performances et sont moins sujets à fragmentation lorsque de nombreuses opérations LMD impliquant une seule ligne sont effectuées.

Mais il faut respecter COMPATIBLE >=10.0.0.0.

Il est fortement conseillé de reconstruire les index bitmaps après une migration en 10g.

Journalisation des erreurs LMD

(avant) L’abandon et le rollback d’opérations LMD en masse dont l’exécution est longue représente une perte de temps.

Leur journalisation permet de poursuivre le traitement de ces opérations : les erreurs sont consignées dans une table de journalisation des erreurs (comme pour SQL*Loader).

Créer la table de journalisation des erreurs :

exec DBMS_ERRLOG.CREATE_ERROR_LOG(‘table_a_charger’, ‘errlog’)

INSERT INTO___ SELECT ___

LOG ERRORS INTO errlog (‘nom_opération’)  REJECT LIMIT 10;

Remarque: dans les opérations en parallèle, la limite de rejet est appliqué par processus esclave.

La table de journalisation des erreurs est constituée d’un nombre fixe de colonnes d’information, suivies d’un nombre variable de colonnes contenant les valeurs de données issues de la ligne en erreur.

La journalisation s’applique aux cas suivants:

–         valeurs trop grandes

–         contraintes (non différées)

–         erreurs générées par triggers

–         conversions de type

–         mapping de partitions

Ne sont pas prises en charges :

–         Les colonnes LOB, LONG, BFILE, ADT (Abstract Data Type)*

–         Contraintes différées

–         Manque d’espace

–         /*+ direct */

–         Violation de contraintes uniques