Memulihkan instance RDS Custom for SQL Server ke titik waktu - Layanan Basis Data Relasional Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memulihkan instance RDS Custom for SQL Server ke titik waktu

Anda dapat mengembalikan instans DB ke titik waktu tertentu (PITR), membuat instans DB baru. Untuk mendukungPITR, instans DB Anda harus mengaktifkan retensi cadangan.

Waktu restorable terbaru untuk instans RDS Custom for SQL Server DB tergantung pada beberapa faktor, tetapi biasanya dalam 5 menit dari waktu saat ini. Untuk melihat waktu restorable terbaru untuk instans DB, gunakan AWS CLI describe-db-instancesperintah dan lihat nilai yang dikembalikan di LatestRestorableTime bidang untuk instans DB. Untuk melihat waktu restorable terbaru untuk setiap instans DB di RDS konsol Amazon, pilih Pencadangan otomatis.

Anda dapat memulihkan ke titik waktu mana pun dalam periode retensi cadangan Anda. Untuk melihat waktu restorasi paling awal untuk setiap instans DB, pilih Pencadangan otomatis di konsol Amazon. RDS

Untuk informasi umum tentang PITR, lihat Memulihkan instans DB ke waktu tertentu untuk Amazon RDS.

PITRpertimbangan untuk RDS Kustom untuk Server SQL

Di RDS Custom for SQL Server, PITR berbeda dalam cara-cara penting berikut dari PITR di AmazonRDS:

  • PITRhanya mengembalikan database dalam instance DB. PITR tidak memulihkan sistem operasi atau file pada drive C:.

  • Untuk instans RDS Custom for SQL Server DB, database dicadangkan secara otomatis dan PITR hanya memenuhi syarat dalam kondisi berikut:

    • Basis data online.

    • Model pemulihannya diatur ke FULL.

    • Dapat ditulis.

    • Memiliki file fisik di drive D:.

    • Tidak tercantum dalam tabel rds_pitr_blocked_databases. Untuk informasi selengkapnya, lihat Membuat database tidak memenuhi syarat untuk PITR.

  • Database PITR yang memenuhi syarat ditentukan oleh urutan ID database mereka. RDSKustom untuk SQL Server memungkinkan hingga 5.000 database per instans DB. Namun, jumlah maksimum database yang dipulihkan oleh PITR operasi untuk instance RDS Custom for SQL Server DB tergantung pada jenis kelas instance. Untuk informasi selengkapnya, lihat Jumlah database yang memenuhi syarat untuk PITR per tipe kelas instans.

    Database lain yang bukan bagian dari PITR dapat dipulihkan dari snapshot DB, termasuk backup snapshot otomatis yang digunakan untuk. PITR

  • Menambahkan database baru, mengganti nama database, atau memulihkan database yang memenuhi syarat untuk PITR memulai snapshot dari instans DB.

  • Jumlah maksimum database yang memenuhi syarat untuk PITR perubahan ketika instance database melewati operasi komputasi skala, tergantung pada jenis kelas instance target. Jika instance ditingkatkan, memungkinkan lebih banyak database pada instance yang memenuhi syaratPITR, snapshot baru akan diambil.

  • Basis data yang dipulihkan memiliki nama yang sama seperti pada instans DB sumber. Anda tidak dapat menentukan nama yang berbeda.

  • AWSRDSCustomSQLServerIamRolePolicymembutuhkan akses ke AWS layanan lain. Untuk informasi selengkapnya, lihat Menambahkan kebijakan akses ke AWSRDSCustomSQLServerInstanceRole.

  • Perubahan zona waktu tidak didukung untuk RDS Kustom untuk SQL Server. Jika Anda mengubah sistem operasi atau zona waktu instans DB, PITR (dan otomatisasi lainnya) tidak berfungsi.

Jumlah database yang memenuhi syarat untuk PITR per tipe kelas instans

Tabel berikut menunjukkan jumlah maksimum database yang memenuhi syarat PITR berdasarkan jenis kelas instance.

