powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Диагностика базы данных
25 сообщений из 25, страница 1 из 1
Диагностика базы данных
    #39291735
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ли параметры, "дернув" которые, можно понять, что база повреждена или на пути к разрушению?
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39291737
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При подключении к битой базе сервер сам об этом скажет.

На пути к разрушению - это что-то из разряда "посадили криворукого админа"?
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39291741
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_Alexey,

повреждения БД проверяются с помощью gfix. Ещё начиная с 2.5.3 есть онлайн валидация которая доступно через Service API. В последних версиях IBE на ПКМ можно найти соответствующий пункт. Проверять можно по отдельной таблице или сразу всем таблицам.

З.Ы. Кривые метаданные этим не проверить.
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39291743
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanПри подключении к битой базе сервер сам об этом скажет.

это смотря где эти повреждения произошли. О большинстве повреждений можно узнать только когда читаешь соответствующие страницы.
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39291747
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_Alexey,

для ежедневной диагностики подойдёт вариант онлайн валидации читать здесь doc/README.online_validation
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39300910
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как и рекомендовали, решил реализовать проверку базы через тулзу fbsvcmgr в Delphi.
Реализовал обертку над командной строкой через CreatePipe.
Проверяю локальные базы все ОК. Но...
При проверке баз по сети ловлю ошибку:
Unable to complete network request to host "192.168.0.39".
-Failed to establish a connection.

Вот что скармливаю Pipe:
C:\Program Files (x86)\Firebird\Firebird_2_5\bin\fbsvcmgr 192.168.0.39:service_mgr -user sysdba -password masterkey action_validate dbname g:/ad/DataBase/ODESSA.FDB val_tab_incl ADDRESS val_lock_timeout 10

Проверяю на данной машине в командной строке все работает, в коде - болт.

В чем грабли?
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39300913
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да фаервол отключен
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39300922
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_Alexey,

онлайн валидация доступна через Service API, поэтому нет никакого смысла делать вызовы какой-то там утилиты сбоку.
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39300926
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_Alexey,

в каком коде "болт"? Впрочем, Симонов уже написал, что вызывать утилиту из "кода", это фактически "через зад". Нужно или использовать компоненты services api в IBX или FIBPlus или FireDAC, или выдрать из их исходников кусок правильного кода.
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39300934
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок, сейчас попробую.
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39301021
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, если оно не может установить коннект на данный адрес - ничего не поможет. Тут
надо сисадмина звать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39301682
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисFofanov_Alexey,

онлайн валидация доступна через Service API, поэтому нет никакого смысла делать вызовы какой-то там утилиты сбоку.

Я так понял, что проверку базы Вы мне предлагаете делать через TIBValidationService ?
Или есть еще какие то варианты, где можно посмотреть примеры ?

Потому как используя TIBValidationService не должно быть подключений к базе, а fbsvcmgr хорошо тем, что можно проверять на "живой" базе.
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39301695
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_Alexey,

TIBValidationService был создан в те времена когда онлайн валидация отсутствовала. Но вам ничего не мешает допилить компоненту или создать свою.
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39301728
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_AlexeyПроверяю на данной машине в командной строке все работает, в коде - болт.

В чем грабли?Учётная запись, под которой запускается "код с болтом" - ?
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39301772
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad, Приложению выставил админские права.

Код с помощью которого запускаю тулзу привожу ниже..

Код: 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.
88.
89.
function ExecConsoleApp_online(App: TApplication; CommandLine: AnsiString; Output, Errors: TInOut_Msg) : Boolean;
const 
  ReadBuffer = 2400; 
var
  sa: TSECURITYATTRIBUTES;
  si: TSTARTUPINFO;
  pi: TPROCESSINFORMATION;
  hPipeOutputRead, hPipeOutputWrite,
  hPipeErrorsRead, hPipeErrorsWrite: THANDLE;
  Res, bTest: Boolean;
  env: array[0..100] of Char;
  szBuffer: array[0..256] of Char;
  dwNumberOfBytesRead: DWORD;

  Buffer: Pchar;
  BytesRead: DWord;
begin
  Result := False;
  sa.nLength := sizeof(sa);
  sa.bInheritHandle := true;
  sa.lpSecurityDescriptor := nil;
  CreatePipe(hPipeOutputRead, hPipeOutputWrite, @sa, 0);
  CreatePipe(hPipeErrorsRead, hPipeErrorsWrite, @sa, 0);
  ZeroMemory(@env, SizeOf(env));
  ZeroMemory(@si, SizeOf(si));
  ZeroMemory(@pi, SizeOf(pi));
  si.cb := SizeOf(si);
  si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
  si.wShowWindow := SW_HIDE;
  si.hStdInput := 0;
  si.hStdOutput := hPipeOutputWrite;
  si.hStdError := hPipeErrorsWrite;

  (* Remember that if you want to execute an app with no parameters you nil the
     second parameter and use the first, you can also leave it as is with no
     problems.                                                                 *)
  Res := CreateProcess(nil, pchar(CommandLine), nil, nil, true, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, @env, nil, si, pi);

  // Procedure will exit if CreateProcess fail
  if not Res
    then begin
      CloseHandle(hPipeOutputRead);
      CloseHandle(hPipeOutputWrite);
      CloseHandle(hPipeErrorsRead);
      CloseHandle(hPipeErrorsWrite);
      Exit;
    end;
  CloseHandle(hPipeOutputWrite);
  CloseHandle(hPipeErrorsWrite);

  try
    //Read output pipe
    Buffer  := AllocMem(ReadBuffer + 1);
    try
      while true do
      begin
        bTest := ReadFile(hPipeOutputRead, Buffer[0], ReadBuffer, BytesRead, nil);
        if not bTest
          then break;
        Buffer[BytesRead] := #0;
        OemToAnsi(Buffer, Buffer);
        Output(String(Buffer));
        App.ProcessMessages;
        Result := True;
      end;
    finally
    end;
    BytesRead := 0;
    //Read error pipe
    try
      while true do
      begin
        bTest := ReadFile(hPipeErrorsRead, Buffer[0], ReadBuffer, BytesRead, nil);
        if not bTest
          then break;
        Buffer[BytesRead] := #0;
        OemToAnsi(Buffer, Buffer);
        Output(String(Buffer));
        App.ProcessMessages;
      end;
    finally
    end;
  finally
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess);
    CloseHandle(hPipeOutputRead);
    CloseHandle(hPipeErrorsRead);
  end;
