Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Помогите вылечить базу  [new]
Alex_241
Member

Откуда:
Сообщений: 48
Добрый день. Помогите вылечить базу ... вот лог при лечении DBCC CHECKDB('БАЗА', REPAIR_ALLOW_DATA_LOSS)
Сообщение 8909, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 0, идентификатор индекса -1, идентификатор секции 0, идентификатор единицы размещения 4617878467915022336 (тип Unknown), идентификатор страницы (1:691417) содержит неправильный идентификатор страницы в заголовке страницы. PageId в заголовке страницы = (0:0).
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8939, уровень 16, состояние 98, строка 1
Ошибка таблицы: идентификатор объекта 0, идентификатор индекса -1, идентификатор секции 0, идентификатор единицы размещения 5423178376284209152 (тип Unknown), страница (28515:0). Тест (IS_OFF (BUF_IOERR, pBUF->bstat)) не прошел. Значения - 12584969 и -10.
Уровень исправлений для данной инструкции DBCC вызвал обход данного исправления.
CHECKDB обнаружил 0 ошибок размещения и 128 ошибок согласованности, не связанных ни с одним объектом.

.....

Сообщение 8928, уровень 16, состояние 1, строка 1
Идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data): не удалось обработать страницу (1:691448). Для получения подробных сведений просмотрите сообщения о других ошибках.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8980, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data). Узел индекса на странице (1:716228), область памяти 104 ссылается на дочернюю страницу (1:691448) и предыдущий дочерний элемент (1:691447), но они не были найдены.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8928, уровень 16, состояние 1, строка 1
Идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data): не удалось обработать страницу (1:691449). Для получения подробных сведений просмотрите сообщения о других ошибках.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8980, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data). Узел индекса на странице (1:716228), область памяти 105 ссылается на дочернюю страницу (1:691449) и предыдущий дочерний элемент (1:691448), но они не были найдены.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8928, уровень 16, состояние 1, строка 1
Идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data): не удалось обработать страницу (1:691450). Для получения подробных сведений просмотрите сообщения о других ошибках.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8980, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data). Узел индекса на странице (1:716228), область памяти 106 ссылается на дочернюю страницу (1:691450) и предыдущий дочерний элемент (1:691449), но они не были найдены.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8928, уровень 16, состояние 1, строка 1
Идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data): не удалось обработать страницу (1:691451). Для получения подробных сведений просмотрите сообщения о других ошибках.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8980, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data). Узел индекса на странице (1:716228), область памяти 107 ссылается на дочернюю страницу (1:691451) и предыдущий дочерний элемент (1:691450), но они не были найдены.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8928, уровень 16, состояние 1, строка 1
Идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data): не удалось обработать страницу (1:691452). Для получения подробных сведений просмотрите сообщения о других ошибках.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8980, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data). Узел индекса на странице (1:716228), область памяти 108 ссылается на дочернюю страницу (1:691452) и предыдущий дочерний элемент (1:691451), но они не были найдены.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8928, уровень 16, состояние 1, строка 1
Идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data): не удалось обработать страницу (1:691453). Для получения подробных сведений просмотрите сообщения о других ошибках.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8980, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data). Узел индекса на странице (1:716228), область памяти 109 ссылается на дочернюю страницу (1:691453) и предыдущий дочерний элемент (1:691452), но они не были найдены.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8928, уровень 16, состояние 1, строка 1
Идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data): не удалось обработать страницу (1:691454). Для получения подробных сведений просмотрите сообщения о других ошибках.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8980, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data). Узел индекса на странице (1:716228), область памяти 110 ссылается на дочернюю страницу (1:691454) и предыдущий дочерний элемент (1:691453), но они не были найдены.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Сообщение 8978, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 713157686, идентификатор индекса 1, идентификатор секции 72057694558224384, идентификатор единицы размещения 72057694573428736 (тип In-row data). Отсутствует ссылка на страницу (1:691455) с предыдущей страницы (1:691454). Возможна ошибка связывания цепочек.
Для исправления данной ошибки необходимо сначала исправить другие ошибки.
Имеется 5860508 строк на 148075 страницах для объекта "_AccumReg4411".
CHECKDB обнаружил 0 ошибок размещения и 260 ошибок согласованности в таблице "_AccumReg4411" (идентификатор объекта 713157686).


