Зеркальное отображение базы данных и моментальные снимки базы данных (SQL Server)

Область применения:SQL Server

Вы можете использовать зеркальную базу данных, которую поддерживаете для обеспечения доступности, чтобы перенести на нее формирование отчетов. Чтобы использовать зеркальную базу данных для формирования отчетов, можно создать моментальный снимок базы данных на зеркальной базе данных и направлять запросы на подключение клиентов к самому последнему снимку. Моментальный снимок базы данных представляет собой статичный, доступный только для чтения, согласованный по транзакциям моментальный снимок состояния базы данных-источника на момент создания снимка. Для создания снимка базы данных в зеркальной базе данных необходимо привести эту базу данных в синхронизированное состояние зеркального отображения.

В отличие от самой зеркальной базы данных, снимок базы данных доступен клиентам. Пока зеркальный сервер соединен с основным сервером, можно направлять запрашивающих отчеты клиентов на подключение к моментальному снимку. Имейте в виду, что так как моментальный снимок базы данных является статичным, новые данные недоступны. Чтобы пользователям были доступны сравнительно свежие данные, необходимо периодически создавать новый снимок базы данных, а приложения должны направлять входящие клиентские подключения на последний снимок.

Новый снимок базы данных почти пуст, но со временем его размер увеличивается по мере того, как все больше и больше страниц базы данных обновляются впервые. Поскольку каждый снимок базы данных таким образом увеличивается инкрементально, каждый снимок базы данных потребляет столько же ресурсов, сколько и обычная база данных. В зависимости от конфигураций зеркального и основного сервера, избыточное число моментальных снимков базы данных в зеркальной базе данных может уменьшить производительность основной базы данных. Поэтому мы рекомендуем вам хранить только несколько относительно недавних снимков на ваших зеркальных базах данных. Обычно после создания замещающего моментального снимка следует перенаправить входящие запросы на новый моментальный снимок, а после завершения текущих запросов удалить предыдущий снимок.

Примечание.

Дополнительные сведения о моментальных снимках базы данных см. в статье Моментальные снимки базы данных (SQL Server).

Если происходит переключение ролей, база данных и ее снимки перезапускаются, что временно отключает пользователей от базы данных. После этого снимки базы данных остаются на том экземпляре сервера, где они были созданы, а эта база данных становится новой основной базой данных. Пользователи смогут продолжать использовать снимки после аварийного переключения. Однако при этом появляется дополнительная нагрузка на новый основной сервер. Если в вашей среде производительность имеет значение, мы рекомендуем создать снимок новой зеркальной базы данных, когда она станет доступной, перенаправить клиентов на новый снимок базы данных, а затем удалить все снимки базы данных прежней зеркальной базы данных.

Примечание.

В качестве специального решения для отчетов, обладающих достаточной масштабируемостью, можно рассмотреть репликацию. Дополнительные сведения см. в статье SQL Server Replication.

Пример

Этот пример создает снимки зеркально отображаемой базы данных.

Предположим, что база данных сеанса зеркального отображения базы данных — AdventureWorks2025. В данном примере создаются три снимка базы данных в зеркальной копии базы данных AdventureWorks, которая находится на диске F. Снимки названы AdventureWorks_0600, AdventureWorks_1200 и AdventureWorks_1800, чтобы указать примерное время их создания.

  1. Создайте первый моментальный снимок базы данных на зеркале AdventureWorks2025.

    CREATE DATABASE AdventureWorks_0600  
    ON (NAME = 'datafile', FILENAME = 'F:\AdventureWorks_0600.SNP')  
       AS SNAPSHOT OF AdventureWorks2022  
    
  2. Создайте второй снимок базы данных на зеркале AdventureWorks2025. Пользователи, которые всё ещё используют AdventureWorks_0600, могут продолжать им пользоваться.

    CREATE DATABASE AdventureWorks_1200  
    ON (NAME = 'datafile', FILENAME = 'F:\AdventureWorks_1200.SNP')  
       AS SNAPSHOT OF AdventureWorks2022  
    

    На этом этапе новые подключения клиентов можно программно перенаправлять на последний снимок.

  3. Создайте третий снимок на зеркале AdventureWorks2025. Пользователи, которые по-прежнему используют AdventureWorks_0600 или AdventureWorks_1200, могут продолжать их использовать.

    CREATE DATABASE AdventureWorks_1800  
    ON (NAME = 'datafile', FILENAME = 'F:\AdventureWorks_1800.SNP')  
        AS SNAPSHOT OF AdventureWorks2022  
    

    На этом этапе новые клиентские соединения можно программно направлять на последний моментальный снимок.

Связанные задачи