Lotus notes LotusNotes脚本:备份所有服务器数据库

Lotus notes LotusNotes脚本:备份所有服务器数据库,lotus-notes,Lotus Notes,今天我试图通过右键点击数据库->新建副本来复制数据库(设计和文档)。。。我看到数据库的新副本具有源数据库的最小维度(源数据库900mb和新副本170mb)。 我还看到,如果我访问这个数据库的新副本,大小将从170mb变为400mb(我想这是因为notes创建了索引…) 但我只需要复制数据库来创建备份,所以大小很重要,因为我必须每天备份,并且只在特定情况下才查阅数据库 因此,我构建了一个代理来执行此复制,但结果不一样,新的副本与源数据库具有相同的维度。 有没有技巧可以获得与右键单击数据库->新建副

今天我试图通过右键点击数据库->新建副本来复制数据库(设计和文档)。。。我看到数据库的新副本具有源数据库的最小维度(源数据库900mb和新副本170mb)。 我还看到,如果我访问这个数据库的新副本,大小将从170mb变为400mb(我想这是因为notes创建了索引…) 但我只需要复制数据库来创建备份,所以大小很重要,因为我必须每天备份,并且只在特定情况下才查阅数据库

因此,我构建了一个代理来执行此复制,但结果不一样,新的副本与源数据库具有相同的维度。 有没有技巧可以获得与右键单击数据库->新建副本相同的“压缩”。。。但是使用脚本代码?

我发布了我使用但没有压缩的代码:

Dim Db As NotesDatabase
    Dim Ws As New NotesUIWorkspace
    Dim Session As New NotesSession
    Dim DbDir As NotesDbDirectory
    Dim AllDocs As NotesView
    Dim SourceDb As NotesDatabase   
    Dim ArchiveDb As NotesDatabase
    Dim SourceDoc As NotesDocument
    Set Db=Session.CurrentDatabase      
    Set DbDir=Session.GetDbDirectory(Db.Server) 
    Set SourceDb = DbDir.GetFirstDatabase(DATABASE)

    Do While Not SourceDb Is Nothing                    
            Print"BackUp Database "+Cstr(SourceDb.FileName)
            Gosub BackUpDatabase
        Set SourceDb = DbDir.GetNextDatabase
    Loop
    Exit Sub    
BackUpDatabase:
    If SourceDb.IsOpen=False Then Call SourceDb.Open( "", "" )
    Set ArchiveDb = SourceDb.CreateCopy( "", "C:\Test\"+Cstr(Day(Date))+"-"+Cstr(Month(Date))+"-"+Cstr(Year(Date))+"\"+SourceDb.FilePath)

    Set AllDocs = SourceDb.CreateView( "@AllDocs", "SELECT @All" )  
    Set SourceDoc=AllDocs.GetFirstDocument      

    Do While Not SourceDoc Is Nothing
        Call SourceDoc.CopyToDatabase(ArchiveDb)
        Set SourceDoc=AllDocs.GetNextDocument(SourceDoc)
    Loop
    Call AllDocs.Remove()
    Return
你所说的“压缩”只是“缺少”视图索引。 数据库大小包括:

  • 所有文件的大小
  • 数据库设计的大小
  • 空空间(如果数据已删除,但数据库未压缩)
  • 视图索引
  • 新副本(通过客户端)没有索引,但一旦打开视图,数据库的大小就会增加

    您的脚本不是备份的好主意:

  • 所有文档都会获得一个新的创建戳记
  • 所有文档都将获得一个新的副本id-响应-复制后,层次结构将完全丢失
  • 等等

    如果你真的想这样做,那么你必须使用compact-D压缩数据库,以获得可用空间和视图索引, 但我绝不会像这样备份生产数据库

    另一种(更好的)可能性是使用LotusScript-code创建一个新副本,并对其进行备份:

    Set ArchiveDb=SourceDb.CreateReplica(“,”C:\Test\“+Cstr(日))+“-”+Cstr(月(日))+“-”+Cstr(年(日))+“\”+SourceDb.FilePath)
    
    如果在备份后保留该数据库,则可能需要使用以下代码更改数据库的副本id:

    选项公共
    选项声明
    Const wAPIModule=“notes”Windows/32
    输入API_TIMEDATE
    第(1)条与第(1)条一样长
    端型
    输入API\u dbreplicinfo
    ID作为API_TIMEDATE的ID,对于所有副本文件都是相同的
    intFlags作为整数的复制标志
    IntCutofInterval作为整数“自动复制切断”
    作为API_TIMEDATE的复制截止日期的截止
    端型
    声明私有函数NSFDbOpen Lib wAPIModule别名“NSFDbOpen”_
    (ByVal P作为字符串,hDB作为长)作为整数
    声明私有函数NSFDbClose Lib wAPIModule别名“NSFDbClose”_
    (ByVal hDB等长)作为整数
    声明私有函数NSFDBReplicationGet Lib wAPIModule别名“NSFDBReplicationGet”_
    (ByVal hdb作为Long,hdbr作为API_dbreplicinfo)作为整数
    声明私有函数nsfdbreplicationset Lib wAPIModule别名“nsfdbreplicationset”_
    (ByVal hdb作为Long,hdbr作为API_dbreplicinfo)作为整数
    子ChangeReplicaID(strServer作为字符串,strFilePath作为字符串,strReplicaID作为字符串)
    作为整数的Dim intRc
    变暗lngDb为长
    Dim RepInfo作为API_DBREPLICAINFO
    如果strServer=“”,则
    intRc=NSFDbOpen(strFilePath,lngDb)
    其他的
    intRc=NSFDbOpen(strServer&“!!”和strFilePath,lngDb)
    如果结束
    如果intRc为0,则
    MessageBox“无法打开数据库”
    出口接头
    如果结束
    intRc=nsfdbreplicationfoget(lngDb,RepInfo)
    如果intRc为0,则
    MessageBox“无法获取复制信息”
    出口接头
    如果结束
    RepInfo.ID.lngInnards(1)=Val(“&H”+左$(strReplicaID,8))
    RepInfo.ID.lngInnards(0)=Val(&H“+Right$(strReplicaID,8))
    intRc=nsfdbreplicationfoset(lngDb,RepInfo)'深呼吸…:-)
    intRc=nsfdbreplicationfoget(lngDb,RepInfo)
    如果intRc为0,则
    MessageBox“设置后无法获取复制信息”
    其他的
    MessageBox“成功”
    如果结束
    端接头
    
    但我能给出的最好建议是:使用专业的备份软件来完成这项工作