Clonare un database Microsoft SQL Server su Compute Engine


Questo tutorial illustra due modi per clonare Database Microsoft SQL Server in esecuzione su Compute Engine. Un metodo utilizza snapshot di dischi permanenti. L'altro metodo utilizza il backup e ripristino nativi di SQL Server, trasferendo esegui il backup con Cloud Storage. Cloud Storage è il servizio di archiviazione di oggetti di Google Cloud. Offre un modo semplice, sicuro, durevole e ad alta disponibilità di archiviazione .

La clonazione è il processo di copia di un database online su un altro server. La copia è indipendente dal database esistente e viene conservata come snapshot in un determinato momento. Puoi utilizzare un database clonato per vari scopi senza inserire un carico sul server di produzione o mettere a rischio l'integrità dei dati di produzione. Ecco alcune di queste finalità:

  • Esecuzione di query analitiche
  • Test di carico o di integrazione delle app
  • Estrazione dei dati per il completamento dei data warehouse
  • Esperimenti sui dati in corso

Ogni metodo di clonazione descritto in questo tutorial offre vantaggi e svantaggi. Il metodo ideale per te dipende dalla tua situazione. La tabella seguente evidenzia alcuni problemi chiave.

Problema Metodo 1: snapshot dei dischi Metodo 2: backup e ripristino mediante Cloud Storage
Spazio su disco aggiuntivo richiesto sulle istanze SQL Server Non è richiesto spazio su disco aggiuntivo Spazio aggiuntivo necessario per l'archiviazione del file di backup durante la creazione e ripristino
Carico aggiuntivo sulle istanze SQL Server di origine durante la clonazione Nessun caricamento aggiuntivo Carico aggiuntivo su CPU e I/O durante la creazione e il caricamento dei file di backup
Durata della clonazione Relativamente veloce per database di grandi dimensioni Relativamente lento per database di grandi dimensioni
Può clonare da istanze SQL Server esterne a Google Cloud No
complessità Una complessa sequenza di comandi per collegare i dischi clonati Un insieme di comandi relativamente semplici per la clonazione
Può sfruttare i sistemi di backup esistenti Sì, se il sistema di backup utilizza gli snapshot dei dischi Google Cloud Sì, se il sistema di backup scrive i file di backup nativi di SQL Server Cloud Storage
Granularità della clonazione Può clonare solo interi dischi Può clonare solo il database specificato
Coerenza dei dati Coerenti al momento dello snapshot Coerente al punto del backup

Questo tutorial presuppone che tu abbia dimestichezza con l'amministrazione di sistema di Microsoft Windows, PowerShell e Microsoft SQL Server utilizzando SQL Server Management Studio di Microsoft.

Obiettivi

  • Scopri come eseguire un'istanza SQL Server su Google Cloud.
  • Scopri come creare un database demo su un disco secondario.
  • Scopri come clonare un database SQL Server utilizzando gli snapshot dei dischi Compute Engine.
  • Scopri come clonare un database SQL Server trasferendo un backup con di archiviazione ideale in Cloud Storage.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Abilitare l'API Compute Engine.
  7. Abilitare l'API

Assicurati di soddisfare questi prerequisiti aggiuntivi:

  • Puoi utilizzare Google Chrome del browser.
  • Installa un client Remote Desktop Protocol (RDP) a tua scelta. Per saperne di più, consulta Client di Microsoft Remote Desktop. Se hai già installato un client RDP, puoi saltare questa attività.

Configurazione dell'ambiente

Per completare questo tutorial, devi configurare il tuo ambiente di calcolo con quanto segue:

  • Un'istanza SQL Server su Compute Engine (denominata sql-server-prod) per rappresentare il server del database di produzione.
  • Un disco aggiuntivo (denominato sql-server-prod-data) collegato al tuo server di produzione per l'archiviazione del database di produzione.
  • Una copia del Database SQL Server di esempio di Wide World Importers per simulare il database di produzione da clonare.
  • Un'istanza SQL Server su Compute Engine denominata sql-server-test per rappresentare il server del database di test. Clona il database su questo server.

Il seguente diagramma illustra questa architettura.

Diagramma che mostra la configurazione per la clonazione di un database SQL Server in questo tutorial.

Crea l'istanza VM di produzione

Per simulare un ambiente di produzione, devi configurare una VM di Compute Engine che esegue SQL Server su Windows Server.

L'istanza VM per questo tutorial utilizza due dischi: un disco da 50 GB per il sistema operativo e e un disco da 100 GB per l'archiviazione del database.

In Compute Engine, l'uso di dischi separati offre rendimento vantaggi dell'IA. Le prestazioni del disco sono determinate dalla capacità di archiviazione totale di tutti i dischi collegati a un'istanza e dal numero totale di vCPU nell'istanza VM. Pertanto, il database e il file di log possono trovarsi sullo stesso disco.

Console

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai alla pagina Istanze VM

  2. Fai clic su Crea.

  3. Nel campo Nome, digita sql-server-prod.

  4. In Regione, seleziona us-east1.

  5. In Zona, seleziona us-east1-b.

  6. In Configurazione macchina, imposta Tipo di macchina su n1-standard-2 (2 vCPU).

  7. Accanto alla descrizione Disco di avvio, fai clic su Cambia.

  8. Nel riquadro Disco di avvio, fai clic sulla scheda Immagini pubbliche.

  9. Nell'elenco a discesa Sistema operativo, seleziona SQL Server su Windows Server.

  10. Nell'elenco a discesa Versione, seleziona SQL Server 2022 Standard su Windows Server 2022 Datacenter.

  11. Assicurati che siano impostati i seguenti valori:

    • Il Tipo di disco di avvio è impostato su Disco permanente standard.
    • Dimensioni (GB) impostate su 50.
  12. Fai clic su Seleziona.

  13. In Identità e accesso API, imposta Ambiti di accesso su Consenti l'accesso completo a tutte le API Cloud.

  14. Espandi Gestione, sicurezza, dischi, networking, single-tenancy.

  15. Fai clic sulla scheda Dischi.

  16. Fai clic su Aggiungi nuovo disco .

  17. Nel campo Nome, digita sql-server-prod-data.

  18. Nel campo Dimensione (GB), digita 100.

  19. Fai clic su Fine.

  20. Fai clic su Crea.

