Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Активировать индексы  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11982
Прислали базу, в которой все индексы, кроме уникальных деактивированы.

Можно ли их как-то активировать обратно?

Пробовал:
EXECUTE IBEBLOCK
AS
BEGIN
  FOR
    SELECT
      idx.rdb$index_name
    FROM
      rdb$indices idx
    WHERE
      idx.rdb$index_inactive = 1
    INTO
      :var_name
  DO BEGIN
    var_sql = 'ALTER INDEX ' || ibec_Trim(:var_name) || ' ACTIVE';
    EXECUTE STATEMENT :var_sql;
  END
END;

Сервер падает с ошибкой в логе
internal gds software consistency check (partner index description not found (175), file: idx.c line: 1410)

UPDATE rdb$indices idx SET
  idx.rdb$index_inactive = 0
WHERE
  idx.rdb$index_inactive = 1;
при коммите падение с той же ошибкой.

База после рестора. База 4 гига, поэтому переливать данные в чистую базу пока не хочется.

И второй вопрос: как такое могло произойти?

Сервер: InterBase 2017

С уважением, Vasilisk

К сообщению приложен файл. Размер - 20Kb


Сообщение было отредактировано: 22 июл 20, 18:13
22 июл 20, 18:11    [22171898]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50835

_Vasilisk_
Можно ли их как-то активировать обратно?

У IBE есть специальная кнопочка для этого.

_Vasilisk_
И второй вопрос: как такое могло произойти?

Восстановление либо не завершилось из-за ошибки, либо активация индексов была
принудительна отключена опциями gbak. В первом случае в базе много чего можно недосчитаться.

Posted via ActualForum NNTP Server 1.5

22 июл 20, 18:40    [22171904]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11982
Dimitry Sibiryakov
У IBE есть специальная кнопочка для этого.
Вижу только в таблице. Т.е. придется открывать каждую таблицу. И он не активирует индексы, которые начинаются с RDB$

Dimitry Sibiryakov
Восстановление либо не завершилось из-за ошибки, либо активация индексов была принудительна отключена опциями gbak.
Запускал с опциями
"c:\Program Files\Embarcadero\InterBase\bin\gbak.exe" -archive_recover -r -user SYSDBA -pas masterkey -va -y %log% "%gbk%" %ib%
процесс завершился, лог пустой
22 июл 20, 18:46    [22171908]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31312
_Vasilisk_
процесс завершился, лог пустой
исходная база с которой делался бекап скорее всего "поломатая".
если есть возможность, проверь её.
22 июл 20, 19:08    [22171917]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11982
Мимопроходящий
исходная база с которой делался бекап скорее всего "поломатая".
Валидацию сделать?

Допустим да, тогда что?
22 июл 20, 19:14    [22171919]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11982
Мимопроходящий
если есть возможность, проверь её.
Вспомнил. С большой вероятностью исходной базы нет. На днях делали бэкап/рестор и после рестора оригинальную базу скорее всего убили
22 июл 20, 19:20    [22171924]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
hvlad
Member

