db2에는 아직 ALTER TABLE tblName DROP PARTITION partName 구문이 없기 때문에

1. 파티션을 detach

2. 파티션테이블로부터 detach 된 single table을 drop

의 단계로 진행해야 한다.


이 때, detach 동작은 background에서 asynchronous하게 동작하므로

실제로 detach가 되어 single table로 떨어져나간 시점에 DROP TABLE을 수행하여야 하는데

partition detach가 금방 수행완료될 지 아닐 지는 알 수가 없다.


이러한 고려사항을 포함하여 간편하게 수행할 수 있는 프로시저의 소스는 아래와 같다.


-- db2 -td@ -vf dropPartition.sql

-- in dropPartition.sql

CREATE OR REPLACE PROCEDURE DBA.DROP_PARTITION (IN tblSchema VARCHAR(40), IN tblName VARCHAR(60), IN partName VARCHAR(120))

SPECIFIC DROP_PARTITION

LANGUAGE SQL

BEGIN

DECLARE tblSchema VARCHAR(40) DEFAULT '___________';

DECLARE detachSQL VARCHAR(2000);

DECLARE dropSQL VARCHAR(2000);

DECLARE isTblAbsent INT;


        DECLARE dpID INT;

        DECLARE dpState CHAR;

        DECLARE isNormalState INT DEFAULT 0;


        DECLARE curDPLock CURSOR FOR

                SELECT DATAPARTITIONID, STATUS

                FROM SYSIBM.SYSDATAPARTITIONS DP

                WHERE DP.TABSCHEMA = tblSchema

                AND DP.TABNAME = tblName

                AND (STATUS = 'L' OR STATUS = 'D' OR STATUS = 'I');


        DECLARE CONTINUE HANDLER FOR NOT FOUND

                SET isNormalState = 1;



CALL DBA.chkTblExist (tblSchema, tblName, isTblAbsent);

        IF isTblAbsent = 1

        THEN

                RETURN -1;

        END IF;


SET detachSQL = 'ALTER TABLE '  || tblSchema || '.' || tblName || ' DETACH PARTITION '|| partName || ' INTO ' || tblSchema || '.' || tblName || '_' || partName || '_DETACHED';

--CALL DBMS_OUTPUT.PUT_LINE(detachSQL);

EXECUTE IMMEDIATE detachSQL;

EXECUTE IMMEDIATE 'COMMIT WORK';


        WAIT_LOOP:

        LOOP

                OPEN curDPLock;

                FETCH curDPLock INTO dpID, dpState;

                CLOSE curDPLock;


                IF isNormalState = 1

                THEN

                        LEAVE WAIT_LOOP;

                ELSE

                        ITERATE WAIT_LOOP;

                END IF;

        END LOOP;


SET dropSQL = 'DROP TABLE ' || tblSchema || '.' || tblName || '_' || partName || '_DETACHED';

-- CALL DBMS_OUTPUT.PUT_LINE(dropSQL);

EXECUTE IMMEDIATE dropSQL;

EXECUTE IMMEDIATE 'COMMIT WORK';


RETURN 0;

END@


--

/* Sample Table DDL

DROP TABLE INODE.TMP;

CREATE TABLE INODE.TMP  (

OPRN_DT VARCHAR(8) NOT NULL ,

RIDE_TROP_ID VARCHAR(9) NOT NULL ,

RIDE_STN_NO VARCHAR(4) NOT NULL ,

ALGH_TROP_ID VARCHAR(9) NOT NULL ,

ALGH_STN_NO VARCHAR(4) NOT NULL ,

MTAR_AREA_CD VARCHAR(2) NOT NULL ,

RIDE_NCNT INTEGER NOT NULL WITH DEFAULT 0 ,

ALGH_NCNT INTEGER NOT NULL WITH DEFAULT 0 ,

RIDE_TTPS_NUM BIGINT NOT NULL WITH DEFAULT 0 ,

ALGH_TTPS_NUM BIGINT NOT NULL WITH DEFAULT 0 ,

RIDE_AMT BIGINT NOT NULL WITH DEFAULT 0 ,

ALGH_AMT BIGINT NOT NULL WITH DEFAULT 0 ,

RIDE_VLT_AMT BIGINT NOT NULL WITH DEFAULT 0 ,

DC_AMT BIGINT WITH DEFAULT 0 ,

GNPS_NUM BIGINT NOT NULL WITH DEFAULT 0 ,

TNPS_NUM BIGINT NOT NULL WITH DEFAULT 0 ,

CHPS_NUM BIGINT NOT NULL WITH DEFAULT 0 ,

SNCN_PSNG_NUM BIGINT NOT NULL WITH DEFAULT 0 ,

DSPR_PSNG_NUM BIGINT NOT NULL WITH DEFAULT 0 ,

NTMP_NUM BIGINT NOT NULL WITH DEFAULT 0 ,

FRGN_SNCN_PSNG_NUM BIGINT WITH DEFAULT 0 ,

FRAP_PSNG_NUM BIGINT WITH DEFAULT 0 ,

DW_LST_UPD_DTM VARCHAR(14) NOT NULL )

COMPRESS YES ADAPTIVE

DISTRIBUTE BY HASH(RIDE_STN_NO)

INDEX IN TR_MT16_I01 PARTITION BY RANGE(OPRN_DT)

(PART TMP_P201600 STARTING(MINVALUE) ENDING('20151299') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201601 STARTING('20160101') ENDING('20160199') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201602 STARTING('20160201') ENDING('20160299') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201603 STARTING('20160301') ENDING('20160399') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201604 STARTING('20160401') ENDING('20160499') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201605 STARTING('20160501') ENDING('20160599') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201606 STARTING('20160601') ENDING('20160699') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201607 STARTING('20160701') ENDING('20160799') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201608 STARTING('20160801') ENDING('20160899') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201609 STARTING('20160901') ENDING('20160999') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201610 STARTING('20161001') ENDING('20161099') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201611 STARTING('20161101') ENDING('20161199') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201612 STARTING('20161201') ENDING('20161299') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201701 STARTING('20170101') ENDING('20170199') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201702 STARTING('20170201') ENDING('20170299') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201703 STARTING('20170301') ENDING('20170399') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201704 STARTING('20170401') ENDING('20170499') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201705 STARTING('20170501') ENDING('20170599') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201706 STARTING('20170601') ENDING('20170699') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201707 STARTING('20170701') ENDING('20170799') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201708 STARTING('20170801') ENDING('20170899') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201709 STARTING('20170901') ENDING('20170999') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201710 STARTING('20171001') ENDING('20171099') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201711 STARTING('20171101') ENDING('20171199') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201712 STARTING('20171201') ENDING('20171299') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201801 STARTING('20180101') ENDING('20180199') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201802 STARTING('20180201') ENDING('20180299') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201803 STARTING('20180301') ENDING('20180399') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201804 STARTING('20180401') ENDING('20180499') IN TR_MT16_D01 INDEX IN TR_MT16_I01,

PART TMP_P201805 STARTING('20180501') ENDING('20180599') IN TR_MT16_D01 INDEX IN TR_MT16_I01);

CREATE UNIQUE INDEX INODE.PK_TMP ON KSCCDW.TMP (OPRN_DT ASC, RIDE_TROP_ID ASC, RIDE_STN_NO ASC, ALGH_TROP_ID ASC, ALGH_STN_NO ASC, MTAR_AREA_CD ASC) PARTITIONED;

ALTER TABLE INODE.TMP ADD CONSTRAINT PK_TMP PRIMARY KEY (OPRN_DT,RIDE_TROP_ID,RIDE_STN_NO,ALGH_TROP_ID,ALGH_STN_NO,MTAR_AREA_CD);

*/


-- Sample detach partition SQL

-- db2 "CALL DBA.DROP_PARTITION('INODE','TMP','TMP_P201601')"


Posted by in0de
,

간단하게도 /usr/local/bin/db2ls 를 실행하면 확인할 수 있다.

 

 

db2ls -q -p -b ${installed_path} 를 수행하면 에디션 정보도 확인 가능하다.

 

 

Posted by in0de
,

DB2 10.1.0.5 이하의 버전에서, 쿼리에

  • UNION ALL 이 있고,
  • LEFT JOIN 이 있고
  • LEFT JOIN되는 테이블 컬럼이 비교구문에 사용되는데, NULL 값이 일부 들어있는 경우

결과값이 비정상적으로 표시될 수 있다.


이는 다음 버그에 해당하며

IT08504: INCORRECT RESULT WHEN QUERY HAS LEFT OUTER JOIN AND UNION ALL


DB2 v10.1.0.5로 FixPack Update 하거나

쿼리 수행 전에 다음 문장을 추가하여 쿼리 옵티마이저를 변경하여 우회할 수 있다.

SET CURRENT QUERY OPTIMIZATION = 1;


Posted by in0de
,

DB2 database의 설치일자를 확인할 일이 있었는데,

db2 get db cfg 등에 존재하려나 하는 단순한 생각 같지는 않았다.


DB2 database의 설치일자를 확인하려면 다음 중 하나로 조회할 수 있다.


db2 connect to ${dbname}
db2 "select * from sysibm.sysversions"


db2 list history all for database ${dbname}


db2 "select create_time, tabname from syscat.tables where tabname like 'SYSTABLES'"


Posted by in0de
,

NetBackup 등의 서드파티 툴에 의해서 수행된 백업이라면 해당 GUI에서 종료하는 것이 옳겠다.


수행 중인 DB2 백업을 종료하기 위해서는 다음 쉘 커맨드를 수행하면 된다.


for apphandle in $(db2pd -d $db -applications -alldbpartitionnums | grep 'PerformingBackup' | awk '{print $2}')

do

db2 "force application ($apphandle)"

done

bash, DB2 DPF 10.1 에서 테스트 됨.

Posted by in0de
,

DB2 Favorite Links

DB2 LUW 2010. 9. 8. 17:52
db2Dean’s Favorite Links
아주 일목요연한 db2 link 모음
http://www.db2dean.com/Previous/DeanLinks.html

developerWorks: 다운로드
http://www.ibm.com/developerworks/kr/downloads/

IBM FixCentral
다운로드 하기 좋게 리뉴얼 됨
http://www-933.ibm.com/support/fixcentral/

Fix Packs for IBM DB2 and IMS Tools - DB2RE, PE, HPU
http://www-01.ibm.com/support/docview.wss?rs=434&uid=swg27008647

DMMag
이제 온라인으로 발간함
http://www.ibmdmmagazinedigital.com

IDUG
http://www.idug.org/

KDUG
나름 활성화 된 IBM 주도 DB2 커뮤니티
http://www.kdug.kr/

SQL limits
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0001029.htm

SQL and XML limits
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.sql.ref.doc/doc/r0001029.html

IBM Redbooks
필독서들. 읽을 시간은 있을 지?
http://www.redbooks.ibm.com/

IBM DB2 for Linux, Unix, and Windows Forum
http://www.ibm.com/developerworks/forums/forum.jspa?forumID=842&cat=19

Information Management Training : Self-Study Courses
http://www-01.ibm.com/software/data/education/selfstudy.html

DB2 Podcast series on channelDb2
http://www-01.ibm.com/software/sw-library/en_US/detail/R910330G45195P41.html

DB2 LUW DBA HowTo - Useful database administration techniques for Unix (LUW/UDB) DB2
http://www.ebenner.com/db2dba_blog/

developersWork search
사실, 찾아도 잘 안찾아지는 IBM의 검색 페이지.
http://www.ibm.com/developerworks/search/searchResults.jsp?searchType=1&searchSite=dW&searchScope=dW&query=&Search.x=28&Search.y=10&Search=Search

Everything You Wanted to Know About DB2 Universal Database Processes
http://www.ibm.com/developerworks/data/library/techarticle/0304chong/0304chong.html

IBM - DB2 사용자 게시판
한국 IBM이 관리하는. 어떻게 하면 이렇게 망할 수 있는 지?
http://www-903.ibm.com/kr/bbs/board_list.jsp?bbs=6

IBM - DB2 기술 정보
한국 IBM이 관리하는. 어떻게 하면 이렇게 업데이트가 없을 수 있는 지?
http://www-903.ibm.com/kr/techinfo/db2/

Migrating Recursive SQL from Oracle to DB2 UDB
http://www.ibm.com/developerworks/data/library/techarticle/0307steinbach/0307steinbach.html

Bringing the Power of Regular Expression Matching to SQL
http://www.ibm.com/developerworks/data/library/techarticle/0301stolze/0301stolze.html

Essential Facts about Index Covering in DB2 Universal Database
http://www.ibm.com/developerworks/data/library/techarticle/0303kuznetsov/0303kuznetsov.html

Improve DB2 query performance in a business intelligence environment - 튜닝 기술
http://www.ibm.com/developerworks/data/library/techarticle/dm-0703kapoor/

데이터 유형 간 캐스팅
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.sql.ref.doc/doc/r0008478.html

Lock events for DB2 for Linux, UNIX, and Windows, Part 1: Analyzing lockwait situations in DB2 for Linux, UNIX, and Windows
http://www.ibm.com/developerworks/data/library/techarticle/dm-0707fechner/index.html

Influence query optimization with optimization profiles and statistical views in DB2 9
http://www.ibm.com/developerworks/data/library/techarticle/dm-0612chen/

Making DB2 Case-Insensitive
http://www.ibm.com/developerworks/data/library/techarticle/0203adamache/0203adamache.html

dBforums - DB2
활발한 QnA, 문제를 검색하면 답변을 여기서 자주 얻기도 함
http://www.dbforums.com/db2/

DB2 SQL Cookbook Downloads Page
http://mysite.verizon.net/Graeme_Birchall/id1.html

An Expert's Guide to DB2 Technology
활발히 활동하는 블로거
http://it.toolbox.com/blogs/db2luw

Planet DB2
db2 blogger들의 메타 블로그
http://planetdb2.com/

Database Journal - DB2 Featured Database Articles
저널 형식의 짧은 특집, 기술 동향, 특집 컬럼
http://www.databasejournal.com/features/db2/

DBsarang - db2
http://database.sarang.net/?criteria=db2

DB2PORTAL Blog
http://db2portal.blogspot.com/

DB2uter
앞서가는 정보
http://www.ibmsystemsmag.blogs.com/db2utor/

깜장별 블로그
아마 엑셈에 근무하시는 db2 엔지니어이신 듯
http://bstar36.tistory.com/category/DB2

DB2ude
기술적인 내용을 다루는 블로그. 여기서도 해결책을 종종 찾을 수 있음.
http://www.db2ude.com/

추천 도서 리스트: Linux, UNIX, Windows용 DB2 UDB (한글)
쪼끔 오래되었으나 기본적인 내용들이기 때문에 언제 보아도 도움이 됨
http://www.ibm.com/developerworks/kr/library/dm-0509poon2/index.html

한국 데이터베이스 진흥원
이 조직이 정말 DB를 진흥해 주고 있는가?!
http://www.dpc.or.kr/

The Connection String Reference
DB Driver 연결 설정 스트링 참조 총망라
http://www.connectionstrings.com/

IBM Professional Certification Program
IBM 자격 시험 등록 페이지
https://www-903.ibm.com/kr/education/certify/index.html

IBM - IBM 자격증 로드맵
http://www-304.ibm.com/jct03001c/services/learning/ites.wss/kr/ko?pageType=page&c=a0013990

숭실대학교 Database lab
이상호 교수가 이끄는 팀. 2006년부터 DB2를 위주로 함
http://dblab.ssu.ac.kr/overview.html

DeveloperWorks - Best practices for DB2 for Linux, UNIX, and Windows
말이 필요 없는 Best Practices
http://www.ibm.com/developerworks/data/bestpractices/?S_TACT=105AGX11&S_CMP=LP

Bootcamps and Education
가고는 싶지만, 갈 수 없는...
http://www.ibm.com/developerworks/data/bootcamps

Instant SQL Formatter
SQL을 보기 좋게 만들어주는 온라인 툴. 상세한 설정은 없음.
http://www.dpriver.com/pp/sqlformat.htm

EXPORT command & File type modifiers for the export utility.
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.admin.cmd.doc/doc/r0008303.html

DB2 packages: Concepts, examples, and common problems
http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0606chun/index.html

DB2 기초: 제약조건 (한글)
http://www.ibm.com/developerworks/kr/library/dm-0401melnyk/index.html

DB2 기초: 재미있는 날짜와 시간
의외로 자주 참조하게 됨
http://www.ibm.com/developerworks/kr/library/dm-0401melnyk/index.html

DB2 API
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.apdv.api.doc/doc/r0001915.html

DB2 9.5로 고가용성 구현하기
http://www.ibm.com/developerworks/kr/library/dm-0807wright/

DB2 UDB performance tuning scenarios: Part 1, DB2 UDB OLTP tuning illustrated with a Java program
http://www.ibm.com/developerworks/data/library/techarticle/dm-0508chong/

How multithreaded architecture works in DB2 9.5
http://www.ibm.com/developerworks/data/library/techarticle/dm-0807kharche/

Quest - Toad for DB2
토드 상용 버전의 홈페이지
http://www.quest.com/db2-on-luw/

토드 기간 한정 베타버전을 여기서 미리미리 구해서 쓸 수 있음
http://toadfordb2.com/index.jspa

DB2Monitor
아주 작은 db2top 대응 윈도우용 모니터링 툴
http://chuzhoi_files.tripod.com/

Posted by in0de
,
Archive log가 얼마나 발생하는 지에 따라서 archiving 정책을 정하는 것은
안정적인 운영을 위해 당연한 것이다.

다음의 스크립트를 사용하여
  • 일별 Archive log의 발생량, 또는
  • 일 평균 Archive log 발생량, 일 최대 Archive log 발생량
을 확인할 수 있다.

#// 변수 초기화
export db=${DBNAME}
diagPath=$(db2 get dbm cfg|grep DIAGPATH)
export diagPath=${diagPath#*=}
logfileSZ=$(db2 get db cfg for $db |grep LOGFILSIZ)
export logfileSZ=${logfileSZ#*=}

#// 아카이브 로그 발생량 측정
find $diagPath -name "db2diag.log*" -type f | xargs egrep -p 'Completed archive|Successfully archived' | grep 'LEVEL: Warning' | cut -c 1-10 |
nawk '{occur[$1]++} END {for (dateItem in occur) print dateItem, occur[dateItem] * 4 * '"$logfileSZ"' / 1024}' | sort -n |
nawk '{sum=sum+$2;if ($2>max){max=$2}} END {print "SUM="sum/1024" GB\n""AVG="sum/NR" MB\n""MAX="max" MB"}'

측정하고자 하는 DB의 alias를 ${DBNAME} 부분에 써넣어 환경 설정을 한 후
파란 부분까지 수행하면 일별 Archive log 발생량을,
보라색 부분까지 수행하면 일 평균, 일 최대 Archive log 발생량을 알 수 있다.

dbm cfg에 명시된 DIAGPATH에 존재하는
모든 db2diag.log에 대해서 찾는 스크립트 이므로 (db2diag -A 로 분할된 파일도 모두 포함)
db2diag.log를 삭제한 적이 있거나 다른 곳으로 옮겨두었다면
데이터가 정확하지 않을 수 있다.

ksh88, DB2 v8.2 ~ DB2 v9.5에서 테스트 되었고,
Solaris ksh는 ksh88과 호환되지 않으므로 실행되지 않는다.
또한 DB2 v.8.x의 경우 Circular mode에서 Archived 메시지를 남기지 않으므로
이런 경우에는 집계가 불가능하다.

참고로, DB2 v8.2에서는 Archive 시 "Successfully archived log file" 이 발생하고
DB2 v9.5에서는 Archive시 "Completed archive for log file" 이 발생한다.
Posted by in0de
,
임시 서버에 DB2를 설치하여 개발, 테스트를 진행하다가
운영 서버로 migrate하는 것이 아니라,
곧바로 임시 서버의 hostname을 변경하여 운영하게 되는 경우가 있다.

이런 경우 DB2 DBA 관점에서 변경해줄 내용은
db2nodes.cfg의 hostname만 변경해주면 되는데

IBM 레퍼런스에 따르면
다음과 같은 절차로 진행하면 된다고 한다.
3번 절차는 수행할 필요가 있는지는 의문이다.

  1. db2stop
  2. hostname 변경
  3. db2set -g DB2SYSTEM=<new hostname>
  4. ${DB2HOME}/sqllib/db2nodes.cfg의 <hostname>을 <new hostname>로 변경
  5. db2start

DB2에 GUI client로 붙어서 사용할 수 있는 DAS server를 띄워놓은 경우라면
추가적으로 다음을 수행할 필요도 있을 수 있겠으나,
DAS를 사용하지 않는 것이 일반적인 환경이니, 참고만 하면 되겠다.
  1. db2 admin stop
  2. db2 uncatalog node <old_hostname>
  3. db2 catalog admin tcpip node <new hostname> remote <new hostname> system <new hostname>
  4. db2 update admin cfg using DB2SYSTEM <new hostname>
  5. db2 update admin cfg using SMTP_SERVER <new hostname>
  6. db2admin start
  7. Remove the entry from Control Center for the server with old hostname and then execute a server's discover with the new hostname

Posted by in0de
,
다음과 같은 오류가 발생하는 경우가 과연 있을 지 모르겠지만
CLP에서 아래 오류 메시지가 발생하고,
DB21015E  The Command Line Processor backend process request queue or input
queue was not created within the timeout period.

db2diag.log에 다음과 같은 패턴이 보인다면
2009-06-02-11.08.57.099023+540 I521662072A395     LEVEL: Error
PID     : 5398782              TID  : 1           PROC : db2
INSTANCE: sample                             NODE : 000
EDUID   : 1
FUNCTION: DB2 UDB, command line process, clp_start_bp, probe:3
MESSAGE : CLP frontend unable to get REQUEST queue handle
DATA #1 : Hexdump, 4 bytes
0x0FFFFFFFFFFFD448 : 870F 0042                                  ...B

살펴볼 여러 상황 중 하나로, /dev/null 파일의 권한을 체크해볼 수 있다.

원래, /dev/null의 권한은 다음과 같은데
crw-rw-rw-   1 root     system        2,  2  1월  1일 00:00 /dev/null
원인을 알 수 없는 경우에 의하여 write 권한이 제거된 경우,
위와 같은 오류가 발생할 수 있다.
Posted by in0de
,
// 설치 전 필요사항 체크 루틴
INODE:/sw/db2/FixPak # ./db2prereqcheck

// FixPak 4 를 tar 해제한 후 db2_install 실행
INODE:/sw/db2/FixPak # ./db2_install
 
Default directory for installation of products - /opt/IBM/db2/V9.5
***********************************************************
Do you want to choose a different directory to install [yes/no] ?
yes
Enter full path name for the install directory -
------------------------------------------------
/sw/db2/V9.5.0.4
 
 
Specify one of the following keywords to install DB2 products.
  ESE
  CONSV
  WSE
  CLIENT
  RTCL
 
Enter "help" to redisplay product names.
Enter "quit" to exit.
***********************************************************
ESE
DB2 installation is being initialized.

 Total number of tasks to be performed: 44
Total estimated time for all tasks to be performed: 2092

Task #1 start
Description: Enabling Asynchronous I/O
Estimated time 2 second(s)
Task #1 end

Task #2 start
Description: Checking license agreement acceptance
Estimated time 1 second(s)
Task #2 end

...중간생략...

Task #43 start
Description: Initializing instance list
Estimated time 5 second(s)
Task #43 end

Task #44 start
Description: Updating global profile registry
Estimated time 3 second(s)
Task #44 end

A minor error occurred while installing "DB2 Enterprise Server Edition " on
this computer. Some features may not function correctly.

For more information see the DB2 installation log at
"/tmp/db2_install.log.835722".

// minor error의 내용은 다음과 같음
// SA MP는 현 시스템에서는 사용하지 않는 모듈로, 무시해도 됨
Space required:                            1271 MB
Install SA MP Base Component:              No


DBI1130E  The SA MP Base Component could not be installed or updated
      because system prerequisites were not met. See the log file
      /tmp/prereqSAM.log.876590 for details.

Explanation:

There are system prerequisites for installing or updating the IBM Tivoli
System Automation for Multiplatforms Base Component (SA MP Base
Component). These prerequisites have not been met.

The mentioned log file has the details for the unsatisfied
prerequisites.

To find out more about the system prerequisites for the SA MP Base
Component, see the Installation and Configuration Guide at
http://publib.boulder.ibm.com/tividd/td/IBMTivoliSystemAutomationforMultiplatforms2.2.html.

The SA MP Base Component cannot be installed or updated.

User response:

Modify your system to meet the prerequisites; and use the installSAM
utility to manually install the SA MP Base Component.





INODE:/sw/db2/V9.5.0.4/instance # ./db2iupdt -u testfenc testinst
DBI1070I  Program db2iupdt completed successfully.

// 여기까지는 root 유저로 진행,
// 여기서부터는 instance 유저로 진행
INODE:/sw/db2/V9.5.0.4/instance # su - testinst



// FixPak 설치 후 라이선스가 초기화 되기 때문에 다시 업데이트 해주어야 함
INODE:/sw/db2/license $ db2licm -l
Product name:                     "DB2 Enterprise Server Edition"
License type:                     "Trial"
Expiry date:                      "09/06/2009"
Product identifier:               "db2ese"
Version information:              "9.5"

Product name:                     "DB2 Connect Server"
License type:                     "Trial"
Expiry date:                      "09/06/2009"
Product identifier:               "db2consv"
Version information:              "9.5"



INODE:/sw/db2/license $ db2licm -a db2ese_c.lic

LIC1402I  License added successfully.
LIC1426I  This product is now licensed for use as outlined in your License Agreement.  USE OF THE PRODUCT CONSTITUTES ACCEPTANCE OF THE TERMS OF THE IBM LICENSE AGREEMENT, LOCATED IN THE FOLLOWING DIRECTORY: "/sw/db2/V9.5.0.4/license/ko_KR.eucKR"

INODE:/sw/db2/license $ db2licm -a db2so.lic

LIC1402I  License added successfully.
LIC1426I  This product is now licensed for use as outlined in your License Agreement.  USE OF THE PRODUCT CONSTITUTES ACCEPTANCE OF THE TERMS OF THE IBM LICENSE AGREEMENT, LOCATED IN THE FOLLOWING DIRECTORY: "/sw/db2/V9.5.0.4/license/ko_KR.eucKR"


// 라이선스 업데이트 완료
INODE:/sw/db2/license $ db2licm -l
Product name:                     "DB2 Enterprise Server Edition"
License type:                     "CPU Option"
Expiry date:                      "Permanent"
Product identifier:               "db2ese"
Version information:              "9.5"
Enforcement policy:               "Soft Stop"
Features:
DB2 Database Partitioning:        "Not licensed"
DB2 Performance Optimization ESE: "Not licensed"
DB2 Storage Optimization:         "Licensed"
DB2 Advanced Access Control:      "Not licensed"
DB2 Geodetic Data Management:     "Not licensed"
IBM Homogeneous Replication ESE:  "Not licensed"

Product name:                     "DB2 Connect Server"
License type:                     "Trial"
Expiry date:                      "09/06/2009"
Product identifier:               "db2consv"
Version information:              "9.5"




// CLI, 원격 DB 유틸리티, 시스템 스키마에 대해서 다시 바인드 수행
INODE:/db2/testinst # db2 "bind ./sqllib/bnd/@db2cli.lst blocking all grant public sql error continue"
INODE:/db2/testinst # db2 "bind ./sqllib/bnd/@db2ubind.lst blocking all grant public sql error continue"
INODE:/db2/testinst # db2 "bind ./sqllib/bnd/db2schema.bnd blocking all grant public sql error continue"

// DB를 재기동하면 FixPak 적용이 완료됨
INODE:/db2/testinst # db2stop force
INODE:/db2/testinst # db2start

INODE:/db2/testinst # db2level
DB21085I  Instance "testinst" uses "64" bits and DB2 code release "SQL09054"
with level identifier "06050107".
Informational tokens are "DB2 v9.5.0.4", "s090429", "U825478", and Fix Pack "4".
Product is installed at "/sw/db2/V9.5.0.4".


Posted by in0de
,