Пробывал копировать таблицы не получается, даже не получается для просмотра открыть таблицу _AccumReg4411, но база работает переодически вылетая(1С 8.1), как дольше с этим бороться?? что еще попробывать
6 ноя 11, 23:11    [11555784]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
aleks2
Guest
1. Попробуйте начать делать бэкапы.

2. Этой таблицы у вас уже никогда не будет, но сохраните хоть остальные.

3. Тем более из названия "_AccumReg4411 следует, что это пересчитываемые (в теории, но кто мешает попробовать?) регистры.

ЗЫ. Я бы скопировал базу, в копии дропнул бы таблицу, прогнал бы dbcc и посмотрел: что скажет 1С?
7 ноя 11, 10:31    [11556459]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
"идентификатор индекса 1" = кластерный индекс... ток бэкапы восстановят - либо имеете возможность пересчитать\перезалить табличку...
7 ноя 11, 11:16    [11556694]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
aleks2
2. Этой таблицы у вас уже никогда не будет

ну почему же? еть возможность часть.части выдернуть
7 ноя 11, 12:36    [11557353]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
HandKot
aleks2
2. Этой таблицы у вас уже никогда не будет

ну почему же? еть возможность часть.части выдернуть


?
7 ноя 11, 12:41    [11557399]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
в условии where ставить условия для строк, которые еще можно прочитать
7 ноя 11, 12:43    [11557424]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
Alex_241
Member

Откуда:
Сообщений: 48
может есть возможность как то частично перенести таблицу?? подскажите может есть такие программы, кот. построчно копируют таблицы, поврежденых строк немного это регистр, тоесть записи можно будет востановить, как узнать время записи (период)??
7 ноя 11, 13:52    [11557928]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
Alex_241
Member

Откуда:
Сообщений: 48
бекапы есть и они делаются в них таже самая ошибка!!!! может попробывать как то в бекапе эти строчки удалить????
7 ноя 11, 13:55    [11557959]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Alex_241
бекапы есть и они делаются в них таже самая ошибка!!!! может попробывать как то в бекапе эти строчки удалить????


удалить в бэкапе строчки не получится... елси ошибка такаяже - то как сказал aleks2 "Этой таблицы у вас уже никогда не будет". Попробуйте его совет в "ЗЫ".
7 ноя 11, 13:57    [11557981]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
Alex_241
может есть возможность как то частично перенести таблицу?? подскажите может есть такие программы, кот. построчно копируют таблицы, поврежденых строк немного это регистр, тоесть записи можно будет востановить, как узнать время записи (период)??


повторюсь еще раз.
1. смотрите по какому полю.полям сделан кластерный индекс
2. делате запрос select * from Mytable where ClustIndex <= что-то
3. если прошло нормально, то увеличиваете значение "что-то", если нет, то уменьшаете. Засекаете значение
4. делаете запрос select * from Mytable where ClustIndex >= что-то
5. если прошло нормально, то уменьшаете значение "что-то", если нет, то увеличиваете. Засекаете значение
6. зная значения шагов 3 и 5 выбираете данные из поврежденной таблицы в новую

таким образом можно определить те страницы, которые потеряли связь и Вы сможете считать часть данных


ЗЫЖ так восстановил у себя одну таблицу, правда часть таблицы ушло в небытиё
ЗЫЖЖ если лень, то совет от aleks2 самое то
7 ноя 11, 14:14    [11558106]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
komrad
Member

Откуда:
Сообщений: 5739
Alex_241
может есть возможность как то частично перенести таблицу?? подскажите может есть такие программы, кот. построчно копируют таблицы, поврежденых строк немного это регистр, тоесть записи можно будет востановить, как узнать время записи (период)??


выполни

select object_name(id) [tbl],name,indid,groupid,dpages,rowcnt 
from sys.sysindexes 
where id=object_id('_AccumReg4411')

увидишь сколько записей в таблице

потом используя утилиту BCP
можно выливать данные построчно, используя ключи -F и -L

например, выливаем первые 100 записей
bcp.exe БАЗА.dbo._AccumReg4411 out file1-100.dat -SСЕРВЕР -T -n -F 1 -L 100

как попадешь на "битый" диапазон - дроби его пополам
7 ноя 11, 14:21    [11558160]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
komrad , а это вообще отличная идея.
если не ошибась, то можно поставить размер батча (кол-во строк) в 1 и кол-во ошибок больше чем кол-во строк в таблице и все возможные данные выгрузить одним пакетом
7 ноя 11, 14:41    [11558367]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
Alex_241
Member

Откуда:
Сообщений: 48
komrad

что за утилита ВСР?? подскажи плиз
7 ноя 11, 16:29    [11559233]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
komrad
Member

Откуда:
Сообщений: 5739
Alex_241
komrad

что за утилита ВСР?? подскажи плиз


тынц
7 ноя 11, 16:35    [11559272]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
Alex_241
Member

Откуда:
Сообщений: 48
" а это вообще отличная идея.
если не ошибась, то можно поставить размер батча (кол-во строк) в 1 и кол-во ошибок больше чем кол-во строк в таблице и все возможные данные выгрузить одним пакетом"

komrad подскажи пожалуйста как написать такой код???
7 ноя 11, 19:30    [11560291]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
komrad
Member

Откуда:
Сообщений: 5739
Alex_241
" а это вообще отличная идея.
если не ошибась, то можно поставить размер батча (кол-во строк) в 1 и кол-во ошибок больше чем кол-во строк в таблице и все возможные данные выгрузить одним пакетом"

komrad подскажи пожалуйста как написать такой код???


для начала надо показать результат запроса, который я привел ранее 11558160
7 ноя 11, 19:51    [11560375]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
Alex_241
Member

Откуда:
Сообщений: 48
_AccumReg4411 _AccumR4411_ByPeriod_TRN 1 1 148330 5870088
_AccumReg4411 _AccumR4411_ByRecorder_RN 2 1 26650 5870088
_AccumReg4411 _AccumR4411_ByDims4424_RTRN 3 1 48549 5870088
_AccumReg4411 _AccumR4411_ByDims4425_RTRN 4 1 38460 5870088
_AccumReg4411 _WA_Sys_00000003_2A81EC36 5 0 0 0
_AccumReg4411 _WA_Sys_00000005_2A81EC36 6 0 0 0
_AccumReg4411 _WA_Sys_00000006_2A81EC36 7 0 0 0
_AccumReg4411 _WA_Sys_0000000A_2A81EC36 8 0 0 0
_AccumReg4411 _WA_Sys_0000000C_2A81EC36 9 0 0 0
_AccumReg4411 _WA_Sys_0000000D_2A81EC36 10 0 0 0
_AccumReg4411 _WA_Sys_00000009_2A81EC36 11 0 0 0
_AccumReg4411 _WA_Sys_0000000B_2A81EC36 12 0 0 0
_AccumReg4411 _WA_Sys_0000000E_2A81EC36 13 0 0 0
_AccumReg4411 _WA_Sys_00000011_2A81EC36 14 0 0 0
_AccumReg4411 _WA_Sys_00000012_2A81EC36 15 0 0 0
_AccumReg4411 _WA_Sys_00000013_2A81EC36 16 0 0 0
_AccumReg4411 _WA_Sys_00000004_2A81EC36 17 0 0 0
_AccumReg4411 _WA_Sys_00000010_2A81EC36 18 0 0 0
7 ноя 11, 21:22    [11560614]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
komrad
Member

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

параметр "размер батча" используется только при импорте данных
поэтому надо использовать F & L

Пример скрипта, который сгенерирует тест батника для выливки данных из таблицы по 10000 записей.
Подставить свои значения в @db и @srv!

declare @tbl table(i int identity,cmd varchar(256))

declare @rows int  -- общее кол-во записей в таблице
declare @batch_size int  -- выгружаем по 10 тысяч записей
declare @i int  -- счетчик
declare @db varchar(100)  -- название БД
declare @srv varchar(100)  -- название Сервера 

-- инициализация переменных
select @srv='СЕРВЕР'
select @db='БАЗА'
select @rows=6000000
select @batch_size=10000
select @i=0

