페이지

2014년 4월 28일 월요일

create log periodically using crontab and shell script

when I need to create log file periodically, i can use this script

in this script, every 5 minute, a new file is created



vi createLogPeriodically.sh

#d=date +'%Y%m%d%H%M'
#insDate=`date --date='' '+%Y%m%d%H%M'`
insDate=`date '+%Y%m%d%H%M'`
insDateForDir=`date '+%Y%m%d'`

echo "날짜=>" $insDate
#echo ${insDate:10:3} 
strForMinute=${insDate:11:1}
echo "분단위 마지막 한자리=> "  ${strForMinute}

lastDate=${insDate:0:11}
echo "11번째자리가지 자른 날자=>" ${lastDate}

fileNameForLstMinute=0

case "${strForMinute}" in
0)
        fileNameForLstMinute=0
        ;;
1)
        fileNameForLstMinute=0
        ;;
2)
        fileNameForLstMinute=0
        ;;
3)
        fileNameForLstMinute=0
        ;;
4)
        fileNameForLstMinute=0
        ;;
5)
        fileNameForLstMinute=5
        ;;
6)
        fileNameForLstMinute=5
        ;;
7)
        fileNameForLstMinute=5
        ;;
8)
        fileNameForLstMinute=5
        ;;
9)
        fileNameForLstMinute=5
        ;;
*)      echo "there is no value"
        ;;
esac

echo "가공된 분자리 =>" ${fileNameForLstMinute} 

lastDate=${lastDate}${fileNameForLstMinute}

echo "최종 날자=>" ${lastDate}

serverNum="001" //직접 수정
serviceGubn="service"   //직접 수정

#LOG1
logDir="/logs/"${serviceGubn}"/"${insDateForDir}"/"
logFile="LOG."${serverNum}"."${lastDate}".log"
log1=${logDir}${logFile}
mkdir -p -- "${logDir%/*}" && touch  ${log1}

#LOG2
logDir="/logs/"${serviceGubn}"/"${insDateForDir}"/"
logFile="LOG."${serverNum}"."${lastDate}".log"
log2=${logDir}${logFile}
mkdir -p -- "${logDir%/*}" && touch  ${log2}


echo ${logOms}
echo ${logCom}



register this file on crontab
#crontab -e

*/1 * * * * /home/account/createLogPeriodically.sh

2014년 4월 23일 수요일

[altibase]modify colmnun

UPDATE TEST_TABLE SET COL3=''

ALTER TABLE TEST_TABLE
        MODIFY (COL3 VARCHAR(20) DEFAULT 'TEST');

2014년 4월 18일 금요일

[linux]how to install and config haproxy(load balance)


  • get the haproxy rpm
    • haproxy-1.4.22-3.el6.x86_64.rpm
  • set the configure file
# vi /etc/haproxy/haproxy.cfg 



#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------

frontend  nameOfPort1*:18001
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

    use_backend static          if url_static
    default_backend            nameOfPort1

frontend  nameOfPort1*:18002
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

    use_backend static          if url_static
    default_backend            nameOfPort2
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend nameOfPort1
    balance     roundrobin
    server  app1 123.456.789.123:25500 check
    server  app2 123.456.789.124:25500 check
    server  app3 123.456.789.125:25500 check

backend nameOfPort2
    balance     roundrobin
    server  app1 123.456.789.123:25501 check
    server  app2 123.456.789.123:25501 check
    server  app3 123.456.789.123:25501 check



  • if you want to see log file, set the rsyslog
# vi /etc/rsyslog.conf


# Provides UDP syslog reception
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514
SYSLOGD_OPTIONS="-m 0 -r"

local2.*                                                /var/log/haproxy.log


  • restart rsyslog and haproxy

# service rsyslog restart
# service haproxy restart

2014년 4월 15일 화요일

[java]split the string with key value

split the string with key value

   public void appendData() {
        String str= "key1=value1;key2=value2;key3=value3";
//      String[] kvPairs = str.split("\\|"); 
        String[] kvPairs = str.split(";"); 
        
        for (String kvPair : kvPairs) {
            String[] kv = kvPair.split("=",-1);
            String key = kv[0];
            String value = kv[1];
            
            System.out.println(key + " -> " + value);
        }
    }

2014년 4월 14일 월요일

if you have timeout in sendmail read that

The standard mail troubleshooting steps apply here... From the log, we see that you're able to resolve the MX/DNS records for the gmail.com destination you're sending to. So this isn't a DNS or routing issue.
Since this is a basic SMTP delivery, try using telnet to port 25 to make sure you're able to connect to the destination host...
I'd follow this sequence:
dig mx gmail.com
# Look for the mail destination IP in the output - "209.85.225.27" in this case

telnet 209.85.225.27 25
# This is an attempt to telnet to port 25 (smtp) on the recipient's server...
You should see something similar to:
Trying 209.85.225.27...
Connected to iy-in-f27.1e100.net (209.85.225.27).
Escape character is '^]'.
220 ***************************************
If you do not see the above, your outbound port 25 smtp traffic is being blocked either at the machine level (check iptables, etc.) or at the network level (check network firewall or ISP policies).
If you do see a similar message, then you're able to pass mail and shouldn't be receiving timeout errors



source : http://serverfault.com/questions/386432/sendmail-connection-timeout

2014년 4월 10일 목요일

[linux]tar

*tar.gz
tar는 압축을 하는 툴이 아니다 단지 여러개의 파일을 하나의 파일로 모아주기만 한다.
만약에 압축을 하고 싶으면 옵션에 z를 넣고 파일 이름에 확장자를 tar.gz로 한다. (그냥 tar로 해도 상관은 없다..)
-z옵션은 GNU tar에서만 제공하는 기능이다. (리눅스는 GNU tar를 사용한다)

 - 압축하기
    tar zcvf test.tar.gz test

 - 압축풀기
    tar zxvf test.tar.gz

search and replace in < vi >


Vi: Search and Replace

Change to normal mode with <ESC>.


  • Search (Wrapped around at end of file):
    •  Search STRING forward :   / STRING.
    •  Search STRING backward:   ? STRING.
      •  Repeat search:   n
      •  Repeat search in opposite direction:  N  (SHIFT-n)





  • Replace: Same as with sed, Replace OLD with NEW:
    • First occurrence on current line:      :s/OLD/NEW
    • Globally (all) on current line:        :s/OLD/NEW/g
    • Between two lines #,#:                 :#,#s/OLD/NEW/g
    • Every occurrence in file:              :%s/OLD/NEW/g








[altibase]create user

  • create user
CREATE USER TMPADM IDENTIFIED BY TMPADM
DEFAULT TABLESPACE TS_TMP_DISK_DAT 
ACCESS TS_TMP_DISK_DAT ON
ACCESS TS_TMP_DISK_IDX ON 
ACCESS TS_TMP_MEM_DAT ON;


  • grant access to tablespace
alter user TMPADM access TS_TMP_DISK_DAT on;
alter user TMPADM access TS_TMP_DISK_IDX on;
alter user TMPADM access TS_TMP_MEM_DAT on;


  • change user password

ALTER USER TMPADM IDENTIFIED BY 1234;

2014년 4월 9일 수요일

[altibase]db backup using aexport

백업전에 다음을 먼저 수행하여 ./명령어 없이 쉘들이 수행되도록 한다
export PATH=./:$PATH

// 데이터베이스 구조 추출

1. 스크립트 생성
# aexport -s 127.0.0.1 -u iscp -p iscp1 -NLS_USE KO16KSC5601
(환경설정에서 ALTIBASE_NLS_USE을 해주면 뒤에 -NLS_USE옵션은 필요없음)

2.  데이터 추출
# sh run_il_out.sh

======================================================

3. 대상 데이터베이스에 데이터베이스 구조 생성
# sh run_is.sh

4. 대상 데이터베이스에 데이터 로딩
# sh run_il_in.sh

5. 대상 데이터베이스에 인덱스 및 외래키 생성
# sh run_is_index.sh
# sh run_is_fk.sh

가장 중요한 것 - 다음을 하지 않으면 한글땜에 개고생함
export ALTIBASE_HOME='/altibase/altibase_home'
export PATH=./:$PATH
export ALTIBASE_NLS_USE='KO16KSC5601'

- 케릭터셋 조회법
select * from v$nls_parameters

- NLS_USE 데이터베이스 저장 또는 검색시 사용되는 클라이언트 캐릭터 셋이다
  (US7ASCII,KO16KSC5601, MS949, BIG5, GB231280,UTF8, SHIFT-JIS, EUC-JP)
  생략 시 환경변수 ALTIBASE_NLS_USE, altibase.properties를 차례로 참조하며, 설정되지 않았을 경우에는 기본 캐릭터 셋(US7ASCII)을 사용한다.

  즉 다음과 같다
a. NLS_USE 옵션을사용하지않는경우US7ASCII사용한다.
b. UTF8쓰는 경우 NLS_USE 옵션을지정해야한다.
우선순위
방법
1
-NLS_USE 옵션
2
환경변수등록
3
altibase.properties 파일수정



다음은 데이터 백업시 쉘 스크립트에 대한 설명이다

