public DatabaseInstance GenerateDatabaseInstance(ServerInstance serverInstance, Slice slice, DatabaseVersion databaseVersion) { return GenerateDatabaseInstance( serverInstance, slice, databaseVersion, databaseDefinition.DatabaseInstanceNamePattern, databaseDefinition.DatabaseNamePattern, databaseVersion.SizeMultiplier, true); }
public DatabaseInstance GenerateDatabaseInstance(ServerInstance serverInstance, List<DiskVolume> dataDiskVolumes, List<DiskVolume> logDiskVolumes, Slice slice, DatabaseVersion databaseVersion, string namePattern, string databaseNamePattern, double sizeFactor, bool generateFileGroups) { // --- Create the new database instance and set name DatabaseInstance ndi = new DatabaseInstance(databaseDefinition); ndi.ServerInstanceReference.Guid = serverInstance.Guid; ndi.SliceReference.Guid = slice.Guid; ndi.DatabaseVersionReference.Guid = databaseVersion.Guid; ndi.Name = ExpressionProperty.ResolveExpression(ndi, namePattern); ndi.DatabaseName = ExpressionProperty.ResolveExpression(ndi, databaseNamePattern); ndi.Save(); if (generateFileGroups) { ndi.ServerInstance.Machine.LoadDiskVolumes(false); databaseDefinition.LoadFileGroups(false); slice.LoadPartitions(false); List<Partition> partitions = new List<Partition>(slice.Partitions.Values.OrderBy(i => i.Number)); List<FileGroup> filegroups = new List<FileGroup>(databaseDefinition.FileGroups.Values.OrderBy(i => i.Number)); for (int fi = 0; fi < filegroups.Count; fi++) { // --- Create data and "log" file groups --- if (filegroups[fi].LayoutType == FileGroupLayoutType.Monolithic || filegroups[fi].FileGroupType == FileGroupType.Log) { DatabaseInstanceFileGroup nfg = new DatabaseInstanceFileGroup(ndi); nfg.FileGroupType = filegroups[fi].FileGroupType; nfg.FileGroupName = nfg.Name = filegroups[fi].FileGroupName; nfg.FileGroupReference.Guid = filegroups[fi].Guid; nfg.PartitionReference.Guid = Guid.Empty; nfg.AllocatedSpace = (long)(filegroups[fi].AllocatedSpace * sizeFactor); nfg.Save(); nfg.GenerateInstanceFiles(dataDiskVolumes, sizeFactor); } else if (filegroups[fi].LayoutType == FileGroupLayoutType.Sliced) { for (int pi = 0; pi < partitions.Count; pi++) { DatabaseInstanceFileGroup nfg = new DatabaseInstanceFileGroup(ndi); nfg.FileGroupType = filegroups[fi].FileGroupType; nfg.FileGroupName = nfg.Name = string.Format("{0}_{1}", filegroups[fi].FileGroupName, pi); nfg.FileGroupReference.Guid = filegroups[fi].Guid; nfg.PartitionReference.Guid = partitions[pi].Guid; nfg.AllocatedSpace = (long)(filegroups[fi].AllocatedSpace * sizeFactor); nfg.Save(); nfg.GenerateInstanceFiles(dataDiskVolumes, sizeFactor); } } else { throw new NotImplementedException(); } } } return ndi; }
public DatabaseInstance GenerateDatabaseInstance(ServerInstance serverInstance, Slice slice, DatabaseVersion databaseVersion, string namePattern, string databaseNamePattern, double sizeFactor, bool generateFileGroups) { return GenerateDatabaseInstance(serverInstance, null, null, slice, databaseVersion, namePattern, databaseNamePattern, sizeFactor, generateFileGroups); }
/// <summary> /// Initializes a database definition. /// </summary> /// <param name="serverVersion"></param> public void GenerateDefaultChildren(ServerVersion serverVersion, string databaseVersionName) { // If not sliced, then create a default slice of FULL if (databaseDefinition.LayoutType == DatabaseLayoutType.Mirrored || databaseDefinition.LayoutType == DatabaseLayoutType.Monolithic) { Slice sl = new Slice(databaseDefinition) { Name = Constants.FullSliceName, System = databaseDefinition.System, }; sl.Save(); } else { throw new InvalidOperationException(); // Use slicing wizard instead } // Add primary filegroup FileGroupLayoutType fglayout; switch (databaseDefinition.LayoutType) { case DatabaseLayoutType.Sliced: fglayout = FileGroupLayoutType.Sliced; break; case DatabaseLayoutType.Monolithic: case DatabaseLayoutType.Mirrored: fglayout = FileGroupLayoutType.Monolithic; break; default: throw new NotImplementedException(); } FileGroup fg = new FileGroup(databaseDefinition) { Name = Constants.PrimaryFileGroupName, System = databaseDefinition.System, FileGroupType = FileGroupType.Data, LayoutType = fglayout, AllocationType = FileGroupAllocationType.CrossVolume, DiskVolumeType = DiskVolumeType.Data, FileGroupName = Constants.PrimaryFileGroupName, AllocatedSpace = Constants.PrimaryFileGroupSize, FileCount = 0, }; fg.Save(); // Add "log" file group fg = new FileGroup(databaseDefinition) { Name = Constants.LogFileGroupName, System = databaseDefinition.System, FileGroupType = FileGroupType.Log, LayoutType = FileGroupLayoutType.Monolithic, AllocationType = FileGroupAllocationType.CrossVolume, DiskVolumeType = DiskVolumeType.Log, FileGroupName = Constants.LogFileGroupName, AllocatedSpace = Constants.LogFileGroupSize, FileCount = 0 }; fg.Save(); // Create default database version DatabaseVersion dv = new DatabaseVersion(databaseDefinition) { Name = databaseVersionName, System = databaseDefinition.System, ServerVersion = serverVersion, SizeMultiplier = 1.0f, }; dv.Save(); }
public List<Slice> GenerateSlices(string[] sliceNames, long[][] sliceLimits, string[][] partitionNames, long[][][] partitionLimits) { List<Slice> slices = new List<Slice>(); for (int si = 0; si < sliceNames.Length; si++) { Slice ns = new Slice(databaseDefinition); ns.Name = sliceNames[si]; ns.From = sliceLimits[si][0]; ns.To = sliceLimits[si][1]; ns.Save(); ns.GeneratePartitions(partitionNames[si], partitionLimits[si]); slices.Add(ns); } return slices; }
/// <summary> /// Copy contructor for doing deep copy of the <b>Slice</b> objects. /// </summary> /// <param name="old">The <b>Slice</b> to copy from.</param> public Slice(Slice old) : base(old) { CopyMembers(old); }
/// <summary> /// Creates a deep copy of the passed object. /// </summary> /// <param name="old">A <b>Slice</b> object to create the deep copy from.</param> private void CopyMembers(Slice old) { this.from = old.from; this.to = old.to; }
/// <summary> /// Constructor for creating a new entity with object context and parent entity set. /// </summary> /// <param name="context">An object context class containing session information.</param> /// <param name="parent">The parent entity in the entity hierarchy.</param> public Partition(Slice parent) : base(parent.Context, parent) { InitializeMembers(); }