sql server সফটওয কিভাবে আপনি একটি SQL সার্ভার 2005 ডাটাবেসের সব বর্তমান সংযোগ হত্যা করবেন?




রিলেশনাল ডাটাবেজ কি (16)

ALTER DATABASE [Test]
SET OFFLINE WITH ROLLBACK IMMEDIATE

ALTER DATABASE [Test]
SET ONLINE

আমি একটি ডাটাবেস পুনঃনামকরণ করতে চাই, তবে ডাটাবেসটিতে 'একচেটিয়া লক পেতে পারে না এমন ত্রুটিটি পেতে থাকি, যা বোঝায় যে কিছু সংযোগ এখনও সক্রিয় আছে।

ডেটাবেসে সমস্ত সংযোগ আমি কিভাবে বানাতে পারি যাতে আমি এটির নামকরণ করতে পারি?


SQL ম্যানেজমেন্ট স্টুডিও এক্সপ্রেস ব্যবহার করে:

"এক্সিকিউটিভ মনিটরির" তে পরিচালিত অবজেক্ট এক্সপ্লোরার ট্রিতে ড্রিল ডাউন করুন (যদি আপনি সেখানে এটি খুঁজে পান না তবে ডাটাবেস সার্ভারে ডান ক্লিক করুন এবং "কার্যকলাপ মনিটর" নির্বাচন করুন)। কার্যকলাপ মনিটর খোলা, আপনি সব প্রক্রিয়া তথ্য দেখতে পারেন। আপনার আগ্রহের ডেটাবেসের জন্য আপনি লোকেদের খুঁজে পেতে সক্ষম হবেন এবং সেই লকগুলি মারতে পারবেন, যা সংযোগটিকেও হত্যা করবে।

আপনি যে পরে নামকরণ করতে সক্ষম হওয়া উচিত।


একটি ডাটাবেস সব সক্রিয় সংযোগগুলো দেখুন দেখুন।

অ্যাডাম যে প্রস্তাবটি অনুসরণ করেছেন তা কার্যকরী করবে না কারণ যে সময় আপনি সক্রিয় সংযোগগুলির উপর লুপ করছেন সে সময় নতুন একটি প্রতিষ্ঠিত হতে পারে, এবং আপনি এটি মিস করবেন। আমি সংযুক্ত নিবন্ধটি নিম্নলিখিত পদ্ধতির ব্যবহার করে যা এই ত্রুটিহীনতাটি না করে:

-- set your current connection to use master otherwise you might get an error

use master
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

--do you stuff here 

ALTER DATABASE YourDatabase SET MULTI_USER

আপনি SP_Who কমান্ডটি ব্যবহার করতে পারেন এবং আপনার ডেটাবেস ব্যবহার করে এমন সমস্ত প্রক্রিয়া খুন করতে পারেন এবং তারপরে আপনার ডাটাবেসটির নামকরণ করতে পারেন।


ডাটাবেসের নামের উপর ডান ক্লিক করুন, সম্পত্তি উইন্ডো পেতে সম্পত্তি ক্লিক করুন, বিকল্প ট্যাব খুলুন এবং মাল্টি ব্যবহারকারীর থেকে একক ব্যবহারকারীর "অ্যাক্সেস সীমাবদ্ধ করুন" সম্পত্তিটি পরিবর্তন করুন। যখন আপনি ঠিক আছে বাটনে ক্লিক করেন, তখন এটি আপনাকে সমস্ত খোলা সংযোগ বন্ধ করতে অনুরোধ করবে, "হ্যাঁ" নির্বাচন করুন এবং আপনি ডাটাবেসটির নামকরণ করতে সেট করেছেন ....


যখন আমি ডাটাবেস পুনঃস্থাপন করার চেষ্টা করি তখন সাধারণত আমি সেই ত্রুটিটি চালাচ্ছি, আমি সাধারণত ম্যানেজমেন্ট স্টুডিওতে গাছের উপরের অংশে যান এবং ডান ক্লিক করে ডাটাবেস সার্ভারটি পুনরায় চালু করি (কারণ এটি একটি ডেভেলপমেন্ট মেশিনে থাকে, এটি উৎপাদন ক্ষেত্রে আদর্শ নয়) )। এই সব ডাটাবেস সংযোগ বন্ধ।


এটি আমার জন্য কাজ করে না (SQL2008 এন্টারপ্রাইজ), আমি কোন চলমান প্রসেস বা ব্যবহারকারীদের ডিবি সংযুক্ত ব্যবহারকারীদের দেখতে পারিনি। সার্ভারটি পুনরায় চালু করা (ম্যানেজমেন্ট স্টুডিওতে SQL সার্ভারে ডান ক্লিক করুন এবং পুনরায় শুরু করুন) আমাকে ডিবি পুনরুদ্ধার করার অনুমতি দেয়।


অফলাইনে যান একটু সময় নেয় এবং কখনও কখনও আমি তার সাথে কিছু সমস্যা অনুভব করি ..

আমার মতে সবচেয়ে কঠিন উপায়:

ডান ক্লিক ডিবি বিচ্ছিন্ন করুন -> কার্যসমূহ -> বিচ্ছিন্ন করুন ... চেক করুন "ড্রপ সংযোগগুলি" ঠিক আছে

Reattach ডান ক্লিক ডাটাবেস -> সংযুক্ত করুন .. যুক্ত করুন ... -> আপনার ডাটাবেস নির্বাচন করুন এবং আপনার পছন্দসই ডাটাবেসের নামের সাথে কলাম হিসাবে সংযুক্ত করুন। ঠিক আছে


এটা হত্যা, এবং আগুন দিয়ে এটি হত্যা:

USE master
go

DECLARE @dbname sysname
SET @dbname = 'yourdbname'

DECLARE @spid int
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname)
WHILE @spid IS NOT NULL
BEGIN
EXECUTE ('KILL ' + @spid)
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) AND spid > @spid
END

আমি SQL সার্ভার 2008 R2 ব্যবহার করছি, আমার ডিবি ইতোমধ্যে একক ব্যবহারকারীর জন্য সেট করা হয়েছে এবং একটি সংযোগ ছিল যা ডাটাবেসের যেকোনো ক্রিয়া সীমাবদ্ধ করেছিল। সুতরাং প্রস্তাবিত SQLMenace's সমাধান ত্রুটি সঙ্গে প্রতিক্রিয়া। এখানে আমার ক্ষেত্রে কাজ যে এক


এটা চেষ্টা কর:

ALTER DATABASE [DATABASE_NAME]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE

আরেকটি "আগুন দিয়ে এটি হত্যা করুন" পদ্ধতিটি কেবল MSSQLSERVER পরিষেবাটিকে পুনরায় চালু করতে হয়। আমি কমান্ড লাইন থেকে জিনিস করতে চান। এটি সিএমডি ঠিকভাবে পেস্ট করবে: নেট বন্ধ করুন MSSQLSERVER & নেট শুরু করুন MSSQLSERVER

অথবা "services.msc" খুলুন এবং "SQL সার্ভার (MSSQLSERVER)" খুঁজে বের করুন এবং ডান-ক্লিক করুন, "পুনঃসূচনা করুন" নির্বাচন করুন।

এই "নিশ্চিতভাবে, নিশ্চিতভাবে" যে উদাহরণে চলমান সমস্ত ডাটাবেস সমস্ত সংযোগ হত্যা করবে।

(আমি সার্ভার / ডাটাবেস কনফিগারেশন পরিবর্তন এবং পরিবর্তন যে অনেক পন্থা চেয়ে ভাল পছন্দ)


আমি সবসময় ব্যবহার করেছি:


ALTER DATABASE DB_NAME SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO 
SP_RENAMEDB 'DB_NAME','DB_NAME_NEW'
Go 
ALTER DATABASE DB_NAME_NEW  SET MULTI_USER -- set back to multi user 
GO 

বস্তু এক্সপ্লোরার উপর এমএস এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে, ডান ডাটাবেসের উপর ক্লিক করুন। প্রসঙ্গ মেনুতে 'কার্যগুলি>> অফলাইনে যান' নির্বাচন করে অনুসরণ করে।


এই কাজটি সম্পন্ন করার জন্য স্ক্রিপ্টটি, 'DB_NAME' এর সাথে সমস্ত সংযোগ খোলার জন্য ডাটাবেসের সাথে প্রতিস্থাপন করুন:

USE master
GO

SET NOCOUNT ON
DECLARE @DBName varchar(50)
DECLARE @spidstr varchar(8000)
DECLARE @ConnKilled smallint
SET @ConnKilled=0
SET @spidstr = ''

Set @DBName = 'DB_NAME'
IF db_id(@DBName) < 4
BEGIN
PRINT 'Connections to system databases cannot be killed'
RETURN
END
SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; '
FROM master..sysprocesses WHERE dbid=db_id(@DBName)

IF LEN(@spidstr) > 0
BEGIN
EXEC(@spidstr)
SELECT @ConnKilled = COUNT(1)
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
END

Select 'Kill '+ CAST(p.spid AS VARCHAR)KillCommand into #temp
from master.dbo.sysprocesses p (nolock)
join master..sysdatabases d (nolock) on p.dbid = d.dbid
Where d.[name] = 'your db name'

Declare @query nvarchar(max)
--Select * from #temp
Select @query =STUFF((                              
            select '  ' + KillCommand from #temp
            FOR XML PATH('')),1,1,'') 
Execute sp_executesql @query 
Drop table #temp

'মাস্টার' ডাটাবেসটি ব্যবহার করুন এবং এই প্রশ্নের চালান, এটি আপনার ডেটাবেস থেকে সমস্ত সক্রিয় সংযোগগুলিকে হত্যা করবে।





sql-server-2005