본문 바로가기
㏈ª By β┖υΕJini/MS-SQL

Merge Replication 수동 삭제 및 서버 변경에 따른 Hostname 변경 (SQL 2000)

by ㏈ª ☞ β┖υΕJini.κR 2012. 12. 13.

증상

전세계 여러매장에서 대략 5000여대의 POS 를 사용하고 있다.

각각의 POS 는 SQL Server 2000 Personal Edition 설치 되어 있다. 각 매장마다 판매 및 상품의 데이터를 공유하기 위해 매장 별로 Merge Replication 을 사용하고 있는 구조다.

이렇게 많은 POS 의 재설치시 설치 시간을 단축하기 위해 Ghost 를 사용한다. 기본 Base Server 가 아니라 이미 사용중인 특정 서버를 Ghost 로 떠서 기존에 사용중인 Replication 정보가 저장 되어 있다.  Merge Replication 를 재구성 할려고 하거나 EM 게시자에서 DELETE 를 통해 Replication 를 제거 할려고 하면 Error 가 발생한다. 그리고 Replication 으로 인해 Services Pack 업데이트로 안되는 상황 이었다.  이런 경우 Merge  Replication 정보를 어떻게 지워야 할까?

EM 을 통한 Replication 제거 시도

 

 

위와 같은 Error 로 인해 제거가 되지 않는다. 이 오류는 Server HostName 이 실제 서버 이름과 틀려 발생하는 문제이다.

그럼 서버의 Hostname 은 어떻게 되어있는지 확인해 보자.

--만약 cmdshell 이 실행이 안될때 아래 명령을 통해 활성화 해야 한다.   
--EXEC sp_configure 'show advanced options', 1
--GO
--RECONFIGURE
--GO

--서버이름가져오기
EXEC master.dbo.xp_cmdshell 'hostname'

실행 결과를 통해 이서버의 HostName XXX22  라는걸 알수 있다.

 
그럼 실제로 SQL Server 에 설정되어 있는 HostName 은 어떻게 되어 있을까?

SP_HELPSERVER

 

위 결과와 같이 XXXUK01 로 HostName 이 설정 되어 있는 있는걸 볼수 있다.

그리고 Base Server 가 아닌 다른 서버의 Ghost 정보로 복원을 하여 XXXUK02~04 , 그리고 repl_distributor 도 등록되어 있는걸 볼수 있다.

이럼 이걸 어떻게 제거 할까?

우선 서버 Hostname 변경으로 잘못된 서버를 가리키고 있는 JOB 을 비롯한  Replication 관련 JOB 의 서버 정보를 변경 한다.

USE msdb

GO

DECLARE @server sysname

SET @server = CAST(SERVERPROPERTY('ServerName')AS sysname)

UPDATE sysjobs

SET originating_server = @server

WHERE originating_server <> CAST(SERVERPROPERTY('ServerName')AS sysname)

그럼 이제 잘못 구성되어 있는 복제를 제거 하도록 해보자 ..

EM 에서 제거시 이전 처럼 Error 화면이 발생하지 않지만 게시자 DB 는 아직 Replication 으 구성되어 있다고 나온다.

그래서 아래 쿼리를 통해 게시자를 제거 하도록 한다.
sp_removedbreplication 'A디비'


다음으로 배포를 해제 합니다.
sp_dropdistributor @no_checks=1, @ignore_distributor=1


The Subscriber was dropped.

The Subscriber was dropped.

The Subscriber was dropped.

Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\distribution.LDF'.

Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\distribution.MDF'.

Login dropped.

Msg 15009, Level 16, State 1, Procedure sp_procoption, Line 47

The object 'sp_MSrepl_startup' does not exist in database 'msdb'.

위와 같은  에러가 발생 하지만 Replication 관련 인듯 하여 무시 하였다.

DM 에서 확인해보면 이렇게 적용 후 게시 관련 DB 에 Replication 구성이 되어 있다는 손 모양이나 배포자 DB 가 제거 된것을 확인 할수 있다.

Replication 재구성을 위해 잘못된 서버 이름들을 제거 하고 이서버에 맞게 서버 이름을 변경 하도록 한다.

sp_dropserver 'XXXUK01'

GO

sp_addserver XXX22,LOCAL

 

sp_dropserver 'XXXUK02'

GO

sp_dropserver 'XXXUK03'

GO

sp_dropserver 'XXXUK04'

GO

위와 같은 형식으로 제거 한다. repl_distributor 의 경우 sp_dropdistributor 를 통해 배포자 DB 와 함께 제거 되었다.

그리고 다시

SP_HELPSERVER 해보면

잘못된 서버명이 정상적으로 변경 된것을 확인 할수 있다.