Миграция с 1.5 на 2.1

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
zz 5
Сообщения: 32
Зарегистрирован: 02 мар 2006, 10:52

Миграция с 1.5 на 2.1

Сообщение zz 5 » 12 мар 2009, 21:21

Добрый вечер. Планируем мигрировать базы наших пользователей с 1.5 на 2.1. При изучении данного вопроса натолкнулись на статью http://ibase.ru/firebird/21/metadata_charset.htm, из которой не совсем все ясно.

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

Взял одну из баз. Backup в 1.5 и Restore в 2.1 прошел без ошибок. Что дальше?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Миграция с 1.5 на 2.1

Сообщение WildSery » 12 мар 2009, 22:47

Если ты спрашиваешь "как проверить", создаётся впечатление, что эту статью ты не читал, или читал по диагонали, или не понял.

zz 5
Сообщения: 32
Зарегистрирован: 02 мар 2006, 10:52

Re: Миграция с 1.5 на 2.1

Сообщение zz 5 » 12 мар 2009, 23:17

Конечно, не понял, поэтому и хочу уточнить :D

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

Re: Миграция с 1.5 на 2.1

Сообщение kdv » 13 мар 2009, 11:46

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

zz 5
Сообщения: 32
Зарегистрирован: 02 мар 2006, 10:52

Re: Миграция с 1.5 на 2.1

Сообщение zz 5 » 13 мар 2009, 14:35

Рассказываю. Попробывал перейти с 1.5.4 на 2.1 уже на работе. Сделал backup-restore. С вопросом, как обнаружить, есть ли проблемы с кодировкой решилась сразу. При попытке под IBExpert-ом подключиться к базе вылазит ошибка:

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

Cannot transliterate character between character sets.
Это ожидаемо. Странно, что дома такая база спокойно открывалась экспертом. Непонятно.

Следом попытался выполнить инструкции из указанной статьи. Запрос:

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

select * from rdb$check_metadata
вернул список объектов + плюс в конце выскочила ошибка. Непонятно дальше:
Иначе, первый "плохой" объект является последним в списке перед возникновением ошибки.

Для исправления метаданных, вам нужно знать, в каком наборе символов были созданы эти метаданные. Скрипт обновления метаданных будет работать корректно только если все метаданные были созданы в одном и том же наборе символов.

Исправление метаданных
-------------------
- 1. isql database.fdb
- 2. SQL> input 'misc/upgrade/metadata/metadata_charset_create.sql';
- 3. SQL> select * from rdb$fix_metadata('WIN1252'); -- replace WIN1252 by your charset
- 4. SQL> commit;
Непонятное я выделил жирным в цитате. Как узнать "в каком наборе данных созданы эти метаданные"? И что мне указывать в качестве значения входного параметра rdb$fix_metadata?

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

Re: Миграция с 1.5 на 2.1

Сообщение kdv » 13 мар 2009, 16:30

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

zz 5
Сообщения: 32
Зарегистрирован: 02 мар 2006, 10:52

Re: Миграция с 1.5 на 2.1

Сообщение zz 5 » 13 мар 2009, 17:10

kdv писал(а):А вопрос означает - какая кодировка у базы, и в какой кодировке ты к ней подсоединялся, когда создавал процедуры.Вопрос-то элементарный.
Дык, если бы я мог однозначно ответить на этот вопрос :( . База создавалась еще до моего подключения к разработке проекта. След людей, которые стояли у истоков, давно простыл. Кодировка всех баз сейчас WIN1251. Но я не могу точно знать, что всегда при внесении изменений в метаданные подключались с WIN1251. За себя - могу, за других - нет. Начинал работу не я. Отсюда и назрел вопрос, можно ли каким-то способом это выяснить?

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

Re: Миграция с 1.5 на 2.1

Сообщение kdv » 13 мар 2009, 17:56

ты сейчас подключаешься в win1251? ну так и в чем проблема? сделал бэкап метаданных, восстановил на 1.5, потом
начинаешь миграцию, как в тексте написано.
Отсюда и назрел вопрос, можно ли каким-то способом это выяснить?
ну так и выясни. сделай что-нибудь, перестань задавать теоретические вопросы.
телепатировать, кто там и в какой кодировке создавал текст - невозможно.
По крайней мере ты ведь можешь, глядя на "проблемные" объекты, заальтерить их в ПРАВИЛЬНОЙ кодировке?
То есть в той, которую ты используешь сейчас?

zz 5
Сообщения: 32
Зарегистрирован: 02 мар 2006, 10:52

Re: Миграция с 1.5 на 2.1

Сообщение zz 5 » 14 мар 2009, 01:29

Итак, получилось! Основная проблема заключалась в том, что непонятно было, с чего начинать. Пошел как всегда путем исключения. Последовательно удалял из базы источника (1.5) типы объектов: триггеры, хранимые процедуры, таблицы и т.д, после чего базу восстанавливал и пытался открыть экспертом. Дошел до того момента, когда в базе остались одни домены. Пытаюсь открыть после восстановления - валится!

Очевидно, что проблема заключалась в description доменов. Очистил у всех доменов описание - заработало! Но терять описания тоже не хотелось. Помимо объектов описания заполнены у таблиц, полей таблиц, процедур. Общее число таких объектов перевалило за цифру в пять тысяч. Вручную писать запросы бессмысленно. И тут на помощь пришел эксперт, а точнее его функция генерации UPDATE-запросов с выбранными полями для обновления и поиска. Сгенерил по всем нужным системным таблицам запросы, создал скрипт, который прогоняю после восстановления в 2.1. Работает на ура. \:D/

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

Re: Миграция с 1.5 на 2.1

Сообщение kdv » 14 мар 2009, 12:40

а что, вот это нельзя было сделать?

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

Исправление метаданных
-------------------
- 1. isql database.fdb
- 2. SQL> input 'misc/upgrade/metadata/metadata_charset_create.sql';
- 3. SQL> select * from rdb$fix_metadata('WIN1251');
- 4. SQL> commit;

zz 5
Сообщения: 32
Зарегистрирован: 02 мар 2006, 10:52

Re: Миграция с 1.5 на 2.1

Сообщение zz 5 » 14 мар 2009, 13:10

Это, конечно, проще. :D

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

Re: Миграция с 1.5 на 2.1

Сообщение kdv » 14 мар 2009, 23:14

ну так об чем и речь - я предлагал прочитать документ еще раз.

zz 5
Сообщения: 32
Зарегистрирован: 02 мар 2006, 10:52

Re: Миграция с 1.5 на 2.1

Сообщение zz 5 » 14 мар 2009, 23:33

Кстати, возвращаясь к документу
Процедура rdb$fix_metadata возвращает те же данные, что и rdb$check_metadata, но с исправлением текста метаданных.
Запускать эту процедуру можно только один раз!
Почему? И что будет, если вызвать повторно?

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Re: Миграция с 1.5 на 2.1

Сообщение Attid » 15 мар 2009, 10:10

zz 5 писал(а): Почему? И что будет, если вызвать повторно?
а догадаться ? что будет с текстом если его два раза перекодировать ?
получишь кракозяки или вопросики в руском тексте.

Ответить