概觀(SMO)

適用於:SQL ServerAzure SQL DatabaseAzure 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 也會以新的物件或屬性工作表示許多 SQL Server 2005 (9.x) 中引進的功能和元件。 這些新功能和元件包括下列各項:

SMO 命名空間為 Microsoft.SqlServer.Management.Smo 。 SMO 會實作為 Microsoft .NET Framework 元件。 這表示必須先安裝來自 Microsoft .NET Framework 2.0 版的 Common Language Runtime,才能使用 SMO 物件。 SMO 元件預設會安裝到具有 SQL Server SDK 選項的全域組件快取 (GAC) 中。 這些元件位於 C:\Program Files\Microsoft SQL Server\130\SDK\Assemblies 中。 如需詳細資訊,請參閱 Visual Studio .NET Framework 檔。

SMO 類別

SMO 類別包含兩個類別:實例類別和公用程式類別。

實例類別

實例類別代表 SQL Server 物件,例如伺服器、資料庫、資料表、觸發程式和預存程式。 類別 ServerConnection 可用來建立 SQL Server 實例的連接,並控制傳送至它的命令擷取模式。

SMO 實例物件會形成代表資料庫伺服器階層的階層。 頂端是 SQL Server 的實例,其底下是資料庫,並遵循資料表、資料行、觸發程式等等。 如果邏輯上有許多子系關聯性,例如具有一個或多個資料行的資料表,則子系是由 物件的集合表示。 否則,子系是由一個 物件表示。

公用程式類別

公用程式類別是已明確建立以執行特定工作的物件群組。 它們已根據函式分成不同的物件階層:

  • 傳輸類別。 這是用來將架構和資料傳送至另一個資料庫。

  • 備份和還原類別。 這些是用來備份和還原資料庫。

  • Scripter 類別。 這可用來建立腳本檔案,以便重新產生物件及其相依性。

SMO 功能

優化效能

SMO 架構在記憶體方面是有效率的,因為物件一開始只會部分具現化,而且從伺服器要求最少的屬性資訊。 物件的完整具現化會延遲到明確參考物件為止。 當要求屬性不在第一次擷取的屬性集中,或呼叫需要這類屬性的方法時,物件就會完全具現化。 部分具現化和完整具現化物件之間的轉換對使用者而言是透明的。 此外,除非明確參考屬性,否則永遠不會擷取使用大量記憶體的某些屬性。 其中一個範例是 Size 物件屬性的 Database 屬性。 不過,部分具現化確實需要更多網路來回行程,而且可能不是應用程式的最佳執行選項。

您可以控制具現化以符合系統內容。 依賴延遲具現化可將應用程式所需的記憶體數量降到最低,不過當參考屬性時,它可能會觸發許多伺服器要求。

實例類別,代表實際資料庫物件的物件,可以存在於三個具現化層級中。 這些是最小具現化(只有最少的必要屬性會在一個區塊中讀取)、部分具現化(所有使用相對大量記憶體的屬性都會在一個區塊中讀取),並完整具現化。 未經證實且完全具現化是具現化的傳統狀態。 部分具現化狀態會增加效率,因為部分具現化物件不包含完整物件屬性集的值。 部分具現化是未直接參考之物件的預設狀態。 當其中一個屬性被參考時,會產生錯誤,以提示物件的完整具現化。

擷取

直接執行是一般執行方法。 語句會在產生語句時直接傳送至 SQL Server 的實例。 擷取執行是這個的替代方案。

擷取執行可讓您擷取通常會執行的 Transact-SQL 批次。 這可讓 SMO 程式設計人員延遲腳本、儲存腳本以供稍後執行,或為使用者提供預覽。 例如, 建立資料庫 建立資料表 建立索引 語句可以在一個批次中傳送,然後以三個循序步驟執行。 這項功能是由使用者使用 Server 物件來控制。

WMI 提供者

WMI 提供者物件會由 SMO 包裝。 這可為 SMO 程式設計人員提供類似 SMO 類別的簡單物件模型,而不需要瞭解命名空間所代表的程式設計模型,以及 SQL Server WMI 提供者的詳細資料。 WMI 提供者可讓您設定 SQL Server 服務、別名,以及用戶端和伺服器網路程式庫。

指令碼

在 SMO 中,腳本已增強並移至 Scripter 類別。 Scripter 類別可以探索相依性、瞭解物件之間的關聯性,以及啟用相依性階層的操作。 主要腳本物件是 Scripter 物件。 還有數個支援的物件可處理相依性,並回應進度或錯誤事件。

Scripter 物件支援下列進階腳本選項:

  • 簡單的 1 階段腳本處理 (在一個步驟中建立腳本)

  • 進階 3 階段腳本處理 (以三個步驟建立腳本;相依性探索、清單產生、腳本產生)

  • 雙向相依性探索 (允許探索相依性或相依性)

  • 回應進度事件

  • 回應錯誤事件

唯一資源名稱

使用 SMO 物件程式庫的重要概念是唯一資源名稱(URN)。 URN 使用類似 XPath 的語法。 XPath 是一種階層路徑,用來指定每個層級都有限定詞和函式的物件。 在 SMO 中,URN 有兩個元素,路徑和屬性命名具有有限的功能。 路徑是用來指定物件的位置,而屬性命名則允許篩選程度。

資料庫的 URN 範例為

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

您可以參考物件的 URN 屬性來擷取物件的 URN。 Scripter 物件也會使用 URN 做為參數,將物件參考傳遞至 Scripter 物件的 方法 。 此外,也可以為 Server 物件的 GetSmoObject 方法 指定 URN。 這是用來建立 SMO 物件的實例。

SMO 中代表的 SQL Server 功能

資料表和索引資料分割

索引資料表資料分割可讓您管理資料表和索引中跨檔案群組的分散資料。 這項新功能是由 SMO 物件表示。

端點

SOAP 和資料庫鏡像要求是使用 Endpoint 物件由端點處理。

快照隔離/資料列層級版本控制

快照集隔離 (資料列層級版本設定) 是由新的 Database 物件屬性工作表示。

XML 架構命名空間、XML 索引和 XML 資料類型

XML 架構命名空間是由 物件的集合在 SMO 中表示。 XML 索引是由 Index 物件屬性在 SMO 中表示。

全文檢索搜尋增強功能

SMO 中會提供新的物件,這些物件代表全文檢索搜尋的增強功能。

頁面確認

物件 PageVerify 代表資料庫頁面驗證選項。

快照集資料庫

快照集資料庫是指定之資料庫的唯讀複本,做為特定時間點。 您可以使用 物件的 屬性 Database 來指定 IsDatabaseSnapshot 快照集資料庫。

Service Broker

Service Broker 及其功能是由一組物件表示

索引增強功能

SQL Server 索引增強功能是由 物件中的 Index 新屬性工作表示。

另請參閱

複寫管理物件概念