Я работаю над планированием миграции базы данных DB2 8.1 с ужасной кодировки IBM на UTF-8 для поддержки других языков и т. Д. Я столкнулся с проблемой, на которой я застрял.
Несколько примечаний об этой миграции:
После завершения процесса загрузки db2move несколько таблиц находятся в состоянии отложенной проверки и требуют проверки целостности. Проверки целостности выполняются следующим образом:
установить целостность для. немедленно проверено
Это работает для большинства таблиц, однако некоторые таблицы выдают ошибку:
DB21034E Команда была обработана как оператор SQL, потому что это недопустимая команда процессора командной строки. Во время обработки SQL он вернул:
SQL3603N Проверка обработки данных с помощью оператора SET INTEGRITY обнаружила нарушение целостности, связанное с ограничением с именем "blah.SQL120124110232400". SQLSTATE = 23514
Интернет сообщает мне, что решением этой проблемы является создание таблицы исключений на основе фактической таблицы и указание команде SET INTEGRITY отправлять любые исключения в эту таблицу (как показано ниже):
db2 создать таблицу blah_EXCEPTION, например blah db2 SET INTEGRITY FOR blah НЕМЕДЛЕННАЯ ПРОВЕРКА ИСКЛЮЧЕНИЯ IN blah ИСПОЛЬЗОВАТЬ blah_EXCEPTION
СЕЙЧАС вот конкретная проблема, с которой я столкнулся! Вышеупомянутое переводит все строки с проблемами в указанную таблицу исключений. Ну это просто супер, буууууут я не могу потерять данные при такой конвертации, это просто недопустимо. Интернет и IBM расплывчато описывают отправку нарушений в таблицы исключений и затем «обработку данных», которые находятся в таблице исключений. К сожалению, я не понимаю, что это означает, и я надеялся, что какой-то мудрый человек знает и может мне помочь и сообщить, как я могу получить эти данные из этих таблиц и поместить данные в исходную / правильную таблицу, а не в эти исключения таблицы.
Дайте знать, если у вас появятся вопросы. Спасибо!
Краткое изложение решения этой проблемы состоит в том, что в базе данных есть символы, которые нарушают ограничения для определенных таблиц после преобразования в UTF-8 из кодировки IBM-1252. Ограничением почти всегда является ограничение на количество символов. После того, как эти данные были исправлены, у нас не возникло проблем с преобразованием данных. Однако это долгий и ужасный процесс.