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中国
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"; } |
作者
翻译
相关推荐
-
SQL Server开发人员需要避免的八种习惯
应用程序开发人员对SQL Server性能的影响是巨大的,可能是积极影响,也可能负面影响。
-
微软下一代SQL Server新功能探秘
下一代SQL Server的设计初衷就是为了更好的可用性和扩展性,并添加了一系列的开发工具和商业智能工具。
-
SQL Server管理对象的应用场景
SQL Server联机丛书中SMO相关文档很少,只包含有对类的基本描述。其中没有包括使用SMO的整体说明和建议,或者最佳实践。本文将介绍一下SMO的几个应用场景。
-
NetApp SMO 应对Oracle数据管理难题
如果你的工作是满足 Oracle 环境的存储需求,你可能把大量时间花在解决数据库管理员、开发人员和测试人员的请求上。