SQL Server 2008 R2 : 컴퓨터 이름 변경 후 문제


10

로컬 SQL Server 인스턴스를 호스팅하는 원격 서버의 컴퓨터 이름을 변경 한 후 혼란스러운 문제가 있습니다.

기본적으로 원격 서버는 한 사이트에서 다른 사이트로 이동되었습니다. 이를 용이하게하기 위해 이전 데이터베이스를 새 데이터베이스 이름으로 백업하고 복원하여 클라이언트 소프트웨어의 새로운 데이터베이스로 사용할 수 있도록 데이터를 지 웁니다. 또한 사이트 번호로 각 서버를 식별하기 위해 항상 컴퓨터 이름을 변경했습니다.

클라이언트 소프트웨어로 데이터베이스를 잘 연결할 수 있으며 SQL Server에 직접 로그인 할 수 있습니다. 그러나 이벤트 로그에 오류가 발생하여 SQL Server 에이전트 작업 중 하나가 실패합니다.

SQL Server 예약 작업 'Nightly Reset'(0x4F76FDFFF6DFFE4EA0DE4A70252AD3BD)-상태 : 실패-호출 : 2012-02-07 08:10:05-메시지 : 작업이 실패했습니다. 야간 재설정 작업의 소유자 (Site-19 \ Admin)에 서버 액세스 권한이 있는지 판별 할 수 없습니다 (이유 : Windows NT 그룹 / 사용자 'Site-19 \ Admin', 오류 코드 0x534에 대한 정보를 얻을 수 없습니다. [SQLSTATE 42000] (SQLSTATE 42000] ( 15404 오류)).

이제 '사이트 19'는 이전 컴퓨터 이름으로 변경되었으며 서버가 재설정되었습니다. 새 사이트 번호 인 'Site-28'을 사용하여 수동으로 연결하면 Site-28 \ Admin을 사용하여 SQL Server에 연결된 것으로 표시됩니다. 그러나 에이전트 작업의 속성을 보면 소유자가 Site-19 \ Admin으로 표시되고 사용자를 찾아 변경하려고하면 Site-28 \ Admin이 옵션으로 표시되지 않습니다. Site-19 \ Admin 만 해당합니다. 이 작업에서 새 작업을 스크립트로 작성하고 소유자를 'Site-28 \ Admin'으로 수동으로 변경하면 새 작업은 소유자 'Site-19 \ Admin'으로 작성됩니다.

sys.servers (또는 sp_helpserver를 통해)를 보면 현재 컴퓨터 이름이라는 항목이 하나뿐입니다. 그러나 SELECT @@ SERVERNAME은 원래 개발 시스템 이름을 반환합니다 (두 이름이 변경됨).

요컨대,이 중요한 SQL Server 에이전트 작업은 더 이상 존재하지 않는 사용자에게 속하기 때문에 실행할 수 없으며이를 변경하거나 올바른 사용자로 작성하는 방법을 알 수 없습니다.


링크 주셔서 감사합니다. 당신의 제안에, 나는 거기에서도 그것을 물었다. 질문은 인프라와 관련이 있지만 답변에는 코드가 포함될 가능성이 높으며 여기에는 SQL Server 방법론 질문도 많이 있습니다.
Geo Ego

서버 'Site-28'을 삭제하면 어떻게됩니까? sp_helpserver는 무엇입니까? 오래된 작업을 삭제하고 새로 만들 수 없습니까?

1
흥미롭게도 'Site-28'을 삭제하려고하면 찾을 수 없다는 메시지가 나타납니다. 추가하려고하면 이미 존재한다고 말합니다. 마법사를 통해 또는 원본에서 스크립팅하여 작업을 새로 만들면 항상 'Site-19 \ Admin'을 소유자로 사용하여 작업을 만듭니다.
Geo Ego

따라서 이전의 물리적 서버에는 새로운 이름이 할당되었고 (이 변경은 DNS에서도 이루어짐) 이름이 바뀐 상자의 SELECT @@ SERVERNAME은 새로운 이름을 반환합니까?
jl01

1
이전 된 질문을이 질문에 병합하여 모든 답변이 통합되었습니다.
jcolebrand

답변:


7

sp_addserver를 사용하여 새 서버 이름을 추가 할 때 "로컬"지정을 포함해야합니다. @@ SERVERNAME의 메타 데이터를 업데이트하는 것은 해당 태그입니다. 추가 정보.

sp_addserver 'servername', local

그냥 메모 @@ServerName나 SQL 서버를 다시 시작할 때까지 업데이트되지 않았습니다
피아트

7

어제 친구의 도움으로 답을 찾았습니다. 사용하려는 Windows 로그인 이외의 사용자로 SSMS를 통해 로그인하고 이전 로그인을 삭제 한 후 Windows 로그인을 다시 추가해야했습니다. 그 후, 나는 작업의 소유권을 올바르게 이전 할 수 있었고 SQL은 Windows에서 사용자 데이터를 얻을 수 있었고 모든 것이 세상에 맞았습니다.


나는이 AND @ brian-knight의 대답을 적용했습니다. DB 소유권을 변경하기 위해 이것을 사용했습니다 SELECT 'use ' + DB_NAME(database_id) + ';EXEC sp_changedbowner ''sa'';' FROM sys.databases where DB_NAME(database_id) like 'MyDbs%';. 그 후 나는 나쁜 로그온을 끊을 수 있었다
fiat

4

다음을 사용하여 문제를 식별하고 올바른 drop 및 add 문을 작성합니다. ALL OK를 받으면 명령을 실행하는 데 필요한 다른 작업을 수행 할 필요가 없습니다.

declare @currentName as nvarchar(128)
declare @newName as varchar(max)
declare @serverName as varchar(max)
declare @serverInstance as varchar(max)

select  @currentName = @@SERVERNAME
select @serverInstance = cast(serverproperty('InstanceName') as varchar(max))
select  @serverName = cast(serverproperty('MachineName') as varchar(max))

set @newName = @serverName

if (@serverInstance <> '') 
begin
      set @newName = @serverName + '\' + @serverInstance
end

if (@currentName <> @newName)
Begin
      print 'sp_dropserver ''' + @currentName + '''';
      print 'go'
      print 'sp_addserver ''' + @newName + ''',local'
      print 'go'
end
else
Print 'ALL OK'

이 스크립트를 사용하여 이전 서버 이름을 수동으로 삭제하고 새 서버 이름을 추가해야한다는 것을 알 수있었습니다. 나는 그렇게했지만 여전히 같은 문제가 있습니다.
Geo Ego

인스턴스를 다시 시작 했습니까?

예, 인스턴스는 나중에 다시 시작되었습니다.
Geo Ego

죄송합니다. 문제가 무엇인지 잘 모르겠습니다.

0

비슷한 문제가 발생했습니다. SQL Server 및 SQL Server 에이전트가 실행중인 컴퓨터의 호스트 이름이 변경되었습니다. 에 작업이 할당되었습니다. 이 새로운 임시 사용자 / 드롭을 사용하여 임시 사용자를 생성하고 SSMS에 로그온 한 후 로그인 이름 (public 및 sysadmin privs!)을 생성하고이 재 작성된 로그인에 작업을 재 할당하면 로그인에 문제가 없습니다. 동일한 변경 사항을 반영하기 위해 시스템 테이블을 조작 할 수 있습니다. 그러나 위의 방법은 그렇게 위험하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.