Keyboard and terminal window, representing the sqlcmd command-line tool for SQL Server

sqlcmd: SQL Server Komut Satırı Aracıyla Script Çalıştırma, Otomasyon ve İpuçları

sqlcmd ile SQL Server otomasyonu: iki sürüm, -b ve -v gibi temel parametreler, script değişkenleri, :r ve :connect komutları, sertifika hataları ve kimlik bilgilerinin güvenli kullanımı.

Mart 31, 2023

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.

SQL Server Otomasyon

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.

Destek Alın

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: :r ile sıralanmış script’ler, -b ve :on error exit ile 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 master ile DAC üzerinden bağlanmak.
  • Dışa aktarma: -W -s "," -h -1 ile 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.

SQL Server’a bağlanıp T-SQL komutlarını ve script dosyalarını komut satırından çalıştıran Microsoft aracıdır. Otomasyon, deployment ve zamanlanmış işler için kullanılır.
-b parametresi ilk hatada betiği durdurur ve sıfırdan farklı çıkış kodu döndürür. Script içinde :on error exit komutu da aynı işi görür.
Komut satırında -v Ad=”değer” ile ya da script içinde :setvar Ad “değer” ile tanımlanır ve script’te $(Ad) olarak kullanılır.
Güncel sürümler bağlantıyı varsayılan olarak şifreler ve sertifikayı doğrular. Kalıcı çözüm sunucuya güvenilir bir sertifika atamaktır; -C parametresi doğrulamayı atlayan geçici bir çözümdür.

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.

4.7/5