Vous êtes sur la page 1sur 14

Mohammed Bouayoun https://mbouayoun.developpez.

com/bbed/

FORUMS TUTORIELS MAGAZINE FAQ BLOGS CHAT NEWSLETTER ÉTUDES EMPLOI CLUB

ALM Java .NET Dév. Web EDI Programmation SGBD Office Solutions d'entreprise Applications Mobiles Systèmes

SGBD 4D Access Big Data DB2 Firebird InterBase MySQL NoSQL PostgreSQL Oracle Sybase SQL-Server

ACCUEIL ORACLE FORUM ORACLE F.A.Q ORACLE TUTORIELS ORACLE TUTORIELS SQL SCRIPTS SQL LIVRES ORACLE QUIZ

Gestion interne des blocs Oracle grâce à BBED


Date de publication : le 14 Décembre 2006

Par Mohammed Bouayoun

L'utilisation de BBED est strictement déconseillée dans une base de production, il ne doit être utilisé que par un expert Oracle.

I. Introduction
II. Installation de bbed
III. Paramétrage de BBED
V. Les commandes de bbed
A. HELP
B. SHOW
C. SET
D. (I)NFO
E. MAP
F. (D)UMP
G. (P)RINT
H. E(X)AMINE
I. (F)IND
J. COPY
K. (M)ODIFY
L. ASSIGN
M. SUM
N. PUSH/POP
O. REVERT
P. UNDO
Q. VERIFY
R. CORRUPT
VI. Quelques Exemples
A. Modification des données
B. Récupération d'une ligne supprimée
VII. Remerciements

I. Introduction
Cet article concerne un outil utilisé par le support oracle : BBED. Son rôle est d'éditer les blocs de données oracle et de comprendre
leurs structures. Son utilisation est strictement déconseillée pour un non expert oracle car il peut corrompre votre base de données.
De plus, il est protégé par un mot de passe.

II. Installation de bbed


On trouve cet utilitaire sous windows, Unix et Linux dans les versions Oracle 7, 8 et 9i. On peut l'adapter facilement sous Oracle 10g.

Sous Unix et linux le code objet de bbed est déjà installé mais non compilé, pour cela, il faut lancer :

Make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed

III. Paramétrage de BBED


Vous trouvez ici, la façon de paramétrer bbed : Animation

Pour utiliser bbed, il faudrait saisir le mot de passe. Pour le trouver, il suffit d'éditer le fichier bbed.exe par un éditeur hexadécimal et

En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

1 sur 14 16/06/2019 à 13:55


Mohammed Bouayoun https://mbouayoun.developpez.com/bbed/

Pour accéder à bbed, il faut lancer bbed en renseignant le paramètre parfile, puis saisir le mot de passe.
(Je pense que vous l'aviez trouvé, sinon, bbed n'est pas pour vous)

C:\bbed>bbed parfile=bbed.par
Mot de passe :

BBED: Release 2.0.0.0.0 - Limited Production on Ve Nov 17 16:04:24 2006

(c) Copyright 2000 Oracle Corporation. All rights reserved.

************* !!! For Oracle Internal Use only !!! ***************

En lançant bbed, on peut ajouter les options suivantes :

BLOCKSIZE : définit la taille du bloc.

MODE : définit le mode à utiliser, edit pour le mode d'édition et browse pour le mode de visualisation.

SILENT : Supprime la sortie standard (Y ou N).

SPOOL : Utilisation du spool (Y ou N)

LISTFILE : Liste des fichiers à éditer.

CMDFILE : Liste des commandes à lancer.

BIFILE : Le nom du fichier d'avant modification. Par défaut c'est bifile.bbd.

LOGFILE : Le nom du fichier log. Par défaut c'est log.bbd

PARFILE : Le fichier paramètre.

Le fichier listfile peut être généré par la commande SQL suivantes :

SQL> select file#||' '||name||' '||bytes from v$datafile;

FILE#||''||NAME||''||BYTES
-----------------------------------------------------------------

1 E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\SYSTEM01.DBF 534773760
2 E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\UNDOTBS01.DBF 36700160
3 E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\SYSAUX01.DBF 272629760
4 E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\USERS01.DBF 5242880
5 E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\EXAMPLE01.DBF 104857600
6 E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\DVP.DBF 31457280

6 ligne(s) sélectionnée(s).

Un exemple du fichier paramètre bbed.par :

blocksize = 8192
listfile=c:\bbed\files.log
mode=browse

V. Les commandes de bbed

A. HELP
La première commande que vous pouvez lancer est : HELP ALL.

BBED> help ALL


