powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Активировать индексы
37 сообщений из 37, показаны все 2 страниц
Активировать индексы
    #39982807
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прислали базу, в которой все индексы, кроме уникальных деактивированы.

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

Пробовал:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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)
Код: sql
1.
2.
3.
4.
UPDATE rdb$indices idx SET
  idx.rdb$index_inactive = 0
WHERE
  idx.rdb$index_inactive = 1;

при коммите падение с той же ошибкой.

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

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

Сервер: InterBase 2017

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Активировать индексы
    #39982810
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Можно ли их как-то активировать обратно?

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

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

Восстановление либо не завершилось из-за ошибки, либо активация индексов была
принудительна отключена опциями gbak. В первом случае в базе много чего можно недосчитаться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Активировать индексы
    #39982812
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
У IBE есть специальная кнопочка для этого.
Вижу только в таблице. Т.е. придется открывать каждую таблицу. И он не активирует индексы, которые начинаются с RDB$

Dimitry Sibiryakov
Восстановление либо не завершилось из-за ошибки, либо активация индексов была принудительна отключена опциями gbak.
Запускал с опциями
Код: powershell
1.
"c:\Program Files\Embarcadero\InterBase\bin\gbak.exe" -archive_recover -r -user SYSDBA -pas masterkey -va -y %log% "%gbk%" %ib%

процесс завершился, лог пустой
...
Рейтинг: 0 / 0
Активировать индексы
    #39982819
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
процесс завершился, лог пустой
исходная база с которой делался бекап скорее всего "поломатая".
если есть возможность, проверь её.
...
Рейтинг: 0 / 0
Активировать индексы
    #39982821
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
исходная база с которой делался бекап скорее всего "поломатая".
Валидацию сделать?

Допустим да, тогда что?
...
Рейтинг: 0 / 0
Активировать индексы
    #39982824
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
если есть возможность, проверь её.
Вспомнил. С большой вероятностью исходной базы нет. На днях делали бэкап/рестор и после рестора оригинальную базу скорее всего убили
...
Рейтинг: 0 / 0
Активировать индексы
    #39982829
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_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 у неактивных индексов ?
...
Рейтинг: 0 / 0
Активировать индексы
    #39982835
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
процесс завершился, лог пустой
ресторить нужно с ключиком -v
...
Рейтинг: 0 / 0
Активировать индексы
    #39982846
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_И он не активирует индексы, которые начинаются с RDB$
а зачем ему это??? Что - индексы с RDB$ тоже неактивные?

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

че-то да, подозрительная база. Глянь gstat -h, если рестор был с обломом, она должна быть в shutdown.
...
Рейтинг: 0 / 0
Активировать индексы
    #39983061
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
Поэтому утверждение
_Vasilisk_
все индексы, кроме уникальных деактивированы.
нужно бы проверить.
Да. Соврал. Часть primary key тоже неактивна. Но при их активации появляется ошибка о существовании дубликатов записей.

Сейчас над этим работаю
hvlad
PS что в RDB$INDICES.RDB$INDEX_INACTIVE у неактивных индексов ?
1
kdv
Глянь gstat -h,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
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
если рестор был с обломом,
Я ее сам ресторил. Облома не видел
...
Рейтинг: 0 / 0
Активировать индексы
    #39983063
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

так, комменты не по делу: база 4 гиг, а page size у нее 4к (мало, надо 8к), да еще и кэш прописан в заголовке, причем 128мб (при том что ИБ только суперсервер).
...
Рейтинг: 0 / 0
Активировать индексы
    #39983069
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Я ее сам ресторил. Облома не видел
не может такого быть, потому что никогда.
запусти рестор с ключом -v.
концовку вывода выложи сюда.
...
Рейтинг: 0 / 0
Активировать индексы
    #39983103
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_> Но при их активации появляется ошибка о существовании дубликатов записей.

А клиент (хозяин БД) не сообщил никаких сведений о сценарии поломки?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Активировать индексы
    #39983142
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
А клиент (хозяин БД) не сообщил никаких сведений о сценарии поломки?
Нет. Исходная жалоба была: "Что-то все тормозит"
Мимопроходящий
запусти рестор с ключом -v.
концовку вывода выложи сюда.
Запуск
Код: powershell
1.
"c:\Program Files\Embarcadero\InterBase\bin\gbak.exe" -archive_recover -r -user SYSDBA -pas masterkey -v -va -y %log% "%gbk%" %ib%

выхлоп
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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
...
Рейтинг: 0 / 0
Активировать индексы
    #39983147
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, что за ключ -va?
...
Рейтинг: 0 / 0
Активировать индексы
    #39983149
Dayroon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,
-va[lidate] выполнять контроль данных (InterBase 7.x, 2007, 2009), по умолчанию контроль не выполняется
...
Рейтинг: 0 / 0
Активировать индексы
    #39983152
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Исходная жалоба была: "Что-то все тормозит"

Вангую: у них есть процедура периодического бэкап-рестора с заменой исходной БД. На одном
из циклов рестор обломался из-за дубликата в первичном ключе, отсюда начались тормоза и
дальнейшее заполнение дубликатами. Тебе прислали исправный бэкап уже битой базы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Активировать индексы
    #39983156
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Вангую: у них есть процедура периодического бэкап-рестора с заменой исходной БД.
Не угадал. Автоматический бэкап/рестор есть, но рестор в отдельную базу с валидацией восстановления. И если какие-то траблы, то идет уведомление админу
...
Рейтинг: 0 / 0
Активировать индексы
    #39983161
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dayroon
Мимопроходящий,
-va[lidate] выполнять контроль данных (InterBase 7.x, 2007, 2009), по умолчанию контроль не выполняется
чо-то гложут меня смутные сомненья...
а не наоборот ли?
...
Рейтинг: 0 / 0
Активировать индексы
    #39983169
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийа не наоборот ли?

Нет, именно так. Это же Interbase.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Активировать индексы
    #39983172
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
чо-то гложут меня смутные сомненья...
а не наоборот ли?
Именно так. "Фича" от интербейза для убыстрения рестора
...
Рейтинг: 0 / 0
Активировать индексы
    #39983184
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Мимопроходящий
чо-то гложут меня смутные сомненья...
а не наоборот ли?
Именно так. "Фича" от интербейза для убыстрения рестора
хрень какая-то.
посмотрел ихнюю доку: http://docwiki.embarcadero.com/images/InterBase/2020/e/3/30/OpGuide.pdf
описание отсутствует напрочь.
одна только странная фраза: "собака - друг человека".
Use to validate the database when restoring it.
и всё.
в чем эта "валидация" заключается, буй проссышь...
убери его нахер, база на выходе БИТАЯ.

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

просто ну не может нормальный gbak штатно отработать рестор и оставить после себя битую базу.
хотя, за дебаркадер я зуб не дам...
...
Рейтинг: 0 / 0
Активировать индексы
    #39983185
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итого:

1. Активируем все индексы, кроме внешних ключей
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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. Активируем внешние ключи
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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;

...
Рейтинг: 0 / 0
Активировать индексы
    #39983192
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
хрень какая-то.
http://www.ibase.ru/db_repair/#pdup
...
Рейтинг: 0 / 0
Активировать индексы
    #39983198
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Мимопроходящий
хрень какая-то.
http://www.ibase.ru/db_repair/#pdup
найопка!
плацебо!
...
Рейтинг: 0 / 0
Активировать индексы
    #39983200
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

ib xe7

gbak -?
-VA(LIDATE) validate data

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

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

Ну и вообще, я уже неоднократно говорил про -r. Это путь в обрыв. Привыкнешь тестовые базы так ресторить, и в очередной раз убьешь нормальную.
...
Рейтинг: 0 / 0
Активировать индексы
    #39983201
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

ну проверил бы без -va. Это как сделали в ИБ 7, так я и написал. Может обратно переделали, хотя справка по гбак у ИБ хе7 утверждает что -va это именно включение проверки.
...
Рейтинг: 0 / 0
Активировать индексы
    #39983202
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жаль конечно что у тебя исходной базы нет.
а то может оказаться что оно и в исходной было INACTIVE.
и gbak это состояние честно забекапил.
х.з. чо там IB позволяет в этом плане.
тут "чистый экскремент" нужен! (С)
...
Рейтинг: 0 / 0
Активировать индексы
    #39983219
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
жаль конечно что у тебя исходной базы нет.
а то может оказаться что оно и в исходной было INACTIVE.
и gbak это состояние честно забекапил.
Именно так оно и было - 146%.
...
Рейтинг: 0 / 0
Активировать индексы
    #39983225
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
а то может оказаться что оно и в исходной было INACTIVE.
А откуда оно могло появиться?
...
Рейтинг: 0 / 0
Активировать индексы
    #39983234
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Мимопроходящий
а то может оказаться что оно и в исходной было INACTIVE.
А откуда оно могло появиться?
по пыльному следу курсора на мониторе очень сложно будет выяснить
...
Рейтинг: 0 / 0
Активировать индексы
    #39983246
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Мимопроходящий
а то может оказаться что оно и в исходной было INACTIVE.
А откуда оно могло появиться?
Из-за дубликатов в PK предыдущий рестор обломался и индексы не активировались.
Или предыдущий рестор был с деактивированными индексами - по той же причине.
...
Рейтинг: 0 / 0
Активировать индексы
    #39983248
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_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).
...
Рейтинг: 0 / 0
Активировать индексы
    #39983254
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

кароч, у ИБ при ресторе коммит всех индексов идет в одной транзакции. Отсюда всё что есть - деактивировано нахрен :-)
...
Рейтинг: 0 / 0
Активировать индексы
    #39983256
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если с ключом -o[ne_at_time] ?
...
Рейтинг: 0 / 0
Активировать индексы
    #39983298
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийа если с ключом -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 это "не туда").
...
Рейтинг: 0 / 0
Активировать индексы
    #39983345
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_> А откуда оно могло появиться?

Да откуда угодно. Ты же не знаешь, что БД, с которой
снимался бэкап, - валидная. Там разные поломки могли
несколько раз случиться, включая кривые руки DBA/DBD.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Активировать индексы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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