PDA

View Full Version : سوال: Restore Database



mgh64120
جمعه 21 آبان 1389, 18:49 عصر
با عرض سلام و خسته نباشيد خدمت سروران گرامي
باز هم سئوال در مورد "نحوه بازگرداني اطلاعات پايگاه داده SQLServer " يا همون Restore Database
مي دونم اين سئوال خيلي تكراري است و پاسخ هاي مكرر و صحيحي در اين مورد داده شده.
ولي سئوال من كمي فرق ميكنه.
من در پروژه ام وقتي فرم اوليه لود ميشه يك بار به پايگاه داده وصل شده و اطلاعاتي رو دريافت مي كنم و اتصال رو با پايگاه داده قطع و حتي شي اتصال داده (Con) رو هم از بين مي برم(Con = Nothing)
حال همين وصل و قطع شدن به پايگاه داده، باعث ميشه كه من نتونم با استفاده از فايل پشتيباني كه قبلا تهيه نموده پايگاه داده رو Restore كنم و پيغام درحال استفاده بودن پايگاه داده رو ميده.
پيشاپيش از توجه و كمك عزيزان كمال قدرداني رو دارم.
قابل توضيح كه من با VB.Net به SQLServer2005 با استفاده از SQLEXPRESS وصل ميشم و در ادامه كدهايي كه در پروژم استفاده مي كنم قرار ميدم.




Dim Con AsNew SqlConnection("Server=.\sqlexpress;Integrated Security=True;database=Day")


Dim DA As SqlDataAdapter

Dim DS As DataSet : Dim DV As DataView
'
PrivateSub frmLogin_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load
'
DA = New SqlDataAdapter("SELECT SanNo, UserName, Password FROM ListSandooq", Con)






DS = New DataSet

DA.Fill(DS, "ListSandooq")
DV = New DataView(DS.Tables("ListSandooq"))
cboUserName.DataSource = DS.Tables("ListSandooq")
cboUserName.DisplayMember = "UserName"
cboUserName.ValueMember =




"Password"

'

Me.DataBindings.Clear()
Me.DataBindings.Add("Tag", DV, "SanNo")
'
If cboUserName.SelectedIndex = -1 Then
cboUserName.SelectedIndex = 0
EndIf
If Con.State = ConnectionState.Open Then Con.Close()
EndSub






و اين هم كد بازگرداني :






Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click






Dim strSql AsString = "USE master; RESTORE DATABASE [Day]" & _





" FROM DISK ='" & Replace(txtMasir.Text, "rar", "bak") & "'"




Dim cmd = New SqlCommand(strSql, Con)

Try
cmd.ExecuteNonQuery()
'
MessageBox.Show(

"عمليات بازگرداني با موفقيت انجام شد.", "", MessageBoxButtons.OK, MessageBoxIcon.Information)

If Con.State = ConnectionState.Open Then Con.Close()

If chkRar.Checked = TrueThen
IfMy.Computer.FileSystem.FileExists(Replace(txtMas ir.Text, "rar", "bak")) = TrueThen
My.Computer.FileSystem.DeleteFile(Replace(txtMasir .Text, "rar", "bak"))
EndIf
EndIf
Me.Dispose()
Catch ex As SqlException
MessageBox.Show("عمليات بازگرداني با خطا مواجه شد.", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Warning)
EndTry
End Sub







:لبخندساده::گیج:

Ghaisard
جمعه 21 آبان 1389, 20:12 عصر
سلام

شما اول بايد ديتابيس رو در حالت Single User بذاري تا ارتباط كاربراي ديگه با ديتابيس قطع بشه. چون ممكنه كاربراي ديگه‌اي در حال استفاده از ديتابيس باشن.

قبل از Restore كردن كد SQL زير رو اجرا كن:



ALTER DATABASE <dbname> SET SINGLE_USER WITH ROLLBACK IMMEDIATE

mgh64120
شنبه 22 آبان 1389, 14:39 عصر
چون ممكنه كاربراي ديگه‌اي در حال استفاده از ديتابيس باشن.

سلام با تشكر از شما، خدمتتون عرض كنم كه
اول : برنامه من هنوز مراحل پاياني طراحي رو طي مي كنه و هنوز توزيع نشده و در شبكه قرار نداره كه كاربراي ديگه ازش استفاده كنند.
دوم : وقتي اين قطعه كد اتصال رو از برنامه حذف ميكنم برنامه عمل Restore رو با موفقيت انجام ميده ولي پس از اينكه قطعه كد رو به برنامه اضافه ميكنم همومن خطا رو ميده!
اگه ممكنه باز هم راهنماييم كنيد.
متشكرم

:لبخندساده::گریه:

Ghaisard
یک شنبه 23 آبان 1389, 20:09 عصر
روي شبكه هم نباشه براي اينكه بخواي restore كني يا فايل پايگاه داده رو حذف كني اگه
كدي رو كه توي پست بالا گفتم، قبل از restore اجرا كني ديگه مشكلي پيش نمياد.

mgh64120
دوشنبه 24 آبان 1389, 11:10 صبح
سلام دوست عزيز
ممنون از توجهتان. من هنوز اين كد رو امتحان نكردم
اگه ممنكه كدي رو كه براي بازگرداندن ديتابيس از حالت Single User به حالت عادي يعني Multi User برام بذاريد.

Ghaisard
دوشنبه 24 آبان 1389, 19:59 عصر
ALTER DATABASE <dbname> SET MULTI_USER