meta data for this page
  •  

Különbségek

A kiválasztott változat és az aktuális verzió közötti különbségek a következők.

Összehasonlító nézet linkje

Előző változat mindkét oldalonElőző változat
shell:replikacio:smart_replicator [2019/07/25 17:07] adminshell:replikacio:smart_replicator [2026/03/26 09:44] (aktuális) admin
Sor 6: Sor 6:
 #!/bin/sh #!/bin/sh
 #                                                               # #                                                               #
-# TSM Smart Replicator v1.3.1 (2015.05.30) - Ágoston Péter      #+# TSM Smart Replicator v1.(2026.03.26) - Ágoston Péter        #
 #                                                               # #                                                               #
 ################################################################# #################################################################
-TSMSERVER=tsmserv +TSMSERVER=tsm1 
-TSMUSER=tsmadmin +TSMUSER=admin 
-TSMPASS=jelszo +TSMPASS=password 
-REPLMAXNUM=4+REPLMAXNUM=4   # konkurrens replikacios processzek szama max
 INFINITERUN=true INFINITERUN=true
-REFRESHRATE=10 #MINUTES+REFRESHRATE=10 
 +MAXSESSNUM=1 
 +MAXPROCRUNTIME=5 Max mennyi oraig futhat egy replikacio 
 +MAXPROCRUNTIMEEXCLUDE='CLIENT0[1-3]-[TP]'  # Ezeket a node-okat nem lovi ki a MAXPROCRUNTIME eltelte utan sem
 LOGFILE=/var/log/tsm_smart_replicator.log LOGFILE=/var/log/tsm_smart_replicator.log
 REMEMBER_LAST_NODE=true REMEMBER_LAST_NODE=true
 LAST_NODE_FILE=/tmp/tsm_smart_replicator.last_node LAST_NODE_FILE=/tmp/tsm_smart_replicator.last_node
 +EXCLUDELOCKED=true
 EXCLUDENODES='' EXCLUDENODES=''
 +
 +# ------------- Innen mar neked valoszinuleg nem kell piszkalni semmit, ha csak nem en vagy ----------
  
 DSMADMC="dsmadmc -id=$TSMUSER -pa=$TSMPASS -se=$TSMSERVER -dataonly=y -displ=tabl" DSMADMC="dsmadmc -id=$TSMUSER -pa=$TSMPASS -se=$TSMSERVER -dataonly=y -displ=tabl"
 +
 +if [[ $EXCLUDELOCKED = true ]]; then
 +#    SQL_OPTS=" and locked='NO' and not node_name like 'RMAN_%'"
 +    SQL_OPTS=" and n.locked='NO' "
 +fi
  
 trap 'echo "$(date "+%Y.%m.%d %H:%M") PROGRAM TERMINATED" | tee -a $LOGFILE;kill $$' SIGINT SIGTERM; trap 'echo "$(date "+%Y.%m.%d %H:%M") PROGRAM TERMINATED" | tee -a $LOGFILE;kill $$' SIGINT SIGTERM;
Sor 26: Sor 37:
 echo "$(date "+%Y.%m.%d %H:%M") PROGRAM START (TSMSERVER=$TSMSERVER, REPLMAXNUM=$REPLMAXNUM, INFINITERUN=$INFINITERUN, REFRESHRATE=${REFRESHRATE}m)" | tee -a $LOGFILE echo "$(date "+%Y.%m.%d %H:%M") PROGRAM START (TSMSERVER=$TSMSERVER, REPLMAXNUM=$REPLMAXNUM, INFINITERUN=$INFINITERUN, REFRESHRATE=${REFRESHRATE}m)" | tee -a $LOGFILE
 LAST_NODE=$(cat $LAST_NODE_FILE) LAST_NODE=$(cat $LAST_NODE_FILE)
 +LAST_NODE_IS_REAL=$($DSMADMC "select count(*) from nodes where node_name='$LAST_NODE'" | sed 's/[^0-9]//')
 +if [[ "$LAST_NODE_IS_REAL" -eq 0 ]]; then LAST_NODE=''; fi
 FIRSTRUN=true FIRSTRUN=true
 CYCLE=1 CYCLE=1
-ACT_NODE_NUM=0 
 while [ $INFINITERUN = true ] || [ $FIRSTRUN = true ]; do while [ $INFINITERUN = true ] || [ $FIRSTRUN = true ]; do
 +    ACT_NODE_NUM=0
     FIRSTRUN=false     FIRSTRUN=false
     STARTTIME=$(date +"%s")     STARTTIME=$(date +"%s")
     STARTTIME=$(($STARTTIME / 60))     STARTTIME=$(($STARTTIME / 60))
     echo "$(date "+%Y.%m.%d %H:%M") CYCLE START ($CYCLE)" | tee -a $LOGFILE     echo "$(date "+%Y.%m.%d %H:%M") CYCLE START ($CYCLE)" | tee -a $LOGFILE
-    REPL_NODE_NUM=`$DSMADMC "select count(node_name) from nodes where repl_state='ENABLED' and repl_mode in ('SEND','SYNCSEND')" | sed 's/[^0-9]*//'+    REPL_NODE_NUM=`$DSMADMC "select count(n.node_name) from nodes where n.repl_state='ENABLED' and n.repl_mode in ('SEND','SYNCSEND'$SQL_OPTS" | sed 's/[^0-9]*//'
- $DSMADMC "select node_name from nodes where repl_state='ENABLED' and repl_mode in ('SEND','SYNCSEND'ORDER BY node_name" | while read NODE; do+        $DSMADMC "select n.node_name from nodes n LEFT JOIN REPLICATIONVIEW r ON n.node_name=r.node_name where n.repl_state='ENABLED' and n.repl_mode in ('SEND','SYNCSEND'$SQL_OPTS group by n.node_name order by max(case when r.COMP_STATE='COMPLETE' then r.END_TIME else '1956-09-05-00.00.00' end)" | while read NODE; do
         # Megprobaljuk onnan folytatni, ahol utoljara abbahagytuk a kort         # Megprobaljuk onnan folytatni, ahol utoljara abbahagytuk a kort
-        if [ "$REMEMBER_LAST_NODE" = "true" ] && [ -n "$LAST_NODE" ] && [ "$NODE" != "$LAST_NODE" ]; then +        if [ "$REMEMBER_LAST_NODE" = "true" ] && [ "$LAST_NODE_IS_REAL-eq 1 ] && [ "$NODE" != "$LAST_NODE" ]; then
             echo "$(date "+%Y.%m.%d %H:%M") A $NODE node kihagyasa, mert folytatjuk onnan, ahol abbahagytuk." >> $LOGFILE             echo "$(date "+%Y.%m.%d %H:%M") A $NODE node kihagyasa, mert folytatjuk onnan, ahol abbahagytuk." >> $LOGFILE
-            continue; +            ACT_NODE_NUM=$((ACT_NODE_NUM+1)) 
 +            continue;
         fi         fi
-        unset LAST_NODE+        LAST_NODE_IS_REAL=0
         # Ha nem fut meg a node-ra replikacio, elinditjuk ra         # Ha nem fut meg a node-ra replikacio, elinditjuk ra
         if [ $($DSMADMC "select count(*) from processes where status like '% $NODE.%'") -eq 0 ] && [ "$(echo $EXCLUDENODES | grep -c $NODE)" -eq 0 ]; then         if [ $($DSMADMC "select count(*) from processes where status like '% $NODE.%'") -eq 0 ] && [ "$(echo $EXCLUDENODES | grep -c $NODE)" -eq 0 ]; then
Sor 47: Sor 61:
             ACTREPLNODES=$($DSMADMC "select status from processes where process='Replicate Node'" | grep -v 'AN[SR]' | sed -e 's/\(^.*node.s. \)\([^.]*\)\(.*$\)/\2/' | sed ':a;N;$!ba;s/\n/, /g')             ACTREPLNODES=$($DSMADMC "select status from processes where process='Replicate Node'" | grep -v 'AN[SR]' | sed -e 's/\(^.*node.s. \)\([^.]*\)\(.*$\)/\2/' | sed ':a;N;$!ba;s/\n/, /g')
             echo ${ACTREPLNODES%%,*} > $LAST_NODE_FILE             echo ${ACTREPLNODES%%,*} > $LAST_NODE_FILE
-         echo "$(date "+%Y.%m.%d %H:%M") Futo replikaciok szama: $REPLNUM ($ACT_NODE_NUM/$REPL_NODE_NUM) | Varakozik: $NODE | Replikacio alatt: $ACTREPLNODES" | tee -a $LOGFILE+                echo "$(date "+%Y.%m.%d %H:%M") Futo replikaciok szama: $REPLNUM ($ACT_NODE_NUM/$REPL_NODE_NUM) | Varakozik: $NODE | Replikacio alatt: $ACTREPLNODES" | tee -a $LOGFILE
             # Varunk, amig lesz replikacios "slot"             # Varunk, amig lesz replikacios "slot"
             while [ $REPLNUM -ge $REPLMAXNUM ]; do             while [ $REPLNUM -ge $REPLMAXNUM ]; do
                 echo "$(date "+%Y.%m.%d %H:%M") ${REFRESHRATE}p varakozas..." | tee -a $LOGFILE                 echo "$(date "+%Y.%m.%d %H:%M") ${REFRESHRATE}p varakozas..." | tee -a $LOGFILE
                 sleep $(($REFRESHRATE*60))                 sleep $(($REFRESHRATE*60))
-             REPLNUM=$($DSMADMC "select count(*) from processes where process='Replicate Node'" | sed 's/[^0-9]//g')+                ONCE=0 
 +                # Ha egy processz MAXPROCRUNTIME oranal regebb ota fut, kilojuk 
 +                $DSMADMC "select process_num from processes where int((current_timestamp - start_time)hours + day(current_timestamp - start_time))>$MAXPROCRUNTIME and process='Replicate Node' and not REGEXP_LIKE(STATUS, 'Replicating node\(s\) '${MAXPROCRUNTIMEEXCL}\.')" | grep -o '^ *[0-9]*$' | grep -v 'AN[SR]' | sed 's/ *//' | while read PROCESS_NUM; do 
 +                        if [ $ONCE -eq 0 ]; then echo "$(date "+%Y.%m.%d %H:%M") $MAXPROCRUNTIME oranal regebb ota futo replikaciok kilovese:" | tee -a $LOGFILE; fi 
 +                                $DSMADMC "cancel proc $PROCESS_NUM" | tee -a $LOGFILE 
 +                        if [ $ONCE -eq 0 ]; then echo "$(date "+%Y.%m.%d %H:%M") 1p varakozas..." | tee -a $LOGFILE; sleep 60; fi 
 +                        ONCE=1 
 +                done 
 +                REPLNUM=$($DSMADMC "select count(*) from processes where process='Replicate Node'" | sed 's/[^0-9]//g')
                 ACTREPLNODES=$($DSMADMC "select status from processes where process='Replicate Node'" | grep -v 'AN[SR]' | sed -e 's/\(^.*node.s. \)\([^.]*\)\(.*$\)/\2/' | sed ':a;N;$!ba;s/\n/, /g')                 ACTREPLNODES=$($DSMADMC "select status from processes where process='Replicate Node'" | grep -v 'AN[SR]' | sed -e 's/\(^.*node.s. \)\([^.]*\)\(.*$\)/\2/' | sed ':a;N;$!ba;s/\n/, /g')
-             echo "$(date "+%Y.%m.%d %H:%M") Futo replikaciok szama: $REPLNUM ($ACT_NODE_NUM/$REPL_NODE_NUM) | Varakozik: $NODE | Replikacio alatt: $ACTREPLNODES" | tee -a $LOGFILE+                echo "$(date "+%Y.%m.%d %H:%M") Futo replikaciok szama: $REPLNUM ($ACT_NODE_NUM/$REPL_NODE_NUM) | Varakozik: $NODE | Replikacio alatt: $ACTREPLNODES" | tee -a $LOGFILE
             done             done
-            $DSMADMC "repl node $NODE maxsess=3" | tee -a $LOGFILE+            $DSMADMC "repl node $NODE maxsess=$MAXSESSNUM forcerecon=y" | tee -a $LOGFILE
             ACT_NODE_NUM=$((ACT_NODE_NUM+1))             ACT_NODE_NUM=$((ACT_NODE_NUM+1))
             # Ha mar csak egy slot van, varunk egy percet, hatha nincs mit replikalni, hogy mehessunk tovabb             # Ha mar csak egy slot van, varunk egy percet, hatha nincs mit replikalni, hogy mehessunk tovabb
-            if [ $(($REPLMAXNUM-$REPLNUM)) -eq 1 ]; then echo "$(date "+%Y.%m.%d %H:%M") 1p varakozas..." | tee -a $LOGFILE;sleep 60; fi+            if [ $(($REPLMAXNUM-$REPLNUM)) -eq 1 ]; then echo "$(date "+%Y.%m.%d %H:%M") 1p varakozas..." | tee -a $LOGFILE; sleep 60; fi
         else         else
             echo "$(date "+%Y.%m.%d %H:%M") A $NODE kihagyasra kerul, mert EXCLUDE-olva van, vagy mar epp fut ra replikacio." | tee -a $LOGFILE             echo "$(date "+%Y.%m.%d %H:%M") A $NODE kihagyasra kerul, mert EXCLUDE-olva van, vagy mar epp fut ra replikacio." | tee -a $LOGFILE
         fi         fi
- done+        done
     ENDTIME=$(date +"%s")     ENDTIME=$(date +"%s")
     ENDTIME=$(($ENDTIME / 60))     ENDTIME=$(($ENDTIME / 60))
Sor 72: Sor 94:
     sleep $(($REFRESHRATE*60))     sleep $(($REFRESHRATE*60))
     CYCLE=$(($CYCLE + 1))     CYCLE=$(($CYCLE + 1))
 +    LAST_NODE_IS_REAL=0
 +    >$LAST_NODE_FILE
     unset LAST_NODE     unset LAST_NODE
 done done