|
Испорченная БД
|
|||
---|---|---|---|
#18+
dimitrпопробуй создать таблицу и залить в нее данные в той же транзакции. О результатах доложи. На выходных попробую, доложу. В данном случае, на сколько удалось выяснить, сценарий был таков: - массовые апдейты производились из некой клиентской программы (обычная 2-звенка, FIBplus, длинная читающая транзакция и пишущая транзакция на апдейт); - из IBE в уже существующую таблицу сотрудник добавляет целочисленное поле not null; - сразу же после добавления в SQLEditor-е выполняется что-то типа Код: plsql 1. 2.
Создания таблицы и заливки в нее данных в той же транзакции не было. С уважением, Polesov. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 12:27 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
Polesov- из IBE в уже существующую таблицу сотрудник добавляет целочисленное поле not null; - сразу же после добавления в SQLEditor-е выполняется что-то типа прекрасно. т.е. столбец добавляется неизвестно каким способом (я надеюсь, что ИБЕ тут использует alter table), и кроме того, добавление столбца и update выполняются в разных транзакциях ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 12:37 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
Polesov, это не должно приводить к разрушению БД. И ещё есть более правильный путь Код: sql 1. 2.
который ещё и работает быстрее. P.S. В трёшке если таблица содержит данные, то FB не даст тебе добавить NOT NULL столбец без указания кляузы DEFAULT ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 12:37 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
dimitrО результатах доложи. Не стал ждать выходных. Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9.
В общем-то, все ожидаемо, но БД не повредилась. Все же, это несколько другой случай. IMHO. С уважением, Polesov. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 12:50 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
PolesovНе стал ждать выходных. предложено было не тебе, а Сибирякову PolesovВсе же, это несколько другой случай. IMHO именно ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 12:53 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
kdvдобавление столбца и update выполняются в разных транзакциях В принципе, я об этом же и говорил. Симонов Денисэто не должно приводить к разрушению БД По идее да, но все же имеются прецеденты... Речь идет не о том, как при активных коннектах применять к БД DDL, а можно ли выяснить причину падения БД и исправить ошибку в исходном коде сервера. Все же на выходных попробую воспроизвести сценарий порчи БД. С уважением, Polesov. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 12:58 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
dimitrпопробуй создать таблицу и залить в нее данные в той же транзакции. О результатах доложи. Я знаю, что с этого направления вы уже давно поставили заборчик из костылей, но у ТСа-то не CREATE TABLE, а ALTER TABLE ADD COLUMN. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 13:18 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovЯ знаю, что с этого направления вы уже давно поставили заборчик из костылей, но у ТСа-то не CREATE TABLE, а ALTER TABLE ADD COLUMN. 1) его поставили в борланде, насколько я помню 2) ну и нефиг тогда было писать про "создание" таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 13:20 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
dimitrнефиг тогда было писать про "создание" таблицы Кстати, с alter table все то же самое: Код: powershell 1. 2. 3. 4. 5. 6. 7. 8. 9.
С уважением, Polesov. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 13:24 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
Polesov, ну так невозможно проапдейтить ещё не существующий столбец, а вот любой другой легко (DML не видит результаты DDL ещё незавершённой транзакции). И вообще все DDL выполняются только по коммиту. Я же вроде правильный путь показал. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 13:30 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
dimitr1) его поставили в борланде, насколько я помню 1) Я отлично помню, что Firebird 1 и даже, возможно, 1.5, этого заборчика не имели. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 13:40 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
Симонов ДенисDML не видит результаты DDL ещё незавершённой транзакции Более того, в другом коннекте не видит даже после commit в DDL-соединении - только после переподключения. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 13:48 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
Polesovв другом коннекте не видит даже после commit в DDL-соединении - только после переподключения. Потому что Classic ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 13:54 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
[quot Симонов Денис]Polesov, это не должно приводить к разрушению БД. И ещё есть более правильный путь Код: sql 1. 2.
который ещё и работает быстрее. Если я правильно помню то default срабатывает при вставке записи. Если добавить такой командой поле в таблицу где уже есть записи то в имеющихся записях будет NULL несмотря на default. Надо делать update. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 05:26 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
fraks, ты бы проверил что ли. Конечно если добавить DEFAULT к ранее созданному полю NULL значения останутся на своих местах. А вот для нового NOT NULL с DEFAULT поля для всех существующих ранее записей в этом поле будет значение по умолчанию. Причём этот оператор отработает очень быстро, потому что он на самом деле не делает UPDATE, а лишь создаёт новый формат к которому будут приведены существующие записи при выборке. Это как раз я проверял. Думаешь зря в тройке запретили добавление NOT NULL полей в таблицу с данными без предложения DEFAULT? Одно это изменение + запрет на модификацию системных таблиц убирают 50% причин возникновения так называемых "невосстановимых" бэкапов. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 08:43 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
Симонов Денис> в тройке запретили добавление NOT NULL полей Симонов Денис> в таблицу с данными без предложения DEFAULT? Серьёзно? Какой ужас. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 08:57 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, а зачем оно нужно? Чтобы битые базы создавать? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 08:58 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, допустим DEFAULT нам не нужен. Тогда мы можем сделать вот так. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
по крайней мере после выполнения каждого оператора БД остаётся в консистентном состоянии. Последний оператор не меняет номер формата. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 09:15 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
Симонов Денисfraks, ты бы проверил что ли. Конечно если добавить DEFAULT к ранее созданному полю NULL значения останутся на своих местах. А вот для нового NOT NULL с DEFAULT поля для всех существующих ранее записей в этом поле будет значение по умолчанию. Причём этот оператор отработает очень быстро, потому что он на самом деле не делает UPDATE, а лишь создаёт новый формат к которому будут приведены существующие записи при выборке. Это как раз я проверял. Проверил. Действительно, на FB 2.5 это работает. Возможно раньше это было не так (работаю с FB начиная с IB 4.2.1) и потом поправлено, а может был комплект граблей которые я неправильно опознал. Симонов ДенисДумаешь зря в тройке запретили добавление NOT NULL полей в таблицу с данными без предложения DEFAULT? Одно это изменение + запрет на модификацию системных таблиц убирают 50% причин возникновения так называемых "невосстановимых" бэкапов. Буквально на днях прошелся по сходным граблям. В таблицу добавил поле INTEGER DEFAULT -1 NOT NULL и при помощи UPDATE заполнил существующие записи. Косяк в том что делал это при наличи работающих коннектов. В итоге к вечеру в таблице таки были записи где это поле было с NULL и бэкап не ресторился. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 09:44 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
Симонов Денис> Тогда мы можем сделать вот так. Понятно, что сделать можно по-всякому. Но заставлять писать 2 оператора вместо одного без необходимости - маразм. И на это будут справедливо пенять. P.S. Интересно, при создании таблицы (а не добавлении поля) тоже такое же ограничение имеется? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 10:09 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
fraksБуквально на днях прошелся по сходным граблям. В таблицу добавил поле INTEGER DEFAULT -1 NOT NULL и при помощи UPDATE заполнил существующие записи. Косяк в том что делал это при наличи работающих коннектов. В итоге к вечеру в таблице таки были записи где это поле было с NULL и бэкап не ресторился. Так точно. На днях так же добавили поле not null с дефолтным значением в домене. Вечером бэкап не восстановился из-за трех строк с NULL. Делали ли полный апдейт всех строк этой таблицы на дефолтное значение - не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 10:11 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамP.S. Интересно, при создании таблицы (а не добавлении поля) тоже такое же ограничение имеется? нет конечно. Мало того если таблица пустая то добавить NOT NULL поле можно. Такое же поведение и в Оракле хз с какой версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 10:15 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
fraks, работающие коннекты это совсем из другой оперы, там багов ещё вагон и маленькая тележка и не только с NOT NULL. По крайней мере при использовании такого оператора в моноконнекте нельзя получить битую БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 10:18 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
Симонов Денис> нет конечно Ну хоть так. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2016, 10:21 |
|
Испорченная БД
|
|||
---|---|---|---|
#18+
PolesovВсе же на выходных попробую воспроизвести сценарий порчи БД. В пустой БД была создана таблица: Код: plsql 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. 31. 32. 33. 34.
Закачано 10 млн записей. Далее 10 копий программы-имитатора производили в случайных диапазонах апдейты. Из ISQL добавлялось поле интежер нот нулл. Далее после соммита добавленое поле апдейтилось в 0. Апдейт постоянно натыкался на дидлок. Был опробован другой сценарий: 10 копий программы-имитатора коннектились к БД, но ничего не апдейтили. После добавления из ISQL поля и его апдейта в 0 запускались апдейты в программах-имитаторах. В-общем, сломать БД не получилось. С уважением, Polesov. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2016, 13:15 |
|
|
start [/forum/topic.php?fid=40&msg=39168467&tid=1562337]: |
0ms |
get settings: |
14ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 265ms |
total: | 417ms |
0 / 0 |