您的位置:首页 > 编程语言 > Python开发

python程序:备份MS SQL数据库到压缩文件

2012-01-16 15:29 393 查看
参考了备份文件的python脚本。

os.system()执行命令的时候,如果这个命令本身带有空格,这个system()不能正常执行,所以改用subprocess.call()替换os.system()。

# -*- coding: cp936 -*-
# Filename: backup_ver1.3.py
'''备份MS SQL 2005里的库

在Windows系统下调用sqlcmd命令把MS SQL里的库备份到文件,
再用tarfile模块打包压缩这些文件。
备份文件的文件名里包含当天的日期。
1.0
'''

import subprocess
import os
import time
import sys
import tarfile

# 因为压缩目标可能是多个目录,所以先用tar打包,再调用gz/bzip2对tar包做压缩
def backup(target_dir, target_file, source, compression):
'''执行备份操作
'''

# 连结备份文件的目录名和文件名
# 以下两个语句的效果相同
#dist_tar_full_path_filename = '%s%s.tar' % (target_dir, target_file)
dist_tar_full_path_filename = target_dir + target_file + ".tar"

sql_cmd = 'D:\\Program Files\\Microsoft SQL Server\\90\\Tools\\Binn\\sqlcmd.exe'

# 如果目录不存在就建立
if not os.path.exists(target_dir):
os.mkdir(target_dir)

# 打开tar文件,用于追加数据库的备份文件
out = tarfile.TarFile.open(dist_tar_full_path_filename, 'a')

for sourcedb in source:
sql_bak_file = "%s%s_%s.bak" % (target_dir, sourcedb, time.strftime('%Y%m%d'))
backup_db_cmd = "%s -S 192.168.10.2 -U sa -P abcdefg -d master -Q \"BACKUP DATABASE %s TO DISK = \'%s\'\"" % (sql_cmd, sourcedb, sql_bak_file)
print backup_db_cmd

# 调用sqlcmd命令备份数据库
# os.system()不能正常执行backup_db_cmd命令,因为它没有正常处理sql_cmd里的空格。
subprocess.call(backup_db_cmd)

# 把数据库的备份文件追加到tar包里
if os.path.exists(sql_bak_file):
out.add(sql_bak_file)
print sql_bak_file, "备份成功"
# 删除数据库的备份文件
os.remove(sql_bak_file)
else:
print sql_bak_file, "不存在"

# tar打包过程结束
out.close( )

# 判断是否对tar包进行压缩
# print "compression = ", compression
if compression:
# 压缩后的文件名
dist_compress_file = dist_tar_full_path_filename  + "." + compression

# 对tar包进行压缩
out = tarfile.TarFile.open(dist_compress_file, 'w:'+compression)
out.add(dist_tar_full_path_filename)
out.close()

# 判断压缩后的文件是否存在
if os.path.getsize(dist_compress_file) == 0:
print('备份失败')
else:
print('备份成功')
# 删除tar包
os.remove(dist_tar_full_path_filename)
else:
# 判断tar包是否存在
if os.path.getsize(dist_tar_full_path_filename) == 0:
print('备份失败')
else:
print('备份成功')

if __name__ == "__main__":

# 获取程序参数
if len(sys.argv) < 2:
print '没有指定参数'
sys.exit()

if sys.argv[1].startswith('--'):
#抓取第1个参数--后面的字符串
option = sys.argv[1][2:]
if option == 'version':
print 'Version 1.0'
sys.exit()
elif option == 'help':
print '''\
在Windows系统下把MS SQL的库备份到文件,参数指定需要备份的库名。
备份文件的文件名里包含当天的日期。
备份到D:\backup\目录下。
--version : 输出版本号
--help    : 输出帮助信息'''
sys.exit()
else:
print '未知参数'
sys.exit()

# 定义备份文件存放目录和文件名
bak_dir = 'D:\\backup\\'
bak_file = 'db_backup_' +  time.strftime('%Y%m%d')

backup(bak_dir, bak_file, sys.argv[1:], "gz")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: