Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Настроить горячий бэкап (Linux, Oracle, Rman)  [new]
Oracle is so Oracle
Member

Откуда:
Сообщений: 5
Доброго времени суток! Подскажите пожалуйста, как исправить кривые ручонки.

Задача: настроить горячий бэкап
Дано:
OS Linux red hat
Oracle 12.1.0.2

Имеется скриптик backup.sh следующего вида:

+
date=` '+%d.%m.%y_%H.%M.%S'`
export PATH="..."
export ORACLE_HOME="..."
export ORACLE_SID=".."
rman target ='sys/password' mslog=my_path/rman_DB-$date.log << EOF
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE
DISK FORMAT 'my_path/BACKUP-$date.bus';
BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
}
EXIT;
EOF


Предполагается, что он делает "горячий" бэкап БД + архив логи и удаляет забэкапленный архив логи.

Если его запускать из терминала sh backup.sh - все хорошо отрабатывает, все замечательно.

Хочу запускать в планировщике.
Запускаю в crontab, допустим, каждый четверг в 10.30
30 10 * * 4 /my_path/backup.sh

В итоге, бэкап появляется в указанном месте, но! В лог файле есть строчки

Finished backup at 30-JUN-16

Starting backup at 30-JUN-16
channel c1: starting full datafile backup set
channel c1: specifying datafale(s) in backup set

...........

RMAN-03002: failure of backup plus archivelog command at 06/30/2016 10:31:03
ORA-19504: failed to create file "my_path/backup-30.06.16-10.30.01.bus"
ORA-27038: created file already exists
Additional information: 1

RMAN>

Recovery Manager complete.

Т.е., rman сделал бэкап, а потом хочет сделать еще раз, но не может, из-за совпадения имен файлов.

P.S. Предыдущая версия скрипта без даты в имени файла отрабатывала следующим образом: создавалось столько бэкапов, сколько возможно, пока не закончится место на диске.
30 июн 16, 10:57    [19353457]     Ответить | Цитировать Сообщить модератору
 Re: Настроить горячий бэкап (Linux, Oracle, Rman)  [new]
Oleg M.Ivanov
Member

Откуда: Москва
Сообщений: 1164
Вот вам рабочий скрипт(настроить только свои пути и ORACLE_SID). Запускать по крону оракла.
Ну и еще настроить в RMAN необходимый RETENTION POLICY , также
CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/путь к бекапу/%F';
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/путь к бекапу/bc_%d_%Y%M%D_%U';

и будет вам счастье. При сбоях будет отписываться на мыло(в скрипте внизу настроить).

+

#!/bin/sh

# ---------------------------------------------------------------------------
# hot_database_full_backup.sh
#
# Usage:
# hot_database_full_backup.sh
#
# ---------------------------------------------------------------------------

CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1`

DIRNAME=`dirname ${0}`

if [ "$DIRNAME" = "." ]
then
DIRNAME=`pwd`
fi

RMAN_LOG_FILE="${DIRNAME}/logs/`basename ${0}`_`date '+%Y%m%d%H%M'`.out"

if [ -f "$RMAN_LOG_FILE" ]
then
#rm -f "$RMAN_LOG_FILE"
echo '------------------------------------------New backup--------------------------------------' >> $RMAN_LOG_FILE
fi

echo >> $RMAN_LOG_FILE
chmod 666 $RMAN_LOG_FILE

echo Script $0 >> $RMAN_LOG_FILE
echo ==== started on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE

ORACLE_HOME=/u01/oracle/product/db; export ORACLE_HOME
ORACLE_SID=PROD; export ORACLE_SID
TNS_ADMIN=/u01/oracle/product/db/network/admin; export TNS_ADMIN
NLS_DATE_FORMAT='RRRR.MM.DD HH24:MI:SS'; export NLS_DATE_FORMAT
ORACLE_USER=oracle
TARGET_CONNECT_STR=/
RMAN=$ORACLE_HOME/bin/rman

echo >> $RMAN_LOG_FILE
echo "RMAN: $RMAN" >> $RMAN_LOG_FILE
echo "ORACLE_SID: $ORACLE_SID" >> $RMAN_LOG_FILE
echo "ORACLE_USER: $ORACLE_USER" >> $RMAN_LOG_FILE
echo "ORACLE_HOME: $ORACLE_HOME" >> $RMAN_LOG_FILE
echo "TNS_ADMIN: $TNS_ADMIN" >> $RMAN_LOG_FILE

echo "Default - Full backup requested" >> $RMAN_LOG_FILE
BACKUP_TYPE="INCREMENTAL LEVEL=0"

CMD_STR="
ORACLE_HOME=$ORACLE_HOME;
export ORACLE_HOME;
ORACLE_SID=$ORACLE_SID;
export ORACLE_SID;
TNS_ADMIN=$TNS_ADMIN;
export TNS_ADMIN;
$RMAN target $TARGET_CONNECT_STR nocatalog log $RMAN_LOG_FILE append << EOF
RUN {

BACKUP
$BACKUP_TYPE
SKIP INACCESSIBLE
TAG DW_level_0
FILESPERSET 150
DATABASE
plus archivelog
delete all input;

delete force noprompt obsolete device type disk;
}
EOF
"

# Initiate the command string
if [ "$CUSER" = "root" ]
then
su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE
RSTAT=$?
else
/bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILE
RSTAT=$?
fi

# ---------------------------------------------------------------------------
# Log the completion of this script.
# ---------------------------------------------------------------------------
if [ "$RSTAT" = "0" ]
then
LOGMSG="ended successfully"
else
LOGMSG="ended in error"
/bin/mail -s 'Something wrong with RMAN backup PROD. Check it.' youpost@youmaildomen.ru << EOF
Backup DW ended with errors.
`/bin/cat $RMAN_LOG_FILE`
EOF
fi

echo >> $RMAN_LOG_FILE
echo Script $0 >> $RMAN_LOG_FILE
echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE

exit $RSTAT

30 июн 16, 11:26    [19353604]     Ответить | Цитировать Сообщить модератору
 Re: Настроить горячий бэкап (Linux, Oracle, Rman)  [new]
nata44845
Member

Откуда: Красноярск
Сообщений: 355
Oracle is so Oracle,

Может FORMAT убрать, у тебя вроде перекрывается один файл бэкапа архивных логов другим с той же датой до секунды, у оракла и так формат прописан в параметрах.

run {
allocate channel mdr_backup device type disk;
BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
backup current controlfile;
delete noprompt obsolete device type disk;
}
list backup;

Я бы примерно так сделала, а что у тебя с архивлогами, может он их все и бэкапит, их удалять надо лишние ненужные.
Сделай CROSSCHECK ARCHIVELOG ALL;
А потом delete noprompt obsolete device type disk;
Он удаленные пометит и удалит из CONTROLFILE.
А потом LIST COPY; чтобы посмотреть, что в CONTROL FILE записано.
30 июн 16, 11:27    [19353607]     Ответить | Цитировать Сообщить модератору
 Re: Настроить горячий бэкап (Linux, Oracle, Rman)  [new]
nata44845
Member

Откуда: Красноярск
Сообщений: 355
Oracle is so Oracle,

run {
allocate channel db0_backup device type disk;
backup as compressed backupset incremental level 0 database tag 'backup';
backup current controlfile;
delete noprompt obsolete device type disk;
}
list backup;


run {
allocate channel db1_backup device type disk;
backup as compressed backupset incremental level 1 database tag 'backup';
backup current controlfile;
delete noprompt obsolete device type disk;
}
list backup;


run {
allocate channel arch_backup device type disk;
backup archivelog all delete input ;
}
delete noprompt obsolete device type disk;


Вот такие три скриптика для инкрементального бэкапа могу дать, первый уровня 0 раз в неделю, второй в остальные дни собирает инкрементальный бэкап, третий собирает архивлоги в бэкапы архивлогов ежедневно. Еще по идее надо мультиплексировать редологи туда же для полного счастья.
30 июн 16, 11:40    [19353674]     Ответить | Цитировать Сообщить модератору
 Re: Настроить горячий бэкап (Linux, Oracle, Rman)  [new]
Q.Tarantino
Member [заблокирован]

Откуда: Где-то рядом...
Сообщений: 12015
nata44845
Может FORMAT убрать, у тебя вроде перекрывается один файл бэкапа архивных логов другим с той же датой до секунды, у оракла и так формат прописан в параметрах.

И снова блондинка! У него прописан относительный а не абсолютный путь!
Садись, два.
30 июн 16, 13:35    [19354354]     Ответить | Цитировать Сообщить модератору
 Re: Настроить горячий бэкап (Linux, Oracle, Rman)  [new]
nata44845
Member

Откуда: Красноярск
Сообщений: 355
Q.Tarantino,

При чем тут относительный путь, у него имена архивов друг на друга накладываются, из-за того что имя у него до секунд задано.
Или надо еще какую-то прибавку к имени, или оставить это ораклу и не задавать свои имена, RMAN все равно как у него файлики будут называться.
А предыдущая версия без имени скорее всего бэкапит все архивлоги которые найдет, потому что не подрезаны.

Я вон вчера настраивала RMAN задаю FRA 100GB, он мне говорит она у вас уже почти полная (!), а там файлы за 13 год в list copy, пришлось 3 раза сделать полный бэкап (REDUNDANCY=3) и потом его отпустило и он CF вычистил, хотя этих файлов там уже не было на диске.
1 июл 16, 06:16    [19357718]     Ответить | Цитировать Сообщить модератору
 Re: Настроить горячий бэкап (Linux, Oracle, Rman)  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Вот только имя файла (а не путь, насколько я понял) у него один и тот же для всех BACKUP PIECE-s.
И, соответственно -- это враньё
Oracle is so Oracle
Если его запускать из терминала sh backup.sh - все хорошо отрабатывает, все замечательно.
ибо BACKUP DATABASE PLUS ARCHIVELOG делает минимум 2 файлика бэкапа, что с одним именем никак нельзя

Чтоб файлики бэкапа различались -- туда надо добавлять шаблон (formatSpec)
Самое простое, но не очень "говорящее" -- %U
+
$ ORACLE_SID=tst rman target /

Recovery Manager: Release 11.2.0.3.0 - Production on Fri Jul 1 13:58:34 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

connected to target database: TST (DBID=1662986732)

RMAN> run {
2> allocate channel c1 device type disk format '/orabackup/backup/tst/aaa';
3> backup database plus archivelog;
4> }

using target database control file instead of recovery catalog
allocated channel: c1
channel c1: SID=72 device type=DISK


Starting backup at 01-JUL-16
current log archived
channel c1: starting archived log backup set
channel c1: specifying archived log(s) in backup set
input archived log thread=1 sequence=28067 RECID=58748 STAMP=915903938
...
input archived log thread=1 sequence=28084 RECID=58782 STAMP=916063184
channel c1: starting piece 1 at 01-JUL-16
channel c1: finished piece 1 at 01-JUL-16
piece handle=/orabackup/backup/tst/aaa tag=TAG20160701T135945 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:07
Finished backup at 01-JUL-16

Starting backup at 01-JUL-16
channel c1: starting full datafile backup set
channel c1: specifying datafile(s) in backup set
input datafile file number=00006 name=/u/app/oracle/oradata/tst/users01.dbf
...
input datafile file number=00004 name=/u/app/oracle/oradata/tst/idx01.dbf
channel c1: starting piece 1 at 01-JUL-16
released channel: c1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup plus archivelog command at 07/01/2016 13:59:55
ORA-19504: failed to create file "/orabackup/backup/tst/aaa"
ORA-27038: created file already exists
Additional information: 1

RMAN> run {
2> allocate channel c1 device type disk format '/orabackup/backup/tst/aaa-%U';
3> backup database plus archivelog;
4> }

allocated channel: c1
channel c1: SID=72 device type=DISK


Starting backup at 01-JUL-16
current log archived
skipping archived logs of thread 1 from sequence 28067 to 28084; already backed up
channel c1: starting archived log backup set
channel c1: specifying archived log(s) in backup set
input archived log thread=1 sequence=28085 RECID=58783 STAMP=916063237
channel c1: starting piece 1 at 01-JUL-16
channel c1: finished piece 1 at 01-JUL-16
piece handle=/orabackup/backup/tst/aaa-clr9k106_1_1 tag=TAG20160701T140038 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:01
Finished backup at 01-JUL-16

Starting backup at 01-JUL-16
channel c1: starting full datafile backup set
channel c1: specifying datafile(s) in backup set
input datafile file number=00006 name=/u/app/oracle/oradata/tst/users01.dbf
...
input datafile file number=00004 name=/u/app/oracle/oradata/tst/idx01.dbf
channel c1: starting piece 1 at 01-JUL-16
channel c1: finished piece 1 at 01-JUL-16
piece handle=/orabackup/backup/tst/aaa-cmr9k108_1_1 tag=TAG20160701T140040 comment=NONE
channel c1: backup set complete, elapsed time: 00:01:45
Finished backup at 01-JUL-16

Starting backup at 01-JUL-16
current log archived
channel c1: starting archived log backup set
channel c1: specifying archived log(s) in backup set
input archived log thread=1 sequence=28086 RECID=58786 STAMP=916063346
channel c1: starting piece 1 at 01-JUL-16
channel c1: finished piece 1 at 01-JUL-16
piece handle=/orabackup/backup/tst/aaa-cnr9k13i_1_1 tag=TAG20160701T140226 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:01
Finished backup at 01-JUL-16

Starting Control File and SPFILE Autobackup at 01-JUL-16
piece handle=/orabackup/backup/tst/TST-c-1662986732-20160701-02 comment=NONE
Finished Control File and SPFILE Autobackup at 01-JUL-16
released channel: c1

Естественно, никто не мешает добавлять туда и дату-время

Oracle is so Oracle
Предыдущая версия скрипта без даты в имени файла отрабатывала следующим образом: создавалось столько бэкапов, сколько возможно, пока не закончится место на диске
А для этого существует RMAN-команда DELETE
1 июл 16, 07:14    [19357740]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить