Tự động đổi tên máy chủ SQL


10

Chúng tôi đang trong quá trình thay thế Máy chủ SQL của mình và đã quyết định rằng việc đổi tên máy chủ sẽ dễ dàng hơn nhiều so với việc thay đổi mọi thứ khác để trỏ đến một tên mới. Chúng tôi đã tìm thấy hướng dẫn về việc thay đổi tên đối tượng SQL Server để khớp với tên máy tính giống như sau:

sp_dropserver 'OLDSERVER'
sp_addserver 'NEWSERVER', local

Mặc dù SQL Enterprise Manager dường như không thích những thứ đó cùng nhau. Tôi đã phải thay đổi nó thành như sau để làm cho nó hoạt động cùng nhau:

sp_dropserver 'OLDSERVER'; GO
sp_addserver 'NEWSERVER', 'local'; GO

Điều này không tệ, nhưng tôi thích mọi thứ tự động hơn. Vì @@ ServerName trả về tên của thể hiện, tôi đã tìm ra cách tự động hóa dòng đầu tiên:

sp_dropserver @@ServerName; GO

Tôi cũng đã học được rằng SERVERPROPERTY ('ServerName') có nghĩa vụ phải trả lại tên máy tính, vì vậy tôi nghĩ rằng tôi có thể sử dụng nó để tự động hóa phần thứ hai, nhưng điều này không hoạt động:

sp_addserver SERVERPROPERTY('ServerName'), 'local'; GO

Tôi đã thử thiết lập một biến, dù sao tôi cũng cần phải cập nhật các công việc của Tác nhân SQL, nhưng nó cũng không hoạt động:

DECLARE @srv sysname;
SET @srv = CAST(SERVERPROPERTY('ServerName') AS sysname);
sp_addserver @srv, 'local'; GO

Cú pháp không chính xác gần 'sp_addserver'.

Tôi rất muốn không phải mã hóa tên máy chủ mới vào tập lệnh, để làm cho điều này dễ dàng sử dụng lại hơn. Bất cứ ai có ý tưởng?


1
Bạn có thể thêm EXEC trước sp_addserver và xem nó có giúp ích không?
Sankar Reddy

Điều đó làm cho nó hoạt động. :)
Scott

Câu trả lời:


6

Đây là một kịch bản để làm những gì bạn muốn:

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

Tín dụng: http://www.myitforum.com/articles/5/view.asp?id=4983


1
Hầu như, nhưng @ var1 nên được loại bỏ và @ var2 được thêm vào. @@ ServerName trả về tên của phiên bản SQL Server, trong khi SERVERPROPERTY ('MachineName') trả về tên của máy tính.
Scott

1

Với sự giúp đỡ từ magma và Sankar Reddy, đây là kịch bản hoàn chỉnh:

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

Bài báo mà magma tìm thấy có một lỗi nhỏ trong đó, đó là nó đang cố gắng bỏ tên mới và thêm tên cũ thay vì bỏ tên cũ và thêm tên mới. Tôi cũng đã thêm một truy vấn cập nhật để sửa các công việc của tác nhân SQL. Lưu ý rằng điều này chỉ hoạt động chính xác đối với máy chủ chính trong môi trường nhiều máy chủ. Môi trường của tôi là môi trường một máy chủ, vì vậy nó hoạt động cho tình huống của tôi.


-3
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

Làm thế nào là khác nhau sau đó câu trả lời khác (được chấp nhận)?
Sven
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.