Udostępnij za pośrednictwem


Utwórz migawkę bazy danych (Transact-SQL)

Dotyczy:programu SQL Server

Jedynym sposobem utworzenia migawki bazy danych programu SQL Server jest użycie języka Transact-SQL. Program SQL Server Management Studio nie obsługuje tworzenia migawek bazy danych.

Warunki wstępne

Źródłowa baza danych, która może używać dowolnego modelu odzyskiwania, musi spełniać następujące wymagania wstępne:

  • Wystąpienie serwera musi mieć uruchomioną wersję programu SQL Server, która obsługuje funkcję migawek bazy danych. Aby uzyskać informacje o obsłudze migawek bazy danych w programie SQL Server, zobacz Editions i obsługiwane funkcje programu SQL Server 2022.

  • Źródłowa baza danych musi być w trybie online, chyba że baza danych jest dublowaniem bazy danych w ramach sesji dublowania bazy danych.

  • Aby utworzyć migawkę bazy danych w dublowanej bazie danych, baza danych musi znajdować się w zsynchronizowanym stanie dublowania .

  • Źródłowej bazy danych nie można skonfigurować jako skalowalnej udostępnionej bazy danych.

  • Przed programem SQL Server 2019 (15.x) źródłowa baza danych nie mogła zawierać grupy plików MEMORY_OPTIMIZED_DATA. Dodano obsługę migawek bazy danych w pamięci w programie SQL Server 2019 (15.x).

Ważny

Aby uzyskać informacje o innych istotnych zagadnieniach, zobacz Database Snapshots (SQL Server).

Zalecenia

W tej sekcji omówiono następujące najlepsze rozwiązania:

Najlepsze praktyki: nazewnictwo migawek bazy danych

Przed utworzeniem migawek warto rozważyć, jak je nazwać. Każda migawka bazy danych wymaga unikatowej nazwy bazy danych. W celu ułatwienia administracyjnego nazwa migawki może zawierać informacje identyfikujące bazę danych, takie jak:

  • Nazwa źródłowej bazy danych.

  • Wskazanie, że nowa nazwa jest przeznaczona dla migawki.

  • Data i godzina utworzenia migawki, numer sekwencji lub inne informacje, takie jak godzina dnia, aby odróżnić sekwencyjne migawki w danej bazie danych.

Rozważmy na przykład serię migawek dla bazy danych AdventureWorks2022. Trzy codzienne migawki są tworzone w 6-godzinnych odstępach od 6:00 do 18:00, na podstawie zegara 24-godzinnego. Każda dzienna migawka jest przechowywana przez 24 godziny przed usunięciem i zastąpiona nową migawką o tej samej nazwie. Każda nazwa migawki wskazuje godzinę, ale nie dzień:

AdventureWorks_snapshot_0600
AdventureWorks_snapshot_1200
AdventureWorks_snapshot_1800

Alternatywnie, jeśli czas tworzenia tych codziennych migawek różni się od dnia do dnia, mniej precyzyjna konwencja nazewnictwa może być preferowana, na przykład:

AdventureWorks_snapshot_morning
AdventureWorks_snapshot_noon
AdventureWorks_snapshot_evening

Najlepsze rozwiązanie: ograniczanie liczby migawek bazy danych

Tworzenie serii migawek w czasie przechwytuje sekwencyjne migawki źródłowej bazy danych. Każda migawka utrzymuje się, dopóki nie zostanie jawnie usunięta. Ponieważ każda migawka będzie nadal rosła w miarę aktualizowania oryginalnych stron, możesz zaoszczędzić miejsce na dysku, usuwając starszą migawkę po utworzeniu nowej migawki.

Notatka

Aby przywrócić migawkę bazy danych, należy usunąć wszystkie inne migawki z tej bazy danych.

Najlepsze rozwiązanie: połączenia klienta z migawką bazy danych

Aby klienci mogli użyć migawki bazy danych, muszą wiedzieć, gdzie ją znaleźć. Użytkownicy mogą odczytywać z jednej migawki bazy danych podczas tworzenia lub usuwania innej bazy danych. Jednak po zastąpieniu istniejącej migawki nową, należy przekierować użytkowników do nowej migawki. Użytkownicy mogą ręcznie łączyć się z migawką bazy danych za pomocą programu SQL Server Management Studio lub azure Data Studio. Jednak w celu obsługi środowiska produkcyjnego należy utworzyć rozwiązanie programowe, które w sposób niewidoczny kieruje klientów generujących raporty do najnowszej migawki bazy danych.

Uprawnienia

Każdy użytkownik, który może utworzyć bazę danych, może utworzyć migawkę bazy danych; jednak aby utworzyć migawkę bazy danych w wersji lustrzanej, musisz być członkiem sysadmin stałej roli serwera.

Utwórz migawkę bazy danych przy użyciu Transact-SQL

  1. Na podstawie bieżącego rozmiaru źródłowej bazy danych upewnij się, że masz wystarczającą ilość miejsca na dysku do przechowywania migawki bazy danych. Maksymalny rozmiar migawki bazy danych odpowiada rozmiarowi źródłowej bazy danych w momencie tworzenia migawki. Aby uzyskać więcej informacji, zobacz Zobacz Rozmiar Rzadkiego Pliku Migawki Bazy Danych (Transact-SQL).

  2. Wydaj instrukcję CREATE DATABASE dotyczącą plików przy użyciu klauzuli AS SNAPSHOT OF. Utworzenie migawki wymaga określenia logicznej nazwy każdego pliku bazy danych źródłowej. Składnia jest następująca:

    CREATE DATABASE database_snapshot_name
    ON
    (
        NAME = logical_file_name
        , FILENAME = 'os_file_name'
    ) [ , ...n ]
    
    AS SNAPSHOT OF source_database_name
    [;]
    

    Argumenty są następujące:

    Spór Opis
    database_snapshot_name Nazwa migawki, do której chcesz przywrócić bazę danych.
    logical_file_name Nazwa logiczna używana przez źródłową bazę danych w programie SQL Server podczas odwoływania się do pliku.
    os_file_name Ścieżka i nazwa pliku używana przez system operacyjny podczas tworzenia pliku.
    source_database_name Źródłowa baza danych.

    Aby uzyskać pełny opis tej składni, zobacz CREATE DATABASE (SQL Server Transact-SQL).

    Notatka

    Podczas tworzenia migawki bazy danych w instrukcji CREATE DATABASE nie są dozwolone pliki dziennika, pliki offline, pliki przywracania ani przestarzałe pliki.

Przykłady

Rozszerzenie .ss używane w tych przykładach jest dla wygody i nie jest wymagane. W bazach danych zawierających wiele plików należy określić wszystkie pliki zgodnie ze składnią. Grupy plików nie są określone.

A. Utwórz migawkę w bazie danych AdventureWorks

W tym przykładzie zostanie utworzona migawka bazy danych dla bazy danych AdventureWorks. Nazwa migawki, AdventureWorks_dbss_1800, i nazwa pliku zrzutowego, AdventureWorks_data_1800.ss, wskazują czas utworzenia o 18:00 (1800 godzin).

CREATE DATABASE AdventureWorks_dbss1800 ON (
    NAME = AdventureWorks,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss'
    ) AS SNAPSHOT OF AdventureWorks;
GO

B. Utwórz migawkę w bazie danych Sales

W tym przykładzie utworzono migawkę bazy danych sales_snapshot1200w bazie danych Sales, która jest tą samą przykładową bazą danych z Utwórz bazę danych zawierającą grupy plików w CREATE DATABASE.

--Create sales_snapshot1200 as snapshot of the Sales database:
CREATE DATABASE sales_snapshot1200 ON (
    NAME = SPri1_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SPri1dat_1200.ss'
    ),
    (
    NAME = SPri2_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SPri2dt_1200.ss'
    ),
    (
    NAME = SGrp1Fi1_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\mssql\data\SG1Fi1dt_1200.ss'
    ),
    (
    NAME = SGrp1Fi2_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SG1Fi2dt_1200.ss'
    ),
    (
    NAME = SGrp2Fi1_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SG2Fi1dt_1200.ss'
    ),
    (
    NAME = SGrp2Fi2_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SG2Fi2dt_1200.ss'
    ) AS SNAPSHOT OF Sales;
GO