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

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

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

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

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

для ежедневной диагностики подойдёт вариант онлайн валидации читать здесь doc/README.online_validation
...
Рейтинг: 0 / 0
31.08.2016, 11:21
    #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
31.08.2016, 11:22
    #39300913
Fofanov_Alexey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диагностика базы данных
Да фаервол отключен
...
Рейтинг: 0 / 0
31.08.2016, 11:27
    #39300922
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диагностика базы данных
Fofanov_Alexey,

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

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

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

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

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

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

В чем грабли?Учётная запись, под которой запускается "код с болтом" - ?
...
Рейтинг: 0 / 0
01.09.2016, 11:38
    #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
01.09.2016, 11:45
    #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
01.09.2016, 11:49
    #39301784
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диагностика базы данных
Fofanov_Alexeyhvlad, Приложению выставил админские права.Я не об этом спрашивал.
Я спрашивал об учётной записи, под которой выполняется приложение.
...
Рейтинг: 0 / 0
01.09.2016, 11:56
    #39301794
Fofanov_Alexey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диагностика базы данных
hvlad, Те же права что и в командной строке, где все работает.
...
Рейтинг: 0 / 0
01.09.2016, 12:03
    #39301801
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диагностика базы данных
Fofanov_Alexey,

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

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

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

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

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

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


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