2013년 4월 3일 수요일

CUBRID 설치


환경 : CentOS release 5.8 (Final) / 2.6.18-308.20.1.el5

일단 홈페이지 다운로드 페이지로 접속한다
http://www.cubrid.com/zbxe/download

현재 날짜 기준으로 CUBRID-9.1.0.0212-linux.x86_64.sh 이 최신 버전

적당한 곳에 다운로드를 하고 설치할 그룹과 계정을 생성한다 (여기서는 cubrid/cubrid 로 사용)

그리고 다운로드 받은 파일을 cubrid 계정으로 그냥 실행
cubrid>$ sh CUBRID-9.1.0.0212-linux.x86_64.sh

위에서부터 차례대로

라이센스에 동의하냐?
기본 디렉토리에 설치할꺼냐?
CUBRID는 같은 버전끼리 호환된다. 알아들었냐?

그리고 위의 메세지가 나오면 설치가 성공적으로 끝난거다

설치가 끝난 후 다음 명령어를 실행한다
cubrid>$ . /home/cubrid/.cubrid.sh
CUBRID관련 환경정보 설정이므로 설치 후 한번만 실행하면 된다

모든 설치 및 설정이 완료되면 다음과 같이 구동 및 확인을 한다


웹매니저는 서버 설치시 자동 설치되니 방화벽 확인후 https://localhost:8282/ 로 접속을 하면 된다


일단 간단하게나마 설치를 했으니 매니저, 쿼리 브라우저를 설치하여 테스트를 해본다

테스트의 결론은..

큐브리드에 입사하고 싶다...... 하지만 능력이...ㅜㅜ



2013년 3월 28일 목요일

linux에 java 설치

환경 : CentOS release 5.5 (Final)

처음 centos를 설치하면 기본적으로 openjdk가 설치되어 있다
하지만 개발 환경이 sunjdk라면 해당 jdk를 따로 설치해야된다

일단 oracle 다운로드 페이지에서 설치파일을 다운로드 받자
http://www.oracle.com/technetwork/java/javase/downloads/index.html

현재시간으로 javase6의 가장 최신버전을 다운로드 받았다

1. 실행파일로 모드 변경
# chmod 755 jdk-6u41-linux-x64.bin 

2. java 설치
# ./jdk-6u41-linux-x64.bin 

3. 적당한 위치로 이동
# mv jdk1.6.0_41/ /usr/local/

4. 현재 java 버전 확인
# java -version

5. 현재 java 위치 확인
# which java

6. java 링크 경로 확인
# la -l /usr/bin/java (5번결과)

7. 기존링크 끊어주고 새로운 버전 링크지정
# unlink /usr/bin/java
# ln -s /usr/local/jdk1.6.0_41/bin/java /usr/bin/java (5번결과)

8. 최종확인
# ls -l /usr/bin/java
# java -version

9. symbolic link 관리
# cd /etc
# update-alternatives --install "/usr/bin/java" "java" "/usr/local/jdk1.6.0_41/bin/java" 1
# update-alternatives --config java
# java -version

9번과정은 안해도 되는건데 혹시나 8번까지 완료를 하고 나서도 java version이 openjdk로 인식할 경우 해주면 된다

2013년 3월 11일 월요일

centos에서 yum으로 mysql5.5 설치하기


환경 : CentOS release 5.8 (Final)


CentOS 5.x 에서 yum으로 설치할수 있는 mysql은 5.0.x 이다.

yum으로 mysql 5.5 버전을 설치하기 위해서는 다음 순서대로 실행하면 된다.


1. mysql 중지

service mysqld stop 

2. yum repository 추가

rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm 

3. 기존 mysql 삭제

yum remove mysql mysql-* 

4. libmysqlclient15 설치

yum install libmysqlclient15 --enablerepo=webtatic 

5. mysql 5.5 설치

yum install mysql55 mysql55-server --enablerepo=webtatic 

6. mysql 시작

service mysqld start

7. 테이블 upgrade
mysql_upgrade -u root -p

처음엔 최신버전인 5.6을 설치하려고 mysql56을 했지만 실패
그냥 5.5 설치했다





2013년 3월 8일 금요일

jetty embedded + spring + spring-security + spring-data-jpa + mysql

환경
org.eclipse.jetty : 8.1.8.v20121106
org.springframework : 3.2.0.RELEASE
org.springframework.data : 1.2.0.RELEASE
org.springsecurity : 3.1.3.RELEASE
mysql : 5.5.28

STORY
web.xml, spring.xml 및 각종 config.xml을 없애고 java code 및 java annotation 으로 처리하는것이 최종 목적.
그와 함께 tomcat 대신 jetty를 임베디드 시켜 application 실행시키듯이 main method로 서버실행.
부가적으로 인증은 spring-security를 사용하고 db접근은 spring-data-jpa를 이용하였다

TEST
1. database-context.xml에서 db 설정을 한다 
   - database schema만 생성시켜 놓는다
   - 테이블이 없다면 서버 실행시 테이블을 자동생성 시킴
2. com.dorothy.jetty.Main - main을 실행시킨다
3. test user 정보를 db에 생성시킨다
4. restAPI를 호출한다
POST /test/{pathVar} HTTP 1.1
Host: localhost:8000
Authorization : access_id:access_key
5. log를 확인한다

TODO
처음부터 최종목표대로 NoXML로 하고 싶었지만 은근 애를 먹었다
그래서 일단은 xml설정으로 테스트를 시작하였다
이 소스를 가지고 NoXML로 바꿔나가야겠다

PS.
아 근데 구글블로그는 파일 첨부가 안되는거였군.....ㅡㅡ;;;
일단은 구글드라이브에..

한글 포함된 url 전송


환경
CentOS release 5.8 (Final)
apache-tomcat-7.0.35

현상
개발환경을 모두 utf-8로 맞추고 개발을 했지만 아무리 GET으로 api를 호출해도 한글만큼은 깨지는것이였다
물론 클라이언트에서는 utf-8로 인코딩후 요청

GET /list/?objectPath=/%ED%95%9C%EA%B8%80/ HTTP 1.1

서버는 아래처럼 spring을 사용했기 때문에 당연히 spring에서 처리해주는걸로 기대했지만 그게 아니였다 ㅡㅡ;;

org.springframework-version : 3.2.0.RELEASE
org.springframework.data-version : 1.2.0.RELEASE
org.springsecurity-version : 3.1.3.RELEASE

해결방법
처음엔 받아온 값을 utf-8로 변환시켰었다

String str = new String(value.getBytes("8859_1"), "utf-8");

당연히 잘되었음

하지만 먼가 소스상의 지저분함을 느꼈었고 다른 해결책을 알아보았다
당연히 간단한 방법이 있었음

tomcat의 server.xml에 설정만 해주면 되었다

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />

결론
한글은 위대하다

2013년 2월 4일 월요일

ORA-01652

*** 2008/10/13 16:20 작성한 내용 ***


ORA-01652 : unable to extend temp segment by 128 in table space TEMP
메세지가 출력된다면....

주로 두가지 원인때문인데

temp tablespace를 구성하는 data file의 size가 작은 경우랑
temp tablespace의 max extents에 도달한 경우이다...


첫번째 원인인 경우 일단 temp tablespace의 tempfile크기를 확인한다

SQL>SELECT * FROM DBA_TEMPFILES
2 WHERE TABLESPACE_NAME = 'TEMP';

확인 후 tablespace 공간을 세가지중 한가지 방법으로 추가한다
 
SQL>ALTER TABLESPACE TEMP ADD TEMPFILE'/ORADATA/TEMP02.DBF' SIZE 100M; or
SQL>ALTER DATABASE TEMPFILE'/ORADTA/TEMP01.DBF' AUTOEXTENT ON; or
SQL>ALTER DATABASE TEMPFILE"/ORADATA/TEMP01.DBF" RESIZE 100M;
 
두번째 원인인 경우 v$sort_segment를 확인해서 현재 할당된 크기가 얼마인지 확인한다
그리고 할당할 수 있는 최대 extent의 크기가 얼마인지 확인한다
 
SQL>SELECT max(blocks), max(bytes)
2 FROM DBA_FREE_SPACE
3 WHERE tablespace_name = 'TEMP';

sqlplus에서 sql 튜닝을 위한 간단한 setting

*** 2008/12/18 22:28 작성한 내용 ***


자동 실행 계획 보기
Set AUTOTRACE [OFF, ON, TRACE (ONLY)] [EXPLAIN] [STATISTICS]

SQL> set autotrace on : autotrace 설정
SQL> set autotrace traceonly : SQL문 실행과 숨기기
SQL> set autotrace traceonly explain : 통계 정보 조회하지 않고 실행 계획만 조회

통계정보 읽기
정보구분 :  설명
db block gets : current gets에 대한 논리적 I/O 수
consistent gets : read-consistent gets에 대한 논리적 I/O수
redo size : (DML문에 대해) 생성된 redo의 양
sorts(memory) : 메모리에서 수행된 정렬 횟수
sorts(disk) : 임시 디스크 스토리지를 사용해 수행된 정렬 횟수
physical gets : 디스크에서 읽혀진 블럭 수

SQL> r
1 select group_name user_group
2 from cab_contact_group_info_tb
3 where tid = 90720342
4 and gid = ( select gid
5 from cab_contact_group_tb
6 where tid = 90720342
7 and cid = 407222006
8 and rownum = 1)
9*
Elapsed: 00:00:00.01
Execution Plan
----------------------------------------------------------
Plan hash value: 1180018063
---------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 92 | 8 (0)| 00:00:01 |
|* 1 | TABLE ACCESS BY INDEX ROWID | CAB_CONTACT_GROUP_INFO_TB | 1 | 92 | 3 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | CAB_CONTACT_GROUP_INFO_TB_PK | 1 | | 2 (0)| 00:00:01 |
|* 3 | COUNT STOPKEY | | | | | |
|* 4 | TABLE ACCESS BY INDEX ROWID| CAB_CONTACT_GROUP_TB | 35663 | 1358K| 5 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN | IDX_CAB_CONTACT_GROUP_TB_TID | 12605 | | 4 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("TID"=90720342)
2 - access("GID"= (SELECT /*+ */ "GID" FROM "CAB_CONTACT_GROUP_TB" "CAB_CONTACT_GROUP_TB" WHERE
ROWNUM=1 AND "TID"=90720342 AND "CID"=407222006))
3 - filter(ROWNUM=1)
4 - filter("CID"=407222006)
5 - access("TID"=90720342)
Note
-----
- dynamic sampling used for this statement

Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
156 consistent gets
0 physical reads
0 redo size
521 bytes sent via SQL*Net to client
492 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed

이번 프로젝트 하면서 이넘의 그룹 땜에 몇날며칠을 고생을 했다.................제길.....
인덱스 타는거부터 시작해서..................... 간단한데도 불구하고 쿼리 짜는게 왜케 힘든지..
헌데 이런 좋은 setting 법이 있을 줄이야.....
모르면 손발이 고생한다더니...ㅋㅋㅋㅋ

개발기에서는 잘도 돌아가는것이 엄청난 양이 들어 있는 테이블을 조회하게 했더니 결국 뻗어 버리더라는.........
이런게 있다는걸 진작에 알았더라면 빨리 수정했을텐뎅...흠냐..

공부하자 제발...ㅋㅋㅋㅋㅋ

Docker로 설치된 PostgreSQL에 CSV 파일을 insert하는 과정

1. Docker 컨테이너 실행 : - PostgreSQL 컨테이너가 실행 중이 아니라면 , 다음 명령어로 컨테이너를 시작 ``` docker start <container_name> ``` 2. 컨테...