DROP DATABASE (Transact-SQL)
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)
從 SQL Server 實例中移除一或多個使用者資料庫或資料庫快照集 資料庫引擎。
Syntax
SQL Server 語法。
DROP DATABASE [ IF EXISTS ] { database_name | database_snapshot_name } [ ,...n ]
[ ; ]
Azure SQL 資料庫、Azure Synapse Analytics 和分析平台系統語法。
DROP DATABASE database_name
[ ; ]
引數
IF EXISTS
適用於:SQL Server 2016 (13.x) 和更新版本
只有在資料庫已存在時,才能有條件地將其卸除。
database_name
指定要移除的資料庫名稱。 若要顯示資料庫清單,請使用 sys.databases 目錄檢視。
database_snapshot_name
這是要移除的資料庫快照集名稱。
備註
無論資料庫的狀態為離線、唯讀或受到質疑等,都可以卸除該資料庫。 若要顯示資料庫的目前狀態,請使用 sys.databases
目錄檢視。
若要重新建立已經卸除的資料庫,只有還原備份一途。 資料庫快照集無法備份,因此無法還原。
在卸除資料庫時,應該備份 master 資料庫。
卸除資料庫時,不但會從 SQL Server 執行個體中刪除該資料庫,同時也會刪除該資料庫所用的實體磁碟檔。 如果資料庫或其任何一個檔案在卸除時脫機,則不會刪除磁碟檔案。 您可以使用檔案管理員,例如 檔案總管,手動刪除這些檔案。 若要從目前伺服器中移除資料庫,而不刪除檔案系統中的檔案,請使用 sp_detach_db。
警告
在 SQL Server 2016 (13.x) 和更新版本中,卸除具有 FILE_SNAPSHOT
與其相關聯備份的資料庫將會成功,但不會刪除具有相關聯快照集的資料庫檔案,以避免使參考這些資料庫檔案的備份失效。 檔案將會遭到截斷,但不會實際刪除,以便讓 FILE_SNAPSHOT
備份保持不變。 如需詳細資訊,請參閱使用 Azure Blob 儲存體 進行 SQL Server 備份和還原。
SQL Server
卸除資料庫快照集會從 SQL Server 實例刪除資料庫快照集,並刪除快照集所使用的實體 NTFS 檔案系統疏鬆檔案。 如需依資料庫快照集使用疏鬆檔案的詳細資訊,請參閱 資料庫快照集 (SQL Server) 。 卸除資料庫快照集會清除與資料庫快照集相關聯之計劃快取中的專案,而不是整個實例。 清除計畫快取會導致重新編譯所有後續執行計畫,而且可能會導致查詢效能突然暫時下降。
針對計劃快取中的每個已清除快取存放區,SQL Server 錯誤記錄檔包含下列資訊訊息。 只要在該時間間隔內快取發生排清,這個訊息就會每五分鐘記錄一次。
SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to some database maintenance or reconfigure operations.
互通性
SQL Server
若要卸除針對異動複寫而發行的資料庫,或是針對合併式複寫而發行或訂閱的資料庫,必須先從該資料庫移除複寫。 如果資料庫損毀,或無法先移除複寫(或兩者),在大部分情況下,您仍然可以使用 ALTER DATABASE
將資料庫設為離線,然後卸除資料庫。
如果資料庫有涉及記錄傳送,請在卸除資料庫之前移除記錄傳送。 如需詳細資訊,請參閱關於記錄傳送 (SQL Server)。
限制
系統資料庫 無法卸除。
語句 DROP DATABASE
必須以自動認可模式執行,且不允許在明確或隱含的交易中執行。 自動認可模式是預設的交易管理模式。
警告
您無法卸除目前正在使用的資料庫。 這表示鎖定會保留,以便任何使用者讀取或寫入。 從資料庫移除使用者的其中一種方式,就是使用 ALTER DATABASE
將資料庫設定為 SINGLE_USER。 在此策略中,您應該在相同的批次中執行 ALTER DATABASE
和 DROP DATABASE
,以避免允許另一個連線宣告單一用戶會話。 如需詳細資訊,請參閱 範例 D。
SQL Server
在卸除資料庫之前,必須先卸除該資料庫上的任何資料庫快照集。
卸除 Stretch Database 的資料庫啟用並不會移除遠程數據。 如果您想要刪除遠端資料,則必須手動將它移除。
重要
Stretch Database 在 SQL Server 2022 (16.x) 及 Azure SQL 資料庫中已被取代。 資料庫引擎的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。
Azure SQL Database
您必須連線到 master
資料庫,才能卸除資料庫。
語句 DROP DATABASE
必須是 SQL 批次中唯一的語句,而且一次只能卸除一個資料庫。
Azure Synapse Analytics
您必須連線到 master
資料庫,才能卸除資料庫。
語句 DROP DATABASE
必須是 SQL 批次中唯一的語句,而且一次只能卸除一個資料庫。
權限
SQL Server
CONTROL
需要資料庫或ALTER ANY DATABASE
許可權,或db_owner固定資料庫角色的成員資格。
Azure SQL Database
只有伺服器層級主體登入 (由佈建程序所建立) 或 dbmanager 資料庫角色成員才能卸除資料庫。
Analytics Platform System (PDW)
CONTROL
需要資料庫或ALTER ANY DATABASE
許可權,或db_owner固定資料庫角色的成員資格。
範例
A. 卸除單一資料庫
下列範例會移除 Sales
資料庫。
DROP DATABASE Sales;
B. 卸除多個資料庫
下列範例會移除每一個列出的資料庫。
DROP DATABASE Sales, NewSales;
C. 卸除資料庫快照集
下列範例會移除名為 sales_snapshot0600
的資料庫快照集,而不會影響來源資料庫。
DROP DATABASE sales_snapshot0600;
D. 檢查資料庫是否存在之後卸除資料庫
下列範例會先檢查是否有名為 Sales
的資料庫存在。 如果是的話,此範例會將名為 Sales
的資料庫變更為單一使用者模式,以強制中斷所有其他工作階段的連線,然後卸除資料庫。 如需關於 SINGLE_USER 的詳細資訊,請參閱 ALTER DATABASE SET 選項。
USE tempdb;
GO
DECLARE @SQL AS NVARCHAR (1000);
IF EXISTS (SELECT 1
FROM sys.databases
WHERE [name] = N'Sales')
BEGIN
SET @SQL = N'USE [Sales];
ALTER DATABASE Sales SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
USE [tempdb];
DROP DATABASE Sales;';
EXECUTE (@SQL);
END