Mengotomatiskan penggantian nama SQL Server

10

Kami sedang dalam proses mengganti SQL Server kami dan telah memutuskan bahwa mengubah nama server itu sendiri akan jauh lebih mudah daripada mengubah segala sesuatu yang lain untuk menunjuk ke nama baru. Kami menemukan petunjuk tentang mengubah nama contoh SQL Server agar sesuai dengan nama komputer yang terlihat seperti ini:

sp_dropserver 'OLDSERVER'
sp_addserver 'NEWSERVER', local

Meskipun SQL Enterprise Manager sepertinya tidak suka yang sama. Saya harus mengubahnya ke yang berikut untuk membuatnya bekerja bersama:

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

Yang tidak buruk, tetapi saya lebih suka hal-hal menjadi lebih otomatis. Karena @@ ServerName mengembalikan nama instance, saya menemukan cara mengotomatiskan baris pertama:

sp_dropserver @@ServerName; GO

Saya juga mengetahui bahwa SERVERPROPERTY ('ServerName') seharusnya mengembalikan nama komputer, jadi saya pikir saya mungkin dapat menggunakannya untuk mengotomatisasi bagian kedua, tetapi ini tidak berhasil:

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

Saya mencoba menetapkan variabel, yang perlu saya lakukan untuk memperbarui pekerjaan SQL Agent, tetapi itu tidak berhasil:

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

Sintaksis salah dekat 'sp_addserver'.

Saya ingin sekali tidak perlu mengubah kode nama server baru ke skrip, untuk membuatnya lebih mudah digunakan kembali. Adakah yang punya ide?

Scott
sumber
1
Bisakah Anda menambahkan EXEC sebelum sp_addserver dan melihat apakah itu membantu?
Sankar Reddy
Itu membuatnya bekerja. :)
Scott

Jawaban:

6

Berikut ini skrip untuk melakukan apa yang Anda inginkan:

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

Penghargaan: http://www.myitforum.com/articles/5/view.asp?id=4983

magma
sumber
1
Hampir, tetapi @ var1 harus dijatuhkan dan @ var2 ditambahkan. @@ ServerName mengembalikan nama instance SQL Server, sementara SERVERPROPERTY ('MachineName') mengembalikan nama komputer.
Scott
1

Dengan bantuan dari magma dan Sankar Reddy, berikut ini skrip yang sudah selesai:

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

Artikel yang ditemukan magma memiliki satu kesalahan kecil di dalamnya, yaitu mencoba menjatuhkan nama baru dan menambahkan nama lama alih-alih menjatuhkan nama lama dan menambahkan nama baru. Saya juga menambahkan permintaan pembaruan untuk memperbaiki pekerjaan agen SQL. Perhatikan bahwa ini hanya berfungsi dengan benar terhadap server master di lingkungan multi-server. Lingkungan saya adalah lingkungan server tunggal, jadi itu berfungsi untuk situasi saya.

Scott
sumber
-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
MI
sumber
Bagaimana ini berbeda dari jawaban yang lain (diterima)?
Sven