作者 Haidong Ji 翻译 GoodKid
主动监护的关键是自动化。如果我们能够自动化日常任务,我们则能够将主要精力集中在更正有的问题上。另外,作为一个忙碌的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 命令和批处理文件,存储过程等。
对于更广泛的环境,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 类型。. 下面的两个例子可以用在两种方式中。
作为灾难恢复计划的部分,你可能需要从一个服务器向另一个服务器传输备份文件。然而,你可能不想积累下来的备份文件,它们可能导致超出你的备份服务器的空间。在这种情况下,你想删除几天(或几周)以前的旧文件。下面的VBScript 轻松搞定这个任务。你可以客户化这个代码,例如改变 iDaysOld 的数值,以满足你的需要。大部分的代码含义是浅显自明的。为了求得更多的磁盘空间管理, 我几周前的一篇文章。
我们许多的工作在不同的技术环境中进行。我们的环境可能需要我们从*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) 'The following code generates the file name on the FTP server you want to get strFile2Get = "Data" & strFile2Get & ".csv" 'The follow lines of code generate the FTP script file on the fly, '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 'The following code executes the FTP script. It creates a Shell '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 自动化管理的更多文章。