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

原创 2012年01月16日 15:29:17

参考了备份文件的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")






收藏助手
不良信息举报
您举报文章:python程序:备份MS SQL数据库到压缩文件
举报原因:
原因补充:

(最多只允许输入30个字)