Modification du mécanisme d'estimation de taille de base de données

Par défaut, le mécanisme d'estimation de la taille de base de données utilise des algorithmes standard afin de calculer les tailles des tablespaces, tables, colonnes et index, et les additionne afin de fournir une indication de la taille que la base de données va requérir. Vous pouvez choisir de ne pas utiliser cet algorithme pour l'un ou plusieurs de ces types d'objet lors du calcul ou d'inclure des objets supplémentaires dans le calcul en ajoutant le gestionnaire d'événement GetEstimatedSize sur l'objet approprié dans la catégorie Profile et en saisissant un script afin de calculer sa taille.

  1. Sélectionnez SGBD > Editer le SGBD courant pour afficher le fichier de définition du SGBD, puis développez la catégorie Profile.
  2. Pointez sur la métaclasse pour laquelle vous souhaitez fournir un script afin de calculer la taille d'objet, sélectionnez Nouveau > Gestionnaire d'événement pour afficher une boîte de dialogue de sélection, sélectionnez le gestionnaire d'événement GetEstimatedSize, puis cliquez sur OK afin de l'ajouter à la métaclasse.
  3. Cliquez sur l'onglet Script du gestionnaire d'événement dans le volet de droite, et saisissez le code approprié pour calculer la taille de l'objet choisi.

    Estimate Database Size

    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.