Bagikan melalui


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.

Konvensi sintaks transact-SQL

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