powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нарушение уникальности PK
25 сообщений из 111, страница 3 из 5
Нарушение уникальности PK
    #39195733
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovТогда как объяснить, что мне в файле БД обычном фар-ом удалось найти занчение текстового гуида?Если я правильно путаю, то сравнивается размер сжатой и нормальной записи, и если сжатая больше, пишется без сжатия.

Почему-то я так помню, искать лень, поправьте, коллеги.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195735
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovВот сейчас проделаю все операции на копии БД, содержащей ошибку:

GFIX:
Код: powershell
1.
2.
Summary of validation errors 
	Number of index page errors	: 1

Где соотв. сообщение из firebird.log ?

PolesovЧто я делаю не так?Мне отсюда не видно.
Например я понятия не имею - что такое PK_T, какое отношение он имеет к T и где у тебя INT, а где GUID.

Давай сюда DDL таблицы, индексов и сообщение из firebird.log
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195736
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladОшибку выдаст commit.
Правда, если выполнять это в isql, то он сделает коммит сам (если ему явно не запретить)
и будет казаться, что ошибку выдал ALTER

Делал и в isql, и в ibe - никаких ошибок не было. Ни до commit, ни после.

Готов рассмотреть возможность передачи экземпляра БД.
Если удалить данные из других таблиц, повлияет ли это на наличие ошибки?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195738
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийHello, Polesov!
You wrote on 18 марта 2016 г. 19:08:19:

Polesov> Тогда как объяснить, что мне в файле БД обычном фар-ом удалось найти занчение текстового гуида?
> Более того, после изменения в текстовом значении поля непосредственно в файле БД эти изменения стали видны при SQL-запросе.
вполне возможно то что ты пишешь.
проверено экспериментально.


Значит, в моем случае все же было 2 записи?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195739
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryЕсли я правильно путаю
Неправильно ты путаешь. Это делается для дельты. Сжатие безусловно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195748
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladДавай сюда DDL таблицы, индексов и сообщение из firebird.log

firebird.log
Код: powershell
1.
2.
3.
PC-12	Fri Mar 18 18:52:53 2016
	Database: err_db
	Index 16 is corrupt (record 0 have missing entries) in table T (192)



Фрагмент таблицы:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE T (
    ID                  INTEGER NOT NULL,
    REF_ID              INTEGER,
    NAME1               VARCHAR(1000),
    NAME2               VARCHAR(60),
    COMMENTS            VARCHAR(255),
    DELETED             SMALLINT DEFAULT 0 NOT NULL,
    CREATEDATE          DATE,
    CREATOR             VARCHAR(31),
    GUID                CHAR(36) NOT NULL
);

ALTER TABLE T ADD CONSTRAINT PK_T PRIMARY KEY (ID);
ALTER TABLE T ADD CONSTRAINT UNQ_T UNIQUE (REF_ID);
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195760
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovЧто я делаю не так?
для полноты эксперимента
- надо посмотреть, что пишется в firebird.log на тему этого битого индекса. Может это и не про этот индекс.
- надо попробовать alter table drop constraint pk, и опять создать pk, без удаления "дубликатов".

я не знаю, каким образом получается, что индекс создается уже битый, причем без ошибки (см. выше, может, гфикс вообще не про тот индекс тебе сообщает).
А вот про "на диске не то, что выводится" - я уже говорил. Поэтому индексирование будет успешным, и физически дубликатов там нет. а ты их якобы видишь.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195766
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovIndex 16 is corrupt
см. rdb$indices, ищи там индекс с номером 16 для таблицы T, и потом давай ddl этого индекса.

p.s. че-то я начинаю терять нить разговора. накой черт тут про исправление гуида на диске hex-едитором, если приведены два уникальных индекса для integer-столбцов??? Где, ёп, индекс по guid ? :-) Вот зачем людям голову морочить лишней информацией?

Polesovrecord 0 have missing entriesв данном случае что-то не индексируется. Могу тогда разве что поставить на то, что на диске данные настолько для движка кривые, что он их читает, но не индексирует, и даже ошибку не выдает.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195775
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvнакой черт тут про исправление гуида на диске hex-едитором, если приведены два уникальных индекса для integer-столбцов?

для того, чтобы одному из них поменять PK-ID обычным UPDATE ... WHERE GUID = xxxxx

хотя, конечно, можно было бы и к RDB$DB_KEY привязаться и через курсор замутить, и наверное через генератор тоже...
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195839
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

я не вижу 17 индексов в этом DDL.
Так что какой из них сломан - остаётся загадкой.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39195988
_Читатель_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос, м.б. и дилетантский, но: Почему бы не создать новую (пустую) базу, а затем не перелить в нее данные?
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197105
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.

На текущий момент из БД удалены все объекты, кроме таблицы с проблемным PK.
В этой таблице оставлено 2 поля (DDL получен в IBE):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE DOMAIN D_ID AS INTEGER NOT NULL;

CREATE DOMAIN D_GUID AS VARCHAR(36) CHARACTER SET WIN1251 COLLATE WIN1251;

