Sdílet prostřednictvím


Vytvoření snímku databáze (Transact-SQL)

platí pro:SQL Server

Jediným způsobem vytvoření snímku databáze SQL Serveru je použití jazyka Transact-SQL. SQL Server Management Studio nepodporuje vytváření snímků databáze.

Požadavky

Zdrojová databáze, která může používat libovolný model obnovení, musí splňovat následující požadavky:

  • Instance serveru musí mít spuštěnou edici SQL Serveru, která podporuje snímek databáze. Informace o podpoře snímků databáze v SYSTÉMU SQL Server naleznete v tématu Edice a podporované funkce systému SQL Server 2022.

  • Zdrojová databáze musí být online, pokud databáze není zrcadlovou databází v relaci zrcadlení databáze.

  • Chcete-li vytvořit snímek databáze na zrcadlové databázi, musí být databáze v synchronizovaném stavu zrcadlení.

  • Zdrojovou databázi nejde nakonfigurovat jako škálovatelnou sdílenou databázi.

  • Před SQL Serverem 2019 (15.x) nemohla zdrojová databáze obsahovat skupinu souborů MEMORY_OPTIMIZED_DATA. V SQL Serveru 2019 (15.x) byla přidána podpora snímků databáze v paměti.

Důležitý

Informace o dalších důležitých aspektech naleznete v tématu Database Snapshots (SQL Server).

Doporučení

Tato část popisuje následující osvědčené postupy:

Osvědčený postup: Pojmenování snímků databáze

Před vytvořením snímků je důležité zvážit, jak je pojmenovat. Každý snímek databáze vyžaduje jedinečný název databáze. Pro usnadnění správy může název snímku obsahovat informace, které identifikují databázi, například:

  • Název zdrojové databáze.

  • Naznačuje, že nový název je určen pro snímek.

  • Datum a čas vytvoření snímku, pořadové číslo nebo jiné informace, například čas dne, k rozlišení sekvenčních snímků v dané databázi.

Představte si například řadu snímků pro AdventureWorks2022 databázi. Tři denní snímky se vytvářejí v 6hodinových intervalech mezi 6:00 a 18:00 na základě 24hodinového formátu. Každý denní snímek se uchovává po dobu 24 hodin před vyřazením a nahrazením novým snímkem se stejným názvem. Každý název snímku označuje hodinu, ale ne den:

AdventureWorks_snapshot_0600
AdventureWorks_snapshot_1200
AdventureWorks_snapshot_1800

Pokud se doba vytváření těchto denních snímků liší od dne do dne, může být vhodnější méně přesná konvence pojmenování, například:

AdventureWorks_snapshot_morning
AdventureWorks_snapshot_noon
AdventureWorks_snapshot_evening

Osvědčený postup: Omezení počtu snímků databáze

Vytvoření řady snímků v průběhu času zachycuje sekvenční snímky zdrojové databáze. Každý snímek zůstane trvalý, dokud se explicitně nezahodí. Vzhledem k tomu, že každý snímek bude dál růst, protože se aktualizují původní stránky, můžete po vytvoření nového snímku ušetřit místo na disku odstraněním staršího snímku.

Poznámka

Pokud se chcete vrátit k snímku databáze, musíte z této databáze odstranit všechny další snímky.

Osvědčený postup: Připojení klientů ke snímku databáze

Pokud chcete použít snímek databáze, musí klienti vědět, kde ho najít. Uživatelé mohou číst z jednoho snímku databáze během vytváření nebo odstranění jiné databáze. Když ale nahradíte nový snímek existujícím snímkem, musíte klienty přesměrovat na nový snímek. Uživatelé se můžou ručně připojit ke snímku databáze pomocí aplikace SQL Server Management Studio nebo Azure Data Studia. Pokud ale chcete podporovat produkční prostředí, měli byste vytvořit programátorské řešení, které transparentně směruje klienty pro vytváření sestav na nejnovější momentku databáze.

Dovolení

Každý uživatel, který může vytvořit databázi, může vytvořit snímek databáze; Pokud však chcete vytvořit snímek zrcadlové databáze, musíte být členem správce systému pevné role serveru.

Vytvoření snímku databáze pomocí Transact-SQL

  1. Na základě aktuální velikosti zdrojové databáze se ujistěte, že máte dostatek místa na disku pro uložení snímku databáze. Maximální velikost snímku databáze je velikost zdrojové databáze při vytváření snímku. Další informace najdete v tématu Zobrazení velikosti zhuštěného souboru snímku databáze (Transact-SQL).

  2. Pomocí klauzule AS SNAPSHOT OF vydejte prohlášení CREATE DATABASE o souborech. Vytvoření snímku vyžaduje zadání logického názvu každého databázového souboru zdrojové databáze. Syntaxe je následující:

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

    Argumenty jsou následující:

    Argument Popis
    database_snapshot_name Název snímku, na který chcete vrátit databázi.
    logical_file_name Logický název, který zdrojová databáze používá na SQL Serveru při odkazování na soubor.
    os_file_name Cesta a název souboru používaný operačním systémem při vytváření souboru.
    source_database_name Zdrojová databáze.

    Úplný popis této syntaxe najdete v tématu CREATE DATABASE (SQL Server Transact-SQL).

    Poznámka

    Při vytváření snímku databáze nejsou v příkazu CREATE DATABASE povoleny protokolové soubory, offline soubory, soubory k obnovení a nefunkční soubory.

Příklady

Rozšíření .ss použité v těchto příkladech je pro usnadnění a nevyžaduje se. V databázích obsahujících více souborů je nutné zadat všechny soubory v souladu se syntaxí. Nejsou zadány skupiny souborů.

A. Vytvoření snímku v databázi AdventureWorks

Tento příklad vytvoří snímek databáze v databázi AdventureWorks. Název snímku, AdventureWorks_dbss_1800, a název jeho komprimovaného souboru, AdventureWorks_data_1800.ss, označují čas vytvoření 18:00 (1800 hodin).

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. Vytvoření snímku v databázi Sales

Tento příklad vytvoří snímek databáze sales_snapshot1200v databázi Sales, což je stejná ukázková databáze z Vytvoření databáze, která obsahuje skupiny souborů v 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