使用VBScript自动化任务

作者 Haidong Ji 翻译 GoodKid




维护一个平稳、高效的SQL Server的关键是做好主动预防。我们需要经常性的找出加强SQL Server的方法并不断改善性能。使用主动式监护,当我们看到任何不正常的行为信号时,我们应调研和找出什么是真正的问题。在问题找到我们之前,发现并解决它。也就是说,在萌芽状态消灭它。

主动监护的关键是自动化。如果我们能够自动化日常任务,我们则能够将主要精力集中在更正有的问题上。另外,作为一个忙碌的DBA,自动化也可以让你更悠闲,这样你还可以学习更多的东西并不断提升自己。

SQL Server可用的自动化工具包括 SQL Server Agent, SQL (存储过程Stored Procedures), DTS, ActiveX 脚本(VBScript), SQL Server 命令行工具(OSQL/ISQL), DOS 命令批处理文件,WMI, SQL Mail,等等,不一而足。它们具有各自的特点,在不同的情况下各有优缺点。

本篇中,我将主要介绍 VBScript。我将举出两个关于文件删除和FTP 传输文件的VBScript 的例子。希望让你能够了解在哪里和如何使用 VBScript。可以轻松的修改并应用这两个例子。

在以后的几周内,我将提供另外的自动化工具的介绍和实例,如 WMI, shell 命令和批处理文件,存储过程等。

什么是VBScript

对于更广泛的环境,Visual Basic Scripting Edition 带来了交互式脚本,像网页脚本编程,Windows 管理器,和 SQL Server 管理器等。不像 VB6 或 VB7((谢天谢地 Microsoft 将放弃 .NET lingo, 我非常恨它。这意义重大。),它不是一个成熟和内容丰富的编程语言。VBScript 集合了VB6更多的内容。 如果你已经非常熟悉 Visual Basic 或 VBA (Visual Basic for Applications),你学习VBScript将不会有太多麻烦。即时你是一个初学者,VBScript 也并不困难,并且网上有内容丰富的学习资源供你选择。 Andy Warren had an article a few months ago on SQL-DMO. ,在这篇文章中提出了许多方法和技术可以应用于一般的VBScript 编程当中。

VBScript 包含一个Variant的数据类型。Variant 是一个特别的数据类型,它可以包含不同的信息,这取决于不同的使用方式。一个 variant子类型是一个对象。当设计和初始化一个对象时 (FileSystemObject, File object,等),记住如何使用SET 关键字。对于初学者来说,这是非常重要的。 

在 SQL Server中,你可以使用 VBScript 创建一个DTS中的 ActiveX 任务。你可以添加你的script到 SQL Server Agent 工作中作为一个step。仅仅需要记住选择 ActiveX Script 作为 step 类型。. 下面的两个例子可以用在两种方式中。

例子1: VBScript 删除一个文件夹中旧的文件

作为灾难恢复计划的部分,你可能需要从一个服务器向另一个服务器传输备份文件。然而,你可能不想积累下来的备份文件,它们可能导致超出你的备份服务器的空间。在这种情况下,你想删除几天(或几周)以前的旧文件。下面的VBScript 轻松搞定这个任务。你可以客户化这个代码,例如改变 iDaysOld 的数值,以满足你的需要。大部分的代码含义是浅显自明的。为了求得更多的磁盘空间管理, 我几周前的一篇文章。

例子2: VBScript 自动FTP 文件

我们许多的工作在不同的技术环境中进行。我们的环境可能需要我们从*nix 服务或框架中获得文件。下面的例子介绍通过FTP获得文件的技术,并假设你想获得的文件的命名方式是 YYYYMMDDData.csv。因为文件名是每日变化的,因此我们生成的脚本文件是变化的。其余的代码应该是含义自明的。

Option Explicit
Dim objFSO, objMyFile, objShell, strFTPScriptFileName, strFile2Get
Dim strLocalFolderName, strFTPServerName, strLoginID
Dim strPassword, strFTPServerFolder

'Customize code here to fit your needs
strLocalFolderName = "My Folder Name where we put the file to be FTPed"
strFTPServerName = "FTP Server Name"
strLoginID = "FTP Server Login ID"
strPassword = "FTP Login ID Password"
strFTPServerFolder = "Folder Name on FTP server where the file resides"

'The following code converts date to the right format, YYYYMMDD
strFile2Get = DatePart("yyyy",Date)

If DatePart("m",Date) < 10 Then
	strFile2Get = strFile2Get & "0"
End If

strFile2Get = strFile2Get & DatePart("m",Date)

If DatePart("d",Date) < 10 Then
	strFile2Get = strFile2Get & "0"
End If

strFile2Get = strFile2Get & DatePart("d",Date)

&#39;The following code generates the file name on the FTP server you want to get
strFile2Get = "Data" & strFile2Get & ".csv"

&#39;The follow lines of code generate the FTP script file on the fly,
&#39;because the get file name changes every day

strFTPScriptFileName = strLocalFolderName & "\FTPScript.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject")

If (objFSO.FileExists(strFTPScriptFileName)) Then
    objFSO.DeleteFile (strFTPScriptFileName)
End If

Set objMyFile = objFSO.CreateTextFile(strFTPScriptFileName, True)
objMyFile.WriteLine ("open " & strFTPServerName)
objMyFile.WriteLine (strLoginID)
objMyFile.WriteLine (strPassword)
objMyFile.WriteLine ("cd " & strFTPServerFolder)
objMyFile.WriteLine ("ascii")
objMyFile.WriteLine ("lcd " & strLocalFolderName)
objMyFile.WriteLine ("get " & strFile2Get)
objMyFile.WriteLine ("bye")
objMyFile.Close
Set objFSO = Nothing
Set objMyFile = Nothing

&#39;The following code executes the FTP script. It creates a Shell
&#39;object and run FTP program on top of it.
Set objShell = WScript.CreateObject( "WScript.Shell" )
objShell.Run ("ftp -s:" & chr(34) & strFTPScriptFileName & chr(34))
Set objShell = Nothing

结论

本篇中,我主要介绍了VBScript 并提供了两个实例。希望它们能够给予你获得起步的充分技术。请继续关注我的关于SQL Server 自动化管理的更多文章。

此条目发表在服务器, 程序开发分类目录,贴了, 标签。将固定链接加入收藏夹。