우리는 SQL Server를 교체하는 중이며 다른 이름으로 변경하기 위해 서버 자체의 이름을 바꾸는 것이 훨씬 쉽다고 결정했습니다. 다음과 같은 컴퓨터 이름과 일치하도록 SQL Server 인스턴스 이름을 변경하는 방법에 대한 지침을 찾았습니다.
sp_dropserver 'OLDSERVER'
sp_addserver 'NEWSERVER', local
SQL Enterprise Manager는 이들을 함께 좋아하지 않는 것 같습니다. 함께 작동하도록 다음과 같이 변경해야했습니다.
sp_dropserver 'OLDSERVER'; GO
sp_addserver 'NEWSERVER', 'local'; GO
어느 것이 나쁘지는 않지만 더 자동화 된 것을 선호합니다. @@ ServerName은 인스턴스 이름을 반환하므로 첫 번째 줄을 자동화하는 방법을 알아 냈습니다.
sp_dropserver @@ServerName; GO
또한 SERVERPROPERTY ( ‘ServerName’)이 컴퓨터 이름을 반환한다고 가정했기 때문에 두 번째 부분을 자동화하는 데 사용할 수 있다고 생각했지만 작동하지 않았습니다.
sp_addserver SERVERPROPERTY('ServerName'), 'local'; GO
SQL 에이전트 작업을 업데이트하기 위해 어쨌든 수행 해야하는 변수 설정을 시도했지만 작동하지 않았습니다.
DECLARE @srv sysname;
SET @srv = CAST(SERVERPROPERTY('ServerName') AS sysname);
sp_addserver @srv, 'local'; GO
‘sp_addserver’근처의 구문이 잘못되었습니다.
새 서버 이름을 스크립트에 하드 코딩하지 않아도 쉽게 재사용 할 수 있기를 바랍니다. 아무도 아이디어가 있습니까?
답변
원하는 것을 수행하는 스크립트는 다음과 같습니다.
DECLARE @var1 nvarchar(50)
DECLARE @var2 nvarchar(50)
SET @var1 = convert(nvarchar(50),@@SERVERNAME)
SET @var2 = convert(nvarchar(50),SERVERPROPERTY('MachineName'))
EXEC sp_dropserver @var1
EXEC sp_addserver @var2, 'local'
GO
답변
마그마와 Sankar Reddy의 도움으로 완성 된 스크립트는 다음과 같습니다.
DECLARE @var1 nvarchar(50)
DECLARE @var2 nvarchar(50)
SET @var1 = convert(nvarchar(50),@@SERVERNAME)
SET @var2 = convert(nvarchar(50),SERVERPROPERTY('MachineName'))
EXEC sp_dropserver @var1
EXEC sp_addserver @var2, 'local'
UPDATE msdb.dbo.sysjobs SET originating_server = @var2
GO
마그마가 찾은 기사에는 작은 오류가 있었는데 이전 이름을 삭제하고 새 이름을 추가하는 대신 새 이름을 삭제하고 이전 이름을 추가하려고 시도했습니다. 또한 SQL 에이전트 작업을 수정하기 위해 업데이트 쿼리를 추가했습니다. 이것은 다중 서버 환경에서 마스터 서버에 대해서만 올바르게 작동합니다. 내 환경은 단일 서버 환경이므로 내 상황에 적합합니다.
답변
Declare @OldName varchar(50),
@NewName Varchar(50)
Select @OldName = CONVERT(VARCHAR(50),@@SERVERNAME) ;
--SELECT @OldName [OLDNAME]
Select @NewName = CONVERT(VARCHAR(50),SERVERPROPERTY('ServerName'));
--SELECT @NewName [NEWNAME]
EXEC sp_dropserver @OldName;
EXEC sp_addserver @server = '@NewName',@local='local';
GO