Example #1
0
        public void GenerateInstanceFiles(List <DiskVolume> dataDiskVolumes, double sizeFactor)
        {
            Dictionary <string, DatabaseInstanceFile> files = new Dictionary <string, DatabaseInstanceFile>();

            List <DiskVolume> diskVolumes = new List <DiskVolume>();

            if (dataDiskVolumes == null)
            {
                this.DatabaseInstance.ServerInstance.Machine.LoadDiskVolumes(false);
                diskVolumes.AddRange(this.DatabaseInstance.ServerInstance.Machine.DiskVolumes.Values.Where <DiskVolume>(d => (d.DiskVolumeType & FileGroup.DiskVolumeType) > 0).OrderBy(i => i.Number));
            }
            else
            {
                diskVolumes.AddRange(dataDiskVolumes);
            }

            int  q = 0;
            bool primary;
            int  filecount = FileGroup.FileCount != 0 ? FileGroup.FileCount : diskVolumes.Count;

            for (int i = 0; i < filecount; i++)
            {
                DatabaseInstanceFile nf = new DatabaseInstanceFile(this);
                nf.DiskVolumeReference.Guid = diskVolumes[q % diskVolumes.Count].Guid;
                switch (fileGroupType)
                {
                case FileGroupType.Data:
                    nf.DatabaseFileType = DatabaseFileType.Data;
                    break;

                case FileGroupType.Log:
                    nf.DatabaseFileType = DatabaseFileType.Log;
                    break;

                default:
                    throw new NotImplementedException();
                }
                nf.LogicalName = string.Format("{0}_{1}", FileGroupName, i);
                nf.Name        = nf.LogicalName;
                if (fileGroupType == FileGroupType.Log)
                {
                    primary     = false;
                    nf.Filename = nf.LogicalName + ".ldf";
                }
                else if (i == 0 && StringComparer.InvariantCultureIgnoreCase.Compare(FileGroup.FileGroupName, "primary") == 0)
                {
                    primary     = true;
                    nf.Filename = nf.LogicalName + ".mdf";
                }
                else
                {
                    primary     = false;
                    nf.Filename = nf.LogicalName + ".ndf";
                }

                q++;

                // Set minimum file sizes
                nf.AllocatedSpace = Math.Max((long)(FileGroup.AllocatedSpace / filecount * sizeFactor), 0x80000);
                if (primary)
                {
                    nf.AllocatedSpace = Math.Max(nf.AllocatedSpace, 0x300000);
                }
                nf.Save();

                files.Add(nf.Name, nf);
            }

            this.Files = files;
        }
        public void GenerateInstanceFiles(List<DiskVolume> dataDiskVolumes, double sizeFactor)
        {
            Dictionary<string, DatabaseInstanceFile> files = new Dictionary<string, DatabaseInstanceFile>();

            List<DiskVolume> diskVolumes = new List<DiskVolume>();
            if (dataDiskVolumes == null)
            {
                this.DatabaseInstance.ServerInstance.Machine.LoadDiskVolumes(false);
                diskVolumes.AddRange(this.DatabaseInstance.ServerInstance.Machine.DiskVolumes.Values.Where<DiskVolume>(d => (d.DiskVolumeType & FileGroup.DiskVolumeType) > 0).OrderBy(i => i.Number));
            }
            else
            {
                diskVolumes.AddRange(dataDiskVolumes);
            }

            int q = 0;
            bool primary;
            int filecount = FileGroup.FileCount != 0 ? FileGroup.FileCount : diskVolumes.Count;

            for (int i = 0; i < filecount; i++)
            {
                DatabaseInstanceFile nf = new DatabaseInstanceFile(this);
                nf.DiskVolumeReference.Guid = diskVolumes[q % diskVolumes.Count].Guid;
                switch (fileGroupType)
                {
                    case FileGroupType.Data:
                        nf.DatabaseFileType = DatabaseFileType.Data;
                        break;
                    case FileGroupType.Log:
                        nf.DatabaseFileType = DatabaseFileType.Log;
                        break;
                    default:
                        throw new NotImplementedException();
                }
                nf.LogicalName = string.Format("{0}_{1}", FileGroupName, i);
                nf.Name = nf.LogicalName;
                if (fileGroupType == FileGroupType.Log)
                {
                    primary = false;
                    nf.Filename = nf.LogicalName + ".ldf";
                }
                else if (i == 0 && StringComparer.InvariantCultureIgnoreCase.Compare(FileGroup.FileGroupName, "primary") == 0)
                {
                    primary = true;
                    nf.Filename = nf.LogicalName + ".mdf";
                }
                else
                {
                    primary = false;
                    nf.Filename = nf.LogicalName + ".ndf";
                }

                q++;

                // Set minimum file sizes
                nf.AllocatedSpace = Math.Max((long)(FileGroup.AllocatedSpace / filecount * sizeFactor), 0x80000);
                if (primary)
                {
                    nf.AllocatedSpace = Math.Max(nf.AllocatedSpace, 0x300000);
                }
                nf.Save();

                files.Add(nf.Name, nf);
            }

            this.Files = files;
        }