Sql-Server
刪除 Query Tuning Assistant (msqta) 架構和表
在 SQL Server 2017 上執行查詢優化助手(使用新數據庫升級會話)時,我在相應的數據庫中創建了一個新的架構msqta,以及架構中的六個表和五個儲存過程。
在完成數據庫升級並刪除 QTA 中的所有會話、禁用 Query Store 並清除 Query Store 數據(Purge Query Data 按鈕)後,上述架構和相關對象仍然存在於數據庫中。
我進行了Google搜尋和閱讀,但找不到刪除msqta架構和相關對象的選項或命令。我猜這些對象應該在不需要時以某種方式自動刪除。在我的每個生產數據庫中都有表有點煩人。
在測試伺服器上,我嘗試手動刪除架構和對象,首先刪除表和儲存過程,然後嘗試刪除架構,但出現錯誤:
無法刪除架構“msqta”,因為它被對象“ExecutionStatType”引用。
奇怪的是,這什麼也沒返回:
SELECT * FROM sys.objects WHERE schema_id = SCHEMA_ID('msqta')
我非常感謝您對此事提出任何建議。
根據對象的名稱(
ExecutionStatType
),聽起來這是一個使用者定義的數據類型,通過 是不可見的sys.objects
。為了展示,我將創建一個新模式,以及一個使用該模式的新類型:
use [/dev/null] GO CREATE SCHEMA msqta; CREATE TYPE msqta.ExecutionStatType FROM varchar(11) NOT NULL ;
現在,如果您查詢該架構
sys.objects
中sys.types
的對象,您將看到該類型僅在 sys.objects 中可見,sys.types
而不是在 sys.objects 中可見:SELECT * FROM sys.objects WHERE schema_id = schema_id('msqta'); SELECT * FROM sys.types WHERE schema_id = schema_id('msqta');
要清理這些,您只需要先刪除類型,然後刪除架構:
DROP TYPE msqta.ExecutionStatType; DROP SCHEMA msqta;
由於 SQL Server 在刪除架構時拋出錯誤的方式,當您刪除架構時,您可能會收到針對不同類型或不同對象的類似錯誤。你需要確保你也放棄了所有這些。
如果其他人遇到同樣的問題,這裡列出了在新數據庫升級會話 (QTA) 之後需要清理的所有命令:
DROP TABLE [msqta].[ExecutionStat] DROP TABLE [msqta].[MetaData] DROP TABLE [msqta].[QueryOptionGroup] DROP TABLE [msqta].[TuningSession_TuningQuery] DROP TABLE [msqta].[TuningSession] DROP TABLE [msqta].[TuningQuery] DROP PROCEDURE [msqta].[spPurgeData] DROP PROCEDURE [msqta].[spQueryGet] DROP PROCEDURE [msqta].[spQuerySave] DROP PROCEDURE [msqta].[spSessionById] DROP PROCEDURE [msqta].[spSessionSave] DROP TYPE [msqta].[ExecutionStatType] DROP TYPE [msqta].[QueryOptionGroupType] DROP TYPE [msqta].[TuningQueryType] DROP TYPE [msqta].[TuningSessionType] DROP SCHEMA [msqta]
在 SQL Server 14.0.3391.2 上測試