Назад | Перейти на главную страницу

Проверки целостности и таблицы исключений DB2

Я работаю над планированием миграции базы данных DB2 8.1 с ужасной кодировки IBM на UTF-8 для поддержки других языков и т. Д. Я столкнулся с проблемой, на которой я застрял.

Несколько примечаний об этой миграции:

  1. Мы используем db2move для экспорта и загрузки данных и db2look, чтобы получить подробную информацию о базе данных (табличные пространства, таблицы, ключи и т. Д.).
  2. Мы обнаружили, что процесс загрузки хорошо работает с db2move import, однако данные загружаются за 7 часов, и это было неприемлемым временем простоя, когда мы фактически завершили преобразование в основной базе данных.
  3. Теперь мы используем загрузку db2move, которая работает намного быстрее, поскольку кажется, что она просто передает данные без проверки целостности. Это приводит к моей текущей проблеме.

После завершения процесса загрузки 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. Ограничением почти всегда является ограничение на количество символов. После того, как эти данные были исправлены, у нас не возникло проблем с преобразованием данных. Однако это долгий и ужасный процесс.