다음을 통해 공유


미러링 장애 조치(ODBC) 추가 정보

이 예제는 SQL Server 2005 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;

예제 빌드

예제를 빌드하려면 Visual Studio에서 Failover.sln을 열고(Ctrl+Shift+O) 빌드 메뉴에서 솔루션 빌드를 클릭하거나 솔루션의 명령 프롬프트에서 MSBUILD를 호출합니다.

예제 실행

  • Visual Studio에서 디버깅하지 않고 시작(Ctrl+F5)을 호출합니다.
  • MSBuild.exe를 사용하여 빌드한 경우 Failover.exe를 호출합니다.
  • 사용자 인터페이스의 주 서버 및 미러 서버를 사용자의 서버 이름으로 변경합니다.
  • Init Table을 클릭합니다. 그러면 업데이트 카운터로 사용되는 열이 있는 단순 테이블이 만들어집니다.
  • Connect를 클릭합니다.
  • Update를 클릭하여 테이블을 업데이트하고 Commit를 클릭하여 변경 내용을 데이터베이스에 커밋합니다.
  • 수동으로 장애 조치를 수행하려면 Failover를 클릭합니다.

주의

이제 Connect, Update, CommitDisconnect를 클릭할 수 있습니다. Count 필드는 Update를 클릭할 때마다 늘어납니다. 커밋되지 않은 업데이트에서 Failover를 클릭하고 연결을 끊은 다음 다시 연결하면 마지막 커밋 이후의 업데이트 상태가 표시됩니다. 연결을 끊으면 오류가 표시되고 장애 조치 발생 이후에 연결과 현재 트랜잭션이 롤백됩니다.

응용 프로그램은 연결할 서버 및 서버의 파트너를 자체적으로 검색할 수 있습니다. Track Changes 확인란을 선택하면 이 작업을 수행할 수 있습니다. 이렇게 하면 연결 문자열을 업데이트한 응용 프로그램이 시작될 때 바로 활성 서버로 연결될 가능성이 높아지므로 장기간의 유지 관리 비용을 없앨 수 있는 부수적인 장점이 있습니다. B에서 A를 미러링하고 A에 오류가 발생한 경우 B가 활성 서버가 됩니다. 이제 새로운 서버인 C가 B의 미러 서버로 사용됩니다. B가 C에 대한 장애 조치를 수행할 때 A를 주 서버로, B를 미러 서버로 요청한 응용 프로그램은 연결되지 않습니다.

Continuous Test를 클릭하고 카운터를 관찰합니다. 이제 간격을 두고 Failover를 클릭합니다. 장애 조치할 시간이 표시됩니다(시간 측정 방법은 코드 참조). 코드에서는 높은 수준의 간단한 장애 조치 논리도 보여 줍니다. 즉, 현재 트랜잭션이 손실된 것으로 간주하고 재연결을 몇 번 시도하여(데모에서는 세 번 시도) 실패한 트랜잭션을 반복하거나 사용자에게 보고합니다.

별칭 ActiveServer에 대한 현재 클라이언트 설정을 가져오고 이 별칭을 현재 활성 서버로 설정할 수 있는 단추들이 있습니다. 스크립트와 유틸리티에서 별칭을 사용하는 경우 장애 조치 후에 SMO를 사용하여 별칭을 업데이트할 수 있습니다. 이제 유틸리티와 스크립트가 새 활성 서버로 연결됩니다.

참고 항목

개념

데이터 액세스 예제

도움말 및 정보

SQL Server 2005 지원 받기