Prepara i file di backup

Questa pagina descrive come creare i file di backup necessari per la migrazione dei database SQL Server a Cloud SQL per SQL Server, incluse le seguenti sezioni:

Requisiti e limitazioni

Ai file di backup che utilizzi per la migrazione si applicano i seguenti requisiti e limitazioni:

  • Tutti i file di backup devono avere nomi conformi alle rispettive convenzioni di denominazione.

  • I file di backup possono avere una dimensione massima di 5 TB.

  • Puoi eseguire lo striping dei file di backup completo o differenziale su file più piccoli se la dimensione del database supera i 5 TB. Ogni stripe può avere una dimensione massima di 5 TB.

  • Puoi utilizzare i file di backup e dei log delle transazioni criptati per la migrazione. Se vuoi utilizzare file di backup criptati, devi criptare ogni file di backup (completo, differenziale, log delle transazioni) che utilizzi per un database specifico incluso nella migrazione. Vedi Utilizzare i backup criptati.

  • Database Migration Service non esegue la migrazione del database SQL Server master.

  • L'istanza SQL Server di origine non può utilizzare il modello di recupero semplice. Per ulteriori informazioni sui modelli di recupero, consulta Modelli di recupero (SQL Server) nella documentazione di Microsoft.

Convenzioni di denominazione

Questa sezione illustra i requisiti relativi ai nomi dei file di backup completi, differenziali e dei log delle transazioni.

Convenzioni di denominazione dei file di backup per le istanze SQL Server on-premise

Nomi dei file di backup completi

La convenzione di denominazione per i file di backup completi dipende dal fatto che utilizzi un singolo file di backup o se lo dividi in più strisce. In entrambi gli scenari, Database Migration Service richiede l'inclusione di un timestamp dell'epoca (espresso come timestamp Unix in secondi) che rappresenta l'ora approssimativa in cui è stato eseguito il backup completo.

  • Se il backup completo è un singolo file, il nome del file deve utilizzare il formato db_name.epoch.bak, dove:

    • db_name è il nome del tuo database
    • epoch è un timestamp Unix in secondi
    • .bak è l'estensione del file

    Gli esempi validi includono:

    • my-business-database.1712649600.bak
    • my-other-database.1712649600.bak
  • Se dividi il backup completo in strisce separate, ogni striscia può utilizzare il nome che preferisci, ma deve essere caricata in una cartella Cloud Storage il cui nome è un timestamp Unix in secondi:

    Cloud Storage bucket root/
    |- my-business-database/
    |  |- full/
    |  |  |- 1712649600/
    |  |  |  |- mystripe-full_backup_file.bak
    |  |  |  |- otherStripefull-bkp.bak
    |  |- diff/
    |  |  |- ...
    |  |- log/
    |  |  |- ...
    |- my-other-database/
    |  |- full/
    |  |  |- 1715250742/
    |  |  |  |- cool-stripe-file.bak
    |  |  |  |- secondStripeFile.bak
    |  |- diff/
    |  |  |- ...
    |  |- log/
    |  |  |- ...
    

Nomi dei file di backup differenziali

La convenzione di denominazione per i file di backup differenziale dipende dal fatto che utilizzi un singolo file di backup o se lo dividi in più strisce. In entrambi gli scenari, Database Migration Service richiede l'inclusione di un timestamp dell'epoca (espresso come timestamp Unix in secondi) che rappresenta l'ora approssimativa in cui è stato eseguito il backup differenziale.

  • Se il backup differenziale è un singolo file, il nome del file deve utilizzare il formato db_name.epoch.ext, dove:

    • db_name è il nome del tuo database
    • epoch è un timestamp Unix in secondi
    • .ext è l'estensione del file; i file di backup differenziale possono utilizzare le seguenti estensioni: .bak, .dif, .diff.

    Gli esempi validi includono:

    • my-business-database.1731159833.bak
    • my-other-database.1731159833.dif
  • Se dividi il backup differenziale in strisce separate, ogni striscia può utilizzare il nome che preferisci, ma deve essere caricata in una cartella Cloud Storage il cui nome è un timestamp Unix in secondi:

    Cloud Storage bucket root/
    |- my-business-database/
    |  |- full/
    |  |  |- ...
    |  |- diff/
    |  |  |- 1731159833/
    |  |  |  |- mydiffstripe-diff_backup_file.dif
    |  |  |  |- mySeconddiffstripe-diff_backup_file.bak
    |  |- log/
    |  |  |- ...
    |- my-other-database/
    |  |- full/
    |  |  |- ...
    |  |- diff/
    |  |  |- 1731159833/
    |  |  |  |- firstDiffStripe.bak
    |  |  |  |- other_diff_stripe.diff
    |  |- log/
    |  |  |- ...
    

Nomi dei file di log delle transazioni

I nomi dei file di log delle transazioni devono usare il formato db_name.epoch.trn, dove:

  • db_name è il nome del tuo database
  • epoch è un timestamp Unix in secondi
  • .bak è l'estensione del file

Gli esempi validi includono:

  • my-business-database.1712649600.trn
  • my-other-database.1712649600.trn

Convenzioni di denominazione dei file di backup per Amazon RDS

Nomi dei file di backup completi

La convenzione di denominazione per i file di backup completi dipende dal fatto che utilizzi un singolo file di backup o se lo dividi in più strisce. In entrambi gli scenari, Database Migration Service richiede l'inclusione di un timestamp dell'epoca (espresso come timestamp Unix in secondi) che rappresenta l'ora approssimativa in cui è stato eseguito il backup completo.

  • Se il backup completo è un singolo file, il nome del file deve utilizzare il formato db_id.family_guid.rds_backup_seq_id.epoch.bak, dove:

    • db_id è l'identificatore del database interno Amazon RDS
    • family_guid è l'identificatore univoco Amazon RDS del database originale al momento della creazione
    • rds_backup_seq_id è l'identificatore che Amazon RDS utilizza internamente per mantenere un numero di sequenza per ogni file di backup del log delle transazioni
    • epoch è un timestamp Unix in secondi
    • .bak è l'estensione del file

    Gli esempi validi includono:

    • 3.CX11CB3D-G2E4-46D9-B462-CE40CDA97E89.22.1712649600.bak
    • 1.FD21CD3F-B5E4-27Z9-B462-CE40CDA97E89.21.1712649600.bak
  • Se dividi il backup completo in strisce separate, ogni striscia può utilizzare il nome che preferisci, ma deve essere caricata in una cartella Cloud Storage il cui nome è un timestamp Unix in secondi:

    Cloud Storage bucket root/
    |- my-business-database/
    |  |- full/
    |  |  |- 1712649600/
    |  |  |  |- mystripe-full_backup_file.bak
    |  |  |  |- otherStripefull-bkp.bak
    |  |- diff/
    |  |  |- ...
    |  |- log/
    |  |  |- ...
    |- my-other-database/
    |  |- full/
    |  |  |- 1715250742/
    |  |  |  |- cool-stripe-file.bak
    |  |  |  |- secondStripeFile.bak
    |  |- log/
    |  |  |- ...
    

Nomi dei file di backup differenziali

