관리 메뉴

I LOVE EJ

복제(Replication) 향상 기능 본문

Data Base/MsSql 2005

복제(Replication) 향상 기능

BeOne 2009. 2. 9. 16:17

복제(Replication) 향상 기능

SQL Server의 복제 기술은 OLTP 시스템과 작업부하(Workload)를 분리시켜서 데이터의 분석 및 통계 작업 그리고 보고서 생성 작업을 수행하기 위한 시스템, 데이터 웨어하우스(DW)의 스테이징(Staging) 데이터베이스 용으로 사용될 수 있습니다. 또한 웹사이트의 최대 동시사용자를 지원하기 위한 데이터베이스 수평 확장을 고려하거나 모바일 사용자 데이터 간의 동기화에 사용될 수 있으며, 심지어 이기종의 데이터 통합을 위해서도 좋은 시나리오를 제공할 수 있습니다.

SQL Server 2005의 복제(Replication) 기술은 또한 놀라울 정도로 많은 신규 기능들과 향상 기능을 포함하고 있습니다. 그 중에서도 특히 엄청나게 간편해진 복제 구성 마법사, 새로운 피어 투 피어(Peer to Peer) 복제 기술, HTTPS 통한 웹 동기화, 진단 분석이 가능한 복제 모니터, Oracle 에서의 트랜잭션 복제 기능 등은 기존 복제 사용자들을 충분히 만족시킬 수 있는 멋진 기능 들입니다.

이제 SQL Server 2005에서 어떤 새로운 기술들이 추가되고 향상되었는지 개략적으로 살펴보고, 그 중에서도 의미 있는 중요 기능들을 몇 가지 소개하도록 하겠습니다.

새로운 기능 SQL Server 2005에서 많은 추가 향상 기능들이 도입되고 적용되었습니다. 우선, 표 형태로 각각의 영역별 향상 기능들을 정리해 보겠습니다.

다음은 병합 복제(Merge Replication) 관련된 추가 기능 및 향상 기능 목록입니다.

[표] 병합 복제 신규 기능
미리 계산된 파티션 병렬 업로드 및 다운로드
다양한 아티클 형식-다운로드 전용 등 BLOB 스트리밍
논리적 레코드 에이전트 신뢰성
웹 동기화 재 시작 가능한 스냅숏 전송
DDL 지원 새로운 데이터 형식 지원(.NET, XML, varchar (MAX), 등)
구독자 초기화를 통한 동적 스냅숏 향상된 ID 범위 관리
선언적 아티클 정렬  

다음 트랜잭션 복제에 있어서 추가 기능 목록입니다.

[표] 트랜잭션 복제 신규 기능
피어 투 피어 복제 Oracle 게시
DDL 지원 추적 프로그램 토큰(Trace Token)
배포 에이전트에 대한 병렬 스트림 업데이트 가능 구독에 대한 재 게시
업데이트 구독에 대한 Blob 지원 백업으로부터 구독하기
재 시작 가능한 스냅숏 전송 새로운 데이터 형식 지원
(.NET, XML, varchar(MAX), 등)
전체 텍스트를 포함한 새로운 인덱스 형식 지원  

그 밖에 프로그래밍과 사용자 인터페이스에 관련된 새로운 기능들은 다음과 같이 정리할 수 있습니다.

프로그래밍 능력
RMO (Replication Management Objects)
    .NET 관리 코드(Managed Code)의 기반의 프로그래밍 가능한 복제 관리 개체
사용자 인터페이스
단순해진 복제 구성 마법사
복제 모니터
   - 상세한 아티클 통계 정보 제공
   - 복제 시스템의 전반적인 대한 모니터링 제공

목록을 통해서 알 수 있는 것처럼, 복제에 관련된 추가 향상 기능들은 아주 많이 있습니다만.
그 중에서도 중요한 몇 가지 핵심 기술에 대해서 좀 더 상세하게 살펴보도록 하겠습니다.

단순하고 편리해진 복제 구성 마법사 SQL Server 2000 버전에서 복제 마법사를 통한 복제 구성은 마법사 그 자체의 뉘앙스처럼 분명 쉽고 편리하다고 말할 수는 없었습니다. 게시 구성만으로도 상당한 페이지와 설정 작업을 요구했으며, 구독 작업 또한 만만치가 않았습니다. 물론 초기 페이지에서 고급 옵션을 설정하지 않으면 그나마 조금 더 단순해지지만 끌어오기 구독을 허용하기 위한 무인 구독 허용을 위해서라도 필요하게 되었습니다. 또한 각각의 페이지가 많은 설정 값과 옵션들로 구성되어 있어, 단순한 복제 구성 만으로도 쉽지가 않은 작업이었습니다. (그래서 전문가들은 역시 마법사보다 스크립트를 선호하게 됩니다)

SQL Server 2005에서는 복제 구성 마법사 놀라운 정도로 쉽고 단순해 집니다. 전체 마법사 페이지가 이전보다 무려 40%나 줄어 들었으며, 각각의 화면들이 아주 단순하게 바뀌었습니다. 또한 설정 값의 자동화나 기본 값 처리가 보다 향상되었으며 분기 작업들 또한 이전보다 훨씬 줄어든 것을 알 수 있습니다.

구독 마법사 또한 이전의 밀어넣기 구독과 끌어오기 구독을 별도로 구성한 반면, 새로운 구독 마법사는 하나의 구독 마법사로 통합이 되어 보다 편리하게 작업할 수 있습니다. (단, 두 구독이 모두 필요할 때는 두 번의 실행을 해야 할 것입니다). 또한 하나의 게시에 대해 서로 다른 속성을 가진 다중 구독을 생성하는 것도 가능하며, 이제 게시와 구독의 결과를 스크립트로 바로 생성하고 재 사용할 수 있도록 보다 편리한 메뉴가 제공됩니다.

자, 그럼 실제로 복제 구성 마법사를 사용해서 복제 게시와 구성 작업이 얼마나 단순하고 편리해졌는지 경험해 보도록 하시죠.

복제 구성 따라하기

[참고]
복 제를 구성하기 위해서는 두 가지 옵션을 준비해야 합니다. 첫 번째는 SQL Server Agent 서비스가 반드시 시작되어 있어야 합니다. 그리고 두 번째는 Agent 관련 확장 저장 프로시저의 사용을 활성화 하는 것입니다. 다음은 관련된 소개입니다.

SQL Server 2005는 서버 구성 속성의 개수가 이전 보다 훨씬 더 많아진 것을 알 수 있습니다. 추가 항목 중에서는 확장 저장 프로시저에 대한 것이 많이 있습니다. 이는 보안 문제를 예방하기 위한 사전 조치라고 보여집니다. 복제를 위해서도 Agent 서비스에 관련된 확정 저장 프로시저의 활성화가 필요합니다. 관련 속성이 비활성화된 상태일 경우, sp_configure 등을 이용해서 아래와 같이 해당 구성 속성을 활성화 시켜 주어야 합니다.

   1) sp_configure 를 사용해서 설정하는 방법

   -- 속성이 보이지 않을 경우, 고급 옵션을 1로 설정
   EXEC sp_configure‘ show advanced options’, 1
   RECONFIGURE

   -- Agent XPs 속성을 1로 설정
   EXEC sp_configure‘ Agent XPs’, 1
   RECONFIGURE

이 속성의 설정 여부는 SQL Server Management Studio의 SQL Server Agent 아이콘을 통해서도 보여집니다.


SQL Server Management Studio의 개체 탐색기(Object Explorer) 내에 복제 항목에서 복제에 관련된 전반적인 작업을 수행할 수 있습니다. 아래 따라 하기는 SQL Server 2000에서 예제 데이터베이스용으로 제공되던 Northwind 데이터베이스를 사용해서 트랜잭션 게시와 구독을 구성하고, 그 결과를 확인할 것입니다.

[따라하기] 트랜잭션 게시 만들기

1 개체 탐색기 - 해당 서버 - 복제 - 로컬 게시 - 새 게시 메뉴를 선택합니다.


2 새 게시 마법사가 시작됩니다. 첫 페이지는 복제 구성 마법사를 통해서 수행할 중요 작업에 대한 소개입니다.


3 배포자 서버를 선택합니다. 현재 서버로 선택하거나 이미 배포자 서버로 구성된 다른 서버 인스턴스를 추가할 수 있습니다. 해당 배포자 서버에는“배포”라는 데이터베이스가 생성되고, 복제 정보 저장용 데이터베이스로 사용됩니다.


4 SQL Server 에이전트 서비스의 자동 시작 여부를 선택합니다.


5 복제 스냅숏의 저장 위치를 지정합니다. 기본적으로 SQL Server의 ReplData 폴더가 지정되지만, 구독자에서의 접근을 허용하기 위해서는 네트워크 공유 폴더로서의 경로나 매핑된 드라이브를 지정합니다.


6 게시할 데이터나 개체를 포함하고 있는 원본 데이터베이스를 선택합니다.


7 게시 유형을 선택합니다. 하단에 게시 유형 설명을 통해서 선택된 게시 형식에 대한 자세한 도움말을 얻을 수 있습니다.


8 게시를 구성하기 위한 하나 이상의 아티클(Article)들을 선택합니다. 테이블의 경우 칼럼 단위 필터링을 위해서 일부 칼럼 만으로 아티클을 지정할 수 있습니다. 오른쪽 아티클 속성 버튼을 통해서 아티클에 대한 게시 관련 다양한 속성 값을 조정할 수 있습니다.


9 게시되는 테이블에서 원하지 않는 행의 복제를 제한하기 위해 행 필터링을 추가하거나 편집 및 삭제할 수 있습니다.


10 구독자에서 현재 게시되는 복제를 구독할 시에, 게시되는 아티클에 대한 데이터 구조(Schema)와 해당 데이터를 스냅숏을 통해 초기화할 수 있습니다. 이를 위해 스냅숏을 생성하고 유지하도록 지정합니다. 또한 해당 스냅숏 에이전트 실행을 위해 일정을 조정하실 수도 있습니다.


11 복제에 실질적인 수행을 담당하는 각 에이전트들에 대해서(복제 유형에 따른) 실행 권한을 가진 계정을 지정합니다. 하나의 에이전트에 대해 계정을 지정하고 다른 에이전트는 동일한 계정 하에서 실행되도록 지정할 수도 있습니다. 오른쪽 보안 설정... 버튼을 클릭합니다.


