Microsoft Azure Blob Depolama için URL'ye SQL Server yedekleme: en iyi uygulamalar ve sorun giderme

Şunlar için geçerlidir: SQL Server Azure SQL Yönetilen Örneği

Bu makale, SQL Server yedekleme ve Microsoft Azure Blob Depolama'a geri yükleme işlemleri için en iyi yöntemleri ve sorun giderme ipuçlarını içerir.

SQL Server yedekleme veya geri yükleme işlemleri için Azure Blob Depolama kullanma hakkında daha fazla bilgi için bkz:

Yedeklemeleri yönetme

Aşağıdaki liste, yedeklemeleri yönetmeye yönelik genel önerileri içerir:

  • Blobların üzerine yanlışlıkla yazılmasını önlemek için her yedekleme için benzersiz bir dosya adı kullanın.

  • Kapsayıcı oluşturduğunuzda erişim düzeyini özel olarak ayarlayın; böylece yalnızca gerekli kimlik doğrulama bilgilerini sağlayabilecek kullanıcılar veya hesaplar kapsayıcıdaki blobları okuyabilir veya yazabilir.

  • Azure Sanal Makinesinde çalışan bir SQL Server örneğindeki SQL Server veritabanları için, bölgeler arasında veri aktarımı maliyetlerini önlemek için sanal makineyle aynı bölgede bir depolama hesabı kullanın. Aynı bölgenin kullanılması, yedekleme ve geri yükleme işlemleri için en iyi performansı sağlar.

  • Başarısız yedekleme etkinliği geçersiz bir yedekleme dosyasına neden olabilir. Başarısız yedeklemeleri düzenli aralıklarla belirleyin ve blob dosyalarını silin. Daha fazla bilgi için Etkin kiralamaya sahip yedekleme blob dosyalarını silme bölümüne bakın.

  • WITH COMPRESSION Depolama maliyetlerini ve depolama işlemi maliyetlerini en aza indirmek ve yedekleme süresini azaltmak için seçeneğini kullanın.

  • MAXTRANSFERSIZE ve BLOCKSIZE bağımsız değişkenlerini, Azure Blob Depolama için URL'ye SQL Server yedeklemesi içinde açıklanan değerlere ayarlayın.

  • Blok blob’larını tüm depolama yedekliliği türleriyle (örneğin LRS, ZRS, GRS, RA-GRS ve RA-GZRS) yedekleyebilirsiniz.

Büyük dosyaları işleme

SQL Server yedekleme işlemi, Azure Blob Depolama veri aktarımını iyileştirmek için birden çok iş parçacığı kullanır. Ancak performans, ISV bant genişliği ve veritabanı boyutu gibi faktörlere bağlıdır. Büyük veritabanlarını veya dosya gruplarını şirket içi SQL Server veritabanından yedeklemeyi planlıyorsanız, önce aktarım hızını test edin. Depolama için Azure SLA'sı, blobların dikkate alınması gereken maksimum işlem sürelerine sahiptir.

WITH COMPRESSION Büyük dosyaları yedeklerken Yedeklemeleri Yönet bölümünde önerilen seçeneği kullanın.

URL'ye yedekleme veya URL'den geri yükleme sorunlarını giderme

Azure Blob Depolama'a yedekleme veya geri yükleme sırasında oluşan hataları gidermek için aşağıdaki ipuçlarını kullanın.

Desteklenmeyen seçeneklerden veya sınırlamalardan kaynaklanan hataları önlemek için BACKUP bölümünde, RESTORE ve komutlarına ilişkin sınırlamaları ve desteklenen seçenekleri gözden geçirin.

Başlatma başarısız oldu

Aynı bloba yapılan paralel yedeklemelerden biri "Başlatma başarısız" hatasıyla başarısız olur.

G/Ç cihazı hatası nedeniyle istek gerçekleştirilemedi

Büyük veritabanlarını yedeklerken COMPRESSION, MAXTRANSFERSIZE, BLOCKSIZEve birden çok URL bağımsız değişkenlerini göz önünde bulundurun. Bkz. DLDB'yi Azure Blob Depolama'a geri döndürme.

Hata:

Msg 3202, Level 16, State 1, Line 1
Write on "https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak" failed:
1117(The request could not be performed because of an I/O device error.)
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.

Örnek çözüm:

BACKUP DATABASE TestDb
TO URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak',
   URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_1.bak',
   URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_2.bak'
WITH COMPRESSION,
     MAXTRANSFERSIZE = 4194304,
     BLOCKSIZE = 65536;

Cihazdaki Message Filemark hizalı değil

