sp_detach_db (T-SQL)

Berlaku untuk:SQL Server

Mencopot database yang saat ini tidak digunakan dari instans server dan, secara opsional, menjalankan STATISTIK PEMBARUAN pada semua tabel sebelum melepaskan.

Penting

Agar database yang direplikasi dilepas, database harus tidak diterbitkan. Untuk informasi selengkapnya, lihat bagian "Komentar" nanti dalam topik ini.

Konvensi sintaks transact-SQL

Sintaks

  
sp_detach_db [ @dbname= ] 'database_name'   
    [ , [ @skipchecks= ] 'skipchecks' ]   
    [ , [ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' ]   

Argumen

[ @dbname = ] 'database_name' Adalah nama database yang akan dilepaskan. database_name adalah nilai sysname, dengan nilai default NULL.

[ @skipchecks = ] 'skipchecks' Menentukan apakah akan melewati atau menjalankan UPDATE STATISTIC. skipchecks adalah nilai nvarchar(10), dengan nilai default NULL. Untuk melewati STATISTIK PEMBARUAN, tentukan true. Untuk menjalankan STATISTIK PEMBARUAN secara eksplisit, tentukan false.

Secara default, STATISTIK PEMBARUAN dilakukan untuk memperbarui informasi tentang data dalam tabel dan indeks. Melakukan STATISTIK PEMBARUAN berguna untuk database yang akan dipindahkan ke media baca-saja.

[ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' Menentukan bahwa file indeks teks lengkap yang terkait dengan database yang sedang dilepas tidak akan dihilangkan selama operasi penghapusan database. KeepFulltextIndexFile adalah nilai nvarchar(10) dengan default true. Jika KeepFulltextIndexFilesalah, semua file indeks teks lengkap yang terkait dengan database dan metadata indeks teks lengkap dihilangkan, kecuali database bersifat baca-saja. Jika NULL atau true, metadata terkait teks lengkap disimpan.

Penting

Parameter @keepfulltextindexfile akan dihapus dalam versi SQL Server yang akan datang. Jangan gunakan parameter ini dalam pekerjaan pengembangan baru, dan ubah aplikasi yang saat ini menggunakan parameter ini sesegera mungkin.

Mengembalikan Nilai Kode

0 (keberhasilan) atau 1 (kegagalan)

Tataan Hasil

Tidak ada

Keterangan

Saat database dilepas, semua metadatanya dihilangkan. Jika database adalah database default dari akun login apa pun, master menjadi database default mereka.

Catatan

Untuk informasi tentang cara menampilkan database default semua akun login, lihat sp_helplogins (Transact-SQL). Jika Anda memiliki izin yang diperlukan, Anda dapat menggunakan ALTER LOGIN untuk menetapkan database default baru ke login.

Batasan

Database tidak dapat dilepas jika salah satu hal berikut ini benar:

  • Database saat ini sedang digunakan. Untuk informasi selengkapnya, lihat "Mendapatkan Akses Eksklusif," nanti dalam topik ini.

  • Jika direplikasi, database diterbitkan.

    Sebelum bisa mencopot database, Anda harus menonaktifkan penerbitan dengan menjalankan sp_replicationdboption.

    Catatan

    Jika Anda tidak dapat menggunakan sp_replicationdboption, Anda dapat menghapus replikasi dengan menjalankan sp_removedbreplication.

  • Rekam jepret database ada di database.

    Sebelum dapat melepaskan database, Anda harus menghilangkan semua rekam jepretnya. Untuk informasi selengkapnya, lihat Menghilangkan Rekam Jepret Database (Transact-SQL).

    Catatan

    Rekam jepret database tidak dapat dilepas atau dilampirkan.

  • Database sedang dicerminkan.

    Database tidak dapat dilepas hingga sesi pencerminan database dihentikan. Untuk informasi selengkapnya, lihat Menghapus Pencerminan Database (SQL Server).

  • Database adalah tersangka.

    Anda harus memasukkan database tersangka ke dalam mode darurat sebelum Anda dapat melepaskan database. Untuk informasi selengkapnya tentang cara memasukkan database ke mode darurat, lihat MENGUBAH DATABASE (Transact-SQL).

  • Database adalah database sistem.

Mendapatkan Akses Eksklusif

Mencopot database memerlukan akses eksklusif ke database. Jika database yang ingin Anda lepaskan sedang digunakan, sebelum Anda bisa mencopotnya, atur database ke mode SINGLE_USER untuk mendapatkan akses eksklusif.

Sebelum Anda mengatur database ke SINGLE_USER, verifikasi bahwa opsi AUTO_UPDATE_STATISTICS_ASYNC diatur ke NONAKTIF. Ketika opsi ini diatur ke AKTIF, utas latar belakang yang digunakan untuk memperbarui statistik mengambil koneksi terhadap database, dan Anda tidak akan dapat mengakses database dalam mode pengguna tunggal. Untuk informasi selengkapnya, lihat mengatur database ke mode pengguna tunggal.

Misalnya, pernyataan berikut ALTER DATABASE mendapatkan akses eksklusif ke database AdventureWorks2022 setelah semua pengguna saat ini terputus dari database.

USE master;  
ALTER DATABASE AdventureWorks2022  
SET SINGLE_USER;  
GO  

Catatan

Untuk memaksa pengguna saat ini keluar dari database segera atau dalam jumlah detik tertentu, gunakan juga opsi ROLLBACK: UBAH DATABASE database_name ATUR SINGLE_USER DENGAN ROLLBACK rollback_option. Untuk informasi selengkapnya, lihat MENGUBAH DATABASE (Transact-SQL).

Memasang kembali Database

File yang dilepas tetap ada dan dapat dipasang kembali dengan menggunakan CREATE DATABASE (dengan opsi FOR ATTACH atau FOR ATTACH_REBUILD_LOG). File dapat dipindahkan ke server lain dan dilampirkan di sana.

Izin

Memerlukan keanggotaan dalam peran server tetap sysadmin atau keanggotaan dalam peran db_owner database.

Contoh

Contoh berikut mencopot database AdventureWorks2022 dengan skipcheck yang diatur ke true.

EXEC sp_detach_db 'AdventureWorks2022', 'true';  

Contoh berikut mencopot database AdventureWorks2022 dan menyimpan file indeks teks lengkap dan metadata indeks teks lengkap. Perintah ini menjalankan UPDATE STATISTICS, yang merupakan perilaku default.

exec sp_detach_db @dbname='AdventureWorks2022'  
    , @keepfulltextindexfile='true';  

Lihat Juga

MENGUBAH DATABASE (T-SQL)
Pencopotan dan Lampirkan Database (SQL Server)
BUAT DATABASE (SQL Server Transact-SQL)
Melepas Database