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

Откуда:
Сообщений: 12772
Есть таблица на полтора миллиона строк с одним varchar(5000) полем.
Когда я делаю `bcp out -с` из этой таблицы, то в выходном файле я вижу несколько четырех-килобайтных кусков с мусором.
DBCC CHECKTABLE никаких проблем не находит.
Может быть глючит сам bcp, но положение мусорных кусков и текст мусора устойчиво повторяются между запусками bcp.
Что делать? Как еще можно поискать битые страницы в таблице если dbcc ничего не нашел?
10 ноя 11, 00:45    [11572929]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти ошибку в базе.  [new]
White Owl
Member

Откуда:
Сообщений: 12772
Виноват, забыл: База в MS SQL 2008 (мигрировала с 2005)
10 ноя 11, 00:46    [11572931]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти ошибку в базе.  [new]
White Owl
Member

Откуда:
Сообщений: 12772
Как выясняется, таблица не виновата...
Виновато клиентское приложение которое записало в это самое varchar(5000) поле текст вместе с мусором.
При этом, при чтении из таблицы само приложение (и все клиентские утилиты которые я нашел) мусор игнорируют (он начинается с ASCII(0)) а вот bcp уникален, он этот мусор не игнорирует а честно пишет в выходной файл. Соответственно и `bcp in` начинает сходить с ума, ругаясь при этом на неправильные строки.

Нашел таки несколько записей которые на запрос:
select len(info_text) from table where pk=ABC
выдают ровно 5000. А если вытянуть это поле на клиента и там количество символов (пробовал vbs и perl) то получаем всего 904 символа.

Иех, кому бы голову оторвать?
10 ноя 11, 01:56    [11573029]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить