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: 文件操作无效
- 双击 .bat文件,测试脚本
- 添加定时任务,选择脚本即可。 https://blog.csdn.net/qq1049/article/details/78676504