
Dans l'exemple suivant, nous examinons des extraits du gestionnaire d'événement GetEstimatedSize défini sur la métaclasse Table afin d'estimer la taille de la base de données en calculant la taille de chaque table comme taille totale de toutes ses colonnes plus la taille de tous ses index.
Remarque : Pour obtenir des exemples du gestionnaire d'événement GetEstimatedSize utilisé dans Table et les autres métaclasses, voir les fichiers de définition de SGBD Sybase IQ v15.2 et HP Neoview R2.4.
Dans ce premier extrait du script, la fonction
GetEstimatedSize s'ouvre et la taille de chaque table
est obtenue en bouclant sur la taille de chacune de ses colonnes. Le calcul
effectif de la taille de la colonne est effectué par la
ligne:
ColSize = C.GetEstimatedSize(message, false)
, qui
appelle le gestionnaire d'événement
GetEstimatedSize sur la métaclasse
Column (voir
Appel du gestionnaire d'événement GetEstimatedSize sur une autre métaclasse):
Function %GetEstimatedSize%(obj, ByRef message)
' Commencer par calculer la variable globale de base de données qui sera nécessaire.
' Lire la taille de la table et conserver la taille de colonne pour la suite
Dim ColSizes, TblSize, ColSize, C
Set ColSizes = CreateObject("Scripting.Dictionary")
TblSize = 0 ' Peut être changé pour prendre en compte la taille initiale de définition de table.
for each C in obj.Columns
' Commencer à parcourir les colonnes de table et utiliser le gestionnaire d''événement défini sur la métaclasse de colonne (s''il existe).
ColSize = C.GetEstimatedSize(message, false)
' Stocker la taille de colonne pour une future utilisation dans les index.
ColSizes.Add C, ColSize
' Augmenter la taille globale de la table.
TblSize = TblSize + ColSize
next
Dim RawDataSize
RawDataSize = BlockSize * int(obj.Number * TblSize / BlockSize)
' A ce stade, RawDataSize est la taille de la table dans la base de données.
Ensuite, la taille des index de table est calculée directement dans le script
sans appeler de gestionnaire d'événement sur la métaclasse Index, la ligne qui
produit les tailles d'index est mise en forme et la taille des index est ajoutée à
la taille totale de la base de données
:
' Claculer la taille des index. Définir des variables pour stocker ces tailles.
Dim X, XMsg, XDataSize
XMsg = ""
for each X in obj.Indexes
XDataSize = 0
' Parcourir les colonnes d'index et lire leur taille ajoutée dans XDataSize
For each C in X.IndexColumns
XDataSize = XDataSize + ColSizes.Item(C.Column)
next
XDataSize = BlockSize * int(obj.Number * XDataSize / BlockSize)
' Mettre en forme le message pour obtenir l'info de taiil dans la fenêtre résultats et la liste de résultats.
XMsg = XMsg & CStr(XDataSize) & "|" & X.ObjectID & vbCrLf
' Ajouter la taille d'index à la taille de table.
RawDataSize = RawDataSize + XDataSize
next
Pour finir, l'information de taille est mise en forme pour sortie (voir
Mise en forme du résultat d'une estimation de taille de base de données). Chaque
table est imprimée sur une ligne distincte à la fois dans les fenêtres Résultats
et Liste de résultats, et sa taille totale incluant toutes les colonnes et index
est fournie
:
' Définir le message global avec la taille de table et tous les index (séparés par un retour à la ligne).
message = CStr(RawDataSize) & "||" & obj.ShortDescription & vbCrLf & XMsg
%GetEstimatedSize% = RawDataSize
End Function
Une fois que toutes les tables ont été traitées, PowerAMC calcule et imprimer la taille totale estimée de la base de données.