概述 (SMO)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics

SQL Server管理对象 (SMO) 是为 Microsoft SQL Server的编程管理而设计的对象。 可以使用 SMO 生成自定义SQL Server管理应用程序。 尽管 SQL Server Management Studio 是用于管理SQL Server的强大而广泛的应用程序,但有时 SMO 应用程序可能会更好地为用户提供服务。

例如,可能需要简化控制SQL Server管理任务的用户应用程序,以满足新用户的需求并降低培训成本。 可能需要创建自定义SQL Server数据库,或创建一个用于创建和监视索引效率的应用程序。 还可以使用 SMO 应用程序将第三方硬件或软件无缝纳入数据库管理应用程序。

由于 SMO 与 SQL Server 2005 (9.x) 及更高版本兼容,因此可以轻松管理多版本环境。

SMO 中的功能包括:

  • 创建缓存对象模型和优化的对象实例。 仅当被引用时才会加载对象。 创建对象时仅部分加载对象属性。 其余对象和属性在直接引用时加载。

  • 分批执行 Transact-SQL 语句。 对语句执行批处理以提高网络性能。

  • 捕获 Transact-SQL 语句。 允许将任意操作捕获到脚本中。 Management Studio 使用此功能编写操作脚本,而不是立即执行操作。

  • 使用 WMI 提供程序管理SQL Server服务。 可以通过编程方式启动、停止和暂停SQL Server服务。

  • 高级脚本编写。 可以生成 Transact-SQL 脚本来重新创建SQL Server对象,这些对象描述与 SQL Server 实例上其他对象的关系。

  • 使用唯一资源名称 (URN)。 URN 允许您创建 SMO 对象的实例并引用 SMO 对象。

SMO 还以新对象或属性的形式表示SQL Server 2005 (9.x) 中引入的许多功能和组件。 这些新增的功能和组件包括:

  • 用于在分区方案上存储数据的表和索引分区。 有关详细信息,请参阅 Partitioned Tables and Indexes

  • 用于管理 SOAP 请求的 HTTP 端点。 有关详细信息,请参阅 实现终结点

  • 旨在提高并发性的快照隔离和行级版本控制。 有关详细信息,请参阅使用快照隔离

  • XML 架构集合、XML 索引和 XML 数据类型提供 XML 数据的验证和存储。 有关详细信息,请参阅 XML 架构集合 (SQL Server) 和使用 XML 架构

  • 用于创建数据库只读副本的快照数据库。

  • Service Broker 对基于消息的通信的支持。 有关详细信息,请参阅 SQL Server Service Broker

  • 对SQL Server数据库对象的多个名称的同义词支持。 有关详细信息,请参阅 同义词 (数据库引擎)

  • 管理数据库邮件,可用于在 SQL Server 中创建电子邮件服务器、电子邮件配置文件和电子邮件帐户。 有关详细信息,请参阅数据库邮件

  • 用于注册连接信息的已注册服务器支持。 有关详细信息,请参阅 注册服务器

  • 跟踪和重播SQL Server事件。 有关详细信息,请参阅SQL Server ProfilerSQL 跟踪SQL Server Distributed Replay扩展事件

  • 针对用于安全控制的证书和密钥的支持。 有关详细信息,请参阅 加密层次结构

  • 用于在出现 DDL 事件时增强功能的 DDL 触发器。 有关详细信息,请参阅 DDL Triggers

SMO 命名空间为 Microsoft.SqlServer.Management.Smo。 SMO 作为 Microsoft .NET Framework 程序集实现。 这意味着,在使用 SMO 对象之前,必须安装 Microsoft .NET Framework 2.0 版中的公共语言运行时。 默认情况下,SMO 程序集将安装到全局程序集缓存 (GAC) ,并带有 SQL Server SDK 选项。 程序集位于 C:\Program Files\Microsoft SQL Server\130\SDK\Assemblies 中。 有关详细信息,请参阅 Visual Studio .NET Framework文档。

SMO 类

SMO 类包括两个类别:实例类和实用工具类。

实例类

实例类表示SQL Server对象,例如服务器、数据库、表、触发器和存储过程。 类ServerConnection用于建立与 SQL Server 实例的连接,并控制发送到它的命令的捕获模式。

SMO 实例对象所构成的层次结构代表了数据库服务器的层次结构。 顶部是 SQL Server 实例,其下是数据库,然后是表、列、触发器等。 如果存在一个父级对多个子级的关系(如某个表具有一个或多个列)是符合逻辑的,那么子级将由对象集合来表示。 否则,子级由一个 对象表示。

实用程序类

实用工具类是为执行特定任务而显式创建的一组对象。 根据功能将它们划分为不同的对象层次结构:

  • 传输类。 用于向其他数据库传输架构和数据。

  • 备份和还原类。 用于备份和还原数据库。

  • 脚本程序类。 用于创建脚本文件,以重新生成对象及其依赖关系。

SMO 功能

优化的性能

SMO 体系结构在内存方面是高效的,因为对象最初只是部分实例化,而从服务器请求的属性信息最少。 直到显式引用对象时才将对象完全实例化。 当请求在最初检索的属性集中不存在的某个属性或者调用的方法需要这样的属性时,才将对象完全实例化。 从部分实例化对象到完全实例化对象的转换对用户是透明的。 此外,从不检索某些占用大量内存空间的属性,除非显式引用该属性。 对象属性的 属性就是这样的例子。 不过,部分实例化确实需要更多的网络往返时间,所以可能对您的应用程序而言不是最佳执行选项。

您可以对实例化进行控制以适应系统环境。 尽管依赖延迟实例化可能在引用属性时触发许多服务器请求,但它将应用程序所需的内存空间降至最低。

实例类(表示实际数据库对象的对象)可存在三种级别的实例化, 分别是:最小实例化(在一个块中仅读取尽量少的必需属性)、部分实例化(在一个块中读取占用相对较大的内存空间的所有属性),以及完全实例化。 未经证实和完全实例化是传统的实例化状态。 由于部分实例化对象不包含完整对象属性集的值,所以部分实例化提高了效率。 部分实例化是未直接引用的对象的默认状态。 引用这些属性之一时,将生成错误,提示需要将对象完全实例化。

捕获执行

直接执行是通常的执行方法。 语句在发生时直接发送到 SQL Server 实例。 捕获执行是直接执行的替代方式。

捕获执行允许捕获通常执行的 Transact-SQL 批处理。 这使 SMO 编程人员得以延迟脚本、存储它以便以后执行,或者为最终用户提供预览。 例如,创建 数据库创建表create index 语句可以在一个批处理中发送,然后按三个顺序步骤运行。 用户可以通过使用 Server 对象控制此功能。

WMI 提供程序

WMI 提供程序对象由 SMO 包装。 这为 SMO 程序员提供了一个简单的对象模型,该模型与 SMO 类非常相似,无需了解命名空间所表示的编程模型以及SQL Server WMI 提供程序的详细信息。 使用 WMI 提供程序可以配置SQL Server服务、别名以及客户端和服务器网络库。

脚本

在 SMO 中,脚本已得到增强,并已移动到 Scripter 类。 Scripter 类可以发现依赖项、了解对象之间的关系,并启用依赖项层次结构的操作。 主脚本对象是 Scripter 对象。 还有若干支持对象用于处理依赖关系并响应进度或错误事件。

Scripter 对象支持以下高级脚本选项:

  • 1 段式简单脚本编写(在一步中创建脚本)

  • 高级三阶段脚本 (通过三个步骤创建脚本:依赖项发现、列表生成、脚本生成)

  • 双向依赖关系发现(允许发现依赖关系或依赖项)

  • 响应进度事件

  • 响应错误事件

唯一资源名称

使用 SMO 对象库时的一个关键概念是唯一资源名称 (URN)。 URN 使用类似于 XPath 的语法。 XPath 是一种用于指定对象的层次结构路径,该路径中的每个级别都具有限定符和函数。 在 SMO 中,URN 具有两个元素:路径和属性命名(功能有限)。 路径用于指定对象的位置,属性命名支持一定程度的筛选。

针对数据库的 URN 的示例如下:

/Server/Database[@Name='AdventureWorks2022']  

可以通过引用对象的 URN 属性来检索该对象的 URN。 Scripter 对象还使用 URNs 作为参数,用于将对象引用传递给 Scripter 对象的 方法。 此外,可以为 Server 对象的 GetSmoObject 方法指定 URN。 用于创建 SMO 对象的实例。

SQL Server SMO 中表示的功能

表和索引分区

索引表分区支持您管理跨多个文件组的表和索引中的数据的分布。 此新增功能由 SMO 对象表示。

端点

SOAP 和数据库镜像请求通过使用 Endpoint 对象由端点处理。

快照隔离/行级版本控制

快照隔离级别(行级版本控制)由新的 Database 对象属性表示。

XML 架构命名空间、XML 索引和 XML 数据类型

XML 架构命名空间在 SMO 中通过对象集合来表示。 XML 索引在 SMO 中由 Index 对象属性表示。

全文搜索增强功能

SMO 中提供了新对象,这些对象表示针对全文搜索的增强。

页验证

PageVerify 对象表示数据库页验证选项。

快照数据库

快照数据库是特定时间点的指定数据库的只读副本。 可以通过使用 IsDatabaseSnapshot 对象的 Database 属性指定快照数据库。

Service Broker

Service Broker 及其功能由一组对象表示

索引增强功能

SQL Server索引增强功能由 对象中的Index新属性表示。

另请参阅

复制管理对象概念