Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибки при DBCC CHECKDB  [new]
solaris24
Member

Откуда:
Сообщений: 9
Добрый день.
Столкнулся с проблемой, на одной из баз 1С. При выполнении DBCC CHECKDB, ловлю такие странные ошибки:

Msg 8921, Level 16, State 1, Line 1
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.


Possibly tempdb out of space or a system table is inconsistent - места полно. системные базы чекал, ошибок нет.
Базу бекапил и восстанавливал совсем на другой сервере MSSQL 2008 R2. Ошибки те же.

Бывает ещё такая ошибка:

Msg 5030, Level 16, State 12, Line 1
The database could not be exclusively locked to perform the operation.
Msg 7926, Level 16, State 1, Line 1
Check statement aborted. The database could not be checked as a database snapshot could not be created and the database or table could not be locked. See Books Online for details of when this behavior is expected and what workarounds exist. Also see previous errors for more details.


База в принципе рабочая. Но нельзя сделать чек и соответственно выгрузку средствами 1С, и это сильно меня тревожит.
Подскажите как решить проблему?
22 авг 14, 18:47    [16481762]     Ответить | Цитировать Сообщить модератору
 Re: Ошибки при DBCC CHECKDB  [new]
solaris24
Member

Откуда:
Сообщений: 9
Так же делал: DBCC CHECKDB ('base') WITH TABLOCK, ALL_ERRORMSGS, NO_INFOMSGS;
Ситуация не меняется.
22 авг 14, 18:48    [16481767]     Ответить | Цитировать Сообщить модератору
 Re: Ошибки при DBCC CHECKDB  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
solaris24,

А лечить то пробовали или только чекали?
22 авг 14, 18:55    [16481794]     Ответить | Цитировать Сообщить модератору
 Re: Ошибки при DBCC CHECKDB  [new]
solaris24
Member

Откуда:
Сообщений: 9
WarAnt
solaris24,

А лечить то пробовали или только чекали?


не совсем понял. как лечить?
22 авг 14, 18:59    [16481809]     Ответить | Цитировать Сообщить модератору
 Re: Ошибки при DBCC CHECKDB  [new]
aleks2
Guest
solaris24
WarAnt
solaris24,

А лечить то пробовали или только чекали?


не совсем понял. как лечить?


Проверять надо в эксклюзивном режиме

--1.
alter database Имярек set single_user;
go
-- 2.
а вот тут чекай
22 авг 14, 19:09    [16481831]     Ответить | Цитировать Сообщить модератору
 Re: Ошибки при DBCC CHECKDB  [new]
AntonS2
Member

Откуда: Kharkov
Сообщений: 117
Конечно я пробовал чекать и при single_user и даже переводил базу в EMERGENCY состояние, и чекал её:
DBCC CHECKDB('db_name', REPAIR_ALLOW_DATA_LOSS)
GO

но результат тот же.
22 авг 14, 20:42    [16482074]     Ответить | Цитировать Сообщить модератору
 Re: Ошибки при DBCC CHECKDB  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
AntonS2,

Место для роста tempdb должно быть достаточно.
Оценить сколько нужно: DBCC CHECKDB WITH ESTIMATEONLY
22 авг 14, 21:14    [16482146]     Ответить | Цитировать Сообщить модератору
 Re: Ошибки при DBCC CHECKDB  [new]
AntonS2
Member

Откуда: Kharkov
Сообщений: 117
Нашёл битую таблицу, которая всему виной: InfoRg8082. Это РегистрСведений.ГражданствоФизЛиц.
Но не могу её удалить или что либо сделать с ней.
Получаю ошибку:
Msg 608, Level 16, State 1, Line 2
No catalog entry found for partition ID 72057594426753024 in database 21. The metadata is inconsistent. Run DBCC CHECKDB to check for a metadata corruption.
22 авг 14, 22:27    [16482294]     Ответить | Цитировать Сообщить модератору
 Re: Ошибки при DBCC CHECKDB  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
AntonS2,

тыц
23 авг 14, 00:16    [16482534]     Ответить | Цитировать Сообщить модератору
 Re: Ошибки при DBCC CHECKDB  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
solaris24
Msg 8921, Level 16, State 1, Line 1
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.



Как уже написали, перед тем, как запускать прокерку, надо оценить место в tempd.

dbcc checkdb with estimateonly;
go


P. Randal (бывший разработчик dbcc checkdb) пишет, что в текущих релизах оценка сломана, кроме того очень жадно оценивает необходимое пространство в tempdb, вобщем может переоценить.

solaris24

Msg 7926, Level 16, State 1, Line 1
Check statement aborted. The database could not be checked as a database snapshot could not be created and the database or table could not be locked. See Books Online for details of when this behavior is expected and what workarounds exist. Also see previous errors for more details.



dbcc checkdb пытается создать консистентную вьюшку базы на момент начала проверки (так читатель dbcc checkdb не конфликтует транзакциями писателями базы). По умолчанию делает снапшот базы и хранит его в ntfs alternate streams там же где располагаются соответствующие data-файлы. Если места для поддержания снапшота не достаточно, возникнет ошибка как выше. Как бороться (выбирай на вкус):

- запускать проверку, когда писателей в базе минимальное количество (sparse-файлы на которых построен снапшот будут медленно расти или вообще не будут расти)

или

- руками создать снапшот базы и указать расположение sparse-файлов снапшота где места будет достаточно. и запустить проверку базу указав этот снапшот. dbcc checkdb не будет в этом случае создавать снапшот базы.


drop database check_test;
go

create database check_test
on primary
(
	name = check_test_mdf,
	filename = 'c:\temp\ct\check_test.mdf',
	size = 10Mb,
	filegrowth = 10Mb
)
log on
(
	name = check_test_log,
	filename = 'c:\temp\ct\check_test.ldf',
	size = 64Mb,
	filegrowth = 64Mb
);
go

use check_test;
go

with
l0(n) as (select 1 union all select 1),
l1(n) as (select 1 from l0 t1, l0 t2),
l2(n) as (select 1 from l1 t1, l1 t2),
l3(n) as (select 1 from l2 t1, l2 t2),
l4(n) as (select 1 from l3 t1, l3 t2),
l5(n) as (select 1 from l4 t1, l4 t2)
select top(1000000)
	replicate('a', 100) as data
into t1
from
	l5 t1, l5 t2;
go

dbcc checkdb;
go

/*


c:\temp\ct>dir /r
 Volume in drive C has no label.
 Volume Serial Number is FA2F-08A2

 Directory of c:\temp\ct

23.08.2014  09:48    <DIR>          .
23.08.2014  09:48    <DIR>          ..
23.08.2014  09:48       134 217 728 check_test.ldf
23.08.2014  09:48       125 829 120 check_test.mdf

Тот самый alternate stream...

23.08.2014  09:48       125 829 120 check_test.mdf_MSSQL_DBCC17
               3 File(s)    385 875 968 bytes
               2 Dir(s)  54 518 738 944 bytes free

*/


create database check_test_snapshot
on
(
	name = check_test_mdf,
	filename = 'c:\temp\alternate_path\check_test.sparse_mdf'
)
as snapshot of check_test;
go

dbcc checkdb ('check_test_snapshot');
go
23 авг 14, 10:32    [16482850]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить