Pencadangan SQL Server ke URL untuk penyimpanan objek yang kompatibel dengan S3

Berlaku untuk: SQL Server 2022 (16.x)

Artikel ini memperkenalkan konsep, persyaratan, dan komponen yang diperlukan untuk menggunakan penyimpanan objek yang kompatibel dengan S3 sebagai tujuan pencadangan. Fungsionalitas pencadangan dan pemulihan secara konseptual mirip dengan bekerja dengan cadangan SQL Server ke URL untuk Azure Blob Storage sebagai jenis perangkat cadangan.

Untuk informasi tentang platform yang didukung, lihat penyedia penyimpanan objek yang kompatibel dengan S3.

Gambaran Umum

SQL Server 2022 (16.x) memperkenalkan integrasi penyimpanan objek ke platform data, memungkinkan Anda mengintegrasikan SQL Server dengan penyimpanan objek yang kompatibel dengan S3 selain Azure Storage. Untuk menyediakan integrasi ini, SQL Server mendukung konektor S3, yang menggunakan S3 REST API untuk terhubung ke penyedia penyimpanan objek yang kompatibel dengan S3. SQL Server 2022 (16.x) memperluas sintaks BACKUP/RESTORE TO/FROM URL yang ada dengan menambahkan dukungan untuk konektor S3 baru menggunakan REST API.

URL yang menunjuk ke sumber daya yang kompatibel dengan S3 diawali dengan s3:// untuk menunjukkan bahwa konektor S3 sedang digunakan. URL yang dimulai dengan s3:// selalu mengasumsikan bahwa protokol yang mendasar adalah https.

Nomor bagian dan batasan ukuran file

Untuk menyimpan data, penyedia penyimpanan objek yang kompatibel dengan S3 harus membagi file dalam beberapa blok yang disebut bagian, mirip dengan blob blok di Azure Blob Storage.

Setiap file dapat dibagi hingga 10.000 bagian, setiap ukuran bagian berkisar dari 5 MB hingga 20 MB, rentang ini dikendalikan oleh perintah T-SQL BACKUP melalui parameter MAXTRANSFERSIZE. Nilai MAXTRANSFERSIZE default adalah 10 MB, oleh karena itu ukuran default setiap bagian adalah 10 MB.

Ukuran maksimum yang didukung dari satu file adalah hasil dari 10.000 bagian * MAXTRANSFERSIZE, jika diperlukan untuk mencadangkan file yang lebih besar, file harus dibagi/bergaris hingga 64 URL. Ukuran maksimum maksimum file yang didukung adalah 10.000 bagian * MAXTRANSFERSIZE * URL.

Catatan

Penggunaan KOMPRESI diperlukan untuk mengubah MAXTRANSFERSIZE nilai.

Prasyarat untuk titik akhir S3

Titik akhir S3 harus dikonfigurasi sebagai berikut:

  • TLS harus dikonfigurasi. Diasumsikan bahwa semua koneksi akan ditransmisikan dengan aman melalui HTTPS bukan HTTP. Titik akhir divalidasi oleh sertifikat yang diinstal pada Host OS SQL Server.
  • Kredensial yang dibuat pada penyimpanan objek yang kompatibel dengan S3 dengan izin yang tepat untuk melakukan operasi. Pengguna dan kata sandi yang dibuat pada lapisan penyimpanan diberi nama Access Key ID dan Secret Key ID. Anda memerlukan keduanya untuk mengautentikasi terhadap titik akhir S3.
  • Setidaknya satu wadah telah dikonfigurasi. Wadah tidak dapat dibuat atau dikonfigurasi dari SQL Server 2022 (16.x).

Keamanan

Izin pencadangan

Untuk menyambungkan SQL Server ke penyimpanan objek yang kompatibel dengan S3, dua set izin perlu dibuat, satu di SQL Server dan juga pada lapisan penyimpanan.

Di SQL Server, akun pengguna yang digunakan untuk mengeluarkan perintah BACKUP atau RESTORE harus berada dalam peran database db_backupoperator dengan Mengubah izin kredensial apa pun.