La convenzione di denominazione per i file di backup differenziale dipende dal fatto che utilizzi un singolo file di backup o se lo dividi in più strisce. In entrambi gli scenari, Database Migration Service richiede l'inclusione di un timestamp dell'epoca (espresso come timestamp Unix in secondi) che rappresenta l'ora approssimativa in cui è stato eseguito il backup differenziale.

  • Se il backup differenziale è un singolo file, il nome del file deve utilizzare il formato db_id.family_guid.rds_backup_seq_id.epoch.ext, dove:

    • db_id è l'identificatore del database interno Amazon RDS
    • family_guid è l'identificatore univoco Amazon RDS del database originale al momento della creazione
    • rds_backup_seq_id è l'identificatore che Amazon RDS utilizza internamente per mantenere un numero di sequenza per ogni file di backup del log delle transazioni
    • epoch è un timestamp Unix in secondi
    • .bak è l'estensione del file; i file di backup differenziale possono utilizzare le seguenti estensioni: .bak, .dif, .diff.

    Gli esempi validi includono:

    • 3.CX11CB3D-G2E4-46D9-B462-CE40CDA97E89.22.1731159833.bak
    • 1.FD21CD3F-B5E4-27Z9-B462-CE40CDA97E89.21.1731159833.dif
  • Se dividi il backup completo in strisce separate, ogni striscia può utilizzare il nome che preferisci, ma deve essere caricata in una cartella Cloud Storage il cui nome è un timestamp Unix in secondi:

    Cloud Storage bucket root/
    |- my-business-database/
    |  |- full/
    |  |  |- ...
    |  |- diff/
    |  |  |- 1731159833/
    |  |  |  |- mydiffstripe-diff_backup_file.dif
    |  |  |  |- mySeconddiffstripe-diff_backup_file.bak
    |  |- log/
    |  |  |- ...
    |- my-other-database/
    |  |- full/
    |  |  |- ...
    |  |- diff/
    |  |  |- 1731159833/
    |  |  |  |- firstDiffStripe.bak
    |  |  |  |- other_diff_stripe.diff
    |  |- log/
    |  |  |- ...
    

Nomi dei file di log delle transazioni

In Amazon RDS, i file di backup dei log delle transazioni vengono generati automaticamente e includono tutti gli identificatori del database richiesti. Questi nomi predefiniti includono il timestamp dell'epoca e sono completamente supportati in Database Migration Service. Puoi caricare questi file direttamente nella tua cartella /log/.

Esegui il backup completo dell'istanza di origine

Il file di backup completo del database è necessario per la fase di caricamento iniziale del job di migrazione. Se vuoi criptare i backup, assicurati di archiviare la chiave di criptaggio in modo da poterla caricare in Cloud Storage in un secondo momento quando crei il job di migrazione. Vedi Utilizzare i backup criptati.

Esegui il backup completo delle istanze SQL Server on-premise

Puoi eseguire il backup completo dell'istanza SQL Server on-premise utilizzando T-SQL o SQL Server Management Studio (SSMS). Segui questi passaggi:

  1. Assicurati di soddisfare i seguenti requisiti:
  2. Esegui il backup completo dell'istanza di origine. Consulta Guida rapida: esegui il backup e il ripristino di un database SQL Server con SSMS nella documentazione di Microsoft. Puoi anche controllare i seguenti comandi di esempio:

    Esempio di comando T-SQL per un singolo file di backup completo

    Questo comando di esempio esegue un backup completo del database AdventureWorks2022. Il file di backup risultante utilizza la convenzione di denominazione obbligatoria.

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    DECLARE @BackupPath NVARCHAR(2000);
    SET @BackupPath = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '.bak';
    
    DECLARE @SQL NVARCHAR(MAX);
    SET @SQL = 'BACKUP DATABASE [' + @DATABASE + '] TO DISK = N''' + @BackupPath + '''';
    EXEC sp_executesql @SQL;
    GO

    Esempio di comando T-SQL per file di backup completi a bande

    Questo comando di esempio esegue un backup completo del database AdventureWorks2022. Il file di backup risultante utilizza la convenzione di denominazione obbligatoria.

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    DECLARE @BackupPath1 NVARCHAR(2000);
    DECLARE @BackupPath2 NVARCHAR(2000);
    DECLARE @BackupPath3 NVARCHAR(2000);
    
    SET @BackupPath1 = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe1.bak';
    SET @BackupPath2 = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe2.bak';
    SET @BackupPath3 = 'X:\SQLServerBackups\full\' + @DATABASE + '.' + @unixTimestamp + '\stripe3.bak';
    
    DECLARE @SQL NVARCHAR(MAX);
    SET @SQL = 'BACKUP DATABASE [' + @DATABASE + '] '
               + 'TO DISK = N''' + @BackupPath1 + ''', '
               + 'DISK = N''' + @BackupPath2 + ''', '
               + 'DISK = N''' + @BackupPath3 + ''' '
               + 'WITH FORMAT, '
               + 'MEDIANAME = N''AdventureWorksStripedSet0'', '
               + 'MEDIADESCRIPTION = N''Striped media set for ' + @DATABASE + ' database''';
    EXEC sp_executesql @SQL;
    GO
  3. Carica il file di backup in un bucket Cloud Storage. Consulta Creare e configurare un bucket Cloud Storage.

