Файл README. Переход на другой ресурс при зеркальном отображении баз данных (ODBC)
Этот образец показывает возможность перехода на другой ресурс при зеркальном отображении баз данных в SQL Server 2005 с пакетом обновления 1 (SP1). Этот образец не поддерживается в SQL Server 2005 Express Edition (SQL Server Express).
Языки
Этот образец использует язык Visual C++.
Предварительные требования
Перед запуском данного образца необходимо убедиться, что установлено следующее программное обеспечение.
- SQL Server 2005, включая компонент Database Engine.
- Образцы компонента SQL Server 2005 Database Engine. Данные образцы входят в комплект SQL Server 2005. Последнюю версию образцов можно загрузить в центре разработчиков на Microsoft SQL Server.
- Пакет .NET Framework SDK 2.0 или среда Microsoft Visual Studio 2005. Пакет .NET Framework SDK можно получить бесплатно. См. раздел Установка пакета .NET Framework SDK. Необходимо будет изменить переменную среды INCLUDE, чтобы она включала каталог «\Microsoft SQL Server\90\SDK\Include» (если используется Microsoft Visual Studio 2005, это можно сделать в среде разработки. Дополнительные сведения см. в разделе Каталоги VC++, проекты и решения, диалоговое окно «Параметры»).
Необходимо также настроить зеркальную базу данных основной базы данных под основную базу данных. Дополнительные сведения см. в разделах How to: Set Large Data (OLE DB) и Устранение неполадок при установке зеркального отображения базы данных.
При желании можно включить зеркальное отображение базы данных на своем компьютере с помощью следующих сценариев. Эти сценарии выполняются в среде SQL Server Management Studio или в командной строке SQLCMD.
Убедитесь, что база данных и конечные точки, которые используются в этом образце, не существуют на экземпляре основного сервера
Следующий сценарий удостоверится в том, что на основном сервере нет базы данных и конечных точек, которые используются в этом образце.
-- Step 1 (on Principal)
-- Return primary server instance to a premirroring state
--
ALTER DATABASE HADB SET PARTNER OFF
DROP DATABASE HADB;
DROP ENDPOINT Mirroring;
EXEC sys.sp_dbmmonitordropmonitoring;
Убедитесь, что база данных и конечные точки, которые используются в этом образце, не существуют на экземпляре зеркального сервера
Следующий сценарий удостоверится в том, что на экземпляре зеркального сервера нет базы данных и конечных точек, которые используются в этом образце.
-- Step 2 (on Mirror)
-- Return mirror server instance to a premirroring state
--
ALTER DATABASE HADB SET PARTNER OFF
RESTORE DATABASE HADB WITH RECOVERY;
DROP DATABASE HADB;
DROP ENDPOINT Mirroring;
Создание базы данных и резервных копий базы данных
Этот сценарий, который выполняется на экземпляре основного сервера, создает базу данных и резервные копии базы данных.
-- Step 3 (on Principal)
-- create db and backups
--
USE master;
GO
CREATE DATABASE HADB;
ALTER DATABASE HADB SET RECOVERY FULL;
-- CREATE BACKUPS
BACKUP DATABASE HADB
TO DISK = 'C:\HADB.bak'
WITH FORMAT;
GO
BACKUP LOG HADB
TO DISK = 'C:\HADB.bak';
Создание зеркальной базы данных
Этот образец, который выполняется на экземпляре сервера с зеркальной базой данных, создает зеркальную базу данных из резервной копии, полученной в предыдущем сценарии. Если зеркальный сервер и основной сервер находятся на разных физических компьютерах, необходимо скопировать файл «c:\hadb.bak» с зеркального на основной сервер.
-- Step 4 (on Mirror)
-- Create the mirror database
RESTORE DATABASE HADB
FROM DISK='C:\HADB.bak'
WITH NORECOVERY, FILE=1,
MOVE 'HADB' TO 'C:\HADB.mdf',
MOVE 'HADB_log' TO 'C:\HADB_log.ldf'
;
RESTORE LOG HADB
FROM DISK='C:\HADB.bak'
WITH NORECOVERY, FILE=2,
MOVE 'HADB' TO 'C:\HADB.mdf',
MOVE 'HADB_log' TO 'C:\HADB_log.ldf'
;
Создание зеркальной конечной точки на основном сервере
Этот сценарий, выполняющийся на экземпляре основного сервера, создает зеркальную конечную точку.
-- Step 5 (on Principal)
-- create mirroring endpoint on PRINCIPAL server
--
CREATE ENDPOINT Mirroring
STATE = STARTED
AS TCP(LISTENER_PORT = 7022)
FOR database_mirroring (ROLE = PARTNER);
Создание зеркальной конечной точки на зеркальном сервере
Этот сценарий, выполняющийся на экземпляре зеркального сервера, создает зеркальную конечную точку.
Имя компьютера и доменное имя (полное имя компьютера) можно найти в свойствах компьютера (в Windows XP щелкните правой кнопкой мыши Мой компьютер, выберите Свойства и найдите имя компьютера на вкладке Имя компьютера).
-- Step 6 (on MIRROR)
-- create mirroring endpoint
--
CREATE ENDPOINT Mirroring
STATE = STARTED
AS TCP(LISTENER_PORT = 7023)
FOR database_mirroring (ROLE = PARTNER);
-- also on mirror, set partner to PRINCIPAL server
--(This must be done on mirror first.)
ALTER DATABASE HADB SET PARTNER='tcp://machine_name.domain:7022';
Определение зеркальной базы данных
Этот сценарий, который выполняется на основном сервере, задает зеркальную базу данных. Если на основном сервере установлен брандмауэр, запрещающий соединения для порта 7022, происходит сбой. В этом случае введите в брандмауэре исключение для этого порта.
-- Step 7 (on Principal)
-- Set partner to the mirror server on port 7023
--
ALTER DATABASE HADB SET PARTNER='tcp://machine_name.domain:7023';
-- start collecting mirroring history:
USE master;
EXEC sys.sp_dbmmonitoraddmonitoring;
Построение образца
Чтобы построить образец, откройте файл Failover.sln в среде Visual Studio (клавиши CTRL+SHIFT+O) и выберите пункт Построить решение в меню Построить или запустите программу MSBUILD в командной строке решения.
Выполнение образца
- В среде Visual Studio необходимо выполнить команду Запустить без отладки (CTRL+F5).
- Если производится построение при помощи программы MSBuild.exe, запустите программу Failover.exe.
- В пользовательском интерфейсе необходимым образом переименуйте серверы.
- Нажмите Инициализировать таблицу. Создается простая таблица со столбцом, который используется в качестве счетчика обновлений.
- Нажмите кнопку Соединить.
- Нажмите Обновить для обновления таблицы и Зафиксировать для фиксации изменений в базе данных.
- Для ручного перехода на другой ресурс нажмите Сменить ресурс.
Примечания
Теперь можно нажать Подключиться, Обновить, Зафиксировать и Отключить. Поле Подсчет увеличивается на единицу каждый раз при нажатии Обновить. Если нажать Сменить ресурс при незафиксированных изменениях, отсоединиться, а затем повторно соединиться, можно увидеть состояние обновления после последней фиксации. При отсоединении появится сообщение об ошибке, а для соединения и текущей транзакции будет выполнен откат после перехода на другой ресурс.
Приложение может обнаружить, с каким сервером оно соединяется, и сервер-участник. Это можно сделать, установив флажок Отслеживать изменения. Преимущество этого способа заключается в том, что приложение, обновляющее строку соединения, при запуске, вероятнее всего, будет сразу соединяться с активным сервером, что принесет предельную отдачу и в долгосрочной перспективе может привести к нулевым затратам на обслуживание. Предположим, что сервер Б является зеркальным отображением сервера А, который дает сбой, и сервер Б становится активным. Теперь роль зеркального сервера для Б играет сервер В. Приложение, запрашивающее сервер А, как основной, и сервер Б, как зеркальный, не сможет соединиться, если произойдет переход с сервера Б на ресурс сервера В.
Нажмите Непрерывный тест и проследите за счетчиком. Теперь через некоторые промежутки времени нажимайте Сменить ресурс. Выводится время перехода на другой ресурс (посмотрите код, чтобы увидеть, как оно измеряется). Кроме того, в программный код включена простая логика высокой отказоустойчивости. То есть при потере последней транзакции этот код выполнит небольшое количество попыток повторного соединения (в примере их три) и повторит поврежденную транзакцию или сообщит о ней пользователю.
Существуют три кнопки для получения текущих клиентских параметров для псевдонима ActiveServer и установки этого псевдонима для текущего активного сервера. Если в сценариях и программах указывается псевдоним, для обновления псевдонима после перехода на другой ресурс можно использовать SMO. Теперь сценарии и программы будут соединяться с новым активным сервером.