Откуда:
Сообщений: 10996
_Vasilisk_
Сервер падает с ошибкой в логе
internal gds software consistency check (partner index description not found
Не знаю про IB, но в FB это говорит о том, что второй индекс в паре PK\UK <-> FK не активен или вообще удалён.

Поэтому утверждение
_Vasilisk_
все индексы, кроме уникальных деактивированы.
нужно бы проверить.

Чтобы это исправить, можно попробовать
- активировать все обычные индексы (не относящиеся к ограничениям PK\UK\FK) и закоммитить их,
- активировать оставшиеся PK\UK и закоммитить их,
- активировать FK по-одному с коммитом каждого - так найдётся тот FK, для которого нет пары

PS что в RDB$INDICES.RDB$INDEX_INACTIVE у неактивных индексов ?
22 июл 20, 19:44    [22171935]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31312
_Vasilisk_
процесс завершился, лог пустой
ресторить нужно с ключиком -v
22 июл 20, 20:09    [22171947]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29037
_Vasilisk_
И он не активирует индексы, которые начинаются с RDB$

а зачем ему это??? Что - индексы с RDB$ тоже неактивные?

про ошибку
(partner index description not found (175)
написано тут https://www.ibase.ru/errors/

че-то да, подозрительная база. Глянь gstat -h, если рестор был с обломом, она должна быть в shutdown.
22 июл 20, 20:57    [22171968]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11982
hvlad
Поэтому утверждение
_Vasilisk_
все индексы, кроме уникальных деактивированы.
нужно бы проверить.
Да. Соврал. Часть primary key тоже неактивна. Но при их активации появляется ошибка о существовании дубликатов записей.

Сейчас над этим работаю
hvlad
PS что в RDB$INDICES.RDB$INDEX_INACTIVE у неактивных индексов ?
1
kdv
Глянь gstat -h,
Database header page information:
Flags 0
Checksum 12345
Write timestamp Jul 23, 2020 13:04:07
Page size 4096
ODS version 17.0
Oldest transaction 873
Oldest active 874
Oldest snapshot 874
Next transaction 875
Sequence number 0
Next attachment ID 0
Implementation ID 16
Shadow count 0
Page buffers 32768
Next header page 0
Database dialect 3
Creation date Jul 22, 2020 17:34:06
Backup timestamp Jul 22, 2020 17:38:46
Attributes

Variable header data:
Sweep interval: 20000
*END*
kdv
если рестор был с обломом,
Я ее сам ресторил. Облома не видел
23 июл 20, 13:08    [22172284]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29037
_Vasilisk_,

так, комменты не по делу: база 4 гиг, а page size у нее 4к (мало, надо 8к), да еще и кэш прописан в заголовке, причем 128мб (при том что ИБ только суперсервер).
23 июл 20, 13:13    [22172288]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31312
_Vasilisk_
Я ее сам ресторил. Облома не видел
не может такого быть, потому что никогда.
запусти рестор с ключом -v.
концовку вывода выложи сюда.
23 июл 20, 13:19    [22172297]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61571
_Vasilisk_> Но при их активации появляется ошибка о существовании дубликатов записей.

А клиент (хозяин БД) не сообщил никаких сведений о сценарии поломки?

Posted via ActualForum NNTP Server 1.5

23 июл 20, 14:06    [22172348]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11982
Гаджимурадов Рустам
А клиент (хозяин БД) не сообщил никаких сведений о сценарии поломки?
Нет. Исходная жалоба была: "Что-то все тормозит"
Мимопроходящий
запусти рестор с ключом -v.
концовку вывода выложи сюда.
Запуск
"c:\Program Files\Embarcadero\InterBase\bin\gbak.exe" -archive_recover -r -user SYSDBA -pas masterkey -v -va -y %log% "%gbk%" %ib%
выхлоп
Thu Jul 23 14:51:47 2020: gbak: opened file d:\DB\Crash.GBK
Thu Jul 23 14:51:47 2020: gbak: transportable backup -- data in XDR format
Thu Jul 23 14:51:47 2020: gbak: backup file is compressed
Thu Jul 23 14:51:49 2020: gbak: created database localhost:d:\DB\Crash.GBK_test.ib, page_size 4096 bytes
Thu Jul 23 14:51:49 2020: gbak: started transaction
Thu Jul 23 14:51:49 2020: gbak: restoring domain DM_ACTIVITY
Thu Jul 23 14:51:49 2020: gbak: restoring domain DM_ADDRESS
.......................
Thu Jul 23 14:57:17 2020: gbak: restoring privilege for user SYSDBA
Thu Jul 23 14:57:17 2020: gbak: restoring privilege for user SYSDBA
Thu Jul 23 14:57:17 2020: gbak: restoring SQL role: ADMINISTRATOR
Thu Jul 23 14:57:18 2020: gbak: creating indexes
Thu Jul 23 14:57:19 2020: gbak: finishing, closing, and going home
23 июл 20, 15:04    [22172408]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31312
_Vasilisk_, что за ключ -va?
23 июл 20, 15:08    [22172416]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Dayroon
Member

Откуда: Moscow
Сообщений: 1114
Мимопроходящий,
-va[lidate] выполнять контроль данных (InterBase 7.x, 2007, 2009), по умолчанию контроль не выполняется
23 июл 20, 15:11    [22172418]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50835

_Vasilisk_
Исходная жалоба была: "Что-то все тормозит"

Вангую: у них есть процедура периодического бэкап-рестора с заменой исходной БД. На одном
из циклов рестор обломался из-за дубликата в первичном ключе, отсюда начались тормоза и
дальнейшее заполнение дубликатами. Тебе прислали исправный бэкап уже битой базы.

Posted via ActualForum NNTP Server 1.5

23 июл 20, 15:16    [22172421]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11982
Dimitry Sibiryakov
Вангую: у них есть процедура периодического бэкап-рестора с заменой исходной БД.
Не угадал. Автоматический бэкап/рестор есть, но рестор в отдельную базу с валидацией восстановления. И если какие-то траблы, то идет уведомление админу
23 июл 20, 15:20    [22172425]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31312
Dayroon
Мимопроходящий,
-va[lidate] выполнять контроль данных (InterBase 7.x, 2007, 2009), по умолчанию контроль не выполняется
чо-то гложут меня смутные сомненья...
а не наоборот ли?
23 июл 20, 15:24    [22172431]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50835

Мимопроходящий
а не наоборот ли?

Нет, именно так. Это же Interbase.

Posted via ActualForum NNTP Server 1.5

23 июл 20, 15:30    [22172440]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11982
Мимопроходящий
чо-то гложут меня смутные сомненья...
а не наоборот ли?
Именно так. "Фича" от интербейза для убыстрения рестора
23 июл 20, 15:31    [22172444]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31312
_Vasilisk_
Мимопроходящий
чо-то гложут меня смутные сомненья...
а не наоборот ли?
Именно так. "Фича" от интербейза для убыстрения рестора
хрень какая-то.
посмотрел ихнюю доку: http://docwiki.embarcadero.com/images/InterBase/2020/e/3/30/OpGuide.pdf
описание отсутствует напрочь.
одна только странная фраза: "собака - друг человека".
Use to validate the database when restoring it.
и всё.
в чем эта "валидация" заключается, буй проссышь...
убери его нахер, база на выходе БИТАЯ.

проверь кстати, к той ли ты базе цепляешься, на том ли сервере, тем ли инстансом и т.д.
а то бывает, глаз замыливается. смотришь в одно, а оно другое.
каждый хоть раз да наступал на это.

просто ну не может нормальный gbak штатно отработать рестор и оставить после себя битую базу.
хотя, за дебаркадер я зуб не дам...
23 июл 20, 15:40    [22172459]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11982
Итого:

1. Активируем все индексы, кроме внешних ключей
+
EXECUTE IBEBLOCK
AS
BEGIN
  FOR
    SELECT
      idx.rdb$index_name
    FROM
      rdb$indices idx
    WHERE
      idx.rdb$index_inactive = 1
      AND idx.rdb$foreign_key IS NULL
    INTO
      :var_name
  DO BEGIN
    var_sql = 'ALTER INDEX ' || ibec_Trim(:var_name) || ' ACTIVE';
    EXECUTE STATEMENT :var_sql;
  END
END;

COMMIT;

2. В тех местах, где возникают конфликты дубликатов вычищаем их (у меня было три группы дубликатов по две записи на одном ключе)

3. Активируем внешние ключи
+
EXECUTE IBEBLOCK
AS
BEGIN
  FOR
    SELECT
      idx.rdb$index_name
    FROM
      rdb$indices idx
    WHERE
      idx.rdb$index_inactive = 1
      AND idx.rdb$foreign_key IS NOT NULL
    INTO
      :var_name
  DO BEGIN
    var_sql = 'ALTER INDEX ' || ibec_Trim(:var_name) || ' ACTIVE';
    EXECUTE STATEMENT :var_sql;
  END
END;

COMMIT;
23 июл 20, 15:40    [22172460]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11982
Мимопроходящий
хрень какая-то.
http://www.ibase.ru/db_repair/#pdup
23 июл 20, 15:46    [22172472]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31312
_Vasilisk_
Мимопроходящий
хрень какая-то.
http://www.ibase.ru/db_repair/#pdup
найопка!
плацебо!
23 июл 20, 15:50    [22172481]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Firebird, InterBase Ответить