Это первый раз, когда я работаю с файлами дампа, я очень новичок в этом.
Итак,
У меня есть файлы 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
Итак, после этого у меня было два результата:
Таблица успешно загружена: x строк загружено из x! хорошо, приятно ничего не сказать.
Я получаю эту ошибку:
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
Здесь, опять же, если у вас есть какие-либо советы о том, как я могу импортировать таблицу, не получая это сообщение об ошибке размера столбца, было бы здорово.
Теперь до сих пор ничего не блокировало, я всегда находил способы продолжать идти, даже если это занимало слишком много времени.
Теперь, когда я делаю это, я получаю также два случая:
Все хорошо, работает отлично!
(b) Перед тем, как удалить таблицу, созданную в sql developer, я получаю сообщение об ошибке, в котором говорится, что таблица не существует.
Итак, я пытаюсь идти дальше с тремя шагами и сразу после выполнения шага 1 я получаю это сообщение об ошибке:
ошибка: ORA-39151: таблица "SYSADM". "Таблица_1" существует. Все зависимые метаданные и данные будут пропущены из-за table_exists_action of skip
Как это возможно? Oracle говорит, что он не существует, и в то же время в командной строке он говорит, что он существует.
Какое решение для этого?
Спасибо, если вы прочли до этого момента, я знаю, что это было долго, но это было только для того, чтобы вам было ясно, чтобы вы могли ясно видеть, в чем проблема.
Я надеюсь, что вы можете помочь мне с этим.
Заранее спасибо