Zdarza się, że administrator SQL potrzebuje uzyskać wyłączny dostęp do bazy w MS SQL. Opcja ta jest przydatna szczególnie gdy robi się backup lub restore.
Wyłączność do bazy danych można uzyskać poprzez zakończenie w SQL Enterprise Manager wszystkich procesów użytkowników używających danej bazy, widocznych w Process Info.
Nie odbierze im to jednak możliwości ponownego podłączenia się do bazy. Więc jak można zablokować dostęp do danej bazy użytkownikom?
Najprostszy i najbardziej niezawodny sposób to przełączenie bazy w tryb jednego użytkownika używając komendy ALTER DATABASE uruchamianą z poziomu SQL Query Analyzer. Polecenie ALTER DATABASE daje możliwość wyboru jednej z trzech opcji zakończenia wykonywanych właśnie operacji:
- Natychmiastowy rollback otwartych transakcji bez czekania na ich zakończenie
ALTER DATABASE [nazwa_bazy] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
- Zakończenie i rollback otwartych transakcji po czasie XX wyrażonym w sekundach
ALTER DATABASE [nazwa_bazy] SET SINGLE_USER WITH ROLLBACK AFTER XX
- Przełączenie bazy danych w tryb pojedynczego użytkownika po tym jak wszystkie transakcje się wykonają. Jeśli po upływie określonego czasu transakcje dalej trwają polecenie zwróci błąd i nie przełączy bazy w tryb wyłączności.
ALTER DATABASE [nazwa_bazy] SET SINGLE_USER WITH NO_WAIT
Opcja ostatnia jest najbezpieczniejsza z punktu systemu lecz nie powiedzie się dopóki wszystkie operacje się nie zakończą.
Należy tez zwrócić uwagę, że w przypadku długo trwających transakcji rollback może zająć odpowiednio dużo czasu.
Zamiast używania SINGLE_USER można też użyć przełącznika RESTRICTED_USER. Spowoduje to, że tylko użytkownicy zdefiniowani w bazie jako db_owner, dbcreator i sysadmin będą mogli uzyskać do niej dostęp.
Po wykonaniu czynności wymagających trybu wyłączności (np. backupu) bazę można przełączyć w tryb wielu użytkowników poleceniem:
ALTER DATABASE [nazwa_bazy] SET MULTI_USER
Komentarz