Tutorial: Menggunakan Azure Blob Storage dengan SQL Server

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru

Tutorial ini membantu Anda memahami cara menggunakan Azure Blob Storage untuk file data dan cadangan di SQL Server 2016 dan versi yang lebih baru.

Dukungan integrasi SQL Server untuk Azure Blob Storage dimulai sebagai peningkatan SQL Server 2012 Service Pack 1 CU2, dan ditingkatkan lebih lanjut dengan SQL Server 2014 dan SQL Server 2016. Untuk gambaran umum fungsionalitas dan manfaat menggunakan fitur ini, lihat SQL Server Data Files di Microsoft Azure.

Tutorial ini menunjukkan kepada Anda cara bekerja dengan SQL Server Data Files di Azure Blob Storage di beberapa bagian. Setiap bagian difokuskan pada tugas tertentu dan bagian harus diselesaikan secara berurutan. Pertama, Anda akan mempelajari cara membuat kontainer baru di Blob Storage dengan kebijakan akses tersimpan dan tanda tangan akses bersama. Kemudian, Anda akan mempelajari cara membuat kredensial SQL Server untuk mengintegrasikan SQL Server dengan Azure Blob Storage. Selanjutnya, Anda akan mencadangkan database ke Blob Storage dan memulihkannya ke komputer virtual Azure. Anda kemudian akan menggunakan cadangan log transaksi salinan bayangan file SQL Server untuk memulihkan ke titik waktu dan ke database baru. Terakhir, tutorial akan menunjukkan penggunaan prosedur dan fungsi tersimpan sistem data meta untuk membantu Anda memahami dan bekerja dengan cadangan rekam jepret file.

Prasyarat

Untuk menyelesaikan tutorial ini, Anda harus terbiasa dengan konsep pencadangan dan pemulihan SQL Server dan sintaks T-SQL.
Untuk menggunakan tutorial ini, Anda memerlukan akun penyimpanan Azure, SQL Server Management Studio (SSMS), akses ke instans SQL Server lokal, akses ke komputer virtual (VM) Azure yang menjalankan instans SQL Server 2016 atau versi yang AdventureWorks2022 lebih baru, dan database. Selain itu, akun yang digunakan untuk mengeluarkan perintah BACKUP dan RESTORE harus berada dalam peran database db_backupoperator dengan mengubah izin kredensial apa pun.

Penting

SQL Server tidak mendukung Azure Data Lake Storage, pastikan bahwa namespace hierarkis tidak diaktifkan pada akun penyimpanan yang digunakan untuk tutorial ini.

1 - Membuat kebijakan akses tersimpan dan penyimpanan akses bersama

Di bagian ini, Anda akan menggunakan skrip Azure PowerShell untuk membuat tanda tangan akses bersama pada kontainer Azure Blob Storage menggunakan kebijakan akses tersimpan.

Catatan

Skrip ini ditulis menggunakan Azure PowerShell 5.0.10586.

Tanda tangan akses bersama adalah URI yang memberikan hak akses terbatas ke kontainer, blob, antrean, atau tabel. Kebijakan akses tersimpan memberikan tingkat kontrol tambahan atas tanda tangan akses bersama di sisi server termasuk mencabut, kedaluwarsa, atau memperluas akses. Saat menggunakan peningkatan baru ini, Anda perlu membuat kebijakan pada kontainer dengan setidaknya hak baca, tulis, dan daftar.

Anda dapat membuat kebijakan akses tersimpan dan tanda tangan akses bersama dengan menggunakan Azure PowerShell, Azure Storage SDK, Azure REST API, atau utilitas pihak ketiga. Tutorial ini menunjukkan cara menggunakan skrip Azure PowerShell untuk menyelesaikan tugas ini. Skrip menggunakan model penyebaran Resource Manager dan membuat sumber daya baru berikut

  • Grup sumber daya
  • Akun penyimpanan
  • Kontainer Azure Blob Storage
  • Kebijakan SAS

Skrip ini dimulai dengan mendeklarasikan sejumlah variabel untuk menentukan nama untuk sumber daya di atas dan nama nilai input yang diperlukan berikut:

  • Nama awalan yang digunakan dalam penamaan objek sumber daya lainnya
  • Nama langganan
  • Lokasi pusat data

Skrip selesai dengan membuat pernyataan CREATE CREDENTIAL yang sesuai yang akan Anda gunakan dalam 2 - Membuat kredensial SQL Server menggunakan tanda tangan akses bersama. Pernyataan ini disalin ke clipboard untuk Anda dan merupakan output ke konsol untuk Anda lihat.

Untuk membuat kebijakan pada kontainer dan menghasilkan Tanda Tangan Akses Bersama (SAS), ikuti langkah-langkah berikut:

  1. Buka Windows PowerShell atau Windows PowerShell ISE (lihat persyaratan versi di atas).

  2. Edit lalu jalankan skrip di bawah ini:

    # Define global variables for the script
    $prefixName = '<a prefix name>'  # used as the prefix for the name for various objects
    $subscriptionID = '<your subscription ID>'   # the ID  of subscription name you will use
    $locationName = '<a data center location>'  # the data center region you will use
    $storageAccountName= $prefixName + 'storage' # the storage account name you will create or use
    $containerName= $prefixName + 'container'  # the storage container name to which you will attach the SAS policy with its SAS token
    $policyName = $prefixName + 'policy' # the name of the SAS policy
    
    # Set a variable for the name of the resource group you will create or use
    $resourceGroupName=$prefixName + 'rg'
    
    # Add an authenticated Azure account for use in the session
    Connect-AzAccount
    
    # Set the tenant, subscription and environment for use in the rest of
    Set-AzContext -SubscriptionId $subscriptionID
    
    # Create a new resource group - comment out this line to use an existing resource group
    New-AzResourceGroup -Name $resourceGroupName -Location $locationName
    
    # Create a new Azure Resource Manager storage account - comment out this line to use an existing Azure Resource Manager storage account
    New-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -Type Standard_RAGRS -Location $locationName
    
    # Get the access keys for the Azure Resource Manager storage account
    $accountKeys = Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName
    
    # Create a new storage account context using an Azure Resource Manager storage account
    $storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $accountKeys[0].Value
    
    # Creates a new container in Blob Storage
    $container = New-AzStorageContainer -Context $storageContext -Name $containerName
    
    # Sets up a Stored Access Policy and a Shared Access Signature for the new container
    $policy = New-AzStorageContainerStoredAccessPolicy -Container $containerName -Policy $policyName -Context $storageContext -StartTime $(Get-Date).ToUniversalTime().AddMinutes(-5) -ExpiryTime $(Get-Date).ToUniversalTime().AddYears(10) -Permission rwld
    
    # Gets the Shared Access Signature for the policy
    $sas = New-AzStorageContainerSASToken -name $containerName -Policy $policyName -Context $storageContext
    Write-Host 'Shared Access Signature= '$($sas.Substring(1))''
    
    # Sets the variables for the new container you just created
    $container = Get-AzStorageContainer -Context $storageContext -Name $containerName
    $cbc = $container.CloudBlobContainer
    
    # Outputs the Transact SQL to the clipboard and to the screen to create the credential using the Shared Access Signature
    Write-Host 'Credential T-SQL'
    $tSql = "CREATE CREDENTIAL [{0}] WITH IDENTITY='Shared Access Signature', SECRET='{1}'" -f $cbc.Uri,$sas.Substring(1)
    $tSql | clip
    Write-Host $tSql
    
    # Once you're done with the tutorial, remove the resource group to clean up the resources.
    # Remove-AzResourceGroup -Name $resourceGroupName
    
  3. Setelah skrip selesai, pernyataan CREATE CREDENTIAL akan berada di clipboard Anda untuk digunakan di bagian berikutnya.

2 - Membuat kredensial SQL Server menggunakan tanda tangan akses bersama

