Гость
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / DBCC REINDEX для всех таблиц / 7 сообщений из 7, страница 1 из 1
18.08.2006, 13:18
    #33927943
icedeloff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBCC REINDEX для всех таблиц
Я использую ASE 15. Восстановил БД из дампа. При работе с таблицами, выдается ошибка о "подозрительных индексах" (suspect indexes). Для перестройки индексов в таблице можно использовать команду DBCC REINDEX. Но у меня в базе около 100 таблиц с "подозрительными индексами".


Есть ли возможность использовать данную команду для всех таблиц базы, вместо того, чтобы вручную прогонять команду по каждой таблице


Я пробовал такой скрипт, но получил ошибку, что "Declare cursor must be the only statement in the query
batch". Может, можно доработать данный скрипт?

> --Script to automatically reindex all tables in a database
>
> USE DatabaseName --Enter the name of the database you want to reindex
>
> DECLARE @TableName varchar(255)
>
> DECLARE TableCursor CURSOR FOR
> SELECT table_name FROM information_schema.tables
> WHERE table_type = 'base table'
>
> OPEN TableCursor
>
> FETCH NEXT FROM TableCursor INTO @TableName
> WHILE @@FETCH_STATUS = 0
> BEGIN
> PRINT "Reindexing " + @TableName
> DBCC DBREINDEX(@TableName,' ',90)
> FETCH NEXT FROM TableCursor INTO @TableName
> END
>
> CLOSE TableCursor
>
> DEALLOCATE TableCursor
...
Рейтинг: 0 / 0
18.08.2006, 13:44
    #33928109
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBCC REINDEX для всех таблиц
icedeloffЯ использую ASE 15. Восстановил БД из дампа. При работе с таблицами, выдается ошибка о "подозрительных индексах" (suspect indexes). Для перестройки индексов в таблице можно использовать команду DBCC REINDEX. Но у меня в базе около 100 таблиц с "подозрительными индексами".


Есть ли возможность использовать данную команду для всех таблиц базы, вместо того, чтобы вручную прогонять команду по каждой таблице


Я пробовал такой скрипт, но получил ошибку, что "Declare cursor must be the only statement in the query
batch". Может, можно доработать данный скрипт?

> --Script to automatically reindex all tables in a database
>
> USE DatabaseName --Enter the name of the database you want to reindex
>
> DECLARE @TableName varchar(255)
>
> DECLARE TableCursor CURSOR FOR
> SELECT table_name FROM information_schema.tables
> WHERE table_type = 'base table'
>
> OPEN TableCursor
>
> FETCH NEXT FROM TableCursor INTO @TableName
> WHILE @@FETCH_STATUS = 0
> BEGIN
> PRINT "Reindexing " + @TableName
> DBCC DBREINDEX(@TableName,' ',90)
> FETCH NEXT FROM TableCursor INTO @TableName
> END
>
> CLOSE TableCursor
>
> DEALLOCATE TableCursor


выполни это и получишь скрипт

Код: plaintext
1.
select 'dbcc reindex ('+table_name+','' '',90)'+char( 13 )+'go'+char( 13 )
from information_schema.tables  where table_type = 'base table' 

скрипт можно прогнать в любое время
...
Рейтинг: 0 / 0
21.08.2006, 19:51
    #33933223
_Sania
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBCC REINDEX для всех таблиц
Код: plaintext
select
всегда лучше, но если есть необходимость работать именно с курсором, то:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
USE DatabaseName --Enter the name of the database you want to reindex 
go
DECLARE TableCursor CURSOR FOR 
 SELECT table_name FROM information_schema.tables 
 WHERE table_type = 'base table' 
go
DECLARE @TableName varchar( 255 ) 
OPEN TableCursor 
 
FETCH NEXT FROM TableCursor INTO @TableName 
WHILE @@FETCH_STATUS =  0  
BEGIN 
 PRINT "Reindexing " + @TableName 
 DBCC DBREINDEX(@TableName,' ', 90 ) 
 FETCH NEXT FROM TableCursor INTO @TableName 
END 
 
CLOSE TableCursor 
DEALLOCATE TableCursor
go

А что в 15-ом синтаксис настолько поменялся?
В 12.5.3

Код: plaintext
1.
 PRINT "Reindexing " + @TableName 
не прокатит, надо писать:
Код: plaintext
1.
 PRINT "Reindexing %1!",@TableName 

Да и с курсорами синтаксис другой.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
31.05.2011, 17:56
    #37287934
blzz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBCC REINDEX для всех таблиц
Новый топик открывать лень, так что опишу тут одни детские грабельки, на которые только что наступил, с пакетным DBCC REINDEX.


Миграция с ASE 12.5 x86_64 на 15.5 ia64 с помощью dump-load
Естественно, при таком раскладе многие индексы становятся в положение suspect

DOL-таблица с unique clustered primary key: 4kk записей (по sp_spaceused). и несколькими индексами для Foreign Key.

Делаю dbcc reindex этого primary key
Checking table 'tablename' (object ID 1248004446): Logical page size is 8192 bytes.
Checking partition 'tablename_1248004446' (partition ID 1248004446) of table 'tablename'. The logical page size of this table is 8192 bytes.
One or more indexes are corrupt. They will be rebuilt.
There are 4172112.000000 rows in 433220 pages for object 'tablename'.

после чего dbcc reindex валится
Msg 1105, Level 17, State 2:
Server 'SRV', Line 1:
Can't allocate space for object 'tablename' in database 'DBNAME' because 'default' segment is full/has no free extents. If you ran out of space in syslogs, dump the transaction log. Otherwise, use ALTER DATABASE to increase the size of the segment.
DBCC execution completed. If DBCC printed error messages, contact a user with System Administrator (SA) role.

После чего у меня в таблице остается ~20k записей.
...
Рейтинг: 0 / 0
25.05.2012, 15:44
    #37811907
Дмитрий_sql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBCC REINDEX для всех таблиц
blzz,

Есть замечательные инструкции:
Перестраивают статистику и индексы:

Exec sp_MSForEachtable 'UPDATE STATISTICS ? WITH FULLSCAN'
Exec sp_MSForEachtable 'ALTER INDEX ALL ON ? REBUILD;'
...
Рейтинг: 0 / 0
25.05.2012, 19:11
    #37812447
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBCC REINDEX для всех таблиц
Дмитрий_sqlblzz,

Есть замечательные инструкции:
Перестраивают статистику и индексы:

Exec sp_MSForEachtable 'UPDATE STATISTICS ? WITH FULLSCAN'
Exec sp_MSForEachtable 'ALTER INDEX ALL ON ? REBUILD;'

а что, в Sybase ASE 15.5 уже появились недокументированные микрософтовские процедуры?
...
Рейтинг: 0 / 0
28.05.2012, 11:26
    #37814164
Дмитрий_sql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBCC REINDEX для всех таблиц
komradДмитрий_sqlblzz,

Есть замечательные инструкции:
Перестраивают статистику и индексы:

Exec sp_MSForEachtable 'UPDATE STATISTICS ? WITH FULLSCAN'
Exec sp_MSForEachtable 'ALTER INDEX ALL ON ? REBUILD;'

а что, в Sybase ASE 15.5 уже появились недокументированные микрософтовские процедуры?

Сорри. Это инструкции MS SQL
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / DBCC REINDEX для всех таблиц / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]