Aracılığıyla paylaş


SQL Server, S3 uyumlu nesne depolama için URL üzerinden yedekleme yapma

Şunlar için geçerlidir: SQL Server 2022 (16.x)

Bu makalede, S3 uyumlu nesne depolama alanını yedekleme hedefi olarak kullanmak için gereken kavramlar, gereksinimler ve bileşenler tanıtilmektedir. Yedekleme ve geri yükleme işlevi, SQL Server'ın Azure Blob Depolama için URL'ye yedeklemesi ile yedekleme cihaz türü olarak çalışmaya kavramsal olarak benzerdir.

Desteklenen platformlar hakkında bilgi için bkz. S3 uyumlu nesne depolamasağlayıcıları.

Genel Bakış

SQL Server 2022 (16.x) veri platformuna nesne depolama tümleştirmesi sunarak SQL Server'ı Azure Depolama'ya ek olarak S3 uyumlu nesne depolama ile tümleştirmenizi sağlar. Bu tümleştirmeyi sağlamak için SQL Server, S3 uyumlu nesne depolamanın herhangi bir sağlayıcısına bağlanmak için S3 REST API'sini kullanan bir S3 bağlayıcısını destekler. SQL Server 2022 (16.x), REST API kullanarak yeni S3 bağlayıcısı için destek ekleyerek mevcut BACKUP/RESTORE TO/FROM URL söz dizimini genişletir.

S3 uyumlu kaynaklara işaret eden URL'ler, S3 bağlayıcısının kullanıldığını belirtmek için önek olarak s3:// eklenir. ile başlayan s3:// URL'ler her zaman temel alınan protokolün olduğunu httpsvarsayar.

Parça numaraları ve dosya boyutu sınırlamaları

Verileri depolamak için S3 uyumlu nesne depolama sağlayıcısının, Azure Blob Depolama'daki blok bloblarına benzer şekilde parçaları olarak adlandırılan birden çok bloktaki dosyaları bölmesi gerekir.

Her dosya 10.000 parçaya kadar bölünebilir, her parça boyutu 5 MB ile 20 MB arasında değişir, bu aralık MAXTRANSFERSIZE parametresi aracılığıyla T-SQL BACKUP komutu tarafından denetlenür. varsayılan değeri MAXTRANSFERSIZE 10 MB'tır, bu nedenle her bölümün varsayılan boyutu 10 MB'tır. Bu değer maksimum aktarım boyutunu belirtir ancak gönderilen her bölümün 10 MB olduğunu garanti etmez. Parçanın boyutu, verilerin bitişikliği tarafından etkilenir. Örneğin, 2 MB veriye bitişik 4 MB veri varsa, 5 MB'lık minimum boyut bölümüne ulaşıldıktan sonra 6 MB gönderilir. Alternatif olarak, 12 MB bitişik dat varsa, maksimum boyuta (10 MB) kadar veri gönderilir ve kalan 2 MB sonraki bölümde gönderilir. S3 bağlayıcısı her zaman mümkün olan en büyük veri boyutunu göndermeye çalışır, ancak değeri asla aşmaz MAXTRANSFERSIZE .

Tek bir dosyanın desteklenen en büyük boyutu 10.000 parçanın * MAXTRANSFERSIZE sonucudur. Daha büyük bir dosyayı yedeklemek gerekirse, dosya en fazla 64 URL olacak şekilde bölünmeli veya şeritlenmelidir. Bir dosyanın desteklenen en büyük boyutu 10.000 parça * * MAXTRANSFERSIZE URL'dir.

Uyarı

MAXTRANSFERSIZE değerlerini değiştirmek için COMPRESSION kullanılması gereklidir.

S3 uç noktası için önkoşullar

S3 uç noktası aşağıdaki gibi yapılandırılmalıdır:

  • TLS yapılandırılmalıdır. Tüm bağlantıların HTTP üzerinden değil HTTPS üzerinden güvenli bir şekilde iletileceği varsayılır. Uç nokta, SQL Server İşletim Sistemi Konağı'nda yüklü bir sertifika tarafından doğrulanır.
  • İşlemi gerçekleştirmek için uygun izinlere sahip S3 uyumlu nesne depolamada oluşturulan kimlik bilgileri. Depolama katmanında oluşturulan kullanıcı ve parola, Access Key ID ve Secret Key ID olarak adlandırılır. S3 uç noktasında kimlik doğrulaması yapmak için her ikisine de ihtiyacınız var.
  • En az bir kova yapılandırıldı. Demetler SQL Server 2022'den (16.x) oluşturulamaz veya yapılandırılamaz.

