반응형
자꾸 오라클과 비교해서는 뭐 하지만 ... 솔직히 다소 불편하게 만들어져 있는 부분들이 존재 한다.

아카이브 디렉토리 설정 같은 경우도 오라클에서는 해당 파라메터 설정을 하면 설정된 디렉토리에 아카이브 파일이 생성이 되는데

DB2에서는 아카이브 디렉토리를 설정 하여도 해당 디렉토리 밑에 하위 디렉토리들을 생성하고 그 곳에 아카이브 파일을 생성한다.

따라서 해당 하위 디렉토리를 따라가서 아카이브 파일을 삭제 하여야 하며 , HADR 구성이 되어 있을 경우 스위칭이 발생하였다가 다시 원상복구가 된 경우라도 ... 기존에 사용하던 디렉토리를 사용하지 않고 새로운 디렉토리를 생성해서 사용한다.

이런 불편함이 존재 하여서 아카이브 자동 삭제 스크립트를 만들어 보았다.

ctime이 O/S 및 O/S 패치 버젼에 따라서 다소 차이가 있으므로 man을 이용하여 확인후 +3 / +2 / +1 / +0 값을 적절히 변경하여 사용하면 될 것이다.

그리고 Sun O/S 에서는 간혹 아래 스크립트가 제대로 동작이 되지 않을 경우가 있다.
그럴 경우 arcdel_sun.sh를 참조 하시라 ~

그리고 쉘 수행전에 DB2NODE값 , DBNAME 값 을 설정해 주고 실행을 하는것을 잊지 말자 !! (~sqllib/db2nodes.cfg 참조)

다음은 스크립트 내용이다.

- arcdel.sh ( AIX , HP , Linux 용)

#!/usr/bin/ksh

# This shell used settings
# 3 Days ago : +2 
# 2 Days ago : +1 
# 1 Days ago : +0

#                                         Shell Called
#  |----------|----------|----------|----------|
#   <-------------------------------|    +0
#   <--------------------|    +1
#   <---------|    +2


SHELLHOME=/fsudb/db2inst1/HOME/EXEM/SHELL/ARCDEL
NOW=`date '+%Y%m%d_%H%M'`


# Check Node Number And Make DIRNODE environment Variable 

    case `expr length $DB2NODE` in
          1) DIRNODE=`expr NODE000$DB2NODE` ;;
          2) DIRNODE=`expr NODE00$DB2NODE` ;;
          3) DIRNODE=`expr NODE0$DB2NODE` ;;
          4) DIRNODE=`expr NODE$DB2NODE`;;
    esac

    #echo $DIRNODE

# Connect to Database 

    db2 connect to $DBNAME >> /dev/null

# Get DB CFG ( archive log directory )

    db2 get db cfg | grep LOGARCHMETH1 > $SHELLHOME/arc.out

# Get Archive log directory from out file

    ARCHOME=`cat $SHELLHOME/arc.out | awk -F: '{print $2}'`

# Check last character from archive log directory 

    TEMP1=`expr length $ARCHOME`
    TEMP2=`expr substr $ARCHOME $TEMP1 1`

    #echo $TEMP2

# Make Full Archive log directory

   if [ "$TEMP2" = "/" ] ; then 
      #ARCHOME=$ARCHOME$DB2INSTANCE/$DBNAME/$DIRNODE/C0000000
      ARCHOME=$ARCHOME$DB2INSTANCE/$DBNAME/$DIRNODE
   else
      #ARCHOME=$ARCHOME/$DB2INSTANCE/$DBNAME/$DIRNODE/C0000000
      ARCHOME=$ARCHOME/$DB2INSTANCE/$DBNAME/$DIRNODE
   fi

#   echo $ARCHOME

#  Count archive log files (3 days ago)

   CNT=`find $ARCHOME -type f -mtime +2 | wc -l`
   #echo $CNT
   #find $ARCHOME -mtime +2 -print

   if [ $CNT -gt 0 ]  
      then
          echo "3 days ago files...." > $SHELLHOME/log/$NOW.out
          find $ARCHOME -type f -mtime +2 -print -exec ls -al {} \; | grep -v dr | sort +5  >> $SHELLHOME/log/$NOW.out
          find $ARCHOME -type f -mtime +2 -print | xargs /bin/rm 
          db2 terminate  >> /dev/null
          exit 
   fi  

#  Count archive log files (2 days ago)

   CNT=`find $ARCHOME -type f -mtime +1 | wc -l`
   #echo $CNT
   #find $ARCHOME -mtime +1 -print

   if [ $CNT -gt 0 ]
      then
          echo "2 days ago files ....." > $SHELLHOME/log/$NOW.out
          find $ARCHOME -type f -mtime +1 -print -exec ls -al {} \; | grep -v dr | sort +5 >> $SHELLHOME/log/$NOW.out
          find $ARCHOME -type f -mtime +1 -print | xargs /bin/rm
          db2 terminate >> /dev/null
          exit 
   fi

#  Count archive log files (1 days ago)

   CNT=`find $ARCHOME -type f -mtime +0 | wc -l`
   #echo $CNT
   #find $ARCHOME -mtime +0 -print

   if [ $CNT -gt 0 ]
      then
          echo "1 days ago files ....." > $SHELLHOME/log/$NOW.out
          find $ARCHOME -type f -mtime +0 -print -exec ls -al {} \; | grep -v dr | sort +5 >>  $SHELLHOME/log/$NOW.out
          find $ARCHOME -type f -mtime +0 -print | xargs /bin/rm
          db2 terminate >> /dev/null
          exit 
   fi

# Exit Shell
db2 terminate >> /dev/null
exit


- arcdel_sun.sh


#!/usr/bin/ksh

# This shell used settings
# 3 Days ago : +2 
# 2 Days ago : +1 
# 1 Days ago : +0

#                                         Shell Called
#  |----------|----------|----------|----------|
#   <-------------------------------|    +0
#   <--------------------|    +1
#   <---------|    +2


SHELLHOME=/fsudb/db2inst1/HOME/EXEM/SHELL/ARCDEL
NOW=`date '+%Y%m%d_%H%M'`


# Check Node Number And Make DIRNODE environment Variable 

    case `/usr/ucb/expr length $DB2NODE` in
          1) DIRNODE=`/usr/ucb/expr NODE000$DB2NODE` ;;
          2) DIRNODE=`/usr/ucb/expr NODE00$DB2NODE` ;;
          3) DIRNODE=`/usr/ucb/expr NODE0$DB2NODE` ;;
          4) DIRNODE=`/usr/ucb/expr NODE$DB2NODE`;;
    esac

    #echo $DIRNODE

# Connect to Database 

    db2 connect to $DBNAME >> /dev/null

# Get DB CFG ( archive log directory )

    db2 get db cfg | grep LOGARCHMETH1 > $SHELLHOME/arc.out

# Get Archive log directory from out file

    ARCHOME=`cat $SHELLHOME/arc.out | awk -F: '{print $2}'`

# Check last character from archive log directory 

    TEMP1=`/usr/ucb/expr length $ARCHOME`
    TEMP2=`/usr/ucb/expr substr $ARCHOME $TEMP1 1`

    #echo $TEMP2

# Make Full Archive log directory

   if [ "$TEMP2" = "/" ] ; then 
      #ARCHOME=$ARCHOME$DB2INSTANCE/$DBNAME/$DIRNODE/C0000000
      ARCHOME=$ARCHOME$DB2INSTANCE/$DBNAME/$DIRNODE
   else
      #ARCHOME=$ARCHOME/$DB2INSTANCE/$DBNAME/$DIRNODE/C0000000
      ARCHOME=$ARCHOME/$DB2INSTANCE/$DBNAME/$DIRNODE
   fi

   #echo $ARCHOME

#  Count archive log files (3 days ago)

   CNT=`find $ARCHOME -type f -mtime +2 | wc -l`
   #echo $CNT
   #find $ARCHOME -mtime +2 -print

   if [ $CNT -gt 0 ]  
      then
          echo "3 days ago files...." > $SHELLHOME/log/$NOW.out
          find $ARCHOME -type f -mtime +2 -print -exec ls -al {} \; | grep -v dr | sort +5  >> $SHELLHOME/log/$NOW.out
          find $ARCHOME -type f -mtime +2 -print | xargs /bin/rm 
          db2 terminate  >> /dev/null
          exit 
   fi  

#  Count archive log files (2 days ago)

   CNT=`find $ARCHOME -type f -mtime +1 | wc -l`
   #echo $CNT
   #find $ARCHOME -mtime +1 -print

   if [ $CNT -gt 0 ]
      then
          echo "2 days ago files ....." > $SHELLHOME/log/$NOW.out
          find $ARCHOME -type f -mtime +1 -print -exec ls -al {} \; | grep -v dr | sort +5 >> $SHELLHOME/log/$NOW.out
          find $ARCHOME -type f -mtime +1 -print | xargs /bin/rm
          db2 terminate >> /dev/null
          exit 
   fi

#  Count archive log files (1 days ago)

   CNT=`find $ARCHOME -type f -mtime +0 | wc -l`
   #echo $CNT
   #find $ARCHOME -mtime +0 -print

   if [ $CNT -gt 0 ]
      then
          echo "1 days ago files ....." > $SHELLHOME/log/$NOW.out
          find $ARCHOME -type f -mtime +0 -print -exec ls -al {} \; | grep -v dr | sort +5 >>  $SHELLHOME/log/$NOW.out
          find $ARCHOME -type f -mtime +0 -print | xargs /bin/rm
          db2 terminate >> /dev/null
          exit 
   fi

# Exit Shell

exit
반응형

+ Recent posts