ข้อผิดพลาดในการเปลี่ยนชื่อฐานข้อมูลใน SQL Server 2008 R2


164

ฉันใช้แบบสอบถามนี้เพื่อเปลี่ยนชื่อฐานข้อมูล:

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

แต่มันแสดงข้อผิดพลาดเมื่อ excuting:

ข่าวสารเกี่ยวกับ 5030 ระดับ 16 สถานะ 2 บรรทัด 1
ไม่สามารถล็อกฐานข้อมูลเพื่อทำการดำเนินการได้

มีข้อผิดพลาดเกิดขึ้นกับข้อความค้นหาของฉันหรือไม่


4
ไม่มีข้อผิดพลาดในการค้นหา - ข้อผิดพลาดกำลังบอกคุณว่าการเชื่อมต่ออื่น ๆ เชื่อมต่อกับฐานข้อมูลดังนั้นคุณไม่ได้รับอนุญาตให้เปลี่ยนชื่อในขณะนี้
Damien_The_Unbeliever

1
หากคุณกำลังทำสิ่งนี้จาก SSMS ตรวจสอบให้แน่ใจว่าคุณไม่มีหน้าต่างแบบสอบถามเปิดเทียบกับฐานข้อมูลนั้นเนื่องจากเป็นการเชื่อมต่อแยกต่างหากที่วางล็อกไว้บนฐานข้อมูล
jleach

คำตอบ:


330

คุณสามารถลองตั้งค่าฐานข้อมูลเป็นโหมดผู้ใช้คนเดียว

https://stackoverflow.com/a/11624/2408095

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE    
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

1
เป็นWITH ROLLBACK IMMEDIATEสิ่งที่จำเป็น หากฉันไม่ได้ใช้เลยจะทำให้เกิดปัญหาหรือไม่
user13892

ปาร์ตี้ช้าไปหน่อย แต่เพื่อตอบคำถามนี้: ใช่คุณควรใช้WITH ROLLBACK IMMEDIATEในขณะที่แก้ไขฐานข้อมูลที่ผู้ใช้รายอื่นอาจใช้งานอยู่เพื่อให้มั่นใจถึงความสมบูรณ์ของการดำเนินการเหล่านี้ แต่ไม่จำเป็นจริงๆเมื่อตั้งค่าฐานข้อมูลกลับไปที่โหมด MULTI_USER อีกครั้งเนื่องจากฐานข้อมูลอยู่ในโหมด SINGLE_USER แล้วและคุณเป็นผู้ใช้เพียงคนเดียวที่สามารถเรียกใช้ธุรกรรมใด ๆ ได้
Hakan Yildizhan

61
  1. ตั้งค่าฐานข้อมูลเป็นโหมดเดียว:

    ALTER DATABASE dbName
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE
  2. ลองเปลี่ยนชื่อฐานข้อมูล:

    ALTER DATABASE dbName MODIFY NAME = NewName
  3. ตั้งค่าฐานข้อมูลเป็นโหมดผู้ใช้หลายคน:

    ALTER DATABASE NewName
    SET MULTI_USER WITH ROLLBACK IMMEDIATE

@SamieyMehdi ฉันควรใช้WITH ROLLBACk IMMEDIATEกับผู้ใช้หลายคนหรือไม่
BendEg

29

ในSQL Server Management Studio (SSMS) :

นอกจากนี้คุณยังสามารถคลิกขวาฐานข้อมูลของคุณในวัตถุ Explorerและไปที่Properties จากนั้นไปที่ตัวเลือก เลื่อนตลอดทางลงและการตั้งค่าจำกัด การเข้าถึงการSINGLE_USER เปลี่ยนชื่อฐานข้อมูลของคุณแล้วกลับไปในและตั้งกลับไปMULTI_USER


ง่ายและรวดเร็ว!
ani627

มันสมบูรณ์แบบ ทำงานกับ SQL Server 2017
Adam Macierzyński

19

ลองปิดการเชื่อมต่อกับฐานข้อมูลของคุณก่อน:

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

ถ่ายจากที่นี่


4

สิ่งนี้ทำเพื่อฉัน:

USE [master];
GO
ALTER DATABASE [OldDataBaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
EXEC sp_renamedb N'OldDataBaseName', N'NewDataBaseName';


-- Add users again
ALTER DATABASE [NewDataBaseName] SET MULTI_USER
GO


2

เปลี่ยนฐานข้อมูลเป็นโหมดผู้ใช้คนเดียวตามที่แสดงในคำตอบอื่น ๆ

บางครั้งแม้หลังจากการแปลงเป็นโหมดผู้ใช้คนเดียวการเชื่อมต่อที่อนุญาตให้ใช้กับฐานข้อมูลอาจถูกใช้งานอยู่

หากต้องการปิดการเชื่อมต่อแม้หลังจากแปลงเป็นโหมดผู้ใช้คนเดียวให้ลอง:

select * from master.sys.sysprocesses
where spid>50 -- don't want system sessions
  and dbid = DB_ID('BOSEVIKRAM')

ดูผลลัพธ์และดู ID ของการเชื่อมต่อกับฐานข้อมูลที่เป็นปัญหา

จากนั้นใช้คำสั่งด้านล่างเพื่อปิดการเชื่อมต่อนี้ (ควรมีเพียงอันเดียวเนื่องจากขณะนี้ฐานข้อมูลอยู่ในโหมดผู้ใช้คนเดียว)

KILL connection_ID

แทนที่ connection_id ด้วย ID ในผลลัพธ์ของเคียวรีที่ 1


1

1. ฐานข้อมูลตั้งค่าโหมดผู้ใช้เดี่ยวครั้งที่ 1

แก้ไขฐานข้อมูล BOSEVIKRAM ตลาดหลักทรัพย์ SINGLE_USER ด้วย Rollback ทันที

2. เปลี่ยนชื่อฐานข้อมูล

แก้ไขฐานข้อมูล BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

3.DATABAE SET MULIUSER MODE

แก้ไขฐานข้อมูล BOSEVIKRAM_ ลบSET MULTI_USER ด้วย ROLLBACK ทันที


0

อีกวิธีในการปิดการเชื่อมต่อทั้งหมด:

เครื่องมือการดูแลระบบ> ดูบริการในพื้นที่

หยุด / เริ่มบริการ "SQL Server (MSSQLSERVER)"


-1
use master

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE  

exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted'

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

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