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