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.
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.
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) ' First compute global database setting variable we will need. ' Get table size and keep column size for future use Dim ColSizes, TblSize, ColSize, C Set ColSizes = CreateObject("Scripting.Dictionary") TblSize = 0 ' May be changed to take into account table definition initial size. for each C in obj.Columns ' Start browsing table columns and use event handler defined on column metaclass (if it exists). ColSize = C.GetEstimatedSize(message, false) ' Store column size in the map for future use in indexes. ColSizes.Add C, ColSize ' Increase the table global size. TblSize = TblSize + ColSize next Dim RawDataSize RawDataSize = BlockSize * int(obj.Number * TblSize / BlockSize) ' At this point, the RawDataSize is the size of table in database.
' Now calculate index sizes. Set up variables to store indexes sizes. Dim X, XMsg, XDataSize XMsg = "" for each X in obj.Indexes XDataSize = 0 ' Browsing index columns and get their size added in XDataSize For each C in X.IndexColumns XDataSize = XDataSize + ColSizes.Item(C.Column) next XDataSize = BlockSize * int(obj.Number * XDataSize / BlockSize) ' Format the display message in order to get size information in output and result list. XMsg = XMsg & CStr(XDataSize) & "|" & X.ObjectID & vbCrLf ' Add the index size to table size. RawDataSize = RawDataSize + XDataSize next
' set the global message to table size and all indexes (separate with carriage return). 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.