Как экспортировать неопределенные схемы Oracle с помощью expdp - PullRequest
0 голосов
/ 26 ноября 2018

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

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

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

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

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

1 Ответ

0 голосов
/ 26 ноября 2018

Вы не сможете запустить экспорт с помощью этой команды.Утилита экспорта 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, вы можете использовать следующий запрос, чтобы выполнить то же самое.Я нашел этот запрос в отдельном вопросе StackOverflow , но он должен работать просто отлично:

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#SUTIL200

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...