Имя: Пароль:
1C
 
Дефрагментация индексов в ms sql
0 askn
 
26.04.11
14:10
Вопрос по синтаксису
как пишут в широко распространенной статье, для запуска процедуры следует выполнить запрос:
sp_msforeachtable N'DBCC INDEXDEFRAG (<имя базы данных>, ''?'')'
, подставив в него имя базы

Вот об эту подстановку и спотыкаюсь ).
писал с угловыми скобками и без - при запуске на выполнение вылезают сообщения о синтаксических ошибках
нужно отметить, что сам ms sql server старый (2000). запрос запускаю через query analyser
1 ДенисЧ
 
26.04.11
14:14
sp_msforeachtable N'DBCC INDEXDEFRAG (WorkBase, ''?'')'
2 aleks-id
 
26.04.11
14:15
кнопка Я - первая ссылка
3 Aprobator
 
26.04.11
14:29
(0) хм, а чем мастер планов обслуживания отключен что ли?
4 Aprobator
 
26.04.11
14:31
(3) там кстати, через просмотр сценария можно будет и пример вытащить (речь про SQL менеджмент студио 2005 в частности).
5 упс
 
26.04.11
14:31
(0) попорбуйте в квадратных скобках имя базы написать
6 askn
 
26.04.11
14:35
(1) - не срабатывает так
(2) - у меня по кнопке Я ничего не открывается, поясните подробнее
(3), (4) - с мастером не разбирался
(5) - не срабатывает
7 ДенисЧ
 
26.04.11
14:35
(6) А у меня срабатывает...
8 Axel2009
 
26.04.11
14:36
(6) справа от темы топика есть кнопка Я. туда жмакнуть, откроется поиск
9 упс
 
26.04.11
14:38
(6) ну тогда сообщение об ошибке полностью покажите. И скрипт полностью.
10 Lionee
 
26.04.11
14:38
(0)sp какой стоит на sql 2000&
11 упс
 
26.04.11
14:39
(0) а вы exec перед sp_msforeachtable пишете?
12 askn
 
26.04.11
14:40
(9) например, выполняем
sp_msforeachtable N'DBCC INDEXDEFRAG (ProtonDB, ''?'')'

вылезает много вот таких повторяющихся сообщений
Server: Msg 2583, Level 16, State 3, Line 1
An incorrect number of parameters was given to the DBCC statement.
13 askn
 
26.04.11
14:42
(11) и с exec, и без него - результат один
14 МихаилМ
 
26.04.11
14:46
для мс скл > 2000
INDEXDEFRAG анахронизм

читайте документацию
http://msdn.microsoft.com/ru-ru/library/ms177571.aspx
15 упс
 
26.04.11
14:46
(13) хм.. в боле для sql server 2000 (http://msdn.microsoft.com/en-us/library/aa258286(v=sql.80).aspx ) не написано, что если не указывать имя индекса - будет выполняться для всех индексов таблицы. Попробуйте пример Б отсюда: http://msdn.microsoft.com/ru-ru/library/ms177571.aspx
16 askn
 
26.04.11
14:46
(10) sp4
17 askn
 
26.04.11
14:53
кстати parse query ничего не находит
18 askn
 
26.04.11
14:53
сообщения об ошибке вылезают при run query
19 VladZ
 
26.04.11
14:54
(0) Если не владеешь командами - потыкайся мышкой.
20 упс
 
26.04.11
14:56
(18) вы попробовали другой скрипт? у вас проблема не в том, что вы имя базы неправильно пишете, а в том что dbcc indexdefrag в sql server 2000 требует трех параметров, а вы ей даете только два.
21 askn
 
26.04.11
14:58
(20) пример Б вроде пошел
тока бы базу не убил - я его совершенно по обезьяньи скопипастил )
22 askn
 
26.04.11
14:59
(20) а что ж ему еще за параметр требуется?
23 упс
 
26.04.11
15:01
(22) имя индекса еще хочет. А "старшие" версии (2005, 2008), если имя индекса не указано, дефрагментируют все индексы. Что, имхо, странно, поскольку начиная с 2005-го советуют отказываться от indexdefrag.
Базу не убьете, но такие скрипты лучше запускать когда никто не работает. Может тупить.
24 askn
 
26.04.11
15:01
(20) запрос из примера Б отработал
выдал две таблички из трех колонок и одной строки
во всех ячейках обеих таблиц 0
25 askn
 
26.04.11
15:02
(23) спасибо за ликбез
прокомментируйте (24), если не сложно
26 упс
 
26.04.11
16:14
(25) Это значит, что в той базе данных, в контексте которой выполнялся запрос нет индексов с уровнем фрагментации больше 30% (параметр @maxfrag в скрипте). То что дал две таблички с нулями - скорее всего есть таблица, в которой нет ни одной строки, которую он почему-то решил дефрагментировать. Я уже не помню как там в QA, но скорее всего там так же как и в SSMS есть вкладка "Messages" рядом с результатом запроса - в ней можете посмотреть какую таблицу и какой индекс SQL Server пытался дефрагментировать.
Перед использованием скрипта, дописывайте в начале USE [имя бд в которой надо дефрагментировать индексы].
27 askn
 
27.04.11
08:39
(26) Большое спасибо за ответы и подробное разъяснение )
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший