65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 sqlserveragent 的自动 SQL Server 备份实用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.11/5 (11投票s)

2006年10月5日

CPOL

1分钟阅读

viewsIcon

72426

downloadIcon

3473

使用 sqlserveragent 的自动 SQL Server 备份实用程序

Sample Image - Sql_backup_utility.jpg

引言

这是一个使用 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 客户端工具之间)。

待办事项

  1. 首先在相应的文本框中输入您的 SQL Server 用户名和密码
  2. 设置备份开始日期和备份时间
  3. 完成此操作后,请手动检查它是否正常工作

手动操作流程

  1. 运行 SQL Server 企业管理器
  2. 选择管理选项
  3. 打开 SQL Server Agent
  4. 打开“作业”窗口
  5. 检查作业项是否存在
  6. 右键单击新创建的作业项,然后会出现一个
  7. 弹出菜单,然后选择“启动作业”
  8. 作业完成后,检查 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 日:初始发布
© . All rights reserved.