DROP DATABASE (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Menghapus satu atau beberapa database pengguna atau rekam jepret database dari instans SQL Server.

Konvensi sintaks transact-SQL

Sintaksis

-- SQL Server Syntax
DROP DATABASE [ IF EXISTS ] { database_name | database_snapshot_name } [ ,...n ] [;]
-- Azure SQL Database, Azure Synapse Analytics and Analytics Platform System Syntax
DROP DATABASE database_name [;]

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

JIKA ADA
Berlaku untuk: SQL Server (SQL Server 2016 (13.x) melalui versi saat ini).

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 Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.

Menentukan nama rekam jepret database yang akan dihapus.

Keterangan Umum

Database dapat dihilangkan terlepas dari statusnya: offline, baca-saja, tersangka, dan sebagainya. Untuk menampilkan status database saat ini, gunakan tampilan katalog sys.databases .

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 Windows Explorer. Untuk menghapus database dari server saat ini tanpa menghapus file dari sistem file, gunakan sp_detach_db.

Peringatan

Menghapus 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 FILE_SNAPSHOT tetap utuh. Untuk informasi selengkapnya, lihat Pencadangan dan Pemulihan SQL Server dengan Microsoft Azure Blob Storage. Berlaku untuk: SQL Server 2016 (13.x) melalui versi saat ini.

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. Menghapus rekam jepret database akan menghapus cache paket untuk instans SQL Server. 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 dibersihkan dalam cache paket, log kesalahan SQL Server berisi pesan informasi berikut: " SQL Server telah mengalami %d kemunculan cachestore flush untuk cachestore '%s' (bagian dari cache rencana) karena beberapa pemeliharaan database atau operasi konfigurasi ulang". Pesan ini dicatat setiap lima menit selama cache dihapus dalam interval waktu tersebut.

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.

Batasan dan Pembatasan

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. Lihat Contoh D di bawah ini.

SQL Server

Setiap rekam jepret database pada database harus dihilangkan sebelum database dapat dihilangkan.

Menghilangkan pengaktifan database 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 database master untuk menghilangkan database.

Pernyataan DROP DATABASE harus menjadi satu-satunya pernyataan dalam batch SQL dan Anda hanya dapat menghilangkan satu database sekaligus.

Azure Synapse Analytics

Anda harus tersambung ke database master untuk menghilangkan database.

Pernyataan DROP DATABASE harus menjadi satu-satunya pernyataan dalam batch SQL dan Anda hanya dapat menghilangkan satu database sekaligus.

Izin

SQL Server

Memerlukan izin CONTROL pada database, atau mengubah izin DATABASE APA PUN, atau 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)

Memerlukan izin CONTROL pada database, atau mengubah izin DATABASE APA PUN, atau keanggotaan dalam peran database tetap db_owner.

Contoh

J. Menjatuhkan database tunggal

Contoh berikut menghapus Sales database.

DROP DATABASE Sales;

B. Menghilangkan beberapa database

Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.

Contoh berikut menghapus setiap database yang tercantum.

DROP DATABASE Sales, NewSales;

C. Menghilangkan rekam jepret database

Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.

Contoh berikut menghapus rekam jepret database, bernama sales_snapshot0600, tanpa memengaruhi database sumber.

DROP DATABASE sales_snapshot0600;

D. Menjatuhkan database setelah memeriksa apakah database tersebut 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 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;';
    EXEC (@SQL);
END;

Lihat Juga