概觀(SMO)
適用於:Microsoft Fabric 中的 SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics SQL 資料庫
SQL Server 管理物件 (SMO) 是專為以程式設計方式管理 SQL Server Microsoft的物件。 您可以使用 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) 中引進的功能和元件。 這些新功能和元件包括下列各項:
用於在數據分割配置上儲存數據的數據表和索引分割。 如需詳細資訊,請參閱< Partitioned Tables and Indexes>。
用於管理SOAP要求的 HTTP 端點。 如需詳細資訊,請參閱 實作端點。
快照集隔離和數據列層級版本設定,以增加並行存取。 如需詳細資訊,請參閱使用快照隔離。
XML 架構集合、XML 索引和 XML 資料類型提供 XML 資料的驗證和儲存。 如需詳細資訊,請參閱 XML 架構集合 (SQL Server) 和使用 XML 架構。
用於建立資料庫唯讀複本的快照集資料庫。
訊息型通訊的 Service Broker 支援。 如需詳細資訊,請參閱 SQL Server Service Broker。
多個 SQL Server 資料庫物件名稱的同義字支援。 如需詳細資訊,請參閱同義字(資料庫引擎)。
Database Mail 的管理,可讓您在 SQL Server 中建立電子郵件伺服器、電子郵件配置檔和電子郵件帳戶。 如需詳細資訊,請參閱 Database Mail。
已註冊的伺服器支援註冊連線資訊。 如需詳細資訊,請參閱 註冊伺服器。
追蹤和重新執行 SQL Server 事件。 如需詳細資訊,請參閱 SQL Server Profiler、 SQL 追蹤、 SQL Server Distributed Replay 和 擴充事件。
支援安全性控制憑證和金鑰。 如需詳細資訊,請參閱 加密階層。
DDL 觸發程式會在發生 DDL 事件時新增功能。 如需詳細資訊,請參閱 DDL 觸發程序。
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 新屬性表示。