Aracılığıyla paylaş


DBCC KLON VERİTABANI (Transact-SQL)

Şunlar için geçerlidir: SQL Server

Sorgu iyileştiricisi ile ilgili performans sorunlarını araştırmak için kullanarak DBCC CLONEDATABASE veritabanının salt şemalı, salt okunur bir kopyasını oluşturur.

Transact-SQL söz dizimi kuralları

Sözdizimi

DBCC CLONEDATABASE
(
    source_database_name
    ,  target_database_name
)
    [ WITH { [ NO_STATISTICS ] [ , NO_QUERYSTORE ] [ , VERIFY_CLONEDB | SERVICEBROKER ] [ , BACKUP_CLONEDB ] } ]

Tartışmalar

source_database_name

Kopyalanacak veritabanının adı.

target_database_name

Kaynak veritabanının kopyalanacağı veritabanının adı. Bu veritabanı tarafından DBCC CLONEDATABASE oluşturulur ve zaten mevcut olmamalıdır.

NO_STATISTICS

Şunlar için geçerlidir: SQL Server 2014 (12.x) Service Pack 2 CU 3, SQL Server 2016 (13.x) Service Pack 1 ve sonraki sürümleri.

Tablo/dizin istatistiklerinin kopyanın dışında tutulması gerekip gerekmediğini belirtir. Bu seçenek belirtilmezse, tablo/dizin istatistikleri otomatik olarak eklenir.

NO_QUERYSTORE

Şunlar için geçerlidir: SQL Server 2016 (13.x) Service Pack 1 ve sonraki sürümleri.

Sorgu Deposu verilerinin kopyanın dışında tutulması gerekip gerekmediğini belirtir. Bu seçenek belirtilmezse, Sorgu Deposu kaynak veritabanında etkinleştirilirse Sorgu Deposu verileri kopyaya kopyalanır.

VERIFY_CLONEDB

Şunlar için geçerlidir: SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8 ve sonraki sürümleri.

Yeni veritabanının tutarlılığını doğrular. Etkinleştirme, VERIFY_CLONEDB istatistikleri ve Sorgu Deposu koleksiyonunu da devre dışı bırakır, bu nedenle çalıştırmaya WITH VERIFY_CLONEDB, NO_STATISTICS, NO_QUERYSTOREeşdeğerdir.

Kopyalanan veritabanının doğrulanmış olup olmadığını belirlemek için aşağıdaki komut kullanılabilir:

SELECT DATABASEPROPERTYEX('clone_database_name', 'IsVerifiedClone');

HIZMET ARACISI

Şunlar için geçerlidir: SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8 ve sonraki sürümleri.

Hizmet aracısı ile ilgili sistem kataloglarının kopyaya eklenip eklenmediğini belirtir. seçeneği SERVICEBROKER ile VERIFY_CLONEDBbirlikte kullanılamaz.

BACKUP_CLONEDB

Şunlar için geçerlidir: SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8 ve sonraki sürümleri.

Kopya veritabanının yedeğini oluşturur ve doğrular. ile VERIFY_CLONEDBbirlikte kullanılırsa, kopya veritabanı yedekleme alınmadan önce doğrulanır.

Açıklamalar

ile DBCC CLONEDATABASE oluşturulan bir veritabanının kopyası yalnızca sorun giderme ve tanılama amacıyla tasarlanmıştır. Kopya, özgün veritabanının salt okunur, yalnızca şemaya dayalı bir kopyasıdır ve nesnelerin kopyalandığı sınırlamalara sahiptir. Daha fazla ayrıntı için Desteklenen nesneler bölümüne bakın. Kopya veritabanının diğer kullanımları desteklenmez.

Aşağıdaki doğrulamalar tarafından DBCC CLONEDATABASEgerçekleştirilir. Doğrulamalardan herhangi biri başarısız olursa komut başarısız olur.

  • Kaynak veritabanı bir kullanıcı veritabanı olmalıdır. Sistem veritabanlarının (master, model, msdb, , tempdbdistributionveritabanı vb.) kopyalanmasına izin verilmez.
  • Kaynak veritabanı çevrimiçi veya okunabilir olmalıdır.
  • Kopya veritabanıyla aynı adı kullanan bir veritabanı zaten mevcut olmamalıdır.
  • Komut bir kullanıcı işleminde değil.

Tüm doğrulamalar başarılı olursa, kaynak veritabanının kopyalanması aşağıdaki işlemler tarafından gerçekleştirilir:

  • Kaynakla aynı dosya düzenini kullanan ancak veritabanından varsayılan dosya boyutlarına model sahip yeni bir hedef veritabanı oluşturur.
  • Kaynak veritabanının iç anlık görüntüsünü oluşturur.
  • Sistem meta verilerini kaynaktan hedef veritabanına kopyalar.
  • Kaynaktan hedef veritabanına tüm nesneler için tüm şemayı kopyalar.
  • Kaynaktan hedef veritabanına tüm dizinlerin istatistiklerini kopyalar.

