Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
vjut
Member

Откуда: Moscow
Сообщений: 142
Добрый день, Коллеги!
Неоднократно на форуме поднимается вопрос скриптования процедур/таблиц/и т.д. на сервере.
Как один из вариантов предлагается использовать встроенную функцию в SSMS Tasks -> Generate
(необходимо выгрузить код процедур в отдельные файлы для последующей загрузки в SVN)

Проблема заключается в том, что для некоторых баз в которых не особенно много объектов - это работает.
Но одна из баз содержит более 20 000 процедур и неважно сколько из них мы выберем (хотя бы парочку) - процес останавливается на этапе "Getting the list of objects...". Про попытку заскриптовать сразу все объекты я уже не говорю.

Аналогичная проблема в Visual Studio, когда пытаемся импортнуть объекты БД в проект. (виснет наглухо)

SQL Server Management Studion 10.50.2500.0
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)
10 июн 14, 17:43    [16150655]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
wizli
Member

Откуда: Minsk
Сообщений: 270
vjut,
А вы пробовали смотреть наличие блокировок? Может вас кто-то лочит?
10 июн 14, 17:48    [16150671]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4823
Попробуйте воспользоваться SSIS -> Transfer Database Task
10 июн 14, 17:59    [16150728]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
vjut
Member

Откуда: Moscow
Сообщений: 142
Пробовал. Даже с профайлером смотрел. Такое впечатление что сервер просто ничего не делает. Т.е. до запросов к БД он даже не доходит.
10 июн 14, 18:00    [16150731]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
wizli
Member

Откуда: Minsk
Сообщений: 270
vjut,
Попробуйте написать свой скрипт, который будет обращаться к DMV за исходным кодом объектов.
10 июн 14, 18:01    [16150738]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4823
vjut
Пробовал. Даже с профайлером смотрел. Такое впечатление что сервер просто ничего не делает. Т.е. до запросов к БД он даже не доходит.


Дело ясное, что дело тёмное. Поищите незакрытые транзакции с DDL операциями.

Может быть такое, что кто-то запустил ALTER PROCEDURE, а в этот момент объект, на который завязана процедура используется (курсор на нём открыт и т.п.)

Выглядит так, что залочено что-то.
10 июн 14, 18:26    [16150862]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
NickAlex66
Member

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

Было похожее на 2005 - сходу заскриптовать все объекты не получалось. Получал сообщение о нехватке памяти. Скриптовал порциями: сначала таблицы, потом хранимки с некоторой разбивкой по алфавиту :) По итогу скриптов вышло на 1.5 GB
10 июн 14, 18:36    [16150891]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
vjut
Member

Откуда: Moscow
Сообщений: 142
NickAlex66
vjut,

Было похожее на 2005


Вот я тоже с этой проблемой бился пять лет назад. Но тогда забил на это, выгрузил ручками порядка несколько сотен процедур.
Сейчас опять понадобилось, думал в 2008-ом сервере мелкомягкие это поправили. Ан нет.
10 июн 14, 18:52    [16150951]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4823
А полный backup/restore не быстрее будет сделать ?
10 июн 14, 18:54    [16150959]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
vjut
Member

Откуда: Moscow
Сообщений: 142
wizli
vjut,
Попробуйте написать свой скрипт, который будет обращаться к DMV за исходным кодом объектов.


через sqlcmd? там другая проблема, либо форматирование слетает, либо ограничение на 8000 символов. А у меня есть процедурки длинные.
10 июн 14, 18:54    [16150960]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
vjut
Member

Откуда: Moscow
Сообщений: 142
a_voronin
Попробуйте воспользоваться SSIS -> Transfer Database Task

Попробовали. Создали базу куда можно было бы перетащить ограниченный список процедур. Та же ерунда. SSIS пакет просто висит.
10 июн 14, 18:55    [16150968]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
vjut
Member

