|
Скопировать данные из 1-го MsSql в другой
|
|||
---|---|---|---|
#18+
Всем привет, ситуация следующая. Сторонняя организация поставила MsSql бесплатную версию в качестве БД (БД1) для СКУД(СистемаУправленияДоступомПерсонала) на обычном ПК. Соответственно туда сыпятся данные о прохождении сотрудников через контрольные точки. Теперь понадобилось тянуть оттуда данные в новую систему (НС) . Обнаружилось: 1) База данных сконфигурирована ужасно - нет индексов,дублирование данных и прочие прелести. 2) Железо не подходит по эти задачи. 3) Ввиду того, что лицензия бесплатная,соответственно работает 1 ядро со всеми вытекающими. При выполнении несложных запросов еще получалось уложиться в адекватные сроки ответа базы, но когда потребовалось вытягивать данные посложнее и побольше, то база явно не вывозит и рвет соединение. Если один сложный запрос, то еще с вероятностью 80% отработает, если запустишь 2 сразу то оба соединения принудительно обрываются сервером баз данных. У меня есть строка подключения к этой базе данных, но лезть в нее и производить настройку индексов и оптимизацию нельзя. Думаю сделать следующий костыль: На нормальном железе есть нормальный лицензионный MSSQL c лицензиями на несколько ядер (БД2) . Хочу в относительно ненагруженный период брать только необходимые для (НС) данные из (БД1) и заливать их в (БД2) . Объем переносимых строк ~9000 строк с 5 столбцами. Если я запускаю запрос к (БД1) , который должен стянуть эти 9000, я не могу получить результат-сервер (БД1) пишет, что произошла ошибка. Если я беру условия фильтрации немного другие и хочу получить 4500 строк, то запрос долго, но все-таки выполняется. Соответственно я вижу следующие стратегии: Слинковать 2 сервера и настроить джобер по копированию данных из (БД1) в (БД2) . Сделать сервис-джобер с использование SqlDataReader или SqlBulkCopy Соответственно каким способом можно с наибольшей вероятностью без ошибок перекинуть данные- скорость не критична, пусть она выполняется хоть час, но гарантировано перенесет данные. Есть что-то по аналогии yield return, только при извлечении данных из (БД1) , чтобы не получать весь набор и ронять (БД1) , а получать порциями поменьше. Может еще есть какие-либо способы? Отлично понимаю причины вышеизложенной ситуации, нормальные методы их решения, но это сейчас не применимо, не спрашивайте почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 16:29 |
|
Скопировать данные из 1-го MsSql в другой
|
|||
---|---|---|---|
#18+
vb_sub Хочу в относительно ненагруженный период брать только необходимые для (НС) данные из (БД1) и заливать их в (БД2) . Бэкап настрой на это время, затем восстанавливай его куда тебе надо и там делай все что хочешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 16:35 |
|
Скопировать данные из 1-го MsSql в другой
|
|||
---|---|---|---|
#18+
Dima T, мне нужна не вся база, а только 3 таблицы + новые записи за прошедшие сутки. Разве такой бэкап можно настроить? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 16:37 |
|
Скопировать данные из 1-го MsSql в другой
|
|||
---|---|---|---|
#18+
А с какой ошибкой отваливается запрос? Таймаут? Грязные чтения допустимы? Может, попробовать переливать данные в режиме read uncommitted? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 17:51 |
|
Скопировать данные из 1-го MsSql в другой
|
|||
---|---|---|---|
#18+
vb_sub Dima T, мне нужна не вся база, а только 3 таблицы + новые записи за прошедшие сутки. Разве такой бэкап можно настроить? Можно эти 3 таблицы SSIS-пакетом (делается элементарно из DTSWizard) переливать по расписанию к себе на сервер в какую-нибудь базу сбоку, а потом из этой базы забирать нужное. Ну, будет некоторый оверхед по объёму перегоняемых данных, зато, вполне возможно, задача будет решена. Ну, и эти таблицы можно забирать и вливать с помощью bсp - тоже как вариант. Быстрее, чем bcp, вряд ли что отработает. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 17:57 |
|
Скопировать данные из 1-го MsSql в другой
|
|||
---|---|---|---|
#18+
vb_sub, авторто база явно не вывозит и рвет соединениепохоже на бред ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 20:26 |
|
Скопировать данные из 1-го MsSql в другой
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Ошибка: При выполнении текущей команды возникла серьезная ошибка.. При наличии результатов они должны быть аннулированы. Грязные чтения допустимы, так как в таблицу идут только инсерты. Попробую профайлер запустить, чтобы больше информации об ошибке взять. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2019, 09:52 |
|
Скопировать данные из 1-го MsSql в другой
|
|||
---|---|---|---|
#18+
vb_sub Грязные чтения допустимы, так как в таблицу идут только инсерты. для грязного чтения доджно быть задано Код: sql 1.
в SqlCommand таймаут задать полезно ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2019, 11:30 |
|
|
start [/forum/topic.php?fid=20&fpage=14&tid=1398709]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 138ms |
0 / 0 |