Atur basis data dari mode SINGLE USER ke MULTI USER

189

Saya perlu bantuan dengan mengatur database yang dikembalikan dalam SINGLE_USERmode ke MULTI_USER. Setiap kali saya berlari

ALTER DATABASE BARDABARD
SET MULTI_USER;
GO

Saya mendapatkan kesalahan ini:

Perubahan pada status atau opsi database 'BARDABARD' tidak dapat dilakukan saat ini.

Basis data dalam mode satu pengguna, dan pengguna saat ini terhubung dengannya.

Perlu dalam SINGLE_USERmode non- untuk mengaturnya ke mode lain, tapi saya tidak bisa mengatur database dalam mode lain saat sedang SINGLE_USERmode.

Rahna1970418
sumber

Jawaban:

114

"Pengguna saat ini terhubung" mungkin jendela SQL Server Management Studio itu sendiri. Coba pilih master database dan jalankan ALTERkueri lagi.

paul
sumber
1
Menambahkan ke ini: Tampaknya jendela permintaan dapat dilampirkan ke database meskipun beberapa database lain (seperti master) dipilih di drop-down toolbar Databases yang tersedia ketika jendela permintaan aktif. Jika terus membuat Anda sakit kepala, tutup semua jendela permintaan lainnya, dan pilih beberapa basis data sistem yang tidak bersalah seperti masteratau tempdbdi drop-down di satu jendela yang tersisa.
CVn
Cobalah untuk melepaskan DB dan menghubungkan lagi di studio manajemen server microsoft SQL. Kemudian jalankan perintah lagi.
Isuru Madusanka
Komentar pertama sangat membantu dan bisa ditambahkan ke jawabannya, sebenarnya. Saya tidak bisa menjalankan kueri sebelum menutup semua pertanyaan lain.
user2216
88

Pesan kesalahan itu umumnya berarti ada proses lain yang terhubung ke DB. Coba jalankan ini untuk melihat mana yang terhubung:

exec sp_who

Itu akan mengembalikan Anda proses dan kemudian Anda harus dapat menjalankan:

kill [XXX]

Di mana [xxx] adalah spid proses yang ingin Anda bunuh.

Kemudian Anda dapat menjalankan pernyataan di atas.

Semoga berhasil.

sgeddes
sumber
kill [xxx] menghilangkan proses, tetapi ketika saya mencoba menjalankan perintah saya, itu kembali!
colmde
74

Anda dapat menambahkan opsi untuk mengembalikan perubahan Anda dengan segera.

ALTER DATABASE BARDABARD
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO
LG1
sumber
1
Apa yang ROLLBACK IMMEDIATEsebenarnya dilakukan?
dakab
3
@dakab Memaksa semua transaksi yang tertunda untuk segera dikembalikan pada awal ALTER DATABASEtransaksi, sebagai lawan WITH ROLLBACK X SECONDSyang menunggu transaksi selesai sebelum memaksa mereka untuk kembalikan atau menunggu tanpa batas waktu hingga tidak ada transaksi yang tertunda (yang saya yakini merupakan default tetapi sepertinya tidak dapat ditemukan dalam dokumen saat ini). Ini sama dengan "hentikan semua yang Anda lakukan sekarang dan lakukan ini."
Bacon Bits
39

SQL Server 2012:

klik kanan pada DB > Properties > Options > [Scroll down] State > RestrictAccess > select Multi_userdan klik OK.

Voila!

Div2504
sumber
5
Tidak juga, inilah yang saya terima ketika mencoba solusi Anda: / "Basis data 'XXX' sudah terbuka dan hanya dapat memiliki satu pengguna. (Microsoft SQL Server, Kesalahan: 924)"
Krzysztof Wolny
1
Selain itu dikonfirmasi dalam SQL 2008R2.
codo-sapien
Jawaban terbaik, bekerja bahkan dalam kasus di mana Anda tidak memiliki izin untuk menggunakan pernyataan KILL
Marco Marsala
22

Saya memiliki masalah yang sama dan diperbaiki dengan langkah-langkah berikut - referensi: http://giladka8.blogspot.com.au/2011/11/database-is-in-single-user-mode-and.html

