筆記:Python進行數據庫文件導出備份

示範環境:
centos 6.4系統,oracle數據庫服務器:192.168.1.112;用戶/口令:ora/oracle
ftp文件備份服務器:192.168.1.113;用戶/口令:databak/databak

 
#!/usr/bin/pythonpython

#coding=utf-8linux

import ossql

import time, sys數據庫

import tracebackcentos

import ftplib緩存

reload(sys)服務器

sys.setdefaultencoding('utf-8')session

IFS="/" #路徑分割符,linux用"/" win32用"\\"oracle

#設置數據庫字符集ui

#os.putenv('NLS_LANG','AMERICAN_AMERICA.AL32UTF8')

nowdate=time.strftime("%Y%m%d%H%M") #當前日期

homedir = os.getcwd() #當前路徑

workdir="/home/oracle/databak" #本地備份文件夾

errlogfile="/home/oracle/databak/PROGerror"+nowdate+".log" #錯誤日誌名

user="orcl"   #數據庫用戶名

password="orcl"   #數據庫密碼

sid = "@192.168.1.112"  #數據庫sid

dblog="/home/oracle/databak/EXP"+nowdate+".log " #DB備份過程當中的exp日誌 

dbconst="FULL=Y" #DB的其餘參數字串

dbnamelist=["orcl"] #須要備份那些數據庫

expCommand= "/opt/oracle/102/bin/exp " #oracle的exp導出文件所在目錄

bufsize = 1024 #FTP的緩存,不要改

ftp_addr="192.168.1.113" #ftp地址

ftp_port="21" #ftp端口

ftp_user="databak" #ftp用戶名

ftp_pwd="databak" #ftp密碼

ftp_path="/112oracle" #遠端ftp路徑

def dumpdb(dbname):

    filename=dbname+"_"+nowdate #備份文件名

    #sqlvalformat ="%s userid=%s pwd=%s file=%s log=%s %s"

    dumpfile=os.path.join(workdir,filename+".dmp") #DUMP文件名

    #sqlval=sqlvalformat % (expCommand,user,password,dumpfile,dblog,dbconst)

    #sqlval="expCommand"+user+"/"+password,dumpfile,dblog,dbconst)

    sqlval=expCommand+user+"/"+password +"@ora112 file="+dumpfile+ " log=" + dblog 

    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+".dmp")

        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()

相關文章
相關標籤/搜索