Имя: Пароль:
1C
1С v8
Перегрузка больших объемов данных
,
0 Kaperang
 
24.05.12
07:27
Необходимо перегрузить из одной базы в другую большой объем данных. Объем первичной базы порядка 10 Гбайт на SQL. Как это можно сделать быстрее?
1 Мыш
 
24.05.12
07:30
Бэкап/рестор средствами скуля
2 echo77
 
24.05.12
07:32
3 strange2007
 
24.05.12
07:33
10 гиг СКЛьный бэкап... выгрузка минут 30 и загрузка столько же. За то без головняков и проблем. Штатные средства 1С
4 Kaperang
 
24.05.12
08:17
Просто выгрзука-загрузка информационной базы не прокатит.
Есть первичная база, где вбиваются данные. Есть вторая база, где вбиваются данные.
Конфигурации различные.
Было произведено объединение конфигураций. Совпадающих объектов конфигурации нет.
Полученная объединенная конфигурация была накинута на вторую базу. Теперь нужно данные из первой базы перекинуть во вторую.
5 МихаилМ
 
24.05.12
08:32
если база целиком бекап -ресторе

если базы доступгны онлайн dts для 2000 или аналог
6 shuhard
 
24.05.12
08:39
(4)[Совпадающих объектов конфигурации нет.]+[Теперь нужно данные из первой базы перекинуть во вторую.]
выгрузказагрузкачерезxmlвидентичную
7 Kaperang
 
24.05.12
08:43
(6) Объем исходной базы порядка 10Гбайт. Пробовал перегрузку через COM (http://infostart.ru/public/61320/) Время перегрузки - около 2 суток. А у меня на все про все одна ночь.
8 Coldboy
 
24.05.12
08:46
Правила обмена мб сделать и перегрузить даанные?
9 aleks-id
 
24.05.12
08:47
вываливаешь скулем таблицы с данными из первой базы в текст с разделителями. заливаешь тексты во вторую
10 shuhard
 
24.05.12
08:49
(7) попробуй выгрузку загрузку в идентичную конфигурацию
с переносом движений и отключенными итогами
11 Kaperang
 
24.05.12
08:59
(10) это по большому счтеу и пробовал - время перегрузки около 2 суток. А мне надо  побыстрее
12 Kaperang
 
24.05.12
09:00
(9) А можно поподробнее, как именно это сделать?
13 shuhard
 
24.05.12
09:01
(11) либо использовать лучшее железо, например арендовать на ночь супер сервер


либо переносить в лоб, как в (9) данные на сиквеле

причем можно и не выгружая
напрямую из одной базы на сиквеле в другую
14 aleks-id
 
24.05.12
09:03
(13) кстати да!
15 aleks-id
 
24.05.12
09:07
insert into [база_куда_вставить].[DBO].[таблица_куда_вставить] from (select * from [база_откуда_брать].[DBO].[таблица_откуда_брать])
16 aleks-id
 
24.05.12
09:08
но (15) сработает если базы на одном скуле
17 shuhard
 
24.05.12
09:09
(16) а как же линкед серверс ?
18 aleks-id
 
24.05.12
09:11
(17) вот ты накой сказал, а? будешь сам ТС объяснять теперь как вывалить из базы на другом серванте :))
19 shuhard
 
24.05.12
09:13
(18) =)
20 Kaperang
 
24.05.12
09:25
(15) А вот это очень похоже на то, что мне нужно.
Сейчас пишу обработку, которая сопоставляет имена таблиц SQL разных баз (На основе штатной функции 1С ПолучитьСтруктуруХраненияБазыДанных(,истина))
Как раз думаю потом к ней прикруть генерилку текста запроса.
вопрос в частности был и в том, какой синтаксис SQL запроса использовать.
Спасибо за подсказку.
21 Kaperang
 
24.05.12
09:26
(13) Сервер  - 24 головы (3 проца по 8 ядер), 32 Гига оперативы и прочий неплохой фарш.
22 Kaperang
 
24.05.12
09:26
(16) базы на одном сервере
23 stix2010
 
24.05.12
09:30
(20) сомневаюсь
24 Kaperang
 
24.05.12
09:30
(23)
В чем сомневаетесь?
25 Kaperang
 
24.05.12
09:32
Получаем описание таблиц одной базы, выгружаем в текстовый файл.
То же - для второй базы.

Потом загружаем полученные файлики в две ТаблицаЗначений;
И на их основе генерим третью сводную - сравнивая по именам метаданных.
26 shuhard
 
24.05.12
09:35
(25) проблема не в именах таблиц
проблема во внешних ключах
нельзя записать документ раньше справочника
27 Kaperang
 
24.05.12
09:36
(26) не даст записать? или будут битые ссылки?
28 shuhard
 
24.05.12
09:37
(27) ни каких ссылок не будет
29 Kaperang
 
24.05.12
09:42
(15) а если мне нужно две и более таблицы скопировать?
запросы перечислять через ";"?
30 МихаилМ
 
24.05.12
09:46
31 МихаилМ
 
24.05.12
09:47
+(30)
не то
32 shuhard
 
24.05.12
09:49
(29) а ты в менеджмент студии щёлкни правой кнопкой по любой таблице и выбери пункт скрипт - там весь синтаксис языка станет понятен


только на запуск не запускай =)
33 Kaperang
 
24.05.12
09:51
А как тут скриншот выложить? Хочу показать, что получилось с сопоставление таблиц баз.
34 Kaperang
 
24.05.12
11:04
Дописал генерилку текста запроса. Получается текст вроде:

insert into [alpha_pr].[DBO].[_Acc30958] from (select * from [alpha_auto_test_Leonid].[DBO].[_Acc5]);
insert into [alpha_pr].[DBO].[_AccChngR31299] from (select * from [alpha_auto_test_Leonid].[DBO].[_AccChngR6125]);
35 Kaperang
 
24.05.12
11:08
(15) Пока гоняю на тестовых базах.
Выполняю через консоль запросов MS SQL Managment Studio запрос типа:

insert into [Konvert2].[DBO].[_Reference7] from (select * from [Konvert].[DBO].[_Reference7]);
insert into [Konvert2].[DBO].[_Reference8] from (select * from [Konvert].[DBO].[_Reference8]);
insert into [Konvert2].[DBO].[_Reference9] from (select * from [Konvert].[DBO].[_Reference9]);
insert into [Konvert2].[DBO].[_Reference9_VT40] from (select * from [Konvert].[DBO].[_Reference9_VT40]);
insert into [Konvert2].[DBO].[_Reference10] from (select * from [Konvert].[DBO].[_Reference10]);

Выдает ошибку:

Сообщение 156, уровень 15, состояние 1, строка 1
Неправильный синтаксис около ключевого слова "from".
Сообщение 156, уровень 15, состояние 1, строка 2
Неправильный синтаксис около ключевого слова "from".
Сообщение 156, уровень 15, состояние 1, строка 3
Неправильный синтаксис около ключевого слова "from".
Сообщение 156, уровень 15, состояние 1, строка 4
Неправильный синтаксис около ключевого слова "from".
Сообщение 156, уровень 15, состояние 1, строка 5
Неправильный синтаксис около ключевого слова "from".
Сообщение 156, уровень 15, состояние 1, строка 6

Визуально вроде все правильно. Помогите пожалуйста отладить текст запроса.
36 nicxxx
 
24.05.12
11:10
from (select *
в этой инструкции from не надо
37 Kaperang
 
24.05.12
11:12
(36) Чего то не соображу. А полностью строка запроса как будет?
38 nicxxx
 
24.05.12
11:13
insert into [Konvert2].[DBO].[_Reference7] ____удали отсюда from____ (select * from [Konvert].[DBO].[_Reference7])
39 nicxxx
 
24.05.12
11:13
и круглые скобки тоже убери:
insert into [Konvert2].[DBO].[_Reference7] select * from [Konvert].[DBO].[_Reference7]
40 Kaperang
 
24.05.12
11:14
(39) ок, сейчас попробую
41 Kaperang
 
24.05.12
11:17
(39)
текст запроса:

insert into [Konvert2].[DBO].[_Reference7] select * from [Konvert].[DBO].[_Reference7];

выдает ошибку:

Сообщение 273, уровень 16, состояние 1, строка 2
Не удалось вставить явное значение в столбец временной метки. Используйте INSERT со списком столбцов, чтобы исключить столбец временной метки, либо вставьте DEFAULT в столбец временной метки.
42 nicxxx
 
24.05.12
11:19
значит "select *" не катит, перечисляй нужные поля select field1, field2 ...
43 shuhard
 
24.05.12
11:20
(41) есть поля, в которые нельзя записать INSERT,
скорее всего это поле _Version
44 Kaperang
 
24.05.12
11:22
структуры таблиц идентичны.
мне надо строки из первой скопировать во вторую.
45 shuhard
 
24.05.12
11:28
(44) Insert Into Приёмник _IDRRef,_Marked,_IsMetadata,_Code,_Description select * FROM Источник
46 aleks-id
 
24.05.12
11:32
заходи во все таблицы __В___ которые будешь перегружать и меняй тип поля _Version с timestamp на datetime
после перегрузки смени назад на timestamp
47 shuhard
 
24.05.12
11:35
(46) вот ты накой сказал, а? будешь сам ТС объяснять =)
48 aleks-id
 
24.05.12
11:36
(47) 1:1 ))))
49 Kaperang
 
24.05.12
11:37
(46) а если перезгружать все поля, кроме _Version, чего будет?
50 aleks-id
 
24.05.12
11:39
(49) ничего плохого. но придется вместо * перечислять все поля кроме _Version

зы покури синтаксис
ALTER TABLE table
{ [ ALTER COLUMN column_name
{ new_data_type [ ( precision [ , scale ] ) ]
[ COLLATE < collation_name > ]
[ NULL | NOT NULL ]
| {ADD | DROP } ROWGUIDCOL }
]
запросом меняешь тип колонки, выгружаешь данные, меняешь тип колонки назад
51 Kaperang
 
24.05.12
11:41
(50) мудрено как то... Счас сначала попробую через принудительное перечисление полей.
52 shuhard
 
24.05.12
11:41
(49) счас проверим, грохнем и создадим заново
53 aleks-id
 
24.05.12
11:42
54 shuhard
 
24.05.12
11:44
(52) тестовая пережила
ТиИ не ругнулся
55 nicxxx
 
24.05.12
11:44
а еще быстро перенести большой объем данных можно через урбд
56 Kaperang
 
24.05.12
11:44
(53) сегодня в течение дня поэкспериментирую. Если не прокатит со скулем, на выходные запущу перегрузку традиционным способом. Пускай себе двое суток лопатит.
57 Kaperang
 
24.05.12
11:44
(54) а текст запроса какой?
58 Kaperang
 
24.05.12
11:46
(54) получается на лету изменяем тип поля?
59 shuhard
 
24.05.12
11:47
(57) я удалил _Version и создал заново
60 aleks-id
 
24.05.12
11:49
мда.  
ALTER TABLE [a1].[DBO].[_Reference25] ALTER COLUMN [_Version] datetime
Cannot alter column '_Version' because it is 'timestamp'.

вобщем или руками тип переделывай у колонки _Version а потом возвращай назад, либо перечисляй все поля.
61 shuhard
 
24.05.12
11:49
(56) но самый простой вариант, это получить имя таблицы
пробежать по ней ADOX
выкинуть _Version и построить текст запроса с явным перечислением полей
62 shuhard
 
24.05.12
11:50
(60) есть лобовой вариант:
- дропнуть поле
- инсертнуть
- создать поле
63 aleks-id
 
24.05.12
11:54
(62) не так.
-дропнуть колонку
-создать колонку с типом datetime
-инсертнуть
-альтернуть тип колонки
64 shuhard
 
24.05.12
11:56
(63) 2:2 =)
65 Kaperang
 
24.05.12
11:58
текст запроса:

insert into [].[DBO].[_Reference10] select  _IDRRef, _Marked, _IsMetadata, _ParentIDRRef, _Folder, _Code, _Description, _Fld43RRef, _Fld44RRef, _Fld45, _Fld46, _Fld47, _Fld48, _Fld49, _Fld50, _Fld51, _Fld52, _Fld53, _Fld54, _Fld55, _Fld56, _Fld57, _Fld58, _Fld59, _Fld60, _Fld61, _Fld62, _Fld63, _Fld64, _Fld65, _Fld66 from [].[DBO].[_Reference10];


ошибка:

Сообщение 1038, уровень 15, состояние 4, строка 1
Имя объекта или столбца отсутствует или пусто. Убедитесь, что каждый из столбцов в инструкции SELECT INTO имеет имя. Для других инструкций проверьте наличие пустых имен-псевдонимов. Не допускаются псевдонимы, определенные как [] или "". Измените псевдоним на допустимое имя.
Сообщение 1038, уровень 15, состояние 4, строка 1
Имя объекта или столбца отсутствует или пусто. Убедитесь, что каждый из столбцов в инструкции SELECT INTO имеет имя. Для других инструкций проверьте наличие пустых имен-псевдонимов. Не допускаются псевдонимы, определенные как [] или "". Измените псевдоним на допустимое имя.


Я так понимаю, я с именами колонок чего то недосмотрел?
66 Kaperang
 
24.05.12
11:59
поправил:

insert into [Konvert2].[DBO].[_Reference10] select  _IDRRef, _Marked, _IsMetadata, _ParentIDRRef, _Folder, _Code, _Description, _Fld43RRef, _Fld44RRef, _Fld45, _Fld46, _Fld47, _Fld48, _Fld49, _Fld50, _Fld51, _Fld52, _Fld53, _Fld54, _Fld55, _Fld56, _Fld57, _Fld58, _Fld59, _Fld60, _Fld61, _Fld62, _Fld63, _Fld64, _Fld65, _Fld66 from [Konvert].[DBO].[_Reference10];


теперь ругается:

Сообщение 213, уровень 16, состояние 1, строка 1
Имя столбца или число предоставленных значений не соответствует определению таблицы.
67 shuhard
 
24.05.12
11:59
(65) а где имена колонок в приёмнике ?
68 Kaperang
 
24.05.12
12:00
выбирал все колонка кроме "_Version".
69 Kaperang
 
24.05.12
12:01
(65) А синтакис какой?

insert _IDRRef, _Marked, _IsMetadata, _ParentIDRRef, _Folder, _Code, _Description, _Fld43RRef, _Fld44RRef, _Fld45, _Fld46, _Fld47, _Fld48, _Fld49, _Fld50, _Fld51, _Fld52, _Fld53, _Fld54, _Fld55, _Fld56, _Fld57, _Fld58, _Fld59, _Fld60, _Fld61, _Fld62, _Fld63, _Fld64, _Fld65, _Fld66 into [Konvert2].[DBO].[_Reference10] select ...
70 Kaperang
 
24.05.12
12:08
текст запроса:

insert  _IDRRef, _Marked, _IsMetadata, _ParentIDRRef, _Folder, _Code, _Description, _Fld43RRef, _Fld44RRef, _Fld45, _Fld46, _Fld47, _Fld48, _Fld49, _Fld50, _Fld51, _Fld52, _Fld53, _Fld54, _Fld55, _Fld56, _Fld57, _Fld58, _Fld59, _Fld60, _Fld61, _Fld62, _Fld63, _Fld64, _Fld65, _Fld66 into [Konvert2].[DBO].[_Reference10] select  _IDRRef, _Marked, _IsMetadata, _ParentIDRRef, _Folder, _Code, _Description, _Fld43RRef, _Fld44RRef, _Fld45, _Fld46, _Fld47, _Fld48, _Fld49, _Fld50, _Fld51, _Fld52, _Fld53, _Fld54, _Fld55, _Fld56, _Fld57, _Fld58, _Fld59, _Fld60, _Fld61, _Fld62, _Fld63, _Fld64, _Fld65, _Fld66 from [Konvert].[DBO].[_Reference10];


ругается:

Сообщение 102, уровень 15, состояние 1, строка 1
Неправильный синтаксис около конструкции ",".
71 aleks-id
 
24.05.12
12:12
мля....

ALTER TABLE [a1].[DBO].[_Reference25] DROP COLUMN [_Version]
ALTER TABLE [a1].[DBO].[_Reference25] ADD _Version datetime NULL
INSERT INTO [a1].[DBO].[_Reference25] SELECT * FROM [source].[DBO].[_Reference25]
ALTER TABLE [a1].[DBO].[_Reference25] ALTER COLUMN [_Version] timestamp NOT NULL
Cannot alter column '_Version' to be data type timestamp.

значит только так:

ALTER TABLE [a1].[DBO].[_Reference25] DROP COLUMN [_Version]
INSERT INTO [a1].[DBO].[_Reference25] SELECT * FROM [source].[DBO].[_Reference25]
ALTER TABLE [a1].[DBO].[_Reference25] ADD _Version timestamp NOT NULL
72 Kaperang
 
24.05.12
12:14
(71) я ж говорю, через ALTER TABLE мудрено...

Работающий запрос:

insert into [Konvert2].[DBO].[_Reference10](_IDRRef,_Marked,_IsMetadata,_ParentIDRRef,_Folder,_Code,_Description,_Fld43RRef,_Fld44RRef,_Fld45,_Fld46,_Fld47,_Fld48,_Fld49,_Fld50,_Fld51,_Fld52,_Fld53,_Fld54,_Fld55,_Fld56,_Fld57,_Fld58,_Fld59,_Fld60,_Fld61,_Fld62,_Fld63,_Fld64,_Fld65,_Fld66) select _IDRRef,_Marked,_IsMetadata,_ParentIDRRef,_Folder,_Code,_Description,_Fld43RRef,_Fld44RRef,_Fld45,_Fld46,_Fld47,_Fld48,_Fld49,_Fld50,_Fld51,_Fld52,_Fld53,_Fld54,_Fld55,_Fld56,_Fld57,_Fld58,_Fld59,_Fld60,_Fld61,_Fld62,_Fld63,_Fld64,_Fld65,_Fld66 from [Konvert].[DBO].[_Reference10];
73 aleks-id
 
24.05.12
12:19
вот так работает
ALTER TABLE [Konvert2].[DBO].[_Reference25] DROP COLUMN [_Version]
ALTER TABLE [Konvert2].[DBO].[_Reference25] ADD _Version datetime
INSERT INTO [Konvert2].[DBO].[_Reference25] SELECT * FROM [Konvert].[DBO].[_Reference25]
ALTER TABLE [Konvert2].[DBO].[_Reference25] DROP COLUMN [_Version]
ALTER TABLE [Konvert2].[DBO].[_Reference25] ADD _Version timestamp NOT NULL
74 Kaperang
 
24.05.12
12:22
отработало.... на то чтобы перегрузить  все объекты базы (демобаза "Конвертация данных") в аналогичную пустую базу ушло 3 минуты 26 секунд.

Средствами самой "Конвертация данных" ушло бы, думаю порядка часа )))
75 shuhard
 
24.05.12
12:28
(74) осталось малое - освоить ADOX и создать запрос


коренной вопрос:
что раньше грузить - номенклатуру или единицы измерения к ней остался за кадром
76 aleks-id
 
24.05.12
12:30
declare @tablename as varchar(100) -- имя таблицы
declare @sourcebase as varchar(100) -- база источник
declare @destbase as varchar(100) -- база приемник

