Имя: Пароль:
1C
 
Повреждена таблица. Подскажите как ее восстановить из копии средствами SQL?
0 evorle145
 
23.04.24
09:41
В рабочей базе некоторые документы не проводятся, выдает ошибку SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0x757ab996; actual: 0x0f5dc709). It occurred during a read of page (1:19760772) in database ID 9 at offset 0x000025b0d08000 in file 'D:\DATA\nameBase.mdf'.  

Запуск ТИИ обрывается на таблице AccumRgChngR10196 РегистрНакопления.НДСЗаписиКнигиПродаж

Подскажите, как эту таблицу восстановить из имеющейся копии базы средствами SQL?

Выгрузкой загрузкой данных еще не пробовал... Подскажите, стоит ли ей попробовать?
1 Волшебник
 
23.04.24
09:42
Снесите регистрацию изменений, потом пересоздайте узел обмена
2 Ёпрст
 
гуру
23.04.24
09:51
(0) если маленькая табличка, то truncate table + insert into select * from копия таблички
Если большая, то через булку.
В вашем случае, проще грохнуть все записи в этой табличке целиком (это всего лишь регистрация изменений)
3 Ёпрст
 
гуру
23.04.24
09:53
Хотя, если скуль не может ужо прочитать страничку, то там , скорее всего, не только эта табличка поломана.
Лечите базу (для начала, мдф/лдф копировать на другой диск)
4 evorle145
 
23.04.24
09:58
(1) (2) Понял! Подскажите, пожалуйста, как выглядит или должен выглядеть примерно запрос, который очистит все записи из таблицы AccumRgChngR10196 . Хочу попробовать на копии базы..
5 Mihenius
 
23.04.24
10:00
(0) Я бы еще дисковую подсистему всю проверил.
6 Волшебник
 
23.04.24
10:05
(4)
TRUNCATE TABLE AccumRgChngR10196


Ещё можно исключить регистр из плана обмена и провести реструктуризацию.
7 evorle145
 
23.04.24
10:28
(6) благодарю! на копии базы запустил, пока получил ошибку:

Msg 4701, Level 16, State 1, Line 2
Cannot find the object "AccumRgChngR10196" because it does not exist or you do not have permissions.

Completion time: 2024-04-23T00:15:12.6544529-07:00


права вроде у меня там полные: https://postimg.cc/DSTqwvRC
8 Ёпрст
 
гуру
23.04.24
10:32
(7) есть уверенность, что есть AccumRgChngR10196 в этой базе ?
9 Ёпрст
 
гуру
23.04.24
10:33
Имена табличек, почти всех, с _  начинаются. если че
10 evorle145
 
23.04.24
10:34
(8) да, конечно, вот, я ее вижу:
https://postimg.cc/V0PNW6qp
11 Ёпрст
 
гуру
23.04.24
10:35
(10) Проверьте зрение: _AccumRgChngR10196
12 Kongo2019
 
23.04.24
10:36
(10)То что ты ее видишь и то что она есть разные вещи.
13 evorle145
 
23.04.24
10:36
(9) (11) да, извините, переволновался... очистил... смотрю результат...
14 Ёпрст
 
гуру
23.04.24
10:37
Если не знаете, как писать, то там есть в визарде - скрипт табле ас, или селект топ 1000, заменяете потом на нужное.
15 evorle145
 
23.04.24
11:02
да, таблица AccumRgChngR10196 очистилась, провести счет фактуры теперь дает.

Но в списке битых таблиц оказались еще эти:
_Reference93 "Справочник.Склады"
_Document252_VT7285 "Документ.СчетНаОплатуПокупателю.Товары"
_Document133_VT18206 "Документ.ВводНачальныхОстатков.ТоварыВРозничнойТорговлеАТТ"
_Reference91 "Справочник.СерверыДокументооборота"

из них испольвались _Reference93  и _Document252_VT7285 ... очистить их нельзя... получается остается только один вариант копировать из копии?
16 Optan
 
23.04.24
11:10
(15) Может это вам частично поможет:
https://infostart.ru/1c/articles/192648/
17 Ёпрст
 
гуру
23.04.24
11:11
(15) как узнали ?
DBCC CHECKDB хотя бы делали ? Че кажет ?
18 evorle145
 
23.04.24
11:19
(17) вот как раз DBCC CHECKDB и подсказал, что эти таблицы имеют пробелмы...
19 evorle145
 
23.04.24
11:31
А почему если повреждена таблица _Document252_VT7285 "Документ.СчетНаОплатуПокупателю.Товары" то я могу сейчас записать/изменить любой существующий счет на оплату, но создать новый не могу?
Может нужна какая-то просто переиндексация этой таблицы?
20 Волшебник
 
23.04.24
11:39
База полностью разрушена. Кажется, диск сыпется.
21 evorle145
 
23.04.24
11:47
(20) база была восстановлена из mdf файла... все бэкапы были зашифрованы, остался только mdf . Установили новый сервер, установили sql, 1C сервер. При соединили этот mdf  файл. В итоге вроде все работает, но вот эти 4 таблицы... _Reference91 "Справочник.СерверыДокументооборота" - эта например, в 1с вообще не открывается,  эта "_Reference93 "Справочник.Склады" в 1с открывается, но новый склад создать невозможно. То самое с таблицей _Document252_VT7285 "Документ.СчетНаОплатуПокупателю.Товары"... А остальное-то вс е работает..
22 Волшебник
 
23.04.24
11:48
(21) Всё сносите и поднимайте заново из бэкапа
23 evorle145
 
23.04.24
11:50
(22) нет бэкапа достаточно свежего.. поэтому и подключали из mdf ...
24 Ёпрст
 
гуру
23.04.24
11:55
(21) склады, можно взять с копии, можн0 ручками прям в скуле поправить (не думаю, что у вас там больше 10 записей)
счет на оплату , с копии.
ЗЫ: ну или хотя бы чек с REPAIR_ALLOW_DATA_LOSS запустить
25 evorle145
 
23.04.24
11:58
(24) понял. Подскажите, пожалуйста, выгрузкой загрузкой xml из копии можно взять?  (копия еще только разворачивается, проверить не могу) Или это средствами sql в ssms  нужно делать? Если не трудно, намекните пример запросов на копирование таких таблиц. В гугле читаю - но пока нет уверенности, что понял как это сделать.
26 Ёпрст
 
гуру
23.04.24
12:18
(25) как угодно, в скуле быстрее просто.

truncate table [BaseName_1].[dbo].[_Document252_VT7285];

insert into [BaseName_1].[dbo].[_Document252_VT7285]
SELECT * FROM [BaseName_Copy].[dbo].[_Document252_VT7285]
27 Ёпрст
 
гуру
23.04.24
12:20
Это, если обе базы на одном сервере, если на разных, то сперва прилинковать сервер, потом запрос.
Можно и не писать это руками, а через импорт/экспорт.. тупо мышой в остнастке
28 evorle145
 
24.04.24
08:49
В итоге пока застряли на том, что ищем подходящий бэкап, чтобы из него копировать эти 4 битых таблицы...

Мне правда, не очень понятно, почему в базе все работает, но если я хочу создать новый склад, то валится с ошибкой повреждения данных таблиц sql. Ведь любой существующий склад 1с изменить дает. Почему так получается, что если таблица в sql по складам повреждена, почему туда новую запись нельзя сделать?
29 Волшебник
 
24.04.24
09:12
(28) снесите эти таблицы и постарайтесь жить без них
30 evorle145
 
24.04.24
10:07
(29) но это же таблица складов.. Ведь если снести их, то что будет в документах, где есть ссылки на эти склады?
Таблицу счетов на оплату, допустим, грохнуть можно...
31 Волшебник
 
24.04.24
10:09
(30) Создадите новые склады, перенесёте ссылки
32 arsik
 
гуру
24.04.24
10:11
(30) а в скуле дает селект по _Reference93, _Document252_VT7285 сделать?
Если дает, сделайте селект + транк + инсерт
Ну или выгрузите-загрузите в(из) DT
33 evorle145
 
24.04.24
10:22
(32) да, запрос
SELECT TOP (1000) [_IDRRef]
      ,[_Version]
      ,[_Marked]
      ,[_PredefinedID]
      ,[_ParentIDRRef]
      ,[_Folder]
      ,[_Code]
      ,[_Description]
      ,[_Fld1459]
      ,[_Fld1460RRef]
      ,[_Fld1461RRef]
      ,[_Fld1462RRef]
      ,[_Fld1463RRef]
      ,[_Fld11802]
  FROM [namebase].[dbo].[_Reference93]

выполняется. А что даст "селект + транк + инсерт"? типа выбрать таблицу и вставить ее саму в себя.. просто не очень понял идею?
34 evorle145
 
24.04.24
10:20
(31) понял, попробую на копии базы сейчас.

А снести таблицу складов это вы имеете ввиду так:
TRUNCATE TABLE _Reference93

?или ее удалить, а потом как то добавить новую?
35 Волшебник
 
24.04.24
10:21
(34) пофиг
36 arsik
 
гуру
24.04.24
10:23
(34)
1) Создаете временную таблицу селектом из поломанной
2) Удаляете поломанную
3) Селектом из временной создаете новую
примерно как то так
37 arsik
 
гуру
24.04.24
10:25
38 Ёпрст
 