스크립트
용도
사용구분
run_il_out.sh
데이터다운로드스크립트
백업
run_il_in.sh
데이터업로드스크립트
업로드
run_is.sh
스키마생성스크립트
업로드
run_is_fk.sh
외래키생성스크립트
업로드
run_is_index.sh
인덱스생성스크립트
업로드
run_is_repl.sh
이중화생성스크립트
업로드
run_il_out.sh 스크립트만백업절차에서사용하고나머지는업로드절차에서사용된다.

장의내용은ALTIBASE_버전간_마이그레이션_가이드의내용을정리한것으로보다자세한내용은마이그레이션가이드를참고한다.

1.    data migration 전체 절차

data migration대략적인절차는다음과같다.

1.1.    백업 절차

a. 체크포인트수행
b. 데이터건수확인
c. DB 객체다운로드
d. data 다운로드
e. data 확인
f. altibase_home 백업

1.2.    업로드 절차

a. altibase 설치
b. DB 객체확인
c. DB 객체생성
d. 데이터생성


2.    백업

2.1.    백업디렉터리생성

altibase 데이터를백업해디렉터리를생성한다. /user1/altibase하위디렉터리는가급적피한다. root 밑에만들어사용할것을권장한다.
# mkdir alti_backup

2.2.    altibase 중지

a) altibasestop/start 한다.

# server stop
# server start


2.3.    체크포인트수행

다음명령으로아직플러쉬되지않은페이지들을디스크에반영한다.
isql> alter system checkpoint;


2.4.    데이터건수확인

a. 다음쿼리를통해전체table 목록을확인한다.
isql> select * from tab;

b. table 목록을이용하여다음과같은스크립트를만든다
# vi count_source_tb.sql

select count(*) from TABLE_NAME; 
select count(*) from table1;
select count(*) from table2;
select count(*) from table3;
…..(중략)
select count(*) from tablen;


c. 다음명령을통해table데이터count파일에기록한다.
# is -f count_ source_tb.sql -o count_ source_tb.log


2.5.    데이터베이스객체다운로드

a. sys 계정으로aexport수행한다.
b. sys 계정이아닌사용자 계정으로aexport수행할경우 사용자 계정으로생성한테이블스키마데이터만백업된다.
c. sys 계정으로aexport수행하면 사용자계정에대한passwordaexport 수행도중따로물어본다그때입력한다.

2.6.    데이터다운로드

a. aexport수행하면6가지스크립트파일이생성된다.
b. run_il_out.sh 스크립트를수행하여생성된모든데이터를다운로드받는다.
# sh run_il_out.sh


2.7.    백업데이터확인

a. 백업받은디렉터리에생성된테이블명.log” 파일과count_source_tb.log 파일을비교하여전체데이터가백업되었는지확인한다.

2.8.    altibase_home 백업

a. server stop 명령으로구동중인altibasestop 한다.
b. /user1/aitlbase/ 밑의altibase_home 디렉토리의이름을변경하여백업해둔다.
#:/user1/altibase ] mv altibase_home altibase_home_ver4




3.    업로드

3.1.    생성할데이터베이스객체확인

a. altibase일반적으로/user1/altibase/altibase_home설치한다만약다른경로에설치를했다면  ALL_CRT_TBS.sql 스크립트를수정하여경로를변경한다.
# vi  ALL_CRT_TBS.sql
..(전략)
DATAFILE '/user1/altibase/altibase_home/dbs/test.dbf'
..(후략)


3.2.    데이터베이스객체생성

a. aexport 스크립트에의해생성된run_is.sh 스크립트를이용하여데이터베이스객체를생성한다.

3.3.    데이터생성

a. aexport 스크립트에의해생성된run_il_in.sh 스크립트를이용하여데이터를생성한다.
b. 백업절차확인해두었던전체데이터건수와run_il_in.sh 스크립트로생성된데이터건수가일치하는지확인한다.

3.4.    기타작업

a. aexport 스크립트에의해생성된다음스크립트를이용하여필요한작업을한다.
run_is_fk.sh
외래키생성스크립트
run_is_index.sh
인덱스생성스크립트
run_is_repl.sh
이중화생성스크립트



4.    주의사항

4.1.    암호화테이블사용불가

a. 데이터를암호화해서넣은경우마이그레이션이불가능하다.
b. 암호화데이터가있을경우복호화하고백업/업로드를수행한다시암호화를수행해야한다.

4.2.    NLS_USE 지정

a. NLS_USE 옵션을사용하지않는경우US7ASCII사용한다.
b. UTF8쓰는 경우 NLS_USE 옵션을지정해야한다.
우선순위
방법
1
-NLS_USE 옵션
2
환경변수등록
3
altibase.properties 파일수정


4.3.    기타

a. 기타다른주의사항은altibase에서제공하는마이그레이션가이드를참고한다.

image

image