Esegui il backup completo per Amazon RDS

Per eseguire il backup completo dell'origine Amazon RDS:

  1. Assicurati di soddisfare i seguenti requisiti:
  2. Configura la funzionalità di backup nativa. Consulta Configurazione per il backup e il ripristino nativi nella documentazione di Amazon RDS.
  3. Esegui il backup completo dell'istanza di origine. Se la dimensione del database supera i 5 TB, assicurati di dividere il backup completo in strisce separate utilizzando il parametro @number_of_files. Ogni stripe può avere una dimensione massima di 5 TB. Consulta Backup di un database nella documentazione di Amazon RDS.

    Puoi anche controllare il seguente comando di esempio:

    Esempio di query per eseguire un backup completo su Amazon RDS

    Questo comando di esempio esegue un backup completo del database AdventureWorks2022. Il file di backup risultante utilizza la convenzione di denominazione obbligatoria.

    declare @DATABASE varchar(1000);
    declare @S3Bucket varchar(1000);
    declare @unixTimestamp varchar(30);
    declare @fileName varchar(1000);
    
    SELECT @S3Bucket = 'dms-sqlserver-exports';
    SELECT @DATABASE = 'AdventureWorks2022';
    
    SELECT @unixTimestamp=CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    SELECT @fileName = ('arn:aws:s3:::' + @S3Bucket + '/' + @DATABASE + '/full/' + @DATABASE + '.' + @unixTimestamp + '/' + CAST(database_id AS VARCHAR(10)) + '.' + CAST(family_guid AS VARCHAR(50)) + '.*.' + @unixTimestamp) FROM master.sys.database_recovery_status WHERE DB_NAME(database_id)=@DATABASE;
    
    exec msdb.dbo.rds_backup_database
      @source_db_name=@DATABASE,
      @s3_arn_to_backup_to=@fileName,
      @overwrite_s3_backup_file=1,
      @type='FULL',
      @number_of_files=1;
  4. Carica il file di backup in un bucket Cloud Storage. Consulta Creare e configurare un bucket Cloud Storage.

Esegui il backup differenziale dell'istanza di origine

Puoi utilizzare un file di backup differenziale del database durante la fase di caricamento incrementale del job di migrazione. Puoi utilizzare file di backup differenziali criptati se cripti anche il file di backup completo e i file dei log delle transazioni per lo stesso database. Tutti i file di backup e di log delle transazioni devono utilizzare la stessa chiave di crittografia per database. Vedi Utilizzare i backup criptati.

Esegui il backup differenziale per le istanze SQL Server on-premise

Puoi eseguire il backup differenziale dell'istanza SQL Server on-premise utilizzando T-SQL o SQL Server Management Studio (SSMS). Segui questi passaggi:

  1. Assicurati di soddisfare i seguenti requisiti:
  2. Esegui il backup differenziale dell'istanza di origine. Consulta Creare un backup differenziale del database nella documentazione di Microsoft. Puoi anche controllare i seguenti comandi di esempio:

    Esempio di comando T-SQL per un singolo file di backup differenziale

    Questo comando di esempio esegue un backup differenziale del database AdventureWorks2022. Il file di backup risultante utilizza la convenzione di denominazione obbligatoria.

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    DECLARE @BackupPath NVARCHAR(2000);
    SET @BackupPath = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '.bak';
    
    DECLARE @SQL NVARCHAR(MAX);
    SET @SQL = 'BACKUP DATABASE [' + @DATABASE + '] TO DISK = N''' + @BackupPath + ''' WITH DIFFERENTIAL';
    EXEC sp_executesql @SQL;
    GO

    Esempio di comando T-SQL per file di backup differenziali segmentati

    Questo comando di esempio esegue un backup differenziale del database AdventureWorks2022. Il file di backup risultante utilizza la convenzione di denominazione obbligatoria.

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    DECLARE @BackupPath1 NVARCHAR(2000);
    DECLARE @BackupPath2 NVARCHAR(2000);
    DECLARE @BackupPath3 NVARCHAR(2000);
    
    SET @BackupPath1 = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe1.bak';
    SET @BackupPath2 = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe2.bak';
    SET @BackupPath3 = 'X:\SQLServerBackups\diff\' + @DATABASE + '.' + @unixTimestamp + '\stripe3.bak';
    
    DECLARE @SQL NVARCHAR(MAX);
    SET @SQL = 'BACKUP DATABASE [' + @DATABASE + '] '
               + 'TO DISK = N''' + @BackupPath1 + ''', '
               + 'DISK = N''' + @BackupPath2 + ''', '
               + 'DISK = N''' + @BackupPath3 + ''' '
               + 'WITH DIFFERENTIAL, FORMAT, '
               + 'MEDIANAME = N''AdventureWorksStripedSet0'', '
               + 'MEDIADESCRIPTION = N''Striped differential media set for ' + @DATABASE + ' database''';
    EXEC sp_executesql @SQL;
    GO
  3. Carica il file di backup in un bucket Cloud Storage. Consulta Creare e configurare un bucket Cloud Storage.

Esegui il backup differenziale per Amazon RDS

Per eseguire il backup differenziale dell'origine Amazon RDS:

  1. Assicurati di soddisfare i seguenti requisiti:
  2. Configura la funzionalità di backup nativa. Consulta Configurazione per il backup e il ripristino nativi nella documentazione di Amazon RDS.
  3. Esegui il backup differenziale dell'istanza di origine. Utilizza la stored procedure rds_backup_database con il parametro type impostato su DIFFERENTIAL.

    Se la dimensione del database supera i 5 TB, assicurati di dividere il backup completo in strisce separate utilizzando il parametro @number_of_files. Ogni stripe può avere una dimensione massima di 5 TB.

    Consulta Backup di un database nella documentazione di Amazon RDS. Puoi anche controllare il seguente comando di esempio:

    Query di esempio per eseguire un backup differenziale su Amazon RDS

    Questo comando di esempio esegue un backup differenziale del database AdventureWorks2022. Il file di backup risultante utilizza la convenzione di denominazione obbligatoria.

    declare @DATABASE varchar(1000);
    declare @S3Bucket varchar(1000);
    declare @unixTimestamp varchar(30);
    declare @fileName varchar(1000);
    
    SELECT @S3Bucket = 'dms-sqlserver-exports';
    SELECT @DATABASE = 'AdventureWorks2022';
    
    SELECT @unixTimestamp=CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    SELECT @fileName = ('arn:aws:s3:::' + @S3Bucket + '/' + @DATABASE + '/full/' + @DATABASE + '.' + @unixTimestamp + '/' + CAST(database_id AS VARCHAR(10)) + '.' + CAST(family_guid AS VARCHAR(50)) + '.*.' + @unixTimestamp) FROM master.sys.database_recovery_status WHERE DB_NAME(database_id)=@DATABASE;
    
    exec msdb.dbo.rds_backup_database
      @source_db_name=@DATABASE,
      @s3_arn_to_backup_to=@fileName,
      @overwrite_s3_backup_file=1,
      @type='DIFFERENTIAL',
      @number_of_files=1;
  4. Carica il file di backup in un bucket Cloud Storage. Consulta Creare e configurare un bucket Cloud Storage.