-- генерация состава батника
while @i<=@rows
  begin
	insert into @tbl(cmd)
    select 'bcp '+@db+'.dbo._AccumReg4411 out table_'+convert(varchar(10),@i+1)+'.dat -S'+@srv+' -T -n -F '+convert(varchar(10),@i+1)+' -L '+convert(varchar(10),@i+@batch_size)+' > error_'+convert(varchar(10),@i+1)+'.dat'
    select @i=@i+@batch_size
  end 

-- вывод текста батника
select cmd from @tbl order by i 

полученный текст занести в батник
выполнить
проанализировать error_*.dat файлы
найти проблемный диапазон
и выливать из него с меньшей гранулярностью, например, по 1000 записей

в общем - работа творческая ;)
8 ноя 11, 11:01    [11562072]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
Alex_241
Member

Откуда:
Сообщений: 48
большое спастбо буду пробывать... отпишусь
8 ноя 11, 14:36    [11563863]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
Alex_241
обязательно отпишитесь, может понадобиться всегда
8 ноя 11, 15:33    [11564349]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
Alex_241
Member

Откуда:
Сообщений: 48
komrad, вообщем програмка сразу звкрывается после открытия, вот получившийся код... создается файл error_'+convert(varchar(10) ... но он пустой

declare @tbl table(i int identity,cmd varchar(256))

declare @rows int -- общее кол-во записей в таблице
declare @batch_size int -- выгружаем по 10 тысяч записей
declare @i int -- счетчик
declare @db varchar(100) -- название БД
declare @srv varchar(100) -- название Сервера

-- инициализация переменных
select @srv='Serverlider'
select @db='kopia'
select @rows=6000000
select @batch_size=10000
select @i=0

-- генерация состава батника
while @i<=@rows
begin
insert into @tbl(cmd)
select 'bcp '+@db+'.dbo._AccumReg4411 out table_'+convert(varchar(10),@i+1)+'.dat -S'+@srv+' -T -n -F '+convert(varchar(10),@i+1)+' -L '+convert(varchar(10),@i+@batch_size)+' > error_'+convert(varchar(10),@i+1)+'.dat'
select @i=@i+@batch_size
end

-- вывод текста батника
select cmd from @tbl order by i
8 ноя 11, 18:46    [11565869]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
Alex_241
Member

Откуда:
Сообщений: 48
у меня на сервере виндовс 64 бита...2008
8 ноя 11, 19:21    [11565999]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
komrad
Member

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

а эта команда работает вообще?

bcp kopia.dbo._AccumReg4411 out table_1.dat -SServerlider -T -n -F 1 -L 10000

надеюсь, что выполняешь её из командной строки и из специальной папки, а не из корня виндовс
8 ноя 11, 19:50    [11566080]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
Alex_241
Member

Откуда:
Сообщений: 48
komrad, извени за тупость, еще раз я создал этот батник и запускаю его, -- -правильно?? или я его должен положить как ты говориш в спец. папку и оттуда запустить, раскажи подробней... еще раз спасибо за помощь))))))))))
8 ноя 11, 20:29    [11566178]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вылечить базу  [new]
komrad
Member

Откуда:
Сообщений: 5739
Alex_241
komrad, извени за тупость, еще раз я создал этот батник и запускаю его, -- -правильно?? или я его должен положить как ты говориш в спец. папку и оттуда запустить, раскажи подробней... еще раз спасибо за помощь))))))))))


хм, ну давай что ли объясню как работать с командной строкой

если есть что-нить типа FAR-а - работай в нём
1) проверить место на доступных дисках
2) выбрать диск с бОльшим свободным местом (запомнить букву)
3) запустить FAR
4) перейти на выбранный диск
5) создать в его корне папку SQL_TEST
6) зайти в нее
7) выполнить в ней эту команду

bcp kopia.dbo._AccumReg4411 out table_1.dat -SServerlider -T -n -F 1 -L 10000 > err1.txt

8) показать здесь файл err1.txt


если FAR-а нет, то
1) повторить пп.1-2 из предыдущего списка шагов
2) запустить cmd.exe (кнопка Пуск-Выполнить)
3) выполнить команду X: ,где Х - выбранный диск
4) выполнить команду mkdir SQL_TEST
5) выполнить команду cd SQL_TEST
6) выполнить пп.7-8


Если пугает командная строка - читать книжку Фигурнова
9 ноя 11, 10:27    [11567627]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить