powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не отрабатывает foreign key
13 сообщений из 13, страница 1 из 1
Не отрабатывает foreign key
    #40016887
red_tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемое сообщество, возникла проблема с базой.
Firebird 3.0.7.33374.

Пропадают записи, на которые есть ссылка по внешнему ключу.
Таблица-detail

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE CALC$DETAIL (
    DET_ID           INTEGER NOT NULL,
    ....
    DET_SRC          INTEGER,
    ....
);


ALTER TABLE CALC$DETAIL ADD CONSTRAINT FK_DET_SRC FOREIGN KEY (DET_SRC) REFERENCES CALC$SOURCE (SRC_ID) ON DELETE CASCADE;



Таблица - MASTER

Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE CALC$SOURCE (
    SRC_ID         INTEGER NOT NULL,
    ....
);

ALTER TABLE CALC$SOURCE ADD CONSTRAINT PK_CALC$SOURCE PRIMARY KEY (SRC_ID);



В один прекрасный момент обнаружились записи в дочерней таблице, ссылающиеся на несуществующие записи в главной таблице.
Есть тригер по записи в лог, в ней видно, что запись с необходимым ИД в таблицу CALC$SOURCE вставлялась, удаления в логе нет.

Чеки по базе прогнал, были ошибки
Summary of validation errors
Number of data page errors : 6
Number of pointer page warnings : 6
Number of database page warnings : 960


После починки, записи не появились.

Вопрос - как такое возможно? Чем бороть? Есть подобные примеры и в других таблицах. Заранее благодарен.
...
Рейтинг: 0 / 0
Не отрабатывает foreign key
    #40016890
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
red_tracer
В один прекрасный момент обнаружились записи в дочерней таблице, ссылающиеся на несуществующие записи в главной таблице.
Есть тригер по записи в лог, в ней видно, что запись с необходимым ИД в таблицу CALC$SOURCE вставлялась, удаления в логе нет.
Откуда тогда мнение, что записи в мастере не существуют ?
Натуралом их искали ?
Валидацию делали полную ?
...
Рейтинг: 0 / 0
Не отрабатывает foreign key
    #40016897
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
red_tracer,

Была такая проблема на одной базе, когда падал сервак и был выключен force write.
На тот момент удалил все записи с несуществующими fk и сделал b/r. Потом включил fw и проблем таких больше не было.
...
Рейтинг: 0 / 0
Не отрабатывает foreign key
    #40016902
red_tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad
Откуда тогда мнение, что записи в мастере не существуют ?
Натуралом их искали ?
Валидацию делали полную ?


Валидация полная, ошибок после нее не находит.
Натуралом - не находит.
Рестор базы также не восстанавливает эти записи, соответственно, не поднимается foreign key.

demon1992,
Вроде как ForcedWrites=On - такого параметра в firebird.conf нет, соответственно, должен быть включен?
...
Рейтинг: 0 / 0
Не отрабатывает foreign key
    #40016917
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
red_tracerтакого параметра в firebird.conf нет
ух, ох...
...
Рейтинг: 0 / 0
Не отрабатывает foreign key
    #40016918
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
red_tracerВроде как ForcedWrites=On - такого параметра в firebird.conf нет, соответственно, должен быть включен?
Он не в конфиге, а в хидере бд.
Сделай gstat -h, там увидишь.
...
Рейтинг: 0 / 0
Не отрабатывает foreign key
    #40016919
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
red_tracer,

Либо запись в мастере не удаляли - на что указывает лог, и проблема в индексе (PK) - её должна найти полная валидация (а как именно вы её запускали ?)
Либо запись в мастере удаляли и не сработал FK (из-за проблемы в его индексе, см про валидацию), но тогда в топку этот лог.
Либо вы что-то не видите и\или не договариваете.
...
Рейтинг: 0 / 0
Не отрабатывает foreign key
    #40017085
red_tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
demon1992
red_tracerВроде как ForcedWrites=On - такого параметра в firebird.conf нет, соответственно, должен быть включен?

Он не в конфиге, а в хидере бд.
Сделай gstat -h, там увидишь.

Force write установлен, насколько вижу.

