مثال کاربردی در زبان #C برای پشتیبان گیری خودکار در زمانهای معین از یک بانک اطلاعاتی SQL
این یک مثال کاربردی در زبان #C برای پشتیبان گیری خودکار در زمانهای معین از یک بانک اطلاعاتی SQL بوسیله Microsoft SQL Server Agent می باشد. دراین مثال از کامپوننت SQL-Demo Dll استفاده شده است. این برنامه برروی کامپیوتری که SQL Server 2000 و همچنین VS2005 برروی آن نصب شده باشد اجرا می گردد.
SQLDMO در زمان نصب SQL Server و یا SQL Client نصب می گردد. بعد از اجرای برنامه ابتدا در EditBox مربوطه نام سرور و نام کاربری و کلمه عبور را وارد نمایید وسپس لینک Connect را کلیک نمایید تا لیست بانکهای اطلاعات موجود به Combobox زیر آن اضافه شود حال یک بانک را انتخاب و سپس زمانهای پشتیبان گیری را از طریق کنترلهای مربوطه بر روی فرم بعد از تنظیمات و فشردن دکمه Craete Backup می توانید بصورت دستی جهت حصول از صحت عملکرد برنامه آن را کنترل کنید.
جهت اینکار وارد SQL Server Enterprise شوید و سپس Manegement Option را انتخاب کنید در مرحله بعد SQL Server Agent را باز کنید درمرحله بعد پنجره Job را باز کنید.کنترل کنید که آیا ایتم Job تعریفی موجود می باشد یا خیر.سپس برروی Job که اخیراً ساخته شده است کلیک راست و سپس گزینه Start Job را کلیک نمایید و سپس که آیا در مسر ذکر شده فایلهای پشتیبان فایل Backup ساخته شده موجود می باشد یا خیر.
اضافه نمودن Refrence مربوط به SQL Demo DLl به پروژه
برای این کار می توانید در پنجره Solution Explorer کلیک راست و سپس گزینه Add Reference را کلیک و در پنجره باز شده گزینه Microsoft SQLDMO Object Library را انتخاب و OK نمایید. توابع و کدهای بکاررفته در این پروژه بشرح زیر می باشد.
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).ToS tring());
}
}
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.strLogin Name,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 = "";
}
catch (Exception err)
{
info.ErrorMessageDataLayer = err.Message;
}
}
ساختن Job در SQL Server Agent
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;
}
}
ساخت زمانبندی Job درSQL Server Agent
public void CreateShedule_Sql(Info.informationLayer info)
{
try
{
//it will take bkp 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;
// // set backup start date
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 + " ]Sucessfully Created. ";
}
catch (Exception err)
{
info.ErrorMessageDataLayer = err.Message;
}
}
نگارنده : زهرا صحرايي تاریخ ارسال : 1389/3/2-00:13:19