|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
День добрый. FireBird 2.5.4, база данных в 1-м диалекте Ситуация: при наличии активных подключений в таблицу, которую активно модифицируют пользователи, добавляется поле integer nullable. Далее добавленное поле апдейтится в 0. После коммита запрос count(*) этой таблицы вызывает ошибку. gfix показал наличие большого количества wrong page type. Опция -mend базу не вылечила. Пришлось восстанавливаться из ночного бекапа. Каков механизм порчи базы данных в описанной ситуации? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 10:01 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
quesДень добрый. FireBird 2.5.4, база данных в 1-м диалекте Ситуация: при наличии активных подключений в таблицу, которую активно модифицируют пользователи, добавляется поле integer nullable. Далее добавленное поле апдейтится в 0. После коммита запрос count(*) этой таблицы вызывает ошибку. gfix показал наличие большого количества wrong page type. Опция -mend базу не вылечила. Пришлось восстанавливаться из ночного бекапа. Каков механизм порчи базы данных в описанной ситуации? механизм ты! добавление поля в работающую БД - идиотизм ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 10:10 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
quesСитуация: при наличии активных подключений в таблицу, которую активно модифицируют пользователи, добавляется поле integer nullable. Далее добавленное поле апдейтится в 0. После коммита запрос count(*) этой таблицы вызывает ошибку.Какую ошибку ? quesgfix показал наличие большого количества wrong page type.А когда до этого вызывался gfix ? Т.е. где гарантия, что их не было раньше ? quesКаков механизм порчи базы данных в описанной ситуации?Воспроизводимый пример в трекере даст ответ на этот и другие вопросы ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 11:44 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
Запретить DDL доменов, таблиц и вьюх в немонопольном режиме, а также ввести для них принудительно SET AUTODDL ON - вот что давно назрело в ФБ. Оставить только возможность перекомпиляции ХП и триггеров. Ибо ответ на такие сообщения обычно один: "модицифируешь таблицы при работающих юзерах ? ССЗБ". Если не работает эта штука в ФБ, то зачем её вообще разрешать ?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 11:46 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
Таблоид, не правильнее ли сделать так, чтобы "эта штука" работала? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 11:49 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
dimitrне правильнее ли сделать так, чтобы "эта штука" работала?Если стр-ру созданной ранее таблицы меняют на живой базе, это говорит о недоделанном дизайне. Есть база для девелоперов - на ней и пусть и тренируются. У мну было что-то похожее, когда они индекс дропнули - "вроде бы не юзается нигде...". Поубивать хотел всехнах... :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 11:59 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
Таблоид, Большинство баз под FB - 24/7/365(6) Из них подавляющее большинство - развиваются. То есть и поля добавляются и т.п. Если на каждое добавление поля - монополить БД - это сильно расстроит владельцев бузинеса, боле того - они захотят СУБД, которая "работает". Так что не плюй в колодец ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 13:34 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
КепО, мы уже проходили это волшебство, которое "на лету". Наелись пару раз - спасибо, больше не надо ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 13:59 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
КепОБольшинство баз под FB - 24/7/365(6) Не бывает. Всегда есть регламентные окна хотя бы для сброса счётчика транзакций. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 14:06 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
Таблоид> Запретить DDL в немонопольном режиме, а также ввести для них Таблоид> принудительно SET AUTODDL ON - вот что давно назрело в ФБ Выдыхай, бобёр! (с) И не распространяй свои фантазии на всех - лично у меня подобные глупости не "назрели". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 15:49 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
ТаблоидЗапретить DDL доменов, таблиц и вьюх в немонопольном режиме, а также ввести для них принудительно SET AUTODDL ON - вот что давно назрело в ФБ. Оставить только возможность перекомпиляции ХП и триггеров. Ибо ответ на такие сообщения обычно один: "модицифируешь таблицы при работающих юзерах ? ССЗБ". Если не работает эта штука в ФБ, то зачем её вообще разрешать ?.. Жизнь в принципе нестатичная штука. Зачем ее вообще разрешать =) Ради смеха живые примеры: -первое, что я сделал на прошлой неделе, поставив Линтер, это добавил а потом удалил поле в онлайне -тоже на прошлой неделе, пришлось поменять структуру БД хранения данных внутри "железки", из-за неожиданных глюков в протоколе обмена. Ожидаются "небольшие проблемы" с восстановлением данных до смены структуры Так что свои фантазии вы либо изо рта не вытаскивайте, либо обратно в ***у засуньте. P.S.Да я злой и грубый, уж извините, селяви PPS DS, проблемы счетчика транзакций, бизнес тоже не волнуют Рад, что разработчики смотрят на проблему адекватнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 21:15 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
ЗимарглРади смеха живые примеры: -первое, что я сделал на прошлой неделе, поставив Линтер, это добавил а потом удалил поле в онлайне Ну это ты и FB сделать можешь. Если конечно зависимости от этого поля не наплодил. А если наплодил и удалил поле онлайн, то... У вас там пользователи сильно смеялись когда вдруг поле пропало? Представь себе ситуацию пользователь запускает ХП, а она бац и не работает. А почему? Да там какой-то Вася Пупкин грохнул бездумно поле в таблице, а то что процедура окривела проверить забыл. Ай-ай-ай... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 21:57 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
Симонов Денис> Ну это ты и FB сделать можешь Ты тоже выдыхай. Или внимательнее читай предлагаемые "назревшие" фантазии. :) > Представь себе ситуацию пользователь запускает ХП, а она бац и не работает Так уж прям и не работает? Выдаёт сообщение "бац! не работаю" вместо результата? При чём делает это строго если добавить поле в БД, а потом его удалить? Чёрт, у меня проснулся интерес к Линтеру, чудесная СУБД. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 22:43 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
Симонов ДенисЗимарглРади смеха живые примеры: -первое, что я сделал на прошлой неделе, поставив Линтер, это добавил а потом удалил поле в онлайне Ну это ты и FB сделать можешь. Если конечно зависимости от этого поля не наплодил. А если наплодил и удалил поле онлайн, то... Читай внимательно - "добавил". Еще частая ситуация - поменять тип - расширить его. По хорошему, при таких операциях ничего ломаться в БД не должно, а при норм написании - и в приложениях и в хранимках итп. При разумных операциях грабли ненужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2015, 22:53 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
ЗимарглСимонов Дениспропущено... Ну это ты и FB сделать можешь. Если конечно зависимости от этого поля не наплодил. А если наплодил и удалил поле онлайн, то... Читай внимательно - "добавил". Еще частая ситуация - поменять тип - расширить его. По хорошему, при таких операциях ничего ломаться в БД не должно, а при норм написании - и в приложениях и в хранимках итп. При разумных операциях грабли ненужны. я тоже злой и грубый ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2015, 07:46 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
ЗимарглСимонов Дениспропущено... Ну это ты и FB сделать можешь. Если конечно зависимости от этого поля не наплодил. А если наплодил и удалил поле онлайн, то... Читай внимательно - "добавил". Еще частая ситуация - поменять тип - расширить его. По хорошему, при таких операциях ничего ломаться в БД не должно, а при норм написании - и в приложениях и в хранимках итп. При разумных операциях грабли ненужны. я тоже злой и грубый на вот таких как ты разработчиков ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2015, 07:48 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
Любая БД - продукт с жизненным циклом. В идеале - все операции, возможные в течении жизненного цикла, должны протекать не прерывая основного процесса - доступности БД. По-этому чем больше можно сделать в немонопольном режиме - тем лучше как для нас, так и для FB. to all: давайте обойдёмся без грубостей друг к другу. Высказывать отношение можно и к мысли, а не только к автору. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2015, 12:35 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
КепО, +1 PS всё равно - не приветствую анонимов ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2015, 12:40 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
День добрый. Попробую ответить. MaratIsk,механизм ты! А разве я где-нибудь утверждал, что это сделал я? На самом деле, с этим вопросом ко мне обратился, скажем так, "смежник". А я никак прокомментировать не смог. MaratIsk,идиотизм Ну-у-у... Если технически такие действия не запрещены, значит разрешены. hvlad,Какую ошибку ? Вчера уточнил - к БД ничем нельзя было подключиться. Сообщение было что-то "wrong page type" - точнее сказать не могу. hvlad,А когда до этого вызывался gfix ? Сложно сказать, но ночной бекап восстановился без каких либо ошибок. hvlad,Воспроизводимый пример... Попытался смоделировать - ошибка порчи БД не воспроизвелась. Правда, возникла другая ошибка: при наличии активных подключений (некие апдейты в цикле) в таблицу было добавлено поле типа INTEGER: Код: plsql 1.
При апдейте добавленного поля в 0 возникло исключение типа нарушение уникального индекса RDB$ЧЕГО_ТО_ТАМ. Причем, на добавленное поле никаких ограничений не накладывалось. Текст ошибки скопировать не догадался. Повторил сценарий еще 8 раз - ошибка не воспроизвелась. Если надо, могу скрипты и текст клиентского приложения на Delphi скинуть сюда. Таблоид,Запретить... И, главное, не пущать :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2015, 12:44 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
Итак, в результате ковыряний удалось добиться 100% воспроизведения следующей ошибки: Создаем базу: Код: 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. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80.
Далее пишем небольшое клиентское приложение на Delphi + FIBPlus: Код: pascal 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. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
Нажатие кнопки Button1 запускает циклический апдейт таблицы по рандомному TBL_ID. Параметры транзакции pFIBTransaction1: Код: pascal 1. 2. 3. 4.
Запрос pFIBQuery1 выглядит следующим образом: Код: plsql 1.
Теперь сценарий воспроизведения ошибки: 1. Запускаем клиентское приложение - Заголовок Label1 содержит количество сделанных апдейтов. 2. Запускаем ISQL и не останавливая клиентское приложение добавляем в таблицу поле. 3. Что бы не нарваться на deadlock, останавливаем клиентское приложение. 4. Из ISQL апдейтим добавленное поле. 5. Запускаем апдейты в клиентском приложении. 6. В ISQL комитим апдейт добавленного поля. 7. Выясняется, что в таблице имеется какое-то количество записей, в которых значение добавленного поля NULL. Вот последовательность выполнения команд в ISQL с пояснениями: -- на момент запуска ISQL клиентское приложение производит апдейты Use CONNECT or CREATE DATABASE to specify a database SQL> CONNECT C:\DATA\DAMAGE.FDB USER SYSDBA PASSWORD masterkey; Database: C:\DATA\DAMAGE.FDB, User: SYSDBA SQL> ALTER TABLE TBL ADD BLAH_BLAH_BLAH INTEGER; SQL> COMMIT; -- в этом месте во избежание DEADLOCK-а останавливаем апдейты в клиентском приложении SQL> UPDATE TBL SET BLAH_BLAH_BLAH = 0; -- запускаем клиентские апдейты SQL> COMMIT; -- никаких ошибок нет, во всех записях значение поля BLAH_BLAH_BLAH должно равняться 0 SQL> SELECT COUNT(*) FROM TBL WHERE BLAH_BLAH_BLAH IS NULL; COUNT ============ 74 -- имеются записи, в которых значение BLAH_BLAH_BLAH есть NULL SQL> COMMIT; SQL> Теперь закрываем клиентское приложение и выходим из ISQL Опять заходим в ISQL SQL> SELECT COUNT(*) FROM TBL WHERE BLAH_BLAH_BLAH IS NULL; COUNT ============ 5070 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2015, 15:23 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
quesудалось добиться 100% воспроизведения следующей ошибки Вот только эта ошибка никак не соотносится с той, что описана в стартовом посте. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2015, 15:38 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, но была обнаружена при попытках ее воспроизвести. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2015, 15:40 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
quesно была обнаружена при попытках ее воспроизвести. Почитай про версионность метаданных. Твой запрос из приложения и процедура, им использованная, были скомпилированы ДО изменения метаданных. Почему ты считаешь, что они должны порождать версии записей в формате, появившемся после их компиляции? Тут не MS SQL с его интерпретируемыми батчами. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2015, 15:47 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Хорошо, я перенесу логику хранимой процедуры в клиентское приложение и посмотрю, что получится. Надеюсь, что ошибка не повториться. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2015, 15:53 |
|
Каков механизм порчи базы?
|
|||
---|---|---|---|
#18+
quesНадеюсь, что ошибка не повториться. Зря надеешься. Чтобы эта "ошибка" не повторилась, тебе надо перестать использовать запросы, препарированные вне текущей транзакции. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2015, 15:56 |
|
|
start [/forum/topic.php?fid=40&msg=39016083&tid=1562696]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 255ms |
total: | 388ms |
0 / 0 |