Архивирование баз

  • Автор темы drugsjoke
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

drugsjoke

#1
В общем есть агент который делает бэкап баз на серверах, появилось желание автоматом эти самые базы архивировать...
коллекция доков с инфой о базах которые надо бэкапить берется из вида, базы копируются(не реплицируются), копия проходит вс ОК, но при архивации пишется что файл(уже скопированная база) используется приложением, т.е. агент держит инфу о них в себе, как этого избежать?????
Помогите уже пол дня тыкаюсь :)
 

Kee_Keekkenen

Well-known member
05.09.2006
639
4
#2
не плохо бы на код посмотреть где происходит копирование, а затем архивация..<br>а вообще закрывать базы после копировани надо или удалять ссылки в коде на них..<br><br>
 

morpheus

скриптописец
07.08.2006
3 915
1
#3
Для: drugsjoke
да Kee_Keekkenen прав, стоит посмотреть не обнуля.ються ли привязки к БД ну т.п.,
 
D

drugsjoke

#4
Для: drugsjoke
да Kee_Keekkenen прав, стоит посмотреть не обнуля.ються ли привязки к БД ну т.п.,
Привязки не обнуляются в том то и дело, ну никак не могу понять как их обнулить
Код:
'---------------------------------------------------------------------------------------------------------
' Class collect - получения дока в котором хранится инфа для бэкапа 
'и обработка его классом ArcdATABASE
'---------------------------------------------------------------------------------------------------------

Class collect
Public doc As NotesDocument

Private ArcDB As ArcDATABASE	

Sub new 

Dim s As New NotesSession
Dim view As NotesView
Dim Press As Pressing

Set db=s.CurrentDatabase
Set view = db.GetView("MainV")
Set doc = view.GetFirstDocument	
While Not(doc Is Nothing)		
Set ArcDB = New ArcDATABASE(doc)
Set doc = view.GetNextDocument(doc)
Wend
End Sub	
End Class




'---------------------------------------------------------------------------------------------------------
' Class ArcdATABASE - архивирование БД
'
'---------------------------------------------------------------------------------------------------------

Class ArcDATABASE
Public dbCopy As NotesDatabase	
Public resultbase As String


Private archiveDb As NotesDatabase
Private ItemBase As NotesItem
Private ItemPath As NotesItem
Private ItemServ As NotesItem		



Sub new (doc As NotesDocument)
Call Me.init(doc)	
Call CreatDir		
Call arc		
End Sub


Sub init(doc As NotesDocument)
Dim s As New NotesSession		

Set ItemBase = doc.GetFirstItem("BaseNames")
Set ItemPath = doc.GetFirstItem("Path")
Set ItemServ = doc.GetFirstItem("Serv")
Set dbCopy = s.GetDatabase(itemserv.Text,Itembase.Text)		
End Sub


Sub CreatDir
Chdir (itempath.text)
a$ = Str(Date-1)
ZZZ = 	(Strrightback(a$,".20")+Strleft(Strright(a$,"."),".")+Strleft(a$,"."))			
pathnames = ItemPath.Text + "\*.*"
dirs = Dir(pathnames,16)		

Do While dirs <> ""
If	ZZZ = dirs Then
Goto	gogogo
End If

dirs = Dir()
Loop
Mkdir ZZZ 
gogogo:		
End Sub

Sub arc
Dim doccoll As NotesDocumentCollection
Dim docarc As NotesDocument		

a$ = Str(Date-1)
ZZZ = 	(Strrightback(a$,".20")+Strleft(Strright(a$,"."),".")+Strleft(a$,"."))
resultbase = ItemPath.Text + "\" +ZZZ+"\"+ Strleft(dbcopy.FileName,".")+ZZZ+Strleft(itemserv.Text,"/")

Set archiveDb = dbCopy.CreateCopy("",resultbase+".nsf")
Set doccoll = dbCopy.AllDocuments
Set docArc = doccoll.GetFirstDocument
i=0	
While Not docArc Is Nothing
i=i+1			
Print i			
Call docArc.CopyToDatabase(archiveDb)
Set docArc = doccoll.GetNextDocument(docarc)
Wend
End Sub
End Class


'---------------------------------------------------------------------------------------------------------
' Class Pressing - сжатие скопированной бд архиватором
'
'---------------------------------------------------------------------------------------------------------
Class Pressing
Public baseDoc As NotesDocument

Sub new 
Dim s As New NotesSession
Dim view As NotesView
Dim ItemBase As NotesItem
Dim ItemPath As NotesItem
Dim ItemServ As NotesItem		
Dim dbCopy As NotesDatabase

Set db=s.CurrentDatabase
Set view = db.GetView("MainV")
Set baseDoc = view.GetFirstDocument	
While Not(baseDoc Is Nothing)		
Set ItemBase = baseDoc.GetFirstItem("BaseNames")
Set ItemPath = baseDoc.GetFirstItem("Path")
Set ItemServ = baseDoc.GetFirstItem("Serv")	
Set dbCopy = s.GetDatabase(itemserv.Text,Itembase.Text)	

a$ = Str(Date-1)
ZZZ = 	(Strrightback(a$,".20")+Strleft(Strright(a$,"."),".")+Strleft(a$,"."))
resultbas = ItemPath.Text + "\" +ZZZ+"\"+ Strleft(dbcopy.FileName,".")+ZZZ+Strleft(itemserv.Text,"/")
result = Shell("C:\rar.exe "+"m[f] -ep "+resultbas+" "+resultbas+".nsf", 6)	
Set baseDoc = view.GetNextDocument(baseDoc)
Wend
End Sub	
End Class
 
D

drugsjoke

#5
Ну ничего не получается :)
добавил в классы Sub Terminate
он обнуляет все что можно
все переменные становятся = Nothing
т.е агент выполняет строку типа a = Shell(архивирование) и поидее должен все базы "отпустить", но база все равно архивироваться не хочет, стереть ее невозможно, пишет, что она используется еще минут 5 после завершения работы агента.

ЗЫ: При выполнении агента локально все ОК
Когда запускаешь его на сервере происходит такая ерунда(((((((((( (сервер работает как служба, база сохраняется локально на нем)

ПАМАГИТЕеееееее :D
 
D

Domino6

#6
dbcreator
Утилита для работы с базами Lotus в консольном режиме.
Возможности :

Cоздание копий и реплик баз данных в теневом (без запущенного клиента) режиме, а также копирование доступа на базу из указанного источника.
Для работы
Необходим установленный клиент Lotus Notes 5.xx и выше.
Использование
DBCREATOR.EXE [source] [destination] [options]
source - откуда копируется база данных (источник)
destination - куда копируется база данных
options - опции копирования:
r - создает реплику источника
c - создает копию источника
n - создает новую базу из шаблона
a - копирует таблицу управления доступом (ACL) из источника
d - создает реплику источника с документами
<>- простой запуск dbCreator.exe без параметров выводит подсказку по использованию.
при указании полного пути с сервером используйте формат записи Сервер!!Полный путь
например : "dbCreator d:\Lotus\Notes\Data\names.nsf Moon!!Personal\pernames.nsf r" создаст реплику из локальной адресной книги на сервере Moon в директории Personal с названием pernames.nsf .
Напиши .bat или .cmd и добавь после создания базы архивирование
 
Статус
Закрыто для дальнейших ответов.