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 법이 있을 줄이야.....
모르면 손발이 고생한다더니...ㅋㅋㅋㅋ

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

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

ORA-28000

*** 2010/08/21 12:11 작성한 내용 ***
 
 
10g에서 일정수 이상 로그인 실패시 계정에 lock이 걸린다
그리곤 'ORA-28000: the account is locked' 같은 에러를 뿜어 내는데
처음설치시에도 락이 걸려있는 계정들이 있다

일단 확인하기

SQL> select username, account_status, to_char(lock_date, 'yymmdd hh24:mi') lock_date
2 from dba_users;

위와 같이 하면 전체 계정에 대한 상태가 나타나는데....

account_status가 OPEN이 아닌 EXPIRED & LOCKED나 LOCKED(TIMED) 면 락이 걸린거....ㅋ
lock_date를 보면 딱 설치한날에 바로 락이 걸려 있는걸 확인할수가 있다... 흠냐..

필요한 계정에 대해 락을 함 풀어보자

SQL> alter user 계정명 account unlock;

이러면 락이 풀린다 ㅎㅎ

참고로 락이 걸리기 위한 횟수를 알아보려면

SQL> select p.profile, p.resource_name, p.limit
2 from dba_users u, dba_profiles p
3 where p.profile = u.profile
4 and username = '계정명';

이러면 되는데

PROFILE RESOURCE_NAME LIMIT
------------------ --------------------------------------- ---------------------
DEFAULT COMPOSITE_LIMIT UNLIMITED
DEFAULT SESSIONS_PER_USER UNLIMITED
DEFAULT CPU_PER_SESSION UNLIMITED
DEFAULT CPU_PER_CALL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL UNLIMITED
DEFAULT IDLE_TIME UNLIMITED
DEFAULT CONNECT_TIME UNLIMITED
DEFAULT PRIVATE_SGA UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS 10
DEFAULT PASSWORD_LIFE_TIME UNLIMITED
PROFILE RESOURCE_NAME LIMIT
DEFAULT PASSWORD_REUSE_TIME UNLIMITED
DEFAULT PASSWORD_REUSE_MAX UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION NULL
DEFAULT PASSWORD_LOCK_TIME UNLIMITED
DEFAULT PASSWORD_GRACE_TIME UNLIMITED

여기서 FAILED_LOGIN_ATTEMPTS 값이 제한 횟수인거다
이건 귀찮아서 캡쳐 대신 그냥 복사붙여넣기 신공을......ㅋ

제한을 두기 싫다면 그 제한을 풀어버리면 된다

SQL> alter profile default limit FAILED_LOGIN_ATTEMPTS UNLIMITED;

후훗..... 간단하지 아니한가......ㅋㅋ

export / import

*** 2008/10/21 20:04 작성한 내용 ***


다른 설명 필요 없이 간단한 예제로 확인하기.....
정의가 궁금하다면 구글링~~~~~으로 해결하장...ㅎㅎ

$ sqlplus '/as sysdba'
SQL>startup
Database opened.
SQL>host

여기서 sqlplus가 아닌 운영체제로 돌아간다는게 포인트.....ㅎㅎ
오라클과 상관없이 백업가능하다는 얘기..

$ mkdir /oracle/exp_test/
$ cd /oracle/exp_test
$ exp hr/hr tables=employees,departments rows=y file=/oracle/exp_test/emphr.dmp
Export terminated successfully with warnings.

확인을 하면 이런 파일이 하나 생겼겠지
/oracle/exp_test/emphr.dmp

이건 hr의 2개의 테이블이 파일 형태로 빠진것....

$ exit
exit
SQL>

테스트를 위해 일단 export시킨 두개의 테이블을 drop 시키자

SQL> drop table hr.employees cascade constraint;
Table dropped.
SQL> drop table hr.departments cascade constraint;
Table dropped.

테이블 확인을 하면
ORA-00942: table or view does not exist
요딴 에러가 뜨겠징.....

이걸 import를 이용하여 복원시킨다면 오라클과 아무 상관없이 복원가능
즉, 서비스 중단이라는걸 하지 않아도 된다는 얘기가 된다
import 역시 운영체제 콘솔에서 실행한다

SQL>host
$ imp hr/hr tables=employees,departments rows=y file=/oracle/exp_test/emphr.dmp
. importing HR's objects into HR
. . importing table "EMPLOYEES" 107 rows imported
. . importing table "DEPARTMENTS" 27 rows imported
About to enable constraints...
Import terminated successfully without warnings.
$ exit
exit
SQL>

다시 해당 테이블을 확인하면 이전의 데이터가 그대로 있겠지..
정말 간단하면서도 쉬운 백업과 복원 기술이 된당.....ㅎㅎ
더군다나 DB를 stop시키지 않아도 사용할수 있는 상당히 매력있는 방법.....
이런걸 실무에서 사용할 일이 있을까나........ㅋㅎ

하둡 (hadoop) 설치

환경 : CentOS release 5.8 (Final)


1. 다운로드

아래 주소로 들어가 버전별로 다운로드 하면 된다
http://apache.mirror.cdnetworks.com/hadoop/common/

• 1.0.X - current stable version, 1.0 release
• 1.1.X - current beta version, 1.1 release
• 2.X.X - current alpha version
• 0.23.X - simmilar to 2.X.X but missing NN HA.
• 0.22.X - does not include security
• 0.20.203.X - old legacy stable version
• 0.20.X - old legacy version

작성시간 기준으로 1.0.4 가 가장 안정버전이라 해당 버전으로 테스트했다
Documentation : http://hadoop.apache.org/docs/r1.0.4/index.html


2. 설치

다운로드한 파일(hadoop-1.0.4.tar.gz)을 앞축풀면 설치끝
나는 hadoop user를 생성하여 설치를 했다
각종 PATH는 생략
정상적으로 설치가 되었다면

hadoop>$ hadoop version
Hadoop 1.0.4
Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1393290
Compiled by hortonfo on Wed Oct  3 05:13:58 UTC 2012
From source with checksum fe2baea87c4c81a2c505767f3f9b71f4

대충 위와 같은 메세지가 뿌려진다


3. 환경 설정

하둡은 다음의 세가지 방식중 한가지로 동작

• Local (Standalone) Mode
• Pseudo-Distributed Mode
• Fully-Distributed Mode

이중에서 Local Mode는 아무것도 설정해 줄것이 없기 때문에 Pseudo-Distributed Mode로 설정한다

hadoop-env.xml 설정
# The java implementation to use.  Required.
export JAVA_HOME=/usr/java/jdk1.6.0_25
 
.bash_profile에 JAVA_HOME를 잡아두어도 여기에 설정하지 않으니깐 JAVA PATH가 잡히지 않았다는 에러가 나타났다(이유를 모르겠음)
그래서 처음 설치할때 .bash_profile에 따로 PATH를 잡아 두지 않고 생략한 것이다

core-site.xml 설정

HDFS와 mapReduce에 공통적으로 사용되는 하둡코어 환경설정
<configuration>
 <property>
  <name>fs.default.name</name>
  <value>hdfs://localhost:9000</value>
 </property>
 <property>
  <name>hadoop.tmp.dir</name>
  <value>/home/hadoop/temp</value>
 </property>
</configuration>
 

hdfs-site.xml 설정

HDFS 데몬환경
Pseudo-Distributed Mode이므로 동일한 서버에 네임노드와 데이터 노드를 설정
<configuration>
 <property>
  <name>dfs.name.dir</name>
  <value>/home/hadoop/dfs/name</value>
 </property>
 <property>
  <name>dfs.name.edits.dir</name>
  <value>${dfs.name.dir}</value>
 </property>
 <property>
  <name>dfs.data.dir</name>
  <value>/home/hadoop/dfs/data</value>
 </property>
 <property>
     <name>dfs.replication</name>
     <value>1</value>
    </property>
</configuration>
 

mapred-site.xml 설정

job tracker와 task racker 같은 mapReduce 데몬환경
<configuration>
 <property>
  <name>mapred.job.tracker</name>
  <value>localhost:9001</value>
 </property>
 <property>
  <name>mapred.local.dir</name>
  <value>${hadoop.tmp.dir}/mapred/local</value>
 </property>
 <property>
  <name>mapred.system.dir</name>
  <value>${hadoop.tmp.dir}/mapred/system</value>
 </property>
</configuration>
 

slaves 설정

