(изменено: Mishaf, 7 марта 2007г. 15:55:16)

Тема: Обнуление тел файлов объектов TDMS

Обнуление тел файлов объектов TDMS
(Можно использовать при отправке резервных копий для внесения изменений и т.д.)


Чтобы "избавиться" от тел файлов в БД надо выполнить следующий SQL запрос:

 
USE TDMS
UPDATE TFileAttr
SET TFileAttr.F_TEXT = NULL, TFileAttr.F_VAL = NULL

Где вместо TDMS прописать имя БД.

После чего желательно выполнить еще один запрос:

 
DBCC SHRINKDATABASE (TDMS, 10)
GO

Где так же вместо TDMS прописать имя БД.

Соответственно это лучше делать не на рабочих БД, а на их копиях.

Резервную копию "урезанной" БД перед отправкой лучше всего запаковать архиватором (например, WinRar). Бэкап БД без файлов довольно не плохо сжимается: где-то раза в 3-4.

Re: Обнуление тел файлов объектов TDMS

Уточнение:

Если имя БД начинается с цифр, к примеру, "111PrevPostSuxx", то необходимо использовать двойные кавычки:
USE "111PrevPostSuxx"

В противном случае, sql analizer выдаст ошибку, что syntax is incorrect!

P.S. данная операция на большой базе занимает достаточно большое время. Желательно, дабы не тормозить рабочий процесс запускать на ночь.

Re: Обнуление тел файлов объектов TDMS

Добавлю еще. Во второй версии есть такой баг, что при програмном переносе файлов с SQL сервера на файловый сервер TDMS, файлы из базы не удаляются, а копируются. При обратном переносе такая же ситуация.
Для удаления тела файлов из базы, тех которые лежат на файловом сервере, код будет таким

USE TDMS_DB 
GO 
UPDATE TFileAttr 
SET F_VAL = Null 
WHERE TFileAttr.F_TYPE=1 
GO 
DBCC SHRINKDATABASE (TDMS_DB) 
GO

F_TYPE=1 означает что файл хранится на файл-сервере.