Jenis kelas instans Jumlah maksimum database yang PITR memenuhi syarat
db.*.large 100
db.*.xlarge hingga db.*.2xlarge 150
db.*.4xlarge hingga db.*.8xlarge 300
db.*.12xlarge hingga db.*.16xlarge 600
db.*.24xlarge, db.*32xlarge 1000

* Menunjukkan jenis kelas instans yang berbeda.

Jumlah maksimum database yang memenuhi syarat untuk PITR instans DB tergantung pada jenis kelas instance. Jumlahnya berkisar dari 100 pada yang terkecil hingga 1000 pada jenis kelas instance terbesar yang didukung oleh RDS Custom for SQL Server. SQLdatabase sistem server(master, model, msdb, tempdb), tidak termasuk dalam batas ini. Ketika instans DB diskalakan naik atau turun, tergantung pada jenis kelas instans target, RDS Custom akan secara otomatis memperbarui jumlah database yang memenuhi syaratPITR. RDSKustom untuk SQL Server akan mengirim RDS-EVENT-0352 ketika jumlah maksimum database memenuhi syarat untuk PITR perubahan pada instans DB. Untuk informasi selengkapnya, lihat Peristiwa versi mesin kustom.

catatan

PITRdukungan untuk lebih dari 100 database hanya tersedia pada instans DB yang dibuat setelah 26 Agustus 2023. Untuk instance yang dibuat sebelum 26 Agustus 2023, jumlah maksimum database yang memenuhi syarat PITR adalah 100, terlepas dari kelas instancenya. Untuk mengaktifkan PITR dukungan untuk lebih dari 100 database pada instans DB yang dibuat sebelum 26 Agustus 2023, Anda dapat melakukan tindakan berikut:

  • Tingkatkan versi mesin DB ke 15.00.4322.2.v1 atau lebih tinggi

Selama PITR operasi, RDS Custom akan memulihkan semua database yang merupakan bagian dari instans DB sumber PITR pada waktu pemulihan. Setelah instans DB target menyelesaikan operasi pemulihan, jika retensi cadangan diaktifkan, instans DB akan mulai mencadangkan berdasarkan jumlah maksimum database yang memenuhi syarat untuk PITR instans DB target.

Misalnya, jika instans DB Anda berjalan pada db.*.xlarge yang memiliki 200 basis data:

  1. RDSCustom for SQL Server akan memilih 150 database pertama, yang dipesan berdasarkan ID database mereka, untuk PITR cadangan.

  2. Anda memodifikasi instans untuk menaikkan skala hingga db.*.4xlarge.

  3. Setelah operasi komputasi skala selesai, RDS Custom for SQL Server akan memilih 300 database pertama, yang diurutkan berdasarkan ID database mereka, untuk PITR cadangan. Masing-masing dari 200 database yang memenuhi PITR persyaratan persyaratan sekarang akan memenuhi syarat untukPITR.

  4. Sekarang Anda memodifikasi instans untuk menurunkan skala kembali ke db.*.xlarge.

  5. Setelah operasi komputasi skala selesai, RDS Custom for SQL Server akan kembali memilih 150 database pertama, yang diurutkan berdasarkan ID database mereka, untuk PITR cadangan.

Membuat database tidak memenuhi syarat untuk PITR

Anda dapat memilih untuk mengecualikan database individual dariPITR. Untuk melakukan ini, masukkan nilai database_id ke dalam tabel rds_pitr_blocked_databases. Gunakan SQL skrip berikut untuk membuat tabel.

Cara membuat tabel rds_pitr_blocked_databases
  • Jalankan SQL skrip berikut.

    create table msdb..rds_pitr_blocked_databases ( database_id INT NOT NULL, database_name SYSNAME NOT NULL, db_entry_updated_date datetime NOT NULL DEFAULT GETDATE(), db_entry_updated_by SYSNAME NOT NULL DEFAULT CURRENT_USER, PRIMARY KEY (database_id) );

Untuk daftar basis data yang memenuhi syarat dan tidak memenuhi syarat, lihat file RI.End pada direktori RDSCustomForSQLServer/Instances/DB_instance_resource_ID/TransactionLogMetadata di bucket Amazon S3 do-not-delete-rds-custom-$ACCOUNT_ID-$REGION-unique_identifier. Untuk informasi selengkapnya tentang file RI.End, lihat Log transaksi di Amazon S3.

Anda juga dapat menentukan daftar database yang memenuhi syarat untuk PITR menggunakan SQL skrip berikut. Tetapkan @limit variabel ke jumlah maksimum database yang memenuhi syarat PITR untuk kelas instance. Untuk informasi selengkapnya, lihat Jumlah database yang memenuhi syarat untuk PITR per tipe kelas instans.

Untuk menentukan daftar database yang memenuhi syarat untuk PITR pada kelas instans DB
  • Jalankan SQL skrip berikut.

    DECLARE @Limit INT; SET @Limit = (insert-database-instance-limit-here); USE msdb; IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'rds_pitr_blocked_databases')) WITH TABLE0 AS ( SELECT hdrs.database_id as DatabaseId, sdb.name as DatabaseName, 'ALWAYS_ON_NOT_WRITABLE_REPLICA' as Reason, NULL as DatabaseNameOnPitrTable FROM sys.dm_hadr_database_replica_states hdrs INNER JOIN sys.databases sdb ON sdb.database_id = hdrs.database_id WHERE (hdrs.is_local = 1 AND hdrs.is_primary_replica = 0) OR (sys.fn_hadr_is_primary_replica (sdb.name) = 1 AND DATABASEPROPERTYEX (sdb.name, 'Updateability') = 'READ_ONLY') ), TABLE1 as ( SELECT dbs.database_id as DatabaseId, sysdbs.name as DatabaseName, 'OPTOUT' as Reason, CASE WHEN dbs.database_name = sysdbs.name THEN NULL ELSE dbs.database_name END AS DatabaseNameOnPitrTable FROM msdb.dbo.rds_pitr_blocked_databases dbs INNER JOIN sys.databases sysdbs ON dbs.database_id = sysdbs.database_id WHERE sysdbs.database_id > 4 ), TABLE2 as ( SELECT db.name AS DatabaseName, db.create_date AS CreateDate, db.state_desc AS DatabaseState, db.database_id AS DatabaseId, rs.database_guid AS DatabaseGuid, rs.last_log_backup_lsn AS LastLogBackupLSN, rs.recovery_fork_guid RecoveryForkGuid, rs.first_recovery_fork_guid AS FirstRecoveryForkGuid, db.recovery_model_desc AS RecoveryModel, db.is_auto_close_on AS IsAutoClose, db.is_read_only as IsReadOnly, NEWID() as FileName, CASE WHEN(db.state_desc = 'ONLINE' AND db.recovery_model_desc != 'SIMPLE' AND((db.is_auto_close_on = 0 and db.collation_name IS NOT NULL) OR db.is_auto_close_on = 1)) AND db.is_read_only != 1 AND db.user_access = 0 AND db.source_database_id IS NULL AND db.is_in_standby != 1 THEN 1 ELSE 0 END AS IsPartOfSnapshot, CASE WHEN db.source_database_id IS NULL THEN 0 ELSE 1 END AS IsDatabaseSnapshot FROM sys.databases db INNER JOIN sys.database_recovery_status rs ON db.database_id = rs.database_id WHERE DB_NAME(db.database_id) NOT IN('tempdb') AND db.database_id NOT IN (SELECT DISTINCT DatabaseId FROM TABLE1) AND db.database_id NOT IN (SELECT DISTINCT DatabaseId FROM TABLE0) ), TABLE3 as( Select @Limit+count(DatabaseName) as TotalNumberOfDatabases from TABLE2 where TABLE2.IsPartOfSnapshot=1 and DatabaseName in ('master','model','msdb') ) SELECT TOP(SELECT TotalNumberOfDatabases from TABLE3) DatabaseName,CreateDate,DatabaseState,DatabaseId from TABLE2 where TABLE2.IsPartOfSnapshot=1 ORDER BY TABLE2.DatabaseID ASC ELSE WITH TABLE0 AS ( SELECT hdrs.database_id as DatabaseId, sdb.name as DatabaseName, 'ALWAYS_ON_NOT_WRITABLE_REPLICA' as Reason, NULL as DatabaseNameOnPitrTable FROM sys.dm_hadr_database_replica_states hdrs INNER JOIN sys.databases sdb ON sdb.database_id = hdrs.database_id WHERE (hdrs.is_local = 1 AND hdrs.is_primary_replica = 0) OR (sys.fn_hadr_is_primary_replica (sdb.name) = 1 AND DATABASEPROPERTYEX (sdb.name, 'Updateability') = 'READ_ONLY') ), TABLE1 as ( SELECT db.name AS DatabaseName, db.create_date AS CreateDate, db.state_desc AS DatabaseState, db.database_id AS DatabaseId, rs.database_guid AS DatabaseGuid, rs.last_log_backup_lsn AS LastLogBackupLSN, rs.recovery_fork_guid RecoveryForkGuid, rs.first_recovery_fork_guid AS FirstRecoveryForkGuid, db.recovery_model_desc AS RecoveryModel, db.is_auto_close_on AS IsAutoClose, db.is_read_only as IsReadOnly, NEWID() as FileName, CASE WHEN(db.state_desc = 'ONLINE' AND db.recovery_model_desc != 'SIMPLE' AND((db.is_auto_close_on = 0 and db.collation_name IS NOT NULL) OR db.is_auto_close_on = 1)) AND db.is_read_only != 1 AND db.user_access = 0 AND db.source_database_id IS NULL AND db.is_in_standby != 1 THEN 1 ELSE 0 END AS IsPartOfSnapshot, CASE WHEN db.source_database_id IS NULL THEN 0 ELSE 1 END AS IsDatabaseSnapshot FROM sys.databases db INNER JOIN sys.database_recovery_status rs ON db.database_id = rs.database_id WHERE DB_NAME(db.database_id) NOT IN('tempdb') AND db.database_id NOT IN (SELECT DISTINCT DatabaseId FROM TABLE0) ), TABLE2 as( SELECT @Limit+count(DatabaseName) as TotalNumberOfDatabases from TABLE1 where TABLE1.IsPartOfSnapshot=1 and DatabaseName in ('master','model','msdb') ) select top(select TotalNumberOfDatabases from TABLE2) DatabaseName,CreateDate,DatabaseState,DatabaseId from TABLE1 where TABLE1.IsPartOfSnapshot=1 ORDER BY TABLE1.DatabaseID ASC
catatan

Database yang hanya link simbolik juga dikecualikan dari database yang memenuhi syarat untuk operasi. PITR Kueri di atas tidak memfilter berdasarkan kriteria ini.

Log transaksi di Amazon S3

Periode retensi cadangan menentukan apakah log transaksi untuk instans RDS Custom for SQL Server DB secara otomatis diekstraksi dan diunggah ke Amazon S3. Nilai bukan nol berarti pencadangan otomatis dibuat, dan agen RDS Kustom mengunggah log transaksi ke S3 setiap 5 menit.

File log transaksi pada S3 dienkripsi saat diam menggunakan AWS KMS key yang Anda berikan saat membuat instans DB. Untuk informasi selengkapnya, lihat Melindungi data menggunakan enkripsi sisi server di Panduan Pengguna Amazon Simple Storage Service.

Log transaksi untuk setiap basis data diunggah ke bucket S3 bernama do-not-delete-rds-custom-$ACCOUNT_ID-$REGION-unique_identifier. Direktori RDSCustomForSQLServer/Instances/DB_instance_resource_ID di bucket S3 berisi dua subdirektori:

  • TransactionLogs — Berisi log transaksi untuk setiap basis data dan metadata masing-masing.

    Nama file log transaksi mengikuti pola yyyyMMddHHmm.database_id.timestamp, misalnya:

    202110202230.11.1634769287

    Nama file yang sama dengan akhiran _metadata berisi informasi tentang log transaksi seperti nomor urut log, nama basis data, dan RdsChunkCount. RdsChunkCount menentukan berapa banyak file fisik yang mewakili satu file log transaksi. Anda mungkin melihat file dengan sufiks _0001, _0002, dan sebagainya, yang berarti potongan fisik dari file log transaksi. Jika Anda ingin menggunakan potongan file log transaksi, pastikan untuk menggabungkan potongan setelah mengunduhnya.

    Pertimbangkan skenario ketika Anda memiliki file berikut:

    • 202110202230.11.1634769287

    • 202110202230.11.1634769287_0001

    • 202110202230.11.1634769287_0002

    • 202110202230.11.1634769287_metadata

    RdsChunkCount adalah 3. Urutan untuk menggabungkan file adalah sebagai berikut: 202110202230.11.1634769287, 202110202230.11.1634769287_0001, 202110202230.11.1634769287_0002.

  • TransactionLogMetadata — Berisi informasi metadata tentang setiap iterasi ekstraksi log transaksi.

    File RI.End berisi informasi untuk semua basis data yang log transaksinya diekstraksi dan semua basis data yang ada tetapi tidak log transaksinya tidak diekstraksi. Nama file RI.End mengikuti pola yyyyMMddHHmm.RI.End.timestamp, misalnya:

    202110202230.RI.End.1634769281

PITRKembalikan menggunakan AWS Management Console, AWS CLI, atau RDSAPI.

Anda dapat memulihkan instans RDS Custom for SQL Server DB ke titik waktu menggunakan AWS Management Console, AWS CLI file, atau RDSAPI.

Untuk mengembalikan instans RDS Custom DB ke waktu tertentu
  1. Masuk ke AWS Management Console dan buka RDS konsol Amazon di https://console.aws.amazon.com/rds/.

  2. Di panel navigasi, pilih Pencadangan otomatis.

  3. Pilih instans RDS Custom DB yang ingin Anda pulihkan.

  4. Untuk Tindakan, pilih Pulihkan ke titik waktu.

    Jendela Pulihkan ke titik waktu akan muncul.

  5. Pilih Waktu pemulihan terbaru untuk memulihkan ke waktu terbaru yang dimungkinkan atau pilih Kustom untuk memilih waktu.

    Jika Anda memilih Kustom, masukkan tanggal dan waktu untuk memulihkan instans.

    Waktu ditampilkan di zona waktu lokal Anda, yang ditunjukkan dengan offset dari Coordinated Universal Time ()UTC. Misalnya, UTC -5 adalah Waktu Standar Timur/Waktu Siang Tengah.

  6. Untuk pengidentifikasi instans DB, masukkan nama instans RDS Custom DB target yang dipulihkan. Nama harus unik.

  7. Pilih opsi lain sesuai kebutuhan, seperti kelas instans DB.

  8. Pilih Pulihkan ke titik waktu.

Anda mengembalikan instans DB ke waktu tertentu dengan menggunakan point-in-time AWS CLI perintah restore-db-instance-to- untuk membuat instance RDS Custom DB baru.

Gunakan salah satu opsi berikut untuk menentukan cadangan yang akan dipulihkan dari:

  • --source-db-instance-identifier mysourcedbinstance

  • --source-dbi-resource-id dbinstanceresourceID

  • --source-db-instance-automated-backups-arn backupARN

Opsi custom-iam-instance-profile diperlukan.

Contoh berikut memulihkan my-custom-db-instance ke instans DB baru bernama my-restored-custom-db-instance pada waktu yang ditentukan.

Untuk Linux, macOS, atau Unix:

aws rds restore-db-instance-to-point-in-time \ --source-db-instance-identifier my-custom-db-instance\ --target-db-instance-identifier my-restored-custom-db-instance \ --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance \ --restore-time 2022-10-14T23:45:00.000Z

Untuk Windows:

aws rds restore-db-instance-to-point-in-time ^ --source-db-instance-identifier my-custom-db-instance ^ --target-db-instance-identifier my-restored-custom-db-instance ^ --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance ^ --restore-time 2022-10-14T23:45:00.000Z