Sıkıştırılmış bir yedeklemeden geri yükleme yaparken aşağıdaki hatayı görebilirsiniz:

SqlException 3284 occurred. Severity: 16 State: 5
Message Filemark on device 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak' is not aligned.
Re-issue the Restore statement with the same blocksize used to create the backupset: '65536' looks like a possible value.

Bu hatayı çözmek için RESTOREdeyimini BLOCKSIZE = 65536 ile yeniden yürütün.

Başarısız yedekleme etkinliği, aktif kiralara sahip bloblarla sonuçlanabilir.

Üzerinde aktif kiralama olan bloblar nedeniyle yedekleme sırasında hata oluştu: Failed backup activity can result in blobs with active leases.

Bir yedekleme deyimini yeniden denerseniz, yedekleme işlemi aşağıdaki çıkışa benzer bir hatayla başarısız olabilir:

Backup to URL received an exception from the remote endpoint. Exception Message:
The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request.

Etkin kiralaması olan bir yedekleme blob dosyasında geri yükleme deyimi çalıştırmayı denerseniz, geri yükleme işlemi aşağıdaki iletiye benzer bir hatayla başarısız olur:

Exception Message: The remote server returned an error: (409) Conflict.

Bu hata oluştuğunda blob dosyalarını silin. Bu senaryo ve bu sorunun nasıl düzeltileceği hakkında daha fazla bilgi için bkz. Aktif kiralamalara sahip yedekleme blob dosyalarını silme.

İşletim sistemi hatası 50: İstek desteklenmiyor

Veritabanını yedeklerken aşağıdaki nedenlerle hata Operating system error 50(The request is not supported.) görebilirsiniz:

  • Belirtilen depolama hesabı Genel Amaçlı V1/V2 değil.
  • Paylaşılan erişim imzası (SAS) belirtecinin başında bir ? simge vardır. Öyleyse simgeyi kaldırın.
  • Depolama Gezgini veya SQL Server Management Studio (SSMS) kullanarak geçerli makineden depolama hesabına bağlanamazsınız.
  • SAS belirtecine atanan ilkenin süresi doldu. Azure Depolama Gezgini kullanarak yeni bir ilke oluşturun ve ilkeyi kullanarak yeni bir SAS belirteci oluşturun veya kimlik bilgilerini değiştirip yedeklemeyi yeniden deneyin.
  • Güvenilen Kök Sertifikalar deposunda kök sertifika bulunmuyor. Daha fazla bilgi için bkz. Azure Kök Sertifika Yetkilileri.

Kimlik doğrulama hataları

Azure Blob Depolama'a yedekleme veya geri yükleme, kimlik doğrulama bilgilerini depolayan bir kimlik bilgisi gerektirir. SQL Server 2016 (13.x) ve sonraki sürümleri paylaşılan erişim imzası (SAS) belirteci kullanır ve SQL Server Database Engine kimlik bilgilerini kapsayıcı URL'si ile otomatik olarak eşleştirir.

Kimlik bilgileriyle ilgili hatalar aşağıdaki hata iletilerini üretebilir:

Hata numarası Message
3288 Credential name <mycredential> does not exist or user does not have permission to access it.
3289 A Backup device of type URL was specified without a Credential, Backup/Restore operation cannot proceed.

Bu sorunu önlemek için, kimlik bilgisi mevcut değilse onu oluşturun. Örneğin:

IF NOT EXISTS (SELECT *
    FROM sys.credentials
    WHERE name = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>')
CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>]
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<SAS_TOKEN>';

Kimlik bilgisi var, ancak yedekleme komutunu çalıştıran oturum açma bilgilerinin kimlik bilgilerine erişme izinleri yok. db_backupoperator sabit veritabanı rolünde, Alter any credential izinlerine sahip bir hesap kullanın.

Kimlik bilgisinde depolanan bilgiler, yedekleme ve geri yükleme işlemlerinde kullandığınız Azure depolama hesabının özellik değerleriyle eşleşmelidir.

Proxy sunucu hataları

İnternet'e erişmek için Proxy Sunucuları kullanıyorsanız aşağıdaki sorunları görebilirsiniz:

Proxy sunucular tarafından bağlantı kısıtlaması

Ara sunucularda dakika başına bağlantı sayısını sınırlayan ayarlar olabilir. URL’ye yedekleme birden çok iş parçacığı kullanır ve bu sınırı aşabilir. Bu sınır aşılırsa, proxy sunucusu bağlantıyı kapatır. Bu sorunu çözmek için ara sunucu ayarlarını SQL Server ara sunucuyu kullanmaması için değiştirin. Aşağıdaki örneklerde hata günlüğünde görebileceğiniz hata iletileri gösterilir:

