У меня проблемы с импортом таблиц из файлов DUMP в базу данных Oracle - PullRequest
0 голосов
/ 16 июня 2019

Это первый раз, когда я работаю с файлами дампа, я очень новичок в этом.

Итак, У меня есть файлы DUMP, которые содержат таблицы, и мне нужно импортировать эти таблицы в базу данных Oracle.

Вот как мой клиент генерировал файлы дампа:

  • есть несколько категорий (скажем, HR, финансы, продажи и т. Д.), И для каждой категории он делал SQL-запросы (где каждый запрос связан с одной таблицей). Давайте продолжим рассуждение с одной категорией, которую мы назовем A.

  • Для категории A он создал файлы дампа для результатов всех сделанных им запросов. поэтому у нас есть что-то вроде этого:

    Категория А:

    • Table_1
    • Table_2
    • Table_3
    • Table_4

Созданные файлы дампа (количество файлов dmp зависит от размера данных):

  • CategorieA_01.dmp
  • CategorieA_02.dmp
  • CategorieA_03.dmp
  • CategorieA_04.dmp
  • CategorieA_05.dmp

Итак, мы не знаем, какая таблица содержится в каком файле дампа. И мне нужно импортировать отдельные таблицы в базу данных Oracle.

Это то, что я сделал. В командной строке:

C:\"path">sqlplus / as sysdba
SQL> alter session set "_ORACLE_SCRIPT"=true;
SQL> Grant dba to my_user;
SQL> CREATE DIRECTORY Dir_Name AS 'G:\Dir_Name';  -- This is where I copied all the dmp files and the logs

Обычно мне нужно создать табличное пространство, но с имеющейся у меня информацией я нигде не нахожу имя табличного пространства для таблицы, которую мне нужно импортировать, поэтому я пишу строку оператора импорта и жду чтобы он возвратил ошибку, говоря, что он не находит табличное пространство 'X', и после этого я создаю табличное пространство 'X' и повторяю строку оператора импорта, как показано ниже (если у вас есть представление о том, как я могу найти имя табличного пространства, которое мне нужно создать, не проходя таким образом, пожалуйста, дайте мне знать):

C:\"paths">impdp my_user/pswd TABLES=SYSADM.table_1 directory=Dir_Name dumpfile=CategorieA_.%U.dmp logfile=Log_Name

Итак, после этого у меня было два результата:

  1. Таблица успешно загружена: x строк загружено из x! хорошо, приятно ничего не сказать.

  2. Я получаю эту ошибку:

ORA-02374: ошибка загрузки таблицы загрузки "SYSADM". "Table_1"
ORA-12899: слишком большое значение для столбца COL_1 (фактическое значение: 19, максимальное: 18)

Итак, я возвращаюсь к разработчику sql и удаляю (связанный с #b ниже) table_1, который был создан с отсутствующими данными, и делаю следующее в команде приглашения:

Шаг 1: я импортирую только метаданные:

C:\> impdp my_user/pswd DIRECTORY=Dir_Name DUMPFILE=CategorieA_.%U.dmp CONTENT=METADATA_ONLY TABLES=SYSADM.table_1 LOGFILE=file_name

Шаг 2: затем вернемся к разработчику sql, чтобы увеличить размер столбцов:

alter table Table_1 modify (COL_1 VARCHAR2(50));

Шаг 3: Затем вернитесь в командную строку, чтобы импортировать только данные:

impdp my_user/pswd DIRECTORY=Dir_Name DUMPFILE=CategorieA_.%U.dmp CONTENT=DATA_ONLY TABLES=SYSADM.table_1 LOGFILE=file_name

Здесь, опять же, если у вас есть какие-либо советы о том, как я могу импортировать таблицу, не получая это сообщение об ошибке размера столбца, было бы здорово.

Теперь до сих пор ничего не блокировало, я всегда находил способы продолжать идти, даже если это занимало слишком много времени.

Теперь, когда я делаю это, я получаю также два случая:

  1. Все хорошо, работает отлично!

  2. (b) Перед тем, как удалить таблицу, созданную в sql developer, я получаю сообщение об ошибке, в котором говорится, что таблица не существует.

Итак, я пытаюсь идти дальше с тремя шагами и сразу после выполнения шага 1 я получаю это сообщение об ошибке:

ошибка: ORA-39151: таблица "SYSADM". "Таблица_1" существует. Все зависимые метаданные и данные будут пропущены из-за table_exists_action of skip

Как это возможно? Oracle говорит, что он не существует, и в то же время в командной строке он говорит, что он существует.

Какое решение для этого?

Спасибо, если вы прочли до этого момента, я знаю, что это было долго, но это было только для того, чтобы вам было ясно, чтобы вы могли ясно видеть, в чем проблема.

Я надеюсь, что вы можете помочь мне с этим.

Заранее спасибо

1 Ответ

2 голосов
/ 16 июня 2019

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

ORA-02374: ошибка загрузки таблицы загрузки таблицы "SYSADM". "Table_1"

Один из способов справиться с этим:

  1. Захват DDL, который создаст импорт. Используйте параметр sqlfile, например. SQLFILE=Dir_Name:CategorieA_01.dmp. Тот факт, что у вас так много файлов дампа, очевидно, означает, что этот шаг может быть немного тошнотворным; может быть, вы можете использовать подстановочный знак здесь - я не знаю, я никогда не пробовал.
  2. Прочесать созданные файлы DDL, посмотреть, на какие табличные пространства ссылаются, и создать их.
  3. Вы также можете извлечь операторы CREATE TABLE. Отредактируйте определения таблицы, заменив семантику BYTE на CHAR для всех столбцов VARCHAR2. Создайте таблицы.
  4. Затем импортируйте только данные. Запустите impdp с CONTENT = DATA_ONLY.

Альтернативой шагу является:

  1. Импорт только табличных структур . Используйте параметр CONTENT = METADATA_ONLY
  2. Исправьте импортированные структуры таблиц с помощью операторов ALTER TABLE, чтобы переключиться на семантику CHAR. Возможно, это более утомительный вариант.

Если у вас есть регулярные отношения с этим клиентом, вы предлагаете ему сделать свой экспорт более разумным способом. Возможно, один файл на таблицу. Или только один файл. Все эти дела никому не нужны.

...