oracle数据库在linux和Windows环境下自动备份

1.Linux环境下:

相关: shell脚本 crontab定时 expdp导出/exp导出
准备:ssh连接工具 连接linux用户名和密码 oracle环境变量配置 数据库用户名和密码

  • 新建Oracle数据库备份目录``
    mkdir -p /backup/oracledata

  • 新建Oracle数据库备份脚本
    vi /backup/oracledata/ordatabak.sh

  • 备份脚本

# Oracle environment settings 
ORACLE_BASE=/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm;export ORACLE_TERM
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;export LD_LIBRARY_PATH
PATH=$ORACLE_HOME/bin:usr/local/bin:$PATH:/usr/sbin; export PATH
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/product/jlib; export CLASSPATH
# default backup_dir 备份路径
backup_dir=/backup/oracledata
 #备份此用户下的数据库
orowner=oracleuser
password=123456
 #获取系统当前日期时间
date=date +%Y_%m_%d  
 #设置删除10天之前的备份文件
days=10
#备份数据库文件名
DMP_FILE=$orowner"_"$date.dmp
#备份数据库日志名
LOG_FILE=$orowner"_"$date.log
#最后保存的Oracle数据库备份文件
ordatabak=$orowner"_"$date.tar.gz

# start expdp
echo 'start expdp'
# use default backup_dir 
#导出数据库expdp
expdp  $orowner/$password@orcl schemas=oracleuser  directory=DPDATA  dumpfile=$DMP_FILE  logfile=$LOG_FILE;
#导出数据库 exp 
exp $orowner/$password@1521 full=y ignore=y owner=$orowner  file=$DMP_FILE  log=$LOG_FILE 
#进入备份数据的目录
cd $backup_dir
 #压缩备份文件和日志文件
tar -zcvf $ordatabak  $DMP_FILE  $LOG_FILE
find $backup_dir/$orowner  -type f -name "*.log" -exec rm {} \; #删除备份文件
find $backup_dir/$orowner  -type f -name "*.dmp" -exec rm {} \; #删除日志文件
find $backup_dir/$orowner  -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \;  #删除5天前的备份
find $backup_dir -mtime +7 -name  $orowner"_*" -exec rm -f {} \;  #删除7天前的备份数据库和日志
  
  • 注意:

     1、用户名/密码 写自己用的即可;
     2、数据库环境变量不能配错,必须添加,否则crontab任务计划不能执行;
     3、切换至oracle用户,使用命令 $ cat  /home/oracle/.bash_profile  查看用户环境变量
     4、#管理员连接oracle
     		$ sqlplus /nolog 
     		SQL> conn 用户名/密码
        #创建导出文件的存放目录
     	  	 create directory dpdata as '/backup/oracledata';                            
     	#用于修改已创建的目录(请根据实际情况选择性执行)
     	 	 #create or replace directory dpdata  as '/home/oracle/dump';  
     	 #查看导出文件的存储位置
     		  select * from dba_directories where directory_name='DPDATA';    
     	 #对用户进行授权
     		  grant read,write on directory dpdata to 数据库用户;   
     5、需要注意的是,虽然可以远程建立目录、授权和查询,expdp只能在服务器端执行,在客户端执行会出现:       
     	【ORA-39002: 操作无效
     	ORA-39070: 无法打开日志文件。
     	ORA-29283: 文件操作无效
     	ORA-06512: 在 "SYS.UTL_FILE", line 475
     	ORA-29283: 文件操作无效】
     	directory=DPDATA  必须在账号密码的后面,如果放在其他位置 也会有以上报错
     	错误原因:(1)create directory  dpdata as '/backup/oracledata';后,物理磁盘上并没有真实存在这样的目录。
     			 (2)此种方式的解决方法:在物理磁盘上建立相应的目录。目录权限不够:
     					解决方法:root用户登陆
     					        # chmod  -R 777 /backup/oracledata
     					        # ls -la  /backup/oracledata         
    
  • 添加脚本执行权限

    chmod +x /backup/oracledata/ordatabak.sh

  • 在Oracle用户下添加定时任务

    su - oracle

    $ crontab -e
    30 2 * * * /backup/oracledata/ordatabak.sh #每天凌晨2点30分
    */20 * * * * /backup/oracledata/ordatabak.sh #每隔20分钟
    10 7 * * * /backup/oracledata/ordatabak.sh #每天7点10分
    20 8 * * * /backup/oracledata/ordatabak.sh #每天8点20分
    1 */3 * * * sh /backup/oracledata/ordatabak.sh #每3分钟1秒 执行一下脚本
    0 1 * * * /home/oracle/orcl_backup.sh > /tmp/expdp.log 2>&1 #每天凌晨1点执行sh脚本,并把日志输出到指定目录

  • 进入脚本所在目录,运行shell脚本测试
    $ sh orcl_backup.sh

  • 查看定时任务
    $ crontab -l

2.windows系统下:

相关: shell脚本 Windows系统 cmd
准备: 数据库用户名和密码 备份路径(F:\oracleback)

  • 备份脚本
@echo off
rem 备份文件存储路径
set dpdata=F:\oracleback

rem 设置备份的数据库名字
set backupfile=oracleuser_%date:~0,4%-%date:~5,2%-%date:~8,2%.dmp

rem 设置备份数据库日志名
set logfile=oracleuser_%date:~0,4%-%date:~5,2%-%date:~8,2%.log

rem 调用oracle的expdp命令导出用户数据
expdp oracleuser/oraclepwd@127.0.0.1/orcl schemas=oracleuser  directory=DPDATA  dumpfile=%backupfile%  logfile=%logfile%
rem exp  oracleuser/oraclepwd@127.0.0.1/orcl file=%dpdata%/%backupfile%  log=%dpdata%/%logfile% owner=oracleuser 

rem 导出数据备份目录和删除oracle数据库7天前的备份
forfiles /p " F:\oracleback" /s /m *.dmp /d -7 /c "cmd /c
del @file"
  • 注意:

    (1) dumpfile和logfile后面不能包含路径说明%dpdata%
    (2) 同样也会出现以下错误,需要给备份文件夹赋予权限,使oracle用户可以操作

		ORA-39002: 操作无效
    	ORA-39070: 无法打开日志文件。
    	ORA-29283: 文件操作无效
    	ORA-06512: 在 "SYS.UTL_FILE", line 475
    	ORA-29283: 文件操作无效
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值