使用 sqlserveragent 的自动 SQL Server 备份实用程序
使用 sqlserveragent 的自动 SQL Server 备份实用程序
 
 
引言
这是一个使用 sqlserveragent 的自动 SQL Server 备份实用程序的 C# (Visual Studio 2005) 示例应用程序。我使用了 SQL-DMO DLL。本文将向您展示如何在 SQL Server 2000 中创建自动备份。
此代码可以在任何安装了 SQL Server 2000(任何版本或 SQL Server 2000 客户端组件)并使用 VB.NET 的 PC 上运行。
SQLDMO(始终安装在 Microsoft SQL Server 2000 或 Microsoft SQL Server 客户端工具之间)。
待办事项
- 首先在相应的文本框中输入您的 SQL Server 用户名和密码
- 设置备份开始日期和备份时间
- 完成此操作后,请手动检查它是否正常工作
手动操作流程
- 运行 SQL Server 企业管理器
- 选择管理选项
- 打开 SQL Server Agent
- 打开“作业”窗口
- 检查作业项是否存在
- 右键单击新创建的作业项,然后会出现一个
- 弹出菜单,然后选择“启动作业”
- 作业完成后,检查 D:\backup 文件夹中是否已创建备份文件
重要函数
添加对 SQL-DMO DLL 的引用
您可以通过在解决方案资源管理器中右键单击项目,然后选择“添加引用”,COM 组件和最新版本的“Microsoft SQLDMO 对象库”来执行此操作。
可用服务器
public void dIsplayServerList(ComboBox cboListName)
{
    try
    {        
        SQLDMO.Application oSQLServerDMOApp = new SQLDMO.Application();
        Info.informationLayer info = new Info.informationLayer();
                
        SQLDMO.NameList oNameList;
        oNameList = oSQLServerDMOApp.ListAvailableSQLServers();
        for (int intIndex = 0; intIndex <= oNameList.Count - 1; intIndex++)
        {
            if (oNameList.Item(intIndex as object) != null)
            {
                cboListName.Items.Add(oNameList.Item(intIndex).ToString());
            }
        }
        if (cboListName.Items.Count > 0) cboListName.SelectedIndex = 0;
        else cboListName.Text = "(Local)";
    }
    catch 
    {
                
    }
}
可用数据库
public void dIsplayDatabases(ComboBox cboDatabase,Info.informationLayer info)
{
        try
        {
            SQLDMO._SQLServer SQLServer = new SQLDMO.SQLServerClass();
 
            cboDatabase.Items.Clear();
            SQLServer.Connect(info.strServerName,info.strLoginName,
                              info.strPwd);
            foreach (SQLDMO.Database db in SQLServer.Databases)
            {
                if (db.Name != null)
                    cboDatabase.Items.Add(db.Name);
            }
            cboDatabase.Sorted = true;
            if (cboDatabase.Items.Count == 0)cboDatabase.Text = "<NO found databases>";
        }
        catch (Exception err)
        {
            info.ErrorMessageDataLayer = err.Message;
        }
}
在服务器代理上创建作业
public void CreateJob_Sql(Info.informationLayer info)
{
    {
        try
        {
            SQLDMO._SQLServer SQLServer = new SQLDMO.SQLServerClass();
            SQLDMO.Job SQLJob = new SQLDMO.Job();
            SQLDMO.JobSchedule SQLSchedule = new SQLDMO.JobSchedule();
            SQLServer.Connect(info.strServerName, info.strLoginName, 
                              info.strPwd);
            switch (SQLServer.JobServer.Status)
            {
            case SQLDMO_SVCSTATUS_TYPE.SQLDMOSvc_Stopped:
                SQLServer.JobServer.Start();
                SQLServer.JobServer.AutoStart = true;
                break;
            }
            SQLJob.Name = info.strDatabaseName;
            SQLJob.Description = "Check and Backup" + info.strDatabaseName;
            SQLServer.JobServer.Jobs.Add(SQLJob);
            SQLJob.Category = "Database Maintenance";
            SQLDMO.JobStep aJobStep = new SQLDMO.JobStep();
            aJobStep.Name = "Step 2: Backup the Database";
            aJobStep.StepID = 1;
            aJobStep.DatabaseName = info.strDatabaseName;
            aJobStep.SubSystem = "TSQL";
            //--->>> If BackUp Folder is Not Found then create BackUp Folder.
            string   DirectoryName = "D:\\BackUp";
            if (Directory.Exists(DirectoryName)==false)
            {
                System.IO.Directory.CreateDirectory(DirectoryName);
            }
            //------>>>
            string sExt;
            sExt="EXEC master.dbo.xp_sqlmaint '-S " + info.strServerName +
                " -U "
                + info.strLoginName + " -P " + info.strPwd + "  -D "
                + info.strDatabaseName
                + " -CkDB -CkAl -CkCat -BkUpMedia DISK -BkUpDB D:\\Backup  "
                + "-BkExt BAK -DelBkUps 2weeks -BkUpOnlyIfClean -Rpt " 
                + "D:\\Backup\\BackDB_Checks.txt'";
            aJobStep.Command = sExt;
            aJobStep.OnSuccessAction
              = SQLDMO_JOBSTEPACTION_TYPE.SQLDMOJobStepAction_QuitWithSuccess;
            aJobStep.OnFailAction
              = SQLDMO_JOBSTEPACTION_TYPE.SQLDMOJobStepAction_QuitWithFailure;
            SQLJob.JobSteps.Add(aJobStep);
            SQLJob.ApplyToTargetServer(info.strServerName);
            aJobStep.DoAlter();
            SQLJob.Refresh();
            aJobStep.Refresh();
        }
        catch (Exception Err)
        {
            info.ErrorMessageDataLayer = Err.Message;
        }
    }
}
在服务器代理上创建作业计划
public void CreateShedule_Sql(Info.informationLayer info)
{
    try
    {
        //it will take backup every week 2 day
        SQLDMO.Job SQLJob = new SQLDMO.Job();
        SQLDMO._SQLServer SQLServer = new SQLDMO.SQLServerClass();
        SQLDMO.JobSchedule SQLSchedule = new SQLDMO.JobSchedule();
        SQLServer.Connect(info.strServerName, info.strLoginName, info.strPwd);
        SQLJob = SQLServer.JobServer.Jobs.Item(info.strDatabaseName);
        // create a new JobSchedule object
        SQLSchedule.Name = "Weekly Backup";
        SQLSchedule.Schedule.FrequencyType
            = SQLDMO.SQLDMO_FREQUENCY_TYPE.SQLDMOFreq_Weekly;
        SQLSchedule.Schedule.FrequencyInterval = 2;
        SQLSchedule.Schedule.FrequencyRecurrenceFactor = 2; 
        // // start on Feb18, 2000 - at 12.55
        SQLSchedule.Schedule.ActiveStartDate = info.intStartDate;
        SQLSchedule.Schedule.ActiveStartTimeOfDay = info.intStartTime;
        ////  this schedule has no end time or end date
        SQLSchedule.Schedule.ActiveEndDate = 99991231;
        SQLSchedule.Schedule.ActiveEndTimeOfDay = 235959;
        ////  add the schedule to the Job
        SQLJob.BeginAlter();
        SQLJob.JobSchedules.Add(SQLSchedule);
        SQLJob.DoAlter();
        //SQLJob.JobSchedules.Refresh();
        info.ErrorMessageDataLayer = "New Sql Job [Databasename= " 
            + info.strDatabaseName + " ]Successfully Created.  ";
    }
    catch (Exception err)
    {
        info.ErrorMessageDataLayer = err.Message;
    }
}
历史
- 2006 年 10 月 5 日:初始发布




