DBCC CLONEDATABASE (Transact-SQL)
Berlaku untuk:SQL Server
Menghasilkan kloning database khusus skema dengan menggunakan DBCC CLONEDATABASE
untuk menyelidiki masalah performa yang terkait dengan pengoptimal kueri.
Sintaksis
DBCC CLONEDATABASE
(
source_database_name
, target_database_name
)
[ WITH { [ NO_STATISTICS ] [ , NO_QUERYSTORE ] [ , VERIFY_CLONEDB | SERVICEBROKER ] [ , BACKUP_CLONEDB ] } ]
Catatan
Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
source_database_name
Nama database yang akan disalin.
target_database_name
Nama database tempat database sumber akan disalin. Database ini akan dibuat oleh DBCC CLONEDATABASE
dan seharusnya belum ada.
NO_STATISTICS
Berlaku untuk: Paket Layanan SQL Server 2014 (12.x) 2 CU 3, SQL Server 2016 (13.x) Paket Layanan 1, dan versi yang lebih baru.
Menentukan apakah statistik tabel/indeks perlu dikecualikan dari kloning. Jika opsi ini tidak ditentukan, statistik tabel/indeks akan disertakan secara otomatis.
NO_QUERYSTORE
Berlaku untuk: SQL Server 2016 (13.x) Paket Layanan 1 dan versi yang lebih baru.
Menentukan apakah data Penyimpanan Kueri perlu dikecualikan dari kloning. Jika opsi ini tidak ditentukan, data Penyimpanan Kueri akan disalin ke kloning jika Penyimpanan Kueri diaktifkan dalam database sumber.
VERIFY_CLONEDB
Berlaku untuk: Paket Layanan SQL Server 2014 (12.x) 3, SQL Server 2016 (13.x) Paket Layanan 2, SQL Server 2017 (14.x) CU 8, dan versi yang lebih baru.
Memverifikasi konsistensi database baru. Opsi ini diperlukan jika database kloning ditujukan untuk penggunaan produksi. Mengaktifkan VERIFY_CLONEDB
juga menonaktifkan statistik dan koleksi Penyimpanan Kueri, sehingga setara dengan menjalankan WITH VERIFY_CLONEDB, NO_STATISTICS, NO_QUERYSTORE
.
Perintah berikut dapat digunakan untuk mengonfirmasi bahwa database kloning siap produksi:
SELECT DATABASEPROPERTYEX('clone_database_name', 'IsVerifiedClone');
SERVICEBROKER
Berlaku untuk: Paket Layanan SQL Server 2014 (12.x) 3, SQL Server 2016 (13.x) Paket Layanan 2, SQL Server 2017 (14.x) CU 8, dan versi yang lebih baru.
Menentukan apakah katalog sistem terkait broker layanan harus disertakan dalam kloning. Opsi SERVICEBROKER
tidak dapat digunakan dalam kombinasi dengan VERIFY_CLONEDB
.
BACKUP_CLONEDB
Berlaku untuk: Paket Layanan SQL Server 2014 (12.x) 3, SQL Server 2016 (13.x) Paket Layanan 2, SQL Server 2017 (14.x) CU 8, dan versi yang lebih baru.
Membuat dan memverifikasi cadangan database kloning. Jika digunakan dalam kombinasi dengan VERIFY_CLONEDB
, database kloning diverifikasi sebelum cadangan diambil.
Keterangan
Validasi berikut dilakukan oleh DBCC CLONEDATABASE
. Perintah gagal jika salah satu validasi gagal.
- Database sumber harus berupa database pengguna. Kloning database sistem (
master
, ,model
,msdb
tempdb
,distribution
database, dan sebagainya) tidak diizinkan. - Database sumber harus online atau dapat dibaca.
- Database yang menggunakan nama yang sama dengan database kloning belum ada.
- Perintah tidak berada dalam transaksi pengguna.
Jika semua validasi berhasil, kloning database sumber dilakukan oleh operasi berikut:
- Membuat database tujuan baru yang menggunakan tata letak file yang sama dengan sumber tetapi dengan ukuran file default dari
model
database. - Membuat rekam jepret internal database sumber.
- Menyalin metadata sistem dari sumber ke database tujuan.
- Menyalin semua skema untuk semua objek dari sumber ke database tujuan.
- Menyalin statistik untuk semua indeks dari sumber ke database tujuan.
Catatan
Database baru yang dihasilkan terutama DBCC CLONEDATABASE
ditujukan untuk tujuan pemecahan masalah dan diagnostik. Agar database kloning didukung untuk digunakan sebagai database produksi, VERIFY_CLONEDB
opsi harus digunakan.
Semua file dalam database target akan mewarisi pengaturan ukuran dan pertumbuhan dari model
database. Nama file untuk database tujuan akan mengikuti <source_file_name_underscore_random number>
konvensi. Jika nama file yang dihasilkan sudah ada di folder tujuan, DBCC CLONEDATABASE
akan gagal.
DBCC CLONEDATABASE
tidak mendukung pembuatan kloning jika ada objek pengguna (tabel, indeks, skema, peran, dan sebagainya) yang dibuat dalam model
database. Jika objek pengguna ada dalam model
database, klon database gagal dengan pesan kesalahan berikut:
Msg 2601, Level 14, State 1, Line 1
Cannot insert duplicate key row in object <system table> with unique index 'index name'. The duplicate key value is <key value>
Penting
Jika Anda memiliki indeks penyimpan kolom, lihat Pertimbangan saat Anda menyetel kueri dengan indeks Penyimpan Kolom pada database kloning untuk memperbarui statistik indeks penyimpan kolom sebelum Anda menjalankan DBCC CLONEDATABASE
perintah. Dimulai dengan SQL Server 2019 (15.x), langkah-langkah manual yang diuraikan dalam artikel di atas tidak akan lagi diperlukan karena DBCC CLONEDATABASE
perintah mengumpulkan informasi ini secara otomatis.
Blob statistik untuk indeks penyimpan kolom
Dimulai dengan SQL Server 2019 (15.x), DBCC CLONEDATABASE
secara otomatis mengambil blob statistik untuk indeks penyimpan kolom, sehingga tidak ada langkah manual yang diperlukan. DBCC CLONEDATABASE
membuat salinan database khusus skema yang menyertakan semua elemen yang diperlukan untuk memecahkan masalah performa kueri tanpa menyalin data. Di versi SQL Server sebelumnya, perintah tidak menyalin statistik yang diperlukan untuk memecahkan masalah kueri indeks penyimpan kolom secara akurat dan langkah manual diperlukan untuk mengambil informasi ini.
Untuk informasi terkait keamanan data pada database kloning, lihat Memahami keamanan data dalam database kloning.
Rekam jepret database internal
DBCC CLONEDATABASE
menggunakan rekam jepret database internal database sumber untuk konsistensi transaksi yang diperlukan untuk melakukan salinan. Menggunakan rekam jepret ini mencegah masalah pemblokiran dan konkurensi saat perintah ini dijalankan. Jika rekam jepret tidak dapat dibuat, DBCC CLONEDATABASE
akan gagal.
Kunci tingkat database ditahan selama langkah-langkah berikut dari proses penyalinan:
- Memvalidasi database sumber
- Mendapatkan kunci bersama (S) untuk database sumber
- Membuat rekam jepret database sumber
- Membuat database kloning (database kosong yang diwariskan dari
model
database) - Dapatkan kunci eksklusif (X) untuk database kloning
- Menyalin metadata ke database kloning
- Melepaskan semua kunci database
Segera setelah perintah selesai berjalan, rekam jepret internal dihilangkan. TRUSTWORTHY
dan DB_CHAINING
opsi dinonaktifkan pada database kloning.
Objek yang didukung
Hanya objek berikut yang dapat dikloning dalam database tujuan. Objek terenkripsi dikloning tetapi tidak dapat digunakan dalam database kloning. Objek apa pun yang tidak tercantum di bagian berikut ini tidak didukung dalam kloning:
- PERAN APLIKASI
- GRUP KETERSEDIAAN
- INDEKS PENYIMPAN KOLOM
- CDB
- CDC
- Pelacakan Perubahan 6, 7, 8
- CLR 1, 2
- PROPERTI DATABASE
- DEFAULT
- FILE DAN GRUP FILE
- Teks lengkap 3
- FUNGSI
- INDEX
- LOGIN
- FUNGSI PARTISI
- SKEMA PARTISI
- PROSEDUR 4
- PENYIMPANAN KUERI 2, 5
- PERAN
- ATURAN
- SKEMA
- SEQUENCE
- INDEKS SPASIAL
- STATISTICS
- SINONIM
- TABLE
- TABEL MEMORI YANG DIOPTIMALKAN 2
- OBJEK FILESTREAM DAN FILETABLE 1, 2
- PEMICU
- TYPE
- DB YANG DITINGKATKAN
- USER
- VIEW
- INDEKS XML
- KOLEKSI SKEMA XML
1 Mulai dari SQL Server 2014 (12.x) Paket Layanan 2 CU 3.
2 Mulai dari Paket Layanan SQL Server 2016 (13.x) 1.
3 Mulai dari SQL Server 2016 (13.x) Paket Layanan 1 CU 2.
4 Prosedur T-SQL didukung di semua rilis yang dimulai dengan Paket Layanan SQL Server 2014 (12.x) 2. Prosedur CLR didukung dimulai dengan SQL Server 2014 (12.x) Paket Layanan 2 CU 3. Prosedur yang dikompilasi secara asli didukung dimulai dengan Paket Layanan SQL Server 2016 (13.x) 1.
5 Data Penyimpanan Kueri disalin hanya jika diaktifkan pada database sumber. Untuk menyalin statistik runtime terbaru sebagai bagian dari Penyimpanan Kueri, jalankan sp_query_store_flush_db
untuk menghapus statistik runtime ke Penyimpanan Kueri sebelum menjalankan DBCC CLONEDATABASE
.
6 Mulai dari SQL Server 2016 (13.x) Paket Layanan 2 CU 10.
7 Mulai di SQL Server 2017 (14.x) Paket Layanan 2 CU 17.
8 Mulai SQL Server 2019 (15.x) CU 1 dan versi yang lebih baru.
Izin
Memerlukan keanggotaan dalam peran server tetap sysadmin .
Pesan log kesalahan
Pesan berikut adalah contoh pesan yang dicatat dalam log kesalahan selama proses kloning:
2018-03-26 15:33:56.05 spid53 Database cloning for 'sourcedb' has started with target as 'sourcedb_clone'.
2018-03-26 15:33:56.46 spid53 Starting up database 'sourcedb_clone'.
2018-03-26 15:33:57.80 spid53 Setting database option TRUSTWORTHY to OFF for database 'sourcedb_clone'.
2018-03-26 15:33:57.80 spid53 Setting database option DB_CHAINING to OFF for database 'sourcedb_clone'.
2018-03-26 15:33:57.88 spid53 Starting up database 'sourcedb_clone'.
2018-03-26 15:33:57.91 spid53 Database 'sourcedb_clone' is a cloned database. A cloned database should be used for diagnostic purposes only and is not supported for use in a production environment.
2018-03-26 15:33:57.92 spid53 Database cloning for 'sourcedb' has finished. Cloned database is 'sourcedb_clone'.
Tentang paket layanan untuk SQL Server
Paket layanan bersifat kumulatif. Setiap paket layanan baru berisi semua perbaikan yang ada dalam paket layanan sebelumnya, bersama dengan perbaikan baru. Rekomendasi kami adalah menerapkan paket layanan terbaru dan pembaruan kumulatif terbaru untuk paket layanan tersebut. Anda tidak perlu menginstal paket layanan sebelumnya sebelum menginstal paket layanan terbaru. Lihat Tabel 1 di Pembaruan terbaru dan riwayat versi untuk SQL Server untuk menemukan informasi selengkapnya tentang paket layanan terbaru dan pembaruan kumulatif terbaru.
Catatan
Database yang baru dibuat yang dihasilkan dari DBCC CLONEDATABASE tidak didukung untuk digunakan sebagai database produksi dan terutama ditujukan untuk tujuan pemecahan masalah dan diagnostik. Sebaiknya lepaskan database kloning setelah database dibuat.
Properti database
DATABASEPROPERTYEX('dbname', 'IsClone')
akan mengembalikan 1 jika database dihasilkan dengan menggunakan DBCC CLONEDATABASE
.
DATABASEPROPERTYEX('dbname', 'IsVerifiedClone')
akan mengembalikan 1 jika database berhasil diverifikasi menggunakan WITH VERIFY_CLONEDB
.
Contoh
J. Membuat klon database yang menyertakan skema, statistik, dan Penyimpanan Kueri
Contoh berikut membuat klon AdventureWorks2022
database yang mencakup skema, statistik, dan data Penyimpanan Kueri (SQL Server 2016 (13.x) Paket Layanan 1 dan versi yang lebih baru):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone);
GO
B. Membuat kloning database khusus skema tanpa statistik
Contoh berikut membuat klon AdventureWorks2022
database yang tidak menyertakan statistik (SQL Server 2014 (12.x) Paket Layanan 2 CU 3 dan versi yang lebih baru):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS;
GO
C. Membuat kloning database khusus skema tanpa statistik dan Penyimpanan Kueri
Contoh berikut membuat klon AdventureWorks2022
database yang tidak menyertakan statistik dan data Penyimpanan Kueri (SQL Server 2016 (13.x) Paket Layanan 1 dan versi yang lebih baru):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS, NO_QUERYSTORE;
GO
D. Membuat klon database yang diverifikasi untuk penggunaan produksi
Contoh berikut membuat klon AdventureWorks2022
database khusus skema tanpa statistik dan data Penyimpanan Kueri yang diverifikasi untuk digunakan sebagai database produksi (SQL Server 2016 (13.x) Paket Layanan 2 dan versi yang lebih baru):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB;
GO
E. Membuat klon database yang diverifikasi untuk penggunaan produksi yang menyertakan cadangan database kloning
Contoh berikut membuat klon AdventureWorks2022
database khusus skema tanpa statistik dan data Penyimpanan Kueri yang diverifikasi untuk digunakan sebagai database produksi. Cadangan terverifikasi dari database kloning juga akan dibuat (SQL Server 2016 (13.x) Paket Layanan 2 dan versi yang lebih baru).
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB, BACKUP_CLONEDB;
GO