Di bagian ini, Anda akan membuat kredensial untuk menyimpan informasi keamanan yang akan digunakan oleh SQL Server untuk menulis dan membaca dari kontainer Azure Blob Storage yang Anda buat di langkah sebelumnya.

Info masuk SQL Server adalah objek yang digunakan untuk menyimpan informasi autentikasi yang diperlukan untuk menyambungkan ke sumber daya di luar SQL Server. Info masuk menyimpan jalur URI kontainer Azure Blob Storage dan tanda tangan akses bersama untuk kontainer ini.

Untuk membuat kredensial SQL Server, ikuti langkah-langkah berikut:

  1. Luncurkan SSMS.

  2. Buka jendela kueri baru dan sambungkan ke instans SQL Server mesin database di lingkungan lokal Anda.

  3. Di jendela kueri baru, tempelkan pernyataan CREATE CREDENTIAL dengan tanda tangan akses bersama dari bagian 1 dan jalankan skrip tersebut.

    Skrip akan terlihat seperti kode berikut.

    /* Example:
    USE master
    CREATE CREDENTIAL [https://msfttutorial.blob.core.windows.net/containername]
    WITH IDENTITY='SHARED ACCESS SIGNATURE'
    , SECRET = 'sharedaccesssignature'
    GO */
    
    USE master
    CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>]
      -- this name must match the container path, start with https and must not contain a forward slash at the end
    WITH IDENTITY='SHARED ACCESS SIGNATURE'
      -- this is a mandatory string and should not be changed
     , SECRET = 'sharedaccesssignature'
       -- this is the shared access signature key that you obtained in section 1.
    GO
    
  4. Untuk melihat semua kredensial yang tersedia, Anda bisa menjalankan pernyataan berikut di jendela kueri yang tersambung ke instans Anda:

    SELECT * from sys.credentials
    
  5. Buka jendela kueri baru dan sambungkan ke instans SQL Server mesin database di komputer virtual Azure Anda.

  6. Di jendela kueri baru, tempelkan pernyataan CREATE CREDENTIAL dengan tanda tangan akses bersama dari bagian 1 dan jalankan skrip tersebut.

  7. Ulangi langkah 5 dan 6 untuk instans SQL Server tambahan yang ingin Anda akses ke kontainer.

3 - Pencadangan Database ke URL

Di bagian ini, Anda akan mencadangkan AdventureWorks2022 database di instans SQL Server Anda ke kontainer yang Anda buat di Bagian 1.

Catatan

Jika Anda ingin mencadangkan database SQL Server 2012 (11.x) SP1 CU2+ atau database SQL Server 2014 (12.x) ke kontainer ini, Anda dapat menggunakan sintaks yang tidak digunakan lagi yang didokumenkan di sini untuk mencadangkan ke URL menggunakan WITH CREDENTIAL sintaks.

Untuk mencadangkan database ke penyimpanan blob, ikuti langkah-langkah berikut:

  1. Luncurkan SSMS.

  2. Buka jendela kueri baru dan sambungkan ke instans SQL Server di komputer virtual Azure Anda.

  3. Salin dan tempel skrip Transact-SQL berikut ke jendela kueri. Ubah URL dengan tepat untuk nama akun penyimpanan dan kontainer yang Anda tentukan di bagian 1 lalu jalankan skrip ini.

    -- To permit log backups, before the full database backup, modify the database to use the full recovery model.
    USE master;
    ALTER DATABASE AdventureWorks2022
       SET RECOVERY FULL;
    
    -- Back up the full AdventureWorks2022 database to the container that you created in section 1
    BACKUP DATABASE AdventureWorks2022
       TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_onprem.bak'
    
  4. Buka Object Explorer dan sambungkan ke penyimpanan Azure menggunakan akun penyimpanan dan kunci akun Anda.

    1. Perluas Kontainer, perluas kontainer yang Anda buat di bagian 1 dan verifikasi bahwa cadangan dari langkah 3 di atas muncul dalam kontainer ini.

    Screenshots indicating the multistep process to connect to Azure Storage account.