Güvenlik

Yedekleme izinleri

SQL Server'ı S3 uyumlu nesne depolamaya bağlamak için biri SQL Server'da, diğeri de depolama katmanında olmak üzere iki izin kümesi oluşturulması gerekir.

SQL Server'da, BACKUP veya RESTORE komutları vermek için kullanılan kullanıcı hesabı, kimlik bilgisi izinlerini değiştirme ile db_backupoperator veritabanı rolünde olmalıdır.

Depolama katmanında:

  • AWS S3'te özel bir rol oluşturun ve özel olarak hangi S3 API'sine erişim gerektiğini belirtin. Yedekleme ve geri yükleme şu izinleri gerektirir: ListBucket (Gözat), PutObject (Yazma - yedekleme için).
  • S3 uyumlu diğer depolama alanında kullanıcının (Access Key ID) hem ListBucket hem de WriteOnly izinleri olmalıdır.

İzinleri geri yükleme

Geri yüklenen veritabanı yoksa, kullanıcının RESTORE'yi yürütebilmesi için izinlere sahip CREATE DATABASE olması gerekir. Veritabanı varsa, RESTORE izinleri varsayılan olarak sysadmin ve dbcreator sabit sunucu rollerinin üyeleri ile veritabanının sahibi (dbo)'ne verilir.

GERI YÜKLEME izinleri, üyelik bilgilerinin sunucu tarafından her zaman kullanılabilir olduğu rollere verilir. Sabit veritabanı rolü üyeliği yalnızca veritabanı erişilebilir ve hasarsız olduğunda denetlenebildiğinden ve RESTORE yürütülürken her zaman böyle olmadığından, sabit veritabanı rolünün db_owner üyelerinin RESTORE izinleri yoktur.

Depolama katmanında:

  • AWS S3'te özel bir rol oluşturun ve özel olarak hangi S3 API'sine erişim gerektiğini belirtin. Yedekleme ve geri yükleme şu izinleri gerektirir: ListBucket (Gözat), GetObject (Okuma - geri yükleme için).
  • S3 uyumlu diğer depolama alanında kullanıcının (Access Key ID) hem ListBucket hem de ReadOnly izinlerine sahip olması gerekir.

Desteklenen özellikler

BACKUP ve RESTORE için desteklenen özelliklere üst düzey genel bakış:

  1. Tek bir yedekleme dosyası URL başına en fazla 200.000 MiB olabilir ( MAXTRANSFERSIZE 20 MB olarak ayarlanmıştır).
  2. Yedeklemeler en fazla 64 URL arasında şeritlenebilir.
  3. Yansıtma desteklenir, ancak yalnızca URL'ler arasında yapılabilir. Hem URL hem de DISK kullanarak yansıtma desteklenmez.
  4. Sıkıştırma desteklenir ve önerilir.
  5. Şifreleme desteklenir.
  6. S3 uyumlu nesne depolama ile URL'den geri yüklemenin boyut sınırlaması yoktur.
  7. Veritabanını geri yüklerken , MAXTRANSFERSIZE yedekleme aşamasında atanan değere göre belirlenir.
  8. URL'ler sanal konak veya yol tarzı formatında belirtilebilir.
  9. WITH CREDENTIAL desteklenir.
  10. REGION desteklenir ve varsayılan değerdir us-east-1.
  11. MAXTRANSFERSIZE 5 MB ile 20 MB arasında değişir. 10 MB, S3 bağlayıcısı için varsayılan değerdir.

Yedekleme için desteklenen bağımsız değişkenler

