Страница 1 из 1

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

Добавлено: 13 окт 2011, 12:37
dJabber
Помогите, плиз, сам искать уже замучался.

Есть 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 часа времени. В общем - головная боль.

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

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

Добавлено: 13 окт 2011, 13:02
hvlad
Таблица и\или поле небось широоокая ?

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

Добавлено: 13 окт 2011, 13:28
dJabber
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, хотя что это может менять?

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

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

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

Добавлено: 13 окт 2011, 13:49
kdv
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 раз).
база в дауне, ночной бэкап не сделался
интересно, как вы тогда делаете бэкап-рестор, если бэкап "не делается"?

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

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

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

Добавлено: 13 окт 2011, 14:28
dJabber
Добрый день. Спасибо, что ответили.

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

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

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

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

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

Добавлено: 13 окт 2011, 15:36
Dimitry Sibiryakov
Ну и вопрос на засыпку: а COMMIT после добавления поля когда делается?..

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

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

Добавлено: 13 окт 2011, 15:39
dJabber
Статьи читаю, спасибо.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 14 окт 2011, 16:32
dJabber
kdv, Dimitry Sibiryakov
Спасибо вам огромное за вашу помощь. Благодаря вашим советам многое в моей голове встало на свои места.