При создании дампа схемы с помощью утилиты exp иногда бывает нужно экспортировать не некоторые таблицы по списку, а все таблицы, кроме некоторого списка. При большом количестве таблиц в экспортируемой схеме удобно будет автоматизировать создание файла параметров (parfile) для exp.
Для этого создадим файл build_parfile.sh
с таким содержимым:
#!/bin/sh echo userid=cube/cube@testdb echo file=cube_schema.dmp echo log=cube_schema.log echo rows=y echo indexes=y echo constraints=y echo direct=n echo grants=n echo consistent=n echo compress=n echo buffer=1048560 echo 'tables=(' sqlplus -S / as sysdba 2>/dev/null <<EOF SET FEEDBACK OFF SET SERVEROUTPUT OFF SET VERIFY OFF SET TRIMSPOOL ON SET PAGESIZE 0 SET NEWPAGE 0 SET SPACE 0 SET LINESIZE 800 SET ECHO OFF SET FEEDBACK OFF SET VERIFY OFF SET HEADING OFF SET MARKUP HTML OFF SPOOL OFF SELECT table_name || ',' FROM dba_tables WHERE owner = 'CUBE' AND table_name NOT IN ('CUBE_TBL1', 'CUBE_TBL2', 'HR'); EXIT EOF echo ')'
И запустим его:
# Сделаем файл исполняемым chmod u+x build_parfile.sh # Построим файл параметров build_parfile.sh > parfile.par
Скрипт работает просто: сначала с помощью команды echo
выводит неизменяемые параметры (можно будет потом переделать скрипт, чтобы он использовал шаблон, но мне и так удобно), и использует SQL*Plus с подавлением вывода всего, кроме имён таблиц для генерации списка. При необходимости несложно доработать скрипт, чтобы он выбирал таблицы по более хитрому условию.
И ещё: обратите внимание, что в списке после последнего имени таблицы будет запятая, т.е. файл параметров будет выглядеть примерно так:
userid=cube/cube
file=cube.dmp
log=cube.log
rows=y
indexes=y
constraints=y
direct=n
grants=n
consistent=n
compress=n
buffer=1048560
tables=(
EMP,
BONUS,
DEPT,
SALGRADE,
)
Синтаксически это неверно, но и ошибку не вызывает, так что можно смело оставить и делать экспорт.