CREATE TABLE EMPLOYES (
    ID    D_ID NOT NULL,
    GUID  D_GUID NOT NULL
);

ALTER TABLE EMPLOYES ADD CONSTRAINT PK_EMPLOYES PRIMARY KEY (ID);

CREATE INDEX EMPLOYES_IDX_GUID ON EMPLOYES (GUID);



Был сделан бэкап/ресторе - база получилась 118 MB.
GFIX ошибок не находит.
Запрос вида
Код: plsql
1.
2.
3.
4.
select ID, count(*)
  from EMPLOYES
 group by ID
having count(*) > 1

по прежнему возвращает

Код: powershell
1.
2.
ID      COUNT
187112	2



P.S. Интересующимся могу выслать базу по запросу.

С уважением, Polesov.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197114
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

высылай (не саму БД есс-но, ссылку на место загрузки)
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197115
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Читатель_Почему бы не создать новую (пустую) базу, а затем не перелить в нее данные?

Если БД имеет большой объем, время переливки может быть весьма значительным.

Гораздо проще (и быстрее) удалить все FK на проблемную таблицу, удалить PK, избавиться от записи-дубля, и восстановить PK и все удаленные FK.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197117
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

да, и ещё :
а) проверь на 2.5.5 (лучше на текущем снапшоте 2.5.6), а не на 2.5.4
б) что выдаст такой запрос ?

Код: sql
1.
2.
3.
4.
select ID + 0, count(*)
  from EMPLOYES
 group by 1
having count(*) > 1
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197122
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197130
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladда, и ещё :
а) проверь на 2.5.5 (лучше на текущем снапшоте 2.5.6), а не на 2.5.4

Проверял на:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
SQL> show version;
ISQL Version: WI-V2.5.5.26952 Firebird 2.5
Server version:
Firebird/x86/Windows NT (access method), version "WI-V2.5.5.26952 Firebird 2.5"
Firebird/x86/Windows NT (remote server), version "WI-V2.5.5.26952 Firebird 2.5/XNet (IT-03)/P12"
Firebird/x86/Windows NT (remote interface), version "WI-V2.5.5.26952 Firebird 2.5/XNet (IT-03)/P12"
on disk structure version 11.2
SQL>



hvladб) что выдаст такой запрос ?

Код: sql
1.
2.
3.
4.
select ID + 0, count(*)
  from EMPLOYES
 group by 1
having count(*) > 1


Тоже самое.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197135
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovЗапрос:
Код: plsql
1.
2.
3.
select *
  from T
 where ID = 123


Результат: 2 абсолютно идентичных записи


А план какой? может он у тебя по другому индексу отбирает, не по PK_T

придумался ещё один весьма экзотичный, но гипотетически возможный баг: в индексе реально создаются два листа для одной записи, и при отборе именно по индексу запись задваивается, в отличие от " ...WHERE (ID+0) = 123"
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197145
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, имя индекса отличается от имени PK. Вот что показывает IBE:
Код: powershell
1.
2.
Constraint Name        On Field        Index Name        Index Sorting
PK_EMPLOYES            ID              RDB$PRIMARY16     Ascending
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197151
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochА план какой?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select *
  from EMPLOYES
 where ID = 187112

Plan
PLAN (EMPLOYES INDEX (RDB$PRIMARY16))

Adapted Plan
PLAN (EMPLOYES INDEX (PK_EMPLOYES))



Код: plsql
1.
2.
3.
4.
5.
6.
select *
  from EMPLOYES
 where ID + 0 = 187112

Plan
PLAN (EMPLOYES NATURAL)



Оба запроса возвращают 2 записи
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197157
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochпридумался ещё один весьма экзотичный, но гипотетически возможный баг
Этот баг совсем не гипотетический и совсем не экзотичный. Он живёт в сервере с версии 1.0
или 1.5, но не приводит к такому результату, поскольку в битовой карте бит не может быть
установлен дважды.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197164
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удалил PK и создал его заново - никаких ошибок. Дубликат PK остался.
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197169
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAriochпридумался ещё один весьма экзотичный, но гипотетически возможный баг
Этот баг совсем не гипотетический и совсем не экзотичный. Он живёт в сервере с версии 1.0
или 1.5, но не приводит к такому результату, поскольку в битовой карте бит не может быть
установлен дважды.

то есть записи возвращаются из таблицы не напрямую по индексу, а через промежуточное построение битовой карты, даже если никаких джойнов нет и в помине?

не знал...
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197173
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

битовая карта не строится только в одном случае, когда идёт навигация по индексу
...
Рейтинг: 0 / 0
Нарушение уникальности PK
    #39197200
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovКстати, имя индекса отличается от имени PK.
это значит, что или констрейнт ПК не был поименован при создании, или что даже если был именован, был создан в ФБ ниже версии 1.5.
...
Рейтинг: 0 / 0
25 сообщений из 111, страница 3 из 5
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нарушение уникальности PK
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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