PDA

View Full Version : یک مشکل "جدید" با بک آپ و ریستور های DBISAM



Mojgan110
جمعه 15 دی 1385, 11:36 صبح
سلام.

من هم راهنمای dbisam قسمت مربوط به بک آپ/ریستور را خوندم و هم توی سایت سرچ کردم و این تاپیک (http://barnamenevis.org/forum/showthread.php?t=13109&highlight=dbisam+restore)را هم دیدم ولی مشکل دارم هنوز !

http://m1.freeshare.us/126fs4629371_th.png (http://m1.freeshare.us/view/?126fs4629371.png)

ظاهرا" مشکل وقتی پیش میاد که میخوام Resotre کنم . خطایی هم که میگیره DBISAM_OSEACCESS #11013 هست که در راهنمای dbisam برای این خطا گفته بود که مجوز بازکردن فایل بک آپ را نداریم. چون شاید توسط کس دیگری بصورت Exclusive باز شده یا دایرکتوری Read Only هست .

من فایل بک آپی که به کمک دستور Backup تولید کرده بودم را با Notepad !! نگاهش کردم . در سطر اولش نوشته بود که :

ODB Version 1.0 Backup tbContent tbArchive
tbContent.dat

خب ! اون ODB Version و ... که همان Description هست که موقع بک آپ گرفتن ، خودم بهش یاد دادم !! بعدش هم اسم دوتا جدولی هست که واسه بک آپ گرفتن بهش معرفی کردم یعنی tbContent , tbArchive .. ولی میبینید که خودش یکدونه tbContent.dat هم اضافه کرده که غلط کرده اضافه کرده !! مشکلی که توی ریستور پیش میاد هم فکر میکنم از همین باشه . این دیگه از کجا اومده ؟

من پردازه های بک آپ و ریستوری که استفاده کردم را هم مینویسم اینجا که اگر فرصت کردید ، لطفا بررسی کنید و ببینید مشکل از چی میتونه باشه ؟
ممنون.

بک آپ :


procedure TfrmODF.bbtnBackupClick(Sender: TObject);
var
TablesToBackup: TStrings;
BackupTo: String;
BackupEsm: String;
begin
if(SaveDialog1.Execute) then
begin
BackupTo:= SaveDialog1.FileName;
BackupEsm:= StringReplace(BackupTo,'.bkp','',[rfReplaceAll]);
BackupEsm := BackupEsm+ '.bkp';
TablesToBackup:= TStringList.Create;
TablesToBackup.Add('tbContent');
TablesToBackup.Add('tbArchive');
ProgressBar1.Visible:= True;
DataModule2.tbArchive.Close;
DataModule2.tbContent.Close;
DataModule2.tbSerch.Close;
if(DataModule2.DB.Backup(BackupEsm,'ODB Version 1.0 Backup',6,TablesToBackup)) then
ShowMessage('Backup Progress Finished Successfully.')
else
ShowMessage('ERROR in Backup Progress.');
TablesToBackup.Free;
ProgressBar1.Visible:= False;
DataModule2.tbArchive.Open;
DataModule2.tbContent.Open;
DataModule2.tbSerch.Open;

end;
end;
ریستور :


procedure TfrmODF.bbtnRestoreClick(Sender: TObject);
Var
TablesToRestore: TStrings;
RestoreFrom: String;
RestoreEsm: String;
begin
if(OpenDialog1.Execute) then
begin
RestoreFrom:= OpenDialog1.FileName;
RestoreEsm:= StringReplace(RestoreFrom,'.bkp','',[rfReplaceAll]);
RestoreEsm:= RestoreEsm + '.bkp';
TablesToRestore:= TStringList.Create;
TablesToRestore.Add('tbContent');
TablesToRestore.Add('tbArchive');
ProgressBar1.Visible:= True;
DataModule2.tbContent.Close;
DataModule2.tbArchive.Close;
DataModule2.tbSerch.Close;
if(DataModule2.DB.Restore(RestoreEsm,TablesToResto re)) then
ShowMessage('Restore progress finished successfully.')
else
ShowMessage('ERROR in Restore progress.');
ProgressBar1.Visible:= False;
TablesToRestore.Free;
DataModule2.tbContent.Open;
DataModule2.tbArchive.Open;
DataModule2.tbSerch.Open;
end;
end;

مهدی کرامتی
جمعه 15 دی 1385, 13:37 عصر
من هم این مشکل رو داشتم، اما راه حلی برایش نیافتم، ظاهرا این جور مشکلات در DBISAM ذاتی است.

MNosouhi
سه شنبه 19 دی 1385, 16:08 عصر
پشتیبانگیری و بازیابی در dbisam هیچ مشکلی نداره ، فقط یک سری نکات هستش که باید رعایت کنید .
مثلا اگر از DBISAMDatabase1 استفاده می کنید قبل از اینکه پشتیبانگیری کنید باید مطمئن شوید که در خاصیت sql آن چیزی نوشته نشده باشد (به کدهایی که در زیر نوشتم دقت کنید ) . الان همه موارد یادم نیست ، اما در حین کار قلقش دستتون میاد.
کدی که در برنامه هام استفاده کرده ام(تقریبا):

پشتیبانگیری:


var ext:string;
ListOfTablesBackUp:Tstrings;
begin
if SaveDialog1.execute then
begin
ListOfTablesBackUp:=TStringList.Create;
ListOfTablesBackUp.Add('Bank');//0
ListOfTablesBackUp.Add('Com');//1
//... and other table
ext:='.bkp';
if StrPos(SaveDialog1.Files.GetText,'.bkp')<> nil then
ext:='';
//only if use DBISAMUpdateSQL component use
{MainForm.DBISAMUpdateSQL1.SQL[ukDelete].Clear;
MainForm.DBISAMUpdateSQL1.SQL[ukModify].Clear;
MainForm.DBISAMUpdateSQL1.SQL[ukInsert].Clear;}
if MainForm.DBISAMDatabase1.Backup(SaveDialog1.FileNa me+ext,'Daily Backup for '+DateToStr(Date),6,ListOfTablesBackUp)
then Showmessage('&Uacute;&atilde;&aacute;&iacute;&Ccedil;&Ecirc; &Ocirc;&Ecirc;&iacute;&Egrave;&Ccedil;&auml; &iacute;&Ntilde;&iacute; &Egrave;&Ccedil; &atilde;&aelig;&Yacute;&THORN;&iacute;&Ecirc; &Egrave;&aring; &Ccedil;&auml;&Igrave;&Ccedil;&atilde; &Ntilde;&Oacute;&iacute;&Iuml; ')

else Showmessage('&Uacute;&atilde;&aacute;&iacute;&Ccedil;&Ecirc; &Ocirc;&Ecirc;&iacute;&Egrave;&Ccedil;&auml; &iacute;&Ntilde;&iacute; &Egrave;&Ccedil; &Ocirc;˜&Oacute;&Ecirc; &atilde;&aelig;&Ccedil;&Igrave;&aring; &Ocirc;&Iuml; &iacute;&Ccedil; &Ecirc;&aelig;&Oacute;&Oslash; ˜&Ccedil;&Ntilde;&Egrave;&Ntilde; &atilde;&Ecirc;&aelig;&THORN;&Yacute; &Ocirc;&Iuml;');

ActiveDataSets(False,true);//this function only active tabales
ListOfTablesBackUp.Free;
end;

end;
بازیابی:


var
ListOfTablesBackUp:Tstrings;
begin
try
if OpenDialog1.Execute then
begin
ListOfTablesBackUp:=TStringList.Create;
ListOfTablesBackUp:=TStringList.Create;
ListOfTablesBackUp.Add('Bank');//0
ListOfTablesBackUp.Add('Com');//1
//... and other table
with MainForm do
begin
ActiveDataSets(false,false);//this function close all tables
DBISAMDatabase1.Connected:=false;
MainForm.DBISAMDatabase1.Directory:=ExtractFileDir (Application.ExeName)+'\D';//path of database folder
MainForm.DBISAMDatabase1.Open;
DBISAMDatabase1.Connected:=true;
//only if use DBISAMUpdateSQL component use
{MainForm.DBISAMUpdateSQL1.SQL[ukDelete].Clear;
MainForm.DBISAMUpdateSQL1.SQL[ukModify].Clear;
MainForm.DBISAMUpdateSQL1.SQL[ukInsert].Clear;}
if DBISAMDatabase1.Restore(OpenDialog1.FileName,ListO fTablesBackUp) then
begin
ActiveDataSets(true);//active all tabales
ShowMessage('&Uacute;&atilde;&aacute;&iacute;&Ccedil;&Ecirc; &Egrave;&Ccedil;&Ograve;&iacute;&Ccedil;&Egrave;&iacute; &Egrave;&Ccedil; &atilde;&aelig;&Yacute;&THORN;&iacute;&Ecirc; &Ccedil;&auml;&Igrave;&Ccedil;&atilde; &Ocirc;&Iuml;, ')
end
else
begin
ShowMessage('&Uacute;&atilde;&aacute;&iacute;&Ccedil;&Ecirc; &Egrave;&Ccedil;&Ograve;&iacute;&Ccedil;&Egrave;&iacute; &Egrave;&Ccedil; &Ocirc;˜&Oacute;&Ecirc; &atilde;&aelig;&Ccedil;&Igrave;&aring; &Ocirc;&Iuml;');
ActiveDataSets(false);//Close all tabales
end;
end;
ListOfTablesBackUp.Free;
end;
end
except
ShowMessage('&Uacute;&atilde;&aacute;&iacute;&Ccedil;&Ecirc; &Egrave;&Ccedil;&Ograve;&iacute;&Ccedil;&Egrave;&iacute; &Egrave;&Ccedil; &Ocirc;˜&Oacute;&Ecirc; &atilde;&aelig;&Ccedil;&Igrave;&aring; &Ocirc;&Iuml;');
end;

end;