Esempio n. 1
0
        private void RestoreAtDateExecute(ServerAccess ba, SqlServerAccess sa, FileInfo f, string dbName, RestoreOption opt)
        {
            try
            {
                using (new NetworkConnection(ba.uri, new NetworkCredential(ba.username, ba.password)))
                {
                    var filePath = f.FullName;
                    using (new NetworkConnection(sa.uri, new NetworkCredential(sa.username, sa.password)))
                    {
                        string destPath = Path.Combine(sa.uri, sa.folder, f.Name);
                        if (File.Exists(destPath))
                        {
                            File.Delete(destPath);
                        }
                        File.Copy(filePath, destPath); var bakFilePath = destPath;
                        destPath = destPath.Replace(sa.uri, sa.disk);

                        SMOHelper restoreInstance = new SMOHelper(sa);
                        restoreInstance.Restore(destPath, dbName, opt);
                        if (File.Exists(bakFilePath))
                        {
                            File.Delete(bakFilePath);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 下载文件
        /// </summary>
        /// <returns></returns>
        public string Opt_DownloadFile()
        {
            if (!IsAdmin)
            {
                return("没有权限");
            }
            string BackupName = Request["BackupName"];

            var backupItem = SMOHelper.GetBackups().First(item => item.IsDeleted == false && item.BackupName == BackupName);

            if (backupItem == null || !File.Exists(backupItem.BackupFullPath))
            {
                return("参数异常");
            }

            using (FileStream fs = new FileStream(backupItem.BackupFullPath, FileMode.Open))
            {
                const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
                byte[]     buffer    = new byte[ChunkSize];

                long dataLengthToRead = fs.Length;//获取下载的文件总大小
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(BackupName + ".bak"));
                while (dataLengthToRead > 0 && Response.IsClientConnected)
                {
                    int lengthRead = fs.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
                    Response.OutputStream.Write(buffer, 0, lengthRead);
                    Response.Flush();
                    dataLengthToRead = dataLengthToRead - lengthRead;
                }
            }
            return("");
        }
Esempio n. 3
0
        public string Opt_Restore()
        {
            if (!IsAdmin)
            {
                return("没有权限");
            }

            string backupName = Request["backupName"];

            SMOHelper.Restore(backupName);
            return("操作成功");
        }
Esempio n. 4
0
        public string Opt_R_emove()
        {
            if (!IsAdmin)
            {
                return("没有权限");
            }

            string backupName = Request["backupName"];

            SMOHelper.DeleteBackup(backupName);
            return("操作成功");
        }
Esempio n. 5
0
        private void RestoreAtTimeExecute(ServerAccess ba, SqlServerAccess sa, string c, string dbName, DateTime time, RestoreOption opt)
        {
            try
            {
                using (new NetworkConnection(ba.uri, new NetworkCredential(ba.username, ba.password)))
                {
                    string        path             = Path.Combine(ba.uri, ba.dailyfolder, c);
                    DirectoryInfo dir              = new DirectoryInfo(path);
                    FileInfo[]    files            = dir.GetFiles("*.bak").OrderByDescending(p => p.CreationTime).ToArray();
                    var           f                = files.FirstOrDefault();
                    var           filePath         = f.FullName;
                    var           creationDate     = f.CreationTime;
                    FileInfo[]    transactionFiles = dir.GetFiles("*.trn").OrderByDescending(p => p.CreationTime).ToArray();
                    using (new NetworkConnection(sa.uri, new NetworkCredential(sa.username, sa.password)))
                    {
                        string destPath = Path.Combine(sa.uri, sa.folder, f.Name);
                        if (File.Exists(destPath))
                        {
                            File.Delete(destPath);
                        }
                        File.Copy(filePath, destPath);
                        var bakFilePath          = destPath;
                        var transactionFilesPath = CopyAllTransactionFiles(transactionFiles, sa, creationDate, time);

                        destPath = destPath.Replace(sa.uri, sa.disk);
                        var transactionFilesDestPath = new List <string>();
                        foreach (var tf in transactionFilesPath)
                        {
                            transactionFilesDestPath.Add(tf.Replace(sa.uri, sa.disk));
                        }

                        SMOHelper restoreInstance = new SMOHelper(sa);
                        restoreInstance.RestoreAtTime(destPath, transactionFilesDestPath, time, dbName, opt);
                        if (File.Exists(bakFilePath))
                        {
                            File.Delete(bakFilePath);
                        }
                        foreach (var fileToDel in transactionFilesPath)
                        {
                            if (File.Exists(fileToDel))
                            {
                                File.Delete(bakFilePath);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
            }
        }
Esempio n. 6
0
 public string Opt_RestoreBackup()
 {
     try
     {
         var filePath = Request["FullPath"];
         SMOHelper.RestoreFile(filePath);
         return("还原成功");
     }
     catch (Exception e)
     {
         return(e.Message);
     }
 }
Esempio n. 7
0
        private async Task SqlOnClickExecute(SqlServerAccess sa)
        {
            SMOHelper restoreInstance = new SMOHelper(sa);
            var       bddList         = restoreInstance.GetDatabase();

            await Dispatcher.BeginInvoke(DispatcherPriority.Send, (ThreadStart)(() =>
            {
                SourceDatabases.Clear();
                foreach (var bdd in bddList)
                {
                    SourceDatabases.Add(bdd);
                }
            }));
        }
Esempio n. 8
0
        /// <summary>
        /// 备份系统
        /// </summary>
        /// <returns></returns>
        public string Opt_Backup()
        {
            if (!IsAdmin)
            {
                return("没有权限");
            }

            string backupName = Request["BackupName"];
            string remark     = Request["remark"];

            SMOHelper.Backup(backupName, remark);

            BLL.OperationRecordBLL.Add(TModel.MID, ChangeType.O_BFWZ, "备份网站");

            return("操作成功");
        }
Esempio n. 9
0
        public string Opt_GetList()
        {
            var backups = SMOHelper.GetBackups();

            totalCount = backups.Count();
            int idx  = 0;
            var list = backups.Skip((PageIndex - 1) * PageSize).Take(PageSize).Select(item => new
            {
                ID         = ++idx,
                BackupName = item.BackupName,
                BackupTime = item.BackupTime.ToString("yyyy-MM-dd HH:mm:ss.fff"),
                Size       = item.GetSizeStr(),
                Remark     = item.Remark
            });

            return(JavaScriptConvert.SerializeObject(new { PageData = list.ToList(), TotalPage = TotalPage() }));
        }
Esempio n. 10
0
 protected override void SetPowerZone()
 {
     BackupItems = SMOHelper.GetBackups();
 }
Esempio n. 11
0
        private async Task ShrinkFileExecute(SqlServerAccess sa)
        {
            SMOHelper instance = new SMOHelper(sa);

            instance.ShrinkAllDBFile();
        }
Esempio n. 12
0
        private async Task ShrinkExecute(SqlServerAccess sa, string db)
        {
            SMOHelper instance = new SMOHelper(sa);

            instance.Shrink(db);
        }
Esempio n. 13
0
        private async Task CleanExecute(SqlServerAccess sa, RestoreOption opt, string db)
        {
            SMOHelper instance = new SMOHelper(sa);

            instance.Clean(db, opt);
        }