На днях писал документацию к серверам, среди прочего, интересным показался мануал по работе с лентой (стримером). Вот описал как у меня происходит бэкап на ленту и как потом восстановить с ленты бэкап папки за определенную дату.
Ленточный носитель предназначен для хранения холодных копий рабочей базы данных. Копирование холодного дампа происходит каждую ночь, по расписанию системного планировщика заданий. Запись в crontab приведена ниже.
00 2 * * * /u/app/oracle/sh_script/backup.sh >/dev/null 2>&1
Процесс копирования происходит каждую ночь в два часа, и длится примерно 2 часа. Большую часть времени занимает перенос файлов базы из текущий рабочей директории в папку ibso_night. В данной папке, которая расположена в /db1/oradata/ibso_night, всегда находится архив ночной холодной копии рабочей базы данных. После того как отработает процесс остановки базы, копирование данных в ibso_night, база запускается и работает в штатном режиме. Далее выполняется процесс архивирования папки ibso_night, который занимает примерно 40 минут. Далее архив отправляется на ленту и на ftp сервер резерва.
Процесс добавления очередной копии на ленту:
tar cEvf /dev/rmt/0cbn /db1/oradata/ibso_night/*
где 0cbn - название ленточного устройства в системе. Процедура записи копии базы на ленту занимает 15-20 минут.
Процесс чтения копии базы данных с ленты (на определенное число) выглядит так:
1.# mt -f /dev/rmt/0cbn rewind -- перемотка ленты на начало (0 блок)
2.# mt -f /dev/rmt/0cbn status --убедитесь что лента встала на 0 блок
Должно быть что то вроде file no= 0 block no= 0
3.# tar -tvf /dev/rmt/0cbn --просмотр файлов первого архива на ленте.
Нужно дождаться окончания процедуры, увидеть, архив от какого числа находится в самом начала ленты. Вывод команды примерно такой:
101/100 2326543491 Ноя 19 02:18 2011 /db1/oradata/ibso_night/T_AUD.db
Это значит, что в данные момент в самом начале ленты лежит архив от Ноя 19 02:18 2011. Далее, для того чтобы забрать с ленты архив за определенное число следует определить количество дней, между датой первого архива и датой архива который следует извлечь. Например, нужно достать с ленты архив за 22 ноября. Логика такова:
19 ноября – 0 блок
20 ноября – 1 блок
21 ноября – 2 блок
22 ноября – 3 блок
В данный момент лента находится в конце 0 блока, так как мы просматривали содержимое первого архива, а значит, лента перематывалась. Следует вернуть ее в самое начало
4.# mt -f /dev/rmt/0cbn rewind --перемотать на начало
И перемотать на 3 блок
5.# mt -f /dev/rmt/0cbn fsf 3 --перемотать от начала на 3 блока
6.# mt -f /dev/rmt/0cbn status -- убедимся, что лента на 3 блоке
7.# tar -xvf /dev/rmt/0cbn --чтение архива
Следует заметить что чтение архива происходит в папку /db1/oradata/ibso_night. Поэтому данную папку предварительно следует удалить или переименовать.
8.# mt -f /dev/rmt/0cbn eom --перематываем ленту в конец, для дозаписи.
Основные Команды
Получить статус: mt -f /dev/nst0 status (информация получаемая может сильно отличаться как среди разных моделей стримеров так и реализаций mt)
Перемотка в начало: mt -f /dev/nst0 rewind Используется если необходимо произвести перемотку к началу ленты например для считывания сначала или если надо переписать имеющиеся данные.
Перемотка в конец данных: mt -f /dev/nst0 eom (в некоторых реализациях mt -f /dev/nst0 eod) Используется если нужно произвести дозапись к имеющимся на кассете данным.
Перемотать на _к-во_ записей вперед: mt -f /dev/nst0 fsf _к-во_
Перемотать на _к-во_ записей назад: mt -f /dev/nst0 bsf _к-во_
Перемотать к началу записи с абсолютным номером _номер_: mt -f /dev/nst0 asf _номер_ На некоторых стримерах может вызывать перемотку вначало (rewind) а затем поиск указанной записи(fsf).
Стирание данных с ленты: mt -f /dev/nst0 erase Это достаточно длительная операция. И опасная, так как стертые данные не поддаются восстановлению.