DROP DATABASE (Transact-SQL)

Berlaku untuk: SQL Server (semua versi yang didukung) 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 SQL Server.

Ikon tautan topikKonvensi Sintaks Transact-SQL

Sintaks

-- 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 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

IF EXISTS
Berlaku untuk: SQL Server ( SQL Server 2016 (13.x) melalui versi saat ini).

Menjatuhkan database secara kondisional hanya jika sudah ada.

database_name Menentukan nama database yang akan dihapus. Untuk menampilkan daftar database, gunakan tampilan katalog sys.databases .

database_snapshot_nameBerlaku untuk: SQL Server 2008 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 dipotok, tetapi tidak akan dihapus secara fisik untuk menjaga cadangan FILE_SNAPSHOT tetap utuh. Untuk informasi selengkapnya, lihat SQL Server Pencadangan dan Pemulihan 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. Menghilangkan 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 singgahan rencana, 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 operasi pemeliharaan database atau 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 menjatuhkan database yang 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.

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 pada SQL Server 2022 (16.x). Fitur ini akan dihapus dalam versi Microsoft SQL Server yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.

Azure SQL Database

Anda harus tersambung ke database master untuk menghapus 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 database master untuk menghapus 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

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

Azure SQL Database

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

A. Menghilangkan database tunggal

Contoh berikut menghapus Sales database.

DROP DATABASE Sales;

B. Menghilangkan beberapa database

Berlaku untuk: SQL Server 2008 dan yang lebih baru.

Contoh berikut menghapus setiap database yang tercantum.

DROP DATABASE Sales, NewSales;

C. Menghapus rekam jepret database

Berlaku untuk: SQL Server 2008 dan yang lebih baru.

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 menjadi mode pengguna tunggal untuk memaksa pemutusan semua sesi lainnya, lalu menghilangkan database. Untuk informasi selengkapnya tentang SINGLE_USER, lihat opsi UBAH KUMPULAN DATABASE.

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