Миграция с 1.5 на 2.1
Миграция с 1.5 на 2.1
Добрый вечер. Планируем мигрировать базы наших пользователей с 1.5 на 2.1. При изучении данного вопроса натолкнулись на статью http://ibase.ru/firebird/21/metadata_charset.htm, из которой не совсем все ясно.
Для начала, как однозначно проверить, есть ли данной конкретной базе проблема с кодировками в текстах метаданных? Пользователей несколько десятков, у каждого из них своя база плюс ее состояние, развитие тоже под большим вопросом. Может проблемы в данном случае просто нет?
Взял одну из баз. Backup в 1.5 и Restore в 2.1 прошел без ошибок. Что дальше?
Для начала, как однозначно проверить, есть ли данной конкретной базе проблема с кодировками в текстах метаданных? Пользователей несколько десятков, у каждого из них своя база плюс ее состояние, развитие тоже под большим вопросом. Может проблемы в данном случае просто нет?
Взял одну из баз. Backup в 1.5 и Restore в 2.1 прошел без ошибок. Что дальше?
Re: Миграция с 1.5 на 2.1
Если ты спрашиваешь "как проверить", создаётся впечатление, что эту статью ты не читал, или читал по диагонали, или не понял.
Re: Миграция с 1.5 на 2.1
Конечно, не понял, поэтому и хочу уточнить
Re: Миграция с 1.5 на 2.1
прочитай еще раз. или спроси, что именно не ясно.
в статье есть инструкции, как и что делать. ты их выполнял?
в статье есть инструкции, как и что делать. ты их выполнял?
Re: Миграция с 1.5 на 2.1
Рассказываю. Попробывал перейти с 1.5.4 на 2.1 уже на работе. Сделал backup-restore. С вопросом, как обнаружить, есть ли проблемы с кодировкой решилась сразу. При попытке под IBExpert-ом подключиться к базе вылазит ошибка:
Это ожидаемо. Странно, что дома такая база спокойно открывалась экспертом. Непонятно.
Следом попытался выполнить инструкции из указанной статьи. Запрос:вернул список объектов + плюс в конце выскочила ошибка. Непонятно дальше:
Код: Выделить всё
Cannot transliterate character between character sets.
Следом попытался выполнить инструкции из указанной статьи. Запрос:
Код: Выделить всё
select * from rdb$check_metadata
Непонятное я выделил жирным в цитате. Как узнать "в каком наборе данных созданы эти метаданные"? И что мне указывать в качестве значения входного параметра rdb$fix_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;
Re: Миграция с 1.5 на 2.1
например, на каком языке ты сейчас пишешь?Как узнать "в каком наборе данных созданы эти метаданные"?
А вопрос означает - какая кодировка у базы, и в какой кодировке ты к ней подсоединялся, когда создавал процедуры.
Вопрос-то элементарный.
Re: Миграция с 1.5 на 2.1
Дык, если бы я мог однозначно ответить на этот вопрос . База создавалась еще до моего подключения к разработке проекта. След людей, которые стояли у истоков, давно простыл. Кодировка всех баз сейчас WIN1251. Но я не могу точно знать, что всегда при внесении изменений в метаданные подключались с WIN1251. За себя - могу, за других - нет. Начинал работу не я. Отсюда и назрел вопрос, можно ли каким-то способом это выяснить?kdv писал(а):А вопрос означает - какая кодировка у базы, и в какой кодировке ты к ней подсоединялся, когда создавал процедуры.Вопрос-то элементарный.
Re: Миграция с 1.5 на 2.1
ты сейчас подключаешься в win1251? ну так и в чем проблема? сделал бэкап метаданных, восстановил на 1.5, потом
начинаешь миграцию, как в тексте написано.
телепатировать, кто там и в какой кодировке создавал текст - невозможно.
По крайней мере ты ведь можешь, глядя на "проблемные" объекты, заальтерить их в ПРАВИЛЬНОЙ кодировке?
То есть в той, которую ты используешь сейчас?
начинаешь миграцию, как в тексте написано.
ну так и выясни. сделай что-нибудь, перестань задавать теоретические вопросы.Отсюда и назрел вопрос, можно ли каким-то способом это выяснить?
телепатировать, кто там и в какой кодировке создавал текст - невозможно.
По крайней мере ты ведь можешь, глядя на "проблемные" объекты, заальтерить их в ПРАВИЛЬНОЙ кодировке?
То есть в той, которую ты используешь сейчас?
Re: Миграция с 1.5 на 2.1
Итак, получилось! Основная проблема заключалась в том, что непонятно было, с чего начинать. Пошел как всегда путем исключения. Последовательно удалял из базы источника (1.5) типы объектов: триггеры, хранимые процедуры, таблицы и т.д, после чего базу восстанавливал и пытался открыть экспертом. Дошел до того момента, когда в базе остались одни домены. Пытаюсь открыть после восстановления - валится!
Очевидно, что проблема заключалась в description доменов. Очистил у всех доменов описание - заработало! Но терять описания тоже не хотелось. Помимо объектов описания заполнены у таблиц, полей таблиц, процедур. Общее число таких объектов перевалило за цифру в пять тысяч. Вручную писать запросы бессмысленно. И тут на помощь пришел эксперт, а точнее его функция генерации UPDATE-запросов с выбранными полями для обновления и поиска. Сгенерил по всем нужным системным таблицам запросы, создал скрипт, который прогоняю после восстановления в 2.1. Работает на ура.
Очевидно, что проблема заключалась в description доменов. Очистил у всех доменов описание - заработало! Но терять описания тоже не хотелось. Помимо объектов описания заполнены у таблиц, полей таблиц, процедур. Общее число таких объектов перевалило за цифру в пять тысяч. Вручную писать запросы бессмысленно. И тут на помощь пришел эксперт, а точнее его функция генерации UPDATE-запросов с выбранными полями для обновления и поиска. Сгенерил по всем нужным системным таблицам запросы, создал скрипт, который прогоняю после восстановления в 2.1. Работает на ура.
Re: Миграция с 1.5 на 2.1
а что, вот это нельзя было сделать?
Код: Выделить всё
Исправление метаданных
-------------------
- 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;
Re: Миграция с 1.5 на 2.1
Это, конечно, проще.
Re: Миграция с 1.5 на 2.1
ну так об чем и речь - я предлагал прочитать документ еще раз.
Re: Миграция с 1.5 на 2.1
Кстати, возвращаясь к документу
Почему? И что будет, если вызвать повторно?Процедура rdb$fix_metadata возвращает те же данные, что и rdb$check_metadata, но с исправлением текста метаданных.
Запускать эту процедуру можно только один раз!
Re: Миграция с 1.5 на 2.1
а догадаться ? что будет с текстом если его два раза перекодировать ?zz 5 писал(а): Почему? И что будет, если вызвать повторно?
получишь кракозяки или вопросики в руском тексте.