1、数据库全备到硬盘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[oracle@centos7 scripts]$
cat
rman_backup.sh
source
/home/oracle/
.bash_profile
rman target / log=
/home/oracle/backup/backupall_rman
.log<<EOF
run
{
allocate channel ch1 device
type
disk;
#分配通道
allocate channel ch2 device
type
disk;
sql
'alter system archive log current'
;
#归档当前日志
backup database
format
'/home/oracle/backup/db_%d_%T_%U'
;
#备份数据文件
sql
'alter system archive log current'
;
backup archivelog all
format
'/home/oracle/backup/arch_%t_%s'
delete all input;
#备份归档文件
backup
format
'/home/oracle/backup/con_%s_%p'
current controlfile;
#备份控制文件
crosscheck backup;
crosscheck archivelog all;
delete noprompt expired backup;
delete noprompt obsolete;
delete noprompt backup of database completed before
'sysdate -15'
;
#删除15天之前的数据库备份集
delete noprompt archivelog all;
delete noprompt backup of archivelog all completed before
'sysdate -15'
;
#删除15天之前的归档备份集
release channel ch1;
release channel ch2;
}
EOF
|
2、增量备份脚本
0级增量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[oracle@centos7 scripts]$
cat
rman_backup_level0.sh
source
/home/oracle/
.bash_profile
rman target / log=
/home/oracle/backup/backupall_rman
.log<<EOF
run
{
allocate channel ch1 device
type
disk;
#分配通道
allocate channel ch2 device
type
disk;
sql
'alter system archive log current'
;
#归档当前日志
backup incremental level 0 database
format
'/home/oracle/backup/db_level0_%d_%T_%U'
;
#备份数据文件
sql
'alter system archive log current'
;
backup archivelog all
format
'/home/oracle/backup/arch_level0_%t_%s'
delete all input;
#备份归档文件
backup
format
'/home/oracle/backup/con_level0_%s_%p'
current controlfile;
#备份控制文件
crosscheck backup;
crosscheck archivelog all;
delete noprompt expired backup;
delete noprompt obsolete;
delete noprompt backup of database completed before
'sysdate -15'
;
#删除15天之前的数据库备份集
delete noprompt archivelog all;
delete noprompt backup of archivelog all completed before
'sysdate -15'
;
#删除15天之前的归档备份集
release channel ch1;
release channel ch2;
}
EOF
|
1级增量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[oracle@centos7 scripts]$
cat
rman_backup_level1.sh
source
/home/oracle/
.bash_profile
rman target / log=
/home/oracle/backup/backupall_rman
.log<<EOF
run
{
allocate channel ch1 device
type
disk;
#分配通道
allocate channel ch2 device
type
disk;
sql
'alter system archive log current'
;
#归档当前日志
backup incremental level 1 database
format
'/home/oracle/backup/db_level1_%d_%T_%U'
;
#备份数据文件
sql
'alter system archive log current'
;
backup archivelog all
format
'/home/oracle/backup/arch_level1_%t_%s'
delete all input;
#备份归档文件
backup
format
'/home/oracle/backup/con_level1_%s_%p'
current controlfile;
#备份控制文件
crosscheck backup;
crosscheck archivelog all;
delete noprompt expired backup;
delete noprompt obsolete;
delete noprompt backup of database completed before
'sysdate -15'
;
#删除15天之前的数据库备份集
delete noprompt archivelog all;
delete noprompt backup of archivelog all completed before
'sysdate -15'
;
#删除15天之前的归档备份集
release channel ch1;
release channel ch2;
}
EOF
|
注意:1级备份需要在0级备份的基础上执行。
3、支持全备和增量备份
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
[oracle@centos7 scripts]$
cat
db_back_rman.sh
##===========================================================
## db_bak_rman.sh
## created by Robinson
## 2017/12/15
## usage: db_bak_rman.sh <$ORACLE_SID> <$BACKUP_LEVEL>
## BACKUP_LEVEL:
## F: full backup
## 0: level 0
## 1: level 1
##============================================================
#!/bin/bash
# User specific environment and startup programs
if
[ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
ORACLE_SID=${1};
export
ORACLE_SID
RMAN_LEVEL=${2};
export
RMAN_LEVEL
TIMESTAMP=`
date
+%Y%m%d%H%M`;
export
TIMESTAMP
DATE=`
date
+%Y%m%d`;
export
DATE
RMAN_DIR=
/u02/database/
${ORACLE_SID}
/backup/rman
;
export
RMAN_DIR
RMAN_DATA=${RMAN_DIR}/${DATE};
export
RMAN_DATA
#RMAN_LOG=$RMAN_DATA/log; export RMAN_LOG
RMAN_LOG=
/u02/database/
${ORACLE_SID}
/backup/rman/log
export
RMAN_LOG
# Check rman level
#======================================================================
if
[
"$RMAN_LEVEL"
==
"F"
];
then
unset
INCR_LVL
BACKUP_TYPE=full
else
INCR_LVL=
"INCREMENTAL LEVEL ${RMAN_LEVEL}"
BACKUP_TYPE=lev${RMAN_LEVEL}
fi
RMAN_FILE=${RMAN_DATA}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP};
export
RMAN_FILE
SSH_LOG=${RMAN_LOG}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}.log;
export
SSH_LOG
MAXPIECESIZE=4G;
export
MAXPIECESIZE
#Check RMAN Backup Path
#=========================================================================
if
!
test
-d ${RMAN_DATA}
then
mkdir
-p ${RMAN_DATA}
fi
echo
"---------------------------------"
>>${SSH_LOG}
echo
" "
>>${SSH_LOG}
echo
"Rman Begin to Working ........."
>>${SSH_LOG}
echo
"Begin time at:"
`
date
` --`
date
+%Y%m%d%H%M` >>${SSH_LOG}
#Startup rman to backup
#=============================================================================
$ORACLE_HOME
/bin/rman
log=${RMAN_FILE}.log <<EOF
connect target /
run {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO
'${RMAN_FILE}_%F'
;
ALLOCATE CHANNEL
'ch1'
TYPE DISK maxpiecesize=${MAXPIECESIZE};
ALLOCATE CHANNEL
'ch2'
TYPE DISK maxpiecesize=${MAXPIECESIZE};
set
limit channel ch1 readrate=10240;
set
limit channel ch1 kbytes=4096000;
set
limit channel ch2 readrate=10240;
set
limit channel ch2 kbytes=4096000;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
BACKUP
#AS COMPRESSED BACKUPSET
${INCR_LVL}
DATABASE FORMAT
'${RMAN_FILE}_%U'
TAG
'${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}'
;
SQL
'ALTER SYSTEM ARCHIVE LOG CURRENT'
;
BACKUP ARCHIVELOG ALL FORMAT
'${RMAN_FILE}_arc_%U'
TAG
'${ORACLE_SID}_arc_${TIMESTAMP}'
DELETE INPUT;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL ch1;
RELEASE CHANNEL ch2;
}
sql
"alter database backup controlfile to ''${RMAN_DATA}/cntl_${BACKUP_TYPE}.bak''"
;
exit
;
EOF
RC=$?
cat
${RMAN_FILE}.log >>${SSH_LOG}
echo
"Rman Stop working @ time:"
`
date
` `
date
+%Y%m%d%H%M` >>${SSH_LOG}
echo
>>${SSH_LOG}
echo
"------------------------"
>>${SSH_LOG}
echo
"------ Disk Space ------"
>>${SSH_LOG}
df
-h >>${SSH_LOG}
echo
>>${SSH_LOG}
if
[ $RC -
ne
"0"
];
then
echo
"------ error ------"
>>${SSH_LOG}
else
echo
"------ no error found during RMAN backup peroid------"
>>${SSH_LOG}
rm
-rf ${RMAN_FILE}.log
fi
#Remove old backup than 3 days
#============================================================================
RMDIR=${RMAN_DIR}/`
/bin/date
+%Y%m%d -d
"3 days ago"
`;
export
RMDIR
echo
>>${SSH_LOG}
echo
-e
"------Remove old backup than 3 days ------\n"
>>${SSH_LOG}
if
test
-d ${RMDIR}
then
rm
-rf ${RMDIR}
RC=$?
fi
echo
>>${SSH_LOG}
if
[ $RC -
ne
"0"
];
then
echo
-e
"------ Remove old backup exception------ \n"
>>${SSH_LOG}
else
echo
-e
"------ no error found during remove old backup set peroid------ \n"
>>${SSH_LOG}
fi
exit
|
本文转自lq201151CTO博客,原文链接:http://blog.51cto.com/liuqun/2051172 ,如需转载请自行联系原作者