end;
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39301780
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запускаю потабличную проверку вот этим..

Код: 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.
function TUpdateDataBase_frm.DatabaseValidation() : Boolean;
const
  SQL_VIEW_ALLTABLE =
    'SELECT RDB$RELATION_NAME AS TABLENAME, RDB$RELATION_ID AS ID' +
    ' FROM RDB$RELATIONS ' +
    ' WHERE (RDB$SYSTEM_FLAG = 0) AND (RDB$RELATION_TYPE = 0) ' +
    ' ORDER BY RDB$RELATION_NAME';
  CMD_LN = '%firebird_path%fbsvcmgr %ip_path%service_mgr -user %user% -password %password% action_validate dbname %dbname% val_tab_incl %table_name% val_lock_timeout %lock_timeout%';
var
  CMD_EXE,
  CMD_TMP,
  TableName : String;
  Table_List : TStrings;
  i : Integer;
begin
  CMD_TMP := StringReplace(CMD_LN, '%user%', 'sysdba', [rfReplaceAll]);
  CMD_TMP := StringReplace(CMD_TMP, '%password%', 'masterkey', [rfReplaceAll]);
  if GetIpPath(FDBName) = ''
    then begin
      CMD_TMP := StringReplace(CMD_TMP, '%dbname%', FDBName, [rfReplaceAll]);
      CMD_TMP := StringReplace(CMD_TMP, '%ip_path%', '', [rfReplaceAll]);
    end
    else begin
       CMD_TMP := StringReplace(CMD_TMP, '%dbname%', GetClearIpPath(FDBName), [rfReplaceAll]);
       CMD_TMP := StringReplace(CMD_TMP, '%ip_path%', GetIpPath(FDBName) + ':', [rfReplaceAll]);
       CMD_TMP := StringReplace(CMD_TMP, '\', '/', [rfReplaceAll]);
    end;
  CMD_TMP := StringReplace(CMD_TMP, '%firebird_path%', dmGlobal.GetPathFireBird, [rfReplaceAll]);
  CMD_TMP := StringReplace(CMD_TMP, '%lock_timeout%', '10', [rfReplaceAll]);

  Table_List := ibGetFieldValueStringsForSql(SQL_VIEW_ALLTABLE,
                      FDBName, dmGlobal.CurrDbUserName, dmGlobal.CurrDbPassword,
                      [],
                      'TABLENAME');
  pbStatus.Position := 0;
  if Assigned(Table_List)
    then begin
      pbStatus.Properties.Max := Table_List.Count - 1;
      for i := 0 to Table_List.Count - 1 do
      begin
        TableName := Trim(Table_List[i]);
        CMD_EXE := StringReplace(CMD_TMP, '%table_name%', TableName, [rfReplaceAll]);
        memoLogs.Lines.Add(CMD_EXE);
        if TableName <> ''
          then if not ExecConsoleApp_online(Application, CMD_EXE, Write_memoLogs, Write_memoLogs)
            then Break;
        pbStatus.Position := i;
      end;
      pbStatus.Properties.Max := Table_List.Count - 1;
    end;
end;
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39301784
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_Alexeyhvlad, Приложению выставил админские права.Я не об этом спрашивал.
Я спрашивал об учётной записи, под которой выполняется приложение.
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39301794
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad, Те же права что и в командной строке, где все работает.
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39301801
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_Alexey,

продолжай монолог
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39301808
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,
Все под одной учетной записью выполняется, т.е. права везде одинаковые.
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39301900
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_AlexeyCreateProcess
упорно пилишь гирю?
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39301979
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvFofanov_AlexeyCreateProcess
упорно пилишь гирю?
Гирю уже распилил, локальные базы проверяет на ура, с сетевыми засада, ругается на недоступность (см.выше).

TIBValidationService - тоже не вариант, увы нельзя проверить базу в которой "кто-то трудиться".

Я подозреваю, что через Services Manager надо пытаться реализовать проверку (Isc_service_attach, Isc_service_start, Isc_service_query, Isc_service_detach)?
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39301985
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fofanov_Alexey,

последняя попытка - приложение работает как сервис или нет ?
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39302007
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladFofanov_Alexey,

последняя попытка - приложение работает как сервис или нет ?

Нет
...
Рейтинг: 0 / 0
Диагностика базы данных
    #39302171
Fofanov_Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обычное разухабистое виндовое приложение :)
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Диагностика базы данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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