test 테이블 sbj 컬럼에 데이터가
  "감자고구마"
  "감자 고구마"
  "고구마 감자"

이런식의 데이터가 있다고 가정하자

WHERE 조건 검색시 공백여부와 상관없이 "감자고구마", "감자 고구마" 모두 한번에 검색 하고자 한다면

MySQL, MariaDB
SELECT sbj FROM test WHERE sbj REGEXP '감자[[:space:]]?고구마';
SELECT sbj FROM test WHERE sbj RLIKE  '감자 ?고구마';
(비추)SELECT sbj FROM test WHERE REPLACE(sbj, ' ', '') LIKE '%감자고구마%';

ORACLE, Tibero
SELECT sbj FROM stest WHERE REGEXP_LIKE(sbj, '감자[[:space:]]?고구마')

블로그 이미지

유효하지않음

,

X-Window를 실행하면 기본 한글 입력이 불가합니다.

Linux 특성상 여러 종류에 한글 입력기(IME 종류 : nabi, fcitx, uim, nimf, ibus)가 존재합니다.

우리는 CentOS(RedHat)에서 기본으로 제공하는 ibus를 설치하여 운용하는걸로 하겠습니다.

 

 

** IBUS 패키지 설치(설치는 root 계정으로)

# yum install ibus* ibus-*

 

** 한글 입력 필요한 계정에 ibus 설정하기(필요한 계정마다 설정 필요)

$ ibus-setup




 

    ① 영어 - 영어(미국) ② 제거(R) 하고 ③ 추가(A) 버튼을 클릭하여 한글을 추가한다. 

   


 

   위에서 추가(A)를 클릭하면 나라별 문자 입력기를 추가할 수 있다. ①을 클릭하면 새로운 창에서 ② 한국어를 선택하고 ③ 추가(A)를 클릭하여 저장한다.

   


 

    한국어 - Hangul이 추가되었는지 확인하고 선택한다. 선택한뒤 기본 설정(P) 버튼을 클릭하여 환경설정으로 진입한다.

   


 

   한글 설정부분 창에서 화면에 내용만 남기고 모두 제거한뒤 확인 버튼을 클릭하여 저장한다.(확인 및 닫기를 모든 화면을 닫는다.)

   



 

 

** ibus 기본 환경 설정(root 권한)

# vi /etc/bashrc

    export GTK_TM_MODULE=ibus
    export QT_TM_MODULE=ibus
    export XMODIFIERS=@im=ibus
    
    if test `ps axo user:20,pid,tty,cmd | grep -v grep | grep "/usr/libexec/ibus-dconf" 2> /dev/null | grep $USER | grep "pts/" | wc -l` -eq 0;
    then
        ibus-daemon --xim &
    fi

 

** ibus 입력기 테스트
  - 해당 서버에 접속했던 모든 콘솔은 Client 툴은 접속을 종료하고 다시 접속한다.(또는 $ source /etc/bashrc)
  - MobaXterm 툴을 사용하여 또는 X-Window를 실행할 수 있는 환경(Xming, VcXsrv, XManager)으로 접속을 한다.
  - 일반계정(nextguide)으로  firefox 실행

$ firefox

파이어폭스가 X-Window환경 내에서 본인 PC에 실행되면 URL 입력란에 Shift + Space 키로 한글/영문 변환해서 입력이 가능한지 확인해 본다.









** 그냥 편하게 스크립트로 모든 계정의 적용하기

yum install ibus* ibus-*
# vi /etc/bashrc  (아래에 추가)

export GTK_TM_MODULE=ibus

export QT_TM_MODULE=ibus

export XMODIFIERS=@im=ibus

if test `ps axo user:20,pid,tty,cmd | grep -v grep | grep "/usr/libexec/ibus-dconf" 2> /dev/null | grep $USER | grep "pts/" | wc -l` -eq 0; 

then

    ibus-daemon --xim &

fi



# mkdir -p /etc/dconf/profile
#
cat <<EOF > /etc/dconf/profile/user

user-db:user

system-db:local

EOF


# mkdir -p /etc/dconf/db/local.d
# cat <<EOF > /etc/dconf/db/local.d/00-ibus-input

[desktop/ibus/general]

preload-engines=['hangul']

EOF

# dconf update




   

블로그 이미지

유효하지않음

,


** 큐브리드 다운로드
http://www.cubrid.com/downloads

** 큐브리드 JDBC 다운로드
https://www.cubrid.org/downloads/os-select/64-bit/drivers/jdbc

    driverClassName="cubrid.jdbc.driver.CUBRIDDriver"
    URL="jdbc:CUBRID:192.168.0.xxx:33000:
dbname:public::?charSet=utf-8"


** 매뉴얼
    한글 : https://www.cubrid.org/manual/ko/9.3.0/
    최신버전(영문) : https://www.cubrid.org/manual/en/10.0

 

 

** 큐브리드 설치
# yum install glibc ncurses libgcrypt libstdc++
# useradd -g dba -G dba cubrid
# su - cubrid
$ sh CUBRID-10.1-latest-Linux.x86_64.sh

    라이선스 및 모든 내용에 대해 Y 입력



** 서비스 실행환경 구성
$ vi .bashrc
    . .cubrid.sh

$ . .bashrc


** 서비스 실행
$ cubrid service start

    @ cubrid master start
    ++ cubrid master start: success
    @ cubrid broker start
    ++ cubrid broker start: success
    @ cubrid manager server start
    ++ cubrid manager server start: success

 


** 서비스 종료
$ cubrid service stop

    @ cubrid broker stop
    ++ cubrid broker stop: success
    @ cubrid manager server stop
    ++ cubrid manager server stop: success
    @ cubrid master stop
    ++ cubrid master stop: success



** 서비스 상태 확인
$ cubrid service status

    @ cubrid master status
    ++ cubrid master is running.
    @ cubrid server status
    @ cubrid broker status
    NAME PID PORT AS JQ TPS QPS SELECT INSERT UPDATE DELETE OTHERS LONG-T LONG-Q ERR-Q UNIQUE-ERR-Q #CONNECT #REJECT
    ==============================================================================================================================================================
    * query_editor 15397 30000 5 0 0 0 0 0 0 0 0 0/60.0 0/60.0 0 0 0 0
    * broker1 15408 33000 5 0 0 0 0 0 0 0 0 0/60.0 0/60.0 0 0 0 0
    @ cubrid manager server status
    ++ cubrid manager server is running.

 

** 데이터베이스 생성
$ cubrid createdb --db-volume-size=250M 
dbname ko_KR.utf8

    Creating database with 256.0M size using locale ko_KR.utf8. The total amount of disk space needed is 1.2G.

    CUBRID 10.1

 

** 생성한 데이터베이스 서비스 시작
$ cubrid server start dbname

    @ cubrid server start: dbname

    This may take a long time depending on the amount of recovery works to do.

    CUBRID 10.1

    ++ cubrid server start: success

 


** 생성한 데이터베이스 서비스 종료
$ cubrid server stop dbname

    @ cubrid server stop: dbname

    Server dbname notified of shutdown.
    This may take several minutes. Please wait.
    ++ cubrid server stop: success

 

** 생성한 데이터베이스 서비스 자동시작 처리
$ vi $CUBRID/conf/cubrid.conf

    [service]
    service=server,broker,manager
    server=dbname

 

