ورود

View Full Version : سوال: مشکل در Restore کردن دیتابیس SQL Server 2000



Rocker
پنج شنبه 10 مرداد 1387, 09:51 صبح
سلام دوستان:

من در نرم افزارم برای Restore کردن از این کد استفاده میکنم:


if (OpenDialog1.Execute) and (OpenDialog1.FileName<>'') then
begin
with ADOCommand1 do
begin
CommandText:='use master RESTORE DATABASE MyDatabase FROM DISK='+QuotedStr (OpenDialog1.FileName);
execute ;
end;



این کد به ظاهر درست عمل میکنه و هیچ پیغام خطایی هم نمیده اما در واقع اصلا دیتابیس رو بازیابی نمی کنه و رکوردهای ویرایش شده و یا پاک شده را برنمی گرداند.به عبارتی دیگر انگار نه انگار که دیتابیس رو Restore کردی.
اما اگرهمین کد را در برنامه ی دیگری که از دیتابیس MyDatabase استفاده نمی کند قرار دهیم و برنامه ی اصلی را ببندیم بدون هیچ مشکلی دیتابیس را بازیابی میکند و رکوردهای پاک شده را هم برمی گرداند.

توضیح اینکه:من در نرم افزار اصلی خود قبل از اینکه عمل بازیابی را انجام دهم همه ی جدول ها و اتصالات به بانک را میبندم اما باز هم فرقی نمیکند.

متشکر میشم اگر کمکم کنید

dkhatibi
پنج شنبه 10 مرداد 1387, 10:54 صبح
مطمئنید فایل BackUp شده سالمه! برای اطمینان بیشتر دو کار را انجام دهید
1- از داخل Sql Server فایلرا بازیابی نمایید.
2- کد را به صورت زیر هم امتحان نمایید.

dm.ADOConnection1.Connected:=false;

dm.Q_Temp.Active:=false;
dm.Q_Temp.SQL.Text:= 'Use master';
dm.Q_Temp.ExecSQL;

ADOCommand1.CommandText:='';
sleep(2);
s:=FileListBox1.FileName;
try
with ADOCommand1 do
begin
CommandText:='RESTORE DATABASE Madraseh FROM DISK='+ QuotedStr(s);
Execute;
end;

moonplant
پنج شنبه 10 مرداد 1387, 10:58 صبح
سلام
قبل از اینکه restore را شروع کنید این command را در sql اجرا کنید:
ALTER DATABASE MyDatabase
SET SINGLE_USER WITH ROLLBACK IMMEDIATE

و بعد از اینکه کارتان تمام شد آنرا به حالت اولش برگردانید:
ALTER DATABASE MyDatabase
SET MULTI_USER WITH ROLLBACK IMMEDIATE

موفق باشید

Rocker
پنج شنبه 10 مرداد 1387, 11:11 صبح
مطمئنید فایل BackUp شده سالمه! برای اطمینان بیشتر دو کار را انجام دهید
1- از داخل Sql Server فایلرا بازیابی نمایید.
2- کد را به صورت زیر هم امتحان نمایید.

dm.ADOConnection1.Connected:=false;

dm.Q_Temp.Active:=false;
dm.Q_Temp.SQL.Text:= 'Use master';
dm.Q_Temp.ExecSQL;

ADOCommand1.CommandText:='';
sleep(2);
s:=FileListBox1.FileName;
try
with ADOCommand1 do
begin
CommandText:='RESTORE DATABASE Madraseh FROM DISK='+ QuotedStr(s);
Execute;
end;

بله فایل سالمه چون هم با نرم افزار دیگه و هم با SQL بازیابی انجام میشه
از کدی که گذاشتید ممنونم
امتحانش میکنم و نتیجه اش رو میگم

Rocker
پنج شنبه 10 مرداد 1387, 11:17 صبح
سلام
قبل از اینکه restore را شروع کنید این command را در sql اجرا کنید:
ALTER DATABASE MyDatabase
SET SINGLE_USER WITH ROLLBACK IMMEDIATE

و بعد از اینکه کارتان تمام شد آنرا به حالت اولش برگردانید:
ALTER DATABASE MyDatabase
SET MULTI_USER WITH ROLLBACK IMMEDIATE

موفق باشید

خیلی ممنونم از شما از کدتون استفاده کردم و مشکلم حل شد.
باز هم سپاس