Код: sql
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.
c:\Program Files\Firebird\Firebird_3_0>gstat -h c:\Temp\BK_REST\FIN.GDB

Database "C:\TEMP\BK_REST\FIN.GDB"
Gstat execution time Wed Nov 11 10:59:12 2020

Database header page information:
        Flags                   0
        Generation              1416630
        System Change Number    0
        Page size               8192
        ODS version             12.0
        Oldest transaction      1793522
        Oldest active           1793523
        Oldest snapshot         1793523
        Next transaction        1793532
        Sequence number         0
        Next attachment ID      5591
        Implementation          HW=AMD/Intel/x64 little-endian OS=Windows CC=MSV
C
        Shadow count            0
        Page buffers            0
        Next header page        0
        Database dialect        3
        Creation date           Oct 25, 2020 21:08:02
        Attributes              force write, no reserve, multi-user maintenance

    Variable header data:
        Sweep interval:         20000
        *END*
Gstat completion time Wed Nov 11 10:59:12 2020




hvlad
red_tracer,

Либо запись в мастере не удаляли - на что указывает лог, и проблема в индексе (PK) - её должна найти полная валидация (а как именно вы её запускали ?)


Запускал валидацию таким образом

gfix -mend -full -ignore -user SYSDBA -pas masterkey database.gdb


hvlad
Либо запись в мастере удаляли и не сработал FK (из-за проблемы в его индексе, см про валидацию), но тогда в топку этот лог.
Либо вы что-то не видите и\или не договариваете.


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

Была еще одна проблема - после восстановления БД из бекапа пропадали некоторые записи, которые можно было выбрать в исходной БД.
...
Рейтинг: 0 / 0
Не отрабатывает foreign key
    #40017090
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
red_tracerAttributes no reserve
посторонний вопрос - вот это зачем? классический ответ - "было сделано до нас, мы не знаем".
Ожидаю какой-то другой вариант ответа.
red_tracerпосле восстановления БД из бекапа пропадали некоторые записи
то есть, они не бэкапились.
...
Рейтинг: 0 / 0
Не отрабатывает foreign key
    #40017104
red_tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv

то есть, они не бэкапились.


Да. Ошибок никаких в логах бекапа/рестора не было, кроме восстановления внешнего ключа, который в топике.
...
Рейтинг: 0 / 0
Не отрабатывает foreign key
    #40017150
Gorynich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
red_tracer

Пропадают записи, на которые есть ссылка по внешнему ключу.


Были такие проблемы, когда на сервере стояла битая планка памяти, причем определилась на вторые сутки тестирования memtest-ом. После замены памяти, все проблемы, естественно, исчезли.
...
Рейтинг: 0 / 0
Не отрабатывает foreign key
    #40017180
red_tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обнаружил такие записи в firebird.log - на проверке.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
MAXIMUM2	Tue Nov 10 15:38:13 2020
	Database: C:\TEMP\BK_REST\FIN.GDB
	Error: Data page 1680194 {sequence 5106} marked as secondary but contains primary record versions in table CALC$SOURCE (243)


MAXIMUM2	Tue Nov 10 15:38:13 2020
	Database: C:\TEMP\BK_REST\FIN.GDB
	Warning: Pointer page 426570 {sequence 3} bits {0x08 secondary} are not consistent with data page 1680194 {sequence 5106} state {0x00 } in table CALC$SOURCE (243)



И еще по паре таблиц такие же ошибки.

Плюс warnings

Код: sql
1.
2.
3.
MAXIMUM2	Tue Nov 10 15:38:50 2020
	Database: C:\TEMP\BK_REST\FIN.GDB
	Warning: Page 1677296 is an orphan




После исправления таких ошибок в логе нет. Но необходимые записи не появились.
...
Рейтинг: 0 / 0
Не отрабатывает foreign key
    #40017207
sergpn_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
red_tracer
demon1992
пропущено...

Он не в конфиге, а в хидере бд.
Сделай gstat -h, там увидишь.


Force write установлен, насколько вижу.


Запускал валидацию таким образом

gfix -mend -full -ignore -user SYSDBA -pas masterkey database.gdb



После такой "валидации" ты их и потерял.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не отрабатывает foreign key
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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