コード例 #1
0
        /// <summary>
        /// Database Backup
        /// </summary>
        /// <param name="backupPath">Path to where backups are sent</param>
        /// <param name="upload"></param>
        /// <param name="useSiteID"></param>
        /// <param name="siteID"></param>
        /// <param name="name"></param>
        /// <param name="threadName"></param>
        /// <param name="connectionString"></param>
        /// <param name="ftpHost"></param>
        /// <param name="ftpUsername"></param>
        /// <param name="ftpPassword"></param>
        /// <param name="ftpPort"></param>
        public static void BackupDatabase(string backupPath, bool upload, bool useSiteID, int siteID,
                                          string name, string threadName, string connectionString, string ftpHost, string ftpUsername,
                                          string ftpPassword, int ftpPort)
        {
            DatabaseBackupOptions options = new DatabaseBackupOptions(backupPath, useSiteID, siteID, name, upload,
                                                                      connectionString,
                                                                      ftpHost, ftpUsername, ftpPassword, ftpPort);

            DoOnStageChanged(DatabaseBackupStage.BackupStarted);

            if (!Directory.Exists(backupPath))
            {
                Directory.CreateDirectory(backupPath);
            }


            // check if we are already backing up the database or not
            using (TimedLock.Lock(lockObject))
            {
                if (_backups.ContainsKey(name))
                {
                    throw new Exception("Backup is already in progress!");
                }

                _backups.Add(name, options);
            }

            DatabaseBackupThread backupThread = new DatabaseBackupThread(options);

            backupThread.HangTimeout = 30;
            Shared.Classes.ThreadManager.ThreadStart(backupThread, threadName, ThreadPriority.Normal);
        }
コード例 #2
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="options"></param>
 public DatabaseBackupThread(DatabaseBackupOptions options)
     : base(options, new TimeSpan())
 {
 }
コード例 #3
0
        /// <summary>
        /// Performs a backup
        /// </summary>
        /// <param name="parameters"></param>
        /// <returns></returns>
        protected override bool Run(object parameters)
        {
            DatabaseBackupOptions options = (DatabaseBackupOptions)parameters;

            try
            {
                string backupFile = String.Format(@"{0}Backup-{4}-{1}{2}{3}.fbk",
                                                  Shared.Utilities.AddTrailingBackSlash(options.Path),
                                                  DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day,
                                                  options.UseSiteID ? options.SiteID.ToString() : options.Name);

                //backup database
                DoOnStageChanged(DatabaseBackupStage.BackingUpDatabase);

                try
                {
                    FirebirdSql.Data.Services.FbBackup backupSvc = new FirebirdSql.Data.Services.FbBackup();
                    backupSvc.ConnectionString = options.ConnectionString;

                    backupSvc.BackupFiles.Add(new FirebirdSql.Data.Services.FbBackupFile(backupFile, 2048));
                    backupSvc.Verbose = true;

                    backupSvc.Options = FirebirdSql.Data.Services.FbBackupFlags.IgnoreLimbo |
                                        FirebirdSql.Data.Services.FbBackupFlags.NoGarbageCollect;

                    backupSvc.Execute();
                }
                catch (Exception err)
                {
                    Shared.EventLog.Add(err);

                    if (!System.IO.File.Exists(backupFile))
                    {
                        return(false);
                    }
                }

                DoOnStageChanged(DatabaseBackupStage.DatabaseBackupComplete);

                // compress it
                DoOnStageChanged(DatabaseBackupStage.CompressingBackup);
                Shared.Classes.ZipFiles.CompressFile(backupFile.Replace(".fbk", ".zip"), backupFile, true);
                DoOnStageChanged(DatabaseBackupStage.BackupCompressed);

                if (!System.IO.File.Exists(backupFile.Replace(".fbk", ".zip")))
                {
                    Shared.EventLog.Add("Zip File Not Found");
                    return(false);
                }

                if (options.Upload)
                {
                    //upload the file
                    DoOnStageChanged(DatabaseBackupStage.SendingFileToServer);

                    ftp uploader = new ftp(options.FTPHost, options.FTPUsername, options.FTPPassword, 2048, true, true, true, options.FTPPort);
                    uploader.Upload(Path.GetFileName(backupFile.Replace(".fbk", ".zip")), backupFile.Replace(".fbk", ".zip"));

                    DoOnStageChanged(DatabaseBackupStage.FileSentToServer);
                }
            }
            catch (Exception err)
            {
                Shared.EventLog.Add(err);
            }
            finally
            {
                using (TimedLock.Lock(lockObject))
                {
                    _backups.Remove(options.Name);
                }

                DoOnStageChanged(DatabaseBackupStage.BackupComplete);
            }

            return(false);
        }