Pada lapisan penyimpanan:

  • Di AWS S3, buat peran kustom dan secara khusus menyatakan API S3 mana yang memerlukan akses. Pencadangan dan pemulihan memerlukan izin ini: ListBucket (Telusuri), PutObject (Tulis - untuk pencadangan).
  • Di penyimpanan lain yang kompatibel dengan S3, pengguna (Access Key ID) harus memiliki izin ListBucket dan WriteOnly .

Pulihkan izin

Jika database yang sedang dipulihkan tidak ada, pengguna harus memiliki CREATE DATABASE izin untuk dapat menjalankan RESTORE. Jika database ada, izin RESTORE default ke anggota sysadmin peran server tetap dan dbcreator pemilik (dbo) database.

Izin RESTORE diberikan kepada peran di mana informasi keanggotaan selalu tersedia untuk server. Karena keanggotaan peran database tetap hanya dapat diperiksa ketika database dapat diakses dan tidak rusak, yang tidak selalu terjadi ketika RESTORE dijalankan, anggota db_owner peran database tetap tidak memiliki izin RESTORE.

Pada lapisan penyimpanan:

  • Di AWS S3, buat peran kustom dan secara khusus menyatakan API S3 mana yang memerlukan akses. Pencadangan dan pemulihan memerlukan izin ini: ListBucket (Telusuri), GetObject (Baca - untuk pemulihan).
  • Di penyimpanan lain yang kompatibel dengan S3, pengguna (Access Key ID) harus memiliki izin ListBucket dan ReadOnly .

Fitur yang didukung

Gambaran umum tingkat tinggi dari fitur yang didukung untuk BACKUP dan RESTORE:

  1. Satu file cadangan dapat mencapai 200.000 MiB per URL (dengan MAXTRANSFERSIZE diatur ke 20 MB).
  2. Cadangan dapat dilucuti di maksimum 64 URL.
  3. Pencerminan didukung, tetapi hanya di seluruh URL. Pencerminan menggunakan URL dan DISK tidak didukung.
  4. Pemadatan didukung dan direkomendasikan.
  5. Enkripsi didukung.
  6. Pulihkan dari URL dengan penyimpanan objek yang kompatibel dengan S3 tidak memiliki batasan ukuran.
  7. Saat Anda memulihkan database, MAXTRANSFERSIZE ditentukan oleh nilai yang ditetapkan selama fase pencadangan.
  8. URL dapat ditentukan baik dalam format host virtual atau gaya jalur.
  9. WITH CREDENTIAL tidak didukung.
  10. REGION didukung dan nilai defaultnya adalah us-east-1.
  11. MAXTRANSFERSIZE berkisar antara 5 MB hingga 20 MB. 10 MB adalah nilai default untuk konektor S3.

Argumen yang didukung untuk pencadangan

Opsi WITH Titik Akhir S3 Catatan
BLOCKSIZE Y MAXTRANSFERSIZE menentukan ukuran Bagian.
BUFFERCOUNT Y
PEMADATAN Y
COPY_ONLY Y
INFORMASI MASUK Y
DESKRIPSI Y
DIFERENSIAL Y
ENKRIPSI Y
FILE_SNAPSHOT N
MAXTRANSFERSIZE Y Dari 5 MB (5.242.880 Byte) hingga 20 MB (20.971.520 Byte), nilai defaultnya adalah 10 MB (10.485.760 Byte).
MEDIADESCRIPTION Y
NAMA MEDIA Y
CERMIN KE Y Hanya berfungsi dengan URL lain, MIRROR dengan URL dan DISK tidak didukung.
NAMA Y
NOFORMAT/FORMAT Y
NOINIT/INIT N Penambung tidak didukung. Untuk menimpa cadangan, gunakan WITH FORMAT.
NO_CHECKSUM/CHECKSUM Y
NO_TRUNCATE Y
WILAYAH Y Nilai default us-east-1. Harus digunakan dengan BACKUP_OPTIONS.
STATUS Y

Argumen yang didukung untuk pemulihan

Opsi WITH Titik Akhir S3 Catatan
BLOCKSIZE Y MAXTRANSFERSIZE menentukan ukuran Bagian.
BUFFERCOUNT N
CHECKSUM | NO_CHECKSUM Y
INFORMASI MASUK Y
ENABLE_BROKER | ERROR_BROKER_CONVERSATIONS | NEW_BROKER Y
FILE N Nama logika tidak didukung dengan RESTORE FROM URL.
FILESTREAM Y
KEEP_CDC Y
KEEP_REPLICATION Y
LOADHISTORY Y
MAXTRANSFERSIZE Y
NAMA MEDIA Y
MEDIAPASSWORD N Diperlukan untuk beberapa cadangan yang diambil sebelum SQL Server 2012.
MOVE Y
SEBAGIAN Y
KATA SANDI N Diperlukan untuk beberapa cadangan yang diambil sebelum SQL Server 2012.
PEMULIHAN | NORECOVERY | SIAGA Y
WILAYAH Y Nilai default us-east-1. Harus digunakan dengan RESTORE_OPTIONS.
REPLACE Y
HIDUPKAN ULANG Y
RESTRICTED_USER Y
REWIND | NOREWIND N
STATUS Y
STOP_ON_ERROR | CONTINUE_AFTER_ERROR Y
STOPAT | STOPATMARK | STOPBEFOREMARK Y
UNLOAD | NOUNLOAD N

Wilayah

Penyedia penyimpanan objek yang kompatibel dengan S3 Anda dapat menawarkan kemampuan untuk menentukan wilayah tertentu untuk lokasi wadah. Penggunaan parameter opsional ini dapat memberikan lebih banyak fleksibilitas dengan menentukan wilayah mana tempat wadah tertentu berada. Parameter ini memerlukan penggunaan WITH bersama-sama dengan BACKUP_OPTIONS atau RESTORE_OPTIONS. Opsi ini mengharuskan nilai dideklarasikan dalam format JSON. Ini memungkinkan skenario di mana penyedia penyimpanan yang kompatibel dengan S3 dapat memiliki URL universal yang sama tetapi didistribusikan di beberapa wilayah. Dalam hal ini, perintah pencadangan atau pemulihan menunjuk ke wilayah yang ditentukan tanpa perlu mengubah URL.

Jika tidak ada nilai yang dideklarasikan, us-east-1 ditetapkan sebagai default.

Contoh cadangan:

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

Contoh pemulihan:

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

Dukungan Linux

SQL Server menggunakan WinHttp untuk mengimplementasikan klien API HTTP REST yang digunakannya. Ini bergantung pada penyimpanan sertifikat OS untuk validasi sertifikat TLS yang disajikan oleh http(s) titik akhir. Namun, SQL Server di Linux CA harus ditempatkan pada lokasi yang telah ditentukan untuk dibuat di /var/opt/mssql/security/ca-certificates, hanya 50 sertifikat pertama yang dapat disimpan dan didukung di folder ini.

SQL Server membaca sertifikat dari folder selama startup dan menambahkannya ke penyimpanan kepercayaan.

Hanya pengguna super yang dapat menulis di folder, sementara mssql pengguna harus dapat membaca.

Fitur yang tidak didukung

  • Pencadangan ke penyimpanan objek yang kompatibel dengan S3 dengan URL yang tidak aman http tidak didukung. Pelanggan bertanggung jawab untuk menyiapkan host S3 mereka dengan https URL dan titik akhir ini divalidasi oleh sertifikat yang diinstal pada host OS SQL Server.
  • Pencadangan ke penyimpanan objek yang kompatibel dengan S3 tidak didukung di SQL Server Express dan SQL Server Express dengan edisi Layanan Tingkat Lanjut.

Pembatasan