4 - Memulihkan database ke komputer virtual dari URL

Di bagian ini, Anda akan memulihkan AdventureWorks2022 database ke instans SQL Server di komputer virtual Azure Anda.

Catatan

Untuk tujuan kesederhanaan dalam tutorial ini, kami menggunakan kontainer yang sama untuk data dan file log yang kami gunakan untuk cadangan database. Di lingkungan produksi, Anda mungkin akan menggunakan beberapa kontainer, dan seringkali beberapa file data juga. Anda juga dapat mempertimbangkan untuk menghapus cadangan Anda di beberapa blob untuk meningkatkan performa cadangan saat mencadangkan database besar.

Untuk memulihkan AdventureWorks2022 database dari Azure Blob Storage ke instans SQL Server Anda di komputer virtual Azure Anda, ikuti langkah-langkah berikut:

  1. Luncurkan SSMS.

  2. Buka jendela kueri baru dan sambungkan ke instans SQL Server mesin database di komputer virtual Azure Anda.

  3. Salin dan tempel skrip Transact-SQL berikut ke jendela kueri. Ubah URL dengan tepat untuk nama akun penyimpanan dan kontainer yang Anda tentukan di bagian 1 lalu jalankan skrip ini.

    -- Restore AdventureWorks2022 from URL to SQL Server instance using Azure Blob Storage for database files
    RESTORE DATABASE AdventureWorks2022
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_onprem.bak'
       WITH
          MOVE 'AdventureWorks2022_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_Data.mdf'
         ,MOVE 'AdventureWorks2022_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_Log.ldf'
    --, REPLACE
    
  4. Buka Object Explorer dan sambungkan ke instans Azure SQL Server Anda.

  5. Di Object Explorer, perluas simpul Database dan verifikasi bahwa AdventureWorks2022 database telah dipulihkan (refresh simpul seperlunya)

    1. Klik kanan AdventureWorks2022, dan pilih Properti.
    2. Pilih File dan verifikasi bahwa jalur untuk dua file database adalah URL yang menunjuk ke blob di kontainer Azure Blob Storage Anda (pilih Batalkan setelah selesai).

    Screenshots from SSMS of the [!INCLUDE [sssampledbobject-md](../includes/sssampledbobject-md.md)] database on the Azure VM.

  6. Di Object Explorer, sambungkan ke penyimpanan Azure.

    1. Perluas Kontainer, perluas kontainer yang Anda buat di bagian 1 dan verifikasi bahwa AdventureWorks2022_Data.mdf dan AdventureWorks2022_Log.ldf dari langkah 3 di atas muncul dalam kontainer ini, bersama dengan file cadangan dari bagian 3 (refresh simpul seperlunya).

    Screenshot from Object Explorer in SSMS showing the data files within container on Azure beneath a SQL Server instance entry.

5 - Mencadangkan database menggunakan cadangan rekam jepret file

Di bagian ini, Anda akan mencadangkan AdventureWorks2022 database di komputer virtual Azure Anda menggunakan cadangan rekam jepret file untuk melakukan pencadangan yang hampir seketika menggunakan rekam jepret Azure. Untuk informasi selengkapnya tentang pencadangan rekam jepret file, lihat Pencadangan Rekam Jepret File untuk File Database di Azure

