การเปลี่ยนชื่อ SQL Server โดยอัตโนมัติ


10

เรากำลังอยู่ในขั้นตอนการแทนที่ 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 Agent แต่ก็ไม่ได้ผล:

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

ไวยากรณ์ไม่ถูกต้องใกล้กับ 'sp_addserver'

ฉันอยากจะไม่ต้อง hardcode ชื่อเซิร์ฟเวอร์ใหม่ลงในสคริปต์เพื่อให้สามารถใช้ซ้ำได้ง่ายขึ้น ใครมีความคิดเห็นบ้าง


1
คุณสามารถเพิ่ม EXEC ก่อน sp_addserver และดูว่าช่วยได้หรือไม่
Sankar Reddy

นั่นทำให้มันใช้งานได้ :)
Scott

คำตอบ:


6

นี่คือสคริปต์ที่จะทำสิ่งที่คุณต้องการ:

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

เครดิต: http://www.myitforum.com/articles/5/view.asp?id=4983


1
เกือบแล้ว แต่ควรลด @ @ var1 และเพิ่ม @ var2 @@ ServerName ส่งคืนชื่อของอินสแตนซ์ SQL Server ในขณะที่ SERVERPROPERTY ('MachineName') จะส่งคืนชื่อคอมพิวเตอร์
สกอตต์

1

ด้วยความช่วยเหลือจาก magma และ 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 โปรดทราบว่าสิ่งนี้ทำงานได้อย่างถูกต้องกับเซิร์ฟเวอร์หลักในสภาพแวดล้อมที่มีหลายเซิร์ฟเวอร์ สภาพแวดล้อมของฉันเป็นสภาพแวดล้อมเซิร์ฟเวอร์เดียวดังนั้นจึงทำงานได้กับสถานการณ์ของฉัน


-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

สิ่งนี้แตกต่างจากคำตอบอื่น ๆ (ยอมรับ) อย่างไร
สเวน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.