Работа 20
КОНТРОЛЬ ВОССТАНОВЛЕНИЯ БАЗЫ ДАННЫХ МЕТОДАМИ ЛОГИЧЕСКОГО КОПИРОВАНИЯ
Цель: получение практических навыков контроля резервирования и восстановления базы данных методами логического копирования с использованием утилит логического копирования Oracle.
ПЛАН ПРОВЕДЕНИЯ РАБОТЫ
1.Работа с утилитами «exp», «imp». Общее знакомство с утилитами. Примеры выполнения выгрузки и загрузки данных. Примеры восстановления запорченной в таблице информации. Опции выгрузки и загрузки. Трассировка работы утилит.
2.Работа с утилитами «expdp», «impdp». Создание директории
–объекта файловой системы ОС и директории – объекта базы данных для хранения результатов экспорта. Манипулирование процессом выгрузки. Различные опции утилит «expdp», «impdp». Использование PL/SQL API для выгрузки данных. Технологиz data pump Oracle и внешние таблицы.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Работа с утилитами «exp», «imp». Общее знакомство с утилитами. Примеры выполнения выгрузки и загрузки данных. Примеры восстановления запорченной в таблице информации. Опции выгрузки и загрузки. Трассировка работы утилит.
В окне DOS введем команду (работа с утилитами выполняется в окне DOS пользователем с привилегией администратора ОС)
exp help=y
Выводится таблица с представленным в ней описанием параметров утилиты «exp».
Выполним экспорт таблиц пользователя «scott». Для того чтобы в дальнейшем можно было работать в схеме «scott», надо пользователем «system» выполнить команды разблокировки (alter user scott account unlock;) и изменения пароля (alter user scott identified by scott;) пользователя.
486
exp system/system@orcl owner=scott file=c:\tmp\emp.scott log=c:\tmp\scott.log
Экспорт выполняется пользователем «system», обладающим ролью «dba», которой принадлежит системная привилегия «expfulldatabase». Выполнять экспорт пользователем с привилегией «sysdba» Oracle не рекомендует, так как параметр экспорта определяемый ключевым словом «consistent» (требование согласованности выгружаемых таблиц, с которыми во время экспорта выполняются транзакции) для пользователя с привилегией «sysdba» не поддерживается.
Возможен другой вариант команды экспорта пользователя
«scott» с паролем «scott»
exp userid=scott/scott@orcl file=c:\tmp\scott.dmp log=c:\tmp\ scott.log
После экспорта ознакомимся с помощью worpad-а с содержимым дамп-файла и обнаружим, что экспортированы все привилегии на объекты схемы «scott». В частности, привилегии на таблицу «emp», которые назаначались пользователям «king», «ford» и другим пользователям при выполнении лабораторной работы по детальному контролю доступа. Параметр «grant» утилиты «exp» установлен в «Y» по умолчанию.
Теперь откроем в окне sqlplus сессию пользователя «scott» и удалим все строки таблицы «salgrade»:
Delete from salgrade; commit;
Вслед за тем восстановим содержимое таблицы «salgrade», используя утилиту импорта в окне dos:
imp scott/scott@orcl file=c:\tmp\scott.dmp ignore=y full=yes
Вэтой команде установлен параметр «ignore=y» (по умолчанию этот параметр имеет значение «N»), так как иначе импорт строк в таблицу «salgrade» не состоится из-за ошибки импорта, связанной с попыткой этой утилиты создать заново таблицу
«salgrade».
Экспортируем только таблицу «salgrade» из схемы «scott»:
exp system/system@orcl tables=scott.salgrade file=c:\ tmp\salgrade.dmp log=c:\tmp\salgrade.log
Вокне sqlplus в сессии пользователя «scott» удалим все строки таблицы «salgrade»
487
Delete from salgrade; commit;
Вслед за тем восстановим содержимое таблицы «salgrade», используя утилиту импорта в окне dos:
imp system/system@orcl fromuser=scott touser=scott ignore=y file=c:\tmp\salgrade.dmp
Здесь «ignore=y» появилось, чтобы на экспорт не повлияла ошибка из-за попытки при импорте создать таблицу «salgrade» заново.
Можно загрузить таблицу «salgrade» вместе со строками в другую схему, например «hr». Для того, чтобы в дальнейшем можно было работать в схеме «hr», надо пользователем «system» выполнить команды разблокировки (alter user hr account unlock;) и изме-
нения пароля (alter user hr identified by hr;) пользователя:
imp system/system@orcl fromuser=scott touser=hr tables=salgrade file=c:\tmp\salgrade.dmp
После этого надо удалить таблицу «salgrade» из схемы «hr». При экспорте и импорте можно использовать файлы парамет-
ров. Например,
exp system/system@orcl parfile=c:\tmp\expparam.txt
Содержимое файла «expparam.txt» tables=scott.salgrade file=c:\tmp\salgrade.dmp log=c:\tmp\salgrade.log
imp system/system@orcl parfile=c:\tmp\impparam.txt
Содержимое файла «impparam.txt» fromuser=scott
touser=scott
ignore=y
file=c:\tmp\salgrade.dmp
При использовании утилиты exp можно выполнить трассировку экспорта командой
exp system/system@orcl owner=scott file=c:\tmp\emp.dmp log=c:\tmp\emp.log trace=y
После этого файл трассировки можно увидеть в последних файлах в папке D:\oracle\product\10.2.0\admin\orcl\udump, если упо-
рядочить файлы по дате. Этот файл трассировки можно анализировать с помощью утилиты «tkprof»:
488
tkprof d:\oracle\product\10.2.0\admin\orcl\udump\orcl_ora_1120.trc c:\tmp\output.txt sort=exeela
Утилита «tkprof» позволяет убедиться в том, что экспорт связан со многими обращениями к словарю базы данных для извлечения метаданных. С помощью трассировки мы можем уточнить все детали экспорта и поправить ошибку.
Утилита «exp» позволяет выгружать строки по условию:
exp system/system@orcl tables=scott.emp file=c:\tmp\emp.dmp log=c:\tmp\emp.log query=\"where job='CLERK'\"
exp system/system@orcl tables=scott.emp file=c:\tmp\emp.dmp log=c:\tmp\emp.log query=\"where deptno>=20\"
exp system/system@orcl tables=scott.emp file=c:\tmp\emp.dmp log=c:\tmp\emp.log query=\"where deptno>=20 and job='CLERK'\"
Для отслеживания процесса экспорта вводится ключевое слово
«feedback»:
exp system/system@orcl tables=scott.emp feedback=2 file=c:\tmp\emp.dmp log=c:\tmp\emp.log
По ходу выполнения экспорта после экспортирования каждых двух строк таблицы «emp» в выводимом протоколе экспорта появится знак «.» (точка). В нашем примере появится 7 точек подряд.
Аналогично для отслеживания процесса импорта:
imp system/system@orcl fromuser=scott touser=hr feedback=2 file=c:\tmp\emp.dmp log=c:\tmp\emp.log
В нашем примере в протоколе импорта появится 7 точек подряд.
После проведенного в схему «hr» импорта надо удалить из этой схемы импортированную в нее таблицу «emp».
Для экспорта всей базы данных используется команда
exp `sys/sys@orcl as sysdba` FULL=Y FILE=c:\tmp\full.dmp log=c:\tmp\full.txt
При импортировании больших таблиц для уменьшения размера сегмента отката полезно использовать «commit» для промежуточных этапов импорта. Промежуточный этап завершается при заполнении буфера, размер которого определяется ключевым словом «buffer». Нижеприводимая команда для пользователя «scott» неактуальна, так как размер таблиц схемы невелик, приводится эта команда только для иллюстрации синтаксиса:
489
imp userid=scott/scott@orcl FILE= c:\tmp\scott.dmp log=c:\ tmp\scott.log BUFFER =32000 COMMIT = Y ignore=y
Врезультате выполнения этой команды будут загружены только строки таблицы «salgrade», так как для остальных таблиц при загрузке будет нарушено ограничение уникальности. В отношении последней команды следует отметить, что при импортировании таблиц с полями типа «lob», «blob» размер буфера надо подбирать так, чтобы его хватило на импортирование объектов этого типа.
При импортировании объектов можно использовать команду импорта, которая собственно импорт не выполнит, но создаст sql скрипт создания объектов импортируемой схемы. Эти скрипты можно поправить, изменив «storage», «tablespace» для таблиц, индексов, разнеся их по раным tablespace:
imp.exe USERID=scott/scott@orcl FILE= c:\tmp\scott.dmp indexfile = c:\tmp\scottidx.sql full=y
После выполнения этого скорректированного скрипта следует выполнить импорт данных со значением ключевого слова «indexes
=n»
2.Работа с утилитами «expdp», «impdp». Создание директории
–объекта файловой системы ОС и директории – объекта базы данных для хранения результатов экспорта. Манипулирование процессом выгрузки. Различные опции утилит «expdp», «impdp». Использование PL/SQL API для выгрузки данных. Технологии data pump Oracle и внешние таблицы.
Вверсии Oracle 10g появилась технология Oracle data pump, лишенная существенных недостатков утилит «exp», «imp» (в частности, относительно медленной выгрузки и загрузки данных, отсутствия API и в связи с этим сложностями встраивания в приложения).
Вокне DOS введем команду
expdp help=y
Выводится таблица с представленным в ней описанием параметров утилиты «expdp».
Ангалогичная таблица выводится для импорта командой impdp help=y
Утилита data pump для выполнения требует создания каталога для записи/чтения файлов выгрузки/загрузки. Пользователи, рабо-
490