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






MS SQL数据库自动备份工具

  • 2009年06月10日 13:48
  • 241KB
  • 下载

MS sql 判断数据库、表、函数、存储过程是否存在

-- 库是否存在 if exists(select * from master..sysdatabases where name=N'库名') print 'exists' else print 'n...

MS SQL数据库日志压缩方法

  • 2010年05月13日 22:10
  • 719B
  • 下载

MS SQL加载、解绑、备份工具

  • 2013年07月16日 18:20
  • 352KB
  • 下载

如何恢复在ms sql 数据库的企业管理器里误删除的数据

如何恢复在ms sql 数据库的企业管理器里误删除的数据   先用下面的数据恢复软件恢复被删除掉的数据库文件(*.mdf,*.ldf)  特别注意,任何对磁盘的操作,包括安装软件,都可能破坏已经删除的...
  • zwk_9
  • zwk_9
  • 2011年04月13日 16:18
  • 1894

MS SQL2000 数据库置疑解决方法

数据库被置疑后的解决方法(一) A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager  里面建立。 B.停掉数据库服...

数据库--高阶--通用Oracle、MS SQL和Mysql

1  IN 和 EXISTS IN 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。 测...

C#实现GRID字段别名显示,利用MS SQL数据库表及字段描述

大家看到现有的大多数ERP系统向用户展示的都是中文的字段名,如果维护过ERP就会发现后台的数据库里面用的都是英文字段名的,这时就需要一个字段名别名转换处理,我有想过用[字段名 AS 别名]的方法不过我...

MS SQL 2005 连接 sybase ASA 数据库远程链接问题

https://support.microsoft.com/kb/280102/zh-cn?ppud=4&wa=wsignin1.0       本文内容 概要 设置链接服务器到 S...
  • mfkpie
  • mfkpie
  • 2014年12月16日 15:01
  • 1743
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python程序:备份MS SQL数据库到压缩文件
举报原因:
原因补充:

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