12 에이전트가 어떤 사용자 계정으로 실행될 것인지 지정합니다. 기본적으로 도메인 사용자 계정이나 로컬 컴퓨터 사용자 계정을 지정하며, 해당 사용자는 관리자 수준의 필요 권한을 가져야 합니다. 그리고 게시자에 연결할 때 사용할 계정으로 프로세스 계정을 대리(Impersonate)하거나 SQL Server 표준 사용자 계정을 지정할 수 있습니다.


13 스냅숏 에이전트의 실행을 위한 사용자 계정 만을 지정하고 로그 판독기 에이전트는 동일한 계정으로 처리했습니다.


14 마법사의 최종 작업 결과로 게시를 생성하게 되며, 필요할 경우 게시 만들기의 내용을 스크립트로 생성하고 파일로 저장하도록 지정할 수 있습니다. 예제에서는 스크립트를 생성하도록 지정을 했습니다.


15 스크립트 생성 옵션을 지정하는 경우, 다음 화면에서 스크립트를 저장할 파일과 저장 관련 옵션들(덮어쓰기 여부, 파일 형식)을 지정합니다.


16 지금까지 설정한 게시 관련 속성 값들에 대해 정리를 합니다. 원하는 게시인지를 확인한 후 생성될 게시의 이름을 입력합니다.


17 마지막으로 게시 생성 작업을 수행하고 문제가 발생할 경우 관련 메시지를 링크 형태로 보여줍니다. 하단의 보고서 버튼을 통해서 수행 결과에 대한 추가 내용을 확인할 수 있습니다.


이제 복제 - 로컬 게시 항목에서 새로운 게시 [Northwind]:NorthwindCustomers 가 보여집니다.

그리고 마법사에서, 스크립트 생성을 통해 만들어진 스크립트 파일의 내용은 다음과 같습니다.

[예제 게시 만들기 스크립트, CreatePublication.sql]

/****** 서버 YUKONFAN의 복제 구성을 스크립팅하고 있습니다. (생략)... ******/
/****** 참고: 보안을 위해 모든 암호 매개 변수는 NULL 또는 (생략)... ******/

/****** 서버 YUKONFAN을(를) 배포자로 설치하고 있습니다. (생략)... ******/
use master
exec sp_adddistributor @distributor = N’YUKONFAN’, @password = N’’
GO
exec sp_adddistributiondb @database = N’배포’, @data_folder = N’C:₩Program
Files₩Microsoft SQL Server₩MSSQL.1₩MSSQL₩Data’, @data_file_size = 4,
@log_folder = N’C:₩Program Files₩Microsoft SQL Server₩MSSQL.1₩MSSQL
₩Data’, @log_file_size = 2, @min_distretention = 0, @max_distretention = 72,
@history_retention = 48, @security_mode = 1
GO

use [배포]
if (not exists (select * from sysobjects where name =‘ UIProperties’
and type =‘ U‘ ))
create table UIProperties(id int)
if (exists (select * from ::fn_listextendedproperty‘( SnapshotFolder’,‘ user’,‘ dbo’,
‘table’,‘ UIProperties’, null, null)))
EXEC sp_updateextendedproperty N’SnapshotFolder’, N’C:₩Program Files
₩Microsoft SQL Server₩MSSQL.1₩MSSQL₩ReplData’, ‘user’, dbo, ‘table’,
‘UIProperties’
else
EXEC sp_addextendedproperty N’SnapshotFolder’, ‘C:₩Program Files
₩Microsoft SQL Server₩MSSQL.1₩MSSQL₩ReplData’, ‘user’, dbo, ‘table’,
‘UIProperties’
GO

exec sp_adddistpublisher @publisher = N’YUKONFAN’, @distribution_db = N’배
포’, @security_mode = 1, @working_directory = N’C:₩Program Files₩Microsoft
SQL Server₩ MSSQL.1₩ MSSQL₩ ReplData’, @trusted = N’false’,
@thirdparty_flag = 0, @publisher_type = N’MSSQLSERVER’
GO

use [Northwind]
exec sp_replicationdboption @dbname = N’Northwind’, @optname = N’publish’,
@value = N’true’
GO

use [Northwind]
exec [Northwind].sys.sp_addlogreader_agent @job_login = N’yukonfan
₩administrator’, @job_password = null, @publisher_security_mode = 1,
@job_name = null
GO

-- 트랜잭션 게시를 추가하는 중
use [Northwind]
exec sp_addpublication @publication = N’NorthwindCustomers’, @description =
N’게시자‘’YUKONFAN’’의 데이터베이스‘’Northwind’’에 대한 트랜잭션 게시입
니다.’, @sync_method = N’concurrent’, @retention = 0, @allow_push = N’true’,
@allow_pull = N’true’, @allow_anonymous = N’true’, @enabled_for_internet = N’
false’, @snapshot_in_defaultfolder = N’true’, @compress_snapshot = N’false’,
@ftp_port = 21, @ftp_login = N’anonymous’, @allow_subscription_copy = N’
false’, @add_to_active_directory = N’false’, @repl_freq = N’continuous’, @status
= N’active’, @independent_agent = N’true’, @immediate_sync = N’true’,
@allow_sync_tran = N’false’, @autogen_sync_procs = N’false’,
@allow_queued_tran = N’false’, @allow_dts = N’false’, @replicate_ddl = 1,
@allow_initialize_from_backup = N’false’, @enabled_for_p2p = N’false’,
@enabled_for_het_sub = N’false’
GO

exec sp_addpublication_snapshot @publication = N’NorthwindCustomers’,
@frequency_type = 1, @frequency_interval = 0, @frequency_relative_interval = 0,
@frequency_recurrence_factor = 0, @frequency_subday = 0,
@frequency_subday_interval = 0, @active_start_time_of_day = 0,
@active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date =
0, @job_login = N’yukonfan₩administrator’, @job_password = null,
@publisher_security_mode = 1

use [Northwind]
exec sp_addarticle @publication = N’NorthwindCustomers’, @article = N’
Customers’, @source_owner = N’dbo’, @source_object = N’Customers’, @type
= N’logbased’, @description = null, @creation_script = null, @pre_creation_cmd =
N’ drop’ , @schema_option = 0x000000000803509F,
@identityrangemanagementoption = N’manual’, @destination_table = N’
Customers’, @destination_owner = N’dbo’, @vertical_partition = N’false’,
@ins_cmd = N’CALL sp_MSins_dboCustomers’, @del_cmd = N’CALL
sp_MSdel_dboCustomers’, @upd_cmd = N’SCALL sp_MSupd_dboCustomers’
GO


게시된 Northwind:NorthwindCustomers 에 대해 구독자로의 밀어넣기 구독을 만드는 내용으로 따라하기를 살펴보도록 하겠습니다.

[따라하기] 밀어넣기 구독 만들기
1 구독 - 로컬 구독 - 새 구독 메뉴를 선택합니다.


2 새 구독 마법사를 시작합니다. 역시 마법사에서 수행할 핵심 작업에 대해 설명하고 있습니다.


3 구독 원본을 가진 게시자 서버와 게시 항목을 선택합니다.


4 트랜잭션 복제에서 배포 에이전트는 트랜잭션 로그와 관련 메타 데이터 등의 저장과 구독자로의 전달을 담당합니다. 이러한 배포 에이전트의 실행 위치는 지정합니다. 모든 에이전트가 배포자(별도의 배포자이거나 혹은 게시자와 동일한 위치의 배포자) 에서 수행(밀어넣기 구독)되도록 설정하거나 혹은 각 에이전트를 구독자에서 수행(끌어오기)하도록 설정할 수 있습니다. 또한 필요할 경우 마법사를 한 번 이상 수행해서 병행할 수도 있습니다.


5 구독자를 선택(혹은 추가)하고 구독 데이터베이스를 선택합니다. 목록 상자에서 <새 데이터베이스...> 메뉴를 이용하면 새로운 데이터베이스를 생성하고 구독 데이터베이스를 지정할 수도 있습니다.


6 <새 데이터베이스...> 메뉴를 선택하면 새 데이터베이스 대화상자가 보입니다. 새로 만들 데이터베이스에 대한 정보를 입력합니다.

[참고]
실제로 구현 시에는 구독할 게시 데이터의 전체 크기와 향후 발생 트랜잭션의 크기를 충분하게 지정하셔야 합니다



7 최종 구독 데이터베이스를 지정합니다.


8 배포 에이전트 수행 권한을 가질 사용자 계정과 배포자 및 구독자와의 연결 정보를 지정합니다.


9 배포 에이전트가 어떤 사용자 계정으로 실행될 것인지 지정합니다. 기본적으로 도메인 사용자 계정이나 로컬 컴퓨터 사용자 계정을 지정하며, 해당 사용자는 관리자 수준의 필요 권한을 가져야 합니다. 그리고 배포자와 구독자에 연결할 때 사용할 계정으로 프로세스 계정을 대리하거나 SQL Server 표준 사용자 계정을 지정할 수 있습니다.


10 지정된 정보를 최종 확인합니다.


11 각 에이전트의 동기화 일정을 지정합니다. 에이전트 일정 항목의 목록 상자에서 데이터 동기화 작업을 수행할 시점에 대한 방법을 선택할 수 있습니다.


12 게시에서 만들어진 아티클의 스키마와 데이터에 대한 스냅숏으로 구독자 데이터베이스에 초기화를 수행할 것인지 여부와 방법을 지정합니다.

[참고]
SQL Server 2005는 대용량 데이터베이스의 스냅숏 초기화에 들어가는 시간과 비용 측면의 부하를 줄이기 위해 백업을 통한 초기화 지원 등의 새로운 기술을 지원합니다




13 마법사의 최종 작업 결과로 구독을 생성하게 되며, 필요할 경우 구독 만들기의 내용을 스크립트로 생성하고 파일로 저장하도록 지정할 수 있습니다. 예제에서는 스크립트를 생성하도록 지정을 했습니다.


14 스크립트 생성 옵션을 지정하는 경우, 다음 화면에서 스크립트를 저장할 파일과 저장 관련 옵션들(덮어쓰기 여부, 파일 형식)을 지정합니다.


15 지금까지 설정한 구독 관련 속성 값들에 대해 정리를 합니다. 원하는 구독인지를 확인한 후 마침 버튼을 클릭합니다.


16 마지막으로 구독 생성 작업을 수행하고 문제가 발생할 경우 관련 메시지를 링크 형태로 보여줍니다. 하단의 보고서 버튼을 통해서 수행 결과에 대한 추가 내용을 확인할 수 있습니다.


17 이제 복제 - 로컬 구독 항목에서 새로운 구독 [NorthwindRepl - [YUKONFAN]. [Northwind] :NorthwindCustomers 가 보여집니다.


그리고 마법사에서, 스크립트 생성을 통해 만들어진 스크립트 파일의 내용은 다음과 같습니다.

[예제 구독 만들기 스크립트, NewSubscription.sql]

-----------------시작: 게시자‘YUKONFAN’에서 실행할 스크립트-----------------
use [Northwind]
exec sp_addsubscription @publication = N’NorthwindCustomers’, @subscriber =
N’YUKONFAN’, @destination_db = N’NorthwindRepl’, @subscription_type = N’
Push’, @sync_type = N’automatic’, @article = N’all’, @update_mode = N’read
only’, @subscriber_type = 0
exec sp_addpushsubscription_agent @publication = N’NorthwindCustomers’,
@subscriber = N’YUKONFAN’, @subscriber_db = N’NorthwindRepl’, @job_login
= N’yukonfan\administrator’, @job_password = null, @subscriber_security_mode
= 1, @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval
= 0, @frequency_recurrence_factor = 0, @frequency_subday = 0,
@frequency_subday_interval = 0, @active_start_time_of_day = 0,
@active_end_time_of_day = 235959, @active_start_date = 20060218,
@active_end_date = 99991231, @enabled_for_syncmgr = N’False’,
@dts_package_location = N’Distributor’
GO
-----------------끝: 게시자‘YUKONFAN’에서 실행할 스크립트-----------------


지금까지 새로운 복제 구성 마법사를 통해서 트랜잭션 복제를 구성해보고, SQL Server 2005에서 복제 구성 마법사가 얼마나 쉽고 편리해 졌는지 경험해 보았습니다. 향상된 복제 모니터 SQL Server 2005의 복제 모니터 또한 이전과 비교할 수 없을 정도로 보다 실질적이고 강력한 기능들을 제공하기 위해 재 설계되었습니다. 이전까지 복제 관리자들의 모니터링 관련 중요한 문제 중의 하나는 복제 시스템의 성능 모니터링과 병목 상황에 대한 판단을 위한 지원이 부족하다는 것이었습니다. 몇 가지 질문을 예로 들어 보면,

복제 성능에 대한 공통적인 질문
복제 시스템이 정상적으로 동작하고 있는가?
에이전트가 실행되지 않는 이유는 무엇인가?
시스템이 왜 이렇게 느리지?
복제하는데 시간이 얼마나 걸리는가?
어디에 잠재적인 문제가 발생하고 있는가?
문제 상황을 사전에 인식하고 조치를 취할 수는 없는가?

SQL Server 2005에 복제 모니터는 이러한 질문의 답을 제공합니다. 여러 가지 혁신적인 기술들을 포함하고 있는 새로운 복제 모니터는 이제 복제 작업 전반에 걸쳐 모니터링이 가능합니다. 게시 및 배포와 구독 상태에 대해 진단 분석이 가능하면 성능 문제에 대한 자세한 모니터링이 가능합니다. 또한 임계 값을 기준으로 경고 설정 기능이 제공됩니다.

새로운 복제 모니터의 특징을 정리하면 다음과 같습니다.
복제 모니터의 특징 Log Space Used(%)
성능 임계값 설정 잠재적인 성능 문제를 사전에 식별하기 위해 기준이 되는 조건과 임계 값을 정의하면 해당 상황에서 경고를 발생시키고 모니터링을 할 수 있습니다. 복제 구성 시 기본적인 몇 가지 조건이 설정됩니다.
모니터링 부하 최소화 복제 모니터는 많은 컴퓨터를 효율적으로 모니터링 하도록 설계 되었습니다. 복제 모니터가 사용하는 쿼리는 정기적으로 캐시되며 새로 고쳐집니다. 캐싱을 사용하므로 여러 페이지를 볼 때 불 필요한 쿼리 및 계산 작업을 줄일 수 있습니다. 기본적으로 주 복제 모니터 창은 자동으로 5초마다 새로 고침을 수행하며, 게시자 설정(Publisher Settings) 메뉴를 통해서 자동 새로 고침 여부와 빈도를 조정할 수 있습니다.
병합 복제 모니터링 병합 복제의 각 처리 단계(변경 내용 업로드, 다운로드 등)에 소요된 시간을 포함해서 동기화 중에 처리된 각 아티클에 대한 자세한 통계를 표시하므로 성능 문제의 원인을 식별하는데 도움을 줍니다.
트랜잭션 복제 모니터링 트랜잭션 복제는 이제 트랜잭션의 전 단계의 걸쳐 실 시간의 추적이 가능합니다. 이는 게시자에서 배포자로 그리고 하나 이상의 구독자에 대해 트랜잭션이 커밋되는 시간을 저장하는 추적 프로그램 토큰(tracer token)이라는 새로운 기술을 통해 제공됩니다.

이외에도 많은 향상 기능들이 제공이 됩니다.

다음 그림들은 복제 모니터를 수행 화면에 대한 중요 기능 들을 보여줍니다.

[따라하기] 복제 모니터
1 개체 탐색기 - 해당 서버 - 복제 에서 팝업 메뉴를 띄우고, 복제 모니터 시작 메뉴를 선택합니다.
2 복제 모니터에서 해당 게시 정보를 선택하면 관련된 정보를 모니터링 할 수 있습니다. 우선 모든 구독 탭에서 모든 구독자의 실행 정보와 관련된 작동 상태 및 성능 문제 여부 등을 바로 확인할 수 있으면 오른쪽의 표시: 목록 상자를 통해서 성능 문제가 있거나 오류 및 경고가 있는 구독에 대한 필터링을 수행할 수 있습니다


3 추적 프로그램 토큰 탭에서는 추적 프로그램 삽입 버튼을 이용해서 트랜잭션 복제 로그에 추적 프로그램 토큰을 추가하도록 지정하고 해당 토큰의 복제 경로를 따라 복제 수행에 걸리는 각 영역별(게시->배포, 배포->구독) 수행 시간 및 지연 시간 정보 등을 모니터링할 수 있습니다.


4 경고 및 에이전트 탭에서는 성능 문제 임계 값을 설정하거나 게시 관련된 에이전트와 작업에 대한 상세 정보를 모니터링 할 수 있습니다.


복제 모니터뿐만 아니라, SQL Server Management Studio, Transact-SQL 및 RMO, 복제 에이전트에 대한 경고 설정, 윈도우즈 시스템 모니터 등을 통해서 복제에 대한 모니터링을 수행할 수 있습니다.
피어 투 피어(Peer-to-Peer) 복제 SQL Server 2005는 피어 투 피어 복제라는 새로운 개념의 복제를 도입했습니다. 이는 피어투 피어 네트워크 토폴로지와도 개념이 유사합니다. 즉, 일반적인 트랜잭션 복제가 게시자 밑에 여러 구독자가 존재하는 계층 구조 형식이며, 구독자가 일반적으로 읽기 전용이라는 것을 기본으로 합니다(물론 업데이트 가능 구독도 지원을 하지만 이 또한 계층적 형식으로 반영됩니다).

반면에, 피어 투 피어 복제는 각각의 노드(node)가 게시자이자 구독자 역할을 하며 서로 다른 노드끼리 1대1의 복제를 구성하는 형식입니다.


웹 서비스를 하는 데이터베이스를 가정해 보죠, 피어 투 피어 복제가 항상 동기화된 데이터를 가지고 있으므로 각 노드에 대한 분산된 데이터 읽기 혹은 쓰기 작업이 가능하며, 사용자의 데이터 처리 또한 각 노드에 적용하거나 특정 노드에만 적용할 수 있습니다. 한 서버에 장애가 발생하는 경우 동일한 데이터를 가진 다른 서버를 사용할 수 있습니다.

피어 투 피어 복제는 시나리오에 따라서 다양한 토폴로지를 설계할 수 있습니다.

피 어 투 피어 복제의 구성은 기본적으로 트랜잭션 복제 형식으로 구성한 뒤에, 피어 투 피어 구독을 허용하고 나서 피어 투 피어 토톨로지 구성(Configure Peer-To-Peer Topology) 메뉴를 통해 초기 구성을 할 수가 있습니다.

또한 초기 토폴로지 구성 후에도 필요한 경우 노드를 추가하는 작업이 가능하므로 이를 통해 확장 가능한 피어 투 피어 복제 구성을 할 수 있습니다.

피어 투 피어 복제는 특히 다음과 같은 이득이 필요한 요구 사항이 있을 경우 적용 시나리오를 고려해 볼 수 있습니다.

피어 투 피어 복제를 통해 얻을 수 있는 이득
데이터베이스 어플리케이션에 대한 고 가용성과 수평 확장 능력 제공
단일 실패 지점의 문제 해결
온라인 상태에서의 유지 관리 작업
쿼리에 대한 데이터베이스 간 확장 기능 제공 피어 투 피어 복제를 구성 과정은 다음과 같습니다.
복제에 참여하는 모든 노드(서버)에 개별 배포자를 구성합니다.
복제에 참여하는 모든 노드에는 동일한 데이터베이스를 구성합니다.
첫 번째 노드에서 트랜잭션 복제를 구성합니다. 이 때 필터링과 같은 제한 작업들을 구성해서는 안 됩니다.
만들어진 게시의 속성(Publication Properties) 메뉴에서 구독 옵션 부분에 피어 푸 피어 구독 허용(Allow peer-to-peer subscriptions) 항목을 True로 설정합니다.
게시의 피어 투 피어 토폴로지 구성(Configure Peer-to-peer Topology) 메뉴를 통해서 마법사를 구동하고, 다른 노드를 추가하고 필요한 속성을 설정하는 작업을 수행합니다.

추적 프로그램 토큰 많은 서버 및 데이터베이스 간의 트랜잭션 복제는 모니터 및 유지 관리 작업에 부담이 됩니다. SQL Server 2005는 추적 프로그램 토큰(Tracer Token)이라는 기술을 통해서 복제 시스템의 추적 및 진단분석 그리고 성능 모니터링에 대한 보다 향상된 기능을 제공합니다.

테이블 및 인덱스가 정렬되면 모든 관련 데이터 및 인덱스가 같은 알고리즘으로 나누어지므로 SQL Server에서 보다 빠르고 효율적으로 분할 영역 추가 및 전환이 가능합니다.

앞 서 복제 모니터를 통해서 소개된 대로 트랜잭션 게시의 경우 추적 프로그램 토큰(Tracer Token) 을 삽입할 수가 있습니다. 추적 프로그램 토큰은 적은 양의 데이터로 게시자의 트랜잭션 로그에 삽입된 후 배포자와 구독자로 함께 복제가 됩니다. 따라서 게시에서부터 구독에 이르기까지 명령이 전달되는 과정을 추적할 수가 있게 됩니다. 추적 프로그램 토큰이 각시스템 간의 이동이 일어날 때 관련 통계가 수집되고 시스템 테이블에서 이러한 통계를 쿼리를 할 수가 있는 것입니다.

추적 프로그램 토큰을 통해서 다음과 같은 상세 정보를 얻을 수 있습니다
로그 판독기의 지연 시간
배포 지연 시간
게시부터 구독까지의 지연 시간
위 상세 정보를 통해서 다음과 같은 진단 분석을 할 수 있습니다
가장 오래 걸리 구독은 무엇인가?
아직 연결되지 않은 구독자는 누구인가?
DDL 구문 지원 이전 버전에서는 복제 아티클로 지정된 테이블에 칼럼을 추가하거나 삭제하는 작업이 복제용의 특정 프로시저를 사용하도록 제한적으로만 지원되었습니다.

SQL Server 2005에서는 다음과 같은 DDL 구문에 의한 스키마 변경은 자동 복제됩니다.
ALTER TABLE
ALTER VIEW
ALTER PROCEDURE
ALTER FUNCTION
ALTER TRIGGER

이 속성은 해당 게시의 구독 옵션을 통해서 조정할 수도 있습니다.
Oracle도 이제 복제 게시자 역할 수행 드디어 Oracle에서 SQL Server로의 복제가 지원됩니다. 현업의 많은 시스템들이 서로 다른 업무나 서비스, 혹은 솔루션 및 소프트웨어의 도입 과정에서 Oracle과 SQL Server를 함께 운영하고 있습니다. 그러나 이기종 시스템 간의 데이터를 협업하는 과정에서 어려움을 겪고 있는 것 또한 사실입니다.

SQL Server 2005에서는 트랜잭션(혹은 스냅숏) 복제에 대해 Oracle이 게시자 역할을 할 수 있도록 지원합니다(Oracle 버전 8 이상). SQL Server 복제와 동일한 방식으로 Oracle 데이터베이스를 SQL Server에 직접 복제를 할 수 있는 것입니다.



Oracle 측에서 또한 추가 소프트웨어 설치가 필요 없으며, SQL Server처럼 관리를 할 수가 있습니다. 따라서 기존의 복제 구성 및 관리에 대한 SQL Server 지식을 그대로 활용할 수가 있는 것입니다.

Oracle 게시 및 복제 방법은 Oracle 데이터베이스 내의 게시된 각 테이블에 대해 트리거와 추적 테이블 생성되고 게시 테이블의 데이터가 변경되면 데이터베이스 트리거가 실행되어서 변경된 각 행에 대한 정보를 관련된 복제 테이블에 삽입합니다. SQL Server 배포자의 로그 판독기 에이전트는 데이터 변경 정보를 배포 데이터베이스로 이동시키며 이후의 동작은 SQL Server 표준 복제로서 수행됩니다.
Oracle 게시를 통해 수행할 수 있는 작업은 다음과 같습니다.
데이터 공존 및 협업을 위한 전략
.NET 개발, 리포팅, 데이터 웨어하우스 스테이징 데이터베이스를 위한 시나리오
데이터 마이그레이션 작업에 대한 지원
기타 추가 향상 기능 구독 초기화 지원
SQL Server 2000에서는 구독 데이터베이스 초기화를 위해서 스냅숏 복제를 사용함으로 인해서 대용량 데이터 집합의 처리 시 많은 시간과 비용을 요구했습니다. SQL Server 2005에서는 다음과 같은 새로운 방법을 통해서 구독 데이터베이스 초기화를 수행할 수 있도록 지원합니다.

백업과 복원
데이터베이스 복사
동적 스냅숏

논리적 레코드 - 병합 복제의 동시성 지원
SQL Server 2005는 논리적 레코드(Logical Record)라는 개념의 도입으로 병합 테이블의 아티클 간의 관계를 정의함으로써, 관련된 행 집합이 모두 함께 전송되어서 데이터 일관성을 보장할 수 있도록 지원합니다.

예 를 들어, 실제 주문이 고객, 주문, 주문상세 테이블로 표현된다고 가정해 보죠. 만일 특정 주문이 주문, 주문상세 테이블을 통해서 등록되거나 변경된 경우 두 테이블의 변경 사항이 모두 다 복제에 적용되거나 아무것도 적용되지 않아야 하는 비즈니스 시나리오를 가진다면, 동기화를 수행하는 도중에 복제가 중단되거나 문제가 발생하는 경우 데이터의 일관성을 보장해 줄 수 있어야 합니다. 병합 복제(게시) 구성 시의 논리적 레코드의 관계를 설정합니다. 논리적 레코드는 테이블 간의 설정된 관계를 통해서 이러한 문제를 해결하고 논리적 레코드 단위의 충돌을 처리할 수 있게 지원합니다.

프로그래밍 능력
RMO (Replication Management Objects)
이 전의 프로그래밍 가능한 SQL Server 관리 개체였던 SQL-DMO와 달리, SQL Server 2005에서는 .NET 관리 코드(Managed Code)의 기반의 프로그래밍 가능한 복제 관리 개체인 RMO를 제공합니다. Visual Studio 2005 등의 개발 환경에서 Microsoft.SqlServer.Replication .NET Programming Interface (microsoft.sqlserver.rmo.dll) 참조를 통해서 SQL Server 2005의 새로운 복제 기능을 포함한 복제 시스템의 프로그래밍 요구 사항들을 모두 구현할 수 있는 강력한 프로그래밍 개체로 제공됩니다.

[참고]
RMO에 대한 예제는 다른 모듈에서 별도로 소개될 것입니다.


웹을 통한 동기화 무선 사용자의 증가로 인해서 웹을 통한 데이터의 복제 및 동기화 방법의 요구가 커지고 있 습니다. 보안 상의 이유로 VPN(Virtual Private Network, 가상사설망)을 고려할 수 있지만 적지 않은 비용이 요구되거나 작은 조직에서 사용하기엔 부담스러운 구성입니다.

SQL Server 2005는 병합 복제에 대해 웹 동기화를 도입했습니다. 이는 마이크로소프트 IIS 웹 서버에서 HTTPS 와 XML 메시지를 통해 모바일 장비 간 혹은 방화벽을 사이에 둔 서버 간의 복제를 지원합니다.
SQL Server 2005에서 사라지는 기능들 이전 버전에서 지원되던 다음 기능들은 SQL Server 2005에서 지원되지 않을 수도 있습니다.

데이터 복제 시 DTS 패키지를 연동
업데이트 가능 구독에서 마이크로소프트 메시지 큐 지원
ODBC 구독자
SQL Server 2005 성능 및 확장성 SQL Server 2005는 대용량 데이터베이스의 복제 지원을 위한 성능 향상 및 확장성의 증대를 위해 많은 추가 기능들을 제공합니다. 다음 표에서 이러한 기능들을 간단히 정리합니다.

[표] SQL Server 2005 성능 및 확장성

성능 및 확장성 설명
미리 계산된 파티션 병합 복제에서 매개 변수가 있는 필터링(이전의 동적 필터링)을 사용하는 경우 구독자가 게시자와 동기화되면 게시자는 구독자의 필터를 평가해서 그 구독자의 파티션이나 데이터 집합에 속 하는 지를 평가해야 합니다. 이 과정을 파티션 평가라고 합니다. 미리 계산된 파티션은 게시자의 변경 내용에 대해 파티션 멤버 자격을 미리 계산하고 변경 후에 지속하므로 구독자와 게시자가 동기화될 때 파티션 평가를 거치지 않고 관련된 변경 내용을 즉시 다운로드 할 수 있으므로 게시와 변경이 많은 경우에 성능이 향상됩니다.
공유 키 업데이트 SQL Server 2000에서는 고유 키에 대한 수정이 실제로는 DELETE와 INSERT로 복제되었습니다. SQL Server 2005에서는 이제 UPDATE로 복제되므로 정기적으로 데이터가 수정되는 경우의 성능을 향상시킵니다.
병렬 트랜잭션 복제 트랜잭션 복제에서, 게시자에서 배포자로 로그 판독기 에이전트에 의한 트랜잭션 비율은 적합한 반면, 배포자에서 구독자로의 트랜잭션 전송 비율이 상대적으로 떨어져서 성능 문제가 발생할 수 있었습니다. 이는 다중 클라이언트에서 게시자에 트랜잭션이 병렬로 발생하는 반면 구독자로는 직렬로 전송되기 때문입니다.
SQL Server 2000에서는, 독립 에이전트 옵션으로 게시자와 구독자별로 독립적인 에이전트를 사용하도록 구성해서 성능 문제를 해결하는데 도움이 되었습니다.
SQL Server 2005에서는 이 옵션이 디폴트입니다.
다운로드 전용 아티클 병합 게시에서 게시자에서만 데이터가 변경되고 구독자로 다운로드만 필요한 경우, 다운로드 전용으로 아티클을 지정해서 성능을 향상시킬 수 있습니다.
충돌 감소 보고서 및 읽기 작업 위주로 만들어진 구독에서 충돌을 줄이기위해 SQL Server 2005의 새로운 기술들을 사용할 수 있습니다.
예를 들어, 최신 데이터를 필요로 하는 대량의 구독자를 가진 경우 스냅숏 격리 수준을 사용할 수 있습니다. 혹은 특정 시점의 데이터만 필요로 하는 경우, 데이터베이스 스냅숏을 만들어서 제공할 수 있습니다.