İÇİNDEKİLER
- •Rutin DBA işlerinizi otomatikleştirmek mi istiyorsunuz?
- •sqlcmd’nin İki Sürümü
- •Temel Bağlantı ve Sorgu
- •Otomasyon İçin En Önemli Parametreler
- •Script Değişkenleri
- •sqlcmd Komutları: :r, :setvar, :connect, :on error
- •Şifreleme ve Sertifika Hataları
- •Pratik Kullanım Senaryoları
- •Tekrarlayan işleri güvenilir script’lere dönüştürün
SSMS günlük işlerin çoğu için yeterlidir; ama aynı script’i on sunucuda çalıştırmak, bir bakım işini zamanlamak, bir deployment adımını otomatikleştirmek ya da sunucu yanıt vermezken içeri girmek gerektiğinde komut satırı öne çıkar. sqlcmd, Microsoft’un SQL Server için sunduğu komut satırı aracıdır: T-SQL komutlarını ve script dosyalarını çalıştırır, sonuçları dosyaya yazar, değişkenlerle parametrelenebilir ve hata durumunda çıkış kodu döndürür.
Bu rehberde sqlcmd’nin temel kullanımını, otomasyon için en çok işe yarayan parametreleri, script değişkenlerini, yeni sürücülerle gelen şifreleme varsayılanını ve güvenli kullanım için dikkat edilmesi gerekenleri anlatıyoruz.
Rutin DBA işlerinizi otomatikleştirmek mi istiyorsunuz?
Aryasoft; bakım, deployment ve raporlama işlerini tekrarlanabilir script'lere ve izlenebilir job'lara dönüştürür.
sqlcmd’nin İki Sürümü
Bugün iki sqlcmd vardır:
- sqlcmd (ODBC): SQL Server kurulumuyla ve Microsoft Command Line Utilities paketiyle gelen klasik sürüm. ODBC sürücüsünü kullanır.
- sqlcmd (Go): Windows, Linux ve macOS’ta çalışan, tek bir çalıştırılabilir dosyadan oluşan yeni sürüm. Klasik parametrelerin büyük çoğunluğunu destekler; ayrıca yerel geliştirme için konteyner oluşturma gibi ek komutlar sunar.
Hangisini kullandığınızı sqlcmd -? çıktısından görebilirsiniz. Bu yazıdaki örnekler iki sürümde de çalışır.
Temel Bağlantı ve Sorgu
# Windows kimlik doğrulaması ile tek bir sorgu çalıştırıp çık
sqlcmd -S SUNUCU -E -Q "SELECT @@SERVERNAME, @@VERSION"
# Adlandırılmış instance ve belirli bir veritabanı
sqlcmd -S SUNUCU\InstanceAdi -E -d SatisDB -Q "SELECT COUNT(*) FROM dbo.Siparis"
# Etkileşimli oturum (komutları yazıp GO ile çalıştırırsınız)
sqlcmd -S SUNUCU -E
-Q sorguyu çalıştırıp çıkar, -q ise sorguyu çalıştırdıktan sonra etkileşimli oturumda kalır. -E Windows kimlik doğrulamasını (trusted connection) kullanır.
Otomasyon İçin En Önemli Parametreler
| Parametre | Ne yapar |
|---|---|
| -i dosya.sql | Script dosyasını çalıştırır; birden fazla dosya virgülle verilebilir |
| -o sonuc.txt | Çıktıyı dosyaya yazar |
| -b | Hata olduğunda betiği durdurur ve sıfırdan farklı çıkış kodu döndürür |
| -v ad=”değer” | Script değişkenine değer verir |
| -W, -s “,”, -h -1 | Boşlukları kırpar, ayırıcıyı belirler, başlık satırını kaldırır (CSV çıktısı için) |
| -l saniye | Bağlantı zaman aşımı |
| -A | Dedicated Admin Connection ile bağlanır |
-b parametresi otomasyonda en çok atlanan ve en önemli parametredir. Onsuz bir script hata verse bile sqlcmd başarıyla bitmiş gibi çıkabilir; zamanlanmış görev ya da CI/CD hattı hatayı hiç görmez.
sqlcmd -S SUNUCU -E -b -i deploy.sql -o deploy_log.txt
if ($LASTEXITCODE -ne 0) { Write-Error "Deployment başarısız, log: deploy_log.txt"; exit 1 }
Script Değişkenleri
Aynı script’i farklı ortamlarda çalıştırmak için değerleri dışarıdan verin. Script içinde değişkenler $(Ad) biçiminde kullanılır:
-- yedek_al.sql
BACKUP DATABASE [$(DbName)]
TO DISK = N'$(BackupPath)$(DbName)_copy.bak'
WITH COPY_ONLY, COMPRESSION, CHECKSUM;
sqlcmd -S SUNUCU -E -b -i yedek_al.sql -v DbName="SatisDB" BackupPath="D:\Backup\"
sqlcmd Komutları: :r, :setvar, :connect, :on error
sqlcmd, T-SQL’in yanında iki nokta ile başlayan kendi komutlarını da tanır. Bunlar büyük deployment script’lerini düzenli tutar:
:on error exit
:setvar Ortam "TEST"
PRINT N'Ortam: $(Ortam)';
-- Diğer dosyaları sırayla dahil et
:r .\01_tablolar.sql
:r .\02_viewlar.sql
:r .\03_procedureler.sql
-- Aynı script içinde başka bir sunucuya geç
:connect RAPORSUNUCU
SELECT @@SERVERNAME;
Bu komutları SSMS’te de kullanabilirsiniz: Query › SQLCMD Mode açıldığında sorgu penceresi sqlcmd sözdizimini tanır. Böylece script’i önce SSMS’te deneyip sonra komut satırından aynen çalıştırabilirsiniz.
Şifreleme ve Sertifika Hataları
Güncel sqlcmd sürümleri, yeni ODBC sürücüleri gibi bağlantıyı varsayılan olarak şifreler ve sunucu sertifikasını doğrular. Sunucu kendi ürettiği bir sertifika kullanıyorsa bağlantı sertifika hatasıyla düşer. -C parametresi sertifikaya güvenerek bağlanır; ancak doğrulamayı atladığı için yalnızca geçici bir çözümdür.
Uyarı
-C ile sertifika doğrulamasını atlamak ya da -P ile parolayı komut satırına yazmak, script’leri pratikleştirir ama güvenliği zayıflatır. Komut satırındaki parola işlem listesinde ve geçmiş dosyalarında görünür. Mümkünse Windows kimlik doğrulaması (-E) kullanın; SQL kimlik doğrulaması gerekiyorsa parolayı SQLCMDPASSWORD ortam değişkeniyle ya da bir kasadan okuyarak verin. Kalıcı çözüm, sunucuya güvenilir bir sertifika atamaktır.
Sertifika hatalarının arka planını bağlantı hataları rehberimizde anlatıyoruz.
Pratik Kullanım Senaryoları
- Çok sunuculu kontroller: Sunucu listesini bir dosyadan okuyup aynı kontrol script’ini her birinde çalıştıran bir PowerShell döngüsü.
- Deployment:
:rile sıralanmış script’ler,-bve:on error exitile ilk hatada duran güvenli bir yayın. - Zamanlanmış işler: Agent’ın CmdExec adımlarında ya da Windows Task Scheduler’da çıktısı dosyaya yazılan bakım script’leri.
- Kriz anı: Sunucu yanıt vermezken
sqlcmd -S SUNUCU -E -A -d masterile DAC üzerinden bağlanmak. - Dışa aktarma:
-W -s "," -h -1ile hızlı CSV çıktısı. Büyük veri aktarımları için bcp daha uygundur.
İpucu
PowerShell ile çalışıyorsanız SqlServer modülündeki Invoke-Sqlcmd cmdlet’i sonuçları nesne olarak döndürür; sonuçları filtrelemek, tablolaştırmak ya da başka sistemlere aktarmak gerektiğinde metin çıktısını ayrıştırmaktan daha pratiktir.
İlgili Yazılar
SQL Server Otomasyon
Tekrarlayan işleri güvenilir script’lere dönüştürün
Aryasoft’un kıdemli DBA ekibi bakım, deployment ve raporlama işlerinizi hata yönetimi olan, loglanan ve izlenen script’lere ve job’lara dönüştürür.