SET @tablename='_Reference10'
SET @sourcebase='Konvert'
SET @destbase='Konvert2'

exec('ALTER TABLE ['+@destbase+'].[DBO].['+@tablename+'] DROP COLUMN [_Version]')
exec('ALTER TABLE ['+@destbase+'].[DBO].['+@tablename+'] ADD _Version datetime')
exec('INSERT INTO ['+@destbase+'].[DBO].['+@tablename+'] SELECT * FROM ['+@sourcebase+'].[DBO].['+@tablename+']')
exec('ALTER TABLE ['+@destbase+'].[DBO].['+@tablename+'] DROP COLUMN [_Version]')
exec('ALTER TABLE ['+@destbase+'].[DBO].['+@tablename+'] ADD _Version timestamp NOT NULL')
77 Kaperang
 
24.05.12
12:30
(75) по барабану - просто пока воторой справочник не пегегрузишь - будет много ссылоктипа "Объект не найден"
78 aleks-id
 
24.05.12
12:31
и наверное ветку можно закрывать, а (76) в базу знаний
79 Kaperang
 
24.05.12
12:32
меня сейчас другое занимает - как быть с предопределенными элементами справочников?
80 Kaperang
 
24.05.12
12:32
сча буду тестить...потом отпишусь.....
81 acsent
 
24.05.12
12:32
предопределенные не грузи
82 Kaperang
 
24.05.12
12:35
а как их отфильтровать?
83 shuhard
 
24.05.12
12:35
(79) скорее всего такие элементы помечены _IsMetadata
84 Kaperang
 
24.05.12
12:36
_IsMetadata - это признак предопределенного элемента
85 temsa
 
24.05.12
12:41
(0) А скалько весит вторая база куда собираешься грузить? Если она меньше то лучше ее грузануть на копию первлй пред этим конечно переделав конфу. И вообще что за конфы первая и вторая как они отличаются?
86 Kaperang
 
24.05.12
12:44
Первая "Альфа-Авто",  вторая - "УПП".
Размер обоих баз больше 10 Гигов каждая.

Счас слили конфигурации в одну, но общих объектов конфигурации нет.
87 Kaperang
 
24.05.12
12:46
у меня еще вопрос:

перегрузил один раз.
перегружаю тут же еще раз, выдает ошибку:

Сообщение 2627, уровень 14, состояние 1, строка 1
Нарушение "PK___Referen__AC8ED0C41A14E395" ограничения PRIMARY KEY. Невозможно вставить повторяющийся ключ в объект "dbo._Reference7".
Выполнение данной инструкции было прервано.

Понятно, эта запись уже сидит в конечной таблице.
А вот можно сделать как-нибудь, чтобы он поверх этой записи перезаписывал?
88 shuhard
 
24.05.12
12:55
(87) делай delete перед Insert
89 fisher
 
24.05.12
12:58
Ээээ... А нафига со скриптами мучаться? Или я чего-то не понимаю?
Для кого билли DTS и мощнейшие мастера импорта/экспорта делал?
90 Kaperang
 
24.05.12
13:00
а сопоставлять названия таблиц ручками предлагаете?
У меня порядка 500-800 объектов метаданных. Имена таблиц на SQL отличаются.

Предлагаете их руками сопоставлять в мастере экспорта-импорта?
91 Kaperang
 
24.05.12
13:02
я пошел следующим путем: написал 1С-ную обработку, которая автоматом сопоставляет таблицы по имена метаданных и автоматом генерит текст SQL - запросов.
92 Kaperang
 
24.05.12
13:15
(88) а как именно?

не DELETE ALL же?

мне нужно удалить только повторяющиеся строки...
93 shuhard
 
24.05.12
14:22
(92)[мне нужно удалить только повторяющиеся строки.]
вряд ли тебе стоит осваивать курсоры
но если надо - sql.ru
там примеров в достатке
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.