打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
rman备份脚本
ylzrx
>《学习》
2013.02.19
关注
rman备份脚本
2012-06-12 16:59:39
分类:
Oracle
点击(
此处
)折叠或打开
#
!
/
bin
/
bash
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
Usage
:
#
backup_rman_v1
.
1
.
sh
[
all
|
repeat
|
sync
]
#
all
:
list all backup
file
.
#
repeat
:
repeat level
-
1 increment backup
.
#
sync
:
sync backup
file
to
target
database
.
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
export ORACLE_HOME
=
/
u01
/
app
/
11
.
2
.
0
export ORACLE_SID
=
health
export LD_LIBRARY_PATH
=
$
{
ORACLE_HOME
}
/
lib
:
$
{
ORACLE_HOME
}
/
ctx
/
lib
export PATH
=
$
PATH
:
$
{
ORACLE_HOME
}
/
bin
#
export NLS_LANG
=
"American_america.zhs16gbk"
export NLS_LANG
=
"American_america.al32utf8"
export ORACLE_OWNER
=
oracle
export backup_dir
=
/
sda
/
backup
export log
=
/
sda
/
backup
/
log
rsync_dir
=
$
backup_dir
#
sync
dir
controlfile_dir
=
$
backup_dir
/
controlfile
username
=
oracle
#
target
OS
,
oracle user
password
=
go2north
#
target
oracle user password
target_host
=
61
.
158
.
131
.
94
today_backup
=
`
date
+
'%Y-%m-%d'
`
mail_to_admin
=
"zhaorupeng@yeah.net"
#
#
#
#
#
#
#
#
set display
color
#
#
#
#
#
#
#
#
#
white
=
$
(
echo
-
e
"\e[39;40m"
)
green
=
$
(
echo
-
e
"\e[36;40m"
)
red
=
$
(
echo
-
e
"\e[31;40m"
)
purple
=
$
(
echo
-
e
"\e[35;40m"
)
yellow
=
$
(
echo
-
e
"\e[33;40m"
)
blue
=
$
(
echo
-
e
"\e[34;40m"
)
#
#
#
#
#
#
#
#
color
set end
#
#
#
#
#
#
#
#
#
#
#
#
#
data
backup status
.
#
0
:
backup failed
.
#
2
:
default
#
9
:
success
backup_status
=
2
#
database status check
,
If it
's not turn on,the value is 0,or else 1
ora_stat=`ps -ef | grep -i 'ora_smon_
*
' |grep -v grep| wc -l`
#database mode check,If it'
s
archive
mode
,
that
value
is 1
,
or else 0
;
arch
=
`
ps
-
ef
|
grep
-
i
'ora_arc_*'
|
grep
-
v grep
|
wc
-
l`
function open_database
(
)
{
if
[
"$ora_stat"
=
0
]
;
then
cat
<
<
EOF
|
$ORACLE_HOME
/
bin
/
sqlplus
'/as sysdba'
shutdown immediate
;
startup
;
quit
;
EOF
backup_status
=
2
if
[
"$?"
=
1
]
;
then
echo
"database unable strtup!"
backup_status
=
0
exit 1
fi
fi
}
function open_archive_mode
(
)
{
if
[
"$arch"
=
0
]
;
then
#
if arch
=
1
,
nothing
,
because it was already on
archive
mode
echo
"****************open archive mode*************"
cat
<
<
EOF
|
$ORACLE_HOME
/
bin
/
sqlplus
'/as sysdba'
shutdown immediate
;
startup mount
;
alter database archivelog
;
alter database open
;
quit
;
EOF
fi
}
function return_initaliztion_mode
(
)
{
if
[
"$arch"
=
0
-
a
"$backup_status"
>
0
]
;
then
#
if arch
=
1
,
nothing
,
because initialization mode is
archive
mode
echo
"********* return initialization database mode**********"
cat
<
<
EOF
|
$ORACLE_HOME
/
bin
/
sqlplus
'/as sysdba'
shutdown immediate
;
startup mount
;
alter database noarchivelog
;
alter database open
;
quit
;
EOF
fi
if
[
"$?"
=
0
]
;
then
echo
"return initalization database successfully."
fi
echo
"************return initialization database mode *********"
;
}
function increment_backup_level_1
(
)
#
incremental level
-
1 backup
{
#
open_database
#
open_archive_mode
echo
"******** `date +'%Y%m%d'` Do level-1 increment backup....*********************"
2
>
&
1
;
cat
<
<
EOF
|
$ORACLE_HOME
/
bin
/
rman
target
/
|
tee $log
/
rman_increment_db_`date
+
'%y%m%d%H%M'
`
.
log
configure maxsetsize to 20g
;
configure controlfile autobackup on
;
configure controlfile autobackup format
for
device
type
disk to
'$controlfile_dir/%F'
;
run
{
allocate channel c01
type
disk
;
backup incremental level 1 database format
'$backup_dir/increment_db_%d_%s_%t_%p'
tag
=
"increment_db_`date +'%y%m%d%H%M'`"
;
release channel c01
;
}
configure controlfile autobackup off
;
crosscheck backup of database
;
crosscheck archivelog all
;
delete noprompt obsolete
;
delete noprompt expired backup
;
delete noprompt backup completed before
'sysdate-30'
;
delete noprompt archivelog until time
'sysdate-14'
;
EOF
if
[
"$?"
=
0
]
;
then
echo
"*******************level-1 backup completed!************************"
backup_status
=
9
else
echo
"*****************level-1 backup databae failed,please contact oracle dba*******"
backup_status
=
0
fi
return $backup_status
#
return_initaliztion_mode
}
function level_0_backup_database
(
)
{
#
open_database
#
open_archive_mode
echo
"************* Do level-0 backup ****************"
cat
<
<
EOF
|
$ORACLE_HOME
/
bin
/
rman
target
/
|
tee $log
/
rman_full_db_`date
+
'%y%m%d%H%M'
`
.
log
configure retention policy to redundancy 7
;
configure maxsetsize to 20g
;
configure controlfile autobackup on
;
configure controlfile autobackup format
for
device
type
disk to
'$controlfile_dir/%F'
;
crosscheck backup of database
;
crosscheck archivelog all
;
delete noprompt obsolete
;
delete noprompt expired backup
;
delete noprompt backup completed before
'sysdate-7'
;
delete noprompt archivelog until time
'sysdate-7'
;
run
{
allocate channel c1
type
disk
;
backup incremental level 0 database format
'$backup_dir/full_db_%d_%s_%t_%p'
tag
=
"full_db_`date +'%y%m%d%H%M'`"
;
release channel c1
;
}
configure controlfile autobackup off
;
quit
;
EOF
if
[
"$?"
=
0
]
;
then
echo
"*******************level-0 backup completed!************************"
backup_status
=
9
else
echo
"******************level-0 backup databae failed,please contact oracle dba*******"
backup_status
=
0
fi
return $backup_status
#
return_initaliztion_mode
}
function repeat_increment_backup
(
)
{
if
[
"$#"
=
0
]
;
then
exit 0
else
if
[
"$1"
=
"repeat"
]
;
then
echo
"************do database increment backup again**************"
increment_backup_level_1 $ORACLE_HOME $log $backup_dir
echo
"************repeat increment backup completed!**************"
else
echo
"command error,please use parameter 'repeat'"
exit 0
fi
fi
}
#
sync
target
database backup files
#
function sync
(
)
{
ping $target_host
-
c 1
>
/
dev
/
null
#
test network
link
#
if
[
$
?
!
=
0
]
;
then
echo
"sync host:$red $target_host $white link failed!,please check network."
exit 1
fi
if
[
-
f
/
usr
/
bin
/
rsync
]
;
then
#
check resync command
#
cat
<
<
EOF
>
sync
#
!
/
usr
/
bin
/
expect
spawn
/
usr
/
bin
/
rsync
-
avzu $rsync_dir
/
$username
@
$
target_host
:
$
rsync_dir
expect
"password:"
send
"$password\n"
;
send
"quit\n"
;
interact
EOF
echo
"********copy backup files to target database********"
if
[
-
f sync
-
a
-
f
/
usr
/
bin
/
expect
]
;
then
chmod
+
x sync
.
/
sync
rm
-
rf
.
/
sync
#
list sync files
backup_file
=
`
ls
-
ltR
-
-
full
-
time $backup_dir
/
|
egrep
-
i
"increment_|c-"
|
grep
-
i
$today_backup
|
awk
'{print $6 " " substr($7,1,8) " " $9}'
`
echo
"sync files:"
echo
"$blue"
j
=
0
for
i
in $backup_file
do
(
(
j
+
+
)
)
a
[
$
j
]
=
$
i
if
[
$j
=
3
]
;
then
echo
"${a[`expr $j - 2`]} ${a[`expr $j - 1`]} ${a[$j]}"
j
=
0
fi
done
echo
"$white"
echo
" transtion has succeed.please check the backup files on target database."
exit 0
else
echo
"command expect not found, please install Tcl/expect"
exit 1
fi
else
echo
"command rsync not found,please install!"
exit 1
fi
}
if
[
-
f $log
/
autobak_`date
+
'%Y%m%d'
`
.
log
]
;
then
rm
-
rf $log
/
autobak_`date
+
'%Y%m%d'
`
.
log
fi
(
#
#
#
#
#
backup level
#
#
#
#
#
level_0_backup_status
=
`
find $backup_dir
/
-
name
'full_db_*'
|
grep
-
i
full_db
|
grep
-
v grep
|
wc
-
l` 2
>
&
1
level_1_backup_status
=
`
ls
-
l
-
-
full
-
time $backup_dir
/
|
grep
-
i
'increment_db_*'
|
grep
-
i
$today_backup
|
grep
-
v grep
|
wc
-
l` 2
>
&
1
#
Always perform 0 backup
level_0_backup_status
=
0
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
if
[
$level_0_backup_status
=
0
-
a
$backup_status
=
2
]
;
then
level_0_backup_database
backup_status
=
$
?
fi
if
[
$level_1_backup_status
=
0
-
a
$backup_status
=
2
]
;
then
increment_backup_level_1
backup_status
=
$
?
fi
#
#
#
#
#
backup level end
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
Today
's database backup information##########
# check today'
s
backup status
#
check_backup
=
`
ls
-
l
-
-
full
-
time $backup_dir
/
|
egrep
-
i
"increment_db_|full_db_"
|
awk
'{print $6}'
|
grep
-
i
$today_backup
|
wc
-
l`
#
check today
's controlfile backup information #
control_file=`ls -lt --full-time $controlfile_dir/ | grep -i "c-*" | grep -i $today_backup | awk '
{
print $6
" "
substr
(
$
7
,
1
,
8
)
" "
$9
}
'`
# check today'
s
increment backup information
#
backup_file_info
=
`
ls
-
lt
-
-
full
-
time $backup_dir
/
|
egrep
-
i
"increment_db_|full_db_"
|
grep
-
i
$today_backup
|
awk
'{print $6 " " substr($7,1,8) " " $9}'
`
log_file_info
=
`
ls
-
lt
-
-
full
-
time $log
/
|
egrep
-
i
"increment_db_|full_db_"
|
grep
-
i
$today_backup
|
awk
'{print $6 " " substr($7,1,8) " " $9}'
`
if
[
"$1"
=
"all"
]
;
then
backup_file_info
=
`
ls
-
lt
-
-
full
-
time $backup_dir
/
|
egrep
-
i
"increment_db_|full_db"
|
awk
'{print $6 " " substr($7,1,8) " " $9}'
`
control_file
=
`
ls
-
lt
-
-
full
-
time $controlfile_dir
/
|
grep
-
i
"c-*"
|
awk
'{print $6 " " substr($7,1,8) " " $9}'
`
fi
#
print today
's backup information including controlfile and log information #
if [ $check_backup -ge 0 ]; then
if [ "$1" = "repeat" ] ; then
repeat_increment_backup $1
else
echo " ############Today'
s
database backup information
#
#
#
#
#
#
#
#
#
#
"
if [ "
$
1
" = "
all
" ]; then
today_backup=`ls -l --full-time $backup_dir/ | grep -i full_db_* | awk '{print $6}'`
echo "List date $purple $
{
today_backup
[
0
]
}
$white level
-
0 backup database after
file
information
"
else
echo "Date $purple $today_backup $white database backup is completed
.
"
fi
echo "backup
file
directory
:
$backup_dir
"
echo "backup
file
information
:
$green
"
echo "
"
j=0
for i in $backup_file_info
do
((j++))
a[$j]=$i
if [ $j = 3 ]; then
echo "
$
{
a
[
`
expr $j
-
2`
]
}
$
{
a
[
`
expr $j
-
1`
]
}
$backup_dir
/
$
{
a
[
$
j
]
}
"
j=0
fi
done
echo "
$
white
"
echo "Controlfile information
:
$
yellow
"
echo "
"
j=0
for p in $control_file;do
((j++))
a[$j]=$p
if [ $j = 3 ] ; then
echo "
$
{
a
[
`
expr $j
-
2`
]
}
$
{
a
[
`
expr $j
-
1`
]
}
$controlfile_dir
/
$
{
a
[
$
j
]
}
"
j=0
fi
done
echo "
$
white
"
echo "log information
:
$
blue
"
echo "
"
j=0
for p in $log_file_info;do
((j++))
a[$j]=$p
if [ $j = 3 ] ; then
echo "
$
{
a
[
`
expr $j
-
2`
]
}
$
{
a
[
`
expr $j
-
1`
]
}
$log
/
$
{
a
[
$
j
]
}
"
j=0
fi
done
echo "
$
white
"
echo "If you want increment backup database again
,
please use \
"repeat\" parameter"
echo
" ############Today database backup information the end ########## "
fi
fi
#
end print backup information
#
#
copy
backup
file
#
#
if
[
"$1"
=
"sync"
]
;
then
#
backup_status
=
9
#
fi
#
if
[
"$backup_status"
=
9
]
;
then
#
sync
#
else
#
echo
"Today's Backup file is synced. please check whether it's in the target database."
#
echo
"If you want to sync again,please use \"sync\" parameter."
#
exit 0
#
fi
echo
"If you want to view all backup information,Please use \"all\" parameter."
)
|
tee
-
a
$log
/
autobak_`date
+
'%Y%m%d'
`
.
log
mail
-
s
"`date +'%Y%m%d'` database backup information"
$mail_to_admin
<
$log
/
autobak_`date
+
'%Y%m%d'
`
.
log
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
【热】
打开小程序,算一算2024你的财运
黑牛的博客: rman备份、配置相关技术操作
rman 总结篇
OracleRMAN的备份与恢复命令详解(一)
ORACLE RMAN备份的脚本配置
RMAN 系列(四) ---- RMAN 备份 5
rman恢复方案和oracle异机恢复
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×