Linux下Oracle备份与恢复
1. 设置全局变量
使用root用户进入系统,输入命令:“vi etc/profile”,将以下命令加入文件底部,输入“:wq”保存退出
eumask 022
export ORACLE_BASE=/alidata/oracle/app
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
2. 编写脚本
新建一个文件,命名为: backup.sh,内容如下:
if [ -f ~/.bash_profile ];then
. ~/.bash_profile
fi
export NLS_LANG=american_america.ZHS16GBK
d=`date +%Y%m%d`
bpath=/alidata/oracle/backup/databaseoracle 新建用户
mkdir $bpath
expuserid=username/password file=$bpath/xxx.dmp owner=xuezhishang log=$bpath/xxx.log
解释1:如果要使用日期作为名称,可以使用内置时间变量,示例:“`date +%Y%m%d`.dmp”“`date +%Y%m%d`.log”,这里注意不要使用自定义变量“$d.dmp”,可能会出现“参数过多或多出一个空格”等情况(本机测试如此,其他不一定,要尝试下)。
解释2:” export NLS_LANG=american_america.ZHS16GBK” 这条命令主要是应对在exp时会出现系统字符环境与数据库的字符环境不一致导致一些错误提醒,但资料显示改错误也不影响imp,但未尝试。
解释3:“if 至 fi”这段命令在手动执行 “#./backup.sh”是不需要的,但在加入到linux 系统的定时任务时就必须要加上,不然无法执行(本人就是卡在这里了好久)。
3. 用chmod命令把这个sh标记为可执行
chmod +x backup.sh
4. oracle用户的定时任务
[oracle@localhost backup]$ crontab -e
303 * * */home/oracle/backup/backup.sh
特别注意:
这样就添加了一个计划,在每天的13点42分运行/home/oracle/backup/backup.sh
注意:可能会出现任务不执行的情况,对这种情况需要排查,如下
a. 服务是否启动
b. 语句拷贝粘贴的过程中出现了不合法的字符
你可以讲上述语句注释掉,然后重新手工输入一次,也许就解决了。
c. 定时任务命令格式不对
输入命令:cat etc/crontab,如下:其中星号之间是2个空格,这点特别注意。本人就是这个问题导致不能执行。
5. 压缩备份删除备份与定时任务
压缩备份、删除备份
本步骤可以在放在backup.sh文件里面,本人这里由于系统环境问题只能单独新建一个文件zipbackup.sh
文件内容如下:
bpath=/alidata/oracle/backup/database
zip -r $bpath/`date +%Y%m%d`.zip $bpath/xxx.dmp $bpath/xxx.log>> $bpath/logbbs.log 2>&1
# rm -f $bpath/`date -d -2day +%Y%m%d`.zip
find $bpath  -type f -name "*.zip" -mtime +1 -exec rm -rf {} \;
解释:
a. zip行:压缩先前备份生成的文件
b. find行:删除前一天的备份压缩文件,天数可以自行调整,具体描述如下:
find:linux的查命令,用户查指定条件的文件
$bpath:想要进行清理的目录
-mtime:标准语句写法
+1查1天前的文件,这里用数字代表天数
“*.zip“:希望查的数据类型,”*.jpg”表示查扩展名为jpg的所有文件,”*”表示查所有文件
-exec:固定写法
rm -rf:强制删除文件,包括目录
{} \; :固定写法,一对大括号+空格+\+;
定时任务
    标记为可执行文件
chmod +x zipbackup.sh
   
    增加定时任务,要比备份的时间晚30分钟
[oracle@localhost backup]$ crontab -e
503 * * */home/oracle/backup/zipbackup.sh
6. 同步到指定目录供下载与定时任务
同步到指定目录供下载
这里使用下FTP工具:FileZilla。如何安装服务端vsftpd,可参考《Linux下安装FTP.docx》
这里面主要描述同步指定目录的内容:
新建供下载的目录,/alidata/backup/database将备份文件同步到该目录下,只能同步最新的备份文件,同步前删除文件夹内容所有的内容。
在root用户下操作。
新建shell文件,命令:vi cpbackup.sh, 内容如下:
rm -rf /home/backup/database/*.*
cp -r /home/oracle/database/`date +%Y%m%d`.zip /home/backup/database/
解释:“/home/oracle/database/”为备份目录,“/home/backup/database/”同步供下载目录
定时任务
标记为可执行文件
chmod +x cpbackup.sh
   
        增加定时任务
[oracle@localhost backup]$ crontab -e
50 3 * * */home/oracle/backup/cpbackup.sh