Hedef veritabanındaki tüm dosyalar, boyut ve büyüme ayarlarını veritabanından model devralır. Hedef veritabanının dosya adları kurala <source_file_name_underscore_random number> uyar. Oluşturulan dosya adı hedef klasörde zaten varsa, DBCC CLONEDATABASE başarısız olur.

DBCC CLONEDATABASE veritabanında oluşturulmuş model kullanıcı nesneleri (tablolar, dizinler, şemalar, roller vb.) varsa kopya oluşturmayı desteklemez. Veritabanında kullanıcı nesneleri varsa model , veritabanı kopyası aşağıdaki hata iletisiyle başarısız olur:

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>

Önemli

Columnstore dizinleriniz varsa, komutu çalıştırmadan önce columnstore dizin istatistiklerini güncelleştirmek için DBCC CLONEDATABASE bölümüne bakın. SQL Server 2019'dan (15.x) başlayarak, komut bu bilgileri otomatik olarak topladığı için yukarıdaki makalede açıklanan el ile gerçekleştirilen DBCC CLONEDATABASE adımlar artık gerekli olmayacaktır.

Columnstore dizinleri için istatistik blobu

SQL Server 2019'dan (15.x) DBCC CLONEDATABASE başlayarak columnstore dizinleri için istatistik bloblarını otomatik olarak yakalar, bu nedenle el ile adım atılması gerekmez. DBCC CLONEDATABASE , verileri kopyalamadan sorgu performansı sorunlarını gidermek için gereken tüm öğeleri içeren bir veritabanının yalnızca şema kopyası oluşturur. SQL Server'ın önceki sürümlerinde komut, columnstore dizin sorgularının sorunlarını doğru bir şekilde gidermek için gereken istatistikleri kopyalamadı ve bu bilgileri yakalamak için el ile adımlar gerekiyordu.

Kopyalanan veritabanlarındaki veri güvenliğiyle ilgili bilgi için bkz. Kopyalanan veritabanlarında veri güvenliğini anlama.

İç veritabanı anlık görüntüsü

DBCC CLONEDATABASE kopyalamayı gerçekleştirmek için gereken işlem tutarlılığı için kaynak veritabanının iç veritabanı anlık görüntüsünü kullanır. Bu anlık görüntünün kullanılması, bu komutlar yürütülürken engelleme ve eşzamanlılık sorunlarını önler. Anlık görüntü oluşturulamazsa başarısız DBCC CLONEDATABASE olur.

Veritabanı düzeyinde kilitler, kopyalama işleminin aşağıdaki adımları sırasında tutulur:

  • Kaynak veritabanını doğrulama
  • Kaynak veritabanı için paylaşılan (S) kilidi alma
  • Kaynak veritabanının anlık görüntüsünü oluşturma
  • Kopya veritabanı oluşturma (veritabanından devralınan model boş bir veritabanı)
  • Kopya veritabanı için özel (X) kilit alma
  • Meta verileri kopya veritabanına kopyalama
  • Tüm veritabanı kilitlerini serbest bırakma

Komutun çalışması biter bitmez iç anlık görüntü bırakılır. TRUSTWORTHY ve DB_CHAINING seçenekler kopyalanmış bir veritabanında kapatılır.

Desteklenen nesneler

Hedef veritabanında yalnızca aşağıdaki nesneler kopyalanabilir. Şifrelenmiş nesneler kopyalanabilir ancak kopya veritabanında kullanılamaz. Aşağıdaki bölümde listelenmeyen nesneler kopyada desteklenmez:

  • UYGULAMA ROLÜ
  • Kullanılabilirlik Grubu
  • COLUMNSTORE Dizin
  • CDB
  • CDC
  • Değişiklik İzleme 6, 7, 8
  • CLR 1, 2
  • VERITABANı ÖZELLIKLERI
  • Varsayılan
  • DOSYALAR VE DOSYA GRUPLARı
  • Tam metin 3
  • FONKSİYON
  • DİZİN
  • GİRİŞ YAP
  • PARTITION FONKSİYONU
  • PARTISYON DÜZENİ
  • YORDAM 4
  • SORGU DEPOSU 2, 5
  • Rol
  • KURAL
  • ŞEMA
  • SIRA
  • UZAMSAL İNDİS
  • İSTATİSTİK
  • EŞANLAMLI
  • TABLO 9
  • BELLEK IÇIN İYILEŞTIRILMIŞ TABLOLAR 2
  • FILESTREAM VE FILETABLE OBJECTS 1, 2
  • TETİK
  • TİP
  • YÜKSELTilen VERITABANı
  • KULLANICI
  • GÖRÜNÜM
  • XML İNDİSİ
  • XML Şema Koleksiyonu

1 SQL Server 2014 (12.x) Service Pack 2 CU 3'te başlatılıyor.

2 SQL Server 2016 (13.x) Service Pack 1'den başlayarak.

3 SQL Server 2016 (13.x) Service Pack 1 CU 2'den başlayarak.

4 Transact-SQL yordamları SQL Server 2014 (12.x) Service Pack 2 ile başlayan tüm sürümlerde desteklenir. CLR yordamları SQL Server 2014 (12.x) Service Pack 2 CU 3 ile başlayarak desteklenir. Sql Server 2016 (13.x) Service Pack 1'den başlayarak yerel olarak derlenmiş yordamlar desteklenir.

5 Sorgu Deposu verileri yalnızca kaynak veritabanında etkinleştirildiğinde kopyalanır. Sorgu Deposu'nun bir parçası olarak en son çalışma zamanı istatistiklerini kopyalamak için komutunu yürüterek çalıştırmadan sp_query_store_flush_db önce çalışma zamanı istatistiklerini Sorgu Deposu'na boşaltın DBCC CLONEDATABASE.

6 SQL Server 2016 (13.x) Service Pack 2 CU 10'dan başlayarak.

7 SQL Server 2017 (14.x) Service Pack 2 CU 17'den başlayarak.

8 SQL Server 2019 (15.x) CU 1 ve sonraki sürümlerinden başlayarak.

9 Olarak is_ms_shipped işaretlenen sistem tablolarının çoğu kopyalanmamıştır.

İzinler

sysadmin sabit sunucu rolü üyeliği gerektirir.

Hata günlüğü iletileri

Aşağıdaki iletiler, kopyalama işlemi sırasında hata günlüğüne kaydedilen iletilerin bir örneğidir:

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'.

SQL Server hizmet paketleri hakkında

Hizmet paketleri kümülatiftir. Her yeni hizmet paketi, yeni düzeltmelerle birlikte önceki hizmet paketlerinde bulunan tüm düzeltmeleri içerir. Önerimiz, bu hizmet paketi için en son hizmet paketini ve en son toplu güncelleştirmeyi uygulamaktır. En son hizmet paketini yüklemeden önce önceki bir hizmet paketini yüklemeniz gerekmez. En son hizmet paketi ve en son toplu güncelleştirme hakkında daha fazla bilgi edinmek için bkz. SQL Server için en son güncelleştirmeler ve sürüm geçmişindeTablo 1.

Uyarı

DBCC CLONEDATABASE'den oluşturulan yeni oluşturulan veritabanının üretim veritabanı olarak kullanılması desteklenmez ve öncelikle sorun giderme ve tanılama amacıyla tasarlanmıştır. Veritabanı oluşturulduktan sonra kopyalanan veritabanını ayırmanızı öneririz.

Veritabanı özellikleri

DATABASEPROPERTYEX('dbname', 'IsClone') veritabanı kullanılarak DBCC CLONEDATABASEoluşturulduysa 1 döndürür.

DATABASEPROPERTYEX('dbname', 'IsVerifiedClone') veritabanı kullanılarak WITH VERIFY_CLONEDBbaşarıyla doğrulandıysa 1 döndürür.

Örnekler

A. Şema, istatistik ve Sorgu Deposu içeren bir veritabanının kopyasını oluşturma

Aşağıdaki örnek şema, istatistikler ve Sorgu Deposu verilerini (SQL Server 2016 (13.x) Service Pack 1 ve sonraki sürümleri içeren veritabanının bir kopyasını AdventureWorks2025 oluşturur:

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone);
GO

B. İstatistikleri olmayan bir veritabanının yalnızca şema kopyası oluşturma

Aşağıdaki örnek, istatistikleri içermeyen veritabanının AdventureWorks2025 bir kopyasını oluşturur (SQL Server 2014 (12.x) Service Pack 2 CU 3 ve sonraki sürümleri):

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS;
GO

C. İstatistikler ve Sorgu Deposu olmadan veritabanının yalnızca şema kopyası oluşturma

Aşağıdaki örnek, istatistikleri ve Sorgu Deposu verilerini (SQL Server 2016 (13.x) Service Pack 1 ve sonraki sürümleri içermeyen bir veritabanı kopyası AdventureWorks2025 oluşturur:

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS, NO_QUERYSTORE;
GO

D. Doğrulanmış bir veritabanının kopyasını oluşturma

Aşağıdaki örnek, doğrulanmış istatistikler ve Sorgu Deposu verileri olmadan veritabanının AdventureWorks2025 yalnızca şema kopyası oluşturur (SQL Server 2016 (13.x) Service Pack 2 ve sonraki sürümleri):

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB;
GO

E. Kopyalanan veritabanının yedeğini içeren, kullanımı doğrulanmış bir veritabanının kopyasını oluşturma

Aşağıdaki örnek, istatistiği olmayan veritabanının AdventureWorks2025 yalnızca şema kopyası ve kullanım için doğrulanmış Sorgu Deposu verileri oluşturur. Kopyalanan veritabanının doğrulanmış yedeği de oluşturulur (SQL Server 2016 (13.x) Service Pack 2 ve sonraki sürümleri).

DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB, BACKUP_CLONEDB;
GO

Ayrıca bakınız