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.

Konvensi sintaks transact-SQL

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, msdbtempdb, 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

Baca juga