Esegui backup dei log delle transazioni

I file di backup dei log delle transazioni contengono le modifiche apportate al database di origine dopo aver eseguito il backup completo. I backup del log delle transazioni sono necessari per la fase di caricamento continuo del job di migrazione. Puoi pianificare esportazioni e caricamenti regolari dei log delle transazioni per assicurarti che gli aggiornamenti dei dati vengano replicati continuamente nell'istanza Cloud SQL per SQL Server di destinazione. Vedi Pianificare i backup dei log delle transazioni.

Se utilizzi file di backup criptati, devi criptare anche i file di log delle transazioni per lo stesso database. Vedi Utilizzare i backup criptati.

Esegui un backup del log delle transazioni per le istanze SQL Server on-premise

Per eseguire un backup del log delle transazioni dei database SQL Server on-premise, segui questi passaggi:

  1. Assicurati di soddisfare i seguenti requisiti:
  2. Esporta i file di log delle transazioni dai database di origine SQL Server. Consulta Eseguire il backup di un log delle transazioni nella documentazione di Microsoft. Puoi anche controllare il seguente comando di esempio:

    Esempio di comando T-SQL per esportare i file di log delle transazioni sul disco locale

    Questo comando di esempio crea un backup del log delle transazioni del database AdventureWorks2022 e salva il file sul disco locale. Il file di backup risultante utilizza la convenzione di denominazione obbligatoria.

    declare @DATABASE varchar(1000);
    SELECT @DATABASE = 'AdventureWorks2022';
    declare @unixTimestamp varchar(1000);
    SELECT @unixTimestamp = CAST(DATEDIFF(s, '1970-01-01', GETUTCDATE()) AS VARCHAR(50));
    
    DECLARE @BackupPath NVARCHAR(2000);
    SET @BackupPath = 'X:\SQLServerBackups\log\' + @DATABASE + '.' + @unixTimestamp + '.trn';
    
    DECLARE @SQL NVARCHAR(MAX);
    SET @SQL = 'BACKUP LOG [' + @DATABASE + '] TO DISK = N''' + @BackupPath + '''';
    EXEC sp_executesql @SQL;
    GO
  3. Carica i file di backup del log delle transazioni nel bucket Cloud Storage che hai creato per la migrazione.

Esegui un backup dei log delle transazioni per Amazon RDS

I backup dei log delle transazioni vengono creati automaticamente se i backup automatici sono abilitati nell'istanza Amazon RDS. Consulta Abilitare i backup automatici� nella documentazione di Amazon RDS.

Per utilizzare i file di backup dei log delle transazioni per la migrazione:

  1. Attiva l'accesso ai file di log delle transazioni nell'istanza Amazon RDS. Consulta Accesso ai backup dei log delle transazioni con RDS per SQL Server. Puoi anche controllare il seguente comando di esempio:

    Esempio di chiamata di stored procedure per abilitare l'accesso al log delle transazioni in Amazon RDS

    declare @DATABASE varchar(1000);
    declare @S3Bucket varchar(1000);
    declare @targetS3Arn varchar(1000);

    SELECT @S3Bucket = 'dms-sqlserver-exports'; SELECT @DATABASE = 'AdventureWorks2022'; SELECT @targetS3Arn = ('arn:aws:s3:::' + @S3Bucket + '/' + @DATABASE + '/log/');

    USE @DATABASE; exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn=@targetS3Arn;

  2. Copia i file di backup del log delle transazioni dal bucket S3 al bucket Cloud Storage che hai creato per la migrazione.