Untuk mencadangkan AdventureWorks2022 database menggunakan cadangan rekam jepret file, ikuti langkah-langkah berikut:

  1. Luncurkan SSMS.

  2. Buka jendela kueri baru dan sambungkan ke instans SQL Server mesin database di komputer virtual Azure Anda.

  3. Salin, tempel, dan jalankan skrip Transact-SQL berikut ke jendela kueri (jangan tutup jendela kueri ini - Anda akan menjalankan skrip ini lagi di langkah 5. Prosedur tersimpan sistem ini memungkinkan Anda melihat cadangan rekam jepret file yang ada untuk setiap file yang terdiri dari database tertentu. Anda akan melihat bahwa tidak ada cadangan rekam jepret file untuk database ini.

    -- Verify that no file snapshot backups exist
    SELECT * FROM sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
    
  4. Salin dan tempel skrip Transact-SQL berikut ke jendela kueri. Ubah URL dengan tepat untuk nama akun penyimpanan dan kontainer yang Anda tentukan di bagian 1 lalu jalankan skrip ini. Perhatikan seberapa cepat pencadangan ini terjadi.

    -- Backup the AdventureWorks2022 database with FILE_SNAPSHOT
    BACKUP DATABASE AdventureWorks2022
       TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_Azure.bak'
       WITH FILE_SNAPSHOT;
    
  5. Setelah memverifikasi bahwa skrip di langkah 4 berhasil dijalankan, jalankan skrip berikut lagi. Perhatikan bahwa operasi pencadangan rekam jepret file di langkah 4 menghasilkan rekam jepret file dari data dan file log.

    -- Verify that two file-snapshot backups exist
    SELECT * FROM sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
    

    A screenshot from SSMS of the results of fn_db_backup_file_snapshots, showing snapshots.

  6. Di Object Explorer, dalam instans SQL Server Anda di komputer virtual Azure Anda, perluas simpul Database dan verifikasi bahwa AdventureWorks2022 database telah dipulihkan ke instans ini (refresh simpul seperlunya).

  7. Di Object Explorer, sambungkan ke penyimpanan Azure.

  8. Perluas Kontainer, perluas kontainer yang Anda buat di bagian 1 dan verifikasi bahwa AdventureWorks2022_Azure.bak dari langkah 4 di atas muncul dalam kontainer ini, bersama dengan file cadangan dari bagian 3 dan file database dari bagian 4 (refresh simpul seperlunya).

    A screenshot from Object Explorer in SSMS showing the snapshot backup on Azure.

6 - Hasilkan aktivitas dan log cadangan menggunakan cadangan rekam jepret file

Di bagian ini, Anda akan menghasilkan aktivitas dalam AdventureWorks2022 database dan secara berkala membuat cadangan log transaksi menggunakan cadangan rekam jepret file. Untuk informasi selengkapnya tentang menggunakan cadangan rekam jepret file, lihat Cadangan Rekam Jepret File untuk File Database di Azure.

Untuk menghasilkan aktivitas dalam AdventureWorks2022 database dan secara berkala membuat cadangan log transaksi menggunakan cadangan rekam jepret file, ikuti langkah-langkah berikut:

  1. Luncurkan SSMS.

  2. Buka dua jendela kueri baru dan sambungkan masing-masing ke instans SQL Server mesin database di komputer virtual Azure Anda.

  3. Salin, tempel, dan jalankan skrip Transact-SQL berikut ke salah satu jendela kueri. Perhatikan bahwa Production.Location tabel memiliki 14 baris sebelum kita menambahkan baris baru di langkah 4.

    -- Verify row count at start
    SELECT COUNT (*) from AdventureWorks2022.Production.Location;
    
  4. Salin dan tempel dua skrip Transact-SQL berikut ke dalam dua jendela kueri terpisah. Ubah URL dengan tepat untuk nama akun penyimpanan dan kontainer yang Anda tentukan di bagian 1 lalu jalankan skrip ini secara bersamaan di jendela kueri terpisah. Skrip ini akan memakan waktu sekitar tujuh menit untuk diselesaikan.

    -- Insert 30,000 new rows into the Production.Location table in the AdventureWorks2022 database in batches of 75
    DECLARE @count INT=1, @inner INT;
    WHILE @count < 400
       BEGIN
          BEGIN TRAN;
             SET @inner =1;
                WHILE @inner <= 75
                   BEGIN;
                      INSERT INTO AdventureWorks2022.Production.Location
                         (Name, CostRate, Availability, ModifiedDate)
                            VALUES (NEWID(), .5, 5.2, GETDATE());
                      SET @inner = @inner + 1;
                   END;
          COMMIT;
       WAITFOR DELAY '00:00:01';
       SET @count = @count + 1;
       END;
    SELECT COUNT (*) from AdventureWorks2022.Production.Location;
    
    --take 7 transaction log backups with FILE_SNAPSHOT, one per minute, and include the row count and the execution time in the backup file name
    DECLARE @count INT=1, @device NVARCHAR(120), @numrows INT;
    WHILE @count <= 7
       BEGIN
             SET @numrows = (SELECT COUNT (*) FROM AdventureWorks2022.Production.Location);
             SET @device = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-' + CONVERT (varchar(10),@numrows) + '-' + FORMAT(GETDATE(), 'yyyyMMddHHmmss') + '.bak';
             BACKUP LOG AdventureWorks2022 TO URL = @device WITH FILE_SNAPSHOT;
             SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
          WAITFOR DELAY '00:1:00';
             SET @count = @count + 1;
       END;
    
  5. Tinjau output skrip pertama dan perhatikan bahwa jumlah baris akhir sekarang adalah 29.939.

    A screenshot from SSMS showing a result set with row count of 29,939.

  6. Tinjau output skrip kedua dan perhatikan bahwa setiap kali pernyataan LOG CADANGAN dijalankan bahwa dua rekam jepret file baru dibuat, satu rekam jepret file file log dan satu rekam jepret file file - untuk total dua rekam jepret file untuk setiap file database. Setelah skrip kedua selesai, perhatikan bahwa sekarang ada total 16 rekam jepret file, 8 untuk setiap file database - satu dari pernyataan DATABASE CADANGAN dan satu untuk setiap eksekusi pernyataan LOG CADANGAN.

    A screenshot from SSMS showing the result set of backup snapshot history.

  7. Di Object Explorer, sambungkan ke penyimpanan Azure.

  8. Perluas Kontainer, perluas kontainer yang Anda buat di bagian 1 dan verifikasi bahwa tujuh file cadangan baru muncul, bersama dengan file data dari bagian sebelumnya (refresh simpul sesuai kebutuhan).

    A screenshot from Object Explorer in SSMS with multiple snapshots in Azure Container.

7 - Memulihkan database ke titik waktu tertentu

Di bagian ini, Anda akan memulihkan AdventureWorks2022 database ke titik waktu antara dua cadangan log transaksi.

Dengan pencadangan tradisional, untuk mencapai pemulihan titik waktu, Anda harus menggunakan cadangan database lengkap, mungkin cadangan diferensial, dan semua file log transaksi hingga dan hanya melewati titik waktu yang ingin Anda pulihkan. Dengan cadangan rekam jepret file, Anda hanya memerlukan dua file cadangan log yang berdekatan yang menyediakan posting tujuan yang mem-framing waktu yang ingin Anda pulihkan. Anda hanya memerlukan dua kumpulan cadangan rekam jepret file log karena setiap cadangan log membuat rekam jepret file dari setiap file database (setiap file data dan file log).

Untuk memulihkan database ke titik waktu tertentu dari kumpulan cadangan rekam jepret file, ikuti langkah-langkah berikut:

  1. Luncurkan SSMS.

  2. Buka jendela kueri baru dan sambungkan ke instans SQL Server mesin database di komputer virtual Azure Anda.

  3. Salin, tempel, dan jalankan skrip Transact-SQL berikut ke jendela kueri. Verifikasi bahwa Production.Location tabel memiliki 29.939 baris sebelum kami memulihkannya ke titik waktu ketika ada lebih sedikit baris di langkah 4.

    -- Verify row count at start
    SELECT COUNT (*) from AdventureWorks2022.Production.Location
    

    A screenshot of the SSMS results showing a row count of 29,939.

  4. Salin dan tempel skrip Transact-SQL berikut ke jendela kueri. Pilih dua file cadangan log yang berdekatan dan konversi nama file menjadi tanggal dan waktu yang Anda perlukan untuk skrip ini. Ubah URL dengan tepat untuk nama akun penyimpanan Anda dan kontainer yang Anda tentukan di bagian 1, berikan nama file cadangan pertama dan kedua, berikan waktu STOPAT dalam format "26 Juni 2018 13:48 PM" lalu jalankan skrip ini. Skrip ini akan memakan waktu beberapa menit untuk diselesaikan

    -- restore and recover to a point in time between the times of two transaction log backups, and then verify the row count
    ALTER DATABASE AdventureWorks2022 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    RESTORE DATABASE AdventureWorks2022
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<firstbackupfile>.bak'
       WITH NORECOVERY,REPLACE;
    RESTORE LOG AdventureWorks2022
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<secondbackupfile>.bak'
       WITH RECOVERY, STOPAT = 'June 26, 2018 01:48 PM';
    ALTER DATABASE AdventureWorks2022 set multi_user;
    -- get new count
    SELECT COUNT (*) FROM AdventureWorks2022.Production.Location ;
    
  5. Tinjau output. Perhatikan bahwa setelah pemulihan jumlah baris adalah 18.389, yang merupakan jumlah baris antara cadangan log 5 dan 6 (jumlah baris Anda akan bervariasi).

    18-thousand-rows.JPG.

8 - Pulihkan sebagai database baru dari cadangan log

Di bagian ini, Anda akan memulihkan AdventureWorks2022 database sebagai database baru dari cadangan log transaksi rekam jepret file.

Dalam skenario ini, Anda melakukan pemulihan ke instans SQL Server pada komputer virtual yang berbeda untuk tujuan analisis dan pelaporan bisnis. Memulihkan ke instans yang berbeda pada komputer virtual yang berbeda akan membongkar beban kerja ke komputer virtual yang didedikasikan dan berukuran untuk tujuan ini, menghapus persyaratan sumber dayanya dari sistem transaksional.

Pemulihan dari cadangan log transaksi dengan cadangan rekam jepret file sangat cepat, secara substansial lebih cepat daripada dengan cadangan streaming tradisional. Dengan cadangan streaming tradisional, Anda harus menggunakan cadangan database lengkap, mungkin cadangan diferensial, dan beberapa atau semua cadangan log transaksi (atau cadangan database lengkap baru). Namun, dengan cadangan log rekam jepret file, Anda hanya memerlukan cadangan log terbaru (atau cadangan log lainnya atau dua cadangan log yang berdekatan untuk pemulihan titik waktu ke titik antara dua waktu pencadangan log). Agar jelas, Anda hanya memerlukan satu kumpulan cadangan rekam jepret file log karena setiap cadangan log rekam jepret file membuat rekam jepret file dari setiap file database (setiap file data dan file log).

Untuk memulihkan database ke database baru dari cadangan log transaksi menggunakan cadangan rekam jepret file, ikuti langkah-langkah berikut:

  1. Luncurkan SSMS.

  2. Buka jendela kueri baru dan sambungkan ke instans SQL Server mesin database di komputer virtual Azure.

    Catatan

    Jika ini adalah komputer virtual Azure yang berbeda dari yang telah Anda gunakan untuk bagian sebelumnya, pastikan Anda telah mengikuti langkah-langkah dalam 2 - Membuat kredensial SQL Server menggunakan tanda tangan akses bersama. Jika Anda ingin memulihkan ke kontainer yang berbeda, ikuti langkah-langkah dalam 1 - Buat kebijakan akses tersimpan dan penyimpanan akses bersama untuk kontainer baru.

  3. Salin dan tempel skrip Transact-SQL berikut ke jendela kueri. Pilih file cadangan log yang ingin Anda gunakan. Ubah URL dengan tepat untuk nama akun penyimpanan Anda dan kontainer yang Anda tentukan di bagian 1, berikan nama file cadangan log lalu jalankan skrip ini.

    -- restore as a new database from a transaction log backup file
    RESTORE DATABASE AdventureWorks2022_EOM
        FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<logbackupfile.bak>'
        WITH MOVE 'AdventureWorks2022_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_EOM_Data.mdf'
       , MOVE 'AdventureWorks2022_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_EOM_Log.ldf'
       , RECOVERY
    --, REPLACE
    
  4. Tinjau output untuk memverifikasi bahwa pemulihan berhasil.

  5. Di Object Explorer, sambungkan ke penyimpanan Azure.

  6. Perluas Kontainer, perluas kontainer yang Anda buat di bagian 1 (refresh jika perlu) dan verifikasi bahwa data baru dan file log muncul di kontainer, bersama dengan blob dari bagian sebelumnya.

    Screenshot of SQL Server Management Studio's storage browser of Azure containers showing the data and log files for the new database.

9 - Mengelola kumpulan cadangan dan cadangan salinan bayangan file

Di bagian ini, Anda akan menghapus kumpulan cadangan menggunakan prosedur tersimpan sistem sp_delete_backup (Transact-SQL). Prosedur tersimpan sistem ini menghapus file cadangan dan rekam jepret file pada setiap file database yang terkait dengan kumpulan cadangan ini.

Catatan

Jika Anda mencoba menghapus kumpulan cadangan hanya dengan menghapus file cadangan dari kontainer Azure Blob Storage, Anda hanya akan menghapus file cadangan itu sendiri - rekam jepret file terkait akan tetap ada. Jika Anda menemukan diri Anda dalam skenario ini, gunakan fungsi sistem sys.fn_db_backup_file_snapshots (Transact-SQL) untuk mengidentifikasi URL rekam jepret file tanpa induk dan gunakan prosedur tersimpan sistem sp_delete_backup_file_snapshot (Transact-SQL) untuk menghapus setiap rekam jepret file tanpa induk. Untuk informasi selengkapnya, lihat Cadangan Rekam Jepret File untuk File Database di Azure.

Untuk menghapus kumpulan cadangan rekam jepret file, ikuti langkah-langkah berikut:

  1. Luncurkan SSMS.

  2. Buka jendela kueri baru dan sambungkan ke instans SQL Server mesin database di komputer virtual Azure Anda (atau ke instans SQL Server apa pun dengan izin untuk membaca dan menulis pada kontainer ini).

  3. Salin dan tempel skrip Transact-SQL berikut ke jendela kueri. Pilih cadangan log yang ingin Anda hapus bersama dengan rekam jepret file terkait. Ubah URL dengan tepat untuk nama akun penyimpanan Anda dan kontainer yang Anda tentukan di bagian 1, berikan nama file cadangan log lalu jalankan skrip ini.

    sys.sp_delete_backup 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-21764-20181003205236.bak';
    
  4. Di Object Explorer, sambungkan ke penyimpanan Azure.

  5. Perluas Kontainer, perluas kontainer yang Anda buat di bagian 1 dan verifikasi bahwa file cadangan yang Anda gunakan di langkah 3 tidak lagi muncul dalam kontainer ini (refresh simpul seperlunya).

    Two screenshots of SQL Server Management Studios storage browser showing Azure containers and the deletion of the transaction log backup blob.

  6. Salin, tempel, dan jalankan skrip Transact-SQL berikut ke jendela kueri untuk memverifikasi bahwa dua rekam jepret file telah dihapus.

    -- verify that two file snapshots have been removed
    SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
    

    Screenshot of the SSMS results pane showing two file snapshots deleted.

10 - Menghapus sumber daya

Setelah Anda selesai dengan tutorial ini, dan untuk menghemat sumber daya, pastikan untuk menghapus grup sumber daya yang dibuat dalam tutorial ini.

Untuk menghapus grup sumber daya, jalankan kode PowerShell berikut:

# Define global variables for the script
$prefixName = '<prefix name>'  # should be the same as the beginning of the tutorial

# Set a variable for the name of the resource group you will create or use
$resourceGroupName=$prefixName + 'rg'

# Adds an authenticated Azure account for use in the session
Connect-AzAccount

# Set the tenant, subscription and environment for use in the rest of
Set-AzContext -SubscriptionId $subscriptionID
  
# Remove the resource group
Remove-AzResourceGroup -Name $resourceGroupName

Langkah berikutnya