Исключение определенного раздела таблицы при экспорте Data Pump

Параметр exclude можно использовать для фильтрации объектов схемы во время экспорта в Oracle Data Pump.

EXCLUDE=object_type[:name_clause] [, ...]

Является ли table partition действительным object_type?

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


person Raihan    schedule 01.08.2012    source источник


Ответы (3)


Раздел документации, посвященный фильтрации во время операций экспорта говорит:

Фильтрация метаданных реализована через параметры EXCLUDE и INCLUDE...

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

Чтобы просмотреть список допустимых типов объектов, запросите следующие представления: DATABASE_EXPORT_OBJECTS для полного режима, SCHEMA_EXPORT_OBJECTS для режима схемы и TABLE_EXPORT_OBJECTS для режима таблицы и табличного пространства. Значения, перечисленные в столбце OBJECT_PATH, являются допустимыми типами объектов.

В первых двух представлениях моего экземпляра 11gR2 (EE) нет никаких ссылок на разделы; в третьем есть ссылки на DBMS_PLUGTS, которых нет в Справочник по пакетам и типам PL/SQL, но, похоже, для переносимых табличных пространств.

Не окончательный, но на основании этого я должен сказать «нет», по крайней мере, как отдельный тип объекта.

Так как насчет использования синтаксиса table:partition, допустимого в предложении TABLES? Это не работает; если вы попытаетесь включить имя раздела в предложение EXCLUDE:

expdp tables=MY_TABLE exclude=table:"= 'MY_TABLE:SOME_PARTITION'" ...

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

Единственный вариант, который у вас есть, это указать разделы, которые вы делаете в TABLES.

person Alex Poole    schedule 01.08.2012
comment
@Raihan - ссылка говорит, что это для версий до 11g; но также предлагает обходной путь? (И ответ, который я дал - "нет" - по-прежнему верен; моя попытка обходного пути просто ошибочна ‹ухмылка›) - person Alex Poole; 10.08.2012
comment
Проблема существует как в 10g, так и в 11g. Предлагаемый обходной путь использует клазу INCLUDE/EXCLUDE, на которую вы сами ответили, что она не применяется к разделам. - person Raihan; 10.08.2012
comment
@Raihan - ах, да, действительно нужно было прочитать это внимательнее ... извините! - person Alex Poole; 10.08.2012

Похоже, что единственный способ включить/исключить выбранные разделы во время экспорта — использовать API-интерфейс datapump. Ниже приведен пример:

http://www.acehints.com/2011/06/data-pump-expdp-how-to-exclude-table.html

person Raihan    schedule 10.08.2012

Вы не можете исключить раздел таблицы, используя ключевое слово TABLE, вы хотите исключить TABLE_DATA.

exclude=table_data:"in ('SOME_PARTITION','SOME_OTHER_PARTITION')"

В руководствах это действительно объясняется.

К сожалению, любое совпадение table_data будет исключено. Это действительно здорово, если вы разбиваете свои таблицы по периоду, например:
TRANSACTION.PD2010
TRANSACTION.PD2011
TRANSACTION.PD2012
TRANSACTION.PD2013
TRANSACTION_DETAIL.PD2010
TRANSACTION_DETAIL.PD2011
TRANSACTION_DETAIL.PD2012
TRANSACTION_DETAIL.PD2013
Имена разделов не должны совпадать с именами любых таблиц, но вы, конечно, позаботились об этом, когда планировали разделение.
Теперь вы можете это сделать. исключить следующим образом:

exclude=table_data:"in (select partition_name from user_partitions where partition_name like 'PD%' and partition_name < 'PD' || to_char(sysdate,'YYYY'))"

Вы также можете сделать включение таким же образом, используя оператор select вместо списка таблиц, таким образом вы можете обойти ограничение строки в 4000 символов. Это также можно обойти с помощью нескольких операторов включения или добавления разрывов строк в список таблиц, однако я считаю, что если у вас есть список в, в этом списке может быть только 1000 объектов, вы также можете выполнить экспорт таблицы , который экспортирует только таблицы, а не модули, триггеры и т. д. Этот список не ограничен 1000, и снова вы можете обойти ограничение в 4000 символов, добавив разрывы строк.

person Tommy Petersen    schedule 11.01.2013