Cloud Shell

  1. Apri Cloud Shell.

    Apri Cloud Shell

  2. Inizializza le seguenti variabili:

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    Dove:

    • VPC_NAME: il nome della tua VPC
    • SUBNET_NAME: il nome della subnet
  3. Imposta l'ID progetto predefinito:

    gcloud config set project PROJECT_ID
    

    Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud.

  4. Imposta la tua regione predefinita:

    gcloud config set compute/region REGION
    

    Sostituisci REGION con l'ID della regione in cui vuoi eseguire il deployment.

  5. Imposta la zona predefinita:

    gcloud config set compute/zone ZONE
    

    Sostituisci ZONE con l'ID della zona in cui vuoi eseguire il deployment.

  6. Crea un'istanza Compute Engine utilizzando l'immagine dell'app per SQL Server 2022 Standard su Windows Server 2022 Datacenter:

    REGION=$(gcloud config get-value compute/region)
    ZONE=$(gcloud config get-value compute/zone)
    
    gcloud compute instances create sql-server-prod \
        --machine-type=n1-standard-2 \
        --scopes=cloud-platform \
        --image-family=sql-std-2022-win-2022 \
        --image-project=windows-sql-cloud \
        --boot-disk-size=50GB \
        --boot-disk-device-name=sql-server-prod \
        --create-disk="mode=rw,size=100,type=pd-standard,name=sql-server-prod-data,device-name=sql-server-prod-data" \
        --subnet=$SUBNET_NAME 
    

    Questo comando concede all'istanza l'accesso completo alle API Google Cloud. crea un disco secondario da 100 GB e lo collega all'istanza. Ignora l'avviso relativo alle prestazioni del disco perché per questo tutorial non sono necessarie prestazioni elevate.

Connettiti all'istanza VM

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai alla pagina Istanze VM

  2. Attendi circa 5 minuti affinché l'istanza VM sia pronta.

    Per monitorare il processo di inizializzazione della VM, visualizza l'output della porta seriale in Cloud Shell:

    gcloud compute instances tail-serial-port-output sql-server-prod
    

    Quando viene visualizzato il seguente messaggio, l'inizializzazione è completata.

    Instance setup finished. sql-server-prod is ready to use.
    

    Premi Ctrl+C per interrompere il monitoraggio della porta seriale.

  3. Fai clic sul nome dell'istanza sql-server-prod per aprire l'istanza VM dei dettagli.

  4. Nella sezione Accesso remoto, fai clic su Imposta password di Windows, quindi fai clic su. Imposta per creare il tuo account sul computer remoto.

    In questo passaggio viene generata una password. Prendi nota della password o copia in un file temporaneo sicuro.

  5. Nella sezione Compute Engine della console Google Cloud, fai clic sul menu a discesa RDP e seleziona l'opzione Scarica il file RDP per scaricare il file RDP per l'istanza.

    Utilizza questo file per connetterti all'istanza utilizzando un client RDP. Per ulteriori informazioni, vedi Client Microsoft Remote Desktop

  6. Quando richiesto, inserisci la password appena generata e fai clic su OK.

  7. Per accettare il certificato del server e accedere all'istanza Windows remota: fai clic su Continua.

  8. Quando ti viene chiesto se vuoi che il computer possa essere rilevato da altri PC e dispositivi della rete, fai clic su No.

Configurare il disco aggiuntivo

Il secondo disco collegato all'istanza di produzione serve per l'archiviazione di produzione. Questo disco è vuoto, quindi devi partizionarlo, formattarlo e montarlo.

  1. In una sessione RDP connessa alla tua istanza sql-server-prod, fai clic su sul pulsante Start sulla barra delle applicazioni di Windows, digita diskpart, quindi fai clic su diskpart per aprire DiskPart.
  2. Quando ti viene chiesto di consentire all'app di apportare modifiche, fai clic su .
  3. Visualizza un elenco di dischi collegati all'istanza:

    list disk
    

    L'output è il seguente:

    Disk ###  Status         Size     Free     Dyn  Gpt
    --------  -------------  -------  -------  ---  ---
    Disk 0    Online           50 GB      0 B
    Disk 1    Online          100 GB   100 GB
    

    Il disco 1 (100 GB) è il tuo disco dati.

  4. Seleziona il disco dati:

    select disk 1
    
  5. Inizializza il disco:

    clean
    
  6. Crea una tabella di partizione GUID:

    convert gpt
    
  7. Crea la partizione dei dati utilizzando l'intero disco:

    create partition primary
    
  8. Elenca i volumi disponibili:

    list volume
    

    L'output è il seguente:

    Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
    ----------  ---  -----------  -----  ----------  -------  ---------  --------
    Volume 0     C                NTFS   Partition     49 GB  Healthy    Boot
    Volume 1                      FAT32  Partition    100 MB  Healthy    System
    Volume 2                      RAW    Partition     99 GB  Healthy
    

    Il volume 2 (99 GB) è il disco dati.

  9. Seleziona il volume:

    select volume 2
    
  10. Formatta la partizione con File system NTFS e l'etichetta data:

    format quick fs=ntfs label=data
    
  11. Monta il disco come unità D:

    assign letter=d
    
  12. Esci da DiskPart:

    exit
    

Scarica il database di esempio

Per configurare il tuo ambiente per questo esercizio di clonazione, devi eseguire seguenti:

Per creare la directory e scaricare il file di backup:

  1. Nella sessione RDP, fai clic sul pulsante Avvio sulla barra delle app di Windows, digita PowerShell e seleziona l'app Windows PowerShell.

  2. Al prompt di PowerShell, crea una struttura di directory per l’archiviazione del database:

    mkdir D:\sql-server-data\wideworldimporters
    
  3. Scarica il file di backup sul disco D:

    bitsadmin /transfer sampledb /dynamic /download /priority FOREGROUND `
      https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak `
      D:\sql-server-data\WideWorldImporters-Full.bak
    

Ripristina il database di esempio

Devi ripristinare il database di esempio sul disco D (data) in modo interattivo utilizzando le automazioni di Microsoft SQL Server Management Studio (SSMS) o direttamente eseguendo un comando Transact-SQL.

Procedura guidata SSMS

  1. Nella sessione RDP, fai clic sul pulsante Start sulla barra delle applicazioni di Windows, Digita ssms e seleziona Microsoft SQL Server Management Studio (Esegui come amministratore).
  2. Dopo l'avvio dell'app, fai clic su Connetti per connetterti al motore del database sql-server-prod utilizzando l'autenticazione Windows.
  3. In Esplora oggetti, fai clic con il tasto destro del mouse su Database e seleziona Ripristina database.
  4. In Origine, seleziona Dispositivo, quindi fai clic sul pulsante [...] accanto al nome del dispositivo.
  5. Nella finestra di dialogo Seleziona dispositivi di backup, assicurati che File sia selezionato per Tipo di supporto di backup e poi fai clic su Aggiungi.
  6. Nel selettore di file, vai a D:\sql-server-data, fai clic sull'icona WideWorldImporters-Full.bak file e fai clic su OK.
  7. Fai clic su OK per chiudere la finestra di dialogo Seleziona dispositivi di backup.

    La finestra di dialogo Ripristina database ora si compila con i dati sull' Backup dei database Wide World Importers.

  8. In Seleziona una pagina, fai clic su File.

  9. Seleziona la casella di controllo Riposiziona tutti i file nella cartella.

  10. Inserisci D:\sql-server-data\wideworldimporters sia nel campo Cartella file di dati sia nel campo Cartella file di log.

    Screenshot che mostra la finestra di dialogo Ripristina database.

  11. Fai clic su OK per avviare l'operazione di ripristino.

Dopo un paio di minuti, riceverai una notifica che ti informa che il database è stato ripristinato.

Transact-SQL

  1. Nella sessione RDP, fai clic sul pulsante Avvio sulla barra delle app di Windows, digita ssms e seleziona Microsoft SQL Server Management Studio (Esegui come amministratore).
  2. Dopo l'avvio dell'app, fai clic su Connetti per connetterti al motore del database sql-server-prod utilizzando l'autenticazione Windows.
  3. Seleziona File > Nuovo > Query con connessione corrente per aprire una nuova finestra di query.
  4. Avvia un ripristino dal file di backup che hai scaricato:

    USE [master]
    GO
    
    RESTORE DATABASE [WideWorldImporters]
      FROM  DISK = N'D:\SQL-SERVER-DATA\WideWorldImporters-Full.bak'
      WITH  FILE = 1,
      MOVE N'WWI_Primary' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.mdf',
      MOVE N'WWI_UserData' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_UserData.ndf',
      MOVE N'WWI_Log' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.ldf',
      MOVE N'WWI_InMemory_Data_1' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_InMemory_Data_1',
      NOUNLOAD,
      STATS = 5
    GO
    

    Questo comando ripristina il database e il file di log Directory D:\sql-server-data\wideworldimporters.

  5. Fai clic con il tasto destro del mouse sul codice della query e fai clic su Esegui.

    Attendi un paio di minuti per il completamento del ripristino del database. Puoi fare clic su Aggiorna in Esplora oggetti per verificare se il database è elencato nella struttura a albero Database. Al termine del ripristino del database, puoi chiudere la finestra della query senza salvare.

Per verificare che il database di esempio funzioni, puoi eseguire una query.

  1. In Microsoft SQL Server Management Studio, seleziona File > Nuovo > Esegui una query con connessione corrente per aprire una nuova finestra di query, quindi copia il seguente codice:

    SELECT top(100)
      i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName,
      i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy
    FROM
      WideWorldImporters.Sales.Invoices i
      JOIN WideWorldImporters.Sales.Customers c
      ON i.CustomerID=c.CustomerID
    WHERE i.ConfirmedDeliveryTime IS NOT NULL
    ORDER BY i.InvoiceDate desc;
    

    Questa query recupera le informazioni di riepilogo delle 100 fatture inviate più di recente.

  2. Fai clic con il tasto destro del mouse sulla finestra della query e poi su Esegui.

    Nel riquadro Risultati vengono visualizzate le informazioni di riepilogo.

    Screenshot che mostra il riquadro Risultati di una query al database di esempio.

Crea l'istanza VM di test

In questa sezione creerai un'istanza SQL Server denominata sql-server-test come la destinazione del database clonato. La configurazione di questa istanza è identico all'istanza di produzione. Tuttavia, non crei un secondo dato disk; puoi collegare il disco dati più avanti in questo tutorial.

Console

  1. Vai alla pagina Istanze VM.

    Vai alla pagina Istanze VM

  2. Fai clic su Crea.

  3. Nel campo Nome, digita sql-server-test.

  4. In Regione, seleziona us-east1.

  5. In Zona, seleziona us-east1-b.

  6. In Configurazione macchina, imposta Tipo di macchina su n1-standard-2 (2 vCPU).

  7. Fai clic su Cambia accanto all'immagine del disco del libro.

  8. Nel riquadro Disco di avvio, fai clic sulla scheda Immagini pubbliche.

  9. Nell'elenco a discesa Sistema operativo, seleziona SQL Server su Windows Server.

  10. Nell'elenco a discesa Versione, seleziona SQL Server 2022 Standard su Windows Server 2022 Datacenter.

  11. Assicurati che siano impostati i seguenti valori:

    • Il Tipo di disco di avvio è impostato su Disco permanente standard.
    • Dimensioni (GB) impostate su 50.
  12. Fai clic su Seleziona.

  13. In Identità e accesso API, imposta Ambiti di accesso su Consenti l'accesso completo a tutte le API Cloud.

  14. Fai clic su Crea.