Откуда: Moscow
Сообщений: 142
a_voronin
А полный backup/restore не быстрее будет сделать ?

И как это поможет? Задача: получить скрипт выделенных процедур, каждая в отдельном файле.
10 июн 14, 18:56    [16150972]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31823
vjut
wizli
vjut,
Попробуйте написать свой скрипт, который будет обращаться к DMV за исходным кодом объектов.


через sqlcmd? там другая проблема, либо форматирование слетает, либо ограничение на 8000 символов. А у меня есть процедурки длинные.
Можно сделать скрипт на VB, наприменр; текст вытаскивать через OBJECT_DEFINITION

А вообще конечно безобразие, что не работает. Есть и ещё одна бага - SSMS может молча пропускать некоторые процедуры, так что ненадёжное средство.

Ещё вариант - попробуйте установить последний SP, или использовать SSMS более старшей версии (например, поставьте на какую нибуть машину SSMS 2014)
10 июн 14, 19:39    [16151113]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
wizli
Member

Откуда: Minsk
Сообщений: 270
vjut
wizli
vjut,
Попробуйте написать свой скрипт, который будет обращаться к DMV за исходным кодом объектов.


через sqlcmd? там другая проблема, либо форматирование слетает, либо ограничение на 8000 символов. А у меня есть процедурки длинные.


Нет, я не имел ввиду sqlcmd, а написать скрипт такого типа.
select	o.name
      , m.definition
from	[Database Name].sys.objects as o 
	inner join [Database Name].sys.sql_modules as m on m.object_id = o.object_id
where	o.type = 'P';
10 июн 14, 19:52    [16151157]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
o-o
Guest
[quot alexeyvg Есть и ещё одна бага - SSMS может молча пропускать некоторые процедуры, так что ненадёжное средство.

[/quot]

во, точно, у меня было, что при SSMS Tasks -> Generate пропускались процедуры.
причем так и не удалось выяснить, по какому принципу.
мне тогда посоветовали через Object Explorer Details (F7) сделать, и вот тогда да, проканалось.
не помню в чем разница была, но примерно так: если Generate,
то оно запускает еще кучу генераций объектов и их dependencies,
а вот если через Object Explorer Details выбирать, то dependencies не генерит.
10 июн 14, 19:59    [16151186]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
o-o
Guest
вот оно
10 июн 14, 20:02    [16151196]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31823
o-o
вот оно
Точно, про этот случай я и вспомнил, спасибо.

Может, и ТС поможет?
10 июн 14, 20:25    [16151288]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
vjut
Member

Откуда: Moscow
Сообщений: 142
o-o
вот оно


Да читал тему.
Но мне F7 не подходит.
Мне нужно каждую процедуру в отдельный файл для SVN-а.
Парсер писать - это убожество какое-то и костыли.

Нет, я, конечно, если других способов не найду, напишу скриптинг на SMO. Но уж больно неправильно это. Есть функция, она заявлена, но не работает на ровном месте (ну что такого в нескольких тысячах объектов? сервер, который ворочает террабайты данных, со своими-то объектами разобраться не может).
11 июн 14, 10:05    [16152644]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
vjut
Member

Откуда: Moscow
Сообщений: 142
wizli
Нет, я не имел ввиду sqlcmd, а написать скрипт такого типа.
select	o.name
      , m.definition
from	[Database Name].sys.objects as o 
	inner join [Database Name].sys.sql_modules as m on m.object_id = o.object_id
where	o.type = 'P';


И как это поможет решить задачу "заскриптовать полный текст процедур в отдельные файлы"?
11 июн 14, 10:09    [16152673]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
Dan Khatskevich
Member

Откуда:
Сообщений: 324
даааа, беда.
11 июн 14, 11:35    [16153334]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8493
Dan Khatskevich, не далее, чем неделю назад, если не ошибаюсь, по конференции пролетала реклама бесплатной утилиты для скриптования процедур всей базы. Действительно быстро это делает и в огромном количестве:) Но таблицы не скриптует.
11 июн 14, 11:45    [16153431]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
Artyomik
Member

