Как экспортировать неопределенные схемы оракула, используя 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