Как экспортировать неопределенные схемы оракула, используя expdp

Я хочу экспортировать базу данных Oracle, но не полные и не определенные схемы; например, схемы, которые их имена, как 'IAS%' Или имя схемы как 'YS%'

Я написал эту команду:

Expdp admin/admin@orcl schemas like 'IAS%'  file=my_data.dmp directory=exp_dir 

Но я сталкиваюсь с ошибкой:

неверное значение позиционного параметра 'like'

1 ответ

Вы не сможете запустить экспорт с помощью этой команды. Утилита экспорта Data Pump (EXPDP) не использует обычные SQL, Вы не можете использовать стенографию SQL команды в пунктах - пункты должны быть определены в соответствии с документацией Oracle. Согласно документации, пример предложения схемы EXPDP выглядит следующим образом:

expdp hr DIRECTORY=dpump_dir1 DUMPFILE=expdat.dmp SCHEMAS=hr,sh,oe

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

Чтобы получить этот список, вы можете попробовать выполнить следующий запрос:

select listagg(username,', ') within group(order by username) csv
  from all_users
  where username like 'IAS%';

Этот запрос использует listagg функция Если вы используете версию Oracle, которая не поддерживает listaggВы можете использовать следующий запрос, чтобы выполнить то же самое. Я нашел этот запрос в отдельном вопросе Stackru, но он должен работать просто отлично:

SELECT SUBSTR (SYS_CONNECT_BY_PATH (username , ','), 2) csv
      FROM (SELECT username , ROW_NUMBER () OVER (ORDER BY username ) rn,
                   COUNT (*) OVER () cnt
              FROM all_users where username like 'IAS%')
     WHERE rn = cnt
START WITH rn = 1
CONNECT BY rn = PRIOR rn + 1;

Независимо от того, какой запрос вы используете, теперь у вас будет список разделенных запятыми схем, начинающихся со строки "IAS". Для этого примера, скажем, что список выглядит так IAS_1, IAS_2, IAS_3и т. д. Ваша команда изменится с:

Expdp admin/admin@orcl schemas like 'IAS%' file=my_data.dmp directory=exp_dir

На что-то более похожее:

Expdp admin/admin@orcl schemas=IAS_1,IAS_2,IAS_3 file=my_data.dmp directory=exp_dir

Если схемы создаются и часто удаляются в этой базе данных, вы можете выполнить запрос, чтобы обновить список схем, на которые влияют, и вручную скопировать и вставить новый список. Если это часто случается, вы можете также создать сценарий динамического SQL для генерации и выполнения команды EXPDP.

Надеюсь это поможет!

Документация по Data Pump: https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_export.htm

Документация по функции listagg: https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions089.htm

Другие вопросы по тегам