PROSIT 24 Nom du PROSIT => Verrouillage et segment d

publicité
PROSIT 24
Nom du PROSIT =>
Thème ou sujet du Prosit
Rédacteur
Verrouillage et segment d’annulation Oracle
Oracle
Monceret Nicolas
**MOTS CLEFS / A DEFINIR
Verrouillage explicite de table :
Un lock permet d'interdire l'accès, pour une personne, à une information car une autre personne à l'exclusivité (jusqu'à
la fin de la transaction). Il existe plusieurs types de verrous (c'est le mot français pour lock).
Segment d’annulation :
Un rollback segment est un segment particulier qui sert à stocker l'image avant modification des données.
Segment d’annulation system :
Lorsque la base de données est créée, le segment de rollback SYSTEM est créé dans le tablespace SYSTEM. Le
segment de rollback SYSTEM est utilisé pour enregistrer les modifications apportées dans le tablespace SYSTEM.
Transaction :
Une transaction est un ensemble cohérent de modifications faites sur les données. Une transaction est soit entièrement
annulée (ordre SQL ROLLBACK), soit entièrement validée (ordre SQL COMMIT).
Tant qu'il n'y a pas eu COMMIT, seul l'utilisateur courant voit ses mises à jour.
Une transaction débute lorsque l'on se connecte à la base (en début de session donc) ou lorsque la transaction
précédente se termine.
Les COMMIT et ROLLBACK peuvent être implicites.
COMMIT : Lorsqu'on envoie un ordre SQL de création ou modification de table par exemple, ou plus généralement
tout ordre du langage de définition de données.
ROLLBACK : en cas d'interruption anormale du traitement ou d'erreur.
Différent type de transaction :
Transactions imbriquées :
Ce type de transaction intervient dans des applications dans lesquelles une opération comprend l'exécution de
plusieurs transactions élémentaires sur des bases de données différentes. Chaque transaction élémentaire reste
courte, mais l'ensemble de ces transactions pouvant avoir lieu durant plusieurs journées de travail, l'opération
n'est finalement validée que si l'ensemble des transactions élémentaires l'est aussi.
Transactions longues (transactions de conception) :
Les transactions dans des environnements de conception peuvent manipuler un grand nombre d'objets
complexes et peuvent avoir lieu sur de longues périodes de temps, de l'ordre de plusieurs jours.
Tnsnames.ora :
résolution locale via tnsnames.ora
Ce fichier doit se trouver sur le client, dans le sous répertoire ADMIN
- soit du répertoire ORACLE_HOME/network
- soit du répertoire ORACLE_HOME/net80 suivant les versions.
Il doit préciser essentiellement le protocole utilisé, le nom ou l'adresse IP de la machine cible, le cas échéant (TCP/IP)
: le port d'écoute du serveur (1521 ou 1525 par défaut) et l'identifiant de la base sur le serveur (ORACLE_SID).
Ces paramètres doivent être STRICTEMENT identique à ceux précisés dans le fichier de configuration du serveur :
LISTENER.ORA
exemple de fichier TNSNAMES.ORA
################
# Filename......: tnsnames.ora
# Client Profile: sample
# Date..........: 09-DEC-93 11:47:33
################
info = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = cg13.tcp)
(PROTOCOL = TCP) (Host = docu) (Port = 1521)))
(CONNECT_DATA = (SID = INFUN)))
test = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = cg13.tcp)
(PROTOCOL = TCP) (Host = dsidev) (Port = 1521)))
(CONNECT_DATA = (SID = TEST)))
devel = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = cg13.tcp)
(PROTOCOL = TCP) (Host = dsidev) (Port = 1521)))
(CONNECT_DATA = (SID = DEVEL)))
...
ici le premier ALIAS : INFO pointe sur la base
- d'ORACLE_SID : INFUN,
- sur la machine : DOCU,
- via le protocole : TCP/IP,
- listener sur le port : 1521
on voit également qu'il y a 2 bases accessibles TEST et DEVEL sur la même machine dsidev...
Verrouillage de table
Un lock permet d'interdire l'accès, pour une personne, à une information car une autre personne à l'exclusivité (jusqu'à
la fin de la transaction). Il existe plusieurs types de verrous (c'est le mot français pour lock).
Exclusive Locks : S'il est placé sur une ligne, par exemple, tout autre utilisateur ne pourra utiliser une requête
nécessitant de placer un verrou. Par contre, une requête SELECT (n'en nécessitant pas) pourra consulter l'information.
Share lock : moins restrictif, ce verrou permet aux autres utilisateurs de placer aussi un share lock sur l'information.
Par contre on ne pourra plus y placer un exclusif.
Un verrou peut se placer sur différents éléments : ligne, table.
Quand une requête DML, autre qu'un SELECT, attaque une ligne, un verrou exclusif est placé sur la ligne. Un verrou
share est aussi placé sur la table pour prévenir une commande DDL destructive. Il vous est aussi possible de placer des
verrous avec un SELECT. FOR UPDATE, en vue de bloquer des informations pour les modifier dans les requêtes
ultérieures.
Les verrous sont supprimés lors de la fin de la transaction (COMMIT) ou lors d'un rollback (on solutionne ainsi les
DEAD-LOCK).
Rollback segment
Un rollback segment est un segment particulier qui sert à stocker l'image avant modification des données. En d'autres
termes dès qu'une modification est demandée par l'utilisateur (UPDATE, INSERT ou DELETE) avant d'être réalisée
une image des données initiale est sauvegardée dans les RBS.
Dès que la transaction est terminée (explicitement ou implicitement) les RBS sont libérés (extents désalloués).
Gestion des Rollback Segments :
Il existe un Rollback segment par défaut obligatoire, et se trouve dans le tablespace SYSTEM.
Une description complète des RBS est disponible dans la vue DBA_ROLLBACK_SEGS du dictionnaire de données...
De la même façon qu'il est judicieux d'avoir plusieurs tablespaces pour des raisons de répartitions de charge, il est
vivement conseillé d'avoir plusieurs RBS dans des tablespaces différents (jusqu'à qq dizaines). Ils seront en général de
tailles équivalentes.
Ici on crée 4 RBS répartis dans 2 tablespaces (et donc 2 fichiers) différents.
SQL>
SQL>
SQL>
SQL>
CREATE
CREATE
CREATE
CREATE
ROLLBACK_SEGMENT
ROLLBACK_SEGMENT
ROLLBACK_SEGMENT
ROLLBACK_SEGMENT
RBS1
RBS2
RBS3
RBS4
tablespace
tablespace
tablespace
tablespace
TBS_RBS1;
TBS_RBS1;
TBS_RBS2;
TBS_RBS2;
La liste des RBS en ligne (sauf SYSTEM qui est obligatoire et par défaut) est en général spécifiée dans le fichier de
démarrage init.ora.
Affectation des transactions aux Rollbacks Segments :
Cette affectation se fait quasiment de manière aléatoire, en fait une nouvelle transaction alloue un extent dans un
nouveau RBS (le suivant dans la liste des RBS en lignes). Une fois le dernier RBS utilisé on reboucle de manière sur
le premier. Ainsi si on a 4 RBS, la cinquième transaction (d'un point de vue chronologique) ira s'inscrire à la suite de
la première dans le premier RBS.
Il est possible de forcer une transaction à utiliser un RBS ! et affecter un gros rollback segment à une grosse
transaction. Au début de la transaction (après commit, rollback ou connect) on écrit :
SQL> set transaction use rollback segment rbsdd;
Rollback implicite :
Un mécanisme de sécurité et d’intégrité basique d’Oracle fait qu’une transaction est automatiquement annulée en cas
de défaillance soit du poste client, soit du serveur, voire du réseau. (CTRL + ALT + DEL du PC client par exemple)
Lien Vérrouillage/Rollback segment sous Oracle
Pas de lien trouvé.
Hypothèses
-Les roolback segment peuvent être placés autre part que dans les tablespaces. => vrai, il existe un rollback segment
par défaut dans le tablespace SYSTEM, on place les autres où l’on veut.
-Il existe plusieurs types de verrous. => vrai, Exclusive Locks et Share lock
Téléchargement