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

Тема в разделе "Lotus - Программирование", создана пользователем drugsjoke, 9 июн 2007.

Статус темы:
Закрыта.
  1. drugsjoke

    drugsjoke Гость

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

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    не плохо бы на код посмотреть где происходит копирование, а затем архивация..<br>а вообще закрывать базы после копировани надо или удалять ссылки в коде на них..<br><br>
     
  3. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: drugsjoke
    да Kee_Keekkenen прав, стоит посмотреть не обнуля.ються ли привязки к БД ну т.п.,
     
  4. drugsjoke

    drugsjoke Гость

    Привязки не обнуляются в том то и дело, ну никак не могу понять как их обнулить
    Код (Text):
    '---------------------------------------------------------------------------------------------------------
    ' 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
     
  5. drugsjoke

    drugsjoke Гость

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

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

    ПАМАГИТЕеееееее :D
     
  6. Domino6

    Domino6 Гость

    dbcreator
    Напиши .bat или .cmd и добавь после создания базы архивирование
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей