Регулярно ломается БД после добавления новых полей в таблицы

Ремонт и восстановление баз данных InterBase, Firebird, Yaffil

Модераторы: kdv, Alexey Kovyazin

Ответить
dJabber
Сообщения: 18
Зарегистрирован: 26 фев 2008, 14:29

Регулярно ломается БД после добавления новых полей в таблицы

Сообщение dJabber » 13 окт 2011, 12:37

Помогите, плиз, сам искать уже замучался.

Есть Interbase XE (Update 2 - WI-V10.0.2.474). Есть база, размером 5 гигов. Проблема заключается в том, что если в какую-либо из таблиц добавляется поле, то база через какое-то время (2-10 часов) ломается. Выражается это в том, что народ с утра приходит - база в дауне, ночной бэкап не сделался, а в логах записи типа

Код: Выделить всё

	internal gds software consistency check (applied differences will not fit in record (177), file: sqz.c line: 61)
Приходится огребая множество добрых слов восстанавливать базу из вчерашнего бэкапа.

Избежать подобных вещей помогает лишь немедленный бэкап-рестор. Но для размера БД 5 ГБ - это 2 часа времени. В общем - головная боль.

Если кто наталкивался на такие грабли - помогите плиз...

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение hvlad » 13 окт 2011, 13:02

Таблица и\или поле небось широоокая ?

dJabber
Сообщения: 18
Зарегистрирован: 26 фев 2008, 14:29

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение dJabber » 13 окт 2011, 13:28

hvlad писал(а):Таблица и\или поле небось широоокая ?
Не обязательно широкая. Это происходит при добавлении поля практически в любую таблицу. Например вот в такую таблицу

Код: Выделить всё

CREATE TABLE OPS_LIFELESS_MEMBERS (
    ID                   INTEGER NOT NULL,
    MEMBER_ID            INTEGER NOT NULL,
    DOCUMENT_ID          INTEGER NOT NULL,
    COMMENT              BLOB SUB_TYPE 1 SEGMENT SIZE 80 CHARACTER SET NONE,
    NOTIFICATION_DOC_ID  INTEGER DEFAULT -1 NOT NULL
);

два дня назад добавил поле Integer - к утру был описанный результат.

Правда поля добавляем используя IBExpert, хотя что это может менять?

Ну и широких таблиц с широкими полями тоже достаточно...

А с чем связан ваш вопрос?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение kdv » 13 окт 2011, 13:49

1. character set none у блоба - это плохо. Есть подозрения что у базы и у столбцов есть кодировки "как попало".

2. бэкап-рестор базы 5 гиг за 2 часа - это нечто несусветное. Ее бэкап должен проходить минут за 5, а рестор - за 15-20 минут
http://www.ibase.ru/devinfo/backupspeed.htm
http://www.ibase.ru/devinfo/restorespeed.htm

3. присылайте на support@ibase.ru в zip или rar: interbase.log, включая лог от gfix (если им пытались чинить БД хоть 1 раз).
база в дауне, ночной бэкап не сделался
интересно, как вы тогда делаете бэкап-рестор, если бэкап "не делается"?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение hvlad » 13 окт 2011, 14:02

dJabber писал(а):Правда поля добавляем используя IBExpert, хотя что это может менять?
А он альтер делает или системные таблицы правит напрямую ?
dJabber писал(а):А с чем связан ваш вопрос?
С сообщением об ошибке, есс-но.

dJabber
Сообщения: 18
Зарегистрирован: 26 фев 2008, 14:29

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение dJabber » 13 окт 2011, 14:28

Добрый день. Спасибо, что ответили.

1. character set none у всех текстовых полей - это плохо, но мы с этим пока живем :) - уж очень много таблиц переделывать
2. долгий бэкап-рестор был всегда, сколько помню эту базу. хотя дамп - это да, делается менее чем за 1 минуту.
3. сломанные базы gfix-ом лечить пытались - не помогало, логов от gfix-а сейчас к сожалению нету. Пытались и IBFirstAid-ом (купили в 2009 году) - тоже ничего не вышло. gfix -v -no_update сейчас сделаю, interbase.log вышлю. Сильно не пинайте:)
интересно, как вы тогда делаете бэкап-рестор, если бэкап "не делается"?
бекап-рестор делаем на пока еще живой базе - сразу после добавления поля. тогда все работает. А если не делать бэкап-рестор, то всё ломается через несколько часов.

PS
вот, кстати сейчас сделал gfix -v на базе, в которую с утра добавили поле (копию для опытов специально оставил) - никаких сообщений не было.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение kdv » 13 окт 2011, 15:16

2. долгий бэкап-рестор был всегда, сколько помню эту базу. хотя дамп - это да, делается менее чем за 1 минуту.
вы хоть статьи почитайте, на которые я ссылки дал. И сравните со своим железом.
gfix -v -no_update сейчас сделаю, interbase.log вышлю. Сильно не пинайте:)
делать gfix на небитой базе нет смысла.
А если не делать бэкап-рестор, то всё ломается через несколько часов.
поля добавляете "наживую", т.е. во время работы с этой таблицей других пользователей?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение Dimitry Sibiryakov » 13 окт 2011, 15:36

Ну и вопрос на засыпку: а COMMIT после добавления поля когда делается?..

Вопрос ковыряния в продакшен-базе экспертом пока оставим в стороне.

dJabber
Сообщения: 18
Зарегистрирован: 26 фев 2008, 14:29

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение dJabber » 13 окт 2011, 15:39

Статьи читаю, спасибо.

Да, поля добавляем наживую. А как надо? Всех выгнать, добавить поля, потом всех пустить обратно?

dJabber
Сообщения: 18
Зарегистрирован: 26 фев 2008, 14:29

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение dJabber » 13 окт 2011, 15:45

Dimitry Sibiryakov писал(а):Ну и вопрос на засыпку: а COMMIT после добавления поля когда делается?..
Коммит, насколько я понимаю, делает эксперт когда нажимаем на кнопочку "Compile"
Dimitry Sibiryakov писал(а):Вопрос ковыряния в продакшен-базе экспертом пока оставим в стороне.
Каюсь... но иногда просто не возможности всех выгнать из базы.

dJabber
Сообщения: 18
Зарегистрирован: 26 фев 2008, 14:29

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение dJabber » 13 окт 2011, 15:59

kdv писал(а): вы хоть статьи почитайте, на которые я ссылки дал. И сравните со своим железом.
статьи про бэкап-рестор прочитал, выводы сделал - у меня б/р делается локально скриптом по крону, с того же диска, где и база лежит, а надо, насколько я понял, чтоб б/р делался через сервис-менеджер и на другой диск...

Опана! бэкап с использованием сервис-менеджера сделался за 4 минуты - вместо 25!

А вот при попытке восстановить базу через сервис-менеджер из этого бэкапа - interbase сообщил, что я задал неверный логин-пароль... хотя без сервис-менеджера начинает восстанавливать...
Гмм... оказывается вместе с -USER SYSDBA -PASSWORD some_password надо было писать -EUA_U SYSDBA -EUA_P some_password

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение kdv » 13 окт 2011, 17:48

Каюсь... но иногда просто не возможности всех выгнать из базы.
вот смотрите. вы меняете метаданные "на ходу". получаете проблему. Вывод? Вывод не сделан. Я, конечно, впервые такое слышу про XE, но вообще в IB давно не рекомендуется менять метаданные во время работы, фактически с тех пор, как появилась архитектура SuperServer в InterBase 4.2. А было это в 1996 году.
надо было писать -EUA_U SYSDBA
только если у вас пользователи в базе, т.е. включено EUA. У вас используется несколько баз, и для каждой свои пользователи? Или это просто БД от стороннего решения? или кто-то экспериментировал с EUA и забыл выключить?

p.s. за опции -eua_user и -eua_password спасибо, я их как-то пропустил, они появились только в xe.

dJabber
Сообщения: 18
Зарегистрирован: 26 фев 2008, 14:29

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение dJabber » 14 окт 2011, 09:00

kdv писал(а): вот смотрите. вы меняете метаданные "на ходу". получаете проблему. Вывод? Вывод не сделан. Я, конечно, впервые такое слышу про XE, но вообще в IB давно не рекомендуется менять метаданные во время работы, фактически с тех пор, как появилась архитектура SuperServer в InterBase 4.2. А было это в 1996 году.
Я понимаю, что это - мой косяк, но я не могу придумать, как тогда вообще вносить изменения в метаданные.
Самое простое - я заставлю всех пользователей выйти из программы, потом внесу изменения, потом - разрешу им входить - так? или должны быть какие-то промежуточные шаги - например остановить/запустить сервер, перевести базу в режим, когда только админ может подключиться(забыл как это по английски), сделать sweep, сделать бэкап?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение kdv » 14 окт 2011, 10:20

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

dJabber
Сообщения: 18
Зарегистрирован: 26 фев 2008, 14:29

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение dJabber » 14 окт 2011, 11:05

kdv писал(а):
перевести базу в режим, когда только админ может подключиться
это примерно аналогично "заставлю всех пользователей выйти из программы".
то есть так и надо действовать? и можно обойтись без бэкапа-рестора?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение kdv » 14 окт 2011, 12:17

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

пока что вы как шаман с бубном - производите какие-то действия, не понимая их смысла.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение Dimitry Sibiryakov » 14 окт 2011, 14:54

dJabber писал(а):я не могу придумать, как тогда вообще вносить изменения в метаданные.
В тот же крон после завершения бэкапа добавить вызов isql со скриптом необходимых изменений. Всё.

dJabber
Сообщения: 18
Зарегистрирован: 26 фев 2008, 14:29

Re: Регулярно ломается БД после добавления новых полей в таб

Сообщение dJabber » 14 окт 2011, 16:32

kdv, Dimitry Sibiryakov
Спасибо вам огромное за вашу помощь. Благодаря вашим советам многое в моей голове встало на свои места.

Ответить