DROP DATABASE (Transact-SQL)
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Menghapus satu atau beberapa database pengguna atau rekam jepret database dari instans Mesin Database SQL Server.
Sintaks
Sintaks SQL Server.
DROP DATABASE [ IF EXISTS ] { database_name | database_snapshot_name } [ ,...n ]
[ ; ]
Azure SQL Database, Azure Synapse Analytics, dan sintaks Sistem Platform Analitik.
DROP DATABASE database_name
[ ; ]
Argumen
JIKA ADA
Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru
Secara kondisional menghilangkan database hanya jika sudah ada.
database_name
Menentukan nama database yang akan dihapus. Untuk menampilkan daftar database, gunakan tampilan katalog sys.databases .
database_snapshot_name
Menentukan nama rekam jepret database yang akan dihapus.
Keterangan
Database dapat dihilangkan terlepas dari statusnya: offline, baca-saja, tersangka, dan sebagainya. Untuk menampilkan status database saat ini, gunakan sys.databases
tampilan katalog.
Database yang dihilangkan hanya dapat dibuat ulang dengan memulihkan cadangan. Rekam jepret database tidak dapat dicadangkan dan, oleh karena itu, tidak dapat dipulihkan.
Saat database dihilangkan, database master harus dicadangkan.
Menghapus database akan menghapus database dari instans SQL Server dan menghapus file disk fisik yang digunakan oleh database. Jika database, atau salah satu filenya, offline saat dihilangkan, file disk tidak dihapus. File-file ini dapat dihapus secara manual dengan menggunakan manajer file seperti File Explorer. Untuk menghapus database dari server saat ini tanpa menghapus file dari sistem file, gunakan sp_detach_db.
Peringatan
Di SQL Server 2016 (13.x) dan versi yang lebih baru, menghilangkan database yang memiliki FILE_SNAPSHOT
cadangan yang terkait dengannya akan berhasil, tetapi file database yang memiliki rekam jepret terkait tidak akan dihapus untuk menghindari pembatalan pencadangan yang mengacu pada file database ini. File akan dipotong, tetapi tidak akan dihapus secara fisik untuk menjaga cadangan tetap FILE_SNAPSHOT
utuh. Untuk informasi selengkapnya, lihat Pencadangan dan pemulihan SQL Server dengan Azure Blob Storage.
SQL Server
Menghapus rekam jepret database menghapus rekam jepret database dari instans SQL Server dan menghapus file sparse sistem file NTFS fisik yang digunakan oleh rekam jepret. Untuk informasi tentang menggunakan file jarang menurut rekam jepret database, lihat Rekam jepret database (SQL Server). Menghilangkan rekam jepret database menghapus entri dalam cache paket yang terkait dengan rekam jepret database, bukan instans secara keseluruhan. Menghapus cache rencana menyebabkan kompilasi ulang semua rencana eksekusi berikutnya dan dapat menyebabkan penurunan performa kueri secara tiba-tiba dan sementara.
Untuk setiap cachestore yang dihapus dalam cache paket, log kesalahan SQL Server berisi pesan informasi berikut. Pesan ini dicatat setiap lima menit selama cache dihapus dalam interval waktu tersebut.
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.
Interoperabilitas
SQL Server
Untuk menghilangkan database yang diterbitkan untuk replikasi transaksional, atau diterbitkan atau berlangganan untuk menggabungkan replikasi, Anda harus terlebih dahulu menghapus replikasi dari database. Jika database rusak, atau replikasi tidak dapat terlebih dahulu dihapus (atau keduanya), dalam kebanyakan kasus Anda masih bisa menghilangkan database dengan menggunakan ALTER DATABASE
untuk mengatur database offline lalu menghilangkannya.
Jika database terlibat dalam pengiriman log, hapus pengiriman log sebelum menghilangkan database. Untuk informasi selengkapnya, lihat Tentang pengiriman log (SQL Server).
Batasan
Database sistem tidak dapat dihilangkan.
Pernyataan DROP DATABASE
harus berjalan dalam mode autocommit dan tidak diizinkan dalam transaksi eksplisit atau implisit. Mode autocommit adalah mode manajemen transaksi default.
Peringatan
Anda tidak dapat menghapus database yang saat ini sedang digunakan. Ini berarti kunci ditahan untuk membaca atau menulis oleh pengguna mana pun. Salah satu cara untuk menghapus pengguna dari database adalah dengan menggunakan ALTER DATABASE
untuk mengatur database ke SINGLE_USER. Dalam strategi ini, Anda harus menjalankan ALTER DATABASE
dan DROP DATABASE
dalam batch yang sama, untuk menghindari koneksi lain yang mengklaim sesi pengguna tunggal yang diizinkan. Untuk informasi selengkapnya, lihat Contoh D.
SQL Server
Setiap rekam jepret database pada database harus dihilangkan sebelum database dapat dihilangkan.
Menghapus database yang diaktifkan untuk Stretch Database tidak menghapus data jarak jauh. Jika Anda ingin menghapus data jarak jauh, Anda harus menghapusnya secara manual.
Penting
Stretch Database tidak digunakan lagi di SQL Server 2022 (16.x) dan Azure SQL Database. Fitur ini akan dihapus dalam versi Mesin Database di masa mendatang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.
Database Azure SQL
Anda harus tersambung ke master
database untuk menghilangkan database.
Pernyataan DROP DATABASE
harus menjadi satu-satunya pernyataan dalam batch SQL dan Anda hanya dapat menghilangkan satu database pada satu waktu.
Azure Synapse Analytics
Anda harus tersambung ke master
database untuk menghilangkan database.
Pernyataan DROP DATABASE
harus menjadi satu-satunya pernyataan dalam batch SQL dan Anda hanya dapat menghilangkan satu database pada satu waktu.
Izin
SQL Server
CONTROL
Memerlukan izin pada database, izin, atau ALTER ANY DATABASE
keanggotaan dalam peran database tetap db_owner.
Database Azure SQL
Hanya login utama tingkat server (dibuat oleh proses provisi) atau anggota peran database dbmanager yang dapat menghilangkan database.
Sistem Platform Analitik (PDW)
CONTROL
Memerlukan izin pada database, izin, atau ALTER ANY DATABASE
keanggotaan dalam peran database tetap db_owner.
Contoh
J. Menghapus database tunggal
Contoh berikut menghapus Sales
database.
DROP DATABASE Sales;
B. Menghilangkan beberapa database
Contoh berikut menghapus setiap database yang tercantum.
DROP DATABASE Sales, NewSales;
C. Menghapus rekam jepret database
Contoh berikut menghapus rekam jepret database, bernama sales_snapshot0600
, tanpa memengaruhi database sumber.
DROP DATABASE sales_snapshot0600;
D. Menghapus database setelah memeriksa apakah ada
Contoh berikut pertama-tama memeriksa untuk melihat apakah database bernama Sales
ada. Jika demikian, contoh mengubah database bernama Sales
ke mode pengguna tunggal untuk memaksa pemutusan sambungan semua sesi lainnya, lalu menghilangkan database. Untuk informasi selengkapnya tentang SINGLE_USER, lihat Opsi 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