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
danSecret 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
:
- Satu file cadangan dapat mencapai 200.000 MiB per URL (dengan
MAXTRANSFERSIZE
diatur ke 20 MB). - Cadangan dapat dilucuti di maksimum 64 URL.
- Pencerminan didukung, tetapi hanya di seluruh URL. Pencerminan menggunakan URL dan DISK tidak didukung.
- Pemadatan didukung dan direkomendasikan.
- Enkripsi didukung.
- Pulihkan dari URL dengan penyimpanan objek yang kompatibel dengan S3 tidak memiliki batasan ukuran.
- Saat Anda memulihkan database,
MAXTRANSFERSIZE
ditentukan oleh nilai yang ditetapkan selama fase pencadangan. - URL dapat ditentukan baik dalam format host virtual atau gaya jalur.
WITH CREDENTIAL
tidak didukung.REGION
didukung dan nilai defaultnya adalahus-east-1
.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 | |
COMPRESSION |
Y | |
COPY_ONLY |
Y | |
CREDENTIAL |
Y | |
DESCRIPTION |
Y | |
DIFFERENTIAL |
Y | |
ENCRYPTION |
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 | |
MEDIANAME |
Y | |
MIRROR TO |
Y | Hanya berfungsi dengan URL lain, MIRROR dengan URL dan DISK tidak didukung. |
NAME |
Y | |
NOFORMAT / FORMAT |
Y | |
NOINIT / INIT |
N | Penambung tidak didukung. Untuk menimpa cadangan, gunakan WITH FORMAT . |
NO_CHECKSUM / CHECKSUM |
Y | |
NO_TRUNCATE |
Y | |
REGION |
Y | Nilai default us-east-1 . Harus digunakan dengan BACKUP_OPTIONS . |
STATS |
Y |
Argumen yang didukung untuk pemulihan
Opsi WITH |
Titik Akhir S3 | Catatan |
---|---|---|
BLOCKSIZE |
Y | MAXTRANSFERSIZE menentukan ukuran Bagian. |
BUFFERCOUNT |
N | |
CHECKSUM / NO_CHECKSUM |
Y | |
CREDENTIAL |
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 | |
MEDIANAME |
Y | |
MEDIAPASSWORD |
N | Diperlukan untuk beberapa cadangan yang diambil dalam versi sebelum SQL Server 2012. |
MOVE |
Y | |
PARTIAL |
Y | |
PASSWORD |
N | Diperlukan untuk beberapa cadangan yang diambil dalam versi sebelum SQL Server 2012. |
RECOVERY / NORECOVERY / STANDBY |
Y | |
REGION |
Y | Nilai default us-east-1 . Harus digunakan dengan RESTORE_OPTIONS . |
REPLACE |
Y | |
RESTART |
Y | |
RESTRICTED_USER |
Y | |
REWIND / NOREWIND |
N | |
STATS |
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. CA harus diberlakukan sebelum proses SQL Server dimulai.
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 denganhttps
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.
Batasan
Berikut ini adalah batasan pencadangan dan pemulihan saat ini dengan penyimpanan objek yang kompatibel dengan S3:
- 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 file sementara melalui sistem pengumpul sampah mereka.
- 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. - Nama kredensial SQL dibatasi oleh 128 karakter dalam format UTF-16.
- 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"}}'
Contohnya:
-- 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
Konten terkait
- SQL Server mencadangkan ke URL untuk praktik terbaik dan pemecahan masalah penyimpanan objek yang kompatibel dengan S3
- SQL Server mencadangkan ke URL untuk praktik terbaik dan pemecahan masalah Microsoft Azure Blob Storage
- BUAT SERTIFIKAT (Transact-SQL)
- Pencadangan SQL Server ke URL untuk Microsoft Azure Blob Storage