- !/bin/bash
# HISTORY
# may 5, 2010: return only one ip_address
export JOBNAME=”$0”
export JOB=basename $JOBNAME
echo $JOB
OS=uname
case $OS in
Linux) IP=/sbin/ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|tail -1
;;
FreeBSD|OpenBSD) IP=ifconfig | grep -E 'inet.[0-9]' | grep -v '127.0.0.1' | awk '{ print $2}'
;;
SunOS) IP=ifconfig -a | grep inet | grep -v '127.0.0.1' | awk '{ print $2} '
;;
*) IP=”Unknown”;;
esac
echo “$IP” - set env
export DESTDIR=/opt/rmanbak
mkdir -p $DESTDIR/date +%Y%m%d
export BACKUPDIR=$DESTDIR/date +%Y%m%d
export LOGFILE=$LOGDIR/rmandbdate +%Y%m%d
.log
recovery manager 是一种备份、还原、恢复的数据库工具。
能够备份整个数据库,如表空间、数据文件、控制文件、归档文件、及spfile参数文件,也允许进行增量备份。
rman备份管理:
使用方式:本机、远程
连接方式:
找到rman命令—系统自带rman
which rman
/opt/oracle/product/11.2.0/db_1/bin/rman
rman target/ 连接本机默认实例 echo $ORACLE_SID
当前连接方式是以dba的方式去连=rman target sys/oracle dba用户认证机制
或者可以直接指定实例:
export ORACLE_SID=zhaixiaona
数据库为归档模式,数据库至少在mount,open阶段;
select name,dbid,open_mode from v$database;
backup database ; 基于块级别的备份:自动备份控制文件、参数文件、和所有数据文件,不会备份联机日志文件;
copy 备份:物理备份 源文件跟备份后的文件是一样大的,
backup 逻辑物理备份:基于块级别的备份,已经使用过的块,热点块,比源文件小,一般都使用backup指令备份;
全库备份:
backup database
backup spfile 备份参数文件参数文件pfile不能备份,只能备份二进制文件spfile;
backup current controlfile 备份控制文件,备份当前正在使用的控制文件;
backup tablespace users; 备份表空间
backup archivelog all; 备份所有归档日志;
backup datafile 2,4; 备份多个数据文件;
backup tablespace users,system;备份多个表空间;
backup full database plus archivelog; 全库备份包括归档日志;
若想不备份某一个表空间;
例如 一共10个数据文件,不备份5
backup database skip read only ; 不备份只读;
alter tablespace users read only;
backup database skip readonly; 跳过只读的,不备份只读的;
backup database skip offline;跳过脱机的不备份脱机的;
默认备份后都放在闪回区
指定备份路径
backup database format ‘/opt/backup/dbfull_%U’;
若不指定路径则
show parameter db_rec;
显示闪回文件的路径;
备份文件可以自定义各种各样的格式:如下:
%c备份片的拷贝数:
%d数据库名称;
%D位于该月中的第几天(DD)
%M位于该月中的第几月(MM)
%F一个基于DBID唯一的名称,这个格式形式为c-IIIIIIIIIIIIII-YYYY-MM-DD-QQ
其中IIIIIIIIIIIIIII为该数据库的DBID,YYYYMMDD 为日期,QQ是一个1-256的序列;
%n数据库名称,向右填补到最大的八个字符;
%u一个八个字符的名称代表备份集与创建时间;
%p该备份集的备份片号,从1开始创建的文件数;
%U名,代表%u%p%c
%s备份集的号
%t备份集的时间戳
%T年月日格式(YYYYMMDD)
所有指令都已放在run {}里面去运行;
run {… …}
run {backup database};
———————————————————————————————————————-
copy指令备份(用处不多)
copy datafile 1 to ‘/ …’;
copy
copy current controlfile to ‘/opt/back.ctl’;
copy datafile 4 to ‘/opt/db4.dbf’;
如何查看曾经做过的备份:
list backup;
list copy;
list backup of database;
list backup of
20 Full 1.03G DISK 00:00:33 11-AUG-15
BP Key: 20 Status: AVAILABLE (可用的) Compressed: NO (没有压缩的) Tag: TAG20150811T192538
Piece Name: /opt/oracle/fastrecovery_area/ZHAIXIAONA/backupset/2015_08_11/o1_mf_nnndf_TAG20150811T192538_bwmpxm8h.bkp
List of Datafiles in backup set 20
File LV Type Ckp SCN Ckp Time Name
—— — —— ————— ————- ——
1 Full 1330893 11-AUG-15 /opt/oracle/oradata/zhaixiaona/system01.dbf
2 Full 1330893 11-AUG-15 /opt/oracle/oradata/zhaixiaona/sysaux01.dbf
3 Full 1330893 11-AUG-15 /opt/oracle/oradata/zhaixiaona/undotbs01.dbf
4 Full 1330893 11-AUG-15 /opt/oracle/oradata/zhaixiaona/users01.dbf
5 Full 1330893 11-AUG-15 /opt/oracle/oradata/zhaixiaona/ceshi_001.dbf
rman 环境变量的配置,修改环境变量,run临时修改;
show all 查看所有环境变量;
CONFIGURE RETENTION POLICY TO REDUNDANCY 7;
表示定义的冗余度,表示备份集有7个;定义一个备份集保留多长时间7天后无效;
CONFIGURE BACKUP OPTIMIZATION ON;
对备份进行优化;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
默认备份文件放到磁盘,可以到磁盘,也可以到磁带;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
自动控制文件备份,为on,则自动备份控制文件,;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘%F’; # default
备份到哪个磁盘则加%F,适合控制文件备份;
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
控制文件并行度默认为1;与通道分配有关;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
在备份当中,每个备份片大小无限制;
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
加密备份;
CONFIGURE ENCRYPTION ALGORITHM ‘AES128’; # default
加密算法
CONFIGURE COMPRESSION ALGORITHM ‘BASIC’ AS OF RELEASE ‘DEFAULT’ OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
归档进行删除时规则,
CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘/opt/oracle/product/11.2.0/db_1/dbs/snapcf_zhaixiaona.f’; # default
控制文件快照,当把自动备份控制文件打开,则在这个目录下会生成备份的控制文件快照;
改变默认参数
CONFIGURE RETENTION POLICY TO REDUNDANCY 7; 改变要么基于冗余度,要么基于时间;
CONFIGURE RETENTION POLICY TO recovery of window 7days;默认保留7天;
CONFIGURE CONTROLFILE AUTOBACKUP ON; 控制文件自动备份,当数据库结构发生变化,有一个表空间建立,数据文件删除等,会自动备份控制文件;
测试建立一个表空间:
首先知道备份文件放在哪个目录:
ls /opt/oracle/flash_recover_area/zhaixiaona/autoback/。。。
list backup of controlfile;
run{
allocate channel a1 type disk;
allocate channel a2 type disk;
backup database ;
release channel a1;
release channel a2;
rman target / @/opt/a.bak 定义通道,进行备份;
删除备份,或者到期备份删掉;备份状态管理;
检查备份状态是有效还是无效:
crosscheck backup :expried 到期状态;
delete expried backup; 删除到期备份;输入y
delete nopromt expried backup ; 不提示y/n 自动删除到期备份;
delete nopromt obsolete; 大于冗余度7,则无提示自动删除;
改变备份集状态手工标记数据库备份为无效:
change backupset 50 unavailable;
——————————————————————————————————————————————————
安装后备份脚本
!/bin/bash
# HISTORY
# may 5, 2010: return only one ip_address
export JOBNAME=”$0”
export JOB=basename $JOBNAME
echo $JOB
OS=uname
case $OS in
Linux) IP=/sbin/ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|tail -1
;;
FreeBSD|OpenBSD) IP=ifconfig | grep -E 'inet.[0-9]' | grep -v '127.0.0.1' | awk '{ print $2}'
;;
SunOS) IP=ifconfig -a | grep inet | grep -v '127.0.0.1' | awk '{ print $2} '
;;
*) IP=”Unknown”;;
esac
echo “$IP”
set env
export ORACLE_SID=piliang
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/product/11.2.0/db_1
export NLS_LANG=”AMERICAN_AMERICA.zhs16gbk”
export NLS_DATE_FORMAT=”yyyy-mm-dd hh24:mi:ss”
export PATH=$PATH:$ORACLE_HOME/bin
export TOOLS=/home/oracle
export LOGDIR=$TOOLS/dbadmin/$ORACLE_SID/log
export DESTDIR=/opt/rmanbak
mkdir -p $DESTDIR/date +%Y%m%d
export BACKUPDIR=$DESTDIR/date +%Y%m%d
export LOGFILE=$LOGDIR/rmandbdate +%Y%m%d
.log
echo “——————————————-backup start——————————————-“>>$LOGFILE
date ‘+%Y%m%d %H:%M:%S.%N’>>$LOGFILE
$ORACLEHOME/bin/rman target / nocatalog <
CROSSCHECK BACKUPSET;
DELETE NOPROMPT OBSOLETE;
DELETE NOPROMPT EXPIRED BACKUP;
quit;
EOF
$ORACLE_HOME/bin/rman target / nocatalog msglog $LOGDIR/rman_dbdate +%Y%m%d
.log append<
CONFIGURE RETENTION POLICY TO REDUNDANCY 7;
show all;
run {
allocate channel node1 type disk;
set limit channel node1 kbytes = 5800000;
backup as compressed backupset full database format ‘$BACKUPDIR/full%d%T%s%p’ plus archivelog format ‘$BACKUPDIR/arch%d%T%s%p’ delete all input;
backup current controlfile format ‘$BACKUPDIR/ctl%d%T%s%p’ TAG “control.bak”;
release channel node1;
}
quit;
EOF
if [ $? -ne 0 ]; then
echo “date '+%H:%M:%S'
RMAN has failed, see $LOGFILE for details. Aborting..” | tee -a $LOGFILE
#./sendmail20.pl -s “date '+%H:%M:%S'
$ORACLESID $IP RMAN has failed, see $LOGFILE for details. Aborting..”
exit ${ERROR}
fi
echo “$JOB: date '+%H:%M:%S'
$ORACLE_SID $IP rman backup completed” | tee -a $LOGFILE
$ORACLE_HOME/bin/sqlplus /nolog >/dev/null <<_EOF
connect / as sysdba;
create pfile=’$BACKUPDIR/init$ORACLE_SID.ora’ from spfile;
exit
_EOF
cp $LOGDIR/rman_dbdate +%Y%m%d
.log $BACKUPDIR/
echo “———————————————backup end———————————————“>>$LOGFILE
date ‘+%Y%m%d %H:%M:%S.%N’>>$LOGFILE
du -sh $BACKUPDIR
————————————————————————————————————
拓展:
1、获取当前日期:
da=date "+%Y-%m-%d"
2、获取当前日期n小时后的日期,n小时前的日期
n=36 #任意数字
da1=date "+%Y-%m-%d"
#当前日期
da2=date "+%Y-%m-%d" -d "$da1 +$n hours"
#n小时后,n天后,hours换成days,n月后,hours换成months,n年后,hours换成years
da2=date "+%Y-%m-%d" -d "$da1 -$n hours"
#n小时前,n天前,hours换成days,n月后,hours换成months,n年前,hours换成years
3、获取任意指定日期n小时后的日期,n小时前的日期
n=36 #任意数字
da1=”2012-06-01”
da2=date "+%Y-%m-%d" -d "$da1 +$n hours"
#任意日期n小时后,n天后,hours换成days,n月后,hours换成months,n年后,hours换成years
da2=date "+%Y-%m-%d" -d "$da1 -$n hours"
#任意日期n小时前,n天前,hours换成days,n月后,hours换成months,n年前,hours换成years
4、获取任意两个日期之间相差的天数
da1=date +%s -d "2012-07-01"
da2=date +%s -d "2012-06-01"
((num=(da1-da2)/86400))
或者
expr ‘(‘ $(date +%s -d “2012-07-01”) - $(date +%s -d “2012-06-01”) ‘)’ / 86400
5、date命令时间转换,字符串时间和数字时间相互转换
将字符串日期转换成整型时间:
date “+%s” -d “2012-06-01 11:59:00”
将整型时间转换成字符串时间:
方法1:
date “+%Y-%m-%d %H-%M-%S” —date=”@1383146655”
方法2:
echo “1383146655” | awk ‘{T=strftime(“%F %T”,$1);print T}’
6、获取当前日期和时间:
datetime=date "+%Y-%m-%d %H:%M:%S"
———————————————————————————————————————————————————————-
catalog
一台电脑,实现备份多台电脑: