Можно ли прикрепить один файл базы данных к двум разным экземплярам SQL?
Учтите, что MDF расположен на NAS, и мне нужен первичный и вторичный экземпляры MS SQL на двух разных серверах (не учитывая кластеризацию в этом вопросе), и я хочу, чтобы оба экземпляра ссылались на этот же MDF.
К МДФ может быть прикреплен только один экземпляр или оба. Есть ли проблема с подключением экземпляра SQL «A», отключением и подключением экземпляра «B» к этому MDF?
Спасибо за ваш вклад.
Февраль 2018 г.: Этот ответ очень старый и довольно устаревший. Пожалуйста, не полагайтесь на него для современных установок SQL (2014 или новее). Сохраняем его ниже для исторических целей
Правильный способ иметь сервер холодного резервирования в MSSQL: Доставка журналов SQL. Это предполагает наличие двух копий базы данных на двух серверах, при этом A восстанавливает файлы журнала на B через регулярные промежутки времени.
Правильный способ иметь сервер горячего резервирования в MSSQL 2008 R2 или ниже: Зеркальное отображение базы данных SQL. В SQL Server 2012 есть Всегда включен. Это предполагает наличие двух копий базы данных на двух серверах, синхронизированных друг с другом.
Правильный способ иметь сервер горячего резервирования в MSSQL 2008 R2 или ниже: SQL-кластеризация (в 2012 году это тоже часть AlwaysOn). Это включает в себя одну копию базы данных в SAN (не NAS, если только ваш NAS не может предоставлять тома iSCSI, которые поддерживают кластеризацию; некоторые делают), Windows Server 2008 R2 Enterprise (или 2012 Datacenter), SQL Server Enterprise и правильно настроенный Отказоустойчивый кластер Windows.
Ни одна из версий SQL Server не позволяет хранить файлы MDF / LDF на общей папке CIFS / NFS / SMB. Они должны храниться в блочном хранилище, что дает вам возможность использовать локальные диски или тома SAN (например, открытые тома iSCSI или FC).
При такой схеме нет гарантии, что MDF не будет поврежден при выходе из строя сервера A. Или NAS выходит из строя.
Схема игнорирует файл LDF. Люди часто думают, что LDF не важен, но это не так. LDF функционирует как журнал упреждающей записи, и изменения «воспроизводятся» при перезапуске экземпляра (или запуске другого экземпляра, как в кластере). Вам нужен LDF, иначе вы потеряете данные.
Также следует учитывать, что устройства NAS на основе SMB часто имеют ужасно низкую производительность. Если устройство поддерживает iSCSI, ситуация, вероятно, не так плоха. Если вы используете SMB, использование подключенного диска - проблема. Вам придется настроить SQL Server для хранения файлов в общей сетевой папке.
Если вы хотите избежать кластеризации, просто делайте то, что делают все остальные, и изучите зеркальное отображение базы данных (которое было введено в SQL Server 2005) или доставку журналов (которая может работать практически с любой версией SQL Server, хотя официальная поддержка не дебютировала до появления SQL Сервер 2000).
Следование за толпой обычно является самым безопасным, хотя, возможно, и не самым интересным. Когда вы имеете дело с данными клиента, вам нужно «безопасно», а не «интересно».
Независимо от того, какую тактику вы используете, есть другие детали, о которых нужно беспокоиться, например, обеспечение актуальности заданий, логинов, паролей, идентификаторов пользователей и т. Д. В обоих экземплярах, обеспечение бесперебойности резервных копий и т. Д.
Судя по прочитанному мной, MS SQL использует блокировку на уровне файлов для файлов MDF. В результате у вас не может быть двух экземпляров MS SQL, использующих один и тот же файл, если они оба работают. Однако у вас может быть два экземпляра MS SQL, использующих один и тот же MDF, если у вас есть механизм, обеспечивающий одновременную работу только одного экземпляра.
Если вы ищете метод, при котором вам нужен почти готовый к запуску резервный SQL-сервер, одним из вариантов будет просто создание резервной копии базы данных на первичном сервере на периодической основе. Затем у вас может быть процесс, который копирует резервную копию на ваш вторичный сервер. Затем вы просто создаете сценарий для импорта резервной копии на вторичный сервер, когда она вам понадобится.
Это также исключает внешнее устройство NAS как единую точку отказа, если каждый сервер имеет собственное хранилище. Этот метод отлично работает для более старых версий SQL Server. Однако если у вас последняя версия, SQL Server 2012 Standard Edition (и выше) поддерживает еще более надежный метод зеркального отображения базы данных. См. Ссылку ниже: