SDB est un outil permettant de manipuler, à
travers un intepréteur Perl inclus, les informations d'une
base Rdb. 
Il permet, en particulier, de
manipuler sa description physique, les différentes analyses,
etc... 
Il est utilisé, à titre
d'exemple, pour générer de façon automatique des
rapports d'analyses, des scripts de réorganisation prenant en
compte le taux de remplissage des différentes aires, etc...
Attention : Vous devez installer PERL pour pouvoir utiliser SDB.
Exemple :
$ r sdb 
Nov 17
1999 13:35:33, jfp@altavista.net 
SDB>
att mabase 
SDB> load
SDB> do root.pl
--------------Info base-------------------------
Version de Rdb : Oracle Rdb V7.0-31
Base DISK$RDB:[DIR]MABASE.RDB;1 : 4 aires.
  Pas de journalisation 
 
10 slots d'aires et 10 slots d'aij libres 
 
250 buffers globaux de 12 blocks, 20 par utilisateur avec un max de 5
  50 connexions simultanées sur 2
noeuds au maximum 
  Ecriture
asynchrone activé 
   
5 buffers non modifiés au minimum, 
   
4 buffers écrits simultanément au maximum
  Optimisation backup incrémental
activée 
  4 aires
uniformes. 
  3 aires ont été
étendues, toutes uniformes. 
 
Tailles total : 704 Mo 
   
Aires : 703 Mo 
   
Snap  : 1 Mo 
  4603781
lignes dans 155 tables représentant 1043 Mo de données.
  214 index btree.
----------------Aires
étendues-------------------------- 
UAREA01T
uniforme, 29997 Pages d'extension (16 %) 
RDB$SYSTEM
uniforme, 918 Pages d'extension (20 %) 
AREA_DEFAULT
uniforme, 555 Pages d'extension (44 %)
----------------Snap
étendues-------------------------- 
SDB> 
Exit 
$ 
$
ty root.pl 
use strict; 
# Database : $Sdb::Database
sub round ($) { 
 
my $n = shift; 
# "%.0f" effectue l'arrondi
  return sprintf "%.0f", $n;
} 
sub showDatabase() { 
 
my $db = $Sdb::Database; 
my $areas = $db->allAreas();
  print "--------------Info
base-------------------------\n"; 
 
print "Version de Rdb : ${ \$db->version() } \n";
  print "Base ${ \$db->dbName() } :
"; 
  if ($db->mfdb()) {
      print "${
\$db->stoAreaCount() } aires."; 
 
} else { 
     
print "mono-fichier"; 
 
} 
  print "\n";
  if ($db->aijEnabled()) {
      print " 
AIJ actif"; 
     
if ($db->aijCount() == 1) { 
     
print " journal extensible"; 
     
} else { 
         
print " ${ \$db->aijCount() } journaux";
      } 
 
} else { 
    print " 
Pas de journalisation"; 
 
} 
  print "\n";
  print "  ${ \$db->stoAreaFree()
} slot"; 
  print "s"
if ($db->stoAreaFree() > 1); 
 
print " d'aires et ${ \$db->aijFree() } slot";
  print "s" if ($db->aijFree()
> 1); 
  print " d'aij
libres"; 
  print "\n";
  print "  Buffers de la base
mappe sur l'espace systeme\n" 
       
if ($db->memoryMapping()); 
  if ($db->gbEnabled()) {
      print " 
${ \$db->gbNumBuff() } buffers globaux de ${ \$db->bufferSize()
} 
"; 
     
print " blocks, ${ \$db->numberBuffers() } par utilisateur
avec un max de "; 
     
print "${ \$db->gbNumPerUser() }"; 
     
print ", \n    transfert optimisé des
pages" if ($db->gbTransfer()); 
 
} else { 
     
print "  ${ \$db->numberBuffers() } buffers de ";
      print "${
\$db->bufferSize() } blocs\n"; 
 
} 
  print "\n";
  print "  ${ \$db->numberUsers()
} connexions simultanées sur "; 
 
print "${ \$db->numberNodes() } noeud"; 
 
print "s" if ($db->numberNodes() > 1); 
 
print " au maximum\n"; 
  if (! $db->snpEnabled()) {
      print " 
Snapshot désactivé\n"; 
 
} elsif ($db->snpDeferred()) { 
    
print "  Snapshot differé\n"; 
 
} 
print " Index system décompressés\n" if (! $db->idxCompression());
  print "  Collection des
statistiques désactivée\n" 
       
if (! $db->statistics()); 
  if ($db->fcChkptEnabled()) {
      print " 
Fast commit activé (${ \$db->fcChkptInterval() } blocs, ";
      print
$db->fcChkptTime() . " s"; 
     
if ($db->fcCommitToJrnl()) { 
         
print ", CTJ activé ${ \$db->fcTsnInterval() }
transactions"; 
     
} 
     
print ")\n"; 
  }
  if (! $db->dAsynchPrefetch()) {
      print " 
Prefetch asynchrone dynamique désactivé\n";
  } elsif (($db->dapfDepth() != 4) ||
($db->dapfThreshold() != 4)) { 
     
print "Prefetch dynamique asynchrone activé avec une
profondeur de "; 
     
print "${ \$db->dapfDepth() } buffers et un seuil de ";
      print "${
\$db->dapfThreshold() } pages\n"; 
 
} 
  if (! $db->asynchBatchwrite()) {
     print " 
Ecriture asynchrone désactivé\n"; 
 
} elsif ($db->abwMaxBuffers() || ($db->abwCleanBuffers() != 5))
{ 
     print " 
Ecriture asynchrone activé\n    ${
\$db->abwCleanBuffers() }"; 
    
print " buffers non modifiés au minimum,\n   
${ \$db->abwMaxBuffers() }"; 
    
print " buffers écrits simultanément au
maximum\n"; 
  }
print " Carry-over lock désactivé\n" unless ($db->lckoptEnabled());
  print "  Optimisation backup
incrémental "; 
  if
($db->incrBackup()) {print "activée";} else
{print "désactivée";}; 
 
print "\n"; 
  if (! $db->algCount()) {
      print " 
ALG désactivé\n"; 
 
} elsif ($db->algCount() != 3) { 
     
print "  ${ \$db->algCount() }  niveaux de
locking\n"; 
  }
  print "  ${ \$db->lockTimeout()
} s d'attente maximum sur lock\n" 
       
if ($db->lockTimeout()); 
  print "  ${
\$db->uniformAreaCount() } aires uniformes"; 
 
if ($db->mixedAreaCount()) { 
     
print ", ${ \$db->mixedAreaCount() } aires mixtes.";
  } else { 
     
print "."; 
  }
  print "\n"; 
  if ($db->areaExtendedCount()) {
      print " 
${ \$db->areaExtendedCount() }"; 
     
if ($db->areaExtendedCount() > 1) { 
         
print " aires ont été étendues";
      } else {
         
print " aire a été étendue";
      }
      if
(($db->areaExtendedCount() == 1) && 
         
($db->mixedAreaExtendedCount() == 1)) { 
         
print ", aire mixte"; 
     
} elsif ($db->mixedAreaExtendedCount()) { 
         
print ", dont ${ \$db->mixedAreaExtendedCount() } mixte";
         
print "s" if ($db->mixedAreaExtendedCount() > 1);
      } elsif
($db->areaExtendedCount() == 1) { 
         
print ", aire uniforme"; 
     
} else { 
         
print ", toutes uniformes"; 
     
} 
     
print "."; 
  }
  print "\n"; 
  print "  Tailles total : ${
\($db->areaMo() + $db->snapMo() + $db->aijMo()) } Mo\n";
  print "    Aires : ${
\$db->areaMo() } Mo\n"; 
 
print "    Snap  : ${ \$db->snapMo() }
Mo\n"; 
  print "   
Aij   : ${ \$db->aijMo() } Mo\n" if
($db->aijCount()); 
  print "  ${ \$db->rowCount()
} lignes dans ${ \$db->tableCount() }"; 
 
print " tables représentant ${ \$db->dataVolumeMo() }
Mo de données."; 
 
print "\n"; 
  print "  ${ \$db->indexCount()
} index "; 
  if (!
$db->hashCount()) { 
     
print "btree."; 
  }
elsif (! $db->btreeCount()) { 
     
print "hash."; 
  }
else { 
     
print "(${ \$db->hashCount() } hash, ${ \$db->btreeCount()
} btree)."; 
  }
  print "\n"; 
  my @sort1 = sort { ($b->allocationMax()
- $b->allocation()) <=> 
                    
($a->allocationMax() - $a->allocation()) }
                  
@$areas; 
  print "----------------Aires
étendues--------------------------\n"; 
 
foreach (@sort1) { 
     
if ($_->areaExtended()) { 
         
print $_->areaName(); 
         
if ($_->areaType()) { 
             
print " mixte"; 
         
} else { 
             
print " uniforme"; 
         
} 
         
print ", ${ \( $_->allocationMax() -  $_->allocation())
}"; 
         
print " Pages d'extension ("; 
         
print "${ \( round(100 * (($_->allocationMax() /
$_->allocation() - 1)))) }"; 
         
print " %)\n"; 
     
} 
  } 
  my @sort1 = sort { ($b->snpAllocMax() -
$b->snpAllocation()) <=> 
                    
($a->snpAllocMax() - $a->snpAllocation()) }
                  
@$areas; 
  print "----------------Snap
étendues--------------------------\n"; 
 
foreach (@sort1) { 
     
if ($_->snapExtended()) { 
         
print $_->areaName(); 
         
if ($_->areaType()) { 
             
print " mixte"; 
         
} else { 
             
print " uniforme"; 
         
} 
         
print ", ${ \( $_->snpAllocMax() -  $_->snpAllocation())
}"; 
         
print " Pages d'extension ("; 
         
print "${ \( round(100 * ($_->snpAllocMax() /
$_->snpAllocation() - 1))) }"; 
         
print " %)\n"; 
     
} 
  } 
}
open (SdbOutput, '>' . $Sdb::OutputFileName)
or 
       
die "Impossible d'ouvrir le fichier $Sdb::OutputFileName\n";
my $prevOutput = select SdbOutput; 
showDatabase();
select $prevOutput; 
close
SdbOutput; 
$