** 커맨드라인 접속
$ csql 
dbname

    CUBRID SQL Interpreter

    Type `;help' for help messages.

csql> ;exit

 


** 계정 생성(DBA 권한으로 접속)
$ csql --CS-mode
dbname --user=dba
csql> CREATE USER username PASSWORD 'userpasswd';
csql> ;exit

 

** 생성한 User로 접속 확인 및 테이블 생성
$ csql -u
username -p userpasswd dbname
csql> CREATE TABLE test(t1 VARCHAR(10));

    Execute OK. (0.013104 sec) Committed.

    1 command(s) successfully processed.

 

** SQL 스크리트 파일 적용
csql> ;read cubrid_script.sql
csql> ;run

 

** 테이블 목록 확인
csql> show tables;


** 컬럼 목록 확인
csql> SELECT class_name as "table_name", attr_name as "column_name", prec "column_size", data_type, is_nullable as "nullable", default_value FROM DB_ATTRIBUTE WHERE class_name = 'table_name';

블로그 이미지

유효하지않음

,

톰켓에 로그 파일이 복잡하게 생성되어 관리가 복잡합니다.

관련해서 운영에 필요한 정보만(catalina.out 1개 파일만 관리) 생성하도록 처리하는 방법입니다.

 

** 기관에 납품하기전 관련내용 확인 후 변경여부 결정하시기 바랍니다. **

 

 

** handlers 관련 변경하고 나머지 모두 주석처리

# vi $CATALINA_HOM/conf/logging.properties

    handlers = java.util.logging.ConsoleHandler
    .handlers = java.util.logging.ConsoleHandler

    #handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4host-    manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
    #
    #.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
    #
    #############################################################
    ## Handler specific properties.
    ## Describes specific configuration info for Handlers.
    #############################################################
    #
    #1catalina.org.apache.juli.FileHandler.level = FINE
    #1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
    #1catalina.org.apache.juli.FileHandler.prefix = catalina.
    #
    #2localhost.org.apache.juli.FileHandler.level = FINE
    #2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
    #2localhost.org.apache.juli.FileHandler.prefix = localhost.
    #
    #3manager.org.apache.juli.FileHandler.level = FINE
    #3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
    #3manager.org.apache.juli.FileHandler.prefix = manager.
    #
    #4host-manager.org.apache.juli.FileHandler.level = FINE
    #4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
    #4host-manager.org.apache.juli.FileHandler.prefix = host-manager.
    #
    #java.util.logging.ConsoleHandler.level = FINE
    #java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
    #
    #
    #############################################################
    ## Facility specific properties.
    ## Provides extra control for each logger.
    #############################################################
    #
    #org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
    #org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler
    #
    #org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
    #org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandler
    #
    #org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
    #org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.FileHandler
    #
    ## For example, set the org.apache.catalina.util.LifecycleBase logger to log
    ## each component that extends LifecycleBase changing state:
    ##org.apache.catalina.util.LifecycleBase.level = FINE
    #
    ## To see debug messages in TldLocationsCache, uncomment the following line:
    ##org.apache.jasper.compiler.TldLocationsCache.level = FINE

 

 

** Valve 부분 주석처리

# vi $CATALINA_HOME/conf/Catalina/localhost/ROOT.xml

    <?xml version='1.0' encoding='utf-8'?>
    <Context docBase="/usr/local/jakarta/nextbsc/WebRoot" path="/" reloadable="true" antiResourceLocking="false" antiJARLocking="false">
        <Loader delegate="false"/>
        <!-- <Valve className="org.apache.catalina.valves.AccessLogValve" prefix="localhost_access_log." suffix=".txt" pattern="common"/>-->
        <Resource name="jdbc1/dbms" auth="Container" description="DB Connection"
                type="javax.sql.DataSource"
                factory="org.apache.commons.dbcp.BasicDataSourceFactory"
                driverClassName="com.tmax.tibero.jdbc.TbDriver"
                url="jdbc:tibero:thin:@DB:8629:NEXTBSC"
                username="xxxxx"
                password="xxxxx"
                maxActive="100"
                initialSize="30"
                maxIdle="30"
                minIdle="30"
                maxWait="-1"
                validationQuery="SELECT 1 FROM DUAL"
                testOnBorrow="true"
                testOnReturn="false"
                testWhileIdle="false"
                timeBetweenEvictionRunsMillis="60000"
                numTestsPerEvictionRun="5"
                minEvictableIdleTimeMillis="3600000"
        />

        :
        :
        :
    </Context>

 

** catalina.out 파일만 존재여부 확인

# ls $CATALINA_HOME/logs

블로그 이미지

유효하지않음

,



※ClamAV 특장점

  • ClamAV(Clam AntiVirus)는 네트워크 장비로 유명한 시스코 시스템즈에서 지원하는 오픈소스 소프트웨어로 자유 크로스플랫폼
    형식의 바이러스 검사 소프트웨어 
툴킷이다.

  • 바이러스를 비롯한 수많은 종류의 악성 소프트웨어를 찾아낼 수 있다.

  • 주된 목적 가운데 하나는 서버 측면의 전자 메일 바이러스 검사기의 역할을 하면서 메일 서버에 이용

  • 닉스 아니라AIX, BSD, HP-UX, 리눅스, OS X, 오픈VMS, OSF, 솔라리스 같은 서드파티 버전용으로 개발됨

  • 0.96 버전부터 ClamAV는 마이크로소프트 윈도에서 빌드한 다음 실행할 수 있음

  • ClamAV와 소프트웨어 업데이트는 비용을 내지 않고도 이용할 수 있다.

  • 클램AV(ClamAV.net)의 데이터 센터는 전 세계에서 발생하는 바이러스 구조에 대한  방대한 자료를 확보

  • 확보한 방대한 자료를 주기적으로 업데이트 및 공개

  • 데이터베이스는 클램AV 엔진의 핵심으로 유닉스계열에 사용됨

  • 공개자료로서는 사실상 표준처럼 사용됨

  • 메일 게이트웨이 검색 소프트웨어의 오픈 소스 표준

  • 멀티 스레드 스캐너 데몬주문형 파일 검사 및 자동 서명 업데이트를 위한 명령 줄 유틸리티가 포함

  • 여러 파일 형식파일 및 아카이브 압축 풀기 및 여러 서명 언어를 지원

  • 트로이 목마바이러스악성 프로그램 및 기타 악의적 인 위협을 탐지하는 오픈소스  바이러스 백신 엔진

  • 바이러스 서명을 정기적으로 업데이트하는 유틸리티를 제공

 

 

※ ClamAV 설치

** ClamAV 설치를 위한 SELinux 비활성화 처리
# vi /etc/selinux/config
  SELINUX=disabled


** ClamAV 설치를 위한 yum 레파지토리 설치
# yum -y install epel-release


** ClamAV 패키지 설치
# yum install clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd


** ClamAV 환경파일 복사 및 수정처리
# cp /usr/share/clamav/template/clamd.conf /etc/clamd.d/clamd.conf
# sed -i -e "s/^Example/#Example/" /etc/clamd.d/clamd.conf
# sed -i -e "s/^Example/#Example/" /etc/clamd.d/scan.conf
# sed -i -e "s/^Example/#Example/" /etc/freshclam.conf

# vi /etc/clamd.d/scan.conf (# 주석제거)
  LocalSocket /var/run/clamd.scan/clamd.sock


** ClamAV 데이터베이스 업데이트
# freshclam


** ClamAV 데이터베이스 데몬작업(자동 업데이트)
# vi /usr/lib/systemd/system/clam-freshclam.service
  [Unit]
  Description = freshclam scanner
  After = network.target

  [Service]
  Type = forking
  ExecStart = /usr/bin/freshclam -d -c 4
  Restart = on-failure
  PrivateTmp = true
  RestartSec = 20sec

  [Install]
  WantedBy=multi-user.target

 

** ClamAV 서비스 활성화
# systemctl enable clam-freshclam
# systemctl enable clamd@scan

** ClamAV 서비스 실행
# systemctl start clam-freshclam
# systemctl start clamd@scan

** ClamAV 서비스 확인
# systemctl status clam-freshclam
# systemctl status clamd@scan

** ClamAV 바이러스 스캔 확인
# clamscan -r /home/nextguide

  ----------- SCAN SUMMARY -----------
  Known viruses: 6349098
  Engine version: 0.101.4
  Scanned directories: 100
  Scanned files: 66
  Infected files: 0
  Data scanned: 85.75 MB
  Data read: 92.75 MB (ratio 0.92:1)
  Time: 72.517 sec (1 m 12 s)


** ClamAV 검사 스크립트 생성 및 주기적 처리(1회/일)
# vi /usr/local/bin/clamscan.sh

  #!/bin/sh

  SDATE=$(date "+%Y-%m-%d %H:%M:%S")
  echo $'\n\nStart Date :' $SDATE >> /var/log/clamscan.log
  clamscan -ri / >> /var/log/clamscan.log

# chmod 755 /usr/local/bin/clamscan.sh

# crontab -e
  00 04 * * * /usr/local/bin/clamscan.sh

블로그 이미지

유효하지않음

,

** 상위 디렉토리 접근 및 shell 접속 불가등

   

** 디렉토리는 운영서버 환경에 맞도록 수정한다.

# mkdir /data
# groupadd sftp
# useradd -g sftp -G sftp -d /data/nextbsc -s /bin/false nextbsc
# echo "nextbsc" | passwd --stdin nextbsc
# chown -R nextbsc.sftp /data/nextbsc
# chown root /data/nextbsc
# chmod 755 /data/nextbsc
# mkdir /data/nextbsc/upload
# chown nextbsc.sftp /data/nextbsc/upload

# vi /etc/ssh/sshd_config(# 주석처리)
  #Subsystem sftp /usr/libexec/openssh/sftp-server 
  Subsystem sftp internal-sftp -l VERBOSE
 
  # Example of overriding settings on a per-user basis
  Match Group sftp
      ChrootDirectory /data/%u
      X11Forwarding no
      AllowTcpForwarding no
      #PermitTTY no
      #ForceCommand cvs server
      ForceCommand internal-sftp -l VERBOSE


# systemctl restart sshd
 

** 테스트 방법
  1. SSH 접속 확인
  2. SFTP 접속 확인(change directory 여부 점검등)

블로그 이미지

유효하지않음

,

MS949(euc-kr)에서 한글의 경우는 2byte를 사용하고


UTF-8로 변경시 한글은 3byte를 사용함.(ASCII 경우(영문,숫자)는 기존대로 1byte만 사용함)


 



** DBMS 변경시 관련 스크립트 작성 참조(작업전 백업은 필수!!)

   ORACLE, Tibero만 해당됨


 


1. 기존 DB에서(MS949) UTF-8 캐릭터셋 사이즈를 미리 조정한다.


   1-1. 스크립트 생성

        SELECT 'ATLER TABLE '|| table_name ||' MODIFY('|| LOWER(column_name) ||' VARCHAR2('|| LEAST(CEIL(data_length*1.5/10) * 10, 4000) ||'));' AS sqltext

        FROM USER_TAB_COLUMNS

        WHERE data_type LIKE 'VARCHAR%'

        AND data_length > 1

        AND data_length < 4000;


   1-2. 작성된 스크립트 확인

        > 숫자 또는 영문자만 들어가는 필드는 제외한다.

          예) VARCHAR2 형식으로 저장되는 날짜형식등


        > 시스템 관련 테이블의 컬럼은 제외

          예) SYS_XXXXX


   1-3. 작성된(1-1) 스크립트 내용을 기존(MS949)에 적용함




2. 사이즈가 변경된 기존(MS949) DB를 백업한다.



3. 백업한 기존(MS949) DB를 이관할 DB(UTF-8)에 임포트한다.


 


순서정리 : 기존DB 사이즈 조정 스크립트 작성 > 필요없는 컬럼 제외 > 다시 기존 DB에 스크립 적용 > 기존 DB 백업 > 신규 DB(UTF-8) 임포트

블로그 이미지

유효하지않음

,

서버 전송 용량 처리가 설정되어 있지 않으면 Tomcat의 경우 POST 기본 전송 용량은

2MB(우리가 알고 있는 그... 아닙니다.) 입니다. 용량이 큰 HWP 파일의 경우 2MB 이상

될 수 있어 전송시 문제가 발생할 수 있습니다.



$CATALINA_HOME/conf/server.xml 설정 파일의 파라미터 수정


** 변경전 Tomcat 8.x **

<Service name="Catalina">
   <Connector port="80"   protocol="HTTP/1.1" connectionTimeout="200000" redirectPort="8443"
              URIEncoding="MS949" allowLinking="true" allowTrace="false" disableUploadTimeout="true"/>
   <Connector port="8011" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
   <Connector port="8009" protocol="AJP/1.3"  connectionTimeout="20000" redirectPort="8443" />
   <Connector port="8009" protocol="AJP/1.3"  redirectPort="8443" />



** 변경후 Tomcat 8.x **

<Service name="Catalina">
   <Connector port="80"   protocol="HTTP/1.1" connectionTimeout="200000" redirectPort="8443"
              URIEncoding="MS949" allowLinking="true" allowTrace="false"
              disableUploadTimeout="true" maxPostSize="60000000"/>  <!-- 약 57MB 제한 -->
   <Connector port="8011" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxPostSize="-1"/> <!-- 무제한 -->
   <Connector port="8009" protocol="AJP/1.3"  connectionTimeout="20000" redirectPort="8443" maxPostSize="-1"/> <!-- 무제한 -->
   <Connector port="8009" protocol="AJP/1.3"  redirectPort="8443" maxPostSize="-1"/> <!-- 무제한 -->

 


** 주의 ** 

 - Tomcat 7.0.63 미만 : maxPostSize="0"  무제한
 - Tomcat 7.0.63 이상 : maxPostSize="-1" 무제한

블로그 이미지

유효하지않음

,

** 리눅스 본딩(Bonding)이란

   여러개의 NIC(랜카드)를 논리적으로 묶어서 한 개의 NIC의 개수만큼 대역폭을 확장하는 기술

   Fault Tolerance(결함 감내)와 같은 기능을 하며 2개의 NIC를 한 개의 NIC로 묶어서 Active와 Stand By로 

   구성하기도 한다.

 

 

 

** O/S 별 설명

    - HP-UX    : APA

    - SUN      : SunTrunking(IPMP)

    - IBM      : EtherChannel

    - Cisco    : EtherChannel

    - Windows  : Teaming

    - Linux    : Bonding(RedHat(CentOS) 7버전 이상은 Teaming이 별도로 추가됨)

    - 표준용어  : Link Aggregation

 

 

 

**Bonding mode 설명

 

0 : Balance-round robine 정책 : 2개의 NIC를 통한 분배

   첫 번째 가능한 슬레이브부터 마지막까지 순차적으로 전송하며

   이 모드는 부하분산과 장애 감내를 제공합니다.

 

1 : Active-standby 정책 : Active상태의 NIC에 문제 발생시 Fault Tolerance 

    bond에서 하나의 슬레이브만 활성화되며 다른 슬레이브는 활성화된 슬레이브가

    fail 된 경우에만 활성화 됩니다.

 

2 : Balance-XOR 정책 : 0과 비슷하지만 xor연산을 이용한 목적지 Mac과 근원지 Mac을 이용한 분배

    [(출발지 MAC 주소와 도착지 MAC 주소의 XOR) modula 슬레이브 1개]에 기초하여 전송합니다.

    이것은 도착지 MAC 주소에 대해서 동일한 슬레이브를 선택하게 된다. 이 모드는 부하분산과 장애감지를 제공합니다.

  

3 : Broadcast 정책 : 2개의 NIC에 어떤 규칙 없이 데이터 통신 모든 슬레이브 인터페이스에 모든 것을 전송합니다.

 

4 : 802.3ad (link aggregation) - switch에 aggregation 그룹생성이 필요함.

    IEEE 802.3ad dynamic link aggregation정책을 설정하며

    전송과 받는 것은 active aggregator 안에서 모든 slaves 위에서 됩니다.

 

5 : transmit load 밸런스로써 보내는 패킷만 밸런스 합니다.

    outgoing traffic은 각 slave 인터페이스에 현재의 부하에 따라서 분배됩니다.

    incoming traffic는 현재의 slave로 받음. 

 

6 : receive와 transmit패킷을 밸런스 하며 이때 5,6 은 하나의 스위치에 있을때만 동작합니다.

 

    이 mode는 load balancing를 더하여 balance-tlb를 포함 합니다.

 

 

 

 

 

/*--------------------------------------------------*/

/* 본딩 설정(운영서버 적용시 붉은색 수정필요)               */

/*--------------------------------------------------*/

 

 

# cd /etc/sysconfig/network-scripts/

# vi ifcfg-bond0

 

    DEVICE="bond0"

    TYPE="Bond"

    NAME="bond0"

    ONBOOT="yes"

    BOOTPROTO="none"

    IPADDR="192.168.0.190"

    NETMASK="255.255.255.0"

    GATEWAY="192.168.0.1"

    DNS1="8.8.8.8"

    DNS2="168.126.63.1"

    BONDING_MASTER="yes"

    BONDING_OPTS="mode=1 miimon=100 fail_over_mac=1 primary=eno1"

 

 

** 가상화(VirtualBox, vmware등) 서버에서 작업 및 테스트시는 fail_over_mac=1 primary=eno1 옵션이 추가되어야
본딩 운영이 가능하다.

 

 

 

* 내용 추가 및 수정(IPADDR, NETMASK, GATEWAY, DNS1, DNS2 삭제 또는 주석처리)

 

# vi ifcfg-eno1

 

    MASTER="bond0"

    SLAVE="yes"

    DEFROUTE="no"

 

 

 

# vi ifcfg-eno2

 

    MASTER="bond0"

    SLAVE="yes"

    DEFROUTE="no"

 

 

 

# systemctl restart NetworkManager

 

# systemctl restart network

 

# nmcli d (or nmcli c) 

 

  bond0 활성화 여부 확인

 

 

 

 

 

** 본딩 테스트

콘솔 화면을 3개를 접속하거나 연다.

콘솔 1번은 gateway에 ping을 날린다.


# ping 192.168.0.1

 

 

 

콘솔 2번은 bonding 상태를 확인한다.

# watch -d -n 1 "cat /proc/net/bonding/bond0"

 

 

 

 

 

콘솔 3번은 Active된 NIC를 임의로 다운시켜 콘솔 2번, 1번 화면을 확인한다.(또는 랜선을 제거해 본다)

 

 

# ifdown eno1

 

 

 

* 본딩 환경설정 파일

ifcfg-bond0
다운로드
ifcfg-enp0s3
다운로드
ifcfg-enp0s8
다운로드

 

 

 

 

/*--------------------------------------------------*/

/* Teaming 설정(운영서버 적용시 붉은색 수정필요)          */

/* Redhat/CentOS 7.x 이상 버전                        */

/*--------------------------------------------------*/

 

** 기존 NIC 접속 종료
# nmcli con mod enp0s3 connection.autoconnect no
# nmcli con mod enp0s8 connection.autoconnect no

** 티밍 추가 (nmcli 명령어 가각 한줄로 실행)
# nmcli con add con-name team0 type team ifname team0 config 

  '{

    "runner":{"name":"activebackup","hwaddr_policy":"by_active"},

    "link_wath":{"name":"ethtool","delay_up":2500,"delay_down":1000},

     "ports":{"enp0s3":{"prio":-10,"sticky":true},"enp0s8":{"prio":100}}

  }'

 

# nmcli con add con-name team0-port1 type team-slave ifname enp0s3 master team0
# nmcli con add con-name team0-port2 type team-slave ifname enp0s8 master team0
# nmcli con mod team0 ipv4.addresses 192.168.0.186/24
# nmcli con mod team0 ipv4.gateway 192.168.0.1
# nmcli con mod team0 ipv4.dns "8.8.8.8 168.126.63.1"
# nmcli con mod team0 ipv4.method manual
# nmcli con down team0 && nmcli con up team0

본딩 설정과 마찬가지로 티밍 구성시 강상화서버 추가 옵션 "hwaddr_policy":"by_active" 적용해야 정상 적으로 운영(테스트)이 가능하다.

 


** 티밍 상태 확인
teamdctl team0 state

** 티밍 포트 상태 확인
teamnl team0 ports

** 티밍 액티브 포트 상태 확인
teamnl team0 getoption activeport

** NIC 다운
nmcli dev dis enp0s3

** NIC 업
nmcli dev con enp0s3

 

 

* 티밍 환경설정 파일

ifcfg-team0
0.00MB
ifcfg-team0-port1
0.00MB
ifcfg-team0-port2
0.00MB

블로그 이미지

유효하지않음

,

정확히는 Azul사의 문제는 아니지만 상용 제품인 Zing이 있어 먼저 나에게 타겟이 된 것뿐입니다.

좀 더 정확히는 OpenJDK를 기반으로 하는 또는 TCK(Java Technology Certification Kit)를 통과한 

벤더사별 JDK가 문제가 있는 것 같습니다.

회사 업무상 최신 JDK를 사용할 수 없으나 현재 테스트한(게시한 날짜 기준) 버전은(1.8, 11, 12) 

Linux, Windows O/S상관없이 전부 문제가 있었습니다.

Zulu JDK를 테스트 한 이유는 당연히 Oracle JDK 요료화 때문이지요.


테스트에 문제가 있었던 내용은 바로 DecimalFormat, NumberFormat 클래스등의 RoundingMode 반올림(HALF_UP)에 
심각한 버그입니다.

(부동소숫점 문제를 떠나 같은 소스코드 기준으로 Oracle JDK(1.7)와 Oracle/OpenJDK(1.8)를 기반으로 하는 벤더사별 JDK의 결과 값이 맞지 않는다가 문제입니다. )

Azul 쪽에 메일도 보냈는데 1개월이 지나도 답이 없고 개발 커뮤니티 관련 내용 게시도 했는데 별다른 답변은 없는 것 같습니다.

혹 OpenJDK를 기반으로 하는 각 벤더사별 JDK를 Oracle JDK 대안으로 생각하고 현업에 적용하실 계획이 있는 분들은 

좀 더 지켜보시거나 많은 테스트를 해보신 후 적용해하시기 바랍니다.(일반 커뮤니티는 문제가 없겠지만.. 금융, 평가, 분석 등은 문제가...)



** 테스트 JDK **
Zulu JDK, Zing JDK, AdoptOpenJDK, Amazon Corretto, RedHat JDK, OpenJDK

 

java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)



문제가 되는 아주 간단한 테스트 코드(1.8이상의 JDK에서 문제가 발생하네요. ORACLE JDK도 문제고요)

import java.math.RoundingMode;
import java.text.DecimalFormat;

public class RoundTest
{
    public static void main(String[] args)
    {
        double rnd;

        System.out.println("** DecimalFormat");
        DecimalFormat df = new DecimalFormat("#,###.00");
        df.setRoundingMode(RoundingMode.HALF_UP);
        df.setMaximumFractionDigits(2);

        rnd = 212399.535d;
        System.out.println(df.format(rnd));

        rnd = 112399.405d;
        System.out.println(df.format(rnd));
    }
}

## 결과값 (Oracle JDK)
   ** DecimalFormat
   212,399.54
   112,399.41

## 결과값 (Azul Zulu JDK)
   ** DecimalFormat
   212,399.54
   112,399.40

 

 

https://docs.oracle.com/javase/6/docs/api/java/math/RoundingMode.html

https://devdocs.io/openjdk~8/java/math/rounding
HALF_UP API문서를 보면 문제는 없어 보입니다.

 

만약 이런 문제를 안고라도 OpenJDK를 사용하시겠다면
우선 BigDecimal 변경해서 처리해야 될 것 같습니다.

 

BigDecimal bd = BigDecimal.valueOf(rnd);
bd.setScale(2, RoundingMode.HALF_UP);
System.out.println(df.format(bd));  --> 112,399.41

 

 

Azul사에 한번더 문의하니 바로 답변 해주시네요.

https://bugs.openjdk.java.net/browse/JDK-7131459

블로그 이미지

유효하지않음

,

 ** ClusterPlex
   - 장점
      ˚오픈소스(drbd)를 기반을 둔 상용 클러스터 제품
      ˚운영 테스트 완료된 제품
      ˚유지 관리를 쉽게 할 수 있도록 GUI 모니터링 툴 제공
      ˚제조사 전문 유지관리 인력이 존재함(유지보수 감소)

   - 단점
      ˚Active <-> Standby 구조만 사용할 수 있어 부하분산(LB)에 부적합
      ˚Failover 감지후 Standby -> Active 전환시 30초~60초이상 Downtime 발생 이슈(503 Service Unavailable 확인됨)
      ˚상당한 비용발생 


 ** OpenSource HA
   - 장점
      ˚부하분산(LB)에 적합함
      ˚Failover시 실시간 무정지 서비스가 가능함
      ˚오픈소스이고 프리 라이센스여서 비용이 발생하지 않음

   - 단점
      ˚운영 관리가 상대적으로 힘들 수 있음
      ˚전문 유지관리 업체 부재(유지보수 증가)
      ˚운영 테스트 부족(내부 운영자)

 

 

Split Brain 이란?
  시스템의 두 부분 이상이 독립적으로 진행되어 시스템이 일관되지 않게 동작하는 것을 말한다.
  분산 시스템에서 마스터-슬레이브 상태에서 네트워크 이상으로 인해 슬레이브는 마스터가 이상이 있다고 판단한다. 
  때로는 맞을 수도 있고 때로는 오탐일 수도 있다. 만약 잘못된 판단임에도 슬레이브 중 하나가 마스터로 선출이 되면
  두 개의 마스터가 존재하게 된다.  이런 경우를 Split Brain 스플릿 브레인이라고 부른다.

  Cluster내에 2개의 노드(node1, node2) 만 남아 있는 상황
  node1-2 사이에 네트워크 장애 발생, 2개의 노드에서 동일하게 데이터베이스가 정상작동하지 않음
  (접속은 되나 use, select 등 기본 동작 불가)
  Cluster 내의 Master 노드 정족수가 부족(과반수를 초과해야 하나, quorom=1/2)하게 되기 때문
  (이러한 한계를 무시하는 설정도 있고, 노드를 흉내내 주는 대안적 방법으로 garbd(Galera Arbiter로 2개 노드일 때   
   quorom 값을 +1 증가시켜 줌)  를 쓰는 방법도 있으나, 좋은 방법은 아님.

블로그 이미지

유효하지않음

,


Java에서 제목과 같은 클래스는 숫자 포맷을 처리할 때 사용하는 클래스입니다.
잘못 사용하는 케이스가 있어 관련 내용 정리합니다.

DecimalFormat/NumberFormat 포맷 클래스는 별도로 RoundingMode를 설정하지 않을 시
디폴트 RoundingMode는 ROUND_HALF_EVEN 사용합니다.
현재 특정 함수중 numberFormat/numFormat 등이 DecimalFormat 클래스를
사용하고 있습니다. 별도의 RoundingMode를 적용하지 않아 디폴트인 ROUND_HALF_EVEN 사용하니
반올림 숫자 대상의 앞자리 숫자가 홀수냐 짝수냐에 따라 반올림이 되고 되지않는 현상이 발생합니다.
  

  예)
   DecimalFormat df = new DecimalFormat("#,###.00"); 
   double rnd = 112399.405d; 
   System.out.println(df.format(rnd));  --> 112,399.40 

   df.setMaximumFractionDigits(2); 
   df.setRoundingMode(RoundingMode.HALF_UP); 
   System.out.println(df.format(rnd));  --> 112,399.41 


  주의) 테스트 해본 결과 현재 Oracle JDK의 경우 정상이나 Zulu JDK(OpenJDK)의 경우는 문제가 있음
        OpenJDK를 사용하여 배포하는 JDK경우는 BigDecimal 클래스를 사용하여 처리해야 될것 같습니다.
        (테스트 JDK : Zulu JDK, Zing JDK, AdoptOpenJDK, Amazon Corretto, RedHat JDK)

 

 

    double rnd = 112399.405d; 

    DecimalFormat df = new DecimalFormat("#,###.00"); 
    df.setRoundingMode(RoundingMode.HALF_UP); 
    df.setMaximumFractionDigits(2); 

    System.out.println(df.format(rnd)); --> 112,399.40 

    BigDecimal bd = new BigDecimal(rnd); 
    BigDecimal bd = BigDecimal.valueOf(rnd); 
    bd.setScale(2, RoundingMode.HALF_UP); 

    System.out.println(df.format(bd));  --> 112,399.41 

 



** 참고(Java외에 다른 언어 또는 DBMS 등) **

   ROUND_UP                   : 무조건 올림(0을 제외한 값)
   ROUND_DOWN            : 무조건 내림
   ROUND_FLOOR            : 무조건 내림 (음수일 경우에 무조건 올림)
   ROUND_CEILING          : 양수인 경우 올림(ROUND_UP), 음수인 경우 내림(ROUND_DOWN)
   ROUND_HALF_UP        : 반올림 ( >= 5보다 크거나 같으면 올림/ROUND_UP, 아니면 ROUND_DOWN)
   ROUND_HALF_DOWN : 반올림 ( >  5보다 크면 올림/ROUND_UP, 아니면 ROUND_DOWN) 
   ROUND_HALF_EVEN   : 반올림 (버릴 부분의 왼쪽 숫자가 홀수인 경우 ROUND_HALF_UP, 짝수인 경우 ROUND_HALF_DOWN)

 

참고 : https://www.ibm.com/support/knowledgecenter/ko/SSMKHH_10.0.0/com.ibm.etools.mft.doc/ak05380_.htm
        https://docs.oracle.com/javase/6/docs/api/java/math/RoundingMode.html

        https://okky.kr/article/595961

블로그 이미지

유효하지않음

,

톰켓 구동 시 멈춤(지연 10분 이상) 현상이 발생하여 찾아보던중 

 

블로킹 이슈문제가 있네요.

 

해결방법 #1 (O/S별 환경변수 설정)

 ** Linux
    # vi /etc/profile.d/java.sh 또는 vi /etc/bashrc
 
      JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"


 ** Windows
      내컴퓨터 > 고급 시스템 설정 > 고급 > 환경 변수(N).. > 시스템 변수(S) > 새로 만들기(W).. 
 
      변수 이름(N) : JAVA_OPTS
      변수 값(V)   : %JAVA_OPTS% -Djava.security.egd=file:/dev/./urandom
 
 
해결방법 #2 (공통)

 ** java.security 파일 추가 및 수정

   jdk 8 이하 : $JAVA_HOME/jre/lib/security/java.security
   jdk 9 이상 : $JAVA_HOME/conf/security/java.security

   securerandom.source=file:/dev/./urandom

 

자바 버그로 인해 /dev/urandom 을 인식하지 못하고 /dev/./urandom 으로 처리해야 함.

 

 

 

참고 : https://lng1982.tistory.com/261

블로그 이미지

유효하지않음

,

** 설치 운영환경은 CentOS 7.5로 테스트 진행 하였고 운영하고 있습니다.


/*------------------------------*/

/* Linux 환경 확인 및 구성                         */

/*------------------------------*/

** 패키지 설치여부 확인

[root@gampol ~]# rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}(%{ARCH})\n' \

    gcc \

    gcc-c++ \

    libgcc \

    libstdc++ \

    libstdc++-devel \

    compat-libstdc++ \

    libaio \

    libaio-devel



** 패키지 설치

[root@gampol ~]# yum install -y \

    gcc \

    gcc-c++ \

    libgcc \

    libstdc++ \

    libstdc++-devel \

    compat-libstdc++ \

    libaio \

    libaio-devel



** 커널 파라미터 확인

[root@gampol ~]# sysctl -a



** 커널 파라미터 변경하거나 추가함

[root@gampol ~]# vi /etc/sysctl.conf

    kernel.shmmni = 4096

    kernel.shmmax = 4398046511104

    kernel.shmall = 4294967296

    kernel.sem = 10000 32000 10000 10000

    kernel.msgmni = 512

    kernel.sysrq = 0

    kernel.core_uses_pid = 1

    kernel.msgmnb = 65536

    kernel.msgmax = 65536


    fs.aio-max-nr = 1048576

    fs.file-max = 6815744


    net.ipv4.ip_local_port_range = 1024 65500

    net.core.rmem_default = 262144

    net.core.rmem_max = 4194304

    net.core.wmem_default = 262144

    net.core.wmem_max = 1048586



** 커널 파라미터 적용

[root@gampol ~]# sysctl -p



** 계정 자원제한 설정(아래쪽에 추가함)

[root@gampol ~]# vi /etc/security/limits.conf

    * soft nproc 131072

    * hard nproc 131072

    * soft nofile 131072

    * hard nofile 131072

    * soft core unlimited

    * hard core unlimited

    * soft memlock 50000000

    * hard memlock 50000000



** 계정 인증 보안 설정(session 항목 첫라인에 추가함)

[root@gampol ~]# vi /etc/pam.d/login

    session     required    pam_limits.so



** SELinux 설정 해제(변경처리)

[root@gampol ~]# setenforce 0

[root@gampol ~]# vi /etc/selinux/config

    SELINUX=disabled



** hostname 확인 및 변경

[root@gampol ~]# hostname

    localhost.localdomain


[root@gampol ~]# hostnamectl set-hostname gampol

[root@gampol ~]# echo gampol > /proc/sys/kernel/hostname


[root@gampol ~]# hostname

    gampol



/*------------------------------*/

/* Tibero 계정생성                                    */

/*------------------------------*/

[root@gampol ~]# groupadd dba

[root@gampol ~]# useradd tibero -g dba -G dba




/*------------------------------*/

/* 환경변수 추가                                       */

/*------------------------------*/

[root@gampol ~]# su - tibero

[tibero@gampol ~]$ vi .bash_profile

    ### Java Env

    export JAVA_HOME=/usr/local/jdk

    export JDK_HOME=$JAVA_HOME

    export PATH=$JAVA_HOME/bin:$PATH


    ### Tibero Env

    export TB_BASE=/home/tibero

    export TB_HOME=$TB_BASE/tibero6

    export TBGW_HOME=$TB_HOME/client/gateway

    export TB_SID=TDBMS

    export NLS_LANG=KOREAN_KOREA.KO16MSWIN949

    #export NLS_LANG=AMERICAN_AMERICA.UTF8

    #export NLS_LANG=MSWIN949

    export TB_PROF_DIR=$TB_HOME/bin/prof

    export ORACLE_HOME=$TB_HOME/instantclient_11_2

    export LD_LIBRARY_PATH=$TB_HOME/lib:$TB_HOME/client/lib:$ORACLE_HOME:$LD_LIBRARY_PATH

    export SHLIB_PATH=$LD_LIBRARY_PATH

    export LIBPATH=$LD_LIBRARY_PATH

    export PATH=$TB_HOME/bin:$TB_HOME/client/bin:$ORACLE_HOME:$PATH



    ### TBinary Env

    export TBINARY_PATH=$TB_BASE/tbinary

    export PATH=$TBINARY_PATH/monitor:$PATH

    export LANG=ko_KR.eucKR


    ### Tibero Alias

    alias tbbase="cd $TB_BASE"

    alias tbhome="cd $TB_HOME"

    alias tbcfg="cd $TB_HOME/config"

    alias tbcli="cd $TB_HOME/client"

    alias tbscr="cd $TB_HOME/scripts"

    alias tbcfgv="vi $TB_HOME/config/$TB_SID.tip"

    alias tbcliv="vi $TB_HOME/client/config/tbdsn.tbr"

    alias tblog="cd $TB_BASE/log/$TB_SID"

    alias tbi='cd $TB_BASE/tbinary/'

    alias tm='cd $TB_BASE/tbinary/monitor;monitor;cd -'


    PS1='\e[0m[\e[1;31m\h\e[0m:\e[1;32m\u\e[0m@\e[1;33m$TB_SID\e[0m:\e[1;32m$NLS_LANG\e[0m \w]\n\$ '




/*------------------------------*/

/* Tibero 설치 작업                                   */

/*------------------------------*/

** 현재위치 확인

[tibero@gampol ~]$ cd $TB_BASE

[tibero@gampol ~]$ pwd

    /home/tibero



** $TB_HOME 압축 풀기

[tibero@gampol ~]$ tar xvzf tibero6-bin-FS06-linux64-152596-opt-20180306165737.tar.gz



** 확인

[tibero@gampol ~]$ ls -l $TB_HOME

    합계 12

    drwxr-xr-x.  3 tibero dba 4096  7월 26 12:54 bin/

    drwxr-xr-x. 10 tibero dba  105  7월 26 12:54 client/

    drwxr-xr-x.  2 tibero dba 4096  7월 26 12:54 config/

    drwxr-xr-x.  3 tibero dba  249   7월 26 12:55 lib/

    drwxr-xr-x.  3 tibero dba   26   7월 26 12:55 license/

    drwxr-xr-x.  3 tibero dba   22   7월 26 12:55 nls/

    drwxr-xr-x.  3 tibero dba 4096  7월 26 12:55 scripts/



** 기본 디렉토리 생성

[tibero@gampol ~]$ mkdir -p $TB_HOME/data/$TB_SID

[tibero@gampol ~]$ mkdir -p $TBGW_HOME



** 초기 환경파일 생성

[tibero@gampol ~]$ cd $TB_HOME/config

[tibero@gampol ~]$ ./gen_tip.sh

    Using TB_SID "TDBMS"

    /home/tibero/tibero6/config/TDBMS.tip generated

    /home/tibero/tibero6/config/psm_commands generated

    /home/tibero/tibero6/client/config/tbdsn.tbr generated.

    Running client/config/gen_esql_cfg.sh

    Done.



** Tibero 파라미터 수정

[tibero@gampol ~]$ vi $TB_HOME/config/$TB_SID.tip

    DB_NAME=TDBMS

    LISTENER_PORT=8629

    CONTROL_FILES="/home/tibero/tibero6/tbdata/TDBMS/c1.ctl","/home/tibero/tibero6/tbdata/TDBMS/c2.ctl"

    DB_CREATE_FILE_DEST="/data1/tibero6/data/TDBMS"

    #CERTIFICATE_FILE="/home/tibero/tibero6/config/svr_wallet/TDBMS.crt"

    #PRIVKEY_FILE="/home/tibero/tibero6/config/svr_wallet/TDBMS.key"

    #WALLET_FILE="/home/tibero/tibero6/config/svr_wallet/WALLET"

    #ILOG_MAP="/home/tibero/tibero6/config/ilog.map"

    MAX_SESSION_COUNT=200

    TOTAL_SHM_SIZE=4G

    MEMORY_TARGET=8G




[tibero@gampol ~]$ tbboot nomount

      *************************************************************************

      * ERROR: Can't open the license file!!

      * (1) Check the license file - /home/tibero/tibero6/license/license.xml

      *************************************************************************


    (라이선스가 없다면 https://technet.tmaxsoft.com/ 데모라이선스 신청하고 받은 라이선스 파일은 $TB_HOME/license 위치에 복사하도록 한다.)



[tibero@gampol ~]$ tbboot nomount

    Change core dump dir to /home/tibero/tibero6/bin/prof.

    Listener port = 8629


    Tibero 6


    TmaxData Corporation Copyright (c) 2008-. All rights reserved.

    Tibero instance started up (NOMOUNT mode).




[tibero@gampol ~]$ tbsql sys/tibero



# 기본 시스템 데이터 베이스 생성(서버 설치 PATH 확인후 실행한다.)

SQL> CREATE DATABASE "TDBMS"

        USER SYS IDENTIFIED BY tibero

        MAXINSTANCES 8

        MAXDATAFILES 100

        CHARACTER SET MSWIN949

        LOGFILE GROUP 1 '/data1/tibero6/data/TDBMS/log001.log' SIZE 500M,

                GROUP 2 '/data1/tibero6/data/TDBMS/log002.log' SIZE 500M,

                GROUP 3 '/data1/tibero6/data/TDBMS/log003.log' SIZE 500M

        MAXLOGGROUPS 255

        MAXLOGMEMBERS 8

        NOARCHIVELOG

               DATAFILE '/data1/tibero6/data/TDBMS/system001.dtf' SIZE 100M  AUTOEXTEND ON NEXT 1000M MAXSIZE UNLIMITED  DEFAULT TEMPORARY TABLESPACE TEMP

               TEMPFILE '/data1/tibero6/data/TDBMS/temp001.dtf'   SIZE 100M  AUTOEXTEND ON NEXT 1000M MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL AUTOALLOCATE

        UNDO TABLESPACE UNDO

               DATAFILE '/data1/tibero6/data/TDBMS/undo001.dtf'   SIZE 100M  AUTOEXTEND ON NEXT 1000M MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL AUTOALLOCATE;


SQL> exit;


[tibero@gampol ~]$ tbdown

    tbdown failed. proc info file is deleted.

    Hint: Please check if the tbsvr instance was already stopped.


[tibero@gampol ~]$ tbboot

    Change core dump dir to /home/tibero/tibero6/bin/prof.

    Listener port = 8629


    Tibero 6


    TmaxData Corporation Copyright (c) 2008-. All rights reserved.

    Tibero instance started up (NORMAL mode).




[tibero@gampol ~]$ $TB_HOME/scripts/system.sh


    Enter SYS password:

    tibero


    Enter SYSCAT password:

    syscat


    Dropping agent table...

    Creating text packages table ...

    Creating the role DBA...

    Create default system users & roles?(Y/N):

    y


    Creating system users & roles...

    Creating example users...

    Creating virtual tables(1)...

    Creating virtual tables(2)...

    Granting public access to _VT_DUAL...

    Creating the system generated sequences...

    Creating internal dynamic performance views...

    Creating outline table...



/*------------------------------*/

/* Tibero 일반 계정 생성                            */

/*------------------------------*/

** 시스템 계정 접속

[tibero@gampol ~]$ tbsql sys/tibero



/* 기존 유저 삭제 */

DROP USER gampol CASCADE;


/* 기존 작업 테이블 스페이스 삭제 */

DROP TABLESPACE ts_gampol INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;


/* 테이블 스페이스 생성 */

CREATE TABLESPACE ts_gampol

DATAFILE '/data1/tibero6/data/TDBMS/ts_gampol.dtf' SIZE 500M

AUTOEXTEND ON NEXT 500M

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;



/* 유저 생성 */

CREATE USER gampol IDENTIFIED BY gampol

DEFAULT TABLESPACE ts_gampol

TEMPORARY TABLESPACE TEMP

ACCOUNT UNLOCK;


GRANT CONNECT

     ,RESOURCE

     ,SELECT ANY DICTIONARY

     ,SELECT ANY TABLE

     ,ALTER ANY PROCEDURE

     ,ALTER SESSION

     ,CREATE ANY SYNONYM

     ,CREATE VIEW

     ,CREATE DATABASE LINK

     ,CREATE SEQUENCE

     ,CREATE SESSION

     ,CREATE SYNONYM

     ,CREATE TABLE

     ,CREATE ANY TYPE

     ,DELETE ANY TABLE

     ,DROP ANY INDEX

     ,DROP ANY PROCEDURE

     ,DROP ANY SYNONYM

     ,DROP ANY TABLE

     ,DROP ANY TRIGGER

     ,DROP ANY VIEW

     ,DROP ANY TYPE

TO gampol;





/*--------------------------------------*/

/* Oracle Client 설치(최초 설치시)                             */

/*--------------------------------------*/

** Oracle 클라이언트 다운로드

https://www.oracle.com/database/technologies/instant-client/downloads.html

http://www.oracle.com/technetwork/database/database-technologies/instant-client/overview/index.html



** 오라클 클라이언트 최소 패키지 설치(오라클 서버나 별도 클라이언트가 설치 되지 않았다면) 

[tibero@gampol ~]$ unzip instantclient-basic-linux.x64-11.2.0.4.0.zip

[tibero@gampol ~]$ mv instantclient_11_2 $TB_HOME

[tibero@gampol ~]$ ls -l $TB_HOME

[tibero@gampol ~]$ mkdir -p $ORACLE_HOME/network/admin

[tibero@gampol ~]$ vi $ORACLE_HOME/network/admin/tnsnames.ora

    #---- 테스트 ----#

    TDBMS_10g = (

       DESCRIPTION =

           (ADDRESS = (PROTOCOL = TCP) (HOST = 오라클서버 IP) (PORT = 1521))

           (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl10))

    )




** tbdsn.tbr 추가

[tibero@gampol ~]$ vi $TB_HOME/client/config/tbdsn.tbr

    #---- 테스트 ----#

    TDBMS_10g=(

        (GATEWAY=

            (LISTENER= (HOST=127.0.0.1) (PORT=9999))

            (TARGET=TDBMS_10g)

            (TX_MODE=GLOBAL)

        )

    )




** tbgw.cfg 생성

[tibero@gampol ~]$ vi $TB_HOME/client/config/tbgw.cfg

    LOG_DIR=$TBGW_HOME/oracle/log

    LOG_LVL=2

    LSNR_PORT=9999

    MAX_LOG_SIZE=1000

    MAX_LOG_CNT=5

    FETCH_SIZE=32000





/*--------------------------------*/

/* gw4orcl_XXg  서비스 등록                        */

/*--------------------------------*/

** Gateway 바이러리 복사

[tibero@gampol ~]$ cp $TB_HOME/client/bin/gw4orcl_11g $TBGW_HOME/gw4orcl

[tibero@gampol ~]$ ldd $TBGW_HOME/gw4orcl  (Not found 여부 확인)


[tibero@gampol ~]$ $TBGW_HOME/gw4orcl

[tibero@gampol ~]$ tbsql ssoview/ssolink@SSO

SQL> exit;


[tibero@gampol ~]$ tbsql piview_eval/piview_eval@INSA

SQL> exit;


[tibero@gampol ~]$ tbsql lftpmapp/ghktjd0906@EHOZO

SQL> exit;



** db-link 생성(gampol Tibero 계정 접속)

[tibero@gampol ~]$ tbsql gampol/gampol

SQL> CREATE DATABASE LINK TDBMS_10g CONNECT TO '오라클 계정명'     IDENTIFIED BY '계정 비밀번호'  USING 'TDBMS_10g';

SQL> SELECT COUNT(*) FROM 테스트테이블명@TDBMS_10g ;




/*--------------------------------------------------*/

/* Tibero Java 패키지 생성작업(PSM, PL/SQL)                                 */

/*--------------------------------------------------*/

** 암호화 모듈은 kisa에서 제공하는 lib를 활용하여 별도로 만들었으니
    필요한 java lib를 적용코자 한다면 설치 방법만 참고하시기 바랍니다.


** 자바 lib 저장 디렉토리 생성

[tibero@gampol ~]$ mkdir -p $TB_HOME/instance/$TB_SID/java



** 자바 lib 복사

[tibero@gampol ~]$ cd $TB_HOME/instance/$TB_SID/java

[tibero@gampol ~]$ ls -l


    commons-codec-1.10.jar

    kisaOraLib.jar



** 자바 패키지 적용 환경설정 추가

[tibero@gampol ~]$ vi $TB_HOME/config/$TB_SID.tip

        _PSM_BOOT_JEPA=Y

        JAVA_CLASS_PATH=/home/tibero/tibero6/instance/TDBMS/java



** JEPA 연결정보 추가

[tibero@gampol ~]$ vi $TB_HOME/client/config/tbdsn.tbr

        epa=(

                (

                    EXTPROC=(LANG=JAVA)

                    (

                        LISTENER=(HOST=localhost)

                        (PORT=9390)

                    )

                )

        )




** JEPA 환경설정 수정(기본정보 확인)

[tibero@gampol ~]$ cat $TB_HOME/client/epa/java/config/epa.cfg




** psmjava 클래스패스 추가

[tibero@gampol ~]$ vi $TB_HOME/bin/psmjavac

    codec=$TB_HOME/instance/TDBMS/java/commons-codec-1.10.jar

    kisa=$TB_HOME/instance/TDBMS/java/kisaOraLib.jar


    .......:${codec}:${kisa}:${classpath} ${src}



** tbjavaepa 클래스패스 추가

[tibero@gampol ~]$ vi $TB_HOME/client/bin/tbjavaepa

        :

    codec=$TB_HOME/instance/TDBMS/java/commons-codec-1.10.jar

    kisa=$TB_HOME/instance/TDBMS/java/kisaOraLib.jar

        :

    echo "....:$config:$codec:$kisa $mainclass ...."

        :

    echo "....:$config:$codec:$kisa $mainclass ...."





** 패키지 생성 및 테스트

    CREATE OR REPLACE PACKAGE crypto

        AS

            FUNCTION encrypt(str VARCHAR2) RETURN VARCHAR2;

            FUNCTION decrypt(str VARCHAR2) RETURN VARCHAR2;

            FUNCTION sha256(str  VARCHAR2) RETURN VARCHAR2;

        END;

        /


    CREATE OR REPLACE PACKAGE BODY crypto

        AS

            FUNCTION encrypt(str VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'kr.re.nsr.cbc.SeedCBC.encrypt(java.lang.String) return java.lang.String';

            FUNCTION decrypt(str VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'kr.re.nsr.cbc.SeedCBC.decrypt(java.lang.String) return java.lang.String';

            FUNCTION sha256(str  VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'kr.re.nsr.sha.SHA256.encrypt(java.lang.String) return java.lang.String';

        END;

        /


    SELECT crypto.encrypt('암호화 테스트!!') "TestEnc"

              ,crypto.decrypt('8mVH5wJNP9FHE0AmWsgkVQ==') "TestDec"

              ,crypto.sha256('암호화 테스트!!') "TestSHA256"

    FROM DUAL;

블로그 이미지

유효하지않음

,

coldfusion 8의 경우는 apache 2.2까지만 지원하는 컨넥터를 제공합니다.

현재까지 최신 버전인 apache 2.4와 연결을 위해서는 컨넥터(mod_jrun22.c)의 연결 함수명 변경처리와

mod_jrun22.c를 재컴파일 해야됩니다.



[참조] apache 2.4를 CentOS yum(rpm) 또는 해당 O/S별 패키지 관리자로 설치했다면 아래 링크를 참조

        https://g0blin.co.uk/mod_jrun-on-apache-2-4-ubuntu-14-04-coldfusion-9/



[참조] apache 2.4를 소스 컴파일시 설치 방법


** 설치환경

    - CentOS 7.1804

    - coldfusion 8 : /opt/coldfusion

    - apache 2.4   : /usr/local/apache



** apache lib 추가(추가하지 않아도 컴파일시 문제는 없었음)

    # vi /etc/ld.so.conf.d/apache.conf

        /usr/local/apache/lib

        /usr/local/apache/lib/apr-util-1


    # ldconfig



** mod_jrun22.c --> mod_jrun24.c 변경후 컴파일 

    -- 소스 패키지 파일 압축을 풀기위해 임시 디렉토리 생성 

    # mkdir /opt/wsconfig

 

    -- 소스 패키지 파일 임시 디렉토리에 복사

    # cp /opt/coldfusion8/runtime/lib/wsconfig.jar /opt/wsconfig


    -- 임시 디렉토리 이동

    # cd /opt/wsconfig


    -- 소스 패키지 압축풀기

    # unzip wsconfig.jar


    -- 컨넥터 소스 디렉토리 이동

    # cd connectors/src


    -- apache 2.4 컨넥터 파일명으로 변경처리

    # cp mod_jrun22.c mod_jrun24.c


    -- apache 2.4 펑션명으로 변경처리

    # sed -i 's/remote_addr/client_addr/g' mod_jrun24.c


    -- apxs(APache eXtenSion 도구) 확장모듈을 이용한 컴파일 

    # /usr/local/apache/bin/apxs -ic -n jrun mod_jrun24.c \

        jrun_maptable_impl.c \

        jrun_property.c \

        jrun_session.c \

        platform.c \

        jrun_mutex.c \

        jrun_proxy.c \

        jrun_utils.c


    -- 컴파일 완료시 coldfusion lib 디렉토리로 mod_jrun24.so 이동시킴

    # mv /usr/lib/apache/modules/mod_jrun24.so /opt/coldfusion8/runtime/lib/wsconfig/1/


    -- httpd.conf의 jrun 컨넥터 환경변경 처리

    # find /usr/local/apache/conf/httpd.conf -type f -exec sed -i 's/mod_jrun22/mod_jrun24/g' {} +


    -- hjttpd.conf 추가된 내용 또는 변경된 내용 확인

    # vi /usr/local/apache/conf/httpd.conf

        LoadModule jrun_module /opt/coldfusion8/runtime/lib/wsconfig/1/mod_jrun24.so

        <IfModule mod_jrun24.c>

            JRunConfig Verbose false

            JRunConfig Apialloc false

            JRunConfig Ignoresuffixmap false

            JRunConfig Serverstore /opt/coldfusion8/runtime/lib/wsconfig/1/jrunserver.store

            JRunConfig Bootstrap 127.0.0.1:51800

            AddHandler jrun-handler .jsp .jws .cfm .cfml .cfc .cfr .cfswf

        </IfModule>



블로그 이미지

유효하지않음

,