Обновление sys.servers после переименования сервера SQL Server

Вопрос: Я собираюсь обновить свой экземпляр SQL Server 2012 до SQL Server 2014. Я клонировал главную виртуальную машину Windows и переименовал ее с foo-2012 на foo-2014. При перезапуске экземпляр SQL Server заметил это как обновленное собственное имя, поэтому теперь я могу войти в него как foo-2014. Все хорошо. К сожалению, запись (single) в sys.servers по-прежнему

Вопрос:

Я собираюсь обновить свой экземпляр SQL Server 2012 до SQL Server 2014.

Я клонировал главную виртуальную машину Windows и переименовал ее с foo-2012 на foo-2014. При перезапуске экземпляр SQL Server заметил это как обновленное собственное имя, поэтому теперь я могу войти в него как foo-2014. Все хорошо.

К сожалению, запись (single) в sys.servers по-прежнему foo-2012 что означает, что выполняется

SELECT * FROM [foo-2012].[barDB].[dbo].tFooBarTable

не удается:

Не удалось найти сервер RW-DB-2014 в sys.servers. Убедитесь, что указано правильное имя сервера. Если необходимо, выполните хранимую процедуру sp_addlinkedserver, чтобы добавить сервер в sys.servers.

Хорошо.

Я запускаю EXEC sp_addlinkedserver ‘foo-2014’, ‘SQL Server’ и получаю запись.

Но теперь новая запись имеет isLinked=1 (тогда как существующая запись имеет isLinked=0).

Документация указывает, что эта настройка важна (особенно для моего приложения, которое имеет очень сильные мнения относительно Distr.Trans. :()

Я не могу напрямую редактировать/добавлять/изменять sys.servers. Любая попытка сделать это дает:

Специальные обновления для системных каталогов запрещены.

Я EXEC sp_dropserver ‘foo-2014’ новую запись (EXEC sp_dropserver ‘foo-2014’), которая преуспевает, и попробуйте использовать EXEC sp_addserver ‘foo-2014’, ‘local’ который сообщает

Сервер “foo-2014” уже существует

Немедленно перезапустите кадр, затем откройте

Сервер “RW-DB-2014” не существует. Используйте sp_helpserver для отображения доступных серверов.

Как это исправить?

Лучший ответ:

Вам нужно сначала удалить старый сервер foo-2012 чтобы у вас не было строк в sys.servers, а затем добавьте ‘local’:

EXEC sp_dropserver ‘foo-2012’; GO EXEC sp_addserver ‘foo-2014’, ‘local’; GO

Затем вам нужно будет перезапустить службу MSSQLSERVER, чтобы это изменение вступило в силу, согласно документации для sp_addserver:

Локальное определение вступает в силу только после перезапуска Database Engine.

Оцените статью
Добавить комментарий