Поделиться через


Файл README. Переход на другой ресурс при зеркальном отображении баз данных (ODBC)

Этот образец показывает возможность перехода на другой ресурс при зеркальном отображении баз данных в SQL Server 2005 с пакетом обновления 1 (SP1). Этот образец не поддерживается в SQL Server 2005 Express Edition (SQL Server Express).

Языки

Этот образец использует язык Visual C++.

Предварительные требования

Перед запуском данного образца необходимо убедиться, что установлено следующее программное обеспечение.

Необходимо также настроить зеркальную базу данных основной базы данных под основную базу данных. Дополнительные сведения см. в разделах 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. Теперь сценарии и программы будут соединяться с новым активным сервером.

См. также

Основные понятия

Образцы доступа к данным

Справка и поддержка

Получение помощи по SQL Server 2005