Tutorial: Menggunakan Azure Blob Storage dengan SQL Server 2016

Berlaku untuk:yes SQL Server (semua versi yang didukung)

Selamat datang di tutorial Bekerja dengan SQL Server 2016 di Microsoft Azure Blob Storage. Tutorial ini membantu Anda memahami cara menggunakan Azure Blob Storage untuk file data SQL Server dan cadangan SQL Server.

SQL Server dukungan integrasi untuk Azure Blob Storage dimulai sebagai peningkatan SQL SERVER 2012 Service Pack 1 CU2, dan telah ditingkatkan lebih lanjut dengan SQL Server 2014 dan SQL Server 2016. Untuk gambaran umum fungsionalitas dan manfaat menggunakan fitur ini, lihat SQL Server File Data 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 pencadangan log transaksi salinan bayangan file SQL Server 2016 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 salinan bayangan 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 berjalan SQL Server 2016, dan database AdventureWorks2016. 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 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 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
  • 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 menamai 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 membuat kunci Tanda Tangan Akses Bersama (SAS), ikuti langkah-langkah berikut:

  1. Buka Window 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 yang Anda buat di langkah sebelumnya.

Kredensial SQL Server adalah objek yang digunakan untuk menyimpan informasi autentikasi yang diperlukan untuk menyambungkan ke sumber daya di luar SQL Server. Kredensial menyimpan jalur URI kontainer penyimpanan dan tanda tangan akses bersama untuk kontainer ini.

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

  1. Koneksi SQL Server Management Studio.

  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 Azure.

3 - Pencadangan database ke URL

Di bagian ini, Anda akan mencadangkan database AdventureWorks2016 di instans lokal Anda SQL Server 2016 ke kontainer Azure yang Anda buat di Bagian 1.

Catatan

Jika Anda ingin mencadangkan database SQL Server 2012 SP1 CU2 atau yang lebih baru atau database SQL Server 2014 ke kontainer Azure ini, Anda dapat menggunakan sintaks yang tidak digunakan lagi yang didokumenkan di sini untuk mencadangkan ke URL menggunakan sintaks WITH CREDENTIAL.

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

  1. Koneksi SQL Server Management Studio.

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

  3. Salin dan tempel skrip Transact-SQL berikut ini ke jendela kueri. Ubah URL dengan tepat untuk nama akun penyimpanan Anda 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 AdventureWorks2016  
       SET RECOVERY FULL;  
    
    -- Back up the full AdventureWorks2016 database to the container that you created in section 1  
    BACKUP DATABASE AdventureWorks2016   
       TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_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.

Connect to Azure Storage account

4 - Memulihkan database ke komputer virtual dari URL

Di bagian ini, Anda akan memulihkan database AdventureWorks2016 ke instans SQL Server 2016 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. Dengan SQL Server 2016, Anda juga dapat mempertimbangkan untuk menghapus cadangan di beberapa blob untuk meningkatkan performa cadangan saat mencadangkan database besar.

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

  1. Koneksi SQL Server Management Studio.

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

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

    -- Restore AdventureWorks2016 from URL to SQL Server instance using Azure Blob Storage for database files  
    RESTORE DATABASE AdventureWorks2016   
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_onprem.bak'   
       WITH  
          MOVE 'AdventureWorks2016_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_Data.mdf'  
         ,MOVE 'AdventureWorks2016_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2016_Log.ldf'  
    --, REPLACE  
    
    
  4. Buka Object Explorer dan sambungkan ke instans Azure SQL Server 2016 Anda.

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

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

    AdventureWorks db on Azure VM

  6. Di Object Explorer, sambungkan ke penyimpanan Azure.

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

Data files within container on Azure

5 - Mencadangkan database menggunakan cadangan salinan bayangan file

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

Untuk mencadangkan database AdventureWorks2016 menggunakan cadangan salinan bayangan file, ikuti langkah-langkah berikut:

  1. Koneksi SQL Server Management Studio.

  2. Buka jendela kueri baru dan sambungkan ke instans SQL Server 2016 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 ('AdventureWorks2016');  
    
  4. Salin dan tempel skrip transact-SQL berikut ini ke jendela kueri. Ubah URL dengan tepat untuk nama akun penyimpanan Anda dan kontainer yang Anda tentukan di bagian 1 lalu jalankan skrip ini. Perhatikan seberapa cepat pencadangan ini terjadi.

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

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

    Results of fn_db_backup_file_snapshots showing snapshots

  6. Di Object Explorer, di instans SQL Server 2016 Anda di komputer virtual Azure Anda, perluas simpul Database dan verifikasi bahwa database AdventureWorks2016 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 AdventureWorks2016_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).

    Snapshot back up on Azure

6 - Hasilkan aktivitas dan log cadangan menggunakan cadangan salinan bayangan file

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

Untuk menghasilkan aktivitas di database AdventureWorks2016 dan secara berkala membuat cadangan log transaksi menggunakan cadangan salinan bayangan file, ikuti langkah-langkah berikut:

  1. Koneksi SQL Server Management Studio.

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

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

    -- Verify row count at start  
    SELECT COUNT (*) from AdventureWorks2016.Production.Location;    
    
  4. Salin dan tempel dua skrip SQL Transact berikut ke dalam dua jendela kueri terpisah. Ubah URL dengan tepat untuk nama akun penyimpanan Anda 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 AdventureWorks2014 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 AdventureWorks2016.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 AdventureWorks2014.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 AdventureWorks2016.Production.Location);  
             SET @device = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-' + CONVERT (varchar(10),@numrows) + '-' + FORMAT(GETDATE(), 'yyyyMMddHHmmss') + '.bak';  
             BACKUP LOG AdventureWorks2016 TO URL = @device WITH FILE_SNAPSHOT;  
             SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2016');  
          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.

    Row count of 29,939 is displayed

  6. Tinjau output skrip kedua dan perhatikan bahwa setiap kali pernyataan LOG BACKUP dijalankan bahwa dua rekam jepret file baru dibuat, satu rekam jepret file dari 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 BACKUP dan satu untuk setiap eksekusi pernyataan LOG BACKUP.

Backup snapshot results

  1. Di Object Explorer, sambungkan ke penyimpanan Azure.

  2. 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).

    Multiple snapshots in Azure Container

7 - Memulihkan database ke titik waktu tertentu

Di bagian ini, Anda akan memulihkan database AdventureWorks2016 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 salinan bayangan file, Anda hanya memerlukan dua file cadangan log yang berdekatan yang menyediakan posting tujuan yang merangkum 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. Koneksi SQL Server Management Studio.

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

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

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

    Row count of 29,939 is displayed

  4. Salin dan tempel skrip transact-SQL berikut ini ke jendela kueri. Pilih dua file cadangan log yang berdekatan dan konversikan 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" 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 AdventureWorks2016 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;  
    RESTORE DATABASE AdventureWorks2016   
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<firstbackupfile>.bak'   
       WITH NORECOVERY,REPLACE;  
    RESTORE LOG AdventureWorks2016   
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<secondbackupfile>.bak'    
       WITH RECOVERY, STOPAT = 'June 26, 2018 01:48 PM';  
    ALTER DATABASE AdventureWorks2016 set multi_user;  
    -- get new count  
    SELECT COUNT (*) FROM AdventureWorks2016.Production.Location ;
    
  5. Tinjau output. Perhatikan bahwa setelah memulihkan jumlah baris adalah 18.389, yang merupakan jumlah 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 database AdventureWorks2016 sebagai database baru dari cadangan log transaksi salinan bayangan 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 salinan bayangan file sangat cepat, jauh 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 salinan bayangan 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 salinan bayangan file log karena setiap cadangan log salinan bayangan 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. Koneksi SQL Server Management Studio.

  2. Buka jendela kueri baru dan sambungkan ke instans SQL Server 2016 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 - Buat 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 ini 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 AdventureWorks2016_EOM   
        FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<logbackupfile.bak>'    
        WITH MOVE 'AdventureWorks2016_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2014_EOM_Data.mdf'  
       , MOVE 'AdventureWorks2016_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2014_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.

    Azure container 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, 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 Pencadangan Rekam Jepret File untuk File Database di Azure.

Untuk menghapus kumpulan cadangan salinan bayangan file, ikuti langkah-langkah berikut:

  1. Koneksi SQL Server Management Studio.
  2. Buka jendela kueri baru dan sambungkan ke instans mesin database SQL Server 2016 di komputer virtual Azure Anda (atau ke instans SQL Server 2016 dengan izin untuk membaca dan menulis pada kontainer ini).
  3. Salin dan tempel skrip transact-SQL berikut ini 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';  
  1. Di Object Explorer, sambungkan ke penyimpanan Azure.

  2. 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).

    Azure container showing the deletion of the log backup blob

  3. 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 ('AdventureWorks2016');   
    

    Results pane showing 2 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   

Lihat juga

SQL Server File Data di Microsoft Azure
Cadangan Salinan Bayangan untuk File Database di Azure
SQL Server Pencadangan keURLTanda Tangan Akses yang Dibagikan, Bagian 1: Memahami Model SAS
Buat Kontainer
Mengatur ACL Kontainer
Mendapatkan KontainerACLCredentials (Mesin Database)
CREATE CREDENTIAL (T-SQL)
sys.credentials (Transact-SQL)
sp_delete_backup (SQL Bertransaksi)
sys.fn_db_backup_file_snapshots (SQL Bertransaksi)
sp_delete_backup_file_snapshot (Transact-SQL)Cadangan Salinan Bayangan File untuk File Database di Azure