BCP'nin SQL Server'ın önceki bir sürümüne veri almak ve RDS'den veri çekmek için bazı araçlardan daha etkili olduğunu gördüm. (Teşekkürler @ivan_posdeev.)
İlk önce SQL Server Management Studio, Görevler, Komut dosyaları oluştur'daki veritabanına sağ tıklayarak şemayı oluşturuyorum. Gelişmiş nesnelerdeki tüm nesneleri işaretleyin, ihtiyacınız olan her şeyin komut dosyasında olduğundan emin olun (istatistikler, dizinler vb.), Hedef veritabanınız farklı bir ada sahipse "veritabanını KULLAN" seçeneğinin işaretini kaldırın, uyumluluğu hedef veritabanı sürümünüzle ayarlayın ve şemanızı oluşturan dosya. Hedefinize bir veritabanı oluşturun ve (kullanarak üzerinde bu dosyayı çalıştırmak osql, sqlcmdveya GUI).
Verileri taşımak için , kaynak veritabanında aşağıdaki sorguyu iki kez çalıştırın , önce verileri ayıklamak için toplu iş dosyasını oluşturmak üzere ikinci sütunu yorumlayın, ardından hedefinizde çalışacak içe aktarma toplu iş dosyasını oluşturmak için ilk sütunu yorumlayın. (Kaynak ve hedef sunucularınızı, örnek adlarını, çıktı ve girdi dosya dizinlerini, kullanıcı adlarını ve parolaları eklemeniz gerekir. Entegre güvenliği kullanmak için ve seçeneklerini sadece ile değiştirin .)-U-P-T
Bu, Unicode'u destekler, eğer ihtiyacınız yoksa -N, her iki ifadedeki anahtarı olarak değiştirin -n.
SELECT
'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME + ' out d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
-- 'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME + ' in d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME + '.ERRORS.dat'
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
ORDER BY
s.Name, t.NAME
Schema.tablename.ERRORS.dat adlı kontrol dosyalarını çalıştırdıktan sonra - başarısız olan satırları içerecek, eğer yapılmadıysa boş olacaktır.
Burada BCP için MSDN referansı, burada BCP seçeneklerinden daha kolay yürüyün .
Bunu komut dosyaları ve denediğim araçlardan çok daha üstün buldum. Ayrıca RDS veritabanlarında da çalışır (yedeklemeye izin vermez). Oluşturulan veri dosyaları SQL komut dosyalarının boyutunun% 30'u kadardır, bunları çalıştırmak zamanın bir kısmını alır ve çok daha güvenilirdir. (SQL Server tarafından komut dosyası verileri için oluşturulan komut dosyaları her zaman tetiklenir, bazen tahmin edilebilir bazen değil, oluşturulan SQL 2008R2 ile uyumlu değildi (örn. Kullanıldı nvarchar(0), genellikle fark edilebilir bir nedenden ötürü tamamlanmadı vb.) BCP ayrıca herhangi bir kısıtlama ihlali de çoğaltır referans referans bütünlüğü gibi).