Write on "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak" failed: Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.
A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Error could not be gathered from Remote Endpoint.

Msg 3013, Level 16, State 1, Line 2

BACKUP DATABASE is terminating abnormally.
BackupIoRequest::ReportIoError: write failure on backup device 'https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak'. Operating system error Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.

Yaygın hatalar ve çözümler

Sorun Çözüm
Hata 3063: Write to backup block blob device https://storageaccount/container/name.bak failed. Device has reached its limit of allowed blocks. Tam veya diferansiyel yedeklemelerde bu sorunu çözmek için yedekleme hedefinizi birden çok dosya ile şeritleyin. Tüm yedekleme türleri için yedekleme komutunda aşağıdaki parametreleri kullanın: COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536. Yedekleme desteklenen boyut üst sınırına ulaşırsa da bu hata oluşabilir. Örneğin, SQL Server 2022 (16.x) ve önceki sürümlerde maksimum yedekleme boyutu 12,8 TB'tır ve 4 MB MAXTRANSFERSIZE× 50.000 blok × 64 şerit olarak hesaplanır.
Hata 3035: Bir veya birden çok veritabanı için değişiklik yedeklemesi başarısız oluyor. Sql veritabanlarını yedeklemek için Azure Backup yapılandırdıysanız veya yalnızca kopya yedekleme oluşturmayan bir sanal makine (VM) anlık görüntüsü yapılandırdıysanız bu hata oluşur ve bu da bakım planınızın veya SQL aracısı işinizin isteğe bağlı yedeklemelerinin başarısız olmasına neden olur. Bu sorunu gidermek için, SQL Server örneklerini barındıran VM'lerde, kayıt defteri yoluna [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT] ve "USEVSSCOPYBACKUP"="TRUE" ekleyin.
Hata 3201: Cannot open backup device '<url>'. Operating system error 50(The request is not supported.) Depolama Gezgini kullanarak SAS belirtecini yeniden oluşturun: Azure Depolama Gezgini'da, bu ilkeden yeni bir ilke ve yeni bir SAS belirteci oluşturun. Yeni SAS belirtecini kullanarak kimlik bilgilerini yeniden oluşturun ve yedeklemeyi yeniden deneyin. Daha fazla bilgi için bkz. TO URL'si ile BACKUP ilgili bilinen sorunlar. Ağ güvenlik grubunuzun (NSG) veya güvenlik duvarınızın 1433 ve 443 bağlantı noktalarında gelen ve giden bağlantıya izin verdiğinden emin olun.
Hata 3290: Backup to URL received an exception from the remote endpoint. Exception Message: The remote name could not be resolved. Yedeklemeyi yapılandırmak için yanlış bir kimlik bilgisi, gizli dizi veya SAS anahtarı kullanıldıysa bu iletiyi görürsünüz. Kimlik bilgisini silin ve yeniden oluşturun. SQL Server 2016 (13.x) ve sonraki sürümler için SAS kullanın.
Hata 3290: Backup to URL received an exception from the remote endpoint. Exception Message: The remote server returned an error: (400) Bad Request. Sorunu çözmek için depolama hesabının en düşük TLS sürümünü 1.0 (Depolama Hesabı>Yapılandırması>En Düşük TLS Sürümü) olarak değiştirin.
Özel Durum İletisi: The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request. Azure Depolama Gezgini 1 TB blobları belirleyin, kiralamayı sonlandırın, blobu silin ve yedekleme işlemini yeniden deneyin.
Hata: The remote server returned an error: (403) Forbidden. Sorunu çözmek için depolama hesabını, kimlik bilgilerini ve SAS belirtecini yeniden oluşturun.
Yedekleme, bakım planı kullanılırken başarısız oldu. Bakım planları aralıklı olarak başarısız olabilir. Eşdeğer yedeklemeyi doğrudan T-SQL ile çalıştırın. T-SQL yedeklemesi başarılı olursa, bakım planı kullanmak yerine SQL Server Agent işi olarak zamanlayın.
vm sınırlarına ulaşıldı nedeniyle Yedekleme başarısız oldu. Disk IOPS/VM sınırına ulaşıldığına ilişkin hatalar alırsanız yedeklemeler yavaşlayabilir veya başarısız olabilir. IOPS/VM sınırlarını izlemek için Azure İzleyici Metrics kullanın ve gerekirse vm/diski yeniden boyutlandırarak sorunu giderin.