powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / DBCC REINDEX для всех таблиц
7 сообщений из 7, страница 1 из 1
DBCC REINDEX для всех таблиц
    #33927943
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
...
Рейтинг: 0 / 0
DBCC REINDEX для всех таблиц
    #33928109
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
DBCC REINDEX для всех таблиц
    #33933223
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Период между сообщениями больше года.
DBCC REINDEX для всех таблиц
    #37287934
blzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новый топик открывать лень, так что опишу тут одни детские грабельки, на которые только что наступил, с пакетным 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
DBCC REINDEX для всех таблиц
    #37811907
Дмитрий_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blzz,

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

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

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

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

а что, в Sybase ASE 15.5 уже появились недокументированные микрософтовские процедуры?
...
Рейтинг: 0 / 0
DBCC REINDEX для всех таблиц
    #37814164
Дмитрий_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
7 сообщений из 7, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / DBCC REINDEX для всех таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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