Cloud Shell

  1. Apri Cloud Shell.

    Apri Cloud Shell

  2. Crea l'istanza SQL Server di test:

    gcloud compute instances create sql-server-test \
        --machine-type=n1-standard-2 \
        --scopes=cloud-platform \
        --image-family=sql-std-2022-win-2022 \
        --image-project=windows-sql-cloud \
        --boot-disk-size=50GB \
        --boot-disk-device-name=sql-server-test \
        --subnet=$SUBNET_NAME
    

    Puoi ignorare l'avviso relativo alle prestazioni del disco perché per questo tutorial non sono necessarie prestazioni elevate.

Connettiti all'istanza VM

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai alla pagina Istanze VM

  2. Attendi circa 5 minuti per la preparazione dell'istanza VM.

    Per monitorare il processo di inizializzazione della VM, visualizza l'output della porta seriale in Cloud Shell:

    gcloud compute instances tail-serial-port-output sql-server-prod
    

    Quando viene visualizzato il seguente messaggio, l'inizializzazione è completata.

    Instance setup finished. sql-server-test is ready to use.
    

    Premi Ctrl+C per interrompere il monitoraggio della porta seriale.

  3. Fai clic sul nome dell'istanza sql-server-test per visualizzare la pagina Dettagli istanza VM.

  4. In Accesso remoto, fai clic su Imposta password di Windows e poi su Imposta per creare il tuo account sulla macchina remota.

    Questo passaggio genera una password per te. Prendi nota della password o copiala in un file temporaneo sicuro.

  5. Nella sezione Compute Engine della console Google Cloud, fai clic sul menu a discesa RDP e seleziona Scarica l'opzione file RDP per scaricare il file RDP per la tua istanza.

    Utilizza questo file per connetterti all'istanza tramite un client RDP. Per ulteriori informazioni, vedi Client Microsoft Remote Desktop

  6. Quando richiesto, inserisci la password appena generata, quindi fai clic su OK.

  7. Per accettare il certificato del server e accedere al tuo telecomando Su un'istanza Windows, fai clic su Continua.

  8. Quando ti viene chiesto se vuoi che il PC sia rilevabile, fai clic su No.

Clonazione del database utilizzando gli snapshot dei dischi di Compute Engine

Un modo per clonare un database SQL Server in esecuzione su Compute Engine è memorizzare il database su un disco di dati separato e utilizzare gli snapshot dei dischi permanenti per creare un clone del disco.

Snapshot di dischi permanenti di ottenere una copia point-in-time dei dati su disco. La pianificazione degli snapshot dei dischi per eseguire automaticamente il backup dei dati.

In questa sezione del tutorial imparerai a:

  • Acquisisci uno snapshot del disco dati del server di produzione.
  • Crea un nuovo disco dallo snapshot.
  • Monta il nuovo disco sul server di test.
  • Collega il database su questo disco a SQL Server nell'istanza di test.

Il seguente diagramma mostra come un database viene clonato utilizzando snapshot del disco.

Diagramma che mostra la configurazione per la clonazione di un database SQL Server utilizzando gli snapshot del disco.

Crea lo snapshot del disco

Console

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai alla pagina Istanze VM

  2. Fai clic sul nome dell'istanza sql-server-prod.

  3. Nella pagina Dettagli istanza VM, fai clic sul disco sql-server-prod-data.

  4. Fai clic su Crea snapshot.

  5. Assegna allo snapshot il nome sql-server-prod-data-snapshot.

  6. In Località, seleziona Regionale.

  7. Verifica che la regione sia impostata su us-east1 (la stessa della VM) .

  8. Seleziona l'opzione Attiva VSS.

    Questa opzione utilizza Servizio di copia shadow del volume in Microsoft Windows per creare uno snapshot coerente.

  9. Fai clic su Crea.

    Dopo alcuni minuti, lo snapshot viene creato.

Cloud Shell

  1. Apri Cloud Shell.

    Apri Cloud Shell

  2. Crea uno snapshot del disco dati nella stessa zona dell'istanza VM:

    gcloud compute disks snapshot sql-server-prod-data \
         --snapshot-names=sql-server-prod-data-snapshot \
         --guest-flush \
         --zone="${ZONE}"
    

    L'opzione --guest-flush utilizza il servizio Copia Shadow del volume in Microsoft Windows per creare uno snapshot coerente. Dopo alcuni minuti, viene creato lo snapshot.

Collega lo snapshot del disco all'istanza di test

Devi creare un nuovo disco dati dallo snapshot che hai creato e poi collegarlo all'istanza sql-server-test.

Console

Nei passaggi successivi, creerai un nuovo disco permanente, utilizza lo snapshot del disco di produzione per i suoi contenuti, quindi collegalo al dell'istanza di test.

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai alla pagina Istanze VM

  2. Fai clic sul nome dell'istanza sql-server-test.

  3. Nella pagina Dettagli istanza VM, fai clic su Modifica.

  4. Fai clic su Aggiungi nuovo disco .

  5. Assegna il nome sql-server-test-data al nuovo disco.

  6. In Tipo di origine, seleziona Snapshot.

  7. Per l'istanza sql-server-prod-data-snapshot che hai creato, seleziona Snapshot di origine.

  8. Assicurati che la modalità sia impostata su Lettura/scrittura.

  9. Fai clic su Fine.