WITH Seçenekler S3 Uç Noktası Notlar
BLOCKSIZE Evet MAXTRANSFERSIZE Parça boyutunu belirler.
BUFFERCOUNT Evet
COMPRESSION Evet
COPY_ONLY Evet
CREDENTIAL Evet
DESCRIPTION Evet
DIFFERENTIAL Evet
ENCRYPTION Evet
FILE_SNAPSHOT Hayı
MAXTRANSFERSIZE Evet 5 MB (5.242.880 Bayt) ile 20 MB (20.971.520 Bayt) arasında varsayılan değer 10 MB 'tır (10.485.760 Bayt).
MEDIADESCRIPTION Evet
MEDIANAME Evet
MIRROR TO Evet Yalnızca başka bir URL MIRROR ile URL çalışır ve DISK desteklenmez.
NAME Evet
NOFORMAT / FORMAT Evet
NOINIT / INIT Hayı Ekleme desteklenmez. Bir yedeğin üzerine yazmak için WITH FORMAT kullanın.
NO_CHECKSUM / CHECKSUM Evet
NO_TRUNCATE Evet
REGION Evet Varsayılan değer us-east-1 olarak belirlenmiştir. BACKUP_OPTIONS ile birlikte kullanılmalıdır.
STATS Evet

Geri yükleme için desteklenen bağımsız değişkenler

WITH Seçenekler S3 Uç Noktası Notlar
BLOCKSIZE Evet MAXTRANSFERSIZE Parça boyutunu belirler.
BUFFERCOUNT Hayı
CHECKSUM / NO_CHECKSUM Evet
CREDENTIAL Evet
ENABLE_BROKER / ERROR_BROKER_CONVERSATIONS / NEW_BROKER Evet
FILE Hayı Mantıksal adlar RESTORE FROM URL ile desteklenmiyor.
FILESTREAM Evet
KEEP_CDC Evet
KEEP_REPLICATION Evet
LOADHISTORY Evet
MAXTRANSFERSIZE Hayı
MEDIANAME Evet
MEDIAPASSWORD Hayı SQL Server 2012'nin önceki sürümlerinde alınan bazı yedeklemeler için gereklidir.
MOVE Evet
PARTIAL Evet
PASSWORD Hayı SQL Server 2012'nin önceki sürümlerinde alınan bazı yedeklemeler için gereklidir.
RECOVERY / NORECOVERY / STANDBY Evet
REGION Evet Varsayılan değer us-east-1 olarak belirlenmiştir. RESTORE_OPTIONS ile birlikte kullanılmalıdır.
REPLACE Evet
RESTART Evet
RESTRICTED_USER Evet
REWIND / NOREWIND Hayı
STATS Evet
STOP_ON_ERROR / CONTINUE_AFTER_ERROR Evet
STOPAT / STOPATMARK / STOPBEFOREMARK Evet
UNLOAD / NOUNLOAD Hayı

Bölge

S3 uyumlu nesne depolama sağlayıcınız demet konumu için belirli bir bölgeyi belirleme olanağı sunabilir. Bu isteğe bağlı parametrenin kullanılması, belirli bir demetin hangi bölgeye ait olduğunu belirterek daha fazla esneklik sağlayabilir. Bu parametre WITH ile ya BACKUP_OPTIONS veya RESTORE_OPTIONS birlikte kullanılmasını gerektirir. Bu seçenekler için değerin JSON biçiminde bildirilmesi gerekir. Bu, S3 uyumlu bir depolama sağlayıcısının aynı evrensel URL'ye sahip olabileceği ancak birkaç bölgeye dağıtılabildiği senaryolara olanak tanır. Bu durumda, yedekleme veya geri yükleme komutu, URL'yi değiştirmeye gerek kalmadan belirtilen bölgelere işaret etti.

Hiçbir değer bildirilmemişse, us-east-1 varsayılan olarak atanır.

Yedekleme örneği:

WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-1"}}'

Geri yükleme örneği:

WITH RESTORE_OPTIONS = '{"s3": {"region":"us-west-1"}}'

Linux desteği

SQL Server, kullandığı HTTP REST API'lerinin istemcisini uygulamak için WinHttp kullanır. Uç nokta tarafından sunulan TLS sertifikalarının doğrulanması için işletim sistemi sertifika deposuna http(s) dayanır. Ancak, Linux üzerinde SQL Server CA, /var/opt/mssql/security/ca-certificates konumunda oluşturulacak önceden tanımlanmış bir konuma yerleştirilmelidir. Fakat bu klasörde yalnızca ilk 50 sertifika depolanabilir ve desteklenebilir. SQL Server işlemi başlatılmadan önce CA'nın yerinde olması gerekir.

SQL Server, başlatma sırasında klasördeki sertifikaları okur ve güven deposuna ekler.

Yalnızca süper kullanıcının klasöre yazabilmesi gerekirken, mssql kullanıcısının okuyabilmesi gerekir.

Desteklenmeyen özellikler

  • Güvenli http olmayan bir URL ile S3 uyumlu nesne depolamaya yedekleme desteklenmez. Müşteriler S3 ana bilgisayarlarını bir https URL ile ayarlamakla sorumludur ve bu uç nokta SQL Server işletim sistemi konağına yüklenmiş bir sertifika tarafından doğrulanır.
  • S3 uyumlu nesne depolamaya yedekleme, SQL Server Express ve Gelişmiş Hizmetler ile SQL Server Express sürümlerinde desteklenmez.

Sınırlamalar

S3 uyumlu nesne depolama ile yedekleme ve geri yüklemenin geçerli sınırlamaları şunlardır:

  • S3 Standart REST API'sinin geçerli sınırlaması nedeniyle, BACKUP T-SQL komutu çalışırken müşterinin S3 uyumlu nesne deposunda (devam eden çok parçalı karşıya yükleme işlemi nedeniyle) oluşturulan geçici kaydedilmemiş veri dosyaları, yedekleme hataları varsa kaldırılmaz. Bu kaydedilmemiş veri blokları, BACKUP T-SQL komutunun başarısız olması veya iptal olması durumunda S3 uyumlu nesne depolamada kalıcı olarak kalır. Yedekleme başarılı olursa, son yedekleme dosyasını oluşturmak için bu geçici dosyalar nesne deposu tarafından otomatik olarak kaldırılır. Bazı S3 uyumlu depolama sağlayıcıları, geçici dosyaları çöp toplayıcı sistemleri aracılığıyla işler.
  • Toplam URL uzunluğu 259 karakterle sınırlıdır. Tam dize, bağlayıcı adı da dahil olmak üzere bu sınırlamada s3:// sayılır. Bu nedenle kullanılabilir sınır 254 karakterdir. Ancak, sorgu parametrelerinin olası girişine izin vermek için 200 karakterlik bir sınıra bağlı kalmanızı öneririz.
  • SQL kimlik bilgisi adı UTF-16 biçiminde 128 karakterle sınırlıdır.
  • Gizli anahtar kimliğinin : karakteri olmamalıdır.

Dizin yolu stili ve sanal ana bilgisayar stili

S3'e yedekleme, URL'nin hem yol stilinde hem de sanal konak stilinde yazılması için destekler.

Yol stili örneği: s3://<endpoint>:<port>/<bucket>/<backup_file_name>

Sanal konak örneği: s3://<bucket>.<domain>/<backup_file_name>

Örnekler

Kimlik Bilgileri Oluştur

  • Kimlik bilgilerinin adı depolama yolunu sağlamalıdır ve depolama platformuna bağlı olarak bunun için birden çok standart vardır.
  • IDENTITY her zaman S3 bağlayıcısı kullanılırken 'S3 Access Key' olmalıdır.
  • Erişim Anahtarı Kimliği ve Gizli Anahtar Kimliği iki nokta içermemelidir. Erişim Anahtarı Kimliği ve Gizli Anahtar Kimliği, S3 uyumlu nesne depolamada oluşturulan kullanıcı ve paroladır.
  • Yalnızca alfasayısal değerlere izin verilir.
  • Erişim Anahtarı Kimliği'nin S3 uyumlu nesne depolama üzerinde uygun izinlere sahip olması gerekir.

S3 uyumlu nesne depolama uç noktasıyla kimlik doğrulaması için sunucu düzeyinde kimlik bilgileri oluşturmak için CREATE CREDENTIAL kullanın.

USE [master];
CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>]
WITH
        IDENTITY    = 'S3 Access Key',
        SECRET      = '<AccessKeyID>:<SecretKeyID>';
GO

