使用 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 日:初始发布