powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / TIBBackupService создании бекапа на работающей базе
17 сообщений из 17, страница 1 из 1
TIBBackupService создании бекапа на работающей базе
    #39736995
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с проблемой, что при попытке сделать бекап, на рабочей базе, ловлю ошибку:
Ошибка чтения строки: bad parameters on attach or create database unknown ISC error 336330835
В чем могут быть грабли?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
AnalogGback(edServ.Text, edRBasePath.Text, edBackupPath.Text, 2, 1);

function AnalogGback(
  ServName: String;
  BasePath: String;
  BackupPath: String;
  ParamBkp: Integer;
  Regime: Integer): Integer;
var
  BkpServIB: TIBBackupService;
  Numb: Integer;
  BkpStro: string;
  EndBackupPath: string;
begin
  Result := 0;
  try
    BkpServIB := TIBBackupService.Create(nil);
    BkpServIB.Params.Text := 'user_name=sysdba'#13#10'password=masterkey';
    BkpServIB.ServerName := ServName;
    BkpServIB.Protocol := Local;
    BkpServIB.LoginPrompt := False;
    BkpServIB.Verbose := True;
    BkpServIB.TraceFlags := [tfQPrepare, tfQExecute, tfQFetch, tfError, tfStmt, tfConnect, tfTransact, tfBlob, tfService, tfMisc];
    case ParamBkp of
      1: BkpServIB.Options := [IgnoreChecksums, NoGarbageCollection];
      2: BkpServIB.Options := [NonTransportable, IgnoreLimbo];
    end;

    BkpServIB.BackupFile.Clear;

    if not FileExists(BasePath)
      then begin
        case Regime of
          1: ShowMessage('Файл исходной базы не найден!');
          2: LogStr('Файл исходной базы не найден!' + BasePath);
        end;
        Result := 1;
        Exit;
      end
      else BkpServIB.DatabaseName := BasePath;

    if (Regime = 1) and  (FileExists(BackupPath))
      then if MessageBox(Main_Frm.Handle,
                         StringToPWide('Такой бэкап уже существует! Все равно заменить?'),
                         StringToPWide('Предупреждение'), MB_YESNO) = mrNo
        then Exit;

    LogStr(CONST_LN_BKPSTART + CONST_LN_STBASE + BackupPath);

    EndBackupPath := BackupPath;
    BackupPath := ExtractFilePath(ParamStr(0)) + 'fbk_' + FormatDateTime('yyyymmddhhnnss', Now) + '.fbk';

    BkpServIB.BackupFile.Text := BackupPath;
    BkpServIB.Active := True;
    BkpServIB.ServiceStart;

    Numb := 0;
    while not BkpServIB.Eof do
    begin
      Numb := Numb + 1;
      try
        BkpStro := BkpServIB.GetNextLine;
        if Regime = 1
          then begin
            Main_Frm.mLog.Lines.Add(BkpStro);
            Application.ProcessMessages;
          end;
      except
        on e: Exception do
        begin
          case Regime of
            1: ShowMessage(CONST_READLINEERR + ' ' + e.Message);
            2: LogStr(CONST_READLINEERR + ' ' + e.Message);
          end;
          Result := 2;
          Exit;
        end;
      end;
    end;
    BkpServIB.Active := False;
    CopyFile(StringToPWide(BackupPath), StringToPWide(EndBackupPath), False);
    DeleteFile(StringToPWide(BackupPath));
    LogStr(CONST_LN_BKPEND + CONST_LN_STBKP + BackupPath);
  finally
    FreeAndNil(BkpServIB);
  end;
end;

...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39737009
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Firebird 2.5.8
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39737033
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_AlexeyОшибка чтения строки: bad parameters on attach or create database unknown ISC error 336330835
В чем могут быть грабли?

Как минимум это несоответствие версий сервера, клиента и файла сообщений.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39737115
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_Alexeyunknown ISC error 336330835336330835 - Это служебное сообщение gbak
"Exiting before completion due to errors"

Т.к. используются сервисы, то единственный способ для сервера подцепить кривого клиента - fbclient в system32. Айяйяй
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39737119
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТ.к. используются сервисы, то единственный способ для сервера подцепить кривого клиента - fbclient в system32.Хотя... статус-вектор же всё равно интерпретирует клиент... так что - проблема в том клиенте, который используется приложением.

Ну и - статус-вектор нужно до конца рассматривать, а не останавливаться на первом коде ошибки.

Этот код - ужасен, все ошибки идут в лес:
Fofanov_Alexey
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  try
    BkpServIB := TIBBackupService.Create(nil);
...
    BkpServIB.Active := True;
    BkpServIB.ServiceStart;
...
  finally
    FreeAndNil(BkpServIB);
  end;