BACKUP DATABASE [SQLTestDB]
TO      URL = 's3://<endpoint>:<port>/<bucket>/SQLTestDB.bak'
WITH    FORMAT /* overwrite any existing backup sets */
,       STATS = 10
,       COMPRESSION;

Ancak AWS S3 iki farklı URL standardını destekler.

  • S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER> (varsayılan)
  • S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>

AWS S3 için kimlik bilgilerini başarıyla oluşturmaya yönelik birden çok yaklaşım vardır.

-- S3 bucket name: datavirtualizationsample
-- S3 bucket region: us-west-2
-- S3 bucket folder: backup

CREATE CREDENTIAL [s3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO

BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup/AdventureWorks2022.bak'
WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO

Veya

CREATE CREDENTIAL [s3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO

BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup/AdventureWorks2022.bak'
WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO

URL'ye yedekleme

Aşağıdaki örnek, nesne depolama uç noktasına birden çok dosya arasında şeritli tam veritabanı yedeklemesi gerçekleştirir:

BACKUP DATABASE <db_name>
TO      URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
--
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_64.bak'
WITH    FORMAT -- overwrite
,       STATS               = 10
,       COMPRESSION;

URL'den geri yükleme

Aşağıdaki örnek, nesne depolama uç noktası konumundan bir veritabanı geri yüklemesi gerçekleştirir:

RESTORE DATABASE <db_name>
FROM    URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
--
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_64.bak'
WITH    REPLACE -- overwrite
,       STATS  = 10;

Şifreleme ve sıkıştırma seçenekleri

Aşağıdaki örnek, AdventureWorks2025 veritabanının şifreleme, 20 MB büyüklük ve sıkıştırma MAXTRANSFERSIZE şeklinde nasıl yedekleneceğini ve geri yükleneceğini göstermektedir:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = <password>;
GO

CREATE CERTIFICATE AdventureWorks2022Cert
    WITH SUBJECT = 'AdventureWorks2022 Backup Certificate';
GO
-- Backup database
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022_Encrypt.bak'
WITH FORMAT, MAXTRANSFERSIZE = 20971520, COMPRESSION,
ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = AdventureWorks2022Cert)
GO

-- Restore database
RESTORE DATABASE AdventureWorks2022
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022_Encrypt.bak'
WITH REPLACE

Yedekleme ve geri yükleme için bölge kullanma

Aşağıdaki örnek AdventureWorks2025 kullanılarak REGION_OPTIONS veritabanının nasıl yedekleneceği ve geri yükleneceğini göstermektedir:

Her BACKUP / RESTORE komut içinde bölgeyi parametreleştirebilirsiniz. S3'e özgü bölge dizesini BACKUP_OPTIONS ve RESTORE_OPTIONS içinde not edin; örneğin, '{"s3": {"region":"us-west-2"}}'. Varsayılan bölge şeklindedir us-east-1. Basit bir örnek:

-- Backup Database
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022.bak'
WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}'

-- Restore Database
RESTORE DATABASE AdventureWorks2022
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022.bak'
WITH 
  MOVE 'AdventureWorks2022' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022.mdf'
, MOVE 'AdventureWorks2022_log' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022.ldf'
, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'

Örneğin:

-- S3 bucket name: datavirtualizationsample
-- S3 bucket region: us-west-2
-- S3 bucket folder: backup

CREATE CREDENTIAL   [s3://datavirtualizationsample.s3.amazonaws.com/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO

BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
WITH
    BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}' -- REGION AS PARAMETER)
, COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO

RESTORE DATABASE AdventureWorks2022_1 
FROM URL = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
WITH 
  MOVE 'AdventureWorks2022' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.mdf'
, MOVE 'AdventureWorks2022_log' 
  TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.ldf'
, STATS = 10, RECOVERY
, REPLACE, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'; -- REGION AS PARAMETER)
GO
  • SQL Server'ı S3 uyumlu nesne depolama en iyi yöntemleri ve sorun giderme için URL'ye yedekleme
  • SQL Server'ı Microsoft Azure Blob Depolama en iyi yöntemleri ve sorun giderme için URL'ye yedekleme
  • SERTİFİKA OLUŞTUR (Transact-SQL)
  • Microsoft Azure Blob Depolama URL'sine SQL Server yedeklemesi