Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторный практикум по НСД 2013

.pdf
Скачиваний:
66
Добавлен:
12.11.2022
Размер:
9.94 Mб
Скачать

421

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]