Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 левые объекты в sysobjects  [new]
Romka-Fes
Member

Откуда: Kyiv
Сообщений: 456
Hi2All!
Есть такой трабл:
"Msg 2501, Level 16, State 45, Procedure asp_ReIndex, Line 19
Cannot find a table or object with the name "tmpdost". Check the system catalog."

В процедуре asp_ReIndex берутся таблицы из sysobjects (тип "U") и их имена передаются на переиндексацию параметром.

Вопрос, как может быть в sysobjects таблица, которой нет в моей БД?
Откуда она там берётся?
Как убрать её из sysobjects?

Пытался посмреть текст master..sys.sysobjects - в MS нельзя сгенерить её скрипт.

p.s. База сейчас крутится на MS SQL Server 2008. Перенёс ёё (накатив бекап) с MS SQL Server 2000.
12 авг 09, 10:30    [7526242]     Ответить | Цитировать Сообщить модератору
 Re: левые объекты в sysobjects  [new]
Glory
Member

Откуда:
Сообщений: 104760
Romka-Fes


Вопрос, как может быть в sysobjects таблица, которой нет в моей БД?
Откуда она там берётся?
Как убрать её из sysobjects?

А почему вы решили, что у вас нет объекта по имени tmpdost ?
12 авг 09, 10:35    [7526269]     Ответить | Цитировать Сообщить модератору
 Re: левые объекты в sysobjects  [new]
Romka-Fes
Member

Откуда: Kyiv
Сообщений: 456
Glory,
ожидал подобного вопроса именно от Вас :)
Я так решил потому что имею плохую привычку верить своим глазам, а имено, потому что я вижу:

1. "Msg 2501, Level 16, State 45, Procedure asp_ReIndex, Line 19
Cannot find a table or object with the name "tmpdost". Check the system catalog."

2. Просмотрел все таблицы во ВСЕХ базах на сервере (кроме системных БД есть ещё 2 базы MSSS RS, и две копии подуктивной БД (с таким же набором таблиц). Во всех этих БД НЕТ таблицы tmpdost. Нет её и в системных БД.

Если сделав такой вывод, я ошибаюсь, то прошу подсказать в чём именно. Сервер мне говорит "Check the system catalog" - я так понимаю речь идёт о sysobjects? Или где-то ещё эта табличка может "оставить свой след"? Если бы я видел текст представления sysobjects - я, надеюсь, сам бы понял в чём проблема.

p.s. Почему я ищу именно таблицы а не другие объекты? - потому что в процедуре запрос-суть курсор выглядит вот так:

DECLARE cr CURSOR FOR
select name FROM sysobjects
where xtype='U'
order by name

К сообщению приложен файл. Размер - 0Kb
12 авг 09, 10:49    [7526360]     Ответить | Цитировать Сообщить модератору
 Re: левые объекты в sysobjects  [new]
Glory
Member

Откуда:
Сообщений: 104760
uid = 30 на вашем скриншоте говорит о том, что таблица или представление принадлежит не схеме dbo,а другой
Поэтому, если не указывать при обращении полного имени, то очень легко получить сообщение Cannot find a table or object with the name "tmpdost"
12 авг 09, 10:57    [7526408]     Ответить | Цитировать Сообщить модератору
 Re: левые объекты в sysobjects  [new]
Glory
Member

Откуда:
Сообщений: 104760
И сообщение Check the system catalog. говорит о том, что нужно запустить DBCC CHECKCATALOG
12 авг 09, 11:05    [7526495]     Ответить | Цитировать Сообщить модератору
 Re: левые объекты в sysobjects  [new]
Romka-Fes
Member

Откуда: Kyiv
Сообщений: 456
Glory,
так и есть. Проблема именно в этом.
Спасибо.
Думаю, всё-таки есть смысл сделать DDL триггер, которые запретит создавать объекты в других схемах, если это возможно.
А это возможно?
12 авг 09, 11:07    [7526510]     Ответить | Цитировать Сообщить модератору
 Re: левые объекты в sysobjects  [new]
Glory
Member

Откуда:
Сообщений: 104760
Romka-Fes
Glory,
так и есть. Проблема именно в этом.
Спасибо.
Думаю, всё-таки есть смысл сделать DDL триггер, которые запретит создавать объекты в других схемах, если это возможно.
А это возможно?

А у вас кто угодно может создавать объекты в любых схемах ?
12 авг 09, 11:11    [7526546]     Ответить | Цитировать Сообщить модератору
 Re: левые объекты в sysobjects  [new]
Romka-Fes
Member

Откуда: Kyiv
Сообщений: 456
Glory,
нет, просто есть несколько разработчиков, которые это могут делать.
Человек залогинился по-ошибке под тестовым логином и сделал временную табличку для своей доработки в другой схеме.
Я пока поставил ещё условие в запрос
and uid = 1.
Мне кажется что лучше триггером отсекать создание объектов в других схемах. Или это плохая практика?
12 авг 09, 11:16    [7526600]     Ответить | Цитировать Сообщить модератору
 Re: левые объекты в sysobjects  [new]
Glory
Member

Откуда:
Сообщений: 104760
Romka-Fes
Glory,
нет, просто есть несколько разработчиков, которые это могут делать.
Человек залогинился по-ошибке под тестовым логином и сделал временную табличку для своей доработки в другой схеме.

И откуда у него права на другие схемы ? И почему ему не задана схема по-умолчанию ?
12 авг 09, 11:19    [7526625]     Ответить | Цитировать Сообщить модератору
 Re: левые объекты в sysobjects  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Romka-Fes
Glory,
нет, просто есть несколько разработчиков, которые это могут делать.
Человек залогинился по-ошибке под тестовым логином и сделал временную табличку для своей доработки в другой схеме.
Я пока поставил ещё условие в запрос
and uid = 1.
Мне кажется что лучше триггером отсекать создание объектов в других схемах. Или это плохая практика?
А почему Вы избегаете INFORMATION_SCHEMA.TABLES, INFORMATION_SCHEMA.COLUMNS и т.п.?
Схему при этом можно ограничить по имени.
12 авг 09, 11:29    [7526712]     Ответить | Цитировать Сообщить модератору
 Re: левые объекты в sysobjects  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31194
Romka-Fes
Мне кажется что лучше триггером отсекать создание объектов в других схемах. Или это плохая практика?
Прохая. Хотя бы потому, что новый объект может понадобиться серверу.

Нормальная практика - всегда указывать имя объекта при его упоминании где-бы то ни было.

Достаточно объявить о таком правиле и уволить первого нарушившего, как всё сразу станет нормально.
12 авг 09, 12:06    [7527048]     Ответить | Цитировать Сообщить модератору
 Re: левые объекты в sysobjects  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
alexeyvg
Romka-Fes
Мне кажется что лучше триггером отсекать создание объектов в других схемах. Или это плохая практика?
Прохая. Хотя бы потому, что новый объект может понадобиться серверу.

Нормальная практика - всегда указывать имя объекта при его упоминании где-бы то ни было.

Достаточно объявить о таком правиле и уволить первого нарушившего, как всё сразу станет нормально.
Увольнять сразу - круто. Просто объявить, что каждый создаваемый без схемы объект стоит всего-лишь $50 - самое оно. ;)
12 авг 09, 12:09    [7527069]     Ответить | Цитировать Сообщить модератору
 Re: левые объекты в sysobjects  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
alexeyvg
уволить первого нарушившего
А в трудовую книжку что записать?
Лучше просто пристрелить
12 авг 09, 12:10    [7527075]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить