PDA

View Full Version : Error هنگام Restore کردن در SQL



پرستو پارسایی
یک شنبه 31 فروردین 1399, 01:56 صبح
من در یک پروژه از ریستور زیر استفاده میکردم و کار میکرد الان با اضافه کردن چند تیبل جدید بک آپ میگیره ولی ریستور نمیکنه و اروری میده مبنی بر در حال استفاده بودن دیتابیس . در این حالت اگر سیستم رو ریستارت کنم بعد دوباره در پروژه ریستور کنم کار میکنه ممنون میشم دوستان در صورت اطلاع از
این مشکل من رو راهنمایی کنند سپاسگزارم

Dim Open1 As New OpenFileDialog
Open1.FileName = "DB"
Open1.FilterIndex = 1
If Open1.ShowDialog = Windows.Forms.DialogResult.OK Then
Dim str As String = "\DB_Design.mdf"
Dim con As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DB_Design.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
con.Open()
Dim cmd As New SqlCommand()
SqlConnection.ClearAllPools()
cmd.Connection = con
cmd.CommandType = CommandType.Text
con.ChangeDatabase("master")
cmd.CommandText = "USE MASTER RESTORE DATABASE [" + System.Windows.Forms.Application.StartupPath & str + "] FROM DISK = N'" + Open1.FileName.ToString + " '"
cmd.ExecuteNonQuery()
con.Close()
End If

hamidrezax1
یک شنبه 31 فروردین 1399, 04:01 صبح
سلام دوست عزیز

RESTORE DATABASE [نام دیتا بیس] FROM DISK = N'مسیر فایل بک آپ' WITH FILE = 2, NOUNLOAD, STATS = 10

ShayanFiroozi
یک شنبه 31 فروردین 1399, 04:04 صبح
سلام ،

محتمل ترین دلیلش اینه که شما زمانی که میخواین یه دیتابیس رو Restore کنین یعنی در واقع دارین اونو پاک میکنین !! پس SQL Server جلوی این کار رو میگیره چون Service Based هستش و هیج تضمینی نیست که اون لحظه چند تا کانکشن به اون دیتابیس وصله.

شما باید اول دیتابیس رو از حالت Share و یا Multi User خارج کنین و اونو به Single User تبدیل کنین و بعد از عملیات Restore دوباره به حالت نرمال برگردونین.

بنده 10 سالی هست VB کار نکردم و Syntax هاش یادم رفته ! این کد با سی شارپ هستش ، زحمت تبدیل رو بکشین :

*** ضمنا در خصوص از دست رفتن اطلاعاتتون دقت کنین ، قبلش حتما یک بک آپ بگیرین.


public void Restore(string Filepath)
{
try
{
if(con.State == ConnectionState.Closed)
{
con.Open();
}
SqlCommand cmd1 = new SqlCommand("ALTER DATABASE [" + Database + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ", con);
cmd1.ExecuteNonQuery();
SqlCommand cmd2 = new SqlCommand("USE MASTER RESTORE DATABASE [" + Database + "] FROM DISK='" + Filepath + "' WITH REPLACE", con);
cmd2.ExecuteNonQuery();
SqlCommand cmd3 = new SqlCommand("ALTER DATABASE [" + Database + "] SET MULTI_USER", con);
cmd3.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
con.Close();
}

پرستو پارسایی
شنبه 06 اردیبهشت 1399, 22:15 عصر
از دوستان کمال تشکر رو دارم سپاس