PDA

View Full Version : ایجاد بکاپ از دیتا بیس و ریستور کردن آن



corona
دوشنبه 05 بهمن 1388, 13:27 عصر
سلام دوستان . من از کد زیر برای بکاپ گرفتن از دیتابیسم استفاده می کنم توی برنامه سی شارپم و بدون هیچ مشکلی کار می کنه



cmd = new SqlCommand("BACKUP DATABASE saham TO DISK = '" + _path + "' WITH NAME = 'saham-Full Database Backup' SKIP,NOUNLOAD" +
"BACKUP LOG saham TO DISK = ' " + _path + "'WITH NOFORMAT, NOINIT, NAME = N'Saham-Transaction Log Backup',SKIP, NOREWIND, NOUNLOAD ");
حالا می خوام همین دیتابیس رو ریستور کنم . از کد زیر استفاده می کنم . در ضمن از sql server2008 enterprise edition هم استفاده می کنم . کد زیر رو که توی Query Analyzer خود sql server اجرا می کنم بدون هیچ مشکلی دیتابس ریستور میشه ولی وقتی از تو برنامه سی شارپم می خوام ریستور کنم خطای Exclusive access could not be obtained because the database is in use.Restore database is terminating abnormally.
رو میده




cmd = new SqlCommand(" USE Master GO RESTORE DATABASE [saham] FROM DISK = ' " + _path + "' WITH FILE = 1,NORECOVERY, NOUNLOAD, REPLACE GO"
+ " RESTORE LOG [saham] FROM DISK ='" + _path + "' WITH FILE = 2, NOUNLOAD");



حتی این کد رو هم تست کردم



cmd = new SqlCommand("Alter Database saham SET SINGLE_USER With ROLLBACK IMMEDIATE USE Master GO RESTORE DATABASE [saham] FROM DISK = ' " + _path + "' WITH FILE = 1,NORECOVERY, NOUNLOAD, REPLACE GO"
+ " RESTORE LOG [saham] FROM DISK ='" + _path + "' WITH FILE = 2, NOUNLOAD");



. این کد همونطور که گفتم توی خود sql serever بدون مشکل کار می کنه . تو نت هم خیلی سرچ کردم همشون میگن دیتابیس در حال استفاده است . حالتهای مختلف رو تست کردم .دیتابس رو تو sql server اومدم offline کردم ، detach کردم ، هر کار می کنم بازم همین خطا رو میده . لطفا اگه کسی میدونه مشکل چیه کمک کنه .

saied_genius
دوشنبه 05 بهمن 1388, 16:35 عصر
سلام

اين رو امتحان کن


RESTORE FILELISTONLY
FROM DISK = 'C:\Backup.BAK'

موفق باشيد.

saied_genius
دوشنبه 05 بهمن 1388, 16:39 عصر
RESTORE FILELISTONLY

FROM DISK = 'D:\temp\vernonstoragecenter_db_200601270401.BAK'

RESTORE DATABASE vernonstoragecenter

FROM DISK = 'D:\temp\vernonstoragecenter_db_200601270401.BAK'

WITH RECOVERY,

MOVE 'vernonstoragecenter_data' TO 'D:\MSSQL\Datafiles\data\vernonstoragecenter_data. mdf',

MOVE 'vernonstoragecenter_log' TO 'D:\MSSQL\Datafiles\data\vernonstoragecenter_log.l df'

GO

slashslash2009
دوشنبه 05 بهمن 1388, 18:51 عصر
اگر از ویژوال استدیو بیاید بیرون و فایل exe برنامتونو اجرا کنید و بعدش ریستور کنید دیگه این خطا رو نمیده وقتی دیتابیستون باز باشه و فعال نمیشه ریستور کرد . یا اینکه در قسمت server explorer روی دیتابیستون راست کلیک و close connection کنیم بعدش میشه هنگام کار با VSریستور کرد

corona
دوشنبه 05 بهمن 1388, 21:13 عصر
saied_genius (http://barnamenevis.org/forum/member.php?u=50269) , slashslash2009 (http://barnamenevis.org/forum/member.php?u=90145) عزیز ممنون از جوابهاتون . روشهای هر دوی شما رو امتحان کردم ولی باز هم همون متن خطایی که توی پستم گقتم رو میده .

saied_genius
دوشنبه 05 بهمن 1388, 21:17 عصر
خوب يک راه ديگه

تمام user هاي متصل به database رو اول kill کن و سپس restore کن.

اين ديگه بايد صد در صد جواب بده.

دستورش رو الان يادم نيست ولي بگردي پيدا مي کني.

موفق باشيد.

slashslash2009
سه شنبه 06 بهمن 1388, 00:38 صبح
RESTORE FILELISTONLY
FROM DISK = 'C:\Backup.BAK'

کدتون خیلی خوب بود مثل اینکه سرعتش هم بیشتره در استخراج اون خطا رو هم دیگه نداد واسه من .
corona سعی کن فرمی که میخوای کار رستور رو درونش انجام بدی حداقل قبلش دستور sql دیگه ای رو انجام نده

saied_genius
سه شنبه 06 بهمن 1388, 10:36 صبح
با اين راه حل هايي که ارائه شد ديگه هرگونه مشکلي بايد حل بشه.

آخرين چيزي که به ذهن من مي رسه اينه که ، درايو مورد نظر که قراره restore روي اون انجام بشه رو ، اگر NTFS هستش ، اجازه دسترسي به همه بدهيد و دوباره امتحان کنيد.

البته اين مشکل معمولاً براي Backup پيش مي آيد نه براي restore ولي حالا باز امتحان کن ببين چي ميشه.

موفق باشيد.

corona
سه شنبه 06 بهمن 1388, 12:43 عصر
سلام. دوستان عزیز ممنون از اینکه وقت میزارین واسه همدیگه . خدا رو شکر بالاخره با این کامند جواب گرفتم وبدون هیچ مشکلی ، حتی اینکه نیاز باشه Vs رو ببندم یا Management studio رو ببندم یا هر کاره دیگه ای جواب گرفتم




cmd = new SqlCommand("alter database saham SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;restore database saham from disk ='" + _path + "'WITH REPLACE;ALTER DATABASE SAHAM SET MULTI_USER", conRestor);

behzadk
سه شنبه 06 بهمن 1388, 18:55 عصر
از smo استفاده کنی راحتتری

corona
چهارشنبه 07 بهمن 1388, 09:54 صبح
من تا حالا اصلا ازش استفاده نکردم .