Страница 1 из 1

Проблема с бэкапом БД

Добавлено: 07 ноя 2005, 18:49
mrin
Использую в Delphi 7 - InterBase 7

Бэкап осуществляется через компанент ibbackupservice.
БД как бы сетевая, но на локальной машине.
Проблема вот в чем: При выполнении бэкапа выдается ошибка:

Cannot attach to services manager service "Путь до ibguard.exe :service_mgr is not defined"

Входные данные:
Backupfile - выбираю из opendialog, к примеру e:\asd.db
databasename:='127.0.0.1:poliklinika'; //Пробовал и просто poliklinika...
servername:='E:\Programs\Borland\InterBase\bin\ibguard.exe';
params :
user_name=sysdba
password=masterkey
=================

Данная ошибка при коннекте...
Вот сам код:

Код: Выделить всё

 try
 with ibbackupservice1 do
    begin
      if fileexists(trim(edit1.Text)) then deletefile(trim(edit1.Text));
      backupfile.Clear;
      backupfile.Add(trim(edit1.Text));
      try
     // params.Clear;
     // Params.Add('user_name='+ansiuppercase(edit4.Text));
      //Params.Add('password='+edit5.Text);
      databasename:=edit2.Text;
      servername:=edit3.Text;
      active:=true;
       except  messagedlg('Îøèáêà êîííåêòà ê ÁÄ!',mterror, [mbok],0); end;
      screen.Cursor:=crSQLwait;
      form8.Caption:=form8.Caption+' - Èäåò àðõèâàöèÿ';
      servicestart;
    while isServiceRunning do
       application.ProcessMessages;
      active:=false;
      screen.Cursor:=crDefault;
      form8.Caption:='Àðõèâàöèÿ ÁÄ';
      messagedlg('Àðõèâàöèÿ óñïåøíî çàâåðøåíà!',mtinformation,[mbOk],0);
    end;
  except
    screen.Cursor:=crDefault;
    messagedlg('Îøèáêà àðõèâàöèè, âîìîæíî ââåäåííûå äàííûå íå âåðíû!',mterror, [mbok],0);
  end;
Помогите народ, эт мне все для курсового... обязательно чтобы была архивация...

Добавлено: 07 ноя 2005, 19:54
kdv
servername:='E:\Programs\Borland\InterBase\bin\ibguard.exe';
это что? :)
должно быть localhost

однако, что гвардеец обозван сервером - это круто.
Гвардеец, вообще то, только и следит за ibserver.exe, и кроме этого вообще больше ни на что не способен. В W2K, WinXP и Win2003 он вообще не нужен.
databasename:='127.0.0.1:poliklinika'; //Пробовал и просто poliklinika...
это опять же что??? :shock:
должно быть

e:\asd.ib (имя базы).

Добавлено: 07 ноя 2005, 20:19
mrin
Вобщем я чуть разобрался с архивацией, оказывается вообще в servername ничего пихать не нужно было...
Хотя во стронно что в умной книжке написано мол нужно указывать файл до ibguard... Вот с этим я не понял.
это что?
должно быть localhost
А если я буду на удаленной машине, то IP шник просто ?
===
это опять же что???
должно быть

e:\asd.ib (имя базы).
Тут я понял уже что не нужно никаких там IP:NAME, просто я пытался по аналогии с IBDATABASE, там просто указывается...
НО, я короче кинул компанент IBDatabaseinfo и выдрал с него путь до текущей БД, вот, и короче когда указвыаю его в Databasename, то при попытке архивации виснет приложение и затем когда заново я запускаю приложение, то долго думает и тоже виснет. Все начинает работать только после перезапуска InterBase
И короче у меня БД имя без всяких там расширений.. Архивайция проходит только если просто написать DatabaseName:='POLIKLINIKA';
==================

Теперь вопрос по поводу IBRestoreService:

Тут те-же данные входные. Указывается уже созданный архивный файл.

