2009年5月12日星期二

Unix Linx 平台 Oracle 自动备份 指南 crontab

一、把文档末尾的脚本保存为”oracle_auto_exp.sh”文件。

二、把文件上传至服务器,比如/home/oracle

三、用oracle用户登陆unix/linux系统
a) 设置文件的执行属性:chmod 777 /home/oracle/oracle_auto_exp.sh
b) 建立一个autoback的目录:#mkdir /home/oracle/autoback
c) 用vi命令修改oracle_auto_exp.sh里面的相关参数,注释里面有详细说明。
d) 修改脚本后保存;
e) 手工执行一次/home/oracle/oracle_auto_exp.sh,看是否在/home/oracle/autoback里面备份成功了。详细的信息可以看这个目录里面生成的文字。如果执行成功,说明备份脚本正确无误。

四、建立一个oracle用户的每天2点执行备份脚本的任务
a) 确认是用oracle用户登陆系统;执行如下命令:
b) #crontab –e oracle
c) 在编辑界面输入如下任务参数:
d) 0 2 * * * /home/oracle/oracle_auto_exp.sh
e) 这个界面就是vi界面,注意前面五个标志中间必须空格。保存退出。
f) 如果执行crontab –e oracle时报错,那说明oracle用户还没有被允许建立cron任务;
g) 用su – root切换到root用户,在/var/adm/cron/cron.allow文件中增加oracle用户名“oralce”。如果不存在/var/adm/cron/cron.allow,就建立这个文件。
h) 确保/var/adm/cron/cron.deny中没有oracle字样
i) Su – oracle 切换回oracle用户,重复执行b\c\d\e这几个步骤。

五、可以先把cron时间设置为当前时间5分钟以后的时间,看10分钟后是否备份成功。考虑备份本身也要耗用时间,可以稍微等一个比较长的时间去查看备份目录。


脚本内容:

#!/bin/bash
#Oracle环境参数,根据实际更改
export ORACLE_HOME=/oracle/product/10g/db_1
export ORACLE_BASE=/oracle
export ORACLE_SID=ncdb
PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:$ORACLE_HOME/bin:$PATH:.:
export PATH

#设置shell语言编码参数,必须和Oracle所用的一致
#确认方法,用oracle用户登陆操作系统;
#运行sqlplus,执行 select * from v$nls_parameters where parameter='NLS_CHARACTERSET';语句
#sqlplus /nolog
#conn ncdb/ncdb as sysdba
#> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
#结果所示的编码,替换下面的ZHS16GBK
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

#数据备份的路径
#mkdir /home/oracle/autoback
export EXPORT_HOME=/home/oracle/autoback
#EXP导出所用的Oracle用户名密码,必须是NC所用的用户名,根据实际更改
export ORACLEUSER=ncXXX
export ORACLEPASSWD=ncXXX
export SPLIT_SIZE=10000000
#导出文件面加上日期
export TODAY=`date +%Y%m%d%H%M`
export LOG=$ORACLEUSER-$TODAY.log
export START_TIME=`date`
export EXP_FILE=$EXPORT_HOME/$ORACLEUSER-$TODAY.dmp.gz

cd $EXPORT_HOME

#删除老管道
rm -f once_compress_pipe
#建立压缩管道
mknod once_compress_pipe p
#设置权限
chmod 660 once_compress_pipe
#压缩命令
nohup gzip <> $EXP_FILE &
#导出数据
exp $ORACLEUSER/$ORACLEPASSWD FILE=once_compress_pipe buffer=10485760 RECORDLENGTH=65535 direct=y log=$EXPORT_HOME/$LOG
echo 'Starting at ' $START_TIME '\n' >> $EXPORT_HOME/$LOG
echo 'Ending at ' `date` '\n' >> $EXPORT_HOME/$LOG
#删除管道
rm -f once_compress_pipe

自己试验通过没有问题。不完善的地方,欢迎拍砖。

没有评论:

发表评论