Столкнулся с интересной проблемой и просто в ступоре.
Значит, ситуация. Есть битая база MS SQL 2000 (куча torn pages - полетели
винты в раиде). База подцеплена стандартным хитрым методом, путем подмены
файлов БД с таким же именем и ручной простановкой статуса emergency в
sysdatabases.
95% данных присутствует и читается. НО! Обратиться запросом к таблицам,
выполнить процедуры и т.п., начинающиеся с буквы Z, не получается - говорит
про torn page, причем в одном и том же месте для всех. select * from
sysobjects в базе отрабатывает нормально, т.е. однозначен вывод - битый
индекс ncsysobjects.
Логично - при выполнении запросов сервер обращается за информацией об
объекте в sysobjects, поиск по имени выполняет с помощью индекса - и
обламывается.
ВНИМАНИЕ, ВОПРОС: можно ли как-то заставить оптимизатор ВООБЩЕ не
использовать оптимизацию в запросе? Т.е. выполнять простой table scan для
_всех_ таблиц, включая и системные, напрямую в запросе не упомянутые?
Перестроить индекс, как явствует из контекста, я не могу - данные доступны
только на чтение.
--
С уважением, Сергей.
E-mail: ser...@energomash.ru
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
SG> Столкнулся с интересной проблемой и просто в ступоре.
В дополнение - подтверждение "битости" индекса:
select * from sysobjects where name = 'Z_Table_Name' -- обламывается на torn
page
select * from sysobjects with (index(0)) where name = 'Z_Table_Name' --
выполняется нормально
Да, MS SQL 2000 - SP3. Сорри, что не упомянул сразу.
--
С уважением, Сергей.
ser...@energomash.ru
ICQ: 63474652
22 мая 2006 года (а было тогда 12:21)
Sergey Gerasin в своем письме к All писал:
SG> Перестроить индекс, как явствует из контекста, я не могу - данные
SG> доступны только на чтение.
Тупое предложение - а если просто перенести (через DTS) все данные в новую
базу?
-+-
С уважением, Denis 22 мая 2006 года
[winamp is playing]:: Abba - Super Trouper