PDA

View Full Version : مشکل در RESTORE کردن Bakup در MsSql2005



merlin_vista
یک شنبه 19 اسفند 1386, 14:47 عصر
با سلام :
من با استفاده از کد زیر از دیتابیس روی سرور Bakup میگیرم :‌

ALTER PROCEDURE [dbo].[spBackupDB]
(
@strPath nvarchar(255)
)
AS
BACKUP DATABASE link TO DISK= @strPath


ولی موفعی که میخواهم آن را RESTORE کنم با دستور زیر :

restore database link from disk='D:\Bakup.BAK' with replace

این خطا را میده :‌

Msg 3102, Level 16, State 1, Line 1
RESTORE cannot process database 'link' because it is in use by this session. It is recommended that the master database be used when performing this operation.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.


میشه دلیل این خطا را بدگین :گریه:

Elham_gh
یک شنبه 19 اسفند 1386, 15:24 عصر
شما اگر جای دیگه ای یا با دستور دیگه ایی به DB وصل هستید. تمام صفحات Query تان را ببندید و دوباره دستورتان را اجرا کنید.

merlin_vista
یک شنبه 19 اسفند 1386, 15:35 عصر
شما اگر جای دیگه ای یا با دستور دیگه ایی به DB وصل هستید. تمام صفحات Query تان را ببندید و دوباره دستورتان را اجرا کنید.

همان دفعه اول هم هیچ نوع درخواستی SQL نداشت و هیچ کجا ازش استفاده نمیکردم .
ولی به هر حال :
حتی یک بار هم دیتابیس را Ofline و دوباره Online کردم . ولی باز هم همین پیغام را میده :گریه:

Behrouz_Rad
یک شنبه 19 اسفند 1386, 15:40 عصر
دیتابیسی که in-use هست رو که نمیشه replace کنی!
باید تمام پروسه های مربوط به اتصال بانک رو Kill کنی و با master به سرور متصل بشی یا use master کنی که مسلما هیچ هاستی این اجازه رو بهت نمیده.

موفق باشید.

merlin_vista
یک شنبه 19 اسفند 1386, 15:45 عصر
دیتابیسی که in-use هست رو که نمیشه replace کنی!
باید تمام پروسه های مربوط به اتصال بانک رو Kill کنی و با master به سرور متصل بشی یا use master کنی که مسلما هیچ هاستی این اجازه رو بهت نمیده.

موفق باشید.

1 - آقای راد پس اگه بخواهم بکاپ را در دیتابیس روی هاست Restore کنم باید چه کار کنم .

2 - اگه بخواهم فایل Bakup را روی لوکال Restor کنم چی ؟

ممنون

merlin_vista
یک شنبه 19 اسفند 1386, 15:53 عصر
واسه Restor در SQL Server Management Studio این پیغام را میده . :متفکر:
تصویر ضمیمه شده است

Behrouz_Rad
یک شنبه 19 اسفند 1386, 16:07 عصر
فایل Backup رو باید برای ادمین بفرستی تا اون واست Restore کنه یا اگر کنترل پنل سایتت امکان Restore رو میده از طریق اون عمل کنی.

موفق باشید.

merlin_vista
یک شنبه 19 اسفند 1386, 16:15 عصر
خوب پس چرا روی کامپیوتر خودم (لوکال) چرا این خطا را میده ! میشه بگید دلیل این خطا چیه ؟‌ و چطور باید حل کردش !

Behrouz_Rad
یک شنبه 19 اسفند 1386, 16:34 عصر
اگر هیچ کانکشنی به دیتابیست نیست و همه kill هستن، use master کن و سپس اسکریپت Restore رو اجرا کن.

موفق باشی.

reza_rad
دوشنبه 20 اسفند 1386, 07:54 صبح
خوب پس چرا روی کامپیوتر خودم (لوکال) چرا این خطا را میده ! میشه بگید دلیل این خطا چیه ؟‌ و چطور باید حل کردش !
دارید ویزاردی restore می کنید یا اسکریپتی؟
احتمالا آدرس فایل های دیتابیست که قراره اونجا restore بشه وجود نداره.

merlin_vista
دوشنبه 20 اسفند 1386, 08:00 صبح
دارید ویزاردی restore می کنید یا اسکریپتی؟
احتمالا آدرس فایل های دیتابیست که قراره اونجا restore بشه وجود نداره.

نه ویزارد دارم ریستور میکنم / :افسرده:
ولی با اسکریپت هم ریستور کردم بازم پیام داد :متفکر:

reza_rad
دوشنبه 20 اسفند 1386, 08:05 صبح
نه ویزارد دارم ریستور میکنم
ادرس دیتا فایل های دیتابیس تون درسته؟

احتمالا آدرس فایل های دیتابیست که قراره اونجا restore بشه وجود نداره.

Sub Zero
دوشنبه 20 اسفند 1386, 09:29 صبح
اگه قصد انجام این کار رو از طریق دستورات خود Sql رو دارید از این لینک (http://msdn2.microsoft.com/en-us/library/ms186858(printer).aspx) استفاده کنید .
من خودم از طریق CLR و داخل خود برنامم (VB.Net) این کار رو انجام میدم :

Public Shared Sub RestoreBackup(ByVal ConnectionStr As String, ByVal DevicePath As String)
Using cnn As New SqlConnection(ConnectionStr)
cnn.Open()
Dim DBName As String = cnn.Database
cnn.ChangeDatabase("master")
Dim Srvcon As New ServerConnection(cnn)
Dim Srv As New Server(Srvcon)
' Create backup device item for the backup
Dim bdi As New BackupDeviceItem(DevicePath, DeviceType.File)
' Create the restore object
Dim Restore As New Restore()
'cnn.Close()
With Restore
.Devices.Add(bdi)
.NoRecovery = False
.ReplaceDatabase = True
.Database = DBName
' Restore the database
.SqlRestore(Srv)
End With
End Using
End Sub