示範環境:
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()