Cloud Shell

  1. Apri Cloud Shell.

    Apri Cloud Shell

  2. Crea un nuovo disco permanente utilizzando lo snapshot del disco di produzione per i relativi contenuti:

    gcloud beta compute disks create sql-server-test-data \
         --size=100GB \
         --source-snapshot=sql-server-prod-data-snapshot \
         --zone="${ZONE}"
    
  3. Collega il nuovo disco all'istanza sql-server-test con autorizzazioni di lettura/scrittura:

    gcloud compute instances attach-disk sql-server-test \
        --disk=sql-server-test-data --mode=rw
    

Monta il nuovo disco dati in Windows

Il disco che hai creato è collegato all'istanza VM, ma è offline e il volume è impostato su di sola lettura. Per configurare il volume come leggi/scrivi e montabile, segui questi passaggi:

  1. Nella finestra del client RDP connesso all'istanza sql-server-test, fai clic sul pulsante Avvia nella barra delle app di Windows, digita diskpart e poi fai clic su diskpart per aprire DiskPart.
  2. Quando ti viene chiesto di consentire all'app di apportare modifiche, fai clic su .
  3. Visualizza un elenco dei dischi collegati all'istanza:

    list disk
    

    L'output è il seguente:

    
    Disk ###  Status         Size     Free     Dyn  Gpt
    --------  -------------  -------  -------  ---  ---
    Disk 0    Online           50 GB      0 B
    Disk 1    Offline         100 GB      0 B       *
     

    Il tuo disco dati (disco 1, 100 GB) è offline.

  4. Seleziona il disco di dati:

    select disk 1
    
  5. Connetti il disco alla rete:

    online disk
    
  6. Elenca i volumi disponibili:

    list volume
    

    L'output è il seguente:

    Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
    ----------  ---  -----------  -----  ----------  -------  ---------  --------
    Volume 0     C                NTFS   Partition     49 GB  Healthy    Boot
    Volume 1                      FAT32  Partition    100 MB  Healthy    System
    Volume 2                      RAW    Partition     99 GB  Healthy
    

    Il volume 2 (99 GB) è il tuo volume di dati. La posizione è contrassegnata come Nascosto e non lettera dell'unità assegnata.

  7. Seleziona il volume:

    select volume 2
    
  8. Cancella gli attributi impostati quando hai creato il volume dalla sezione istantanea:

    attr volume clear readonly hidden nodefaultdriveletter shadowcopy
    

    Questo comando rende il volume montabile.

  9. Monta il volume come unità D:

    assign letter=d
    
  10. Esci da DiskPart:

    exit
    

Reimpostare la proprietà e le autorizzazioni dei file

Poiché hai creato il disco dati acquisendo uno snapshot nell'istanza sql-server-prod, gli ID utente per la proprietà e le autorizzazioni dei file sono diversi da quelli dell'istanza sql-server-test. Devi modificare la proprietà dei file assegnandola a un utente dell'istanza sql-server-test e aggiornare le autorizzazioni per rendere i file leggibili per l'utente locale e l'utente MSSQLSERVER.

  1. Nella finestra del client RDP connessa all'istanza sql-server-test, fai clic sul pulsante Start sulla barra delle applicazioni di Windows, quindi digita cmd.
  2. Apri l'app Prompt dei comandi come amministratore.
  3. Imposta l'utente servizio MSSQLSERVER come proprietario dei file nella cartella sql-server-data:

    icacls d:\sql-server-data /setowner "nt service\mssqlserver" /t
    
  4. Reimposta tutte le autorizzazioni per tutti i file nell'sql-server-data di primo livello cartella:

    icacls d:\sql-server-data /reset /t
    
  5. Aggiorna gli elenchi di controllo dell'accesso (ACL) per la cartella sql-server-data:

    icacls d:\sql-server-data /grant Administrators:(oi)(ci)f "nt service\mssqlserver":(oi)(ci)f "owner rights":(oi)(ci)f  %USERNAME%:(oi)(ci)f
    
  6. Disattiva l'ereditarietà dalla cartella principale dell'unità, in modo che si applicano le autorizzazioni precedenti:

    icacls d:\sql-server-data /inheritancelevel:r
    
  7. Esci dall'app Prompt dei comandi:

    exit
    

L'istanza SQL Server e l'utente locale dell'istanza sql-server-test ora possono accedere ai file del database.

Collega il database clonato

Ora colleghi il database clonato sull'unità D (data) all'SQL Server di test in esecuzione in un'istanza Compute Engine. Puoi collegare il database in modo interattivo utilizzando le procedure guidate di Microsoft SQL Server Management Studio o direttamente eseguendo un comando Transact-SQL.

Assistente SSMS

  1. Nella sessione RDP connessa all'istanza sql-server-test, fai clic su sul pulsante Start sulla barra delle applicazioni di Windows, digita ssms, quindi seleziona Microsoft SQL Server Management Studio (Esegui come amministratore).
  2. Fai clic su Connetti per connetterti al motore del database sql-server-test utilizzando l'autenticazione di Windows.
  3. In Esplora oggetti, fai clic con il tasto destro del mouse su Database, quindi seleziona Allega.
  4. Nella procedura guidata Collega database, fai clic su Aggiungi.
  5. Vai alla directory D:\sql-server-data\wideworldimporters, fai clic il file WideWorldImporters.mdf e fai clic su OK.
  6. Fai clic su OK per collegare il database.

    Dopo alcuni istanti, il database clonato viene collegato. Puoi fare clic su Aggiorna in Esplora oggetti per verificare se il database è elencato nella struttura a albero Database.

Transact-SQL

  1. In una sessione RDP connessa all'istanza sql-server-test, fai clic sul pulsante Avvio sulla barra delle app di Windows, digita ssms e poi seleziona Microsoft SQL Server Management Studio (Esegui come amministratore).
  2. Fai clic su Connetti per connetterti al motore del database sql-server-prod utilizzando l'autenticazione di Windows.
  3. Seleziona File > Nuovo > Query con connessione corrente per aprire una nuova finestra di query.
  4. Allega i file di dati e di log nella Directory D:\sql-server-data\wideworldimporters:

    USE [master]
    GO
    
    CREATE DATABASE [WideWorldImporters] ON
    ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters.mdf' ),
    ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters.ldf' ),
    ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters_UserData.ndf' )
     FOR ATTACH
    GO
    
  5. Fai clic con il tasto destro del mouse sul codice della query e fai clic su Esegui.

    Dopo alcuni istanti, il database clonato viene collegato. Puoi fare clic Aggiorna in Esplora oggetti per verificare se il database è elencato nella sezione Database albero di Natale. Dopo aver collegato il database, puoi chiudere la finestra della query senza salvare.

