it-swarm.asia

كيف تطرد المستخدمين من قاعدة بيانات SQL Server 2008؟

نحتاج إلى إجراء استعادة ، ولا يمكننا ذلك لأن المستخدمين الآخرين متصلين. كنا نظن أننا قطعنا كل عملية ، ولكن على ما يبدو لا.

كيف يمكننا ، من Management Studio ، أن نطلق الجميع حتى نتمكن من عمل هذا النسخ الاحتياطي؟

22
Daniel Williams

هناك طريقتان للقيام بذلك:

  1. انقر بزر الماوس الأيمن على قاعدة البيانات في Object Explorer ، انتقل إلى المهام> فصل. حدد خانة الاختيار إسقاط الاتصالات.

  2. قم بتعيين قاعدة البيانات إلى وضع المستخدم المفرد كما هو موضح هنا :

    -- hit Ctrl+Shift+M in SSMS to fill in the template parameter
    USE master;
    GO
    
    ALTER DATABASE N'<Database Name, sysname,>'
    SET SINGLE_USER
    WITH ROLLBACK IMMEDIATE;
    GO
    
    ALTER DATABASE N'<Database Name, sysname,>'
    SET READ_ONLY;
    GO
    
    ALTER DATABASE N'<Database Name, sysname,>'
    SET MULTI_USER;
    GO
    
25
Wil

أستخدم دائمًا ما يلي:

USE master; -- get out of dbname myself
GO
-- kick all other users out:
ALTER DATABASE [dbname] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- prevent sessions from re-establishing connection:
ALTER DATABASE [dbname] SET OFFLINE;

في بعض الأحيان قد يستغرق هذا بعض الوقت ، وأحيانًا يتم حظره لأن أنت الشخص الذي يقوم بتشغيله ، و أنت لديك اتصال نشط بقاعدة البيانات . تحقق من نوافذ الاستعلام الأخرى التي قد يكون لها نفس سياق قاعدة البيانات - يمكن أن يشمل ذلك مربعات حوار مفتوحة ، و Object Explorer ، و IntelliSense ، ومهام طويلة الأمد ، وما إلى ذلك.

عندما انتهيت من إجراء التغييرات الخاصة بي على تكوين قاعدة البيانات تلك ، أنا ببساطة:

ALTER DATABASE [dbname] SET ONLINE;
ALTER DATABASE [dbname] SET MULTI_USER;

على الرغم من أنه في بعض الأحيان ، فإن الشيء الذي يجب أن أفعله لقاعدة البيانات هذه يتطلب أن تكون قاعدة البيانات متصلة بالإنترنت ، لذلك في بعض الأحيان يجب أن أتركها في وضع المستخدم الفردي والقيام بذلك:

ALTER DATABASE [dbname] SET ONLINE;
GO
USE [dbname];

يمكنني الآن إجراء التغييرات الخاصة بي ، وعندما أكون جاهزًا للمستخدمين الآخرين للاتصال ، ببساطة:

ALTER DATABASE [dbname] SET MULTI_USER;
44
Aaron Bertrand

عادةً ما أقوم بتعيين قاعدة البيانات في single_user ثم انتظر تأخيرًا ثم أعد تعيين قاعدة البيانات مرة أخرى على النحو التالي:

-- to kill all connections for particular db ... otherwise the restore will fail as exclusive lock cannot be obtained for the db being restored.

    alter database db_name
    set single_user with rollback immediate
    waitfor delay '00:00:05'  -- wait for 5 secs
    alter database db_name
    set multi_user
    restore database db_name from disk = 'D:\restore\db_name.bak'
    with replace, stats = 10, recovery -- if you want to recover your database online
    -- optional if you dont have the same directory/file structure
    move 'datafile logical name' to 'E:\data\physical_name.mdf',
    move 'logfile logical name' to 'F:\log\physical_name_log.ldf'
2
Kin Shah

لم يعمل أي من الخيارات أعلاه بالنسبة لي لأن الخادم تم إبرامه من خلال محاولات اتصال عن بعد متعددة.

عندما أغلقت منفذ قاعدة البيانات المحددة على جدار حماية النوافذ ، Alter العادي .. عمل تعيين Multi_User في المحاولة الأولى.

1
olafk