PDA

View Full Version : مشکل restore کردن بکاپ



hojjat_gh
سه شنبه 19 شهریور 1387, 10:55 صبح
با سلام
من میدونم که این موضوع بسیار تکراریه ولی کدهایی که بود نتونست منو کمک کنه
من میخوام با کوییری ها بکاپم رو ریستور کنم من این کوییری رو نوشتم:

CREATEPROC RESTOREBACKUP
@BACKUPPATH nvarchar(50)
AS
USE [master]
IFEXISTS(SELECTnameFROMsys.databasesWHEREname= N'DB')
DROPDATABASE [DB]
RESTOREDATABASE [DB] FROMDISK= @BACKUPPATH
GO

ولی به خط چهار گیره میده میخواستم بدونم اگه منطق کوییری اشتباهه شکل صحیحش چیه؟
البته من این رو تو انجمن اس کیو ال مطرح کردم ولی به جواب نرسیدم

fakhriamir
سه شنبه 19 شهریور 1387, 13:29 عصر
شما دیتابیس مستر رو می خوای ریاستور کنی
خوب معلومه چون سیستمی هست اجازه این کار رو نمی ده
USE [master]

hojjat_gh
سه شنبه 19 شهریور 1387, 13:54 عصر
درسته من اشتباه کردم حالا من sp رو به این شکل اصلاح کردم

و من sp زیر رو داخل دیتابیس master نوشتم :

CREATEPROC RestoreBackups
@BACKUPPATH nvarchar(50)
AS
RESTOREDATABASE [db] FROMDISK= @BACKUPPATH
GO

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

publicvoid RestoreBackups(string BACKUPPATH)
{
SqlCommand cmd = newSqlCommand();
cmd.CommandText = "RestoreBackups";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@BACKUPPATH", BACKUPPATH);
mycnrestore=newSqlConnection("server=(local);database=master;integrated security=true;");
cmd.Connection = mycnrestore;
if (mycnrestore.State == ConnectionState.Closed)
{
mycnrestore.Open();
}
cmd.ExecuteNonQuery();
mycnrestore.Close();
mycnrestore.Dispose();

ایا این کدها مشکل دارند
چون در موقع ریستور به من میگه دیتابیست در حال استفاد شدنه

Blackk_lightt
سه شنبه 19 شهریور 1387, 14:09 عصر
سلام
فکر کنم این کمکت کنه :
http://barnamenevis.org/forum/showthread.php?t=118712

hojjat_gh
سه شنبه 19 شهریور 1387, 22:30 عصر
دوست عزیز ممنون ولی باز هم نتونست ریستور کنه
من از روش دوم در اون تاپیک گفته شده بود استفاده کردم ولی فقط اومده و الان نه تنها ریستور نکرد بلکه دیتابیس منو به حالت SINLE_USER در اورده که من نمیدونم چطور برش گدونم !؟

hojjat_gh
چهارشنبه 20 شهریور 1387, 11:14 صبح
دوستان کسی میدونه این ارور مل چیه:

The tail of the log for the database "DB" has not been backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose. Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.
من این بار از این روش استفاده کردم وکدها ایناند که ارور بالا رو داده:


SqlConnection mycn = newSqlConnection("server=(local);database=master;integrated security=true;");
mycn.Open();
SqlCommand cmd = newSqlCommand();
cmd.CommandText =
"ALTER DATABASE DB SET SINGLE_USER WITH ROLLBACK IMMEDIATE" +
" USE master; RESTORE DATABASE DB FROM DISK ='E:\\zzz.bak'";
cmd.Connection = mycn;
cmd.ExecuteNonQuery(); ");
mycn.Close();
//*******************//
mycn.Open();
cmd.CommandText =
"ALTER DATABASE DB SET MULTI_USER ";
cmd.Connection = mycn;
cmd.ExecuteNonQuery();
mycn.Close();

amin_alexi
چهارشنبه 20 شهریور 1387, 12:23 عصر
سلام
اينها رو به آخره دستورت اضافه كن ببين جواب ميده

WITH NORECOVERY,Replace

در ضمن سعي كن اول از محيط خود SQL دستور كامل رو اجرا كني اگه جواب داد بيار تو محيط كد !!

hojjat_gh
چهارشنبه 20 شهریور 1387, 14:17 عصر
من کدهایی که دادید رو گذاشتم ولی ارور زیر رو میده:
ALTER DATABASE is not permitted while a database is in the Restoring state.
ALTER DATABASE statement failed.
و دیتابیس هم در اس کیو ال در حالت سینگل یوزر قرار گرفته
و اجازه کاری رو به من نمیده
چطور میشه اون رو از این حالت در اورد؟


در ضمن سعي كن اول از محيط خود SQL دستور كامل رو اجرا كني اگه جواب داد بيار تو محيط كد !!
میشه بگی چطوری ؟

amin_alexi
چهارشنبه 20 شهریور 1387, 14:38 عصر
Error اول براي اينه كه DataBase داره Restore ميشه در حالي كه شما مي خواي Alter كني
Alter رو يك جا ديگه بنويس !
يعني وقتي Restor تمام شد !

میشه بگی چطوری ؟
منظورم اينه كه اول از درستي دستور SQL مطمئن شو و بعد داخل كد استفاده كن

mehrnoosh_al62
چهارشنبه 20 شهریور 1387, 15:20 عصر
دوست عزیز
دستور Use Master رو قبل از دستور Alter قرار بده
در ضمن نیازی به نوشتن دستور "ALTER DATABASE DB SET MULTI_USER ";
نیست

hojjat_gh
چهارشنبه 20 شهریور 1387, 23:33 عصر
Error اول براي اينه كه DataBase داره Restore ميشه در حالي كه شما مي خواي Alter كني
Alter رو يك جا ديگه بنويس !
يعني وقتي Restor تمام شد !

چطور میتونم بفهمم که ریستور تموم شده یا نه؟
چون بعد از اینکه تمام خط کدهای برنامه رو اجرا کرده بود من تو اس کیو دیدم دیتابیس هنوز در حال ریستورینگ بود وبعد از 2 ساعت فایل بکاپ 1.5 مگابایتی رو هنوز داشت ریستور میکرد!!؟
ایا مشکل بکاپه؟
ایا میشه بکاپ رو از طریق خود اس کیو ال به طور مستقیم برگردوند ؟(تا سالم بودنش رو تشخیص داد وامتحان کرد؟)