데이터 노드와 task tracker를 작동시킬 컴퓨터의 목록
실제 분산 환경으로 처리할때는 데이터 노드에 해당하는 컴퓨터 ip나 호스트명을 써주면 됨
localhost
 

SSH 설정

master 서버와 slave 서버들이 상호 접속 가능하기 위해
slaves를 localhost로 설정했더라도 데몬 프로세스를 실행시키기 위해 로컬 호스트에 암호 입력없이 ssh로그인할수 있도록 설정할 필요가 있음

hadoop>$ ssh-keygen -t rsa
hadoop>$ cp hadoop-env.sh hadoop-env.sh.back
hadoop>$ ssh localhost

네임노드를 HDFS로 포맷

hadoop>$ hadoop namenode -format


4. 실행 및 종료

hadoop>$ ./start-all.sh //모두 실행
hadoop>$ ./start-mapred.sh //맵리듀스만 실행
hadoop>$ ./start-dfs.sh //hdfs만 실행

hadoop>$ ./stop-all.sh //모두 중단
hadoop>$ ./stop-mapred.sh //맵리듀스만 중단
hadoop>$ ./stop-dfs.sh //hdfs만 중단

맵리듀스 : http://localhost:50030
HDFS     : http://localhost:50070

해당페이지가 열리지 않는다면 방화벽이 열렸는지 확인해본다


5. 테스트
hadoop 배포판에 기본적으로 포함된 예제를 돌려본다
CHANGES.txt파일에 있는 단어수를 체크해서 출력하는 예제임

hadoop>$ bin/hadoop dfs -mkdir input
hadoop>$ bin/hadoop dfs -put CHANGES.txt input/
hadoop>$ bin/hadoop jar hadoop-examples-1.0.4.jar wordcount input output

hadoop>$ bin/hadoop dfs -get output output


설치하고 기본예제까지 돌려 봤지만 이걸 어디다 써먹을지는 고민중이다
그래도 한번은 써먹게 되지 않을까...





JEUS Shared Server 설정

*** 2009/01/20 05:04 작성한 내용 ***


Jeus는 이미 pool을 사용하고 있어서 아무 문제가 없고.....
어플 데몬은 pool 적용을 아무리해도 되질 않길래 결국 Oracle server #1, #2 중에서 #2번을 shared로 구성하기로 결정났다

일단 서버 #1, #3번의 어플데몬이 DB#2을 바라보고 있기에 #1, #3의 접속 정보 및 DB#2 parameter 값을 수정을 했다

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.1.75)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=testdb)(SERVER=SHARED)))

server=shared 만 추가해주면 되는구만.....ㅋ
defult는 dedicated이라는것도 알아두고...

DB쪽이야.... DBA가 설정을 하겠지만 간단하게 적자면...
initTESTDB#2.ora 파일에 sessions, dispatchers, shared_servers, max_dispatchers, max_shared_servers 의 초기화 파라미터 값들을 추가수정해주면 될듯...

그리고 데몬중지 -> listener 종료 -> instance 종료 -> listener 시작 -> instance 시작 -> 데몬시작 순으로 적용을 하면 끝.......ㅋㅋ

헌데 이렇게 10분이면 끝날 작업이 DB#2를 바라보는 서버 #2번의 jeus 땜에 시간을 정말 많이 끌었다
이미 pool을 사용하고 있는데 DB server 가 shared 로 구성됐다고 자기도 shared로 붙어 버린다는...

흠.... 요거 아무리 구글링을 해도 답이 나오질 않는다

지금 사용하는건 6버전이라......... 더군다나 WEBMain.xml을 사용도 하지 않는데...
WEBMain.xml 파일만 건드는것만 나온다는............... ㅡㅡ;;;
우린 JEUSMain.xml을 건들어야 되는데........
결국 jeus 기술자를 불러서 설정을 했는데 너무나도 간단히....

<data-source>의 <database>안에
<property>
<name>URL</name>
<type>java.lang.String</type>
<value>jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.1.75)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=testdb)(SER
VER=DEDICATED)))</value>
</property>

를 추가시켜 주었다...... 그리고 중복되는 parameter 값들은 주석처리...
재시작...

아 머리아퍼!!!!!

crontab 사용법

*** 2008/10/13 19:51 작성한 내용 ***


명령어 위치 : /usr/bin/crontab
사용형식 : crontab [ -u 사용자id ] 파일
crontab [ -u 사용자id ] { -l | -r | -e }

$ crontab -l : 현재 등록된 내용을 보고자 할때
$ crontab -e : 설정 파일을 새롭게 편집하고자 할때 (vi편집기로 들어가지던뎅..)
$ crontab -r : 등록된 내용을 삭제하고자 할때


$ cat /etc/crontab

01 * * * * root run-parts /etc/cron.hourly (매시 1회 자동실행하기 위한 시스템 크론 설정)
02 4 * * * root run-parts /etc/cron.daily (매일 1회 자동실행하기 위한 시스템 크론설정)
22 4 * * 0 root run-parts /etc/cron.weekly (매주 1회 자동실행하기 위한 시스템 크론설정)
42 4 1 * * root run-parts /etc/cron.monthly (매월 1회 자동실행하기 위한 시스템 크론설정)

#매일 매시 01분마다 /etc/cron.hourly 디렉토리내에 존재하는 파일들을 실행
#매일 새벽 4시 02분마다 /etc/cron.daily 디렉토리내에 존재하는 파일들을 실행
#매주 일요일 새벽 4시 22분마다 /etc/cron.weekly 디렉토리내에 존재하는 파일들을 실행
#매월 1일 새벽 4시 42분마다 /etc/cron.monthly 디렉토리내에 존재하는 파일들을 실행

root 이외의 사용자에게 crontab 명령어를 이용할 수 있게 할려면 /etc/cron.allow 파일에 사용자의 계정을 등록한다
일반사용자의 crontab 명령어사용을 제한하고자 한다면 /etc/cron.deny 파일에 사용자의 계정을 등록한다


cron 설정하는 방법

$ crontab -e
를 실행해서 편집 후 저장하고 나온다

10 0 * * * /software/app/pims/auto/shell/activeManager.sh
(매일 00시 10분에 activeManager.sh를 실행하라는 의미)

첫번째 10은 10분을 의미함 (분을 의미 : 0~59)
두번째 0은 00시를 의미함 (시를 의미 : 0~23)
세번째 * 은 매일을 의미함 (일을 의미 : 1~31)
네번째 * 은 매월을 의미함 (월을 의미 : 1~12)
다섯번째 * 은 매주를 의미함(요일을 의미 : 1(월)~7(일))
마지막 /software/app/pims/auto/shell/activeManager.sh 는 activeManager.sh을 실행하라는 의미

50 23 * * * root /software/app/pims/auto/shell/autoSmsLog.sh
(매일 23시 50분에 root계정으로 autoSmsLog.sh를 실행하라는 의미)

* 문자 : 각 필드에 해당하는 모든 숫자를 의미
- 문자 : 각 필드자리에 하이픈 문자가 올수 있음
, 문자 : 각 필드자리에 콤마문자가 올수 있음

ex) 일 필드자리에 11-15 (11,12,13,14,15일을 의미)
ex) 일 필드자리에 1,11,21 (1일,11일 21일을 의미)


crontab -r은 사용하지말자.............ㅋㅎ
사용하는 순간 등록된 내용이 모두 지워지더구만............흠냐............
필요없는 실행명령어가 있다면 그냥 편집모드로 들어가서 주석처리를 하던지 필요없는 줄만 삭제를 하도록...
복구 방법이 있다던데 그냥 패스...........~~~~

10g 수동 설치

*** 2011/01/24 11:20 작성한 내용 *** 
 
 
프로젝트 서버 설정시 시행착오를 너무나 많이 겪어서 조금이라도 시간을 단축하고자 오랜만에 블로그 작성해봄..ㅋㅋ
 
OS : CentOS release 5.5 (Final)
DB : ORACLE 10g 10.2.0
디렉토리 경로는 상용 서버 기준으로 작성
 
첨부터 xWindow 상에서 설치가 된다면 아래 작업은 필요가 없지만
상용 서버 작업을 하면서 설치 중간에 다운되는 현상이 발견되어 수동설치를 하였음
 
**. 사전작업 및 오라클 엔진 설치 (중략….)
오라클 설치시 원격 및 로컬에서 xWindow 상에서 설치를 해야됨 (9i 부터 텍스트설치 불가능)
하지만 처음 설치할 때 데이터베이스와 같이 설치를 하니 오류 발생
해결방안으로 데이터베이스 설치를 선택하지 않고 오라클 엔진만 설치 후 데이터베이스는 추후 수동설치

 
아래부터는 수동설치 절차

 
1. DB가 설치될 경로 및 이름 생성 (sid : solution)
 
> mkdir -p /usr/local/oracle/product/10.2.0/db_1/admin/solution/adump
> mkdir -p /usr/local/oracle/product/10.2.0/db_1/admin/solution/bdump
> mkdir -p /usr/local/oracle/product/10.2.0/db_1/admin/solution/cdump
> mkdir -p /usr/local/oracle/product/10.2.0/db_1/admin/solution/udump
> mkdir -p /usr/local/oracle/product/10.2.0/oradata/solution/
 
adump : audit 관련 trace log
bdump : b/p 관련 frace log 및 alert log
cdump : core dump 경로, 비정상적인 종료등에 대한 log
udump : u/p 관련 trace log
script 오라클 생성 스크립트 위치 (dbca 생성 옵션)
pfile : 기본 pfile 위치
dpdump : 10g NF, datapump directory
 
 
 
2. inital parameter 생성 및 설정
 
parameter 설정 시 pool_size 에 유의 해야됨
아래 pool_size 값의 합이 sga_target 값을 넘어서면 안됨
여기선 초기 설정 값으로 512M 로 지정함
아래 값이 잘못 설정되면 아래의 6번 작업 시에 shared_pool error 발생
 
sysdba 접속 후 nomount 상태서 show parameter 로 설정된 값을 확인한다
 
> vi $ORACLE_HOME/dbs/initsolution.ora
 
solution.__java_pool_size=4194304
solution.__large_pool_size=4194304
solution.__streams_pool_size=0
*.audit_file_dest='/usr/local/oracle/product/10.2.0/db_1/admin/solution/adump'
*.background_dump_dest='/usr/local/oracle/product/10.2.0/db_1/admin/solution/bdump'
*.core_dump_dest='/usr/local/oracle/product/10.2.0/db_1/admin/solution/cdump'
*.user_dump_dest='/usr/local/oracle/product/10.2.0/db_1/admin/solution/udump'
*.compatible='10.2.0.1.0'
*.control_files='/usr/local/oracle/product/10.2.0/oradata/solution/control01.ctl','/usr/local/oracle/product/10.2.0/oradata/solution/control02.ctl','/usr/local/oracle/product/10.2.0/oradata/solution/con
trol03.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='solution'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=solutionXDB)'
*.job_queue_processes=10
*.nls_language='KOREAN'
*.nls_territory='KOREA'
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=536870912
*.sga_max_size=524288000
*.shared_pool_size=209715200
*.db_cache_size=209715200
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
 
 
 
3. password file 생성
 
orapwSID 로 생성
entries : sysdba 권한부여자 최대수
password : sys암호
 
> orapwd file=$ORACLE_HOME/dbs/orapwsolution password=oracle entries=5
 
 
 
4. DB 생성 할 SID로 변경
 
> echo $ORACLE_SID 현재 SID 확인
> export ORACLE_SID=solution 변경
 
 
 
5. 오라클 인스턴스 생성
 
> sqlplus / as sysdba
sql> startup nomount
sql> @db_install.sql
 
CREATE DATABASE solution
logfile
group 1 ('/usr/local/oracle/product/10.2.0/oradata/solution/redo01.log') size 10m reuse,
group 2 ('/usr/local/oracle/product/10.2.0/oradata/solution/redo02.log') size 10m reuse,
group 3 ('/usr/local/oracle/product/10.2.0/oradata/solution/redo03.log') size 10m reuse
maxlogfiles 5
maxlogmembers 5
maxloghistory 1
maxdatafiles 100
maxinstances 1
controlfile reuse
datafile '/usr/local/oracle/product/10.2.0/oradata/solution/system01.dbf' size 325m reuse autoextend on next 10m maxsize unlimited
sysaux
datafile '/usr/local/oracle/product/10.2.0/oradata/solution/sysaux01.dbf' size 600m reuse autoextend on next 10m maxsize unlimited
undo tablespace undotbs1
datafile '/usr/local/oracle/product/10.2.0/oradata/solution/undotbs01.dbf' size 200m reuse autoextend on maxsize unlimited;
 
인스턴스 상태 확인 (status : open)
select instance_name, status from v$instance;
 
 
 
6. 카탈로그 DB 생성 및 오라클 프로시저 생성
 
sql> @after_db_create.sql
 
각각 순서대로 실행시키거나 스크립트 생성후 실행
 
sql> conn sys/change_on_install as sysdba
sql> @/usr/local/oracle/product/10.2.0/db_1/rdbms/admin/catalog.sql
sql> @/usr/local/oracle/product/10.2.0/db_1/rdbms/admin/catproc.sql
sql> conn system/manager
sql> @/usr/local/oracle/product/10.2.0/db_1/sqlplus/admin/pupbld.sql
 
데이터베이스 property 확인
 
sql> select property_name, property_value from database_properties;
 
 
 
7. 유저생성 후 해당 SID로 접속

sql> create user solution identified by solution;
sql> grant connect, resource to solution;
sql> select * from all_users;

solaris10 + apache2 + tomcat6 설치 및 연동

*** 2010/07/29 15:13 작성한 내용 ***


환경
solaris10 / sparc
httpd-2.2.16
apache-tomcat-6.0.29
tomcat-connectors-1.2.30

solaris10은 처음 설치시 아파치와 톰캣이 설치가 되어 있다
하지만 시간이 많이 지난 지금 최신 버전을 설치를 하기 위해 과감히 삭제

패키지로 설치된 아파치같은 경우 해당 패키지를 찾아 모두 삭제를 한다

root$ pkginfo -i | grep -i apache
root$ pkgrm 패키지명

그리고 설치를 위해 아파치를 다운받는다
헌데 처음 sunfreeware에서 컴파일된 파일로 패키지 설치를 하니
나중에 tomcat 연동이 제대로 되지 않았다...
이유는 나도 잘 모르겠음......
설치는 DSO, static방식 이런게 있다던데 아마도 static방식이라 그렇다고 하더라..

그래서 http://httpd.apache.org/ 여기서 최신버전을 받는다
Unix Source: httpd-2.2.16.tar.gz 이걸받음

설치시에 root 계정으로 해야되며 gcc도 설치되어있어야 한다
gcc가 설치되어 있지 않다면 sunfreeware에서 받아 설치부터 하면 됨

root$ gunzip httpd-2.2.16.tar.gz
root$ tart xvf httpd-2.2.16.tar

해당폴더로 이동후에 configure를 실행하는데 DSO방식으로 설치해야하기 때문에 옵션을 준다

root$ cd httpd-2.2.16
root$ ./configure --enable-so --enable-mods-shared=most

머라고 막 checking하면서 뭔가 진행되고 나서 make 파일이 생성되었다고 나옴.. 다되면.....

root$ make

이것도 머라고 막 오랫동안 컴파일함....

root$ make install

이렇게 하면 디렉토리에 배포

대충 so를 가능하게하고, modsshared를 most하겠다는 말같음
저렇게 하면 DSO방식으로 설치하는 거라함
나도 잘 모르겠다........그냥 그렇다고들 하더라.....에효....
configure를 마치면 make를 실행해서 컴파일하고, make install을 해서 배포하는거임
default 폴더는 /usr/local/apache2/ 인데 변경할 수도 있다
그건 검색~~~ 왠만하면 안바꾸는게......ㅋㅋ

일단 설치가 완료되면 httpd.conf파일을 수정한다

그전에 /usr/local/apache2/bin/ 에 대해 PATH추가

root$ vi /usr/local/apache2/conf/httpd.conf

- User와 Group을 nobody로 설정
- ServerName에 서버 아이피 또는 도메인 설정
- DirectoryIndex 지시자에 index.jsp 추가
- <Directory />에 "Deny from all" 라인 주석 처리

저장후

root$ /usr/local/apache2/bin/apachectl start
root$ ps -ef | grep httpd

하면 프로세스가 떠있으면 된거

웹에서 서버네임으로 접속해보자
It works! 라고 뜨면 오키

그리고 두번째로 톰캣을 설치한다

톰캣 설치는 그냥 압축풀면 끝

주의사항은 JDK가 깔려 있어야 한다는 겁니다. 솔라리스는 기본적으로 JDK5가 깔려있음
$ java -version 쳐서 확인하고, 안나오면 설치

그리고 다시 톰캣을 설치한다

위와 같은 방식으로 gunzip, tar 까지 벗겨낸다

다됐으면 좋은자리에 옮겨놓자

톰캣설치는 굳이 root 계정으로 안해도 된다

$ mv -r apache-tomcat-6.0.29 /usr/local/tomcat/

/usr/local/tomcat/ 디렉토리로 옮겨놓고
/usr/local/tomcat/bin 로 PATH를 잡아준다

그리고 실행

$ /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar

대충 이렇게 뜸...
웹에서 확인하면
http://ip주소:8080/ 해서 고양이가 나오면 정상

이렇게 아파치와 톰캣을 설치했다면 마지막으로 이 둘을 연동시키자

우선 http://tomcat.apache.org/download-connectors.cgi 에 접속을 하여 tomcat connector unix버전을 받는다

이것 역시 위와 같은 방식으로 gunzip, tar 을 벗겨낸다

압축을 풀었으면 해당 디렉토리의 native 안으로 들어간다
그리고, 아래와 같은 명령어를 쳐준다

아파치 설치할때와 과정이 똑같기 때문에 별 어려움은 없다

root$ ./configure --with-apxs=/usr/local/apache2/bin/apxs

머라 머라 나올꺼임....
처음 아파치를 패키지형식으로 설치를 했다면 저기서 no apxs given 라고 나오면서 에러가 발생된다
아마도 위에서 말한 static으로 설치해서 그럴꺼임
이걸 몰라서 3일동안 삽질을.............ㅡㅡ;;;
마지막에 no apache given이랑 no netscape given이라는게 뜨는데 이유는 몰겠지만 진행은 됨

make를 실행해서 컴파일하고, make install해서 해당 디렉토리로 mod_jk.so 파일을 배포
make install 이 끝나고 나면 /usr/local/apache2/modules 에 mod_jk.so 파일이 생성되어 있다

root$ make
root$ make install

여기까지 끝나면 아파치의 설정 디렉토리로 이동한다 ( /usr/local/apache2/conf/ )
그리고 workers.properties 파일을 생성한 뒤 아래 내용 작성

workers.tomcat_home=/usr/local/tomcat
workers.java_home=/jdk1.6.0_03
ps=/
worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

그리고 httpd.conf 파일을 수정

맨아래 그대로 붙여넣으면 됨...ㅋㅋ

#
# Mod_jk settings
#
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /usr/local/apache2/conf/workers.properties
JkLogFile /usr/local/apache2/logs/mod_jk.log
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /examples/*.jsp worker1
Alias /examples "/usr/local/tomcat/webapps/examples/"
<Directory "/usr/local/tomcat/webapps/examples/">
Options FollowSymLinks
AllowOverride None
Allow from all
</Directory>
<Directory "/usr/local/tomcat/webapps/examples/WEB-INF/">
AllowOverride None
deny from all
</Directory>

맨위에 LoadModule에서 jk_module을 쓰겠다는 것 같고,
WorkerFile은 방금 작성한 걸로 쓰겠다는 것같고,
그다음은 다 로그에 관한거...
JkMount는 /examples/에서 jsp요청이 들어오는 것은 다 tomcat에서 처리하겠다는거고
마지막으로 중요한.....Alias 는
원래 http://서버주소/ 이렇게 하면 Document Root인 아파치경로/htdocs 여기를 가리키는 건데
하지만 http://서버주소/examples 로 요청이 들어오면 Document Root를 저걸로 바꾸겠다는거임
그리고 WEB-INF폴더는 보안상 열리면 안되니 막아줄려면 위처럼 해주면 되고
그러면 http://서버주소/examples/ 하면 jsp, servlet샘플이 열릴거임

이렇게 아파치와 톰캣을 연동시키면 톰캣은 jsp만 처리하고 그 나머진(html, image 등등) 다 아파치에서 처리를 하게 되는 것이다라는 말..ㅋㅋㅋ

ps.
위내용은 머드초보님의 블로그에서 100% 내용을 발췌하여
제가 작업한 대로 수정작성한것임을 밝히는 바입니다

출처 : 머드초보의 블로그

이젠 진짜 이사중



몇번의 시도 끝에 드디어 네이버 블로그에서 구글 블로그로 이사중..