|
Прямые запросы на изменение данных внутри 1С. | ☑ | ||
---|---|---|---|---|
0
Креатив
18.05.21
✎
08:50
|
Есть необходимость почистить несколько таблиц полностью или выборочно.
База большая SQL. Средствами 1С чистится очень долго. Средствами SQL чистить не очень удобно, так как приходится удалять базу из сервера 1С(иначе 1С делает роллбэк). Плюс ещё названия таблиц приходится в копии подглядывать. Есть ли внешние компоненты или обработки, которые подключаются к базе внутри сеанса 1с? |
|||
1
Галахад
гуру
18.05.21
✎
08:57
|
Пальцами код написать.
|
|||
2
shuhard
18.05.21
✎
09:01
|
(0)[иначе 1С делает роллбэк]
что за конфа и регистры себя так ведут ? |
|||
3
Креатив
18.05.21
✎
09:04
|
(2) Платформа 8.2 и дело, как я понимаю, не в регистрах. Просто сервер 1С откатывает любые изменения, внесённые в базу SQL другими программами. Мне так один человек сказал. Я проверил. Почистил с помощью truncate table один регистр. Через секунду все данные уже были на месте.
|
|||
4
arsik
гуру
18.05.21
✎
09:07
|
(3) Ну не знаю. Я чистил так в своей разработочной базе. Ничего вроде не вернулось. Но у меня postgre.
|
|||
5
shuhard
18.05.21
✎
09:09
|
(3) [сервер 1С откатывает любые изменения, внесённые в базу SQL другими программами]
лажа |
|||
6
fisher
18.05.21
✎
09:10
|
(3) > Просто сервер 1С откатывает любые изменения, внесённые в базу SQL другими программами. Мне так один человек сказал. Я проверил. Почистил с помощью truncate table один регистр. Через секунду все данные уже были на месте.
С таким уровнем знаний лучше действительно прямыми запросами не заниматься. |
|||
7
Bigbro
18.05.21
✎
09:10
|
(3) ну а если отцепить базу от сервера 1с на время изменений в SQL
не "на горячую" же чистить данные? |
|||
8
acht
18.05.21
✎
09:11
|
(3) > сервер 1С откатывает любые изменения, внесённые в базу SQL другими программами
Время ох*ительных историй... |
|||
9
ДенисЧ
18.05.21
✎
09:13
|
Какой бред... Вроде не пятница, а уже такие глюки...
Погода, что-ли? |
|||
10
Креатив
18.05.21
✎
09:14
|
(6)(8)(9)Поведайте, как на самом деле происходит?
|
|||
11
Креатив
18.05.21
✎
09:15
|
(7)Я так и делаю, когда полностью таблицу почистить надо.
|
|||
12
ДенисЧ
18.05.21
✎
09:15
|
(10) Как-как... Каком к верху.
|
|||
13
Sammo
18.05.21
✎
09:16
|
(3) Имхо, бред. Проверь - в какой базе транкейтнул.
1. Смотря что чистить. Если движения - не очень хорошо, т.к. надо помимо основной таблицы чистить еще скульные таблицы оборотов и остатков и решать еще вопрос пересчета итогов. Если справочники, регистры сведений или документы без движений - без проблем. 2. Смотри ПолучитьСтруктуруХраненияБазыДанных 3. Помнится в инете было множество подобных обработок. Но на мой взгляд - это должны быть очень существенные аргументы, чтобы залазить руками в таблицы. Т.е. удаление сутками, при этом невозможность запуска в фоновом режиме или выделения регламентного окна (работа в режиме 24/7) |
|||
14
mistеr
18.05.21
✎
09:17
|
(3) Ты наверное commit забыл сделать. :)
|
|||
15
fisher
18.05.21
✎
09:18
|
(10) "Один человек" гонит пургу. А у тебя глюк был. Запрос либо не выполнился либо откатился в результате сбоя. TRUNCATE быстро чистит таблицу, но для этого ему нужно ее всю залочить. Вероятно, это не удалось. Попробуй DELETE.
|
|||
16
mistеr
18.05.21
✎
09:21
|
(0) >Средствами 1С чистится очень долго.
Насколько долго? За ночь справится? |
|||
17
Креатив
18.05.21
✎
09:22
|
(14)А что MS SQL перестал автоматически комитить запросы? Это же не оракл.
(16)Трое суток. Там в регистре версии объектов 11 миллионов записей. |
|||
18
Sammo
18.05.21
✎
09:25
|
(17) Если регистр сведений и надо грохнуть целиком - транкейт подойдет. Причем можно из самого 1с. Было.
Но не вижу проблемы запускать удаление в фоновом режиме |
|||
19
Garykom
гуру
18.05.21
✎
09:34
|
(17) В 1С есть регламентные/фоновые и да можно в кучу потоков запускать
|
|||
20
Креатив
18.05.21
✎
09:34
|
(17)+ в смысле за трое суток удалилось два миллиона записей из 11-ти.
|
|||
21
Garykom
гуру
18.05.21
✎
09:35
|
(20) В 1 поток? Попробуй в 50 ))
|
|||
22
rsv
18.05.21
✎
09:42
|
(0) …. В 100 потоков и через парсинг json или xml
|
|||
23
rsv
18.05.21
✎
09:42
|
Не открыли еще доя себя менеджмент студио скулевый ?
|
|||
24
mistеr
18.05.21
✎
09:42
|
(17) MS SQL и не начинал. Автоматический коммит может делать клиент, в зависимости от настроек. Например SSMS по умолчанию не делает.
Oracle, кстати, как раз автоматически коммитит truncate. |
|||
25
mistеr
18.05.21
✎
09:43
|
(20) Ну допустим. А куда ты спешишь, со старыми-то версиями объектов?
|
|||
26
Йохохо
18.05.21
✎
09:44
|
(24) еще про выделение части расскажи)
|
|||
27
вым
18.05.21
✎
09:46
|
фикасе)) в начале какие были перлы)) 1с стала умнее sql )) хранит у себя все данные для восстановления))
|
|||
28
mistеr
18.05.21
✎
09:48
|
(26) Какой части?
|
|||
29
вым
18.05.21
✎
10:00
|
а по делу есть обработки и просто просмотра структуры внутренних полей БД. например
https://1c-predpriyatie-qlik.ivan-shamaev.ru/kak-prosmotret-strukturu-bazy-dannyh-1s-predpriyatie-1cv8-1cd/#______1_83 https://infostart.ru/public/340311/ https://start1c.blogspot.com/2016/01/blog-post_31.html https://itdemka.ru/pubs/1124.html так и обработки для непосредственного редактирования БД |
|||
30
Йохохо
18.05.21
✎
10:05
|
(28) если есть выделение то будет выполнено только оно из всего скрипта
|
|||
31
Креатив
18.05.21
✎
10:06
|
Ситуация с роллбэком не воспроизвелась.
(29)Благодарю. Посмотрю. |
|||
32
fisher
18.05.21
✎
10:09
|
(24) > MS SQL и не начинал. Автоматический коммит может делать клиент
Это не совсем корректное утверждение. Это можно настроить в рамках сессии. То есть настраивается клиентом, но делает сиквел. И ЕМНИП с 2000 сиквела по дефолту - автокоммит. То есть если клиент не делает специальных телодвижений, то будет автокоммит. |
|||
33
Aleksey
18.05.21
✎
10:19
|
(17) как удаляешь? через чтения порциями?
Буквально на прошлой недели удалял 6 млн записи из этого регистра. Не мгновенно, но за минуту точно справилось Набор = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); Набор.Записать(Истина); |
|||
34
mistеr
18.05.21
✎
10:20
|
(32) Спасибо за поправку.
|
|||
35
Aleksey
18.05.21
✎
10:21
|
(13) бывает и так Как удалить "фантомные" записи в таблице итогов средствами 1С
|
|||
36
Йохохо
18.05.21
✎
10:24
|
(32) нету, в ссмс IMPLICIT_TRANSACTIONS OFF
|
|||
37
Креатив
18.05.21
✎
10:25
|
(33)Через ТИИ. И этих двух строк достаточно?
|
|||
38
fisher
18.05.21
✎
10:27
|
(36) Я вроде бы обратного не утверждал.
(37) Мда |
|||
39
fisher
18.05.21
✎
10:29
|
The SQL Server Native Client OLE DB Provider for SQL Server, and the SQL Server Native Client ODBC driver, automatically set IMPLICIT_TRANSACTIONS to OFF when connecting. SET IMPLICIT_TRANSACTIONS defaults to OFF for connections with the SQLClient managed provider, and for SOAP requests received through HTTP endpoints
|
|||
40
Aleksey
18.05.21
✎
10:29
|
(37) ну если нужна полная очистка, без условий - то да. Эти 2 строчки просто записывают пустой набор замещая существующие записи
|
|||
41
Креатив
18.05.21
✎
10:30
|
(40)Благодарю, запомню на будущее.
|
|||
42
вым
18.05.21
✎
10:31
|
(37) (41) главное архив БД не делай, на живой базе быстрее результат получается )) и запоминается лучше)
|
|||
43
Креатив
18.05.21
✎
10:34
|
(42)Это измученные копии живой базы.
|
|||
44
fisher
18.05.21
✎
10:35
|
(36) А! Или ты с названиями попутал? Это режим НЕЯВНЫХ транзакций OFF. В результате чего как раз автокоммит. Автокоммит, неверное, сбивает с толку названием, потому что это не отдельный режим а нативное поведение системы. И можно включить режим неявных транзакций, который как раз является отдельным режимом при котором неявно втыкается начало транзакции если делается запрос на изменение, а активных транзакций в это время нет.
|
|||
45
Йохохо
18.05.21
✎
10:42
|
(44) угу "Если задано значение OFF, каждая из предыдущих инструкций T-SQL ограничена невидимыми инструкциями BEGIN TRANSACTION и COMMIT TRANSACTION. При значении OFF транзакция выполняется в режиме автофиксации. "
|
|||
46
brainguard
18.05.21
✎
10:53
|
(3) А ты DELETом
|
|||
47
Sammo
18.05.21
✎
10:56
|
(37) Эммм. Вопрос снят. И эти люди лезут напрямую в БД...
|
|||
48
вым
18.05.21
✎
11:04
|
(47) вот вам жалко что-ли? - а пожалуйста (с)
https://www.youtube.com/watch?v=5s5yJLOEXMo |
|||
49
Sammo
18.05.21
✎
12:40
|
(48) Да не жалко. Интересно, будет тема от топикстартера - случайно удалил весь регистр сведений - что делать...
|
|||
50
Креатив
18.05.21
✎
16:28
|
(49)Не дождётесь!(с)
|
|||
51
Креатив
18.05.21
✎
17:51
|
А выборочно как удалять? Есть ещё объекты доступа документов. Его надо только от битых избавить. Как в SQL отобрать битые ссылки?
|
|||
52
Garykom
гуру
18.05.21
✎
17:53
|
(51) Битые это уже переписывание платформы 1С какое то
|
|||
53
Креатив
18.05.21
✎
18:16
|
Хотел средствами 1с почистить. Сервер клиента упал.
|
|||
54
mistеr
18.05.21
✎
19:29
|
Между (50) и (53) не прошло и двух часов. :D
|
|||
55
Креатив
18.05.21
✎
20:32
|
(54)Хороший запрос кладёт базу вместе с сервером.
|
|||
56
PR
18.05.21
✎
20:36
|
Автору с его одинесными роллбэками пятницы бы дождаться
|
|||
57
Креатив
18.05.21
✎
21:01
|
(56)Слишком долго. А роллбэк предположительно случился в результате коллизии.
|
|||
58
Serginio1
18.05.21
✎
21:28
|
||||
59
Serginio1
18.05.21
✎
21:30
|
58+ Можно пришпондорить и для Linq2DB
https://github.com/linq2db/linq2db |
|||
60
mistеr
18.05.21
✎
23:23
|
(55) Хороший сервер одним запросом не положишь. :) Тем более "средствами 1С".
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |