ডাটাবেসটি ফেলে দেওয়া যায় না কারণ এটি বর্তমানে ব্যবহৃত রয়েছে


91

আমি একটি ডাটাবেস ড্রপ করতে চাই। আমি নিম্নলিখিত কোড ব্যবহার করেছি, কিন্তু কোন ফলসই হয়নি।

public void DropDataBase(string DBName,SqlConnection scon)
{
    try
    {
        SqlConnection.ClearAllPools();
        SqlCommand cmd = new SqlCommand("ALTER DATABASE " + DBName + "     SET SINGLE_USER     WITH ROLLBACK IMMEDIATE", scon);
        cmd.CommandType = CommandType.Text;
        scon.Open();
        cmd.ExecuteNonQuery();
        scon.Close();

        SqlCommand cmddrpdb = new SqlCommand("drop database " + DBName + "", scon);
        cmddrpdb.CommandType = CommandType.Text;
        scon.Open();
        cmddrpdb.ExecuteNonQuery();
        scon.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show("DropDataBase : " +ex.Message);
    }
}

ডাটাবেস ড্রপ করতে না পারায় আমি ত্রুটি পাচ্ছি কারণ বর্তমানে এটি ব্যবহৃত হচ্ছে । উপরে বর্ণিত ইস্যুতে আমাকে সাহায্য করুন।

উত্তর:


55

কেউ ডাটাবেসের সাথে সংযুক্ত আছেন। অন্য ডাটাবেসে স্যুইচ করার চেষ্টা করুন এবং তারপরে, এটিকে ফেলে দিন:

চেষ্টা করুন

SP_WHO কে সংযুক্ত হয়েছে তা দেখতে

এবং KILLযদি প্রয়োজন হয়


15
এসকিউএল সার্ভারের জন্য এমজিএমটি। স্টুডিও: ডান ক্লিক ডাটাবেস: বৈশিষ্ট্য -> বিকল্প -> অ্যাক্সেস সীমাবদ্ধ করুন: "একক ব্যবহারকারী" এ সেট করুন এবং তারপরে ড্রপটি সম্পাদন করুন।
এসএলফ্রেড

invoke-sqlcmd -ServerInstance লোকালহোস্ট 'এক্সিকিউট এসপি_হো' | যেখানে-অবজেক্ট {$ _। dbname -eq 'myDbName' nothing কিছুই দেয় না। তবুও এটি অভিযোগ না হওয়া পর্যন্ত। এটি আসলে কাজ করে বলে মনে হচ্ছে না।
Pxtl

4
@ এসএলফার্ড আপনার সকলের মধ্যে সহজতম। উত্তরগুলির একটি হওয়া উচিত ছিল। ধন্যবাদ
অমিত রায়

114

একটি ডাটাবেস ড্রপ করার আগে, আপনি প্রথমে সেই ডাটাবেসের সাথে সংযোগটি ফেলে দিন।

আমি http://www.kodyaz.com/articles/kill-all-processes-of-a-datedia.aspx এ একটি সমাধান পেয়েছি

DECLARE @DatabaseName nvarchar(50)
SET @DatabaseName = N'YOUR_DABASE_NAME'

DECLARE @SQL varchar(max)

SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';'
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId

--SELECT @SQL 
EXEC(@SQL)

4
+1 আমি অবাক হয়েছি কেন আপনি এটি আগে পান নি, এটি খুব সহজ উত্তর। ধন্যবাদ
মেহেদী লামরানী

এটি কি অ-ব্যবহারকারীর প্রক্রিয়াগুলিতেও আনবে?
ভিক্ষু

আমার জন্য আমি ত্রুটি পেয়েছি "ব্যবহারকারীর লেনদেনের মধ্যেই কিল কমান্ড ব্যবহার করা যায় না।"
মিত্র

যদি লেনদেন সমস্যা তৈরি করে তবে লেনদেনটি ব্যবহার করবেন না।
ডন রোলিং

এফওয়াইআই, আপনি যা বলেছিলেন তা করায় এটি মনে হচ্ছে তবে আমার পক্ষে সমস্যাটি সমাধান হচ্ছে না।
ডন রোলিং

44

এসকিউএল সার্ভারের জন্য এমজিএমটি। স্টুডিও:

ডান ক্লিক ডাটাবেস: বৈশিষ্ট্য -> বিকল্প -> অ্যাক্সেস সীমাবদ্ধ করুন: "একক ব্যবহারকারী" এ সেট করুন এবং তারপরে ড্রপটি সম্পাদন করুন


আপনি যদি ম্যানেজমেন্ট স্টুডিও থেকে সরাসরি কোনও ডাটাবেস মুছতে চান তবে এটি সর্বাধিক স্বজ্ঞাত সমাধান। ধন্যবাদ.
আন্দ্রে পেনা

আমি এটি করেছি, এবং তারপর ব্যবহৃত drop database myDatabase। এটি সমস্যার সমাধান করেনি। একই ত্রুটি ( ... it is currently is use) খুশি।
শাহরিয়ার সালজুফি

41

এটি অনেক দেরি হয়ে গেছে তবে ভবিষ্যতের ব্যবহারকারীদের জন্য এটি কার্যকর হতে পারে।

আপনি ডাটাবেস ক্যোয়ারি ড্রপ করার আগে নীচের ক্যোয়ারীটি ব্যবহার করতে পারেন:

 alter database [MyDatbase] set single_user with rollback immediate

 drop database [MyDatabase]

এটা কাজ করবে। আপনি উল্লেখ করতে পারেন

স্ক্যালি স্ক্রিপ্টে আমি কীভাবে "বিদ্যমান সংযোগগুলি বন্ধ করুন" নির্দিষ্ট করব

আমি আশা করি এটা তোমাকে সাহায্য করবে :)


4
use master go আপনি যদি বর্তমানে [মাইডাটাবেস] নির্বাচন করেন তবে এটি শুরুতেও যোগ করতে ভুলবেন না
চুং বিই

4
@ ThànhChungBùi আপনি আমার সমস্যার সমাধানের দিকে কী লক্ষ্য করেছেন। এটি উত্তরের অন্তর্ভুক্ত করা উচিত। ধন্যবাদ.
শাহরিয়ার সালজুফি

31

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও 2016 এ নিম্নলিখিতগুলি সম্পাদন করুন:

  • ডাটাবেসে ডান ক্লিক করুন

  • মুছুন ক্লিক করুন

  • বিদ্যমান সংযোগগুলি বন্ধ করে দেখুন

  • মুছুন অপারেশন সম্পাদন করুন


22
select * from sys.sysprocesses where dbid = DB_ID('Test')

(আপনি যে ডাটাবেসটি ফেলে দেওয়ার চেষ্টা করছেন তার নামের সাথে 'পরীক্ষা' প্রতিস্থাপন করুন) এটি আপনাকে জানাবে যে কোন প্রক্রিয়া এটি ব্যবহার করছে।

আপনি এখনও ড্রপ জোর করতে চাইলে, চূড়ান্ত পদ্ধতির হয়:

USE master;
GO
ALTER DATABASE Test 
SET SINGLE_USER 
WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE Test;

আশাকরি এটা সাহায্য করবে !


4
আপনি স্যার আমার দিন বাঁচালেন;) উপরের কিছুই আমার ক্ষেত্রে কাজ করেনি, আপনার পরামর্শ বর্ণিত হিসাবে কাজ করেছে!
দিমিত্রি

8

প্রথমে আপনার ডেটা বেসটিকে অফলাইনে তৈরি করুন এর পরে এটি আলাদা করুন

Use Master
GO
ALTER DATABASE dbname SET OFFLINE
GO
EXEC sp_detach_db 'dbname', 'true'

আমি মনে করি না অ্যাকশনটি ডেটাবেস মুছে ফেলে।
snp.it

4
ডাটাবেস আলাদা করার পরে এখন এটি এই ক্যোয়ারির সাথে মুছে ফেলার জন্য প্রস্তুত। DROP DATABASE dbname;
হিদায়াত আরঘান্ডবী

7

যদি আপনার এসকিউএল ম্যানেজমেন্ট স্টুডিওতে ডেটাবেস ফেলে দেওয়া হয় এবং আপনি বার্তাটি পান তবে ভুলে যাবেন না যে আপনি মাস্টারকে নির্বাচিত ডাটাবেস হিসাবে ব্যবহার করেছেন অন্যথায় আপনার প্রশ্নটিও ডাটাবেসের সাথে একটি সংযোগ।

USE Master;
GO
DROP DATABASE AdventureWorks;
GO

আমি আমার ক্ষেত্রে ডিবি II এর সাথে আমার 1 টিরও বেশি সংযোগ ফেলে দিতে চেয়েছিল।
অ্যালেক্সমেলউ

3

একটি নিষ্ঠুর শক্তি কাজ হতে পারে:

  1. এসকিউএল সার্ভার পরিষেবা বন্ধ করুন।

  2. সংশ্লিষ্ট .mdf এবং .ldf ফাইলগুলি মুছুন।

  3. এসকিউএল সার্ভার পরিষেবা শুরু করুন।

  4. এসএসএমএসের সাথে সংযুক্ত হয়ে ডেটাবেস মুছুন।


এটা আমার জন্য কাজ করে. ধন্যবাদ আমি মনে করি সমস্যাটি একটি বাহ্যিক হার্ড ড্রাইভ। আমি লোকাল ডিস্কে ফাইলটি স্যুইচ করেছি। আপনার সমাধানের জন্য ধন্যবাদ।
ইনফজিরো

2

আমি কল করতে চেয়েছিলাম যে আমি একটি স্ক্রিপ্ট ব্যবহার করেছি যা নীচের দুটি উত্তর থেকে প্রাপ্ত।

@ হিটেশ মিস্ত্রি এবং @ ইউনুলেডবয়কে প্রপস

DECLARE @DatabaseName nvarchar(50)
SET @DatabaseName = N'[[[DatabaseName]]]'

DECLARE @SQL varchar(max)

SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';'
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId

EXEC(@SQL)

alter database [[[DatabaseName]]] set single_user with rollback immediate

DROP DATABASE [[[DatabaseName]]]

2

প্রথমে সংযুক্ত ডাটাবেসগুলি পরীক্ষা করুন

SP_WHO

দ্বিতীয় আপনার ডাটাবেস সংযোগ বিচ্ছিন্ন করুন

DECLARE @DatabaseName nvarchar(50)
SET @DatabaseName = N'your_database_name'

DECLARE @SQL varchar(max)

SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';'
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId

--SELECT @SQL 
EXEC(@SQL)

এটি শেষ ড্রপ করুন

drop database your_database

1

এমএস এসকিউএল সার্ভার ২০০৮ ব্যবহার করে, বন্ধ সংযোগ বিকল্পগুলির সাথে ডিলিও ডায়ালগে, এটি উত্পন্ন স্ক্রিপ্ট, আমার ধারণা এটি সর্বোত্তম:

EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'YOUR_DATABASE_NAME'
GO
USE [master]
GO
ALTER DATABASE [YOUR_DATABASE_NAME] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
USE [master]
GO
/****** Object:  Database [YOUR_DATABASE_NAME]    Script Date: 01/08/2014 21:36:29 ******/
DROP DATABASE [YOUR_DATABASE_NAME]
GO

এটিই এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর স্ক্রিপ্টগুলি খুঁজে বের করে এবং আমার জন্য কী কাজ করে। কেবলমাত্র আমি আলাদাভাবে যা করেছি তা USE [master] IF EXISTS(SELECT * FROM sys.databases WHERE name = 'Database_Name') BEGIN -- your script here END
হ'ল সমস্তটির আবরণটি

1

কেবল একটি vb.net দিতে চেয়েছিলেন (রূপান্তর করতে চাইলে সি ভাষার সাথে ..) আমার একটি প্রোগ্রাম আনইনস্টল করার জন্য আমার একই রকম সমস্যা ছিল, ডিবি ছাড়ানো কিছুটা জটিল ছিল, হ্যাঁ ব্যবহারকারীরা এটি সার্ভারে ফেলে দিতে পারতেন এক্সপ্রেস ব্যবহার করে, তবে পরিষ্কার নয়, চারপাশের কয়েকটি চেহারা পরে একত্রে একটি নিখুঁত কোড পেয়েছে ...

    Sub DropMyDatabase()
    Dim Your_DB_To_Drop_Name As String = "YourDB"
    Dim Your_Connection_String_Here As String = "SERVER=MyServer;Integrated Security=True"
    Dim Conn As SqlConnection = New SqlConnection(Your_Connection_String_Here)

    Dim AlterStr As String = "ALTER DATABASE " & Your_DB_To_Drop_Name & " SET OFFLINE WITH ROLLBACK IMMEDIATE"
    Dim AlterCmd = New SqlCommand(AlterStr, Conn)

    Dim DropStr As String = "DROP DATABASE " & Your_DB_To_Drop_Name
    Dim DropCmd = New SqlCommand(DropStr, Conn)

    Try
        Conn.Open()
        AlterCmd.ExecuteNonQuery()
        DropCmd.ExecuteNonQuery()
        Conn.Close()

    Catch ex As Exception
        If (Conn.State = ConnectionState.Open) Then
            Conn.Close()
        End If
        MsgBox("Failed... Sorry!" & vbCrLf & vbCrLf & ex.Message)
    End Try
End Sub

আশা করি এটি এক্সচিকেনেক্স দেখতে যে কাউকে সহায়তা করবে

আপডেট করুন এখানে এই রূপান্তরকারীটি ব্যবহার করা হচ্ছে সি # সংস্করণ:

public void DropMyDatabase()
    {
        var Your_DB_To_Drop_Name = "YourDB";
        var Your_Connection_String_Here = "SERVER=MyServer;Integrated Security=True";
        var Conn = new SqlConnection(Your_Connection_String_Here);

        var AlterStr = "ALTER DATABASE " + Your_DB_To_Drop_Name + " SET OFFLINE WITH ROLLBACK IMMEDIATE";
        var AlterCmd = new SqlCommand(AlterStr, Conn);

        var DropStr = "DROP DATABASE " + Your_DB_To_Drop_Name;
        var DropCmd = new SqlCommand(DropStr, Conn);

        try
        {
            Conn.Open();
            AlterCmd.ExecuteNonQuery();
            DropCmd.ExecuteNonQuery();
            Conn.Close();

        }
        catch(Exception ex)
        {
            if((Conn.State == ConnectionState.Open))
            {
                Conn.Close();
            }
            Trace.WriteLine("Failed... Sorry!" + Environment.NewLine + ex.Message);
        }
    }

প্রশ্নটি একটি সি # প্রতিক্রিয়া প্রয়োজন, যেভাবে এটি ট্যাগ করা হয়।
ম্যাথিয়াস লাইককেগার্ড লরেঞ্জেন

@ ম্যাথিয়াসলাইক্কেগার্ডলরেঞ্জেন এখানে বেশ কয়েকটি ফ্রিওয়্যার অ্যাপ রয়েছে যা সমস্ত ভাষায় NET কোড অনুবাদ করতে পারে। এমনকি অনলাইন অ্যাপ্লিকেশন।
অগ্নিয়ান দিমিত্রভ

4
পয়েন্ট নেওয়া হয়েছে। আমি আমার ভোট পরিবর্তন করতে পারতাম, তবে এটি লক করা থাকায় আমি পারব না।
ম্যাথিয়াস লাইককেগার্ড লরেঞ্জেন

খারাপ আইডিএ! অফলাইন থাকাকালীন কোনও ডাটাবেস ফেলে দেওয়া ডাটাবেস ফাইলগুলি সরিয়ে ফেলবে না! এমনকি যদি এটি কোনও বিশেষ ক্ষেত্রে কার্যকর হতে পারে তবে এটি এমন কোনও ধরণ নয় যা আপনার অন্ধভাবে অনুসরণ করা উচিত। সমস্যাগুলি: ক) আপনার ডিস্কটি পূর্ণ হয়ে যায় এবং খ) একই শারীরিক ফাইলগুলি ব্যবহার করে ডাটাবেসটি পুনরায় তৈরি করার চেষ্টা করার সময় আপনি সমস্যার সমাধান করতে পারেন।
স্টিফান স্টেইনগার

1

কোনও ডাটাবেস চালু থাকলেও মুছে ফেলতে, আপনি এই ব্যাচ ফাইলটি ব্যবহার করতে পারেন

@echo off

set /p dbName= "Enter your database name to drop: " 

echo Setting to single-user mode
sqlcmd -Q "ALTER DATABASE [%dbName%] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE"

echo Dropping...
sqlcmd -Q "drop database %dbName%"

echo Completed.

pause

পর্দা


একক ব্যবহারকারী মোড সহ আইডিয়া এটি করার সবচেয়ে পরিষ্কার উপায় বলে মনে হচ্ছে।
Gucu112

0

আপনি বর্তমানে ব্যবহৃত একটি ডাটাবেস ড্রপ করতে পারবেন না তবে আপনি sp_detach_dbযদি ডাটাবেস ফাইলগুলি মোছা না করে সার্ভার থেকে কোনও ডাটাবেস সরাতে চান তবে আপনি সঞ্চিত পদ্ধতি ব্যবহার করতে পারেন ।


0

শুধু ডিবি নামকরণ (মুছে ফেলার জন্য) আমার জন্য কৌশলটি করেছে। এটি যে কোনও প্রক্রিয়াটি ডাটাবেস অ্যাক্সেস করছে তা বন্ধ করে দিয়েছে এবং তাই আমি ডাটাবেসটি ফেলে দিতে সক্ষম হয়েছি।


0

উপলভ্য ডাটাবেস বিভাগে যান এবং মাস্টার নির্বাচন করুন। তারপরে DROP DATABASE the_DB_name ব্যবহার করে দেখুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.