FossBARC и Архивная база

Обсуждение работы программы Корпоративная электронная почта FossMail


VakulenkoIA
Пользователь
Сообщения: 21
Зарегистрирован: 19 фев 2009, 10:41
2 + 2 = ?: 4
Откуда: ОщадБанк, Николаев
Контактная информация:

FossBARC и Архивная база

Сообщение VakulenkoIA » 22 май 2009, 09:07

Доброе время суток.

FossMail версии 4.4.4.0

Рабочая база разрослась и запросы выполняються долго. Заглянул в Архивную базу, а там даже таблицы не создались.

Фрагмент конфига:

Код: Выделить всё

[FBARC]
; Сколько дней хранить данные в рабочей базе,
; после чего они переносятся в архивную базу
#WORKBASE_DAYS=30
; За сколько дней от #WORKBASE_DAYS переносить данные (умолчание - 365)
;#REMOVED_DAYS=365
; Сколько дней хранить данные в архивной базе
; после чего они удаляются окончательно
; (при запуске с параметром -auto)
; 0 - не удалять вообще
#ARCBASE_DAYS=0
; пример коннекта к MS SQL
;#ARC_CONNECTION_STR=DSN=FOSS;DBQ=C:\Fossmail32\BASE\FOSSARC.MDB;DriverId=281;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;
#ARC_CONNECTION_STR=DSN=FossArcMS;SERVER=S-014-06;UID=sa;PWD=********
#IGNORE_ERRORS=23000,23s00, 23400
ConnectionString взял с [MSERVER] :

Код: Выделить всё

#CONNECTION_STR=DSN=FossMS;SERVER=S-014-06;UID=sa;PWD=*******

Подскажите как должно быть?

FossWare
Пользователь
Сообщения: 380
Зарегистрирован: 19 дек 2008, 17:28

Re: FossBARC и Архивная база

Сообщение FossWare » 22 май 2009, 13:15

Рабочая база разрослась и запросы выполняються долго. Заглянул в Архивную базу, а там даже таблицы не создались.
Архивирование БД нужно запускать в ручную. Автоматического режима для архивирования БД не предусмотрено.

VakulenkoIA
Пользователь
Сообщения: 21
Зарегистрирован: 19 фев 2009, 10:41
2 + 2 = ?: 4
Откуда: ОщадБанк, Николаев
Контактная информация:

Re: FossBARC и Архивная база

Сообщение VakulenkoIA » 22 май 2009, 15:20

Самому скрипт писать? или есть чтото в сервере?

FossWare
Пользователь
Сообщения: 380
Зарегистрирован: 19 дек 2008, 17:28

Re: FossBARC и Архивная база

Сообщение FossWare » 22 май 2009, 16:33

Самому скрипт писать?
Да, если вы хотите чтобы в дальнейшем архивация БД выполнялась по расписанию без участия оператора, то нужно написать либо скрипт, либо батник и завести учетную запись в планировщике. Для того чтобы архивация запускалась в "тихом режиме" нужно указать такую строку fbarc -с d:\foss\host.cfg -l –e [-auto].
где host.cfg - имя файла конфигурации системы FOSSMAIL32
-e - вести файл ошибок
-l - вести файл сообщений
-auto – запуск программы в автоматическом режиме
Более подробно об этом можно прочесть в инструкции по настройке FBArc которая находится в каталоге сервера в папке Doc, fbarc.doc.

VakulenkoIA
Пользователь
Сообщения: 21
Зарегистрирован: 19 фев 2009, 10:41
2 + 2 = ?: 4
Откуда: ОщадБанк, Николаев
Контактная информация:

Re: FossBARC и Архивная база

Сообщение VakulenkoIA » 23 май 2009, 12:44

Спасибо. Посмотрел.
Запускал fbarc в режиме окна. При перемещении записей в архивную базу. Тормозит на одной записи с номером 37000, и архивная юаза остается пустая. Пробовал удалить эту запись, непомогло.

Буду пробовать писать скрипт.

VakulenkoIA
Пользователь
Сообщения: 21
Зарегистрирован: 19 фев 2009, 10:41
2 + 2 = ?: 4
Откуда: ОщадБанк, Николаев
Контактная информация:

Re: FossBARC и Архивная база

Сообщение VakulenkoIA » 23 май 2009, 17:31

Чтото типа такого:

Код: Выделить всё

print '['+CONVERT(varchar(10), GETDATE(), 4) + ' ' + CONVERT(varchar(8), GETDATE(), 108)+'] '+'Начинаю...'
print ''
print 'Устанавливаю текущую базу : FossMail'
USE FossMail
GO

declare @CurYear varchar(4)
set @CurYear = CONVERT(varchar(4),DATEPART(yyyy,GETDATE()))

declare @CurMonth varchar(2)
declare @NCurMonth varchar(2)
declare @int_CurMonth int
set @int_CurMonth = DATEPART(m,GETDATE())
set @CurMonth = CONVERT(varchar(2),@int_CurMonth)
if @int_CurMonth<10 set @CurMonth='0'+@CurMonth

declare @SearchDate varchar(7)
set @SearchDate = @CurYear+@CurMonth+'%';

print ''
print 'Вичислил текущую дату для отбора ['+@SearchDate+']' 

