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

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

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

Пробовал:
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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

Откуда: Украина, Харьков
Сообщений: 11971
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

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

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

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

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

Откуда:
Сообщений: 10993
_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

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

Откуда: iBase.ru
Сообщений: 29015
_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

Откуда: Украина, Харьков
Сообщений: 11971
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
Сообщений: 29015
_Vasilisk_,

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

Откуда: Украина, Харьков
Сообщений: 11971
Гаджимурадов Рустам
А клиент (хозяин БД) не сообщил никаких сведений о сценарии поломки?
Нет. Исходная жалоба была: "Что-то все тормозит"
Мимопроходящий
запусти рестор с ключом -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

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31305
_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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31305
_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

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

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

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

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31305
_Vasilisk_
Мимопроходящий
хрень какая-то.
http://www.ibase.ru/db_repair/#pdup
найопка!
плацебо!
23 июл 20, 15:50    [22172481]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29015
Мимопроходящий,

ib xe7

gbak -?
-VA(LIDATE) validate data

причем, когда я писал в статью, проверял, и правда -va ВКЛЮЧАЛО валидацию, без нее ничего не валидировалось.
Надо будет перепроверить.

_Vasilisk_
gbak.exe" -archive_recover

што??? Это восстановление базы из "архива", который делается через -archive_database, причем это ДАМП, а не "бэкап".
Почему оно не ругается на комбинацию -archive_recover -r - я не знаю. Но по смыслу это перпендикулярные опции.

Ну и вообще, я уже неоднократно говорил про -r. Это путь в обрыв. Привыкнешь тестовые базы так ресторить, и в очередной раз убьешь нормальную.
23 июл 20, 15:52    [22172484]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
kdv
Member

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

ну проверил бы без -va. Это как сделали в ИБ 7, так я и написал. Может обратно переделали, хотя справка по гбак у ИБ хе7 утверждает что -va это именно включение проверки.
23 июл 20, 15:54    [22172485]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31305
жаль конечно что у тебя исходной базы нет.
а то может оказаться что оно и в исходной было INACTIVE.
и gbak это состояние честно забекапил.
х.з. чо там IB позволяет в этом плане.
тут "чистый экскремент" нужен! (С)
23 июл 20, 15:54    [22172487]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
hvlad
Member

Откуда:
Сообщений: 10993
Мимопроходящий
жаль конечно что у тебя исходной базы нет.
а то может оказаться что оно и в исходной было INACTIVE.
и gbak это состояние честно забекапил.
Именно так оно и было - 146%.
23 июл 20, 16:27    [22172524]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11971
Мимопроходящий
а то может оказаться что оно и в исходной было INACTIVE.
А откуда оно могло появиться?
23 июл 20, 16:43    [22172535]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31305
_Vasilisk_
Мимопроходящий
а то может оказаться что оно и в исходной было INACTIVE.
А откуда оно могло появиться?
по пыльному следу курсора на мониторе очень сложно будет выяснить
23 июл 20, 16:52    [22172544]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
hvlad
Member

Откуда:
Сообщений: 10993
_Vasilisk_
Мимопроходящий
а то может оказаться что оно и в исходной было INACTIVE.
А откуда оно могло появиться?
Из-за дубликатов в PK предыдущий рестор обломался и индексы не активировались.
Или предыдущий рестор был с деактивированными индексами - по той же причине.
23 июл 20, 17:21    [22172565]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29015
_Vasilisk_
А откуда оно могло появиться?

у обычных индексов - кто-то взял и выключил.
у pk-fk-unique - маловероятно, разве что через системные таблицы (и то там волшебное значение 3 надо указывать для деактивации)

Ты вот спрашиваешь, и х.з. что тебе отвечать. Потому что, например, при ресторе все индексы создаются в конце рестора.
У ИБ видимо осталось (было и в ФБ, но в 2.1 уже нет), что если хоть какой-то индекс активировать обломилось, то дальше все остальные индексы тоже остаются неактивными. И тут всё зависит только от порядка таблиц, как они бэкапились.

Собственно. Сделал эксперимент. Взял employee.gdb. Вырубил rdb$primary1, добавил в country запись с дубликатом ПК, сделал бэкап.
Делаю рестор
gbak -c e.gbk e1.gdb -v
Thu Jul 23 17:09:02 2020: gbak: creating indexes
gbak: ERROR: connection lost to database
Thu Jul 23 17:09:12 2020: gbak: Exiting before completion due to errors
gbak: ERROR: connection lost to database

Упало! Упал гбак, ИБ при этом не упал.

Пускаю рестор с -va.
gbak -c e.gbk e1.gdb -v -va
На самом старте какие-то дикие тормоза.
Thu Jul 23 17:13:23 2020: gbak: creating indexes
Thu Jul 23 17:13:33 2020: gbak: cannot commit index RDB$FOREIGN3
gbak: ERROR: connection lost to database
gbak: ERROR: connection lost to database
Thu Jul 23 17:13:33 2020: gbak: Exiting before completion due to errors
gbak: ERROR: connection lost to database
gbak: ERROR: connection lost to database

Уже лучше. Явно видно что -va действительно ВКЛЮЧАЕТ валидацию. Смотрим внутрь баз.

Открываем базу от первого рестора.
I/O error for file "D:\IB2017\BIN\E11.GDB".
Error while trying to read from file.
Достигнут конец файла. .

Т.е. база тю-тю.

Открываем базу рестора с -va
Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
database file appears corrupt ().
wrong page type.
page 509 is of wrong type (expected 5, found 0).

И вторая тоже того, повреждена в процессе рестора (очешуеть можно!).
Тем не менее она открылась, а вот ibe системные таблицы не кажет. В rdb$indices неактивны вообще ВСЕ индексы, включая по системным таблицам. ПК-ФК на юзерские таблицы тоже неактивны все (значение 3)

Чё-то какой-то пугающий эксперимент.

p.s. кстати, что мне в голову впёрлась хе7, если у тебя 2017. Проверял на ней, версия 13.3.0.328, последняя (update 3).
23 июл 20, 17:22    [22172567]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
kdv
Member

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

кароч, у ИБ при ресторе коммит всех индексов идет в одной транзакции. Отсюда всё что есть - деактивировано нахрен :-)
23 июл 20, 17:31    [22172576]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31305
а если с ключом -o[ne_at_time] ?
23 июл 20, 17:35    [22172580]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29015
Мимопроходящий
а если с ключом -o[ne_at_time] ?

теперь это ключ -on[e_at_a_time]
потому что если написать
D:\IB2017\bin>gbak -c e.gbk e1.gdb -v -va -o
gbak: ERROR: ods version parameter missing
Thu Jul 23 18:58:04 2020: gbak: Exiting before completion due to errors

на букву О там дохрена чего
-ODS(_VERSION) restore to specific major ODS version number
-O(NE_AT_A_TIME) restore one table at a time
-OL(D_DESCRIPTIONS) save old style metadata descriptions
-OV(ERWRITE_DUMP) overwrite dump file

криворукие, что с них взять.

Впрочем, что с -on, что без, результат один (я ничего другого и не ожидал, т.к. -o это "не туда").
23 июл 20, 19:00    [22172650]     Ответить | Цитировать Сообщить модератору
 Re: Активировать индексы  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61554
_Vasilisk_> А откуда оно могло появиться?

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

Posted via ActualForum NNTP Server 1.5

23 июл 20, 20:46    [22172740]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Firebird, InterBase Ответить