with ibrestoreservice1 do
begin
backupfile.Clear;
backupfile.Add(edit1.Text);
try
params.Clear;
Params.Add('user_name='+ansiuppercase(edit4.Text));
Params.Add('password='+edit5.Text);
databasename.Clear;
databasename.Add(edit2.Text);
servername:=edit3.Text;
active:=true;
except
messagedlg('Îøèáêà êîííåêòà!',mterror, [mbok],0);
exit
end;
try
screen.Cursor:=crSQLwait;
form8.Caption:=form8.Caption+' - Èäåò âîññòàíîâëåíèå';
servicestart;
while isServiceRunning do
application.ProcessMessages;
active:=false;
screen.Cursor:=crDefault;
form8.Caption:='Àðõèâàöèÿ ÁÄ';
except
messagedlg('Îøèáêà âîññòàíîâëåíèÿ, âîçìîæíî ÁÄ èñïîëüçóåòñÿ!',mterror, [mbok],0);
screen.Cursor:=crDefault;
form8.Caption:='Àðõèâàöèÿ ÁÄ';
exit
end;
end;

Ошибка возникает на втором этапе - это когда пытается пройти процесс непосредственно восстановления.
Пишет Database POLIKLINIKA already exists , ну понятно что типо в данный момент используется... А как тут избежать траблы ?
Я уже пытался во время архивации просто напросто сам компанент IBDATABASE.connected:=false поставить, все равно не хочть чго-то..

ХЕЛП :)

Добавлено: 07 ноя 2005, 20:31
kdv
Хотя во стронно что в умной книжке написано мол нужно указывать файл до ibguard...
в какой книжке и где именно, уточни.
А если я буду на удаленной машине, то IP шник просто ?
ip нужно указывать если у тебя не работает dns. пишешь просто имя сервера.
DatabaseName:='POLIKLINIKA';
нужен полный путь. сервер не понимает "умолчательных путей", нет у него такого.
Пишет Database POLIKLINIKA already exists , ну понятно что типо в данный момент используется... А как тут избежать траблы ?
чтобы избежать траблы, надо не ресторить бэкап в существующую БД. а то ... в общем, читай www.ibase.ru/devinfo/db_repair.htm
ХЕЛП
доку читай, и хелп по IBX.

Или вообще не морочь голову, а почитай
www.ibase.ru/devinfo/ibx.htm
там есть прямо ссылка на пример Admin, где все сервисные компоненты используются.

Добавлено: 07 ноя 2005, 22:10
mrin
в какой книжке и где именно, уточни
Питер , автор В.Фаронов "Программирование Баз данных в Delphi 7"

Код: Выделить всё

ip нужно указывать если у тебя не работает dns. пишешь просто имя сервера
Ясненько, тобишь имя компа удаленного.

Код: Выделить всё

нужен полный путь. сервер не понимает "умолчательных путей", нет у него такого. 
А вот тут не понятки, с полным путем ложится прога вместе с БД...(при запуске проги заново, до БД не достучаться)
А как нистранно, если указывать только имя БД, то почему-то работает...
чтобы избежать траблы, надо не ресторить бэкап в существующую БД. а то ... в общем, читай www.ibase.ru/devinfo/db_repair.htm
Прочитал, не нашел такую ситуацию.
Я как понимаю нужно каким-то образом закрыть БД и ресторнуть...
В книге в этой-же Питеровской ничего про это не сказано...
Хотя я попробую чуть иначе, возьму удалю сначало БД, а затем ресторну... Мож чо выйдет.

Или вообще не морочь голову, а почитай
www.ibase.ru/devinfo/ibx.htm
там есть прямо ссылка на пример Admin, где все сервисные компоненты используются.
Я наверно х-во проглядел, ссылки не нашел. Гляну еще разок, просто ща нервничаю :), курсачь блин...

Добавлено: 07 ноя 2005, 22:41
mrin
Все, я разобрался, оказывается нужно было удалить БД и ждать...
Если можно, ответьте на предыд. вопросы, интересно все-же.

А вот еще такая ситуация, а если на удаленной машине захотят забэкапить или ресторнуть БД, до в поле БД что писать то придеться ? - если учесть что не локальная машина и нету ведь полного пути до файла БД.

Добавлено: 08 ноя 2005, 09:58
kdv
автор В.Фаронов
Фаронову - незачет.
А вот тут не понятки, с полным путем ложится прога вместе с БД...(при запуске проги заново, до БД не достучаться)
А как нистранно, если указывать только имя БД, то почему-то работает...
про paramstr(0) не слыхал?
DatabaseName:=ExtractFilePath(ParamStr(0))+'твое_имя_базы';
Прочитал, не нашел такую ситуацию.
ни фига себе. там половина статьи посвящена "невосстановимым" бэкапам.
возьму удалю сначало БД, а затем ресторну...
у тебя логика отсутствует как таковая. А если бэкап например битый?
курсачь блин...
а, тогда иди, гуляй...