PDA

View Full Version : فرق بین SINGLE_USER و MULTI_USER



AmiN0012
یک شنبه 13 دی 1394, 10:34 صبح
سلام دوستان.فرق بین SINGLE_USER و MULTI_USER در sql چیه.
من ی پروژه دارم که طبق کد برای بکاپ و ریستور که نوشتم میام از بانک بکاّپ میگیرم.حالا اینو تو ی سیستم دیگه ریستور میکنم ارور میگیره به SINGE_USER بودن.
لازم به ذکر هست ورژن های sql متفاوت هست.و ما مجبور شدیم اسکریپت به بانک بدیم.چون بانکو اتچ نمیکرد بخاطر تفاوت ورژن.
بعد ارور هیچ اجازه ای نمیده ما به بانکمون دست بزنیم.عکس یک ادمک کنار بانک میاد به عنوان single_user بودن.ممنون میشم کمکم کنید
کد ریستور من:

//############ Restore ##################
private void RestoreDb(string filename)
{
SqlConnection oconnection = null;
try
{
string command = @"ALTER DATABASE [Dentistry] SET SINGLE_USER with ROLLBACK IMMEDIATE " + " USE master " + " RESTORE DATABASE [Dentistry] FROM DISK= N'" + filename + "'WITH RECOVERY, REPLACE";


this.Cursor = Cursors.WaitCursor;
SqlCommand ocommand = null;


oconnection = new SqlConnection("Data Source=.;Initial Catalog=Dentistry;Integrated Security=True");
if (oconnection.State != ConnectionState.Open)
oconnection.Open();
ocommand = new SqlCommand(command, oconnection);
ocommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("بازیابی پایگاه داده با موفقیت انجام شد", "پیغام ", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
}
catch (Exception ex)
{
MessageBox.Show("پیغام زیر توسط نرم افزار شناسایی شد " + Environment.NewLine + ex.Message + Environment.NewLine + "لطفا پس از بررسی مجدد اقدام نمائید" + Environment.NewLine + " یا با تیم پشتیبانی تماس بگیرید");
return;
}
finally
{
oconnection.Close();
}
}


private void restoree_Click(object sender, EventArgs e)
{
string filename = string.Empty;
OpenFileDialog OpenBackUp = new OpenFileDialog();
OpenBackUp.Filter = @"SQL Backup Files (*.Bak)|*.Bak";
OpenBackUp.FilterIndex = 1;
OpenBackUp.Filter = @"SQL Backup Files (*.*)|";


OpenBackUp.FileName = DateTime.Now.ToString("ddMMyyyy_HHmmss");
if (OpenBackUp.ShowDialog() == DialogResult.OK)
{
filename = OpenBackUp.FileName;
RestoreDb(filename);
}
}

AmiN0012
یک شنبه 13 دی 1394, 12:33 عصر
پاسخ: شما بعد اینکه سینگل یوزر کردید بعد در اخر دوباره باید مولتی یوزر کنید در تابع ریستور

private void RestoreDb(string filename)
{
SqlConnection oconnection = null;
try
{
string command = @"ALTER DATABASE [Dentistry] SET SINGLE_USER with ROLLBACK IMMEDIATE " + " USE master " + " RESTORE DATABASE [Dentistry] FROM DISK= N'" + filename + "'WITH RECOVERY, REPLACE";
this.Cursor = Cursors.WaitCursor;
SqlCommand ocommand = null;
oconnection = new SqlConnection("Data Source=.;Initial Catalog=Dentistry;Integrated Security=True");
if (oconnection.State != ConnectionState.Open)
oconnection.Open();
ocommand = new SqlCommand(command, oconnection);
ocommand.ExecuteNonQuery();
string Alter2 = @"ALTER DATABASE [Dentistry] SET Multi_User";
SqlCommand Alter2Cmd = new SqlCommand(Alter2, oconnection);
Alter2Cmd.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("بازیابی پایگاه داده با موفقیت انجام شد", "پیغام ", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
}
catch (Exception ex)
{
MessageBox.Show("پیغام زیر توسط نرم افزار شناسایی شد " + Environment.NewLine + ex.Message + Environment.NewLine + "لطفا پس از بررسی مجدد اقدام نمائید" + Environment.NewLine + " یا با تیم پشتیبانی تماس بگیرید");
Application.Exit();
}
finally
{
oconnection.Close();
}
}