Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2013, 10:59   #1
Ivan174
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 51
По умолчанию restore базы firebird

Это мой первый опыт реализации бэкапа и рестора базы данных. Использую компоненты FIBPlus: TpFIBBackupService и TpFIBRestoreService. Бэкап работает нормально. вот код:
Код:
procedure TForm5.Button7Click(Sender: TObject);
var i: Integer;                                           //Резервная копия
begin
if not DirectoryExists(edt4.Text) then
begin
  MessageDlg('Директория не найдена!', mtError,[mbOK],0);
  edt4.Text:='';
end
else
begin
Form25.ShowModal;
i:=1;
  case Application.MessageBox('Вы уверены, что хотите сделать резервную копию базы данных?',
    'Внимание!', MB_OKCANCEL + MB_ICONQUESTION) of
    IDOK:
      begin
          MessageDlg('Резервная копия будет сохранена под именем elevator'+DateToStr(Date)+'.fdk',mtConfirmation, [mbOK], 0);
          with pfbckpsrvc1 do
          begin
            ServerName:=server_ip;
            Params.Clear;
            Params.Add('user_name=SYSDBA');
            Params.Add('password=masterkey');
            attach;
            try
              DatabaseName:=server_path+server_name;
              BackupFile.Clear;
              BackupFile.Add(edt4.Text + '\elevator'+DateToStr(Date)+'.fdk');
              mmo1.Clear;
              ServiceStart;
              Mmo1.Lines.Add(
              '================== Backup begins ==================');
              While not Eof do
              begin
                Application.ProcessMessages;
                Mmo1.Lines.Add(IntToStr(i) + ') '+ GetNextLine);
                i:=i+1;
              end;
              Mmo1.Lines.Add(
              '================= Backup ends =====================');
            finally
              Detach;
            end;
            end;
          edt4.Text:='';
          Button7.Enabled:=false;
      end;
  end;
end;
end;
С восстановлением возникли проблемы. Код писал аналогично коду для бэкапа, но кое где пришлось переделать. Итак:
Код:
procedure TForm5.Button8Click(Sender: TObject);
var i: Integer;
begin
i:=1;
if MessageDlg('Вы уверены, что хотите восстановить базу данных?',
            mtConfirmation, [mbYes, mbNo], 0) = mrYes  then
  begin
    pfbdtbs1.Connected:=false;
    with pfbrstrsrvc1 do
    begin
      try
         ServerName:=server_ip;
         Params.Clear;
         Params.Add('user_name=SYSDBA');
         Params.Add('password=masterkey');
         DatabaseName.Clear;
         DatabaseName.Add(server_path+server_name);
         BackupFile.Clear;
         BackupFile.Add(edt5.Text);
         mmo1.Clear;
        // attach;
         try
          Active:=True;
          ServiceStart;
          Mmo1.Lines.Add(
          '================ Restore begins ================');
          While not Eof do
          begin
          //Application.ProcessMessages;
          Mmo1.Lines.Add(IntToStr(i) + ') '+ GetNextLine);
          i:=i+1;
          end;
          Mmo1.Lines.Add(
          '=============== Restore ends ===================');
         finally
          Active:=False;
         // Detach;
         end;
      finally
        Free;
        edt5.Text:='';
      end;
    end;
    activ;
  end;

end;
Свойства TpFIBRestoreService приведены на скрине и ошибка тоже. Может кто-нибудь по шагам объяснит мне, как делать восстановление?
Изображения
Тип файла: png Безымянный1.png (15.5 Кб, 79 просмотров)
Тип файла: jpg Безымянный.jpg (20.8 Кб, 131 просмотров)
Ivan174 вне форума Ответить с цитированием
Старый 15.05.2013, 11:39   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

ругается на то что такой файл уже есть.
поставь в опциях Replace = True;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 15.05.2013, 11:58   #3
Ivan174
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 51
По умолчанию

Пробовал. В таком случае, другая ошибка.
Я так понимаю: удаление невозможно, так как база используется. но я перед запуском процесса восстановления подключение к базе отключаю.
Изображения
Тип файла: jpg Безымянный.jpg (19.9 Кб, 130 просмотров)
Ivan174 вне форума Ответить с цитированием
Старый 15.05.2013, 12:05   #4
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

значит где-то еще она используется ... искай где именно
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 15.05.2013, 12:09   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

offtop
Не догоняю, какой сокровенный смысл ресторе и бэкап базы программно делать?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.05.2013, 12:10   #6
Rik
Форумчанин
 
Аватар для Rik
 
Регистрация: 28.07.2007
Сообщений: 361
По умолчанию

Цитата:
Сообщение от Ivan174 Посмотреть сообщение
Пробовал. В таком случае, другая ошибка.
Я так понимаю: удаление невозможно, так как база используется. но я перед запуском процесса восстановления подключение к базе отключаю.
Восстанавливайте вообще в новый файл БД. Если восстановление пройдет удачно, напишите код замены файла, вернее старый файл базы переименуете в другое имя например с суфиксом _OLD, а новому зададите нужное имя, восстановление может и не удачно пройти... Подключение к базе не есть хорошо отключать, нужно вообще весь сервис FB тормозить, иначе тот же свипер может зпуститься в любой момент...

Последний раз редактировалось Rik; 15.05.2013 в 12:15.
Rik вне форума Ответить с цитированием
Старый 15.05.2013, 12:21   #7
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

а попробуй еще выключить CreateNewDB; (= False)
Аватар, сам не очень люблю этот прикол, но если есть средства для этого - почему бы и нет
Rik, рубить сервис не вариант. gbak же делает это нормально
Код:
gbak -r c:\back_base.fbk d:\data\base.fdb -user SYSDBA -pass masterkey -v -y "%systemdrive%\restore_%date%.log"
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 15.05.2013, 14:37   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я думаю что в программе нужно формировать BAT файл, как Юра описал и запускать его. Действительно пусть Жабак сам это сделает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.05.2013, 16:11   #9
Ivan174
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 51
По умолчанию

Если отключить replace и CreateNewDB, то вылетает ошибка на скрине).
Если оставить включенным только replace, то ошибка: could'nt drop database В общем БД используется
Изображения
Тип файла: png Безымянный.png (22.8 Кб, 71 просмотров)
Ivan174 вне форума Ответить с цитированием
Старый 15.05.2013, 16:44   #10
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

проект собраный на бегу)
сильно не заморачивался, поэтому привязка везде жестко к каталогам.
Архив распаковываем на диск D (полный путь до проекта = D:\Новая папка\).
1я кнопка делает рез. копию с именем 1.fbk в свой же каталог.
2я кнопка восстанавливает архив в файл 1.fdb с заменой файла.
вроде ничего лишнего.
компонент FIBDatabase там только для наглядности) (участия он не принимает)
Вложения
Тип файла: rar Новая папка.rar (460.6 Кб, 17 просмотров)
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие базы по сети FireBird Lokos БД в Delphi 7 25.01.2011 05:47
Программное создание базы данных FireBird Lokos БД в Delphi 1 28.09.2010 10:32
firebird регистрация базы? Domanoff БД в Delphi 1 05.06.2010 17:05
Проблема с Резервированием и восстановлением базы InterBase\FireBird ХАнК Помощь студентам 3 11.03.2010 16:49
EMS InterBase & FireBird Manager 3 ошибка создания Базы данных Gilio БД в Delphi 2 08.05.2009 15:59