SQL Server 2008 R2: проблеми після зміни імені комп'ютера


10

У мене виникає заплутана проблема після зміни імені комп'ютера віддаленого сервера, на якому розміщено локальний екземпляр SQL Server.

В основному віддалений сервер був переміщений з одного сайту на інший. Щоб полегшити це, я створив резервну копію та відновив стару базу даних до нового імені бази даних, очистивши дані, щоб вона могла бути використана як нова база даних для клієнтського програмного забезпечення. Я також змінив ім'я комп’ютера, як ми завжди робимо так, щоб ідентифікувати кожен сервер за його номером сайту.

Клієнтське програмне забезпечення може добре підключати базу даних, і я можу ввійти безпосередньо до штрафу на SQL Server. Однак одне з моїх завдань агента SQL Server не працює з помилкою в журналі подій:

Запланована робота SQL Server 'Нічні скидання' (0x4F76FDFFF6DFFE4EA0DE4A70252AD3BD) - Статус: Помилка - Викликано: 2012-02-07 08:10:05 - Повідомлення: Помилка роботи. Неможливо визначити, чи має власник (Site-19 \ Admin) завдання Nightly Reset доступ до сервера (причина: Не вдалось отримати інформацію про групу / користувача Windows NT 'Site-19 \ Admin', код помилки 0x534. [SQLSTATE 42000] ( Помилка 15404)).

Тепер "Site-19" - це стара назва комп'ютера, яку було змінено, і сервер було скинуто. Я підключаю вручну за допомогою "Site-28", новий номер сайту, і він показує, що я підключений до SQL Server із Site-28 \ Admin. Однак, коли я дивлюся на властивості завдання агента, він показує, що власник є Site-19 \ Admin, і коли я намагаюся переглядати користувачів, щоб змінити його, Site-28 \ Admin не відображається як варіант , лише Сайт-19 \ Адміністратор. Якщо я скриптую нове завдання з цього і вручну зміню власника на "Сайт-28 \ Адміністратор", нове завдання створюється з власником "Сайт-19 \ Адміністратор".

Дивлячись на sys.servers (або через sp_helpserver), у мене є лише один запис: поточна назва комп’ютера. Однак SELECT @@ SERVERNAME повертає оригінальну назву машини для розробки (дві зміни імені тому).

Коротше кажучи, я не можу запустити цю важливу роботу агента SQL Server, оскільки вона належить користувачеві, якого більше немає, і я не можу зрозуміти, як його змінити або створити як правильного користувача.


Дякуємо за посилання На вашу пропозицію я і там запитав. Я також думаю, що це справедливо і тут, оскільки, хоча питання стосується більшої інфраструктури, відповідь, швидше за все, стосуватиметься коду, і тут також є багато питань методології SQL Server.
Гео Его

А що станеться, якщо ви скинете сервер "Site-28"? Що відображає sp_helpserver? Ви не можете просто видалити стару роботу та створити нову?

1
Досить цікаво, що коли я намагаюся скинути "Site-28", він говорить мені, що його неможливо знайти. Коли я намагаюся його додати, він говорить, що він уже існує. Якщо я створюю завдання нове, чи то через майстра, чи викреслюючи його з оригіналу, воно завжди створює його як власник "Site-19 \ Admin".
Гео Его

Отже, старому фізичному серверу було присвоєно нове ім'я (і ця зміна була також внесена в DNS), а SELECT @@ SERVERNAME у перейменованому вікні повертає нове ім’я?
jl01

1
Я з’єднав передане питання в це, тому всі відповіді консолідовані.
jcolebrand

Відповіді:


7

Коли ви додали нове ім’я сервера за допомогою sp_addserver, ви пам’ятаєте, що включили позначення «локальний». Саме цей тег оновлює метадані для @@ SERVERNAME. Більше інформації.

sp_addserver 'servername', local

Просто примітка, яка @@ServerNameне оновлювалася, поки я не перезапустив SQL Server
фіат

7

Я вчора знайшов відповідь за допомогою мого друга. Мені довелося увійти через SSMS з іншим користувачем, ніж логін Windows, який я намагався використати, видалити старий логін та знову додати свій логін для Windows. Після цього я зміг належним чином передати право власності на роботу, SQL змогла отримати дані користувача з Windows, і все було в порядку зі світом.


Я застосував цю відповідь І @ Брайан-лицар. Для зміни власності на db я використав це SELECT 'use ' + DB_NAME(database_id) + ';EXEC sp_changedbowner ''sa'';' FROM sys.databases where DB_NAME(database_id) like 'MyDbs%';. Після цього мені вдалося скинути поганий вхід
фіат

4

Я використовую наступне, щоб визначити проблеми та створити правильний падіння та додавання висловлювань, якщо ви отримаєте ВСЕ ОК, тоді вам не потрібно робити нічого, інакше вам потрібно запустити команди.

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'

Використовуючи цей сценарій, я зміг визначити, що мені потрібно вручну скинути старе ім’я сервера та додати нове. Я так і зробив, але у мене все ще є ті самі проблеми.
Гео Его

Ви перезапустили екземпляр?

Так, екземпляр був після цього перезапущений.
Гео Его

Вибачте, чувак, повинен поклонитися, не знаючи, в чому проблема.

0

Мав аналогічну проблему: змінив ім'я хоста комп’ютера, де працює SQL Server та агент SQL Server. Вакансії були призначені. Після створення користувача temp / входу в SSMS за допомогою цього нового користувача temp / drop та створення імені для входу (public та sysadmin privs!) / Повторно призначте завдання для цього заново створеного входу, все було добре. Можливо, ви могли б маніпулювати системною таблицею для відображення тієї ж зміни; але вищеописаний метод не такий ризикований.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.