Лабораторный практикум по НСД 2013
.pdf421
b)recover database until cancel;
c)Нажатие (может быть, неоднократное) клавиши «Enter»;
d)cansel;
e)alter database open resetlogs;
f)Правильных ответов нет.
422
4.8.4. ЛАБОРАТОРНАЯ РАБОТА № 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;) пользователя.
exp system/system@orcl owner=scott file=c:\tmp\emp.scott log=c:\tmp\scott.log
Экспорт выполняется пользователем «system», обладающим ролью «dba», которой принадлежит системная привилегия «expfulldatabase». Выполнять экспорт пользователем с привилегией «sysdba» Oracle не рекомендует, так как параметр экспорта определяемый ключевым словом «consistent» (требование согласо-
423
ванности выгружаемых таблиц, с которыми во время экспорта выполняются транзакции) для пользователя с привилегией «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»
Delete from salgrade; commit;
Вслед за тем восстановим содержимое таблицы «salgrade», используя утилиту импорта в окне dos-а
imp system/system@orcl fromuser=scott touser=scott ignore=y file=c:\tmp\salgrade.dmp
Здесь «ignore=y» появилось, чтобы на экспорт не повлияла ошибка из-за попытки при импорте создать таблицу «salgrade» заново.
424
Можно загрузить таблицу «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».
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\"
425
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» неактуальна, так как размер таблиц схемы невелик, приводится эта команда только для иллюстрации синтаксиса.
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
426
После выполнения этого скорректированного скрипта следует выполнить импорт данных со значением ключевого слова «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 для выполнения требует создания каталога для записи/чтения файлов выгрузки/загрузки. Пользователи, работающие с файлами data pump, должны обладать привилегиями read и write на этот каталог.
Создадим каталог «c:\tmp\dpexmpl» (хотя Oracle рекомендует, чтобы этот каталог был создан именно в папке «Oracle – в целях большей безопасности, так как пользователь, не обладающий правами администратора ОС, не сможет читать файлы в этом каталоге).
connect sys/sys as sysdba host rd c:\tmp\dpexmpl; host mkdir c:\tmp\dpexmpl; drop directory dpexmpl;
create directory dpexmpl as 'c:\tmp\dpexmpl'; grant read, write on directory dpexmpl to scott; host del c:\tmp\dpexmpl\scott.dmp
Прежде чем выполнять экспорт, удалили и заново создали и директорию OC («c:\tmp\dpexmpl») и директорию – объект базы данных (dpexmpl), связав этот объект с директорией ОС (create directory dpexmpl as 'c:\tmp\dpexmpl';).В нашем примере эти имена совпадают, но это совпадение не обязательно. Далее «scott» получил нужные привилегии. Последней выполненной командой удаляем уже
427
имеющийся дамп-файл «scott.dmp» (иначе будет получено сообщение «файл уже существует»). Проверим возможность выполнения экспорта,
connect scott/scott
host expdp userid=scott/scott@orcl schemas=scott dumpfile=scott.dmp job_name=scott_export directory= dpexmpl logfile=scott.log
По умолчанию при установке создается объект базы данных «directory» с
именем «DATA_PUMP_DIR»
conn sys/sys as sysdba
SELECT directory_name, directory_path FROM dba_directories WHERE directory_name='DATA_PUMP_DIR';
Следующей командой удалим дамп файл scott.dmp, оставшийся при предыдущем выполнении настоящей лабораторной работы в пути, указанном последней командой «SELECT», а потом, выдав scott-у привилегии на data_pump_dir, создадим заново дамп файл
host del d:\oracle\product\10.2.0\admin\orcl\dpdump\scott.dmp grant read, write on directory data_pump_dir to scott;
host expdp userid=scott/scott@orcl schemas=scott dumpfile=scott.dmp job_name=scott_export directory=data_pump_dir logfile=scott.log
Создадим в схеме «scott» таблицу «obj» доведем ее объем до величины в 3 с лишним миллиона записей с тем, чтобы процесс экспорта выполнялся за время, в течение которого мы могли бы посмотреть состояние выполняемой по экспорту работы, проиллюстировать остановку этой работы и повторный ее запуск.
connect sys/sys as sysdba
create table scott.obj as select * from all.objects; conn scott/scott
insert into obj select * from obj; insert into obj select * from obj; insert into obj select * from obj; insert into obj select * from obj; insert into obj select * from obj; insert into obj select * from obj; select count(*) from obj; commit;
В отдельном окне SQL*Plus откроем вторую сессию пользователя «scott», из которой будем давать команду присоединения к выпоняемой по экспорту работе
connect scott/scott
Из окна SQL*Plus первой сессии выполним
428
host expdp userid=scott/scott@orcl schemas=scott dumpfile=scott.dmp job_name=scott_export directory= dpexmpl logfile=scott.log
После чего перейдем в окно SQL*Plus второй сессии пользователя «scott» и выполним команду,
Host expdp scott/scott attach=scott_export
которая позволит пользователю «scott» во второй сессии подсоединиться к выполняемой работе по экспорту и увидеть характеристики выполнения этой работы, появление которых завершается выводом приглашения «export>». Вслед за тем остановим работу экспорта
Stop_job
В окне первой сессии SQL*Plus мы увидим сообщение о том, что экспорт остановлен по запросу пользователя. Теперь есть возможность добавить, используя команду «add_file» в выполняемое и остановленное задание другие файлы дампа из других каталогов, после чего продолжить выполнение задания. Для продолжения экспорта в окне второй сессии выполним еще раз команду
Host expdp scott/scott attach=scott_export
а вслед за тем
Start_job
Status
Последняя команда показывает процент выполнения экспорта.
Data pump позволяет выполнять экспорт с использованием опций «exclude», «include», «query». Выполним экспорт из схемы «scott» всех таблиц, за исключением таблицы «obj»
Connect scott/scott
host del C:\tmp\dpexmpl\scott.dmp
host expdp userid=scott/scott@orcl schemas=scott dumpfile=scott.dmp job_name=scott_export directory= dpexmpl exclude=table:"IN('OBJ')" logfile=scott.log
По протоколу экспорта и по размеру дамп файла видно, что таблица «obj» действительно не экспортировалась.
Выполним экспорт с опцией «include»
Connect scott/scott
host del C:\tmp\dpexmpl\scott.dmp
host expdp userid=scott/scott@orcl schemas=scott dumpfile=scott.dmp job_name=scott_export directory= dpexmpl include=table:"IN('EMP')" logfile=scott.log
429
По протоколу экспорта видно, что экспортировалась только таблица «emp». Выполним экспорт с опцией «query»
Connect scott/scott
host del C:\tmp\dpexmpl\scott.dmp
host expdp userid=scott/scott@orcl schemas=scott dumpfile=scott.dmp job_name=scott_export directory= dpexmpl include=table:"IN('EMP')" query=scott.emp:" 'WHERE DEPTNO>10'" logfile=scott.log
По этой команде будет выгружено 11 строк таблицы «emp».
При экспорте мы можем экспортировать только метаданные, без самих данных. Для этого выполним
connect scott/scott
host expdp userid=scott/scott@orcl schemas=scott dumpfile=metadatascott.dmp job_name=scott_export directory= dpexmpl content=metadata_only logfile=metadatascott.log
Для импорта файла, созданного с помощью expdp следует пользоваться утилитой impdp. Файлы выгрузки утилит «exp» и «expdp» не совместимы, т.е. утилитой «imp» не импортируются файлы выгрузки утилиты «expdp» и, наоборот, утилитой «impdp» не импортируются файлы выгрузки утилиты «exp».
Как уже говорилось выше, команда «impdp help=y» в окне dos выведет все опции этой утилиты.
Создадим файл параметров hrfromscott.par для импорта данных из схемы
«scott» в схему «hr»
Directory= dpexmpl
Dumpfile=scott.dmp
Remap_schema=scott:hr
Импорт будем выполнять из окна dos командой
impdp system/system parfile=c:\tmp\dpexmpl\hrfromscott.par
Импорт будет выполнен с ошибкой «не найдены родительские ключи», так как таблицу «dept» с родительскими ключами мы не экспортировали в последнем примере экспорта (с условием «where»). Несмотря на ошибку импорт в схему «hr» состоялся. В схеме «hr» создана таблица «emp» и в нее вставлено 14 строк. Выполним экспорт части таблиц «emp», «dept» из схемы «scott»
Connect scott/scott
host del c:\tmp\dpexmpl\scott.dmp
host expdp userid=scott/scott@orcl schemas=scott dumpfile=scott.dmp job_name=scott_export directory= dpexmpl INCLUDE=TABLE:\"IN ('DEPT','EMP')\" query=" 'WHERE DEPTNO>10'" logfile=scott.log
430
А теперь повторим импорт в схему «hr». Выполним пользователем «hr» команды
Connect hr/hr
Drop table hr.emp;
Drop table hr.dept;
Drop public synonym dept;
Затем из окна dos повторим
impdp system/system parfile=c:\tmp\dpexmpl\hrfromscott.par
На этот раз импорт закончится благополучно, может быть, только с одной ошибкой «ORA-02298: невозможно подтвердить (HR.EMP_SELF_KEY) ‒ не найдены родительские ключи».
SQL, который может вызвать сбой: ALTER TABLE "HR"."EMP" ADD CONSTRAINT "EMP_SELF_KEY" FOREIGN KEY ("MGR") REFERENCES "HR"."EMP” (“EMPNO")». Сообщение об ошибке вызвано тем, что мы импортировали строки служащих из 20-го и 30-го отделов, но начальники этих отделов имеют своим начальником личность «king», который приписан к 10-му отделу, строки служащих которого не экспортировались. При импорте невозможно стало реализовать FOREIGN KEY от столбца «MGR» на столбец «EMPNO», так как значения первичного ключа для служащего «king» не существует.
Выполненный нами пример импорта свидетельствует о том, что при опера-
циях экспорта и последующего импорта следует быть очень внимательным,
чтобы не нарушить согласованность данных.
Для импорта, так же как и для экспорта, применимы опции «include», «ex-
clude», «query».
Так же, как и для экспорта, можно останавливать выполняемую работу по импорту, а потом продолжать ее вновь («stop_job», «start_job»). При импорте мы пользовались файлом параметров. Точно так же файл параметров может быть использован для экспорта. И, наоборот, при импорте его парметры мы можем задавать в командной строке, как мы это делали при экспорте.
Импорт может быть выполнен с опцией «sqlfile», которая позволяет сформировать DDL предложения SQL – только по созданию объектов. Выше мы сделали экспорт только метаданных пользователя «scott» в файл «metadatascott.dmp». Создадим в папке, соответствующей директории «dpexmpl» файл параметров
«metadatascott.par» с таким содержимым
Directory= dpexmpl
Dumpfile=metadatascott.dmp
Sqlfile=scottsql.txt