使用SQL Server管理对象进行备份检查

日期: 2010-07-13 作者:Roman Rehak翻译:冯昀晖 来源:TechTarget中国 英文

SQL Server Management Objects(SMO)是一套.NET代码库集合,其中包含了可以访问和操作微软SQL Server所有领域功能的API类库。SQL Server本身的许多工具都用到了这些类,比如SQL Server Management Studio(SSMS)。你可以利用SMO构建你自己的管理工具,既可以对本地工具做补充,也可以自动化实现某些任务。   在微软Visual Studio中使用SMO库之前,你必须明确添加对SMO程序集的引用。

下面是你应该包括进来的核心类库列表,有了这些类库,才能成功编译本文中的代码:   Microsoft.SqlServer.Co……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

SQL Server Management Objects(SMO)是一套.NET代码库集合,其中包含了可以访问和操作微软SQL Server所有领域功能的API类库。SQL Server本身的许多工具都用到了这些类,比如SQL Server Management Studio(SSMS)。你可以利用SMO构建你自己的管理工具,既可以对本地工具做补充,也可以自动化实现某些任务。

  在微软Visual Studio中使用SMO库之前,你必须明确添加对SMO程序集的引用。下面是你应该包括进来的核心类库列表,有了这些类库,才能成功编译本文中的代码:

  Microsoft.SqlServer.ConnectionInfo

  Microsoft.SqlServer.ConnectionInfoExtended

  Microsoft.SqlServer.Management.Sdk.Sfc

  Microsoft.SqlServer.Smo

  Microsoft.SqlServer.SmoExtended

  Microsoft.SqlServer.SqlEnum

  当你使用SMO时,一般来说,首先你要利用Server对象连接到一个SQL Server实例。一旦你有了对服务器的引用,你就可以开始使用server属性或者开始钻取像数据库一样的子对象。下面这段代码示例连接到了一个服务器,然后获得连接到“master”数据库的连接数量。

  Server svr = new Server("rrehak");

  int connectionCount = svr.GetActiveDBConnectionCount ("master");

  上面的代码给构造函数中传递了服务器名称入参。如果你想连接到未知服务器或者对你网络中的所有服务器执行操作,你可以发起一个网络调用,获取到计算机或网络中全部SQL Server实例的列表,这首先要使用SmoApplication类:

  DataTable dt = SmoApplication.EnumAvailableSqlServers (false);

  返回的DataTable对象对找到的每个SQL Server都带有几个属性,比如:计算机名称,实例名称,版本,以及是否该服务器是本地的,是否处于集群环境。请注意,要想让一个服务器包含在该结果中,SQL Server浏览器窗口应该运行在SQL Server实例安装的计算机上。然而,根据我个人的经验,不管浏览器服务运行没运行,有时服务器都不会出现。这与网络和防火墙设置有关,因此如果你想在多台服务器上自动化运行的话,你最好的选择是编辑你自己的服务器列表。

  用SMO检查备份

  有个例子可以展示SMO多么有用,SMO可以用于检查数据库确保备份在执行。虽然配置维护计划和SQL Server Agent任务在备份失败时发出通知也很容易,但是要通过配置使你知道备份没有发生就比较困难了。如果有人关闭了SQL Server Agent,当然你的通知系统也一定不工作了,这种情况是非常有可能发生的。另外,虽然许多DBA们对于在生产服务器上设置备份控制很严格,但他们在开发服务器和QA服务器上却经常忽略这一点,(出问题时)有可能使他们浪费许多工作时间。

  下面的代码展示了如何对于指定数据库获取最后一次备份的日期(包括全备份,差异备份和日志备份):

  Server svr = new Server("rrehak");
  Database db = svr.Databases["AdventureWorks2008"];
  string fullBackupDate = FormatBackupDate
  (db.LastBackupDate);
  string diffBackupDate =
  FormatBackupDate(db.LastDifferentialBackupDate);
  string logBackupDate = FormatBackupDate
  (db.LastLogBackupDate);

  如果预定备份还没有发生,在SMO中相应的备份日期值就是“1/1/0001”。我写了“FormatBackupDate()”函数(你在前面的示例代码中可以看到调用)来把该日期转换成字符串,或者如果指定类型的备份没有发生的话会返回“None”。

  private stringFormatBackupDate(DateTime date)
  {
  DateTime nullDate = new DateTime(1,1,1);
  if (date != nullDate)
  return date.ToString();
  else
  return "None";
  }

相关推荐