Berikut ini adalah batasan pencadangan dan pemulihan saat ini dengan penyimpanan objek yang kompatibel dengan S3:

  1. Karena keterbatasan S3 Standard REST API saat ini, file data sementara yang tidak dilakukan yang dibuat di penyimpanan objek yang kompatibel dengan S3 pelanggan (karena operasi pengunggahan multibagian yang sedang berlangsung) saat perintah BACKUP T-SQL berjalan, tidak dihapus jika terjadi kegagalan. Blok data yang tidak dikomit ini terus bertahan di penyimpanan objek yang kompatibel dengan S3 jika perintah BACKUP T-SQL gagal atau dibatalkan. Jika pencadangan berhasil, file sementara ini secara otomatis dihapus oleh penyimpanan objek untuk membentuk file cadangan akhir. Beberapa penyedia penyimpanan yang kompatibel dengan S3 menangani ini melalui sistem pengumpul sampah mereka.
  2. Panjang URL total dibatasi hingga 259 karakter. String lengkap dihitung dalam batasan ini, termasuk s3:// nama konektor. Jadi, batas yang dapat digunakan adalah 254 karakter. Namun, sebaiknya tetap pada batas 200 karakter untuk memungkinkan kemungkinan pengenalan parameter kueri.
  3. Nama kredensial SQL dibatasi oleh 128 karakter dalam format UTF-16.
  4. ID kunci rahasia tidak boleh memiliki : karakter.

Gaya jalur dan gaya host virtual

Pencadangan ke S3 mendukung URL yang akan ditulis dalam gaya jalur atau gaya host virtual.

Contoh gaya jalur: s3://<endpoint>:<port>/<bucket>/<backup_file_name>

Contoh host virtual: s3://<bucket>.<domain>/<backup_file_name>

Contoh

Membuat info masuk

  • Nama kredensial harus menyediakan jalur penyimpanan, dan ada beberapa standar untuk ini tergantung pada platform penyimpanan.
  • IDENTITY harus 'S3 Access Key' selalu saat menggunakan konektor S3.
  • ID Kunci Akses dan ID Kunci Rahasia tidak boleh berisi titik dua. ID Kunci Akses dan ID Kunci Rahasia adalah pengguna dan kata sandi yang dibuat pada penyimpanan objek yang kompatibel dengan S3.
  • Hanya nilai alfanumerik yang diizinkan.
  • ID Kunci Akses harus memiliki izin yang tepat pada penyimpanan objek yang kompatibel dengan S3.

Gunakan CREATE CREDENTIAL untuk membuat info masuk tingkat server untuk autentikasi dengan titik akhir penyimpanan objek yang kompatibel dengan S3.

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;

Namun, AWS S3 mendukung dua standar URL yang berbeda.

  • S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER> (default)
  • S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>

Ada beberapa pendekatan untuk berhasil membuat kredensial untuk AWS S3.

-- 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

Atau,

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

Cadangkan ke URL

Contoh berikut melakukan pencadangan database lengkap ke titik akhir penyimpanan objek, bergaris di beberapa file:

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;

Pulihkan dari URL

Contoh berikut melakukan pemulihan database dari lokasi titik akhir penyimpanan objek:

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;

Opsi untuk enkripsi dan pemadatan

Contoh berikut menunjukkan cara mencadangkan dan memulihkan AdventureWorks2022 database dengan enkripsi, MAXTRANSFERSIZE sebagai 20 MB dan kompresi:

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

Menggunakan wilayah untuk pencadangan dan pemulihan

Contoh berikut menunjukkan cara mencadangkan AdventureWorks2022 dan memulihkan database menggunakan REGION_OPTIONS:

Anda dapat membuat parameter wilayah dalam setiap BACKUP/RESTORE perintah. Perhatikan string wilayah khusus S3 di BACKUP_OPTIONS dan RESTORE_OPTIONS, misalnya, '{"s3": {"region":"us-west-2"}}'. Wilayah defaultnya adalah us-east-1. Contoh sederhana:

-- 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"}}'

Misalnya:

-- 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