Per verificare che il database di esempio funzioni, puoi eseguire una query.

  1. In SQL Server Management Studio, seleziona File > Nuovo > Query con connessione corrente per aprire una nuova finestra di query, quindi copia il seguente codice:

    SELECT top(100)
      i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName,
      i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy
    FROM
      WideWorldImporters.Sales.Invoices i
      JOIN WideWorldImporters.Sales.Customers c
      ON i.CustomerID=c.CustomerID
    WHERE i.ConfirmedDeliveryTime IS NOT NULL
    ORDER BY i.InvoiceDate desc;
    

    Questa query recupera le informazioni di riepilogo delle 100 fatture inviate più di recente.

  2. Per eseguire la query, fai clic con il tasto destro del mouse sulla finestra della query e seleziona Esegui.

    Il riquadro Risultati mostra le informazioni di riepilogo.

    Screenshot che mostra il riquadro Risultati di una query al database di esempio.

Ora che hai visto come clonare un database utilizzando snapshot di disco permanente, potresti provare a clonare un database utilizzando il backup e ripristino. A completare il tutorial per questo secondo approccio, è necessario eliminare che hai clonato dall'istanza sql-server-test.

Elimina il database clonato

Per eliminare il database clonato creato utilizzando gli snapshot dei dischi, esegui la i seguenti passaggi.

Procedura guidata SSMS

  1. Nella sessione RDP connessa alla tua istanza sql-server-test, apri Microsoft SQL Server Management Studio e poi connettiti sql-server-test motore del database.
  2. In Esplora oggetti, espandi Database, fai clic con il tasto destro del mouse WorldWideImporters e seleziona Elimina.
  3. Nella procedura guidata Elimina oggetto, assicurati che la casella di controllo Chiudi le connessioni esistenti sia selezionata.
  4. Fai clic su OK.

Transact-SQL

  1. Nella sessione RDP connessa all'istanza sql-server-test, apri Microsoft SQL Server Management Studio e poi connettiti al motore del database sql-server-test.
  2. Per chiudere tutte le connessioni al database WideWorldImporters ed eliminare copia lo script seguente in una finestra di nuova query, fai clic con il tasto destro del mouse quindi fai clic su Esegui:

    USE [master]
    GO
    ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    DROP DATABASE [WideWorldImporters]
    GO
    

    Dopo aver eliminato il database, puoi chiudere la finestra della query senza risparmiare tempo. Puoi fare clic su Aggiorna. pollice Esplora oggetti per confermare che il database è stato eliminato.

Clonazione mediante backup e ripristino

Un secondo metodo per clonare un database SQL Server in esecuzione su Compute Engine è utilizzare il backup e il ripristino di SQL Server nativo. Con questo approccio, trasferisci il backup utilizzando Cloud Storage.

Questa sezione del tutorial utilizza le risorse che hai creato nella sezione Clonazione del database utilizzando gli snapshot dei dischi di Compute Engine di questo tutorial. Se non hai completato la sezione, devi farlo prima di continuare.

In questa sezione del tutorial imparerai a:

  • Creare un bucket Cloud Storage.
  • Esegui il backup del database sul server di produzione.
  • Copia il file di backup dal server di produzione in Cloud Storage.
  • Copia il file di backup da Cloud Storage al server di test.
  • Ripristina il backup nell'istanza di test.

Il seguente diagramma mostra come viene clonato un database trasferendo un backup utilizzando Cloud Storage.

Diagramma che mostra la configurazione per la clonazione di un database SQL Server utilizzando Cloud Storage.

Poiché è possibile concedere l'accesso a Cloud Storage ai sistemi esterni a Google Cloud, puoi utilizzare questo approccio per clonare i database dalle istanze SQL Server esterne.

Crea un bucket Cloud Storage

Devi creare un bucket Cloud Storage che memorizzi i file di backup mentre li trasferisci dall'istanza sql-server-prod all'istanza sql-server-test.

Console

  1. Nella console Google Cloud, vai alla pagina Browser in Cloud Storage.

    Vai alla pagina Browser Cloud Storage

  2. Fai clic su Crea bucket.

  3. Assegna al bucket il nome project-name-bucket.

    Sostituisci quanto segue:

    • project-name: l'ID del tuo progetto Google Cloud.
  4. Espandi Scegli una classe di archiviazione predefinita, quindi seleziona A livello di regione.

  5. In Località, seleziona us-east1.

  6. Fai clic su Crea.

Cloud Shell

  1. Apri Cloud Shell.

    Apri Cloud Shell

  2. Crea un bucket Cloud Storage nella stessa regione della VM di Compute Engine:

    gcloud storage buckets create "gs://$(gcloud config get-value project)-bucket" --location="${REGION}"
    

Esegui un backup completo point-in-time del database

Nel tuo ambiente di produzione potresti già eseguire dei backup. Puoi utilizzare questi backup come base per clonare il database. In questo tutorial viene creato un backup di sola copia in modo che non influisca sulle pianificazioni dei backup completi o incrementali esistenti.

Procedura guidata SSMS

  1. Nella sessione RDP connessa alla tua istanza sql-server-prod, apri Microsoft SQL Server Management Studio e poi connettiti sql-server-prod motore del database.
  2. In Esplora oggetti, espandi Database, fai clic con il tasto destro del mouse sul database WorldWideImporters e seleziona Attività > Backup.
  3. Nella procedura guidata Backup del database, assicurati che i seguenti valori sono impostate:
    • L'elemento Tipo di backup è impostato su Completo.
    • È selezionata l'opzione Backup solo copia.
    • L'opzione Backup su è impostata su Disco.
  4. Per aggiungere un file di backup, fai clic su Aggiungi.
  5. Nel campo Destination (Destinazione), inserisci D:\sql-server-data\WideWorldImporters-copy.bak.

    Screenshot che mostra la finestra di dialogo Database di backup.

  6. Seleziona la pagina Opzioni multimediali, quindi seleziona Sovrascrivi tutto set di backup esistenti.

  7. Seleziona la pagina Opzioni di backup, quindi modifica l'opzione Imposta backup. compressione per Comprimi backup.

  8. Per creare il backup, fai clic su OK.

    La creazione del backup richiede alcuni minuti.

Transact-SQL

  1. Nella sessione RDP connessa alla tua istanza sql-server-prod, apri Microsoft SQL Server Management Studio e poi connettiti sql-server-prod motore del database.
  2. Per eseguire un backup compresso di sola copia del WideWorldImportersdatabase nel file d:\sql-server-data\WideWorldImporters-copy.bak, copia lo script seguente in una nuova finestra di query, fai clic con il tasto destro del mouse sul codice e poi fai clic su Esegui.

    BACKUP DATABASE [WideWorldImporters]
       TO  DISK = N'd:\sql-server-data\WideWorldImporters-copy.bak'
       WITH  COPY_ONLY, NOFORMAT, INIT,
       NAME = N'WideWorldImporters-Full Database Backup',
       SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10
    GO
    

    Attendi qualche minuto affinché il server crei il backup. Al termine del backup del database, puoi chiudere la finestra della query senza salvare.

Copia il file di backup in Cloud Storage

  1. Nella sessione RDP connessa all'istanza sql-server-prod, apri una finestra di Windows PowerShell.
  2. Copia il file di backup nel bucket Cloud Storage che hai creato in precedenza:

    gcloud storage cp d:\sql-server-data\WideWorldImporters-copy.bak "gs://$(gcloud config get-value project)-bucket/" --no-clobber
    
  3. Esci da PowerShell.

    exit
    

Copia il file di backup da Cloud Storage a sql-server-test

  1. Nella sessione RDP connessa all'istanza sql-server-test, apri una finestra Windows PowerShell.
  2. Copia il file di backup nel bucket Cloud Storage che hai creato in precedenza:

    gcloud storage cp "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak" d:\sql-server-data\
    
  3. Esci da PowerShell.

    exit
    

Ora l'istanza di test dispone del backup completo della copia del database disco.

Ripristina il backup

Ora puoi ripristinare il backup della copia completa sull'unità D (data) della sql-server-test istanza.

Procedura guidata SSMS

  1. Nella sessione RDP connessa alla tua istanza sql-server-test, apri Microsoft SQL Server Management Studio e poi connettiti sql-server-test motore del database.
  2. In Esplora oggetti, fai clic con il tasto destro del mouse su Database e seleziona Ripristina database.
  3. Per Origine, seleziona il Dispositivo e poi fai clic sul pulsante [...] accanto al nome del dispositivo.
  4. Nella finestra di dialogo Seleziona dispositivi di backup, seleziona File nell'elenco Tipo di supporto di backup e poi fai clic su Aggiungi.
  5. Nel selettore dei file, vai a D:\sql-server-data, fai clic sul file WideWorldImporters-copy.bak e poi su OK.
  6. Fai clic su OK per chiudere la finestra di dialogo Seleziona dispositivi di backup.

    La finestra di dialogo Ripristina database è ora compilata con i dati relativi al backup del databaseWideWorldImporters.

  7. In Seleziona una pagina, fai clic su File.

  8. Seleziona Ricolloca tutti i file nella cartella.

  9. Nei campi Cartella file di dati e Cartella file di log, inserisci D:\sql-server-data\wideworldimporters.

    Screenshot che mostra la finestra di dialogo Ripristina database.

  10. Per avviare l'operazione di ripristino, fai clic su OK.

    Al termine del processo, verrà visualizzato il messaggio Database 'WideWorldImporters' restored successfully.

Transact-SQL

  1. Nella sessione RDP connessa all'istanza sql-server-test, apri Microsoft SQL Server Management Studio e poi connettiti al motore del database sql-server-test.
  2. Seleziona File > Nuovo > Query con connessione corrente per aprire una nuova finestra di query.
  3. Copia il seguente comando T-SQL per avviare un ripristino dal file di backup che hai copiato da Cloud Storage, ripristinando il database e il file di log nella directory D:\sql-server-data\wideworldimporters:

    USE [master]
    GO
    
    RESTORE DATABASE [WideWorldImporters]
      FROM  DISK = N'D:\SQL-SERVER-DATA\WideWorldImporters-copy.bak'
      WITH  FILE = 1,
      MOVE N'WWI_Primary' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.mdf',
      MOVE N'WWI_UserData' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_UserData.ndf',
      MOVE N'WWI_Log' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.ldf',
      MOVE N'WWI_InMemory_Data_1' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_InMemory_Data_1',
      NOUNLOAD,
      STATS = 5
    GO
    
  4. Fai clic con il tasto destro del mouse sul codice e poi su Esegui.

    Dopo un paio di minuti, il ripristino del database viene completato. Puoi fare clic su Aggiorna in Esplora oggetti per verificare se il database è elencato nella struttura Database. Al termine del ripristino del database, puoi chiudere la query finestra senza salvare.

Per dimostrare che il database è funzionale, puoi eseguire una query.

  1. In Microsoft SQL Management Studio, seleziona File > Nuovo > Query con connessione corrente per aprire una nuova finestra di query, quindi copia il seguente codice:

    SELECT top(100)
      i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName,
      i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy
    FROM
      WideWorldImporters.Sales.Invoices i
      JOIN WideWorldImporters.Sales.Customers c
      ON i.CustomerID=c.CustomerID
    WHERE i.ConfirmedDeliveryTime IS NOT NULL
    ORDER BY i.InvoiceDate desc;
    

    Questa query recupera informazioni di riepilogo dalle 100 più recenti le fatture inviate.

  2. Fai clic con il tasto destro del mouse sulla finestra della query e fai clic su Esegui.

    Nel riquadro Risultati vengono visualizzate le informazioni di riepilogo.

    Screenshot che mostra il riquadro Risultati di una query al database di esempio.

Utilizzo di Cloud SQL come destinazione di clonazione

Se il database di destinazione è ospitato su Cloud SQL e l'origine su Compute Engine, l'unico meccanismo di clonazione supportato è eseguendo il backup del database in Cloud Storage e ripristinando in Cloud SQL.

Per questo tutorial, riutilizza il backup creato nella sezione precedente.

Crea un'istanza Cloud SQL per SQL Server

  1. Apri Cloud Shell.

    Apri Cloud Shell

  2. Crea un'istanza Cloud SQL per SQL Server che esegue la stessa versione del database dell'istanza sql-server-prod:

    gcloud sql instances create sqlserver-cloudsql  \
      --database-version=SQLSERVER_2022_STANDARD \
      --cpu=2 \
      --memory=5GB \
      --root-password=sqlserver12@ \
      --region=${REGION}
    

    Viene creata un'istanza con utente root sqlserver e password sqlserver12@.

Aggiorna le autorizzazioni degli oggetti

È necessario impostare le autorizzazioni corrette su entrambi i bucket Cloud Storage e l'oggetto di backup, in modo che l'account di servizio Cloud SQL sia in grado di leggerli. Queste autorizzazioni vengono impostate automaticamente quando utilizzi la console Google Cloud per importa l'oggetto o puoi impostarlo utilizzando i comandi gcloud.

  1. Apri Cloud Shell.

    Apri Cloud Shell

  2. Imposta una variabile di ambiente contenente l'indirizzo dell'account di servizio del tuo Istanza Cloud SQL:

    CLOUDSQL_SA="$(gcloud sql instances describe sqlserver-cloudsql --format='get(serviceAccountEmailAddress)')"
    
  3. Aggiungi l'account di servizio al criterio IAM del bucket come lettore e scrittore:

    gcloud storage buckets add-iam-policy-binding "gs://$(gcloud config get-value project)-bucket/" \
        --member=user:"${CLOUDSQL_SA}" --role=roles/storage.objectUser
    

Importa il database esportato

  1. Apri Cloud Shell.

    Apri Cloud Shell

  2. Importa il file esportato nell'istanza Cloud SQL:

    gcloud sql import bak sqlserver-cloudsql \
        "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak" \
        --database WideWorldImporters
    

    Quando richiesto, inserisci y.

  3. Installa il pacchetto degli strumenti SQL Server:

    sudo apt install -y mssql-tools
    

    Se accetti i termini della licenza, inserisci yes quando richiesto.

    Utilizza questi strumenti per connetterti a Cloud SQL da Cloud Shell in modo da poter eseguire query sull'istanza Cloud SQL.

  4. Connetti il proxy Cloud SQL all'istanza SQL Server:

    CONNECTION_NAME=$(gcloud sql instances describe sqlserver-cloudsql --format='value(connectionName)')
    cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
    
  5. Per verificare che il database clonato sia funzionale, esegui una query:

    /opt/mssql-tools/bin/sqlcmd -U sqlserver -S 127.0.0.1 -Q \
      'SELECT top(100)
        i.InvoiceDate, i.InvoiceID, i.CustomerID, LEFT(c.CustomerName,20) CustomerName,
        i.ConfirmedDeliveryTime, LEFT(i.ConfirmedReceivedBy,20) ConfirmedReceivedBy
      FROM
        WideWorldImporters.Sales.Invoices i
        JOIN WideWorldImporters.Sales.Customers c
        ON i.CustomerID=c.CustomerID
      WHERE i.ConfirmedDeliveryTime IS NOT NULL
      ORDER BY i.InvoiceDate desc;'
    

    Quando richiesto, inserisci la password dell'utente sqlserver del server di database sqlserver-cloudsql (sqlserver12@).

    Questa query recupera informazioni di riepilogo dalle 100 più recenti le fatture inviate.

    L'output è il seguente:

    InvoiceDate      InvoiceID   CustomerID  CustomerName         ConfirmedDeliveryTime                  ConfirmedReceivedBy
    ---------------- ----------- ----------- -------------------- -------------------------------------- --------------------
          2016-05-30       70349         581 Wingtip Toys (Munich            2016-05-31 07:05:00.0000000 Youssef Eriksson
          2016-05-30       70350         123 Tailspin Toys (Roe P            2016-05-31 07:10:00.0000000 Ella Zvirbule
          2016-05-30       70351         175 Tailspin Toys (San A            2016-05-31 07:15:00.0000000 Julio Correa
          2016-05-30       70352        1029 Veronika Necesana               2016-05-31 07:20:00.0000000 Veronika Necesana
          2016-05-30       70353        1014 Narendra Tickoo                 2016-05-31 07:25:00.0000000 Narendra Tickoo
          2016-05-30       70354         930 Shantanu Huq                    2016-05-31 07:30:00.0000000 Shantanu Huq
          2016-05-30       70355         963 Be Trang                        2016-05-31 07:35:00.0000000 Be Trang
          2016-05-30       70356         567 Wingtip Toys (Jerome            2016-05-31 07:40:00.0000000 Severins Polis
          2016-05-30       70357         510 Wingtip Toys (Grabil            2016-05-31 07:45:00.0000000 Manish Ghosh
    ...
    

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alla in questo tutorial, puoi eliminare il progetto Google Cloud che hai creato per questo tutorial.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Passaggi successivi