гуру
24.04.24
11:22
(33) если селект из .[_Reference93] выполняется, но не даёт ввести новый, то скорее всего есть мусор в предопределенных данных - в табличке есть, в config нетуИли наеборот
39 Ёпрст
 
гуру
24.04.24
11:26
покажи картинку, чего кажет
select * from _Reference93
40 evorle145
 
24.04.24
12:42
(39) вот пожалуйста:
https://postimg.cc/JsX2dncq

и внизу еще написано, что запрос выполнен успешно

https://postimg.cc/GBJSd5fT
41 evorle145
 
24.04.24
12:43
(38) но это же справочник Склады.. База 1С БП... там же никогда не было предопределенных элементов.. Да и вторая таблица _Document252_VT7285 "Документ.СчетНаОплатуПокупателю.Товары" с тем же диагнозом. Новый счет на оплату не создать, старые редактировать дает.
42 arsik
 
гуру
24.04.24
12:54
(41) А индексы не пробовали пересоздать?
Вариант из (36) можно упростить. Без временной. Прям реальную таблицу создать в базе только с каким ни будь префиксом, потом удалить основную и переименовать созданную.
И насколько база большая? Может все же проще в dt, из dt?
43 evorle145
 
24.04.24
13:27
(42) понял! тоже думали над этим вариантом, будем пробовать его сегодня.

"И насколько база большая? Может все же проще в dt, из dt?" ТИИ не проходит, думаю что в dt Тоже не выгрузится.. размер 450ГБ. год назад в dt выгружал (7 часов выгружалось)
44 evorle145
 
24.04.24
13:28
(42) а можно индексы пересоздать по выбранным таблицам? подскажите, как это происходит? как это делать?
45 Ёпрст
 
гуру
24.04.24
13:46
(41) проапдейть табличку и избавься от null в полях, из там быть не должно
46 youalex
 
24.04.24
14:08
(45) Там isfolder 0
47 Ёпрст
 
гуру
24.04.24
14:25
(46) с телефончика не видно, еще и папки в папки есть..
Ну, копия таблички, перенос всего, без иерархии, для начала, так бы сделал.
Возможно, есть циклические ссылки в иерархии
48 evorle145
 
24.04.24
15:28
(45) подскажите плиз, что имеете ввиду под проапдейтить?

"избавься от null в полях, из там быть не должно" а там null не в элементах, а только в папках. То есть справочник склады иерархический, и там есть папки, вот для папок есть NULL в тех полях, где для группы реквизит не может быть указан...
49 Ёпрст
 
гуру
24.04.24
15:44
50 evorle145
 
26.04.24
10:12
подскажите плиз:
при проверке на логическую целостность, ругается на таблицу:

"AccRgAT1593"    ""    "РегистрБухгалтерии.Хозрасчетный"    "ИтогиПоСчетамССубконто1"


я могу ее очистить? Она заполнится в момент Пересчета итогов?


p.s. Сейчас на копии очищаю AccRgAT1593 , запускаю ТИИ и выполняется все кроме пункта "Реиндексация таблиц информационной базы". Я полагаю, это за битых таблиц по склады и СчетаНаОплату.Товары. (эти таблицы пока не удалось восстановить, бэкап пока не найден).
51 Волшебник
 
26.04.24
10:23
(50) все итоги по счетам формируются на базе проводок
52 evorle145
 
26.04.24
10:42
(51) а в какой момент? ну то есть если я очищу эту таблицу в sql, что что надо будет мне сделать, чтобы она заполнилась по новой?
53 Волшебник
 
26.04.24
10:42
(52) ТИИ / Пересчёт итогов
54 evorle145
 
26.04.24
10:45
(53) благодарю! тоже так думал (и на копии пересчет итогов прошел успешно), но перед тем как провернуть аналогичные действия на рабочей базе - решил подстраховаться)
55 Ёпрст
 
гуру
26.04.24
11:11
(54) 3 дня делаешь уже какой-то примитив. тебя там тапком не прибили еще ?
56 Волшебник
 
26.04.24
11:12
(55) Продажи стоят, наверное...
57 evorle145
 
26.04.24
11:18
(55) (56) да, сейчас мне не очень весело.. это точно.
58 Волшебник
 
26.04.24
11:39
(57) Вы тормоз продаж! Давно бы уже развернули базу хоть какую-то
59 Ёпрст
 
гуру
26.04.24
11:50
(57) (24) делали на копии этой базы хотя бы ?
60 evorle145
 
26.04.24
12:17
(58) продажи в другой базе.. не в 1С.. правда и там не все хорошо... (59) вот сегодня хочу сделать.. До этого REPAIR_ALLOW_DATA_LOSS  не запускал, потому что могут быть потери данных .. хотя на копии базы, наверное, можно попробовать..
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан