利用python定时备份数据库并上传到ftp,代码:
import os;
import time;
import tarfile;
import shutil;
import ftplib;
import datetime
dumpdir = 'D:/oraclebak/';#oracle dmp的存储路径
tardir = 'D:/dumptar/'
dbList = ('user1','user2','user3');#oralce用户
ftpdir = '/ftp/dump/';#ftp存储路径
##循环执行oracle备份命令
for dbname in dbList:
command = "expdp userid='sys/syshaha@localhost/orcl as sysdba' \
directory=DUMP_DIR dumpfile=%s.dmp,logfile=%s.log schemas=%s" %(dbname,dbname,dbname);
os.system(command);
tar_file = time.strftime('%Y-%m-%d_%H-%M-%S')+'.tar.gz';#创建tar文件
tar = tarfile.open(tardir+tar_file,'w:gz');
##循环将dmp文件压缩到tar文件,然后删除dmp文件
for root,dir,files in os.walk(dumpdir):
for file in files:
fullpath = os.path.join(root,file);
tar.add(fullpath,arcname=file);
if os.path.isfile(fullpath):
os.remove(fullpath);
elif os.path.isdir(fullpath):
shutil.rmtree(fullpath,True);
tar.close();
## 上传到ftp
ftp = ftplib.FTP();
ftp.connect('192.168.10.6','21');
ftp.login('dump','dumphaha');
#根据月份创建目录
monthdir = time.strftime('%Y%m');
try:
ftp.cwd(ftpdir+monthdir);
except ftplib.error_perm:
ftp.mkd(ftpdir+monthdir);
ftp.cwd(ftpdir+monthdir);
f = open(tardir+tar_file,'rb');
#print tar_file
ftp.storbinary('STOR '+tar_file,f);
f.close();
##删除上一月份的备份文件,以减少ftp存储空间
lastmonthdir = '';
lastmonth = datetime.date.today().month-1
if lastmonth<10:
lastmonthdir = str(datetime.date.today().year)+'0'+str(lastmonth);
elif lastmonth == 0:
lastmonthdir = str(datetime.date.today().year-1)+ '12';
else:
lastmonthdir = str(datetime.date.today().year)+ str(lastmonth);
#print lastmonthdir;
try:
ftp.cwd(ftpdir+ lastmonthdir);
for lastfile in ftp.nlst():
try:
#print lashfile
ftp.delete(lastfile);
except Exception,e:
ftp.rmd(ftpdir+lastmonthdir);
print e;
#ftp.rmd(lastfile);
ftp.rmd(ftpdir+ lastmonthdir);
except ftplib.error_perm,e:
print e;
ftp.quit();
os.remove(tardir+tar_file);
window下定制执行python
将以上代码保存为.py文件,然后设置window任务计划程序
设置执行程序