SET DBA [ dba | file#, block# ]
SET FILENAME 'filename'
SET FILE file#
SET BLOCK [+/-]block#
SET OFFSET [ [+/-]byte offset | symbol | *symbol ]
SET BLOCKSIZE bytes
SET LIST[FILE] 'filename'
SET WIDTH character_count
SET COUNT bytes_to_display
SET IBASE [ HEX | OCT | DEC ]
SET OBASE [ HEX | OCT | DEC ]
SET MODE [ BROWSE | EDIT ]
SET SPOOL [ Y | N ]

En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

2 sur 14 16/06/2019 à 13:55


Mohammed Bouayoun https://mbouayoun.developpez.com/bbed/

DUMP[/v] [ DBA | FILENAME | FILE | BLOCK | OFFSET | COUNT ]


PRINT[/x|d|u|o|c] [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
EXAMINE[/Nuf] [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
(/Nuf):
N - a number which specifies a repeat count.
u - a letter which specifies a unit size:
b - b1, ub1 (byte)
h - b2, ub2 (half-word)
w - b4, ub4(word)
r - Oracle table/index row
f - a letter which specifies a display format:
x - hexadecimal
d - decimal
u - unsigned decimal
o - octal
c - character (native)
n - Oracle number
t - Oracle date
i - Oracle rowid
FIND[/x|d|u|o|c] numeric/character string [ TOP | CURR ]
COPY [ DBA | FILE | FILENAME | BLOCK ] TO [ DBA | FILE | FILENAME | BLOCK ]
MODIFY[/x|d|u|o|c] numeric/character string
[ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
ASSIGN[/x|d|u|o] (target spec)=(source spec)
(target spec) : [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
(source spec) : [ value | (target spec options) ]
SUM [ DBA | FILE | FILENAME | BLOCK ] [ APPLY ]
PUSH [ DBA | FILE | FILENAME | BLOCK | OFFSET ]
POP [ALL]
REVERT [ DBA | FILE | FILENAME | BLOCK ]
UNDO
HELP [ (bbed command) | ALL ]
VERIFY [ DBA | FILE | FILENAME | BLOCK ]

Pour afficher l'aide de la commande SET

BBED> HELP SET


SET DBA [ dba | file#, block# ]
SET FILENAME 'filename'
SET FILE file#
SET BLOCK [+/-]block#
SET OFFSET [ [+/-]byte offset | symbol | *symbol ]
SET BLOCKSIZE bytes
SET LIST[FILE] 'filename'
SET WIDTH character_count
SET COUNT bytes_to_display
SET IBASE [ HEX | OCT | DEC ]
SET OBASE [ HEX | OCT | DEC ]
SET MODE [ BROWSE | EDIT ]
SET SPOOL [ Y | N ]

B. SHOW
La commande SHOW, affiche les paramètres de bbed.

BBED> show
FILE# 1
BLOCK# 1
OFFSET 0
DBA 0x00400001 (4194305 1,1)
FILENAME E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\SYSTEM01.DBF
BIFILE bifile.bbd
LISTFILE c:/bbed/files.log
BLOCKSIZE 512
MODE Edit
EDIT Unrecoverable
IBASE Dec
OBASE Dec
WIDTH 80
COUNT 512
LOGFILE log.bbd
SPOOL No

Pour voir seulement la taille du bloc

BBED> SHOW BLOCKSIZE


BLOCKSIZE 512

C. SET
SET DBA assigne l'adresse du bloc de données.

SET FILENAME assigne le nom de fichier de données.

SET FILE assigne le numéro de fichier de données.

En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

3 sur 14 16/06/2019 à 13:55


Mohammed Bouayoun https://mbouayoun.developpez.com/bbed/

SET OFFSET assigne l'offset relatif au bloc déjà fixé.

SET BLOCKSIZE assigne la taille du bloc. La taille du bloc doit être la même taille utilisée pendant la création du fichier de données.

SET LISTFILE assigne le nom de fichier contenant les fichiers de données.

SET WIDTH fixe la taille de l'écran.

SET COUNT fixe le nombre d'octets à afficher dans l'écran par la commande DUMP.

SET IBASE fixe la base à utiliser. Par défaut c'est le décimal.

SET MODE fixe le mode de bbed. BROWSE pour la consultation et EDIT pour l'édition.

D. (I)NFO
La commande INFO, affiche les fichiers de données qui se trouvent dans files.log.

BBED> INFO
File# Name Size(blks)
----- ---- ----------
1 E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\SYSTEM01.DBF 1024000
2 E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\UNDOTBS01.DBF 71680
3 E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\SYSAUX01.DBF 491520
4 E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\USERS01.DBF 10240
5 E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\EXAMPLE01.DBF 204800
6 E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\DVP.DBF 204800

E. MAP
La commande map affiche la carte du bloc en cours. Elle peut être combinée avec l'option /v pour avoir plus d'information.

Si la taille du bloc n'est pas bien définie pour le fichier de données en cours, vous aurez le message suivant :

BBED> map
File: E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 3 Dba:0x01800003
------------------------------------------------------------
BBED-00400: invalid blocktype (00)

On aura le même message si c'est le premier bloc, car il contient des informations OS et non pas Oracle.

Par exemple, Le bloc 2 du fichier de données dvp nous donnent :

BBED> map
File: E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 2 Dba:0x01800002
------------------------------------------------------------
Data File Header

struct kcvfh, 340 bytes @0

ub4 tailchk @8188

Pour avoir encore plus d'informations :

BBED> map /v
File: E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 2 Dba:0x0180000
-----------------------------------------------------------
Data File Header

struct kcvfh, 340 bytes @0


struct kcvfhbfh, 20 bytes @0
struct kcvfhhdr, 76 bytes @20
ub4 kcvfhrdb @96
struct kcvfhcrs, 8 bytes @100
ub4 kcvfhcrt @108
ub4 kcvfhrlc @112
struct kcvfhrls, 8 bytes @116
ub4 kcvfhbti @124
struct kcvfhbsc, 8 bytes @128
ub2 kcvfhbth @136
ub2 kcvfhsta @138
struct kcvfhckp, 36 bytes @140
ub4 kcvfhcpc @176
ub4 kcvfhrts @180
ub4 kcvfhccc @184
struct kcvfhbcp, 36 bytes @188
ub4 kcvfhbhz @224
struct kcvfhxcd, 16 bytes @228

ub4 tailchk @8188


En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

4 sur 14 16/06/2019 à 13:55


Mohammed Bouayoun https://mbouayoun.developpez.com/bbed/

en lançant de l'aide sur map, on a

BBED> help map


MAP[/v] [ DBA | FILENAME | FILE | BLOCK ]

On peut faire un MAP en mentionnant le dba, le nom du fichier de données, le numéro de fichier de données ou le numéro de bloc.

BBED> map/v dba 6,29


File: E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 29 Dba:0x0180001d
------------------------------------------------------------
KTB Data Block (Table/Cluster)

struct kcbh, 20 bytes @0


ub1 type_kcbh @0
ub1 frmt_kcbh @1
ub1 spare1_kcbh @2
ub1 spare2_kcbh @3
ub4 rdba_kcbh @4
ub4 bas_kcbh @8
ub2 wrp_kcbh @12
ub1 seq_kcbh @14
ub1 flg_kcbh @15
ub2 chkval_kcbh @16
ub2 spare3_kcbh @18

struct ktbbh, 72 bytes @20


ub1 ktbbhtyp @20
union ktbbhsid, 4 bytes @24
struct ktbbhcsc, 8 bytes @28
b2 ktbbhict @36
ub1 ktbbhflg @38
ub1 ktbbhfsl @39
ub4 ktbbhfnx @40
struct ktbbhitl[2], 48 bytes @44

struct kdbh, 14 bytes @92


ub1 kdbhflag @92
b1 kdbhntab @93
b2 kdbhnrow @94
sb2 kdbhfrre @96
sb2 kdbhfsbo @98
sb2 kdbhfseo @100
b2 kdbhavsp @102
b2 kdbhtosp @104

struct kdbt[0], 0 bytes @106


b2 kdbtoffs @106
b2 kdbtnrow @108

sb2 kdbr[0] @106

ub1 freespace[256] @106

ub1 rowdata[7840] @362

ub4 tailchk @8188

F. (D)UMP
La commande DUMP décharge le bloc en cours sur votre écran.

BBED> dump
File: E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 29 Offsets: 0 to 511 Dba:0x0180001d
------------------------------------------------------------------------
06a20000 1c008001 cd670d00 00000104 96370000 01000000 eacf0000 cd670d00
00000000 02003200 19008001 09001600 6d010000 b6008000 20013600 00a00000
42630d00 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00010100 ffff1400 901f7b1f 7b1f0000 0100901f 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
(32 bytes per line)

Une aide sur la commande DUMP, nous donnent

BBED> help dump


DUMP[/v] [ DBA | FILENAME | FILE | BLOCK | OFFSET | COUNT ]

En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

5 sur 14 16/06/2019 à 13:55


Mohammed Bouayoun https://mbouayoun.developpez.com/bbed/

BBED> dump /v dba 6,29 offset 0 count 128


File: E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 29 Offsets: 0 to 127 Dba:0x0180001d
-------------------------------------------------------
06a20000 1c008001 cd670d00 00000104 l .ó......-g......
96370000 01000000 eacf0000 cd670d00 l .7......Û¤..-g..
00000000 02003200 19008001 09001600 l ......2.........
6d010000 b6008000 20013600 00a00000 l m...Â... .6..á..
42630d00 00000000 00000000 00000000 l Bc..............
00000000 00000000 00000000 00000000 l ................
00000000 00010100 ffff1400 901f7b1f l ........ ....{.
7b1f0000 0100901f 00000000 00000000 l {...............
(16 bytes per line)

On peut utiliser la structure de l'entête du bloc pour decoder les 16 octets.

G. (P)RINT
C'est la plus utilisées, elle consiste à afficher la structure de données dans une format brute ou dans une format bien structurée. On
peut mentionner les options DBA, Filename, File, Block et/ou Offset.

Comme la commande MAP nous montrent les structures des blocs, la commande PRINT nous donne en détail la structure de ces
blocs.

BBED> p
kcbh.type_kcbh
--------------
ub1 type_kcbh @0 0x06

Il est possible d'utilise la commande PRINT pour afficher les structures de données individuellement en spécifiant le nom de la
structure. Par exemple, pour afficher la structure de l'entête du bloc :

BBED> p kcbh
struct kcbh, 20 bytes @0
ub1 type_kcbh @0 0x06
ub1 frmt_kcbh @1 0xa2
ub1 spare1_kcbh @2 0x00
ub1 spare2_kcbh @3 0x00
ub4 rdba_kcbh @4 0x0180001c
ub4 bas_kcbh @8 0x000d67cd
ub2 wrp_kcbh @12 0x0000
ub1 seq_kcbh @14 0x01
ub1 flg_kcbh @15 0x04 (KCBHFCKV)
ub2 chkval_kcbh @16 0x3796
ub2 spare3_kcbh @18 0x0000

On peut trouver le nombre de lignes dans le bloc en affichant la structure kdbh.

BBED> p kdbh
struct kdbh, 14 bytes @92
ub1 kdbhflag @92 0x00 (NONE)
b1 kdbhntab @93 0
b2 kdbhnrow @94 0
sb2 kdbhfrre @96 0
sb2 kdbhfsbo @98 0
sb2 kdbhfseo @100 256
b2 kdbhavsp @102 1
b2 kdbhtosp @104 -1

On peut être plus précis en affichant qu'un seul élément de la structure de données.

BBED> p kdbhnrow
b2 kdbhnrow @94 0

BBED> set block 2255


BLOCK# 2255

BBED> p *kdbr[0]
rowdata[0]
----------
ub1 rowdata[0] @106 0x0e

BBED> d /v dba 6,2245 offset 8159 count 32


File: E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 2245 Offsets: 8159 to 8190 Dba:0x018008c5
-------------------------------------------------------
05546573 74323c02 01055465 7374313c l .Test2(...Test1(
02010a44 6576656c 6f707065 7a01063b l ...Developpez..;

(16 bytes per line)

En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

6 sur 14 16/06/2019 à 13:55


Mohammed Bouayoun https://mbouayoun.developpez.com/bbed/

freespace[22]
-------------
ub1 freespace[22] @128 0x5d

BBED> d /v dba 6,2245 offset 128 count 32


File: E:\ORACLE\PRODUCT\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 2245 Offsets: 128 to 159 Dba:0x018008c5
-------------------------------------------------------
5d1f541f 4b1f421f 00000000 00000000 l ].T.K.B.........
00000000 00000000 00000000 00000000 l ................

(16 bytes per line)

H. E(X)AMINE
La commande EXAMINE affiche les données d'un bloc depuis une format brute. Comme la commande PRINT, elle ne peut pas
interpréter les structures de données, par contre, elle peut être utilisées pour afficher l'information d'une ligne. Si on connaît le type
de données de la ligne, on peut facilement retrouver complètement la ligne depuis un bloc.

La commande EXAMINE doit être utilisé avec les switches suivants :

Switch Format
/b b1, ub1 (byte)
/h b2, ub2 (half-word)
/w b4, ub4 (word)
/l b8, ub8 (long)
/r Oracle table/index row
Pour afficher la ligne d'une table

BBED> p *kdbr[3]
rowdata[36]
-----------
ub1 rowdata[36] @4044 0x2c

BBED> x /rcnn
rowdata[36] @4044
-----------
flag@4044: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@4045: 0x01
cols@4046: 1

col 0[8] @4047: A26N

Pour afficher plusieurs lignes d'une table, on utilise la commande (ici 3 lignes):

BBED> x /3rcnn

I. (F)IND
La commande FIND est utilisées pour trouver une donnée dans un bloc. On peut chercher une valeur hexadécimal, chaîne de
caractères ou numérique. On peut chercher depuis le début du bloc (offset 0) en utilisant le directive TOP, ou depuis la position en
cours en utilisant CURR.

On utilise les switches pour déterminer le type de recherche.

Switch Type de données


/x Hexadécimal
/d Décimal
/u Décimal non signé
/o Octal
/c Chaîne de caractères
Pour chercher la chaîne A26S dans le fichier 9 et le bloc 4 :

BBED> set file 9


FILE# 9

BBED> set block 4


BLOCK# 4

BBED> set offset 0


OFFSET 0

BBED> find /c A26S TOP


File: E:\oracle\product\10.2.0\ORADATA\B10R2\REF.DBF (9)
Block: 4 Offsets: 4060 to 4095 Dba:0x02400004
------------------------------------------------------------------------
41323653 20202020 2c010108 41342020 20202020 2c010108 41323920 20202020
01063b99

En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

7 sur 14 16/06/2019 à 13:55


Mohammed Bouayoun https://mbouayoun.developpez.com/bbed/

BBED à trouver la chaîne de caractères dans l'offset 4060. On peut le vérifier par la commande DUMP :

BBED> d /v offset 4060


File: E:\oracle\product\10.2.0\ORADATA\B10R2\REF.DBF (9)
Block: 4 Offsets: 4060 to 4095 Dba:0x02400004
-------------------------------------------------------
41323653 20202020 2c010108 41342020 l A26S ,...A4
20202020 2c010108 41323920 20202020 l ,...A29
01063b99 l ..;.

J. COPY
La commande COPY est utilisée pour copier un bloc d'un emplacement à un autre. Par exemple, pour copier le bloc 20 du fichier 5
vers le fichier 4 :

BBED> copy dba 6,20 to dba 5,20

Warning: contents of previous BIFILE will be lost. Proceed? (Y/N)

K. (M)ODIFY
La commande MODIFY est utilisée pour modifier une donnée dans un bloc. On peut utiliser les mêmes switches que la commande
FIND.

Par exemple, pour modifier la chaîne de caractères A26S en DVP3 :

BBED> modify /c DVP3 dba 9,4 offset 4060


File: E:\oracle\product\10.2.0\ORADATA\B10R2\REF.DBF (9)
Block: 4 Offsets: 4060 to 4095 Dba:0x02400004
------------------------------------------------------------------------
44565033 20202020 2c010108 41342020 20202020 2c010108 41323920 20202020
01063b99

Pour vérifier la modification, on utilise la commande DUMP suivante :

BBED> dump /v dba 9,4 offset 4060


File: E:\oracle\product\10.2.0\ORADATA\B10R2\REF.DBF (9)
Block: 4 Offsets: 4060 to 4095 Dba:0x02400004
-------------------------------------------------------
44565033 20202020 2c010108 41342020 l DVP3 ,...A4
20202020 2c010108 41323920 20202020 l ,...A29
01063b99 l ..;.

L. ASSIGN
La commande ASSIGN, effectue un assignement symbolique. Par exemple la commande suivante, assigne une structure depuis
l'offset courant au fichier 9, bloc 2, première entrée ITL.

BBED> assign dba 9,2 ktbbhitl[0]

M. SUM
La commande SUM est utilisée pour vérifier est appliquer le checksum d'un bloc. On peut toujours spécifier dans la commande les
options DBA, Filename, File, Block et/ou Offset. S'ils ne sont pas spécifiés, le fichier, le bloc et l'offset en cours qui sont pris en
comptes.

BBED> sum dba 6,29


Check value for File 6, Block 29:
current = 0x3696, required = 0x3796

On ajoute l'option apply pour appliquer le checksum.

BBED> sum dba 6,29 apply


Check value for File 6, Block 29:
current = 0x3796, required = 0x3796

N. PUSH/POP
En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

8 sur 14 16/06/2019 à 13:55


Mohammed Bouayoun https://mbouayoun.developpez.com/bbed/

sera examiné et modifié.

warning La pile stocke seulement l'emplacement et non pas le contenu.


Dans cette exemple, on va examiner le fichier 9, bloc 4, offset 4060. L'emplacement sera stocké par la commande PUSH. Après, on se
déplace dans le fichier 6, bloc 29 et en retourne par la commande POP dans le fichier 9, bloc 4.

BBED> push dba 9,4


DBA 0x02400004 (37748740 9,4)
OFFSET 4060

BBED> set dba 6,29


DBA 0x0180001d (25165853 6,29)

BBED> pop
DBA 0x02400004 (37748740 9,4)
OFFSET 4060

On utilise la commande POP ALL pour supprimer toutes les entrées effectués par PUSH.

O. REVERT
La commande REVERT est utilisé pour restaurer un numéro de fichier, un nom de fichier, un bloc ou le DBA dans leurs états d'origine,
c'est à dire, au démarrage de bbed.

Il faut que le mode soit EDIT, sinon :

BBED> revert dba 6,29


BBED-00215: editing not allowed in BROWSE mode

BBED> set mode edit


MODE Edit

BBED> revert dba 6,29


No changes to rollback.

BBED> revert dba 6,29


All

P. UNDO
La commande UNDO annule la dernière modification. Ici un exemple d'utilisation de la commande UNDO :

BBED> modify /c DVP3 dba 9,4 offset 4060


File: E:\oracle\product\10.2.0\ORADATA\B10R2\REF.DBF (9)
Block: 4 Offsets: 4060 to 4095 Dba:0x02400004
------------------------------------------------------------------------
44565033 20202020 2c010108 41342020 20202020 2c010108 41323920 20202020
01063b99

BBED> dump /v dba 9,4 offset 4060


File: E:\oracle\product\10.2.0\ORADATA\B10R2\REF.DBF (9)
Block: 4 Offsets: 4060 to 4095 Dba:0x02400004
-------------------------------------------------------
44565033 20202020 2c010108 41342020 l DVP3 ,...A4
20202020 2c010108 41323920 20202020 l ,...A29
01063b99 l ..;.

BBED> undo
BBED> modify /x 41323653 filename 'E:\oracle\product\10.2.0\ORADATA\B10R2\REF.DB
F' block 4. offset 4060.
File: E:\oracle\product\10.2.0\ORADATA\B10R2\REF.DBF (9)
Block: 4 Offsets: 4060 to 4095 Dba:0x02400004
------------------------------------------------------------------------
41323653 20202020 2c010108 41342020 20202020 2c010108 41323920 20202020
01063b99

BBED> dump /v dba 9,4 offset 4060


File: E:\oracle\product\10.2.0\ORADATA\B10R2\REF.DBF (9)
Block: 4 Offsets: 4060 to 4095 Dba:0x02400004
-------------------------------------------------------
41323653 20202020 2c010108 41342020 l A26S ,...A4
20202020 2c010108 41323920 20202020 l ,...A29
01063b99 l ..;.

Q. VERIFY
La commande VERIFY est utilisé pour vérifier l'intégrité du bloc de données. Elle effectue la même fonction que l'utilitaire DBVERIFY.

En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

9 sur 14 16/06/2019 à 13:55


Mohammed Bouayoun https://mbouayoun.developpez.com/bbed/

FILE = E:\oracle\product\10.2.0\ORADATA\B10R2\DVP.DBF
BLOCK = 28

Le bloc 28 est altéré


***
Corrupt block relative dba: 0x0180001c (file 0, block 28)
Bad header found during verification
Data in bad block -
type: 6 format: 162 rdba: 0x0180001c
last change scn: 0x0000.000d67cd seq: 0x1 flg: 0x04
consistency value in tail: 0x67cd0601
check value in block header: 0x3796, computed block checksum: 0x0
spare1: 0x0, spare2: 0x0, spare3: 0x0
***

DBVERIFY - VÚrification terminée

Nombre total de blocs examinés : 1


Nombre total de blocs traités (données) : 0
Nombre total de blocs en échec (données) : 0
Nombre total de blocs traités (index): 0
Nombre total de blocs en échec (index): 0
Nombre total de blocs vides : 0
Nombre total de blocs marqués endommagés : 1
Nombre total de blocs remplis : 0

R. CORRUPT
La commande CORRUPT est utilisé pour marquer un bloc comme corrompu. Par exemple :

BBED> corrupt dba 6, 29


Block marked media corrupt.

idea La commande UNDO n'annule pas une bloc marqué corrompu. C'est la commande REVERT qui le fait.

VI. Quelques Exemples

A. Modification des données


Soit la table T2 de l'utilisateur DVP qui contient les données suivantes

SQL> select * from t2;

NOM
--------------------
Developpez

Cherchons le ROWID de la ligne contenant la chaîne de caractères Developpez

SQL> select rowid from t2;

ROWID
------------------
AAANQYAAGAAAAjGAAA

Pour trouver le numéro de fichier de données et le numéro de bloc contenant la valeur Developpez, on utilise le paquetage
DBMS_ROWID.

Le numéro de fichier de donnés est : 6

SQL> select DBMS_ROWID.ROWID_RELATIVE_FNO('AAANQYAAGAAAAjGAAA') from dual;

DBMS_ROWID.ROWID_RELATIVE_FNO('AAANQYAAGAAAAJGAAA')
---------------------------------------------------
6

Le numéro de bloc est 2246 + 1 = 2247 , car dans BBED il faut toujours ajouter le premier bloc contenant les informations OS

SQL> select DBMS_ROWID.ROWID_BLOCK_NUMBER('AAANQYAAGAAAAjGAAA') from dual;

DBMS_ROWID.ROWID_BLOCK_NUMBER('AAANQYAAGAAAAJGAAA')
---------------------------------------------------
2246

Ici on va modifier le bloc 2247 du fichier de données 6

BBED> set DBA 6,2247


En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

10 sur 14 16/06/2019 à 13:55


Mohammed Bouayoun https://mbouayoun.developpez.com/bbed/

On cherche le mot Developpez dans le bloc

BBED> find /c Developpez


File: E:\oracle\product\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 2247 Offsets: 8178 to 8191 Dba:0x018008c7
------------------------------------------------------------------------
44657665 6c6f7070 657a0106 68e8

(32 bytes per line)

On utilise la commande dump pour vérifier le mot recherché, et repérer l'offset exacte des données à modifier.

BBED> dump /v dba 6,2247 offset 8178 count 64


File: E:\oracle\product\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 2247 Offsets: 8178 to 8191 Dba:0x018008c7
-------------------------------------------------------
44657665 6c6f7070 657a0106 68e8 l Developpez..hÞ

(16 bytes per line)

Ici, on va modifier le mot Developpez par le mot MarcLussac, le commutateur /c indique une modification d'une chaîne de caractères.

BBED> modify /c MarcLussac dba 6, 2247 offset 8178


BBED-00215: editing not allowed in BROWSE mode

Il faut être en mode édition pour modifier un bloc de données

BBED> set mode EDIT


MODE Edit

BBED> modify /c MarcLussac dba 6, 2247 offset 8178


Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y
File: E:\oracle\product\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 2247 Offsets: 8178 to 8191 Dba:0x018008c7
------------------------------------------------------------------------
4d617263 4c757373 61630106 68e8

(32 bytes per line)

On vérifie la modification en utilisant la commande dump.

BBED> dump /v dba 6,2247 offset 8178 count 64


File: E:\oracle\product\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 2247 Offsets: 8178 to 8191 Dba:0x018008c7
-------------------------------------------------------
4d617263 4c757373 61630106 68e8 l MarcLussac..hÞ

(16 bytes per line)

Avant qu'Oracle puisse lire le bloc, le checksum du bloc doit être mis à jours. La commande SUM est utilisée pour vérifier et initialiser
le checksum du bloc.

BBED> sum dba 6, 2247


Check value for File 6, Block 2247:
current = 0x6409, required = 0x6623

BBED> sum dba 6, 2247 apply


Check value for File 6, Block 2247:
current = 0x6623, required = 0x6623

Sous SQL, on a toujours l'ancien mot.

SQL> select * from dvp.t2;

NOM
--------------------
Developpez

Essayons de voir dans un éditeur hexadécimal ce qui passe

Il faut vider la mémoire cache pour afficher la ligne modifiée.

SQL> alter system flush buffer_cache;

Système modifié.

SQL> select * from t2;

NOM
--------------------
MarcLussac

Ce qui montre qu'on peut modifier des données dans une base fermé et sans avoir un compte Oracle. Il faut donc toujours protéger
En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

11 sur 14 16/06/2019 à 13:55


Mohammed Bouayoun https://mbouayoun.developpez.com/bbed/

B. Récupération d'une ligne supprimée


Dans l'exemple suivant, on va monter comment récupérer une ligne supprimée.

Quand une ligne est supprimée, les données de la ligne ne sont pas écrasées tout de suite. La ligne est simplement marquée comme
supprimée et son statut est stocké dans l'entête de ligne (Row Header) qui occupe les premiers octets de chaque ligne.

L'entête de ligne est constitué d'un Indicateur de Ligne (Row Flag), d'un Octet de Verrous (Lock Byte) (entrée ITL) et d'un Compteur
de Ligne (Column Count). Le premier octet de l'entête de ligne détient un masque de bit (bitmask) qui contient le statut de la ligne.
Ce masque est décodé comme il suit :

Membre Entête d'un Morceau de Morceau de


Clé de 1ere Dernière
d'une table morceau de Supprimé la première la dernière
Cluster Colonne colonne
Clustrée ligne donnée donnée
128 64 32 16 8 4 2 1
Les colonnes s'ajustant dans un simple bloc, qui ne sont pas chaînées, ni migrées ou partie d'une table clustrée et ne sont pas
supprimées devraient avoir les attributs suivants :

Pièce d'un Entête de Ligne


Pièce de la Première donnée
Pièce de la dernière donnée

Dans ce cas l'Idicateur de Ligne est 32 + 8 + 4 = 44 = 0x2c. On peut voir un échantillon d'une décharge de bloc en lançant la
commande :

SQL> alter system dump datafile 6 block 2247;

SystÞme modifié.

Le resultat de la décharge se trouve dans le répertoire udump.

tl: 17 fb: --H-FL-- lb: 0x0 cc: 1


col 0: [13] 53 68 65 69 6b 59 65 72 62 6f 75 74 69
On insère une nouvelle ligne dans la table T2. On lance un checkpoint pour être sûr que la ligne est bien enregistrée dans le fichier de
données.

SQL> insert into t2 values ('SheikYerbouti');

1 ligne créée.

SQL> commit;

Validation effectuée.

SQL> alter system checkpoint;

Système modifié.

On cherche le rowid de la ligne ajoutée, son numéro de fichier et son numéro de bloc.

SQL> select rowid, nom from t2 where nom='SheikYerbouti';

ROWID NOM
------------------ --------------------
AAANQYAAGAAAAjHAAA SheikYerbouti

SQL> select DBMS_ROWID.ROWID_RELATIVE_FNO('AAANQYAAGAAAAjHAAA') from dual;

DBMS_ROWID.ROWID_RELATIVE_FNO('AAANQYAAGAAAAJHAAA')
---------------------------------------------------
6

SQL> select DBMS_ROWID.ROWID_BLOCK_NUMBER('AAANQYAAGAAAAjHAAA') from dual;

DBMS_ROWID.ROWID_BLOCK_NUMBER('AAANQYAAGAAAAJHAAA')
---------------------------------------------------
2247

Donc la ligne ajoutée se trouve dans le fichier de données 6 et dans le bloc 2247+1=2248. On fait une recherche avec la commande
FIND pour trouver l'offset exacte et on vérifie le contenu du bloc avec la commande DUMP.

BBED> set dba 6, 2248


DBA 0x018008c8 (25168072 6,2248)

BBED> find /c SheikYerbouti


File: E:\oracle\product\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 2248 Offsets: 8175 to 8190 Dba:0x018008c8
------------------------------------------------------------------------
53686569 6b596572 626f7574 69010641

(32 bytes per line)

En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

12 sur 14 16/06/2019 à 13:55


Mohammed Bouayoun https://mbouayoun.developpez.com/bbed/

-------------------------------------------------------
53686569 6b596572 626f7574 69010641 l SheikYerbouti..A
b3 l ?

(16 bytes per line)

On supprime la ligne contenant le mot SheikYerbouti et on lance une décharge du bloc contenant cette ligne.

SQL> delete from t2 where nom='SheikYerbouti';

1 ligne supprimée.

SQL> commit;

Validation effectuée.

SQL> alter system dump datafile 6 block 2247;

Système modifié.

Dans le fichier de décharge on a le resultat suivant :

tl: 2 fb: --HDFL-- lb: 0x2


end_of_block_dump
Donc, l'indicateur de ligne sera égale à 32 + 16 + 8 + 4 = 60 = 0x3c

Maintenant, on va trouver l'offset contenant le mot SheikYerbouti et par la commande DUMP on décharge le bloc.

BBED> set dba 6, 2248


DBA 0x018008c8 (25168072 6,2248)

BBED> find /c SheikYerbouti TOP


File: E:\oracle\product\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 2248 Offsets: 8175 to 8191 Dba:0x018008c8
------------------------------------------------------------------------
53686569 6b596572 626f7574 69010641 b3

(32 bytes per line)

BBED> dump /v dba 6, 2248 offset 8159


File: E:\oracle\product\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 2248 Offsets: 8159 to 8191 Dba:0x018008c8
-------------------------------------------------------
00000000 00000000 00000000 3c02010d l ............(...
53686569 6b596572 626f7574 690106dc l SheikYerbouti..?
b8 l ©

(16 bytes per line)

Normalement, notre ligne commence depuis l'offset 8171 = 8175 - 4 (4 octet contient l'entête de ligne).

BBED> dump /v dba 6, 2248 offset 8171


File: E:\oracle\product\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 2248 Offsets: 8171 to 8191 Dba:0x018008c8
-------------------------------------------------------
3c02010d 53686569 6b596572 626f7574 l (...SheikYerbout
690106dc b8 l i..?©

(16 bytes per line)

Dans l'offset 8171 on trouve bien la valeur 0x3c

Dans ce qui suit, on modifie l'offset 8171 par la valeur 0x2c et on applique le checksum.

BBED> modify /x 2c offset 8171


Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y
File: E:\oracle\product\10.2.0\ORADATA\B10R2\DVP.DBF (6)
Block: 2248 Offsets: 8171 to 8191 Dba:0x018008c8
------------------------------------------------------------------------
2c02010d 53686569 6b596572 626f7574 690106dc b8

(32 bytes per line)

BBED> sum dba 6,2248 apply


Check value for File 6, Block 2248:
current = 0xfae8, required = 0xfae8

On vide le buffer cache et on retrouve bien la ligne supprimée.

SQL> alter system flush buffer_cache;

SystÞme modifiÚ.

SQL> select nom from t2;

NOM
--------------------
MarcLussac
SheikYerbouti
En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

13 sur 14 16/06/2019 à 13:55


Mohammed Bouayoun https://mbouayoun.developpez.com/bbed/

VII. Remerciements
Je tiens à remercier toute l'équipe de Developpez.com pour son aide dans la relecture et l'amélioration du présent tutoriel, en
particulier Xo pour la correction de l'orthographe.

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou
distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Contacter le responsable de la rubrique Oracle

Nous contacter Participez Hébergement Informations légales Partenaire : Hébergement Web


Copyright © 2000-2019 - www.developpez.com

En utilisant ce site, vous acceptez l'utilisation de cookies permettant de vous proposer des contenus et des services adaptés à vos centres d'intérêts -
J'accepte

14 sur 14 16/06/2019 à 13:55