Bagikan melalui


sp_detach_db (T-SQL)

Berlaku untuk: SQL Server

Mencopot database yang saat ini tidak digunakan dari instans server dan, secara opsional, berjalan UPDATE STATISTICS pada semua tabel sebelum melepaskan.

Agar database yang direplikasi dilepas, database harus tidak diterbitkan. Untuk informasi selengkapnya, lihat bagian Keterangan nanti di artikel ini.

Konvensi sintaks transact-SQL

Sintaks

sp_detach_db
    [ [ @dbname = ] N'dbname' ]
    [ , [ @skipchecks = ] N'skipchecks' ]
    [ , [ @keepfulltextindexfile = ] N'keepfulltextindexfile' ]
[ ; ]

Argumen

[ @dbname = ] N'dbname'

Nama database yang akan dilepaskan. @dbname adalah sysname, dengan default NULL.

[ @skipchecks = ] N'skipchecks'

Menentukan apakah akan melewati atau menjalankan UPDATE STATISTICS. @skipchecks adalah nvarchar(10), dengan default NULL. Untuk melewati UPDATE STATISTICS, tentukan true. Untuk menjalankan UPDATE STATISTICSsecara eksplisit , tentukan false.

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

[ @keepfulltextindexfile = ] N'keepfulltextindexfile'

Menentukan bahwa file indeks teks lengkap yang terkait dengan database yang dicopot tidak dihilangkan selama operasi penghapusan database. @keepfulltextindexfile adalah nvarchar(10), dengan default true.

  • Jika @keepfulltextindexfile adalah false, 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

Fitur ini akan dihapus dalam versi SQL Server yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Tataan hasil

Tidak ada.

Keterangan

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

Catatan

Untuk informasi tentang cara menampilkan database default semua akun masuk, lihat sp_helplogins. 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.

  • Jika direplikasi, database diterbitkan.

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

    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.

    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 dalam mode darurat, lihat MENGUBAH DATABASE.

  • 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 melepaskannya, atur database ke SINGLE_USER mode untuk mendapatkan akses eksklusif.

Sebelum Anda mengatur database ke SINGLE_USER, verifikasi bahwa AUTO_UPDATE_STATISTICS_ASYNC opsi diatur ke OFF. Ketika opsi ini diatur ke ON, utas latar belakang yang digunakan untuk memperbarui statistik mengambil koneksi terhadap database, dan Anda tidak 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

Untuk memaksa pengguna saat ini keluar dari database segera atau dalam jumlah detik tertentu, Anda juga dapat menggunakan opsi tersebut ROLLBACK .

ALTER DATABASE <database_name>
SET SINGLE_USER
WITH ROLLBACK <rollback_option>;

Untuk mengetahui informasi selengkapnya, lihat ALTER DATABASE.

Memasang kembali database

File yang dilepas tetap ada dan dapat dipasang kembali dengan menggunakan CREATE DATABASE (dengan FOR ATTACH opsi 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

Sampel kode Transact-SQL dalam artikel ini menggunakan AdventureWorks2022 database sampel atau AdventureWorksDW2022 , yang dapat Anda unduh dari halaman beranda Sampel Microsoft SQL Server dan Proyek Komunitas.

Contoh berikut mencopot AdventureWorks2022 database dengan @skipchecks diatur ke true.

EXEC sp_detach_db 'AdventureWorks2022', 'true';

Contoh berikut mencopot AdventureWorks2022 database 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';