Samouczek: używanie usługi Azure Blob Storage z programem SQL Server
Dotyczy: SQL Server 2016 (13.x) i nowsze wersje
Ten samouczek pomaga zrozumieć, jak używać usługi Azure Blob Storage na potrzeby plików danych i kopii zapasowych w programie SQL Server 2016 i nowszych wersjach.
Obsługa integracji z platformą Azure Blob Storage w SQL Server rozpoczęła się jako rozszerzenie SQL Server 2012 Service Pack 1 CU2 i została dalej rozwinięta w SQL Server 2014 oraz SQL Server 2016. Aby zapoznać się z omówieniem funkcji i zalet korzystania z tej funkcji, zobacz SQL Server Data Files in Microsoft Azure.
W tym samouczku pokazano, jak pracować z usługą SQL Server Data Files w usłudze Azure Blob Storage w wielu sekcjach. Każda sekcja koncentruje się na konkretnym zadaniu, a sekcje powinny być wykonywane w sekwencji. Najpierw dowiesz się, jak utworzyć nowy kontener w usłudze Blob Storage z zapisanymi zasadami dostępu i sygnaturą dostępu współdzielonego. Następnie dowiesz się, jak utworzyć poświadczenia programu SQL Server w celu zintegrowania programu SQL Server z usługą Azure Blob Storage. Następnie utworzysz kopię zapasową bazy danych w usłudze Blob Storage i przywrócisz ją do maszyny wirtualnej platformy Azure. Następnie użyjesz kopii zapasowej transakcji dziennika migawki plikowej SQL Server, aby przywrócić do określonego punktu w czasie i utworzyć nową bazę danych. Na koniec samouczek przedstawia użycie procedur składowanych i funkcji systemu metadanych w celu ułatwienia zrozumienia kopii zapasowych migawek plików i pracy z nich.
Warunki wstępne
Aby ukończyć ten samouczek, musisz zapoznać się z pojęciami dotyczącymi tworzenia kopii zapasowych i przywracania kopii zapasowych programu SQL Server oraz składnią języka T-SQL.
Aby użyć tego samouczka, potrzebujesz konta usługi Azure Storage, programu SQL Server Management Studio (SSMS), dostępu do wystąpienia lokalnego programu SQL Server, dostępu do maszyny wirtualnej platformy Azure z uruchomionym wystąpieniem programu SQL Server 2016 lub nowszej oraz bazą danych AdventureWorks2022
. Ponadto konto używane do wydawania poleceń BACKUP i RESTORE powinno znajdować się w roli bazy danych db_backupoperator z uprawnieniami alter any credential.
- Uzyskaj bezpłatne konto platformy Azure .
- Utwórz konto usługi Azure Storage.
- Zainstaluj program SQL Server 2017 Developer Edition.
- Aprowizuj maszynę wirtualną platformy Azure z programem SQL Server
- Zainstaluj program SQL Server Management Studio.
- Pobierz przykładowe bazy danych AdventureWorks.
- Przypisz konto użytkownika do roli db_backupoperator i przyznaj uprawnienia do zmiany dowolnych poświadczeń.
Ważny
Program SQL Server nie obsługuje usługi Azure Data Lake Storage, dlatego upewnij się, że hierarchiczna przestrzeń nazw nie jest włączona na koncie magazynu używanym na potrzeby tego samouczka.
1 — Tworzenie przechowywanych zasad dostępu i magazynu dostępu współdzielonego
W tej sekcji użyjesz skryptu Azure PowerShell, aby utworzyć sygnaturę dostępu współdzielonego w kontenerze usługi Azure Blob Storage przy użyciu przechowywanych zasad dostępu.
Notatka
Ten skrypt jest napisany przy użyciu programu Azure PowerShell 5.0.10586.
Sygnatura dostępu współdzielonego to identyfikator URI, który udziela ograniczonych praw dostępu do kontenerów, obiektów blob, kolejek lub tabel. Przechowywane zasady dostępu zapewniają dodatkowy poziom kontroli nad sygnaturami dostępu współdzielonego po stronie serwera, w tym cofanie, wygasanie lub rozszerzanie dostępu. W przypadku korzystania z tego nowego rozszerzenia należy utworzyć zasadę dla kontenera z co najmniej uprawnieniami do odczytu, zapisu i wyświetlania listy.
Możesz utworzyć przechowywane zasady dostępu i sygnaturę dostępu współdzielonego przy użyciu programu Azure PowerShell, zestawu AZURE Storage SDK, interfejsu API REST platformy Azure lub narzędzia innej firmy. W tym samouczku pokazano, jak wykonać to zadanie za pomocą skryptu programu Azure PowerShell. Skrypt używa modelu wdrażania usługi Resource Manager i tworzy następujące nowe zasoby
- Grupa zasobów
- Konto magazynu
- Kontener usługi Azure Blob Storage
- Zasady SAS (Sygnatura Dostępu Współdzielonego)
Ten skrypt rozpoczyna się od zadeklarowania wielu zmiennych w celu określenia nazw powyższych zasobów oraz nazw następujących wymaganych wartości wejściowych:
- Nazwa prefiksu używana w nazewnictwie innych obiektów zasobów
- Nazwa subskrypcji
- Lokalizacja centrum danych
Skrypt zostanie ukończony przez wygenerowanie odpowiedniej instrukcji CREATE CREDENTIAL, która będzie używana w 2 — tworzenie poświadczeń programu SQL Server przy użyciu sygnatury dostępu współdzielonego. To oświadczenie zostało skopiowane do twojego schowka i jest wyświetlane w konsoli, abyś mógł zobaczyć.
Aby utworzyć zasady w kontenerze i wygenerować sygnaturę dostępu współdzielonego (SAS), wykonaj następujące kroki:
Otwórz program Windows PowerShell lub program Windows PowerShell ISE (zobacz wymagania dotyczące wersji powyżej).
Edytuj, a następnie wykonaj poniższy skrypt:
# 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
Po zakończeniu działania skryptu instrukcja CREATE CREDENTIAL będzie znajdować się w schowku do użycia w następnej sekcji.
2 — Tworzenie poświadczeń programu SQL Server przy użyciu sygnatury dostępu współdzielonego
W tej sekcji utworzysz poświadczenia do przechowywania informacji zabezpieczających, które będą używane przez program SQL Server do zapisywania i odczytywania z kontenera usługi Azure Blob Storage utworzonego w poprzednim kroku.
Poświadczenie programu SQL Server to obiekt używany do przechowywania informacji uwierzytelniania wymaganych do nawiązania połączenia z zasobem poza programem SQL Server. Poświadczenie przechowuje ścieżkę identyfikatora URI kontenera usługi Azure Blob Storage oraz podpis dostępu współdzielonego dla tego kontenera.
Aby utworzyć poświadczenia programu SQL Server, wykonaj następujące kroki:
Uruchom program SSMS.
Otwórz nowe okno zapytania i połącz się z instancją aparatu bazy danych SQL Server w swojej lokalnej infrastrukturze.
W nowym oknie zapytania wklej instrukcję CREATE CREDENTIAL z sygnaturą dostępu współdzielonego z sekcji 1 i wykonaj ten skrypt.
Skrypt będzie wyglądać podobnie do poniższego kodu.
/* 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
Aby wyświetlić wszystkie dostępne poświadczenia, możesz uruchomić następującą instrukcję w oknie zapytania połączonym z wystąpieniem:
SELECT * from sys.credentials
Otwórz nowe okno zapytania i połącz się z wystąpieniem aparatu bazy danych SQL Server na maszynie wirtualnej Azure.
W nowym oknie zapytania wklej instrukcję CREATE CREDENTIAL z sygnaturą dostępu współdzielonego z sekcji 1 i wykonaj ten skrypt.
Powtórz kroki 5 i 6 dla wszelkich dodatkowych wystąpień programu SQL Server, które mają mieć dostęp do kontenera.
3 - Kopia zapasowa bazy danych na URL
W tej sekcji wykonasz kopię zapasową bazy danych AdventureWorks2022
w wystąpieniu programu SQL Server do kontenera, który utworzyłeś w sekcji , Sekcja 1,.
Notatka
Jeśli chcesz utworzyć kopię zapasową bazy danych SQL Server 2012 (11.x) z dodatkiem SP1 CU2 lub bazy danych SQL Server 2014 (12.x) do tego kontenera, możesz użyć przestarzałej składni udokumentowanej tutaj, aby utworzyć kopię zapasową na adres URL przy użyciu składni WITH CREDENTIAL
.
Aby utworzyć kopię zapasową bazy danych w magazynie obiektów blob, wykonaj następujące kroki:
Uruchom program SSMS.
Otwórz nowe okno zapytania i połącz się z instancją SQL Server na maszynie wirtualnej Azure.
Skopiuj następujący skrypt Transact-SQL i wklej go w oknie zapytania. Zmodyfikuj adres URL odpowiednio dla nazwy konta magazynu i kontenera określonego w sekcji 1, a następnie wykonaj ten skrypt.
-- 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'
Otwórz Eksploratora obiektów i połącz się z usługą Azure Storage przy użyciu konta magazynu i klucza konta.
- Rozwiń element Containers, rozwiń kontener, który utworzyłeś w sekcji 1 i sprawdź, czy kopia zapasowa z kroku 3 powyżej pojawia się w tym kontenerze.
4 — Przywracanie bazy danych do maszyny wirtualnej z adresu URL
W tej części przywrócisz bazę danych AdventureWorks2022
do wystąpienia programu SQL Server na maszynie wirtualnej Azure.
Notatka
Dla uproszczenia w tym samouczku używamy tego samego kontenera dla plików danych i dzienników używanych do tworzenia kopii zapasowej bazy danych. W środowisku produkcyjnym prawdopodobnie będziesz używać wielu kontenerów i często wielu plików danych. Możesz również rozważyć podzielenie kopii zapasowej na wielu obiektach blob, w celu zwiększenia wydajności podczas tworzenia kopii zapasowej dużej bazy danych.
Aby przywrócić bazę danych AdventureWorks2022
z usługi Azure Blob Storage do wystąpienia programu SQL Server na maszynie wirtualnej platformy Azure, wykonaj następujące kroki:
Uruchom program SSMS.
Otwórz nowe okno zapytania i połącz się z instancją serwera SQL Server na maszynie wirtualnej Azure.
Skopiuj następujący skrypt Transact-SQL i wklej go w oknie zapytania. Zmodyfikuj adres URL odpowiednio dla nazwy konta magazynu i kontenera określonego w sekcji 1, a następnie wykonaj ten skrypt.
-- 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
Otwórz eksplorator obiektów i połącz się z wystąpieniem Azure SQL Server.
W Eksploratorze obiektów rozwiń węzeł Bazy danych i sprawdź, czy baza danych
AdventureWorks2022
została przywrócona (odśwież węzeł w razie potrzeby)- Kliknij prawym przyciskiem myszy AdventureWorks2022, a następnie wybierz pozycję właściwości .
- Wybierz pozycję Files i sprawdź, czy ścieżki do dwóch plików bazy danych są adresami URL wskazującymi na bloby w kontenerze usługi Azure Blob Storage (wybierz pozycję Anuluj po sprawdzeniu).
W Eksploratorze obiektów połącz się z usługą Azure Storage.
- Rozwiń Containers, otwórz kontener utworzony w sekcji 1 i sprawdź, czy
AdventureWorks2022_Data.mdf
iAdventureWorks2022_Log.ldf
z kroku 3 pojawiają się w tym kontenerze wraz z plikiem kopii zapasowej z sekcji 3 (odśwież kontener zgodnie z potrzebami).
- Rozwiń Containers, otwórz kontener utworzony w sekcji 1 i sprawdź, czy
5 — Backup bazy danych przy użyciu backupu migawki plików
W tej sekcji utworzysz kopię zapasową bazy danych AdventureWorks2022
na maszynie wirtualnej Azure, korzystając z kopii zapasowej migawki plików, aby wykonać niemal natychmiastową kopię zapasową za pomocą migawek Azure. Aby uzyskać więcej informacji na temat kopii zapasowych migawek plików, zobacz File-Snapshot Kopie zapasowe plików baz danych w Azure
Aby utworzyć kopię zapasową bazy danych AdventureWorks2022
używając kopii zapasowej w formie migawki plików, wykonaj następujące kroki:
Uruchom program SSMS.
Otwórz nowe okno zapytania i połącz się z instancją aparatu bazy danych SQL Server na maszynie wirtualnej platformy Azure.
Skopiuj, wklej i wykonaj następujący skrypt Transact-SQL w oknie zapytania (nie zamykaj tego okna zapytania — ten skrypt zostanie wykonany ponownie w kroku 5. Ta systemowa procedura składowana umożliwia wyświetlanie istniejących kopii zapasowych migawek plików dla każdego pliku składającego się z określonej bazy danych. Zauważysz, że nie ma kopii zapasowych migawek plików dla tej bazy danych.
-- Verify that no file snapshot backups exist SELECT * FROM sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
Skopiuj następujący skrypt Transact-SQL i wklej go w oknie zapytania. Zmodyfikuj adres URL odpowiednio dla nazwy konta magazynu i kontenera określonego w sekcji 1, a następnie wykonaj ten skrypt. Zwróć uwagę, jak szybko odbywa się ta kopia zapasowa.
-- 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;
Po upewnieniu się, że skrypt w kroku 4 został wykonany pomyślnie, ponownie wykonaj następujący skrypt. Zwróć uwagę, że operacja tworzenia kopii zapasowej migawki pliku w kroku 4 wygenerowała migawki plików zarówno dla pliku danych, jak i dla pliku dziennika.
-- Verify that two file-snapshot backups exist SELECT * FROM sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
W Eksploratorze obiektów w wystąpieniu programu SQL Server na maszynie wirtualnej platformy Azure rozwiń węzeł Databases i sprawdź, czy baza danych
AdventureWorks2022
została przywrócona do tego wystąpienia (odśwież węzeł w razie potrzeby).W Eksploratorze obiektów połącz się z usługą Azure Storage.
Rozwiń węzeł Containers, rozwiń kontener utworzony w sekcji 1 i sprawdź, czy
AdventureWorks2022_Azure.bak
z kroku 4 powyżej pojawia się w tym kontenerze wraz z plikiem kopii zapasowej z sekcji 3 i plikami bazy danych z sekcji 4 (odśwież węzeł zgodnie z potrzebami).
6 — Tworzenie dziennika aktywności i kopii zapasowych za pomocą migawek plików
W tej sekcji wygenerujesz działanie w bazie danych AdventureWorks2022
i okresowo utworzysz kopie zapasowe dziennika transakcji przy użyciu kopii zapasowych migawek plików. Aby uzyskać więcej informacji na temat korzystania z kopii zapasowych migawek plików, zobacz File-Snapshot Backups for Database Files in Azure.
Aby wygenerować działanie w bazie danych AdventureWorks2022
i okresowo tworzyć kopie zapasowe dziennika transakcji przy użyciu kopii zapasowych migawek plików, wykonaj następujące kroki:
Uruchom program SSMS.
Otwórz dwa nowe okna zapytań i połącz je z instancją SQL Server aparatu bazy danych na maszynie wirtualnej platformy Azure.
Skopiuj, wklej i wykonaj następujący skrypt Transact-SQL w jednym z okien zapytań. Zwróć uwagę, że tabela
Production.Location
zawiera 14 wierszy przed dodaniem nowych wierszy w kroku 4.-- Verify row count at start SELECT COUNT (*) from AdventureWorks2022.Production.Location;
Skopiuj i wklej następujące dwa skrypty Transact-SQL do dwóch oddzielnych okien zapytań. Zmodyfikuj adres URL odpowiednio dla nazwy konta magazynu i kontenera określonego w sekcji 1, a następnie wykonaj te skrypty jednocześnie w oddzielnych oknach zapytań. Wykonanie tych skryptów potrwa około siedmiu minut.
-- 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;
Przejrzyj dane wyjściowe pierwszego skryptu i zwróć uwagę, że końcowa liczba wierszy wynosi teraz 29 939.
Przejrzyj dane wyjściowe drugiego skryptu i zwróć uwagę, że za każdym razem, gdy instrukcja BACKUP LOG jest wykonywana, że tworzone są dwie nowe migawki plików, jedna migawka pliku dziennika i jedna migawka pliku danych — łącznie dwie migawki plików dla każdego pliku bazy danych. Po zakończeniu drugiego skryptu zwróć uwagę, że istnieje teraz łącznie 16 migawek plików, 8 dla każdego pliku bazy danych — jeden z instrukcji BACKUP DATABASE i jeden dla każdego wykonania instrukcji BACKUP LOG.
W Eksploratorze obiektów połącz się z usługą Azure Storage.
Rozwiń węzeł Containers, rozwiń kontener utworzony w sekcji 1 i sprawdź, czy są wyświetlane siedem nowych plików kopii zapasowych wraz z plikami danych z poprzednich sekcji (odśwież węzeł zgodnie z potrzebami).
7 — Przywracanie bazy danych do punktu w czasie
W tej sekcji przywrócisz bazę danych AdventureWorks2022
do punktu w czasie między dwoma kopiami zapasowymi dziennika transakcji.
W przypadku tradycyjnych kopii zapasowych, aby przeprowadzić przywracanie do punktu w czasie, należy użyć pełnej kopii zapasowej bazy danych, być może różnicowej kopii zapasowej i wszystkich plików dziennika transakcji do i tuż obok punktu w czasie, do którego chcesz przywrócić. W przypadku kopii zapasowych typu migawka plików potrzebne są tylko dwa sąsiadujące pliki kopii zapasowej dziennika, które określają ramy czasowe, do których chcesz przywrócić. Potrzebne są tylko dwa zestawy kopii zapasowych migawek plików dziennika, ponieważ każda kopia zapasowa dziennika tworzy migawkę pliku każdej bazy danych (każdy plik danych i plik dziennika).
Aby przywrócić bazę danych do określonego punktu w czasie z zestawów kopii zapasowych migawek plików, wykonaj następujące kroki:
Uruchom program SSMS.
Otwórz nowe okno zapytania i połącz się z wystąpieniem SQL Server silnika bazy danych na maszynie wirtualnej platformy Azure.
Skopiuj, wklej i wykonaj następujący skrypt Transact-SQL w oknie zapytania. Sprawdź, czy tabela
Production.Location
zawiera 29 939 wierszy, zanim przywrócimy ją do punktu w czasie, gdy w kroku 4 znajduje się mniej wierszy.-- Verify row count at start SELECT COUNT (*) from AdventureWorks2022.Production.Location
Skopiuj następujący skrypt Transact-SQL i wklej go w oknie zapytania. Wybierz dwa sąsiadujące pliki kopii zapasowej dziennika i przekonwertuj nazwę pliku na datę i godzinę, która będzie potrzebna dla tego skryptu. Zmodyfikuj adres URL odpowiednio dla nazwy konta magazynu i kontenera określonego w sekcji 1, podaj pierwsze i drugie nazwy plików kopii zapasowej, podaj czas STOPAT w formacie "26 czerwca 2018 01:48 PM", a następnie wykonaj ten skrypt. Wykonanie tego skryptu potrwa kilka minut
-- 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 ;
Przejrzyj dane wyjściowe. Zwróć uwagę, że po przywróceniu danych liczba wierszy to 18 389, co oznacza, że liczba wierszy znajduje się pomiędzy kopią zapasową logu 5 i kopią 6 (liczba wierszy może się różnić).
8 — Przywróć jako nową bazę danych z kopii zapasowej dziennika
W tej sekcji przywrócisz bazę danych AdventureWorks2022
jako nową bazę danych z kopii zapasowej dziennika transakcji wykonanej jako migawka plików.
W tym scenariuszu wykonujesz przywracanie do wystąpienia programu SQL Server na innej maszynie wirtualnej na potrzeby analizy biznesowej i raportowania. Przywracanie do innego wystąpienia na innej maszynie wirtualnej przenosi obciążenie na maszynę wirtualną, zadedykowaną i dostosowaną pod kątem tego celu, co eliminuje jego wymagania dotyczące zasobów z systemu transakcyjnego.
Przywracanie z kopii zapasowej dziennika transakcji za pomocą kopii zapasowej migawki plików jest bardzo szybkie, znacznie szybsze niż w przypadku tradycyjnych strumieniowych kopii zapasowych. W przypadku tradycyjnych kopii zapasowych przesyłania strumieniowego należy użyć pełnej kopii zapasowej bazy danych, na przykład różnicowej kopii zapasowej, a także niektórych lub wszystkich kopii zapasowych dziennika transakcji (lub nowej pełnej kopii zapasowej bazy danych). Jednak w przypadku kopii zapasowych dziennika migawek plików potrzebujesz tylko najnowszej kopii zapasowej dziennika (lub dowolnej innej kopii zapasowej dziennika lub dwóch sąsiednich kopii zapasowych dziennika dla przywracania do punktu w czasie między dwoma godzinami tworzenia kopii zapasowej dziennika). Aby było jasne, potrzebujesz tylko jednego zestawu kopii zapasowej migawki pliku dziennika, ponieważ każda kopia zapasowa migawki dziennika tworzy migawkę każdego pliku bazy danych (każdego pliku danych i pliku dziennika).
Aby przywrócić bazę danych do nowej bazy danych z kopii zapasowej dziennika transakcji przy użyciu kopii zapasowej migawki plikowej, wykonaj następujące kroki:
Uruchom program SSMS.
Otwórz nowe okno zapytania i połącz się z instancją silnika bazy danych SQL Server na maszynie wirtualnej Azure.
Notatka
Jeśli jest to inna maszyna wirtualna platformy Azure niż w poprzednich sekcjach, upewnij się, że wykonano kroki opisane w 2 — Tworzenie poświadczeń programu SQL Server przy użyciu sygnatury dostępu współdzielonego. Jeśli chcesz przywrócić do innego kontenera, wykonaj kroki opisane w 1 — Tworzenie przechowywanych zasad dostępu i magazynu dostępu współdzielonego dla nowego kontenera.
Skopiuj następujący skrypt Transact-SQL i wklej go w oknie zapytania. Wybierz plik kopii zapasowej dziennika, którego chcesz użyć. Zmodyfikuj adres URL zgodnie z nazwą konta magazynu i kontenera określonymi w sekcji 1, podaj nazwę pliku kopii zapasowej dziennika, a następnie wykonaj ten skrypt.
-- 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
Przejrzyj dane wyjściowe, aby sprawdzić, czy przywracanie zakończyło się pomyślnie.
W Eksploratorze obiektów połącz się z usługą Azure Storage.
Rozwiń węzeł Containers, rozwiń kontener utworzony w sekcji 1 (odśwież w razie potrzeby) i sprawdź, czy nowe pliki danych i dziennika są wyświetlane w kontenerze wraz z obiektami blob z poprzednich sekcji.
9 — Zarządzanie zestawami kopii zapasowych i kopiami migawek plików
W tej sekcji usuniesz zestaw kopii zapasowych przy użyciu systemowej procedury składowanej sp_delete_backup (Transact-SQL). Ta procedura składowana systemu usuwa plik kopii zapasowej oraz migawkę pliku w każdym pliku bazy danych powiązanym z tym zestawem kopii zapasowej.
Uwaga
Jeśli spróbujesz usunąć zestaw kopii zapasowych, po prostu usuwając plik kopii zapasowej z kontenera usługi Azure Blob Storage, usuniesz tylko sam plik kopii zapasowej — skojarzone migawki plików pozostaną. Jeśli znajdziesz się w tym scenariuszu, użyj sys.fn_db_backup_file_snapshots (Transact-SQL) funkcji systemowej, aby zidentyfikować adres URL oddzielonych migawek plików i użyć sp_delete_backup_file_snapshot (Transact-SQL) procedury składowanej systemu, aby usunąć każdą oddzieloną migawkę pliku. Aby uzyskać więcej informacji, zobacz File-Snapshot Backups for Database Files in Azure.
Aby usunąć zestaw kopii zapasowych migawek plików, wykonaj następujące kroki:
Uruchom program SSMS.
Otwórz nowe okno zapytania i połącz się z SQL Server na platformie Azure w maszynie wirtualnej (lub dowolnym SQL Server z uprawnieniami do odczytu i zapisu w tym kontenerze).
Skopiuj następujący skrypt Transact-SQL i wklej go w oknie zapytania. Wybierz kopię zapasową dziennika, którą chcesz usunąć wraz z skojarzonymi migawkami plików. Zmodyfikuj adres URL odpowiednio dla nazwy konta magazynu i kontenera określonego w sekcji 1, podaj nazwę pliku kopii zapasowej dziennika, a następnie wykonaj ten skrypt.
sys.sp_delete_backup 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-21764-20181003205236.bak';
W Eksploratorze obiektów połącz się z usługą Azure Storage.
Rozwiń węzeł Containers, rozwiń kontener utworzony w sekcji 1 i sprawdź, czy plik kopii zapasowej użyty w kroku 3 nie jest już wyświetlany w tym kontenerze (odśwież węzeł zgodnie z potrzebami).
Skopiuj, wklej i wykonaj następujący skrypt Transact-SQL w oknie zapytania, aby sprawdzić, czy dwie migawki plików zostały usunięte.
-- verify that two file snapshots have been removed SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
10 — Usuwanie zasobów
Po zakończeniu pracy z tym samouczkiem i oszczędzaniu zasobów pamiętaj o usunięciu grupy zasobów utworzonej w tym samouczku.
Aby usunąć grupę zasobów, uruchom następujący kod programu PowerShell:
# 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
Następne kroki
- pliki danych programu SQL Server w usłudze Microsoft Azure
- kopie zapasowe File-Snapshot dla plików bazy danych w usłudze Azure
- SQL Server – kopia zapasowa do adresu URL
- Sygnatury dostępu współdzielonego, część 1: Zrozumienie modelu SAS
- Tworzenie kontenera
- Ustaw uprawnienia ACL dla kontenera
- uzyskiwanie listy ACL kontenerów
- Poświadczenia (Silnik bazy danych)
- CREATE CREDENTIAL (Transact-SQL)
- sys.credentials (Transact-SQL)
- sp_delete_backup (Transact-SQL)
- sys.fn_db_backup_file_snapshots (Transact-SQL)
- sp_delete_backup_file_snapshot (Transact-SQL)
- kopie zapasowe File-Snapshot dla plików bazy danych w usłudze Azure