Откуда:
Сообщений: 16
Предлагаю воспользоваться Spindle scripting tool - бесплатным дополнением для Sql Server Managment Studio.
Ссылка на сообщение тут
11 июн 14, 13:02    [16154086]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
alexeyvg
Можно сделать скрипт на VB
Все упорно не хотят избавиться от этого говна как VB и нормальный Баш PowerShell заюзать ...
vjut
Нет, я, конечно, если других способов не найду, напишу скриптинг на SMO. Но уж больно неправильно это. Есть функция, она заявлена, но не работает на ровном месте (ну что такого в нескольких тысячах объектов? сервер, который ворочает террабайты данных, со своими-то объектами разобраться не может).
Вообщето, скопировать триллион мелких файлов в миллионе папок это не один файлик на террабайт скопировать.
И не ставили они такой задачи, да и там кучу всего походу делается.

И скриптинг на SMO это нормально. У M$ всегда туго на поддержку, и ихние "решения" (Feature Pack) частенько полный индусский хлам.

Не знаю, совет в тёмную, но не факт что лучшее решение, работать через базу. Может всё-таки Viasual Studio DataBase Project + SQL Data Tools?
Как вариант с другим подходом - тот же VS DB SDT, но попробывать найти команду обновления проекта через MS Build. Тёмный лес.

Я в одно время пытался сторить через оснаску
add-pssnapin SqlServerCmdletSnapin100;
add-pssnapin SqlServerProviderSnapin100;
Возможно ещё хуже чем Generate Scripts, может и нет.
Но меня это не устраивало, мне нужны были секунды ... на все базы. :)
Но зависаний не было, это точно. Я ещё умудрялся отфильтровать не нужное мне, а для вас может пойдёт сторить всё без разбора - 5 строк скрипта.
Ща выложить не могу (что бы вы не парились в незнакомой вам среде), нет под рукой. Если надо - свисните, покопаюсь в архивах, может отрою.
13 июн 14, 03:18    [16160521]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Artyomik, и кто будет гарантировать что всё учтено, и вы не забыли как-то там параметр? К примеру рутинг очередей.
На продакшин это никто не поставит.
Тоже делал "свой" генератор, но это чисто локально, код можно поправить в любой момент, и то только ради форматирования (и фильтрованием лишнего), согласно внутренним соглашениям предприятия.

Ссылка что-то мне не открылась.
13 июн 14, 03:28    [16160534]     Ответить | Цитировать Сообщить модератору
 Re: SSMS 2008 R2 Tasks -> Generate Scripts (производительность)  [new]
Андрей Таранов
Member

Откуда: оттуда
Сообщений: 150
vjut,
попробуйте от этого оттолкнуться (PowerShell)
  $server 			= "co1mpfrsqlagg02"
    $outputfile		= "D:\snap\ddl\"
    $schema 			= "dbo"

    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null 
 
    $srv = New-Object Microsoft.SqlServer.Management.Smo.Server("$server") 
    $db = New-Object Microsoft.SqlServer.Management.Smo.Database 
    $scrp = New-Object Microsoft.SqlServer.Management.Smo.Scripter($srv) 
    
    $scrp.Options.ScriptDrops = $FALSE 
    $scrp.Options.WithDependencies = $TRUE 
    
    $dbs = $srv.Databases
    foreach($db in $dbs) 
    {
        $tbs=$db.StoredProcedures    
 
        foreach($tb in $tbs) 
       { 
           $outputfile2=$outputfile+$server+"."+$db.name+"."+$tb.name+".sql"
           $script=$tb.Script() 
           $script >> $outputfile2 
           "GO" >> $outputfile2
       }
    }
13 июн 14, 04:55    [16160558]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить