SQL Server tablo bazlı export/import (bcp, sqlpackage)
SQL ServerSeviye: OrtaSüre: 20–60 dkYedek değil, mantıksal veri taşıma: tabloları bcp ile dışa aktarıp başka bir veritabanına yükleme (native ya da karakter biçimi, format dosyası, batch, TABLOCK, kimlik sütunu, UTF-8), sorgu sonucunu CSV/metin dosyasına alma (queryout), sqlpackage ile şema + veri taşıma (.bacpac Export/Import, ör. Azure SQL Database'e geçiş) ve yalnız şema (.dacpac Extract, Script, Publish). Linux'ta mssql-tools18 ve sqlpackage kurulumu dahil. Sonunda hedefte satır sayıları kaynakla doğrulanmış tablolar ya da paylaşılabilir bir dosya elde edersiniz.
Veritabanının tamamını aynı ya da daha yeni SQL Server'a taşıyacaksanız yedek/restore daha hızlı ve tutarlıdır: SQL Server yedekleme ve geri yükleme.
Yapı: 1 sunucu (komutlar SQL Server'da ya da bir yönetim sunucusunda çalışır)
Senaryolar
- Tabloları taşı: bcp out → bcp in — Bir ya da birkaç tabloyu başka bir SQL Server veritabanına kopyalamak; hedefte tablolar önceden var olmalı.
- Sorgu sonucunu dosyaya al: bcp queryout (CSV/metin) — Bir sorgunun sonucunu başka sisteme (Excel, ETL, rapor) verilecek CSV/metin dosyasına yazmak.
- Şema + veri: sqlpackage Export / Import (.bacpac) — Şema ve veriyi tek dosyada taşımak; özellikle Azure SQL Database'e geçiş ya da küçük/orta veritabanları.
- Yalnız şema: sqlpackage Extract / Script / Publish (.dacpac) — Yalnız şemayı çıkarmak, hedefle karşılaştırıp değişiklik betiği üretmek ya da boş şemayı yeni ortama kurmak.
Başlamadan önce
- Doğru araç seçildi: - bcp (native): SQL Server'dan SQL Server'a bir ya da birkaç büyük tabloyu taşıma; en hızlısı. Hedef tablolar önceden var olmalı. - bcp (karakter) / queryout: başka sistemlere (ETL, raporlama, Excel) metin/CSV verme. - .bacpac (Export/Import): şema + verinin tek dosyada taşınması; özellikle Azure SQL Database'e geçiş. Büyük veritabanlarında (yüzlerce GB) yavaştır; o durumda yedek/restore ya da bcp tercih edin. - .dacpac (Extract): yalnız şema (tablolar, view'ler, yordamlar); şema karşılaştırma ve yeni bir ortama boş şema kurma.
- … kaynakta okuma (tablolar için SELECT; Export/Extract için db_owner önerilir) ve hedefte yazma (bcp in için INSERT + ALTER TABLE; Import/Publish için dbcreator ya da db_owner) yetkisine sahip. Parolayı betikten önce verin: read -rsp 'Parola: ' SQLCMDPASSWORD; export SQLCMDPASSWORD ve sudo --preserve-env=SQLCMDPASSWORD bash <betik>.sh.
- PowerShell yönetici olarak açıldı (Başlat → "PowerShell" → sağ tık → Run as administrator). …PowerShell'i açan Windows hesabının…… login'inin… kaynakta okuma ve hedefte yazma (bcp in için INSERT + ALTER TABLE; Import/Publish için dbcreator ya da db_owner) yetkisi var.
- Komut sunucusundan kaynak (…)… ve hedef (…)… SQL Server'lara TCP ile erişiliyor.
- Komut sunucusundan kaynak (…)… ve hedef (…)… SQL Server'lara TCP ile erişiliyor; bcp ve sqlcmd PATH'te (SQL Server kurulumuyla ya da "Microsoft Command Line Utilities for SQL Server" ile gelir).
- Export dizininin (…) bulunduğu diskte, aktarılacak verinin boyutu kadar boş alan var (native dosya kabaca tablonun veri boyutu kadar; karakter dosyası daha büyük olabilir; .bacpac sıkıştırılmıştır).
- Export dizininin (…) bulunduğu sürücüde, aktarılacak verinin boyutu kadar boş alan var.
- Hedef veritabanında (…) tablolar aynı yapıda oluşturuldu (bcp tablo oluşturmaz). Şemayı taşımanın kolay yolu bu rehberin Yalnız şema (.dacpac) seçeneğidir. Büyük yüklemelerde hedef tablodaki nonclustered index'ler ve trigger'lar devre dışı bırakılabilir, foreign key'ler sonra kontrol edilir.
- Kaynakta export sırasında yazma yapılmıyor (uygulama durduruldu) ya da kaynak olarak veritabanının bir kopyası (COPY_ONLY yedekten restore edilmiş ya da database snapshot) kullanılıyor. bcp ve sqlpackage Export transactionally consistent değildir: export sırasında değişen tablolar birbiriyle tutarsız olabilir.
Rehberin aşamaları
- Araçlar ve hazırlık — sqlcmd ve bcp araçlarını kur (mssql-tools18) · sqlpackage'ı kur · bcp ve sqlcmd araçlarını kontrol et · sqlpackage'ı kur · Export dizinini oluştur · Export dizinini oluştur
- Tablo taşıma (bcp out / in) — Kaynak tabloların satır sayısını ve boyutunu kaydet · Format dosyalarını üret · Format dosyalarını üret · Tabloları dışa aktar (bcp out) · Tabloları dışa aktar (bcp out) · Hedef tabloları kontrol et …
- Sorgu sonucunu dışa aktarma (queryout) — Sorgu sonucunu dosyaya yaz (bcp queryout) · Sorgu sonucunu dosyaya yaz (bcp queryout)
- Şema + veri (.bacpac) — Veritabanını .bacpac olarak dışa aktar (Export) · Veritabanını .bacpac olarak dışa aktar (Export) · Hedef veritabanını oluştur (yoksa) · Hedefe .bacpac'i yükle (Import) · Hedefe .bacpac'i yükle (Import) · Hedef veritabanındaki tabloları ve satır sayılarını kontrol et
- Yalnız şema (.dacpac) — Şemayı .dacpac olarak çıkar (Extract) · Şemayı .dacpac olarak çıkar (Extract) · Hedef veritabanını oluştur (yoksa) · Hedefe göre değişiklik betiği üret (Script) · Hedefe göre değişiklik betiği üret (Script) · Şemayı hedefe uygula (Publish) …
- Sonrası — Export dosyalarını temizle · Export dosyalarını temizle