print ''
print 'Копирую записи MESSLIST в архивную базу' 
insert into FossMailArc.dbo.MESSLIST
	select * from dbo.MESSLIST WHERE (IT not LIKE @SearchDate)

print ''
print 'Создаю курсор на MESSLIST с фильтром IT='+@SearchDate

DECLARE CursorSearchMASSLIST CURSOR FOR SELECT ID FROM dbo.MESSLIST WHERE (IT not LIKE @SearchDate)
OPEN CursorSearchMASSLIST

DECLARE @ID_O varchar(42)

WHILE 1=1 BEGIN
  FETCH FROM CursorSearchMASSLIST INTO @ID_O
  IF @@fetch_status=-1 
      BREAK
  IF @@fetch_status=-2
      CONTINUE
	PRINT ''
	PRINT '  : '+@ID_O
	PRINT '      Копирую запис(и) FILELIST'
		insert into FossMailArc.dbo.FILELIST
			select * from dbo.FILELIST WHERE (ID = @ID_O)
	PRINT '      Удаляю запис(и) FILELIST'
		delete from dbo.FILELIST WHERE (ID = @ID_O)
	PRINT '      Копирую запис(и) RECPLIST'
		insert into FossMailArc.dbo.RECPLIST
			select * from dbo.RECPLIST WHERE (ID = @ID_O)
	PRINT '      Удаляю запис(и) RECPLIST'
		delete from dbo.RECPLIST WHERE (ID = @ID_O)
 END

DEALLOCATE CursorSearchMASSLIST

print ''
print 'Удаляю старые записи MESSLIST' 


delete from dbo.MESSLIST WHERE (IT not LIKE @SearchDate)

GO
print ''
print '['+CONVERT(varchar(10), GETDATE(), 4) + ' ' + CONVERT(varchar(8), GETDATE(), 108)+'] '+'Завершил :)'
Скрипт переносит записи в архивную базу старше первого дня текущего месяца.

lyk
Разработчики Fossmail
Сообщения: 38
Зарегистрирован: 19 фев 2009, 11:44
2 + 2 = ?: 4

Re: FossBARC и Архивная база

Сообщение lyk » 25 май 2009, 08:27

3700 - "ошибка доступа или синтаксическая ошибка". Что именно - в логе должна быть вся возвращаемая строка. Надо добиться нормальной работы при ручном запуске, а после - можно и в автомате запускать. Кстати - какая СУБД?

VakulenkoIA
Пользователь
Сообщения: 21
Зарегистрирован: 19 фев 2009, 10:41
2 + 2 = ?: 4
Откуда: ОщадБанк, Николаев
Контактная информация:

Re: FossBARC и Архивная база

Сообщение VakulenkoIA » 01 июн 2009, 07:53

lyk писал(а):3700 - "ошибка доступа или синтаксическая ошибка". Что именно - в логе должна быть вся возвращаемая строка. Надо добиться нормальной работы при ручном запуске, а после - можно и в автомате запускать. Кстати - какая СУБД?
СУБД - MSSQL 2005 Express.

Проверено, работает. Синтаксических ошибок нет. Скрипт не идеален. Нет реакций на случай ошибок. Но это как вариант...
Доработать попробую.

VakulenkoIA
Пользователь
Сообщения: 21
Зарегистрирован: 19 фев 2009, 10:41
2 + 2 = ?: 4
Откуда: ОщадБанк, Николаев
Контактная информация:

Re: FossBARC и Архивная база

Сообщение VakulenkoIA » 01 июн 2009, 15:12

Более полноценный скрипт v1.0
MoveOldToArc_1.0.zip
(1.25 КБ) 510 скачиваний
А лог получаю такой:

Код: Выделить всё

[01.06.09 09:51:48] Начинаю...
 
Устанавливаю текущую базу : FossMail
 
Вичислил текущую дату для отбора [200906%]
 
Копирую записи MESSLIST в архивную базу

(97754 row(s) affected)
 
Создаю курсор на MESSLIST с фильтром IT=200906%
 
...
...

      Копирую запис(и) RECPLIST

(1 row(s) affected)
      Удаляю запис(и) RECPLIST

(1 row(s) affected)
 
  : S~20090526090713ACVP2NLQJKNARMF
      Копирую запис(и) FILELIST

(1 row(s) affected)
      Удаляю запис(и) FILELIST

(1 row(s) affected)
      Копирую запис(и) RECPLIST

(1 row(s) affected)
      Удаляю запис(и) RECPLIST

(1 row(s) affected)
 
Удаляю старые записи MESSLIST

(97754 row(s) affected)
 
[01.06.09 09:54:23] Завершил :)

lyk
Разработчики Fossmail
Сообщения: 38
Зарегистрирован: 19 фев 2009, 11:44
2 + 2 = ?: 4

Re: FossBARC и Архивная база

Сообщение lyk » 01 июн 2009, 19:12

Есть возможность игнорировать некоторые коды ошибок - в host.cfg/[fbark] добавить в стоку игнорирования код ошибки
#IGNORE_ERRORS = 3700;//23000,23s00, 23400
Правда, я не понял, почему эта ошибка в принципе появляется.

Ответить

Вернуться в «FossMail»