Komunikat o błędzie po uruchomieniu dowolnego polecenia DBCC Sprawdź w programie SQL Server: "bazy danych może nie być zablokowana do wykonania tej operacji"

Dotyczy: Microsoft SQL Server 2005 Developer EditionMicrosoft SQL Server 2005 Enterprise EditionMicrosoft SQL Server 2005 Enterprise X64 Edition

Nr błędu: 489609 (SQLBUDT)

Objawy


W Microsoft SQL Server może pojawić się komunikat o błędzie po uruchomieniu dowolnego z poniższych poleceń DBCC:
  • POLECENIE DBCC CHECKDB
  • LS
  • DBCC CHECKALLOC
  • POLECENIE DBCC CHECKCATALOG
  • DBCC CHECKFILEGROUP
Komunikat o błędzie zawiera następujący tekst:
Msg 5030, poziom: 16, stan 12 linia 1 bazy danych może nie być zablokowana do wykonania tej operacji.
Msg 7926, poziom: 16, stan: 1, wiersz 1
Instrukcja wyboru przerwane. Nie można sprawdzić bazy danych, ponieważ nie można utworzyć migawki bazy danych i nie można zablokować bazy danych lub tabeli. Zobacz Books Online, aby uzyskać szczegółowe informacje, kiedy jest to zachowanie oczekiwane i jakie obejścia istniejących. Zobacz też poprzednie błędy szczegółowe.

Jeśli zaplanowano zadania planu konserwacji, które wykonują testy integralności bazy danych, komunikat o błędzie podobny do następującego może być zapisane do pliku dziennika dla odpowiedniego planu:

Wersja narzędzia (Unicode) konserwacja serwera programu Microsoft(R) 9.0.2047
Na "nazwa_komputera" został wygenerowany raport.
Plan konserwacji: PlanForReadOnlyDb
Czas trwania: 00:00:52
Stan: Ostrzeżenie: jedno lub więcej zadań nie powiodło się...
Szczegóły:
Sprawdź integralność bazy danych zadań (nazwa_komputera)
Sprawdź integralność bazy danych na nazwa_komputera
Bazy danych: AdventureWorks, msdb, PassDb, sprzedaży, test1 Dołącz indeksów
Uruchamianie zadania:
Data i godzina.
Zakończenie zadania:
Data i godzina.
Wykonywanie kwerendy "DBCC CHECKDB z NO_INFOMSGS failed:(-1073548784)
"nie powiodło się z powodu następującego błędu:"bazy danych może nie być zablokowana do wykonania tej operacji. Instrukcja wyboru przerwane. Nie można sprawdzić bazy danych, ponieważ nie można utworzyć migawki bazy danych i nie można zablokować bazy danych lub tabeli. Zobacz Books Online, aby uzyskać szczegółowe informacje, kiedy jest to zachowanie oczekiwane i jakie obejścia istniejących. "Zobacz też poprzednie błędy szczegółowe." Przyczyny możliwego niepowodzenia: problemy z kwerendy, nie jest poprawnie ustawione prawa własności "ResultSet", parametry ustawiony niepoprawnie lub połączenie nie zostało ustanowione poprawnie.

Przyczyna


Ten problem występuje, jeśli są spełnione następujące warunki:
  • Co najmniej jedno inne połączenie korzysta z bazy danych, w stosunku do którego zostanie uruchomione polecenie DBCC sprawdzić.
  • Baza danych zawiera co najmniej jedna grupa plików, który jest oznaczony jako tylko do odczytu.
Począwszy od programu SQL Server 2005, polecenia DBCC sprawdzić, tworzyć i używać migawka wewnętrznej bazy danych do celów spójności, gdy polecenie wykonuje wszelkie kontrole. Jeśli istnieje grupa plików tylko do odczytu w bazie danych, migawki wewnętrznej bazy danych nie jest tworzony. Aby kontynuować, do przeprowadzenia kontroli, polecenie DBCC Sprawdź próbuje uzyskać blokada bazy danych EX. Jeśli inni użytkownicy są podłączone do tej bazy danych, to próba uzyskania blokady EX nie powiedzie się. W związku z tym zostanie wyświetlony komunikat o błędzie.

Rozwiązanie


Aby rozwiązać ten problem, wykonaj następujące kroki zamiast uruchamiania polecenia DBCC Sprawdź w bazie danych:
  1. Utwórz migawkę bazy danych, bazy danych, dla którego chcesz przeprowadzać kontrole. Aby uzyskać więcej informacji dotyczących sposobu tworzenia migawki bazy danych zobacz temat "Tworzenie migawki bazy danych (Transact-SQL)" w dokumentacji SQL Server Books Online.
  2. Uruchom polecenie DBCC sprawdzić przed migawki bazy danych.
  3. Upuszczanie migawka bazy danych po wykonaniu polecenia DBCC sprawdzić.

Stan


Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.

Więcej informacji


Aby uzyskać więcej informacji o używaniu polecenia DBCC sprawdzić migawki wewnętrznej bazy danych zobacz temat "DBCC (Transact-SQL)" w temacie "DBCC wewnętrznego użycia migawkę bazy danych" w dokumentacji SQL Server 2005 Books Online.

Aby odtworzyć ten problem, uruchom następujące polecenia w programie SQL Server:
-- Open a new query that is named conn1, and then create a new database.
CREATE DATABASE DBTESTE3
GO
-- Add a new file group.
ALTER DATABASE DBTESTE3 ADD FILEGROUP FGTESTE
GO
-- Add a file to the new file group.
ALTER DATABASE DBTESTE3 ADD FILE (NAME=DBTESTE3_Data2, FILENAME='C:\DBTESTE3_Data2.ndf')
TO FILEGROUP FGTESTE
GO
-- Change the file group to read-only.
ALTER DATABASE DBTESTE3 MODIFY FILEGROUP FGTESTE READONLY
GO

-- Run the DBCC CHECK command in the conn1 query.
DBCC CHECKDB (DBTESTE3)

-- The DBCC CHECK command runs correctly. However, you may receive the following message:
"DBCC CHECKDB will not check SQL Server catalog or Service Broker consistency because a database snapshot could not be created or because WITH TABLOCK was specified."

-- Open a new query window that is named conn2, and then set the database as DBTESTE3. This action opens a connection to the DBTESTE3 database.

-- Return to the conn1 query, and run the DBCC command again.

DBCC CHECKDB (DBTESTE3)
-- Notice the error message that is mentioned in the "Symptoms" section.