use master
GO

select 
    d.name, 
    d.dbid, 
    spid, 
    login_time, 
    nt_domain, 
    nt_username, 
    loginame
from sysprocesses p 
    inner join sysdatabases d 
        on p.dbid = d.dbid
where d.name = 'dbname'
GO

kill 56 --=> kill the number in spid field
GO

exec sp_dboption 'dbname', 'single user', 'FALSE'
GO
Azadeh Khojandi
sumber
13

Ini bekerja dengan baik untuk saya.

Langkah 1. Klik kanan pada mesin basis data, klik pada monitor aktivitas dan lihat proses mana yang memiliki koneksi. Bunuh pengguna tertentu itu dan jalankan kueri Segera.

Langkah 2.

USE [master];
GO
ALTER DATABASE [YourDatabaseNameHere] SET MULTI_USER WITH NO_WAIT;
GO  

dan menyegarkan basis data.

sunil guragol
sumber
9

Saya benar-benar memiliki masalah di mana db saya cukup banyak terkunci oleh proses dan kondisi balapan dengan mereka, pada saat saya mendapatkan satu perintah dieksekusi segar dan mereka sudah terkunci lagi ... Saya harus menjalankan perintah berikut ini kembali ke belakang di SSMS dan membuat saya offline dan dari sana saya melakukan restore dan kembali online, dua pertanyaan di mana:

Berlari pertama:

USE master
GO

DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'
FROM master..sysprocesses 
WHERE dbid = db_id('<yourDbName>')

EXEC(@kill);

Kemudian segera setelah (di jendela permintaan kedua):

USE master ALTER DATABASE <yourDbName> SET OFFLINE WITH ROLLBACK IMMEDIATE

Melakukan apa yang saya butuhkan dan kemudian membawanya kembali online. Terima kasih untuk semua yang menulis artikel ini untuk saya gabungkan dan selesaikan masalah saya.

Shane G.
sumber
7

Mungkin yang terbaik adalah masuk ke server secara langsung daripada menggunakan SQL Management Studio

Pastikan akun yang Anda masuk sebagai dbowner untuk database yang ingin Anda setel ke MULTI_USER. Login sebagai sa (menggunakan otentikasi server SQL) jika Anda bisa

Jika basis data Anda digunakan oleh IIS, hentikan situs web dan kumpulan aplikasi yang menggunakannya - ini mungkin proses yang terhubung dan memblokir Anda dari pengaturan ke MULTI_USER

USE MASTER
GO

-- see if any process are using *your* database specifically

SELECT * from master.sys.sysprocesses
WHERE spid > 50 -- process spids < 50 are reserved by SQL - we're not interested in these
AND dbid=DB_ID ('YourDbNameHere')

-- if so, kill the process:

KILL n -- where 'n' is the 'spid' of the connected process as identified using query above

-- setting database to read only isn't generally necessary, but may help:

ALTER DATABASE YourDbNameHere
SET READ_ONLY;
GO

-- should work now:

ALTER DATABASE Appswiz SET MULTI_USER WITH ROLLBACK IMMEDIATE

Rujuk di sini jika Anda masih mengalami masalah:

http://www.sqlservercentral.com/blogs/pearlknows/2014/04/07/help-im-stuck-in-single-user-mode-and-can-t-get-out/

SEBAGAI ALTERNATIF TERAKHIR - Jika Anda sudah mencoba semuanya di atas dan Anda mulai putus asa, Anda bisa mencoba menghentikan contoh SQL server dan memulainya lagi

Chris Halcrow
sumber
5

Saya baru saja memperbaiki menggunakan langkah-langkah berikut, Ini dapat membantu Anda.

Langkah 1

klik kanan pada database pengguna tunggal


Langkah 2

luring


Langkah: 3

Putuskan koneksi dan luring


Langkah: 4

Ambil online


Langkah: 5

Kemudian jalankan query berikut.

ALTER DATABASE YourDBName
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO

Nikmati...!

Rikin Patel
sumber
2

Kode di bawah ini berfungsi untuk saya ketika saya tidak tahu SPID spesifik yang digunakan untuk berubah ke singleusermode.

use master
GO

select 
    d.name, 
    d.dbid, 
    spid, 
    login_time, 
    nt_domain, 
    nt_username, 
    loginame
from sysprocesses p 
    inner join sysdatabases d 
        on p.dbid = d.dbid
where d.name = 'dbname'
GO

kill 52 -- kill the number in spid field
GO

exec sp_dboption 'dbname', 'single user', 'FALSE'
GO
Jaypal Reddy
sumber
1
  1. Mencoba semuanya tidak berhasil
  2. Login ke server itu dari jarak jauh karena kita akan mematikan semua koneksi
  3. jalankan kode di bawah ini lebih dari sekali hingga kembali selesai dan tidak ada lagi tes "proses pembunuhan"
  4. aktifkan kembali menggunakan kode di bawah kode di bawah ini

gunakan master GO mendeklarasikan @sql sebagai varchar (20), @spid as int

pilih @spid = min (spid) dari master..sysprocesses di mana dbid = db_id ('DB_NAME') dan spid! = @@ spid

sementara (@spid bukan nol) mulai cetak 'Proses pembunuhan' + cast (@spid as varchar) + '...' set @sql = 'kill' + cast (@spid as varchar) exec (@sql)

select 
    @spid = min(spid)  
from 
    master..sysprocesses  
where 
    dbid = db_id('DB_NAME') 
    and spid != @@spid end

kemudian membawanya kembali hidup-hidup

ALTER DATABASE DB_NAME SET MULTI_USER; PERGILAH

Bishoy Hanna
sumber
1

Ini bekerja dengan baik untuk saya

  1. Ambil cadangan
  2. Buat database baru dan pulihkan cadangan ke sana
  3. Kemudian Properties> Options> [Scroll down] State> RestrictAccess> pilih Multi_user dan klik OK
  4. Hapus database lama

Semoga ini berhasil untuk semua. Terima kasih Ramesh Kumar

Ramesh Kumar
sumber
1

Jika hal di atas tidak berhasil, cari nama login dari spid dan nonaktifkan di Keamanan - Login

Aileen Gregg
sumber
1

Anda tidak dapat melakukan itu karena database dalam mode tunggal. Di atas baik-baik saja tetapi Anda harus tahu bahwa: ketika Anda membuka studio manajemen sql tidak tahu ada pengguna di database tetapi ketika Anda mengklik database itu menganggap Anda pengguna tunggal dan perintah Anda tidak berfungsi. Lakukan saja: Tutup studio manajemen dan buka kembali. jendela permintaan baru tanpa memilih basis data apa pun, tulis skrip perintah.

USE [master];
GO
ALTER DATABASE [tuncayoto] SET MULTI_USER WITH NO_WAIT;
GO 

membuat f5 wolla semuanya baik-baik saja!

Hamit YILDIRIM
sumber
0

Saya telah memecahkan masalah dengan mudah

  1. Klik kanan pada nama database, ganti nama itu

  2. Setelah berubah, klik kanan pada nama database -> properties -> options -> pergi ke bagian bawah bergulir RestrictAccess (SINGLE_USER ke MULTI_USER)

  3. Sekarang lagi Anda dapat mengubah nama basis data sebagai nama lama Anda.

Vamsi
sumber
0

Pada lebih dari 3 kesempatan bekerja dengan SQL Server 2014, saya memiliki konversi basis data ke mode Pengguna Tunggal tanpa saya mengubah apa pun. Itu pasti terjadi selama pembuatan database entah bagaimana. Semua metode di atas tidak pernah berhasil karena saya selalu menerima kesalahan bahwa database berada dalam mode pengguna tunggal dan tidak dapat terhubung.

Satu-satunya hal yang saya harus bekerja adalah me-restart SQL Server Windows Service. Itu memungkinkan saya untuk terhubung ke database dan membuat perubahan yang diperlukan atau menghapus database dan memulai kembali.

epak96
sumber
0

cukup buka properti database dan ubah mode SINGLE USER ke MULTI USER

masukkan deskripsi gambar di sini

CATATAN: jika tidak berfungsi untuk Anda maka ambil cadangan Db dan pulihkan kembali dan lakukan metode di atas lagi

* Tunggal = SINGLE_USER

Multipel = MULTI_USER

Terbatas = RESTRICTED_USER

Hassan Saeed
sumber
Bagaimana ini berbeda dari yang digunakan OP permintaan?
Squazz
ya keduanya akan bekerja sama, ini sama seperti daripada menggunakan CREATE Table query kami menggunakan sql server GUI Table Designer untuk membuat Table, BTS keduanya akan bekerja sama, satu adalah metode kueri dan lainnya adalah metode GUI. gunakan apa yang kamu suka.
Hassan Saeed
OP jelas menyatakan bahwa dia permintaan menghasilkan kesalahan. Seperti yang Anda katakan ini adalah hal yang persis sama dengan menggunakan kueri yang tidak Anda berikan jawaban sama sekali, Anda hanya mengacaukan dan menambah banyak jawaban yang salah di sini
Squazz
0

Setelah masuk ke mode Pengguna Tunggal, klien hanya dapat membuat SATU koneksi dengan SQL Server, ingat bahwa "Object Explorer" mengambil koneksi (terpisah), jadi jika Anda mencoba menjalankan pernyataan Multi-Pengguna dalam kueri jendela, Anda akan mendapatkan kesalahan bahwa dalam mode Pengguna Tunggal Anda tidak dapat membuat koneksi lain.

Bagi saya ini bukan masalah, dalam kasus saya, ada beberapa proses otomatis yang secara terus-menerus (dalam setiap beberapa detik) membangun koneksi, jadi segera setelah saya mengambil DB ke mode Pengguna Tunggal dan memutus diri saya, salah satu dari proses membuat / menduduki koneksi (sebelum saya bisa memulai operasi Restore). Segera setelah saya membunuh koneksi itu - mereka akan terhubung kembali dan ketika saya menjalankan perintah Restore, saya akan mendapatkan kesalahan bahwa koneksi sudah terisi.

Untuk menyelesaikan ini saya harus menulis killpernyataan, mengubah User-Modepernyataan danRestore operasi semua dalam satu jendela permintaan dan ketika saya menjalankan semuanya dalam satu waktu, voila !!! itu berhasil.

Semoga ini bisa membantu orang lain.

Eddie Kumar
sumber
0

Saya mengalami masalah dengan DB lokal.

Saya bisa menyelesaikan masalah ini dengan menghentikan SQL server, dan kemudian memulai SQL server, dan kemudian menggunakan SSMS UI untuk mengubah properti DB ke Multi_User.

DB beralih ke mode "Pengguna Tunggal" ketika saya mencoba mengembalikan cadangan. Saya belum membuat cadangan dari database target sebelum mencoba memulihkan (SQL 2017). ini akan membuat Anda setiap saat.

Hentikan SQL Server, Mulai SQL Server, lalu jalankan Script di atas atau gunakan UI.

Hanzolo
sumber
0

Saya mencari solusi untuk beberapa saat dan akhirnya menemukan solusi di bawah ini,

SSMS secara umum menggunakan beberapa koneksi ke database di belakang layar.

Anda harus mematikan koneksi ini sebelum mengubah mode akses. (Saya telah melakukannya dengan EXEC (@kill); dalam templat kode di bawah ini.)

Kemudian,

Jalankan SQL berikut untuk mengatur basis data dalam mode MULTI_USER.

USE master
GO
DECLARE @kill varchar(max) = '';
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(10), spid) + '; '
FROM master..sysprocesses 
WHERE spid > 50 AND dbid = DB_ID('<Your_DB_Name>')
EXEC(@kill);

GO
SET DEADLOCK_PRIORITY HIGH
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO

Untuk beralih kembali ke mode Pengguna Tunggal, Anda dapat menggunakan:

ALTER DATABASE [<Your_DB_Name>] SET SINGLE_USER

Ini seharusnya bekerja. Selamat coding !!

Terima kasih!!

Trilok Pathak
sumber