设置oracle11g定时自动备份,为啥没有备份?请大神们帮我看看为啥!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设置oracle11g定时自动备份,为啥没有备份?请大神们帮我看看为啥!相关的知识,希望对你有一定的参考价值。
我写了个命令文件backup-expdp.bat,文件内容如下:
expdp xyyh/xyyh123@orcl directory=dmp_dir dumpfile=nstc_dpms_%date:~0,10%.dmp logfile=nstc_dpms_%date:~0,10%.log schemas=xyyh
放在D:\backup_N6目录下,然后在系统里设置任务计划程序,去该目录下查看后,发现数据库没有自动备份,“任务计划程序”窗口中该任务的上次运行结果显示为:0x1。若我直接运行该backup-expdp.bat文件,弹出窗口会报错:
ORA-39002:操作无效
ORA-39070:无法打开日志文件
ORA-39088:文件名不能包含路径说明
———————————————————————————————————————
请大神们帮我看看为啥!
好像要把时间参数写到文件名里,挺繁琐的
我空间有个日志
http://hi.baidu.com/badkano/item/fc61766ff12c0e156895e6c0
你看能用到你这里不,也是设置日期为文件名的
-------------------补充---------------
测试了一下,这个可用
你还有问题,应该是你备份的语句有毛病,看看你的路径是否都建立了
这个你只需要改最后一行就行了,我是在我本机测试的,用的路径也都是我本地的,oracle也用的我本地的
regedit /e "%temp%\\bak.reg" "HKEY_CURRENT_USER\\Control Panel\\International"
>01.reg echo Windows Registry Editor Version 5.00
>>01.reg echo.
>>01.reg echo [HKEY_CURRENT_USER\\Control Panel\\International]
>>01.reg echo "sShortDate"="yyyy-MM-dd"
>>01.reg echo "sDate"="-"
>>01.reg echo "sTimeFormat"="HH:mm:ss"
regedit /s 01.reg&del 01.reg
>tmp.vbs echo Wscript.echo FormatDateTime (DateAdd("d", -1 ,Date),2)
for /f "delims=" %%i in (\'cscript.exe //nologo tmp.vbs\') do set aDate=%%i&del tmp.vbs
set fn=%adate:~0,4%%adate:~5,2%%adate:~8,2%
exp 用户名/密码@sytv file=f:/bak/nstc_dpms_%fn%.dmp log=f:/log/nstc_dpms_%fn%.log owner=\'scott\' 参考技术A %date:~0,10% 这个应该有问题,你要看你机器上的时间格式,有的机器上用这个获取的时间格式是2013/03/04,有的是2013-03-04 ,第一种是成了目录格式,前几天刚遇到的这个追问
我电脑上的日期格式是2013年3月4日,我把日期格式去掉了,还是报错了,
ORA-39002: 操作无效
ORA-39070: 无法打开日志文件。
ORA-29283: 文件操作无效
ORA-06512: 在 "SYS.UTL_FILE", line 536
ORA-29283: 文件操作无效
你把echo打开,看看中间个变量的值,是否有不合适的?文件路径不能有空格的
参考技术B 我曾爱过的所有遗迹浮向深湖底有一星期之久。
一封惟一的短信。
和它们那朦胧的塔影。
房间——一片混乱。那些还未卖出去的东西,
果提当一勇。哈哈本回答被提问者采纳
mysql每天定时自动全库备份灾备docker
马上也过年了,希望大家的服务器不要出问题,也希望大家的数据库都按时备份不要出差错,过年了,没啥能送大家的,给大家分享一下怎么定时备份数据库,mysql和mariadb是一样的。
之前没有意识,在ECS上自己安装的mysql没有自动备份,偶然发现,服务器被黑客入侵,把我的mysql数据库全部删除后,勒索我要比特币,当时也很无语,因为完全么有备份,也没有开启日志,所以只能认倒霉了,然后就研究了怎么进行定时备份,有的是docker环境下运行的,有的是宿主机直接安装。
1.创建几个目录
data 存放备份数据,logs存放每天的日志
注意:目录可以自己随意改,但是一定要修改脚本里的路劲
一.直接安装,非docker模式
2.然后编写脚本 vi backup.sh
#!/bin/bash
#备份目录
BACKUP_ROOT=/data/mysqlbak
BACKUP_FILEDIR=$BACKUP_ROOT/data
#当前日期
DATE=$(date +%Y%m%d)
#查询所有数据库
DATABASES=$(mysql -uroot -p'zgmsoft$123' -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql")
#循环数据库进行备份
for db in $DATABASES
do
echo
# 过滤有些不需要备份的数据库
if [ "${db}" = "move_oct09" ] || [ "${db}" = "wisdomtourism" ];then
echo "jump over ${db}"
else
echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN----------
mysqldump -uroot -p'zgmsoft$123' --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz
echo ${db}
echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE----------
fi
done
echo "done"
如果需要进行灾备,就是把备份文件复制到其他的服务器上,就这样写,利用scp远程复制,可能服务器需要安装一下expect
#!/bin/bash
#备份目录
BACKUP_ROOT=/data/mysqlbak
BACKUP_FILEDIR=$BACKUP_ROOT/data
#当前日期
DATE=$(date +%Y%m%d)
#查询所有数据库
DATABASES=$(mysql -uroot -p'zgmsoft$123' -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql")
#循环数据库进行备份
for db in $DATABASES
do
echo
if [ "${db}" = "move_oct09" ] || [ "${db}" = "wisdomtourism" ];then
echo "jump over ${db}"
else
echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN----------
mysqldump -uroot -p'zgmsoft$123' --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz
echo ${db}
echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE----------
echo
echo ----------scp 226 begin----------
expect -c "
spawn scp -r /data/mysqlbak/data/${db}_$DATE.sql.gz root@你的服务器地址:/data/mysqlbak/118mysql/
expect {
\"*assword\" {set timeout 300; send \"你的服务器密码\r\"; exp_continue;}
\"yes/no\" {send \"yes\r\";}
}
expect eof"
echo ----------scp 226 end---------
fi
done
echo "done"
二、docker 环境
2.创建脚本文件 vi backup.sh
注意一点:docker exec -i ,这里不能加t,因为么有tty输入,所以会报错 the input device is not a TTY
如果需要进行灾备,就是把备份文件复制到其他的服务器上,就这样写,利用scp远程复制,可能服务器需要安装一下expect
#!/bin/bash
#备份目录
BACKUP_ROOT=/data/mysqlbak
BACKUP_FILEDIR=$BACKUP_ROOT/data
#当前日期
DATE=$(date +%Y%m%d)
#查询所有数据库
DATABASES=$(docker exec -i root_mysql_1_8c6548532b81 mysql -uroot -pyasaka.00 -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql")
#循环数据库进行备份
for db in $DATABASES
do
echo
if [[ "${db}" =~ "+" ]] || [[ "${db}" =~ "|" ]];then
echo "jump over ${db}"
else
echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN----------
docker exec -i root_mysql_1_8c6548532b81 mysqldump -uroot -pyasaka.00 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz
echo ${db}
echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE----------
echo
echo ----------scp 109.5 begin----------
expect -c "
spawn scp -P 22 -r /data/mysqlbak/data/${db}_$DATE.sql.gz root@你的服务器地址:/data/mysqlbak/aiprose/
expect {
\"*assword\" {set timeout 300; send \"你的服务器密码\r\"; exp_continue;}
\"yes/no\" {send \"yes\r\";}
}
expect eof"
echo ----------scp 109.5 end---------
fi
done
echo "done"
3.编写清除旧数据脚本 backup_clean.sh
#!/bin/bash
echo ----------CLEAN BEGIN----------
find /data/mysqlbak/data -mtime +7 -name "*.gz" -exec rm -rf {} \;
echo ----------CLEAN COMPLETE---------
4.设置定时任务
脚本编写好了,需要加到系统的定时任务里,负责需要手动执行
查看定时任务
crontab -l
修改定时任务
crontab -e
修改定时任务的时候增加如下,记得修改为自己的脚本路径,下面是凌晨2点自动清理数据,凌晨3点自动备份数据
00 2 * * * /data/mysqlbak/mysql_back/backup_clean.sh > /data/mysqlbak/logs/backup_full_clean.log 2>&1
00 3 * * * /data/mysqlbak/mysql_back/aiprose.sh > /data/mysqlbak/logs/backup.log 2>&1
以上是关于设置oracle11g定时自动备份,为啥没有备份?请大神们帮我看看为啥!的主要内容,如果未能解决你的问题,请参考以下文章