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

Oracle 11gR2 exp не экспортирует некоторые таблицы

У меня есть база данных Oracle 11g (11.2.0.1), работающая в Linux (x64). В базе данных у меня есть схема и 33 таблицы для нее (все в одном табличном пространстве). Когда я вхожу в систему через sqlplus, я могу перечислить все таблицы через

SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE';

Но когда я экспортирую табличное пространство, используя

exp ... BUFFER=65536 FULL=N COMPRESS=N CONSISTENT=Y TABLESPACES=... FILE=...

Затем он экспортирует только 24 из 33 таблиц. Я попытался экспортировать недостающие таблицы через

exp ... TABLES=<missing_table> ...

Но тут появляется ошибка:

 EXP-00011: <schema>.<missing_table> does not exist

Как я могу узнать, что здесь не так?
Как я могу экспортировать все таблицы?

ОБНОВИТЬ:

Следуя совету Гэри, я обнаружил следующую разницу между экспортированными и отсутствующими таблицами. DDL экспортированной таблицы:

CREATE TABLE "MY_SCHEMA"."EXPORTED_TABLE" ( ... ) TABLESPACE "MY_TS" PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K BUFFER_POOL DEFAULT) LOGGING NOCOMPRESS

А теперь DDL неэкспортированной таблицы:

CREATE  TABLE "MY_SCHEMA"."MISSING_TABLE" ( ... ) TABLESPACE "MY_TS" PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( BUFFER_POOL DEFAULT) LOGGING NOCOMPRESS

Вышеупомянутые DDL были созданы Enterprise Manager. Те, которые созданы с помощью sqlplus, содержат нет раздела ХРАНИЛИЩЕ для недостающих таблиц.

Я обнаружил, что таблицы экспортируются, когда я реорганизовываю их и устанавливаю для параметра STORAGE INITIAL значение 64K.

Задача решена. (С надеждой ;))

Начиная с Oracle 11gR2 (11.2.0.1) появилась новая функция: Отложенное создание сегмента: создание отправленной таблицы откладывается до тех пор, пока не будет вставлена ​​первая строка. В результате пустые таблицы не отображаются в dba_segments и не экспортируются утилитой exp.

Самое простое решение - использовать утилиту expdp.

Если вам нужно использовать утилиту exp, вы должны запустить эту команду для всех ваших пустых таблиц:

ALTER TABLE tablename ALLOCATE EXTENTS

Сделать SELECT DBMS_METADATA.GET_DDL('TABLE','yourTableName') для одной из таблиц, которая работает, а для другой - нет. Затем поиграйте в разницу. (Обратите внимание, что yourTableName чувствителен к регистру.)

Это может быть что-то вроде BLOB / CLOB или разделов в другом табличном пространстве, зависимость от TYPE, принадлежащего другой схеме, которая не экспортируется ...

Таблица существует в БД, но вы не можете экспортировать ее, пока не выделите экстент для этой таблицы….

Прошло: 00: 00: 00.04 14:44:54 PIMUSER @ mdmqa> изменить таблицу RECORDAPPROVALHISTORY выделить экстент;

Я получаю аналогичную ошибку и думаю, что это тоже связано с синонимами.

Я могу описать конкретную таблицу в базе данных и выбрать из нее (нулевые строки). Я также могу описать выбор из общедоступного синонима

Но когда я экспортирую эту таблицу, я получаю сообщение об ошибке 011 не существует, имя или синоним. Когда я вставляю строку (это решает одну проблему), я могу экспортировать через имя таблицы, но не через синоним.

Конечно, раньше все это работало в 11.1.

Впервые я услышал об expdp. Посмотрим на это

находятся ли таблицы в тех же табличных пространствах, которые вы экспортируете? Проверьте с помощью этого запроса:

SELECT table_name, tablespace_name FROM user_tables

Это новая функция Oracle11. только в редакции Enterprise. Пустая таблица не будет экспортирована.

Да, таблицы существуют в одной схеме. Некоторые таблицы, которые не экспортируются, содержат данные, есть только несколько таблиц с нулевым счетчиком, все остальные содержат данные.

С уважением

Выделить экстент работает. Вы можете найти таблицы с этим утверждением:

select 'alter table '||table_Name||' allocate extent;' from user_Tables where temporary='N' and table_name not in (select segment_name from user_segments)