cQAUTOBU ;Starten van de Backup ;cQAUTOBU; Q ; date ;date N %H,%J,%R S %H=1+$H,%J=%H\1461,%R=%H#1461,DJ=%J*4+1841+(%R\365),DD=%R#365,DM=1 I %R=1460 S DD=365,DJ=DJ-1 F %J=31,(%R>1154)+28,31,30,31,30,31,31,30,31,30 Q:%J'
"_BUDIR_"\bu_start.txt") . ;delete files in datam\temp directory . S QF=$$JW^cQFILE("del "_BUDIR_"\DataM\Temp\*.* /q") . F S DIRFR=$O(DIRFR(DIRFR)) Q:DIRFR="" D .. S DIRTO=BUDIR_D_$P(DIRFR,D,2,$L(DIRFR,D)),BUSRV=$ZCVT($ZU(110),"U") I BUDIR["\\" S BUSRV=$P(BUDIR,"\",3) .. I $E(DIRTO,$L(DIRTO))'="\" S DIRTO=DIRTO_"\" .. ;copy and clean up journal .. S JRNL=$G(JRNL,0) I JRNL D JRNL .. D JRNC(DIRTO_"journal\Aij") .. D JRNC(DIRTO_"journal\Backup\Aij") .. ;close open links with NewDat.exe and SDat*.exe .. S QF=$$JW^cQFILE($E($ZU(86))_":\DataM\menu\ofl.exe -cf -s "_BUSRV_" NewDat.exe > "_INFO) .. S QF=$$JW^cQFILE($E($ZU(86))_":\DataM\menu\ofl.exe -cf -s "_BUSRV_" SDat*.exe > "_INFO) .. ; XCopy or RoboCopy from -> to .. S EX=$G(^cLOG($ZU(5),"BACKUP","AUTO","EX"),"") .. I ($P($P($ZV,")",2),"(",1)[" 2008")!($P($P($ZV,")",2),"(",1)[" 2010") D ... S EX=EX_$S($L(EX):",",1:"")_$E($ZU(86))_":\DataM\InterSystems\Cache\Mgr\clockjd,"_$E($ZU(86))_":\DataM\InterSystems\Cache\Mgr\clockwd" ... I $G(ROBOCOPY) S EX=$TR(EX,","," ") .. I $G(debug) W !,$S($G(ROBOCOPY):"Robo",1:"X"),"Copy ",DIRFR," ",DIRTO,!,"Exclude: ",EX,! .. I $G(ROBOCOPY) S QF=$$RCP^cQFILE(DIRFR,DIRTO,$G(debug),EX) .. E S QF=$$XCP^cQFILE(DIRFR,DIRTO,$G(debug),EX) .. D date,time .. S log($P($H,","),$P($H,",",2))=QF_";"_$TR(DIRFR,"\","/")_";"_$TR(DIRTO,"\","/")_"\"_DD_"."_DM_"."_DJ_"\"_TD_"\"_$H_"\" .. I ('$G(ROBOCOPY)&QF)!($G(ROBOCOPY)&(QF>1)) D ... S BOK=0,%="Error while copying directory "_$G(ER) ... I '$G(debug) D SW13R^cQ21 ... D ^cA400 ... I '$G(debug) D SW13S^cQ21 . I ('$G(ROBOCOPY)&'QF)!($G(ROBOCOPY)&(QF=1)) D .. ; touch the Cache.dat files AND Directories to reflect the back-up .. K file S file=0,ER=$$FFILE^cQDIR("cache.dat",DIRTO,1,.file) .. F I=1:1:file F K=file(I),$P(file(I),"\",1,$L(file(I),"\")-1) S ER=$$TOUCH^cQDIR(K) .. S K=$$JW^cQFILE("echo M Backup Finished > "_BUDIR_"\bu_stop.txt") ; I '$G(debug) D SW13R^cQ21 ;enable database writes S EINDE=$H,DR=EINDE-BEGIN*86400+$P(EINDE,",",2)-$P(BEGIN,",",2) I BOK D S^cQLBU("DATA",DR) S LOG="^cLOG("""_$ZU(5)_""",""BACKUP"",""LOGGING"")" D CLEAN^cQ13(LOG,40) M @LOG=log I 'BOK,$G(BG)'=0 D D1003^cANEM0($T(+0),"BG") ; DATAZ L -^cLOGL($ZU(5),"BACKUP","AUTO") G YZ ; YZ K AUTOBU,TIME,HSTART,HSTOP,SX,%ACTIVE0,I,J,ACJ,CUJ Q ; DEBUG S debug=1 G START ; TRAP D SW13R^cQ21 ;enable database writes S BOK=0,%="Error in auto backup "_$ZE D ^cA400 Q ; GDB(V) ; Get databases for all namespaces in V K DBS N I,J S D="\",V=$TR($G(V),"/",D),AD=0 S:$E(V)'=D V=D_V S:$E(V,$L(V))'=D V=V_D I V=D_D D NSPC^cQ21(.V,1) S I="",V=D F S I=$O(V(I)) Q:I="" I I'="USER" S V=V_I_D D ND^cQ21(.X) F I=1:1:$L(V,D) S J=$ZCONVERT($P(V,D,I),"U") I $L(J) D . I $D(X(J)) D DBN(J) Q . I J?1.U F L=1:1:99 D DBN(J_L) S I="" F S I=$O(DBS(I)) Q:I="" I $P(I,D,5)="G",$P(I,D,6)'=0 D . S K=I,$P(K,D,6)=0 I '$D(DBS(K)) S AD=AD+1,DBS(K)=AD GDBZ Q ; DBN(R) ; get databases into local DBS N K,L I '$D(X(R)) Q F K="globals","routines" S L=$G(X(R,K)) I $L(L) S:$E(L,$L(L))="\" $E(L,$L(L))="" S AD=AD+1,DBS(L)=AD DBNZ Q ; JRNL ; Clean up and copy journalspaces on SYS drive N ER,JDIR,JDIRB,JFILES,K,M,MB,S,SB,SYS S JDIR=$G(^["%SYS"]%SYS("JOURNAL","CURDIR")) I '$L(JDIR) Q ;S JDIRB=$$$sd_":\DataM\Journal\Backup\Aij\" S JDIRB=DIRTO_"Journal\Backup\Aij\" I $$TST^cQFILE(JDIRB) S K=$$CRED^cQFILE(JDIRB) S JFILES=$$INFO^cQ14 S K=$$JW^cQFILE("DIR "_JDIR_" /b >"_JFILES) S ER=$$OR^cQFILE(JFILES) I 'ER D . F S ER=$$RF^cQFILE(JFILES,.K) Q:ER=99 I $ZCONVERT(K,"U")'="CACHE.LCK" D I SW S K=$$JW^cQFILE("copy "_JDIR_K_" "_JDIRB_K) I $G(debug) U 0 W " Copied" .. I $G(debug) U 0 W !,JDIR_K,!?10," -> "_JDIRB_K .. S SW=0 ;do not copy .. I '$L(K) Q ;No filename .. I $$TST^cQFILE(JDIRB_K) S SW=1 Q ; file does not exist .. S ER=$$FS^cQFILE(JDIR_K,.S) I ER S SW=1 Q ;get filesize .. S ER=$$FS^cQFILE(JDIRB_K,.SB) I ER S SW=1 Q ;get filesize .. I S'=SB S SW=1 Q ; filesize is not the same .. S ER=$$FMD^cQFILE(JDIR_K,.M) I ER S SW=1 Q ;get modification date .. S ER=$$FMD^cQFILE(JDIRB_K,.MB) I ER S SW=1 Q ;get modification date .. I M'=MB S SW=1 Q ; modification date is not the same S ER=$$CF^cQFILE(JFILES),ER=$$DEL^cQFILE(JFILES) ;clean up files in backupdir D JRNC(JDIRB) JRNLZ Q ; JRNC(K) ;Clean excess journalfiles in backupdirectory K N ER,JDIR,JDIRB,JFILES S JDIRB=$G(K) Q:'$L(K) S JDIRB=$TR(JDIRB,"/","\") I $E(JDIRB,$L(JDIRB))'="\" S JDIRB=JDIRB_"\" S JDIR=$G(^["%SYS"]%SYS("JOURNAL","CURDIR")) I '$L(JDIR) Q S JDIR=$TR(JDIR,"/","\") I $E(JDIR,$L(JDIR))'="\" S JDIR=JDIR_"\" S JFILES=$$INFO^cQ14 S K=$$JW^cQFILE("DIR "_JDIRB_" /b >"_JFILES) S ER=$$OR^cQFILE(JFILES) I 'ER D . F S ER=$$RF^cQFILE(JFILES,.K) Q:ER=99 D .. I $$TST^cQFILE(JDIR_K) S K=$$DEL^cQFILE(JDIRB_K) S ER=$$CF^cQFILE(JFILES),ER=$$DEL^cQFILE(JFILES) JRNCQ Q ; R0 S R0=$P(R,D,5) I $L(R0),R0'["""" S $P(R,D,5)=R0_"^"_$T(+0) R0A S R0=$P(R,D,7) I $L(R0),R0'="DCTR" S $P(R,D,7)="",R1=$P(R,D,8),R0=$P($T(@R0),U,2,99) S:$L(R1) R0=R0_"&("_R1_")" S $P(R,D,8)=R0 R0Z S $P(R,D,12)=$T(+0) K R0,R1 D ^cA100 Q ; v11 30.05.94 ; ZZ ; 17.01.2012 - 15:58 * Cache-r6.4.9