반응형

db2 를 centos에서 설치하려고 삽질했던 경험을 공유합니다.



삽질#1 함정#1


https://www.ibm.com/analytics/us/en/db2/trials/


위 URL로 접속시 아래 화면이 나옵니다.

함정은 바로 영문 사이트라는 것입니다. OTL



위 사이트에서 무언가를 시도하더라고 결국엔 아래 화면을 만나실 수 있습니다.

사용할 수 없다는 이야기 입니다.


삽질#2 함정#2


ibm 홈페이지에서 언어를 한국어로 바꾸고 db2를 검색하다가 아래 페이지를 발견했습니다.

함정#1의 페이지와 다르게 별다른 인증도 없이 그냥 다운이 받아집니다. 허무 -_-




1
./db2prereqcheck
cs


하지만 위의 명령어로 확인 아래처럼 나오면서 설치가 불가능 했습니다.

(34Bit 지원이라고 나온것부터 수상했어 -.-)

(참고로 맨 아래 Orange는 잘 동작해서 사용하고 있습니다.)




드디어 제대로 된 페이지를 찾는데 성공했습니다.


URL : https://www.ibm.com/analytics/kr/ko/technology/db2/db2-trials.html


Linux 64비트 버전 다운로드를 선택합니다.



각종 인증을 거친후에 다음 화면을 만날 수 있습니다.



라이센스에 동의하는 화면입니다.



DB2 Express-C 를 선택하고 '다운 시작'을 클릭합니다.

(여기서 또 함정이 있는데 확장자가 tar.gz 이지만 실제 gz 압축은 되어있지 않다는거)


용량이 커서 그런지 아래 팝업 뜨면서 다이렉트 다운로더를 설치하게 합니다.



쭉쭉쭉 위의 과정들을 거쳐서 파일을 다운받고 압축 풀고 아래 명령어를 실행해 보면 경고가 뜹니다.

( 위에서 한번 언급 했듯이 압축은 tar -xvf 로 풀어야 합니다. -xvzf 가 아닙니다.)


1
./db2prereqcheck
cs



아래 화면의 경고가 뜨더라도 무시해 줍니다.



1
./db2_install
cs


위 명령어를 통해 설치를 시작합니다.

설치가 성공하면 아래처럼 성공 메시지가 나옵니다.



설치가 정상적을 되었는지 아래 명령어를 통해서 확인해봅니다.


1
2
3
4
5
6
7
8
9
10
11
12
/opt/ibm/db2/V11.1/bin/db2val
 
DBI1379I  The db2val command is running. This can take several minutes.
 
DBI1335I  Installation file validation for the DB2 copy installed at
      /opt/ibm/db2/V11.1 was successful.
 
DBI1339I  The instance validation for the instance db2inst1 was
      successful.
 
DBI1343I  The db2val command completed successfully. For details, see
      the log file /tmp/db2val-171228_003959.log.
cs


아래 명령어를 통해서 인스턴스를 띄웁니다.

db2fenc1, db2inst1 은 OS 계정으로 미리 만들어놓으셔야 합니다.

db2는 다른 db와 다르게 os계정을 db 사용자로 사용합니다.


1
/opt/ibm/db2/V11.1/instance/db2icrt -d  -a server -u db2fenc1 db2inst1
cs


등록된 계정을 확인 합니다.


1
/opt/ibm/db2/V11.1/bin/db2ilist
cs



이제 db2inst1 계정에서 db2start 명령어를 통해 실제로 DB를 시작합니다.


1
2
3
su - db2inst1
 
db2start
cs



많은 부분을 https://www.lesstif.com/pages/viewpage.action?pageId=30704838 에서  참조하였습니다.

반응형

'Database' 카테고리의 다른 글

db2 jdbc url  (0) 2017.12.31
db2 from dual  (0) 2017.12.31
db2 jdbc download  (0) 2017.12.31
db2 버전 확인 쿼리  (0) 2017.12.31
db2 create database script  (0) 2017.12.28
db2 port  (0) 2017.12.27
mysql 날짜 date_add, date_format  (0) 2017.12.17
오라클 날짜 oracle date  (0) 2017.10.31
반응형

먼저, 아래의 스크립트를 create_db.sql 파일로 만듭니다.


옵션 1-데이터베이스를 생성하는 데이터베이스 사용자와 IBM®ControlCenter에서 사용할 데이터베이스 사용자가 같은 경우 이 스크립트를 사용합니다.
옵션 2-데이터베이스를 생성하는 데이터베이스 사용자와 IBM®ControlCenter에서 사용할 데이터베이스 사용자가 같지 않은 경우 이 스크립트를 사용합니다.


Option1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
-- Script to create production, reporting and staging databases for 
 
-- IBM Control Center. 
 
-- The db user that creates the database automatically inherits the 
 
-- database administration privilege.
 
-- Edit this script and replace @DBNAME@ with your database name. 
 
 
-- 
CREATE DATABASE @DBNAME@ 
 
AUTOMATIC STORAGE YES 
 
USING CODESET UTF-8 TERRITORY DEFAULT 
 
COLLATE USING SYSTEM PAGESIZE 32768;
 
 
CONNECT TO @DBNAME@;
 
CREATE BUFFERPOOL @DBNAME@_04KBP IMMEDIATE SIZE AUTOMATIC PAGESIZE 4K;
 
CREATE BUFFERPOOL @DBNAME@_08KBP IMMEDIATE SIZE AUTOMATIC PAGESIZE 8K;
 
CREATE BUFFERPOOL @DBNAME@_16KBP IMMEDIATE SIZE AUTOMATIC PAGESIZE 16K;
 
CONNECT RESET;
 
 
CONNECT TO @DBNAME@;
 
CREATE  USER TEMPORARY  TABLESPACE SCCUSERTMP PAGESIZE 32K  BUFFERPOOL  IBMDEFAULTBP; 
 
CREATE REGULAR TABLESPACE TS_REG04_@DBNAME@  PAGESIZE 4K   BUFFERPOOL  @DBNAME@_04KBP PREFETCHSIZE AUTOMATIC;
 
CREATE REGULAR TABLESPACE TS_REG08_@DBNAME@  PAGESIZE 8K   BUFFERPOOL  @DBNAME@_08KBP PREFETCHSIZE AUTOMATIC;
 
CREATE REGULAR TABLESPACE TS_REG16_@DBNAME@  PAGESIZE 16K  BUFFERPOOL  @DBNAME@_16KBP PREFETCHSIZE AUTOMATIC;
 
CONNECT RESET;
cs


Option2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
-- Script to create production and reporting databases for 
 
-- IBM Control Center. 
 
-- The db user that creates the database automatically inherits the 
 
-- database administration privilege.
 
-- Edit this script and replace @DBNAME@ with your database name.
 
-- Replace @DBUSERID@ with your DB user ID.
 
 
CREATE DATABASE @DBNAME@ 
 
AUTOMATIC STORAGE YES 
 
USING CODESET UTF-8 TERRITORY DEFAULT 
 
COLLATE USING SYSTEM PAGESIZE 32768;
 
 
CONNECT TO @DBNAME@;
 
CREATE BUFFERPOOL @DBNAME@_04KBP IMMEDIATE SIZE AUTOMATIC PAGESIZE 4K;
 
CREATE BUFFERPOOL @DBNAME@_08KBP IMMEDIATE SIZE AUTOMATIC PAGESIZE 8K;
 
CREATE BUFFERPOOL @DBNAME@_16KBP IMMEDIATE SIZE AUTOMATIC PAGESIZE 16K;
 
CONNECT RESET;
 
 
CONNECT TO @DBNAME@;
 
CREATE  USER TEMPORARY  TABLESPACE SCCUSERTMP PAGESIZE 32K  BUFFERPOOL  IBMDEFAULTBP; 
 
CREATE REGULAR TABLESPACE TS_REG04_@DBNAME@  PAGESIZE 4K   BUFFERPOOL  @DBNAME@_04KBP PREFECTCHSIZE AUTOMATIC; 
 
CREATE REGULAR TABLESPACE TS_REG08_@DBNAME@  PAGESIZE 8K   BUFFERPOOL  @DBNAME@_08KBP PREFETCHSIZE AUTOMATIC;
 
CREATE REGULAR TABLESPACE TS_REG16_@DBNAME@  PAGESIZE 16K  BUFFERPOOL  @DBNAME@_16KBP PREFETCHSIZE AUTOMATIC;
 
CONNECT RESET;
 
 
CONNECT TO @DBNAME@;
 
GRANT CREATETAB,BINDADD,CONNECT,IMPLICIT_SCHEMA ON DATABASE  TO USER @DBUSERID@;
 
GRANT USE OF TABLESPACE SCCUSERTMP TO USER @DBUSERID@;
 
GRANT USE OF TABLESPACE USERSPACE1 TO USER @DBUSERID@;
 
GRANT USE OF TABLESPACE TS_REG04_@DBNAME@ TO USER @DBUSERID@;
 
GRANT USE OF TABLESPACE TS_REG08_@DBNAME@ TO USER @DBUSERID@;
 
GRANT USE OF TABLESPACE TS_REG16_@DBNAME@ TO USER @DBUSERID@;
 
CONNECT RESET;
cs


그리고 아래 명령어를 실행해 줍니다.


1
2
3
4
5
. $HOME/sqllib/db2profile (For bash or Korn shell, this sets up the DB2 command line environment.)
 
cd $HOME/sqllib/bin
 
db2 -stvf create_db.sql
cs




EUC-KR SAMPLE

CREATE DATABASE SURL AUTOMATIC STORAGE YES ON '/opt/ibm/db2/V11.1/Databases/SURL'
DBPATH ON '/opt/ibm/db2/V11.1/Databases/SURL'
USING CODESET EUC-KR TERRITORY KR COLLATE USING SYSTEM PAGESIZE 32768;
CONNECT TO SURL;
UPDATE DATABASE CONFIGURATION USING APPLHEAPSZ 1024 DEFERRED;
UPDATE DATABASE CONFIGURATION USING LOCKTIMEOUT 30 DEFERRED;
UPDATE DATABASE CONFIGURATION USING APP_CTL_HEAP_SZ 1024 DEFERRED;
UPDATE DATABASE CONFIGURATION USING LOGFILSIZ 32768 DEFERRED;
UPDATE DATABASE CONFIGURATION USING LOGSECOND 8 IMMEDIATE ;
CONNECT RESET;
cs


반응형

'Database' 카테고리의 다른 글

db2 from dual  (0) 2017.12.31
db2 jdbc download  (0) 2017.12.31
db2 버전 확인 쿼리  (0) 2017.12.31
db2 설치 centos6.7 삽질기  (0) 2017.12.28
db2 port  (0) 2017.12.27
mysql 날짜 date_add, date_format  (0) 2017.12.17
오라클 날짜 oracle date  (0) 2017.10.31
ORA-22835: 버퍼가 너무 작아 CLOB를 CHAR 또는 BLOB에서 RAW로 변환할 수 없습니다  (0) 2017.10.29
반응형

db2 기본 port는 50000 입니다.

반응형
반응형

Mysql 에서 주로 사용하는 날짜 더하기와 문자열로 바꾸어주는 함수 입니다.

 

 
 
 
 

 

반응형
반응형

자주쓰느 오라클 날짜 함수를 정리해봅니다.


1
2
3
4
5
-- TO_CHAR : 날짜 -> 문자열
 
SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS'FROM DUAL
 
결과 : 2017/10/31 23:08:36




1
2
3
-- TO_DATE : 문자열 -> 날짜
 
SELECT TO_DATE('2017/10/31 23:08:36''YYYY/MM/DD HH24:MI:SS'FROM DUAL;




1
2
3
4
5
--TRUNC : 시분초 값을 0으로 절삭
 
SELECT TO_CHAR(TRUNC(SYSDATE),'YYYY/MM/DD HH24:MI:SS'FROM DUAL;
 
결과 : 2017/10/31 00:00:00



1
2
3
4
5
-- ADD_MONTHS : 한 달을 더하기
 
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, 1),'YYYY/MM/DD HH24:MI:SS'FROM DUAL;
 
결과 : 2017/11/30 23:08:36



-- 1일전
SELECT SYSDATE - 1 FROM DUAL;

 

-- 1분전 
SELECT SYSDATE - 1/24/60 FROM DUAL;


반응형
반응형

ORA-22835: 버퍼가 너무 작아 CLOB를 CHAR 또는 BLOB에서 RAW로 변환할 수 없습니다(실제: 7692, 최대: 4000).


22835. 00000 -  "Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: %s, maximum: %s)"

*Cause:    An attempt was made to convert CLOB to CHAR or BLOB to RAW, where

           the LOB size was bigger than the buffer limit for CHAR and RAW

           types.

           Note that widths are reported in characters if character length

           semantics are in effect for the column, otherwise widths are

           reported in bytes.

*Action:   Do one of the following

           1. Make the LOB smaller before performing the conversion,

           for example, by using SUBSTR on CLOB

           2. Use DBMS_LOB.SUBSTR to convert CLOB to CHAR or BLOB to RAW.



주로 일반 문자열을 처리하는 함수를 LOB에 적용할 때 발생하는 오류로 보입니다.


일반적인 해결 방법으로는 dbms_lob.substr 함수를 통해서 4000자씩 잘라서 해결하는 방법입니다.


하지만 LOB 타입의 데이터를 일반 문자열의 함수로 처리하는 것은 처음부터 뭔가 잘못된 거겠죠.

반응형
반응형

오라클 다중 업데이트 입니다.


두 테이블을 조인해서 업데이트를 하는 방법에는 두가지가 있는데 예제를 통해서 확인해 봅시다.


1. 일단 테이블을 생성합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

create table 사람
  사람이름 varchar2(200),
  계급 varchar2(200),
  constraint pk_사람 primary key(사람이름)
);
 
create table 재산
  사람이름 varchar2(200),
  재산이름 varchar2(200),
  constraint pk_재산 primary key(사람이름, 재산이름)
);
 
cs


2.  적당한 데이터를 넣고


1
2
3
4
5
6
7
8
9
insert into 사람 (사람이름) values ('임꺽정');
insert into 사람 (사람이름) values ('홍길동');
insert into 사람 (사람이름) values ('김선달');
 
insert into 재산( 사람이름, 재산이름) values('임꺽정''자전거');
insert into 재산 (사람이름, 재산이름) values('홍길동''자동차');
insert into 재산 (사람이름, 재산이름) values('김선달''자전거');
insert into 재산 (사람이름, 재산이름) values('김선달''자동차');
insert into 재산 (사람이름, 재산이름) values('김선달''집');
cs



3. 첫번째 멀티 조인 업데이트 입니다. 업데이트 절에서 조인하고 set 절에서 조인한 컬럼 끼리 매칭 시켜주면 됩니다.


1
2
3
4
5
6
7
UPDATE (
  SELECT a.계급 before, 
         '부자' AS after
    FROM 사람 a INNER JOIN 재산 b ON a.사람이름 = b.사람이름
   WHERE b.재산이름 = '집'
) t
SET t.before = t.after;
cs


* 이 때 ORA-01779 키보존 오류가 날 수 있는데, b.사람이름=pk 를 만족해야 합니다. 만약 multi pk 라 하더라도 모두 명시해주시면 됩니다.



4. 두번째 멀티 조인 업데이트 입니다. 보통의 업데이트 구문처럼 사용하면서 SET 절과 WHERE 절에 각각 서브쿼리를 통해 조인을 합니다.


1
2
3
4
UPDATE 사람 a
   SET a.계급 = (SELECT '평민' FROM 재산 b WHERE a.사람이름 = b.사람이름 AND b.재산이름 = '자동차')
 WHERE a.계급 is null
   AND EXISTS (SELECT 1 FROM 재산 b WHERE a.사람이름 = b.사람이름 AND b.재산이름 = '자동차');
cs



5. 결과는 이렇습니다.

1
select * from 사람;
cs


사람이름계급
임꺽정(null)
홍길동평민
김선달부자


여기서 실행 및 테스트 해볼 수 있습니다.


http://sqlfiddle.com/#!4/6432f/4

반응형
반응형

오라클 11g 부터 사용할 수 있는 listagg 는 여러 row 데이터를 하나의 row로 문자열을 합쳐서 보여줄 수 있는 함수 입니다.

사용법은 아래와 같습니다.

 

테이블 생성.

 

 

데이터 삽입

 

 

listagg 예제 입니다.

 
 

결과

USER_NAME HOBBYS
아이유 노래,멍때리기,멍때리기,멍때리기,잠,

 

같은 데이터가 중복으로 있는 경우에 하나만 나오게 하고 싶습니다.

아래와 같이 정규식 치환을 이용하면 중복 데이터를 제거할 수 있습니다.

 
 

 

결과

USER_NAME HOBBYS
아이유 노래,멍때리기,잠,

 

위 모든 예제는 http://sqlfiddle.com/#!4/c0b427/6 에서 실행해 보실 수 있습니다.

반응형
반응형

행으로 나오는 쿼리 결과를 열로 합쳐서 보고 싶을 경우 오라클에서는 LISTAGG 함수를 이용하면 행렬 피벗을 할 수 있습니다.


1
2
3
4
5
6
7
8
-- table for our logging
create table log_table
  id varchar2(10),
  message varchar2(200)
)
//
 



아래 쿼리 처럼 이용하시면 됩니다.


1
2
3
4
5
6
7
8
9
10
11
insert into log_table (id, message) values ('goni''hi');
insert into log_table (id, message) values ('goni''hello');
insert into log_table (id, message) values ('goni''ok');
insert into log_table (id, message) values ('goni''good');
 
 
SELECT
    id, LISTAGG(message, ',') within group (order by message) message
FROM
    log_table
group by id;



결과 값


IDMESSAGE
gonigood,hello,hi,ok



http://sqlfiddle.com/#!4/b62beb/18/4  <===여기서 바로 확인해 볼 수 있습니다 !! 

반응형
반응형

오라클에서 랜덤 값을 얻고 싶을 떄 다음 함수를 사용하시면 됩니다.


1
2
3
4
SELECT DBMS_RANDOM.VALUE(100999FROM DUAL;
 
/* 결과 값 */
702.22957428384113427610228168428560622



결과 값을 그대로 쓰기에는 아름답지 않습니다. 정수로 받으려면 반올림을 한번 해 드립니다.


1
2
3
4
SELECT ROUND(DBMS_RANDOM.VALUE(100999),0FROM DUAL;
 
/* 결과 값 */
492



결과 값이 조금 아름다워 졌습니다.



반응형

+ Recent posts