oracle自动备份压缩程序
今天也没啥好写的,上班没时间看python,公司的网络不好,除了不能看网页,其他FTP上下传什么的都是好的,好象是有SYN攻击。为了查问题,随手写了个每5秒调一次google的程序,这里就不写了,太简单了。
把前几天做的自动数据库备份的程序贴出来,自己也好做个备忘,不过运行了几天发现有时运行时会有一些问题,FTP这部分常常在传完后死在那里不进行下一步操作,看来还要还要调试下,找出问题到底在哪一部分,这个问题很怪,不是次次都有问题,要查上几天了。
嗯,明天进公司,在代码里打点LOG出来,FTP这一部分逐行打LOG出来,分析下问题到底在哪里。
#-*- coding:gbk-*-
#code by HAWK.Li
#version 1.0
#2009-02-01
#想抄代码的同学可以抄,不过记得留个版权信息,也让我可以满足一把
import os
import time, sys
import traceback
import ftplib
reload(sys)
sys.setdefaultencoding('utf-8')
IFS="\\" #路径分割符,linux用"/" win32用"\\"
nowdate=time.strftime("%Y%m%d%H%M") #当前日期
homedir = os.getcwd() #当前路径
workdir="C:\\test\\" #本地备份文件夹
errlogfile="C:\\test\\PROGerror"+nowdate+".log" #错误日志名
dbuser="test/test" #数据库用户名
dblog="c:\\test\\EXP"+nowdate+".log" #DB备份过程中的exp日志
dbconst="FULL=Y" #DB的其他参数字串
dbnamelist=["test"] #需要备份那些数据库
expfile= "C:\\oracle\\BIN\\exp" #oracle的exp文件所在目录
bufsize = 1024 #FTP的缓存,不要改
ftp_addr="127.0.0.1" #ftp地址
ftp_port="21" #ftp端口
ftp_user="test" #ftp用户名
ftp_pwd="test" #ftp密码
ftp_path="/" #远端ftp路径
def dumpdb(dbname):
filename=dbname+"_"+nowdate #备份文件名
sqlvalformat ="%s userid=%s file=%s log=%s %s"
dumpfile=os.path.join(workdir,filename+".dmp") #DUMP文件名
sqlval=sqlvalformat % (expfile,dbuser,dumpfile,dblog,dbconst)
result=os.system(sqlval)
#print sqlval
def getfilename(path):
pt=path.rfind(IFS)
return path[pt+1:]
def rarfile(destfile,sourcefile):
rarprogram=os.path.join(homedir,"RAR.exe") #rar for dos放在本地目录
rarvalformat = "%s a \"%s\" \"%s\" -r" #rar 的语法格式
rarfilename=os.path.join(workdir,destfile+"_"+nowdate+".rar") #压缩文件名
sourcefilename=os.path.join(workdir,sourcefile+"_"+nowdate+".dmp") #备份源文件
rarval= rarvalformat % (rarprogram,rarfilename,sourcefilename)
result=os.system(rarval)
#print rarval
def ftpstor(ftpfile):
ftp=ftplib.FTP()
try:
ftp.connect(ftp_addr,ftp_port)
ftp.set_pasv(True)
ftp.login(ftp_user,ftp_pwd)
print ftp.getwelcome()
ftp.cwd(ftp_path)
f = open(ftpfile,'rb')
print getfilename(ftpfile)," uploading..."
ftp.storbinary("STOR %s "% getfilename(f.name) ,f,bufsize) #上传文件
print getfilename(ftpfile)," upload completed."
ftp.close()
f.close() #关闭文件
ftp.quit()
except:
info=sys.exc_info()
path=os.path.join(workdir,errlogfile)
traceback.print_exc(file=open(path,"a"))
def main():
for dbname in dbnamelist:
print time.strftime('%Y-%m-%d:%H:%M:%S')
print "-----------------------------------------------"
print dbname[:], "DB is backup now..."
dumpdb(dbname)
print dbname[:], "DB backup completed."
print "-----------------------------------------------"
print "dmpfile compress now..."
rarfile(dbname,dbname)
print "dmpfile compress completed."
print "-----------------------------------------------"
ftpfilename=os.path.join(workdir,dbname+"_"+nowdate+".rar")
print ftpfilename," FTP session starting..."
ftpstor(ftpfilename)
print ftpfilename," FTP session completed."
print "-----------------------------------------------"
dumpfile=os.path.join(workdir,dbname+"_"+nowdate+".dmp")
os.remove(dumpfile)
print dumpfile," remove completed."
print "-----------------------------------------------"
main()
这个程序实现了自动备份自动压缩自动FTP,其实还有下文,自动删除N天前的部分,我也写好了,今天没心情贴了,元宵啊,打游戏去了。
另,用于生产用途的请注意,如果要编译成exe来运行的话,密码部分一定要再加上加密解密模块,非常重要,切记切记!!或者等我哪天有时间了把全套都整完再出完全版本。