end;
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39737297
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По коду поправил, и обернул все узкие места в trye. :)
Я так понимаю основная проблема в том, что используемая TIBBackupService gds32.dll отличается от установленной версии Firebird?
Если так, то программно можно обнаружить данное расхождение?
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39737374
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да под SuperServer заработало, под Сlassic та же ошибка :(
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39737451
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_Alexeyиспользуемая TIBBackupService gds32.dll отличается от установленной версии Firebird?
у компонент нет никакой "используемой" gds32.dll.
IBX - да, ждет наличия gds32.dll, но установленная версия Firebird при установке вполне генерирует gds32.dll из fbclient.dll.
Можно и самому это сделать, при помощи утилиты instclient (которая в bin).
То есть, не надо подсовывать вашему приложению какие-то dll, которые вы неизвестно откуда взяли.

Fofanov_AlexeyДа под SuperServer заработало, под Сlassic та же ошибка
в чем проблема найти и удалить лишние dll, и нормально установить клиента firebird?
http://www.ibase.ru/inst_manual/
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39737468
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_AlexeyПо коду поправил, и обернул все узкие места в trye. :)
Я так понимаю основная проблема в том, что используемая TIBBackupService gds32.dll отличается от установленной версии Firebird?
Если так, то программно можно обнаружить данное расхождение?
Зачем бороться с погодными условиями?
Мали ли что там на компе у юзера может быть.
Подкладывай в каталог с приложением нужную версию dll-ки, вот и все.
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39737909
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет постойте... :)

Windows 10 64b
FireBird 32b ver.2.5.8.27089 Сlassic
c:\Windows\SysWOW64\GDS32.DLL ProductVersion : 2.5.8.27089

Подключаю IBExpert к базе.
И из консоли запускаю gbak:

gbak.exe -b -v -g -ig -user SYSDBA -password masterkey odessa.fdb odessa_backup.fbk
gbak: ERROR:bad parameters on attach or create database
gbak:Exiting before completion due to errors

И ловлю ту же самую ошибку...

Отключаюсь от базы, и пошел бекап...
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39737914
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I smell a rat Firebird Embedded.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39737927
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче все дело в ключе -ig, без него все пашет.
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39737944
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_Alexey,

Собственно, а ЗАЧЕМ вы указываете опцию -ig? Ее КАТЕГОРИЧЕСКИ нельзя указывать при обычном бэкапе, только если файл базы поврежден, и без этой опции бэкап не проходит.
http://www.ibase.ru/gbak/

Dimitry SibiryakovI smell a rat Firebird Embedded.
какая-то мутная история. там же 2.5, а embedded у 2.5 - superclassic.
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39737982
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvтам же 2.5, а embedded у 2.5 - superclassic.

Именно поэтому при запуске из-под разных аккаунтов вылезают разные спецэффекты из-за прав
доступа.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39743409
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_Alexey
Код: pascal
1.
2.
  try
    BkpServIB := TIBBackupService.Create(nil);


Это таки в самом деле плохо, эти строки надо поменять местами

hvladЭтот код - ужасен, все ошибки идут в лес
почему они "идут в лес" ? Тут же finally а не except ?

все ошибки (исключения) летят себя дальше, пока их кто-то не обработает.

Fofanov_AlexeyЕсли так, то программно можно обнаружить данное расхождение?

Можно, но поскольку разработчики не хотят, чтобы сервер это сообщал через SQL, то придется искать другую библиотеку, которая знает новые Firebird-специфичные вызовы.
IBX заточен на Интербейз и Firebird рассматривает как внешнего конкурента, так что в нём эти функции вряд ли будут.

Впрочем.... Можно заморочиться. Но это реально скорее "а ещё под эту музыку можно делать так", чем практически удобное решение.
1) из IBX вытаскиваем название клиентской DLL (но не путь, его в IBX вроде наружу не выведено)
2) берём карту памяти своего процесса, определяем какие DLL загружены, находим по названию DLL пут ьк файлу
3) открываем файл и читаем из него ресурс VERSION_INFO
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39743457
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochFofanov_Alexey
Код: pascal
1.
2.
  try
    BkpServIB := TIBBackupService.Create(nil);


Это таки в самом деле плохо, эти строки надо поменять местами

hvladЭтот код - ужасен, все ошибки идут в лес
почему они "идут в лес" ? Тут же finally а не except ?

все ошибки (исключения) летят себя дальше, пока их кто-то не обработает.



потому что
Код: pascal
1.
try

нужно писать после
Код: pascal
1.
 .Create 
...
Рейтинг: 0 / 0
TIBBackupService создании бекапа на работающей базе
    #39743743
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor,

это ты к чему? если к утверждению Влада - то не "все ошибки", а только (возможно) незапланированные nil dereference
а остальные - они и должны лететь до ближайшего обработчика
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / TIBBackupService создании бекапа на работающей базе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]