пятница, 6 ноября 2009 г.

Check-in, Check-out and check it back.

imageРабота системного администратора сродни работе психотерапевта:

- Доктор, у меня проблема.

- Желаете поговорить об этом? =)

Очередной запрос от пользователей поначалу показался мне легким и незамысловатым: на портале, базирующемся на ферме MOSS 2007, по какой-то причине оказались извлеченными для редактирования несколько файлов. Ошибка

The file <FileName> is checked out or locked for edition by <User>

Ну, казалось бы, что за проблема? Будучи администратором можно отменить извлечение и все. Ну, может быть у кого-то исчезнут последние изменения в файле, но в данном случае… Факты были таковы:

1) Пользователь, который якобы извлек для редактирования эти файлы вовсе не имел обыкновения работать в данной части портала

2) При попытке сделать этим файлам принудительный Check-in я был уведомлен, что в общем-то, файлы вовсе и не извлечены, так что и Check-in делать как-то не с руки. Попытки избавиться от ситуации с помощью SharePoint Designer так же не привели ни к чему.

Долго ли, коротко ли, но отчаявшись найти причину естественными методами, я прибег к противоестественным (да, да, да – я полез в базу напрямую). Не могу рекомендовать то, что я сделал, но для таких же отчаявшихся, как я – вполне сойдет. =)

Итак,

а) у каждого портала есть база, а в каждой такой базе есть таблица alldocs.

б) В этой базе нужно найти строки, касающиеся наших файлов:

select * from alldocs where dirName like '<Path/to/the/file>' and LeafName = 'File.docx'

Полученный ID и есть то, что нам нужно.

в) Проверьте, что эти файлы именно те, которые Вам нужны. Перепроверьте это (Кстати, а резервную копию базы Вы сделали?)

г) В полях CheckoutUserId, CheckoutDate & CheckoutExpires наличествуют записи, отличные от NULL. Нам нужно это исправить:

update AllDocs set CheckoutUserId = NULL, CheckoutDate = NULL, CheckoutExpires = NULL where Id = '<ID>'

Voila! 

Комментариев нет: