SQL Server 2008 R2: ปัญหาหลังจากเปลี่ยนชื่อคอมพิวเตอร์


10

ฉันมีปัญหาสับสนหลังจากเปลี่ยนชื่อคอมพิวเตอร์ของเซิร์ฟเวอร์ระยะไกลที่โฮสต์อินสแตนซ์ SQL Server ในพื้นที่

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

ฐานข้อมูลสามารถเชื่อมต่อโดยซอฟต์แวร์ไคลเอนต์ได้ดีและฉันสามารถเข้าสู่ระบบโดยตรงไปยัง SQL Server ได้ดี อย่างไรก็ตามหนึ่งในงานตัวแทนการเซิร์ฟเวอร์ SQL ของฉันล้มเหลวโดยมีข้อผิดพลาดในบันทึกเหตุการณ์:

SQL Server ที่กำหนดเวลางาน 'รีเซ็ตทุกคืน' (0x4F76FDFFF6DFFE4EA0DE4A70252AD3BD) - สถานะ: ล้มเหลว - เรียกใช้เมื่อ: 2012-02-07 08:10:05 - ข้อความ: งานล้มเหลว ไม่สามารถระบุได้ว่าเจ้าของ (ไซต์ -19 \ Admin) ของงานคืนใหม่มีการเข้าถึงเซิร์ฟเวอร์หรือไม่ (เหตุผล: ไม่สามารถรับข้อมูลเกี่ยวกับกลุ่ม Windows NT / ผู้ใช้ 'ไซต์ -19 \ Admin' รหัสข้อผิดพลาด 0x534 [SQLSTATE 42000] ( ข้อผิดพลาด 15404))

ตอนนี้ 'ไซต์ -19' เป็นชื่อคอมพิวเตอร์เครื่องเก่าซึ่งมีการเปลี่ยนแปลงและเซิร์ฟเวอร์ถูกรีเซ็ต ฉันเชื่อมต่อด้วยตนเองโดยใช้ 'ไซต์ -28' หมายเลขไซต์ใหม่และแสดงให้ฉันเห็นว่ากำลังเชื่อมต่อกับ SQL Server ด้วยไซต์ -28 \ Admin อย่างไรก็ตามเมื่อฉันดูคุณสมบัติของงานตัวแทนมันจะแสดงเจ้าของว่าเป็น Site-19 \ Admin และเมื่อฉันพยายามเรียกดูผู้ใช้เพื่อเปลี่ยนมัน Site-28 \ Admin จะไม่แสดงเป็นตัวเลือก มี แต่ Site-19 \ Admin เท่านั้น หากฉันสคริปต์งานใหม่จากงานนี้และเปลี่ยนเจ้าของเป็น 'Site-28 \ Admin' ด้วยตนเองงานใหม่จะถูกสร้างขึ้นด้วยเจ้าของ 'Site-19 \ Admin'

มองหา sys.servers (หรือผ่าน sp_helpserver) ฉันมีเพียงหนึ่งรายการ: ชื่อคอมพิวเตอร์ปัจจุบัน อย่างไรก็ตาม SELECT @@ SERVERNAME จะส่งคืนชื่อเครื่องพัฒนาดั้งเดิม (เปลี่ยนชื่อสองครั้งแล้ว)

กล่าวโดยย่อคือฉันไม่สามารถเรียกใช้งานตัวแทนของเซิร์ฟเวอร์ SQL ที่สำคัญนี้ได้เนื่องจากเป็นของผู้ใช้ที่ไม่มีอยู่อีกต่อไปและฉันไม่สามารถหาวิธีเปลี่ยนหรือสร้างเป็นผู้ใช้ที่ถูกต้องได้


ขอบคุณสำหรับลิงค์ ตามคำแนะนำของคุณฉันถามมันด้วยเช่นกัน ฉันคิดว่ามันใช้ได้ที่นี่เช่นกันในขณะที่คำถามเกี่ยวข้องกับโครงสร้างพื้นฐานมากกว่าคำตอบน่าจะเกี่ยวข้องกับรหัสมากและมีคำถามมากมายเกี่ยวกับระเบียบวิธีของ SQL Server ที่นี่เช่นกัน
Geo Ego

และจะเกิดอะไรขึ้นถ้าคุณดรอปเซิร์ฟเวอร์ 'ไซต์ -28' สิ่งที่แสดง sp_helpserver คุณไม่สามารถลบงานเก่าและสร้างงานใหม่ได้หรือไม่

1
น่าสนใจพอเมื่อฉันพยายามวาง 'Site-28' มันบอกฉันว่าหาไม่พบ เมื่อฉันพยายามที่จะเพิ่มมันก็บอกว่ามันมีอยู่แล้ว ถ้าฉันสร้างงานใหม่ไม่ว่าจะด้วยตัวช่วยสร้างหรือเขียนสคริปต์ออกมาจากต้นฉบับมันจะสร้างมันขึ้นมาด้วย 'Site-19 \ Admin' ในฐานะเจ้าของ
Geo Ego

ดังนั้นเซิร์ฟเวอร์เก่าจริงได้รับการกำหนดชื่อใหม่ (และการเปลี่ยนแปลงนี้ทำใน DNS ด้วย) และ SELECT @@ SERVERNAME บนกล่องที่เปลี่ยนชื่อจะส่งคืนชื่อใหม่หรือไม่
jl01

1
ฉันรวมคำถามที่ถ่ายโอนเป็นคำถามนี้ดังนั้นคำตอบทั้งหมดจะถูกรวมเข้าด้วยกัน
jcolebrand

คำตอบ:


7

เมื่อคุณเพิ่มชื่อเซิร์ฟเวอร์ใหม่โดยใช้ sp_addserver คุณจำไม่ได้ว่าจะรวมการกำหนด "ท้องถิ่น" เป็นแท็กที่อัปเดตข้อมูลเมตาสำหรับ @@ SERVERNAME ข้อมูลมากกว่านี้.

sp_addserver 'servername', local

แค่ทราบ@@ServerNameว่าไม่ได้อัปเดตจนกว่าฉันจะรีสตาร์ท SQL Server
fiat

7

ฉันพบคำตอบเมื่อวานนี้ด้วยความช่วยเหลือจากเพื่อนของฉัน ฉันต้องเข้าสู่ระบบผ่าน SSMS กับผู้ใช้อื่นนอกเหนือจากการเข้าสู่ระบบ Windows ที่ฉันพยายามจะใช้ลบการเข้าสู่ระบบเก่าและเพิ่มการเข้าสู่ระบบ Windows ของฉันอีกครั้ง หลังจากนั้นฉันสามารถถ่ายโอนความเป็นเจ้าของในงานได้อย่างถูกต้อง SQL สามารถรับข้อมูลผู้ใช้จาก Windows และทุกอย่างถูกต้องกับโลก


ฉันใช้คำตอบของ AND @ brian-knight นี้ เพื่อเปลี่ยนความเป็นเจ้าของฐานข้อมูลฉันใช้SELECT 'use ' + DB_NAME(database_id) + ';EXEC sp_changedbowner ''sa'';' FROM sys.databases where DB_NAME(database_id) like 'MyDbs%';มัน หลังจากนั้นฉันก็สามารถที่จะลดลงเข้าสู่ระบบที่ไม่ดี
fiat

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'

เมื่อใช้สคริปต์นั้นฉันสามารถระบุได้ว่าฉันต้องการวางชื่อเซิร์ฟเวอร์เก่าด้วยตนเองและเพิ่มชื่อใหม่ ฉันทำเช่นนั้น แต่ฉันก็ยังมีปัญหาเดิมอยู่
Geo Ego

คุณรีสตาร์ทอินสแตนซ์หรือไม่

ใช่อินสแตนซ์ถูกเริ่มใหม่หลังจากนั้น
Geo Ego

ขออภัยเพื่อนต้องโค้งคำนับไม่แน่ใจว่าปัญหาอาจเกิดขึ้น

0

มีปัญหาที่คล้ายกัน: เปลี่ยนชื่อโฮสต์ของคอมพิวเตอร์ที่ SQL Server และ บริษัท ตัวแทนของเซิร์ฟเวอร์ SQL กำลังทำงานอยู่ งานที่ได้รับมอบหมายให้ หลังจากสร้างผู้ใช้ชั่วคราว / การเข้าสู่ระบบเพื่อ SSMS โดยใช้ผู้ใช้ชั่วคราว / วางใหม่และสร้างชื่อเข้าสู่ระบบ (สาธารณะและ sysadmin privs!) / กำหนดงานให้กับการเข้าสู่ระบบที่สร้างขึ้นใหม่นี้ทุกอย่างเรียบร้อย บางทีคุณอาจจัดการตารางระบบเพื่อสะท้อนการเปลี่ยนแปลงเดียวกัน แต่วิธีการข้างต้นไม่ได้มีความเสี่ยง

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