728x90

먹보고릴라님 | 쿼리 | 2013-11-18 10:22:45




먹보고릴라 2013-11-18 10:23:19
안녕하세요

DB2 공부를 하다 보니 궁금한 부분이 있어 질문 하게 되었습니다.

제가 백업된 TABLE을 TEST Table에 복원 시키고 싶은데요.

백업된 table의 컬럼 값 중 두개가 timestamp 형식 입니다. 

제가 궁금한 부분은 이미 Timestamp 형식으로 이루어져있던 백업 값을 

test table에 insert 하고 싶은데 형식이 맞지 않아 insert가 되지 않네요

그래서 검색하여 보니 잘 이해가 가지 않고 

그냥 insert 구문 넣을 때 이미 시간이 적혀있는 데이터 값이 아닌 그 컬럼 자리에

timestamp 라고 적어 컬럼값을 재 생성 하는 것 같습니다.

혹시 timstamp 형식으로 되어 있는 테이블에 데이터 값으로 하여 insert 시킬 수 있을까요?

pajama 2013-11-18 11:11:58
문자열을 입력하려는데 형식이 맞지않아 입력이 되지 않으시는게 맞으신가요?
그런 경우라면 timestamp_format(to_date와 동일)함수를 쓰시면 됩니다.


① timestamp 데이터타입이 포함된 테이블 생성
$ db2 "create table test(A varchar(10),b timestamp)"
DB20000I The SQL command completed successfully.

② 문자열 값 입력
$ db2 "insert into test(b) values('2013-11-18')"
DB20000I The SQL command completed successfully.

③ 입력된 값 확인
$ db2 "select * from test"

A B
---------- --------------------------
- 2013-11-18-00.00.00.000000


④ 형식이 다른 문자열 값 입력
$ db2 "insert into test(b) values('2013/11/18 15:30')"
DB20000I The SQL command completed successfully.

⑤ timestamp_format(to_date) 함수로 포맷을 지정하여 입력
$ db2 "insert into test(b) values(timestamp_format('2013/11/18 15:30','YYYY-MM-DD HH24:MI:SS'))"
DB20000I The SQL command completed successfully.

⑥ 입력된 값 확인
$ db2 "select * from test"

A B
---------- --------------------------
- 2013-11-18-00.00.00.000000
- 2013-11-18-15.30.00.000000

먹보고릴라 2013-11-18 11:29:24
안녕하세요
pajama 님 항상 좋은 답변에 많은 부분을 해결 하고 있습니다.
혹시 한가지 더 질문이 있습니다.
위에 주신 답변에 대하여 잘 되고 있는데요 
2013-11-13 오전 11:27:24 이런식으로 되어 있는 경우는 함수를 조금 변경하여 
5번과 같이 진행 하면 될까요?
또한 밑에 보이는 것 과 같이 "" 문자열을 사용했다고 하는데 ""를 사용 된 부분이 없는데 이런 메시지가 출력 되네요 해당 에러코드에 대하여 확인 하여 보면 형태를 변경하여 입력 하라고 나오고요.
SQL20448N TIMESTAMP_FORMAT 함수에 "" 출력 문자열을 사용하여 "2013-11-11 오후 1:35:57"을(를) 해석할 수 없습니다. SQLSTATE=22007


감사합니다.
좋은 하루 되세요.

먹보고릴라 2013-11-19 10:12:50
안녕하세요
pajama 님 도와주심에 감사합니다.

혹시 알려주신 timestamp_format 형식으로 입력하게 되면 오전인지 오후인지 디비에서 확인 못하고 그저 기본 값이 오전으로 입력 됩니다.
해당 디비에 timestamp 형식은 1~12로만 하여 오전인지 오후인지만 나눠서 값이 들어가게 되는데요
혹시 이부분은 알수 있는 방법이 있을까요?

감사합니다.
좋은 하루 되세요.

pajama 2013-11-20 16:54:18
① 테스트 테이블 생성
$ db2 "create table test(a varchar(10),b timestamp)"
$ db2 "create table test1(a varchar(100))"

② 테스트 데이터 입력 (문자열 형태 시간)
$ db2 "insert into test1 values varchar_format(current timestamp,'YYYY-MM-DD AM HH:MI:SS','ko_kr')"
$ db2 "insert into test1 values varchar_format(current timestamp - 10 hours,'YYYY-MM-DD AM HH:MI:SS','ko_kr')"

③ 테스트 데이터 확인
$ db2 "select * from test1"

A
----------------------------------------------------------------------------------------------------
2013-11-20 오후 04:39:08
2013-11-20 오전 06:41:54

2 record(s) selected.

④ 문자열 데이터를 TIMESTAMP 형태로 변환하여 입력
$ db2 "insert into test(b) select timestamp_format(a,'YYYY-MM-DD AM HH:MI:SS','ko_kr') from test1"

⑤ 입력한 데이터 확인
$ db2 "select * from test"

A B
---------- --------------------------
- 2013-11-20-16.39.08.000000
- 2013-11-20-06.41.54.000000

timestamp 포맷 ('YYYY-MM-DD AM HH:MI:SS') 에서 AM이든 PM이든 동일하게 작동하는 걸로 보입니다.
그리고 '오전','오후' 같이 한글은 'ko_kr'과 같이 로케일 이름을 써줍니다.

http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0007107.html

pajama 2013-11-20 18:59:21
그리고 AIX환경에서 좀 특이한 점이 있습니다만.. 환경변수 LANG이 EN_US가 아닌 다른 값으로 엔진을 시작했을때(db2start) timestamp_format, varchar_format이 제대로 동작하지 않는 부분이 있습니다.

varchar_format(current timestamp,'YYYY-MM-DD AM HH:MI:SS') 결과에서 시간이 오전,오후에 상관없이 
AM부분이 'en_US'일때는 'AM', 'ko_KR'일때는 '오전'으로만 나왔습니다. 그리고 timestamp_format에서 AM, PM등 키워드를 사용했을 때 오류가 발생했습니다. LINUX에서는 딱히 LANG변수의 영향은 받지 않는 것 같습니다만 어느정도 테스트 해본바로는 그렇습니다.
참고하세요.


먹보고릴라 2013-11-25 10:27:07
pajama 님 
안녕하세요

정말 좋은 정보 감사합니다.
너무 자세한 답변에 다시 한번 감사합니다.
알려주신 내용에 대하여 테스트 해본 결과 정상적으로 잘 들어가게 되었습니다.

오늘 하루도 좋은 하루 되시며
오늘은 비가 많이 오네요 감기 조심하세요
감사합니다.



728x90
728x90

활발이님 | 기타 | 2013-11-14 16:41:25


안녕하세요 remote db 에 접속하려는데 자꾸 에러가 뜨네요.. 
우선 local db의 node, db 정보는 다음과 같습니다.
----------------------------------------------list node directory
  Node name                      = REMONODE
 Comment                        =
 Directory entry type           = LOCAL
 Protocol                       = TCPIP
 Hostname                       = 192.168.64.134
 Service name                   = 60008
---------------------------------------------list db directory
Database 1 entry:

 Database alias                       = LINUXDB
 Database name                        = GETDB
 Node name                            = REMONODE
 Database release level               = d.00
 Comment                              =
 Directory entry type                 = Remote
 Authentication                       = SERVER
 Catalog database partition number    = -1
 Alternate server hostname            =
 Alternate server port number    
--------------------------------------------db2 get dbm cfg
TCP/IP Service name                          (SVCENAME) = DB2_db2inst1c

---------------------------------------------/etc/services
DB2_db2inst1    60000/tcp
DB2_db2inst1_1  60001/tcp
DB2_db2inst1_2  60002/tcp
DB2_db2inst1_END        60003/tcp
DB2_db2inst2    60004/tcp
DB2_db2inst2_1  60005/tcp
DB2_db2inst2_2  60006/tcp
DB2_db2inst2_END        60007/tcp
DB2_db2inst1c      60008/tcp
DB2_db2inst1i      60009/tcp
---------------------------------------------------------------netstat 정보
tcp        0      0 :::60008                    :::*                        LISTEN      3076/db2sysc 0      

------------------------------------------------------------target db 정보
ip 192.168.64.134
db명 - getdb
instance - db2inst3

-------------------------------------------------------------에러
db2 connect to linuxdb user db2inst3 using db2inst3 시 
아래와 같은 에러가 나네요........
SQL30081N  A communication error has been detected. Communication protocol 
being used: "TCP/IP".  Communication API being used: "SOCKETS".  Location 
where the error was detected: "192.168.64.134".  Communication function 
detecting the error: "connect".  Protocol specific error code(s): "113", "*", 
"*".  SQLSTATE=08001

------------------------------db2diag.log 에는 아래와 같습니다
2013-11-13-23.39.52.022670-480 I2349231E308        LEVEL: Error
PID     : 3336                 TID  : 140727778641696PROC : db2bp
INSTANCE: db2inst1             NODE : 000
FUNCTION: DB2 UDB, common communication, sqlcctcpconnr, probe:110
MESSAGE : DIA3202C The TCP/IP call "connect" returned an errno="113".

도통 무엇이 문제인지 모르겠어서 이렇게 올립니다.
답변 부탁드립니다....




pajama 2013-11-14 18:01:16
설정하신 내용에는 이상이 없어보입니다. remote에서 해당 포트가 개방되었는지 확인해보세요. (telnet등)

그리고 해당 플랫폼에 따라 errno를 찾아보십시오. errno.h 파일에 설명이 있습니다.
/usr/include/sys/errno.h
/usr/include/asm/errno.h


728x90
728x90

활발이님 | 기타 | 2013-11-11 18:02:07


archive mod에서 test를 하다가 궁금한점에 대해 질문 드립니다.

db 환경은 아래와 같습니다.

 Log file size (4KB)                         (LOGFILSIZ) = 25
 Number of primary log files                (LOGPRIMARY) = 13
 Number of secondary log files               (LOGSECOND) = 4
 Changed path to log files                  (NEWLOGPATH) = 
 Path to log files                                       = /home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/
 First active log file                                   = S0000022.LOG

 Group commit count                          (MINCOMMIT) = 1
 Percent log file reclaimed before soft chckpt (SOFTMAX) = 520
 Log retain for recovery enabled             (LOGRETAIN) = RECOVERY
 User exit for logging enabled                (USEREXIT) = OFF

 First log archive method                 (LOGARCHMETH1) = DISK:/archive/
 Options for logarchmeth1                  (LOGARCHOPT1) = 
 Second log archive method                (LOGARCHMETH2) = OFF
 Options for logarchmeth2                  (LOGARCHOPT2) =

---------------------------------------------------------------------------------------------------------------------------------
data를 4번에 걸쳐 insert를 합니다.

처음 db 상태 
Tablespace                Space      Total       # of       High     
 Name                      Used       Size     Extents  WaterMark    
TESTTBS                  640.0K       1.0G      8,192     640.0K     640.0K   0%   0% Normal

File number of first active log            = 0
File number of last active log             = 12
File number of current active log          = 2

-active log (/home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/)
S0000000.LOG  S0000002.LOG  S0000004.LOG  S0000006.LOG  S0000008.LOG  S0000010.LOG  S0000012.LOG
S0000001.LOG  S0000003.LOG  S0000005.LOG  S0000007.LOG  S0000009.LOG  S0000011.LOG

-archive log (/archive/)
S0000000.LOG  S0000001.LOG

1번째 insert

Tablespace                Space      Total       # of       High     
 Name                      Used       Size     Extents  WaterMark 
TESTTBS                  896.0K       1.0G      8,192     896.0K     896.0K   0%   0% Normal     

File number of first active log            = 3
File number of last active log             = 15
File number of current active log          = 8

-active log (/home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/)
S0000003.LOG  S0000005.LOG  S0000007.LOG  S0000009.LOG  S0000011.LOG  S0000013.LOG  S0000015.LOG
S0000004.LOG  S0000006.LOG  S0000008.LOG  S0000010.LOG  S0000012.LOG  S0000014.LOG

-archive log (/archive/)
S0000000.LOG  S0000001.LOG  S0000002.LOG  S0000003.LOG  S0000004.LOG  S0000005.LOG  S0000006.LOG  S0000007.LOG


2번째 insert

Tablespace                Space      Total       # of       High     
 Name                      Used       Size     Extents  WaterMark 
TESTTBS                    1.1M       1.0G      8,192       1.1M       1.1M   0%   0% Normal

File number of first active log            = 9
File number of last active log             = 21
File number of current active log          = 14

-active log (/home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/)
S0000009.LOG  S0000011.LOG  S0000013.LOG  S0000015.LOG  S0000017.LOG  S0000019.LOG  S0000021.LOG
S0000010.LOG  S0000012.LOG  S0000014.LOG  S0000016.LOG  S0000018.LOG  S0000020.LOG

-archive log (/archive/)
S0000000.LOG  S0000002.LOG  S0000004.LOG  S0000006.LOG  S0000008.LOG  S0000010.LOG  S0000012.LOG
S0000001.LOG  S0000003.LOG  S0000005.LOG  S0000007.LOG  S0000009.LOG  S0000011.LOG  S0000013.LOG


3번째 insert

Tablespace                Space      Total       # of       High     
 Name                      Used       Size     Extents  WaterMark 
TESTTBS                    1.3M       1.0G      8,192       1.3M       1.3M   0%   0% Normal

File number of first active log            = 15
File number of last active log             = 27
File number of current active log          = 21

-active log (/home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/)
S0000015.LOG  S0000017.LOG  S0000019.LOG  S0000021.LOG  S0000023.LOG  S0000025.LOG  S0000027.LOG
S0000016.LOG  S0000018.LOG  S0000020.LOG  S0000022.LOG  S0000024.LOG  S0000026.LOG

-archive log (/archive/)
S0000000.LOG  S0000003.LOG  S0000006.LOG  S0000009.LOG  S0000012.LOG  S0000015.LOG  S0000018.LOG
S0000001.LOG  S0000004.LOG  S0000007.LOG  S0000010.LOG  S0000013.LOG  S0000016.LOG  S0000019.LOG
S0000002.LOG  S0000005.LOG  S0000008.LOG  S0000011.LOG  S0000014.LOG  S0000017.LOG  S0000020.LOG


4번째 insert

Tablespace                Space      Total       # of       High     
 Name                      Used       Size     Extents  WaterMark 
TESTTBS                    1.6M       1.0G      8,192       1.6M       1.6M   0%   0% Normal

File number of first active log            = 22
File number of last active log             = 34
File number of current active log          = 27

-active log (/home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/)
S0000022.LOG  S0000024.LOG  S0000026.LOG  S0000028.LOG  S0000030.LOG  S0000032.LOG  S0000034.LOG
S0000023.LOG  S0000025.LOG  S0000027.LOG  S0000029.LOG  S0000031.LOG  S0000033.LOG

-archive log (/archive/)
S0000000.LOG  S0000003.LOG  S0000006.LOG  S0000009.LOG  S0000012.LOG  S0000015.LOG  S0000018.LOG  S0000021.LOG  S0000024.LOG
S0000001.LOG  S0000004.LOG  S0000007.LOG  S0000010.LOG  S0000013.LOG  S0000016.LOG  S0000019.LOG  S0000022.LOG  S0000025.LOG
S0000002.LOG  S0000005.LOG  S0000008.LOG  S0000011.LOG  S0000014.LOG  S0000017.LOG  S0000020.LOG  S0000023.LOG  S0000026.LOG


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

testtbs에 축척되는 size를 보면 한 insert 트랜잭션당 256k정도의 data가 들어가고요
primarylog 는 13개고 한개당 100k로 지정해 놓았습니다. (archivelog 를 생성하기 위해 작게 잡았습니다)
싱글 디비 한개 생성하고 한 트랜잭션 insert 하고 commit 후 test진행하였습니다.
(다른 insert나 붙는 application은 없습니다)

여기서 궁금한 것은

1. 1번째 insert 부분을 보면 data가 insert되어 현재 activelog를 8번을 사용하고 있고 
    그래서 아카이빙도 7번까지 되었습니다. 여기서 아카이빙 되면 (/home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/)
    경로에 있는 로그 3~7번은 지워지고 16~20번의 log가 생성되어야 되는것 아닌가요?
    (제가 생각한것이 2번째 insert때 일어납니다...)
    이러한 archiving 시점 및 activelog를의 삭제 시점을 알고 싶습니다.




pajama 2013-11-12 00:48:43
트랜잭션이 커밋되면서 로그파일에는 변경사항이 기록되었지만 디스크에는 아직 기록이 되지않아 crash recovery를 위해 로그파일이 삭제되지 않습니다.
http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.admin.ha.doc/doc/c0008178.html

처음 INSERT 오퍼레이션때는 0~7번까지 로그파일이 아카이브가 되었고, active log 위치의 같은 이름 로그파일은 삭제되지 않고 남았습니다. 그후에 다시 INSERT를 수행하면 서버중단(fail)에 의한 응급복구시간 단축을 위해 페이지클리너가 버퍼풀의 더티페이지를 디스크로 기록하게 됩니다. 이렇게 되면서 active log 위치의 아카이브 로그 파일은 삭제됩니다.
http://www.dbforums.com/db2/1675759-archive-logs-vs-current-logs-db2-v9-luw.html
http://publib.boulder.ibm.com/infocenter/db2luw/v10r1/topic/com.ibm.db2.luw.admin.ha.doc/doc/c0005962.html

어쨌든 몇분 인터벌로 로그파일이 아키이빙된 후 삭제되거나 하는 방식은 아닙니다. crash recovery용도로나 open transaction이 남아있을 때 삭제되지 않는다고 하면 말씀하신 상황에선 crash recovery용도로 남아있지 않나 생각합니다.

활발이 2013-11-12 17:12:44
답변 감사드립니다. db2에선 commit시점이 아니라 그냥 data가 insert되어 active로그가 꽉차도 archiving되는 걸로 확인되는데
archiving시점이 active로그 파일이 꽉차거나 로그 switching 일때 되는건가요? 
그리고 commit 시점이 아니란 말은 memory buffer에서 데이터가 변경(disk에 저장되는 data가아닌) 될때 마다의 변동사항을 다 archiving 시킨다는 말인가요?

pajama 2013-11-12 17:36:02
말씀하신대로 로그파일이 꽉차면 로그 아카이브를 시도합니다.
http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.admin.ha.doc/doc/c0006086.html

pajama 2013-11-12 17:48:48
commit을 수행하면 로그버퍼에 있는 내용을 로그파일에 씁니다. 커밋을 하지않고 대량으로 insert를 했다고 해도 변경사항이 로그버퍼보다 크기때문에 곧바로 변경사항이 로그버퍼에서 로그파일에 기록이 됩니다.

1. 가당 단순하게 생각하면 로그파일이 다 차면 로그 아카이브가 발생합니다.
2. 데이터를 대량인서트 한다면 일반적으로 로그버퍼에 변경사항을 다 기록할수 없기 때문에 로그버퍼에 기록된 내용이 곧바로 로그파일에 기록되고 로그파일이 꽉 차면서 로그 아카이브가 발생합니다.
3. 로그파일이 삭제(이름변경)되는 시점은 해당 로그파일에 오픈 트랜잭션이 없거나, 응급복구용으로 필요하지 않은 시점을 로그매니저(db2logmgr) 스레드에서 판단합니다.



728x90
728x90

활발이님 | 설치 | 2013-11-07 17:57:22


안녕하세요
db2를 공부하면서 이것저것 해보다가
기존 db2를 밀고 삭제 하였는데 기존 db와 꼬였는지 
db엔진 재설치시 사소한 오류로 진행을 하면 instance생성이 안되네요....
엔진 설치시 에러 메세지는 다음과 같습니다.
-db2ls 에서 설치되있는 엔진은 없는 상태며 
 엔진 설치가 아래와 같이 에러 진행이 되면서 지정한 설치 경로에 엔진 파일들은 생성이 되있고,
 인스턴스는 존재하지 않습니다.


Target directory:                          /DB2/V9.7

Space required:                            1095 MB
Install SA MP:                             No

TSAMP_VERSION=3.1.0.1
 DBI1130E  The IBM Tivoli System Automation for Multiplatforms (SA MP)
      Base Component could not be installed or updated because system
      prerequisites were not met. See the log file /tmp/prereqSAM.log.12137 for
      details.

Explanation:

There are system prerequisites for installing or updating the 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.

 

TSAMP_VERSION=3.1.0.1
 DBI1130E  The IBM Tivoli System Automation for Multiplatforms (SA MP)
      Base Component could not be installed or updated because system
      prerequisites were not met. See the log file /tmp/prereqSAM.log.16601 for
      details.

Explanation:

There are system prerequisites for installing or updating the 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.

 

Installing or updating SA MP :.......Failure
Executing control tasks :.......Success
Updating global registry :.......Success
The installation of IBM Tivoli Monitoring for Databases  has completed. The log
file can be found at /DB2/V9.7/itma/logs/itm_install.log.

Starting DB2 Fault Monitor :.......Success
Updating the db2ls link :.......Success
Registering DB2 licenses :.......Success
Setting default global profile registry variables :.......Success



답변 부탁드립니다




pajama 2013-11-07 19:34:36
안녕하세요. 시스템 설치환경이나 인스턴스 유저/그룹명등에 대한 정보가 있으면 좋겠습니다.
(인스턴스명이 8자가 넘는다던지..)

아래 사이트에서 오류에 대해 설명하고 있습니다. 
http://www-01.ibm.com/support/docview.wss?uid=swg21459937

내용을 보면 prereqSAM.log를 보고 필요한 패키지를 설치하는 방법이 있습니다만 TSA를 사용하지 않는다면 무시해도 좋다고 나와있습니다.

기존에 db2를 설치하셨다고 하면 필요한 패키지는 다 설치되어 있을것 같네요.
설치가 안된 원인은 확실하지 않습니다만 로그 내용을 먼저 파악해보세요.

활발이 2013-11-08 16:16:44
우선 답변 감사드립니다....
혹시 os에 db2를 설치하면 os상에 db2의 정보가 기록,저장되는 걸로 알고있습니다.
그 저장되는 path를 알수 있을까요?
예) /var/db2/global.reg 전역 레지스트리 파일

pajama 2013-11-08 18:12:22
db2 설치로그는 /tmp 디렉토리에 db2_install_log.??? 형식으로 생깁니다.



728x90
728x90

DB는내운명님 | 기타 | 2013-11-06 18:26:25


고수님들에게 질문이 있습니다.

active log -> 현재 기록중인 log

online - Archieved log -> in - active 시 db log  directory에 저장되는log 
offline - Archieved log -> in - active tl db log directory에 저장되는 log

* 제 생각엔 active log와  transaction log와 같은 개념으로 생각을 하고 있으나... 고수님들의 feedback 부탁 드립니다.
  만약 제가 생각하고 있는 개념이 틀리다면 두 log의 개념과 차이점에 대해 설명해주시면 감사하겠습니다. 

* online / offline - Archieved log는 둘 다 아카이브 로그로 생각이 됩니다만, 정확히 개념을 분류하기가 어려워 고수님께 도움을 요청합니다.

고수님들의 조언 부탁 드립니다. 




pajama 2013-11-06 23:08:44
active log는 생각하신 내용이 맞습니다.
online/offline archived log는 예전의 개념으로 알고 있습니다. logretain 파라미터를 설정했을 때 아카이브 된 로그 파일이 active log 파일과 같은 위치에 남게되는데 이를 online archived log라고 합니다. userexit 파라미터를 설정하면 해당 프로그램에 의해서 active log 위치에 있는 archive log 파일을 다른 곳으로 이동시킵니다. active log 위치가 아닌 다른곳으로 이동한 archive log 파일을 offline archived log라고 합니다.

최근에는 대부분 logarchmeth1 파라미터를 설정하여 아카이브 로그 파일 위치를 분리하여 쓰고 있습니다.


728x90
728x90

DB는내운명님 | 기타 | 2013-11-06 18:03:26


고수님들께 질문이 있습니다.

cluster  index -> 물리적으로 재배열해 차곡차곡 쌓인다. 

non - cluster index -> RID를 가지고  DATA PAGE 포인팅을 한다. 

우선 이렇게 알고 있었는데.. 정확한 개념에 대하여 알고 싶습니다. 

그리고 두 index의 차이점도 알려주시면 감사하겠습니다.

고수님들의 조언 부탁 드립니다.




pajama 2013-11-06 23:32:47
클러스터 인덱스는 특정 키값으로 배열되어 있고, 순서를 유지해야하기때문에 일반 인덱스에 비해 부하가 있습니다.
DML보다는 범위스캔에 유리합니다.


728x90
728x90

DB는내운명 | 관리 | 2013-11-05 18:28:59


 online reorg시에 필요한 공간 관련하여 질문을 드립니다.                                                             
                                                                        
원본 테이블이 데이터를 지워서 npages가 50page 

fpages가   100page 가 되었다고 가정을 한다면,                                          
                                                                        
제가 알기로는  reorg 작업시에 보통 2.5배가 필요하다고 하는데      

npages 기준인가요 fpages기준인가요?   

고수님들의 답변 부탁 드립니다.




pajama 2013-11-06 11:41:35
npages 값이 기준이 됩니다. 여기를 참조하십시오.

http://www.kdug.kr/blog/247
http://presentations.oninit.com/public/2007IOD/IOD_Files/1243.pdf
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.perf.doc/doc/t0005079.html


728x90
728x90

활발이님 | 관리 | 2013-11-05 10:44:39


안녕하세요 db2 상태 확인에 대해서 질문 드리려고 합니다.

1.메모리/로그 사용량 중 아래의 값을 알고싶습니다.

SORT

총정렬

오버플로우

메모리SORT(%)


2. 테이블 오버플로우 상태를 알고싶습니다. 

3. heap memory의 권장 size와 사용하고 있는 size가 얼마 이상이 되야 조치가 필요한지.

4.pending 상태 점검방법

답변부탁드립니다.




pajama 2013-11-05 18:15:22
1. 각 항목은 
총정렬 : 소트발생횟수 (sysibmadm.snapdb total_sorts 컬럼)
오버플로우: 메모리에서 소트중 메모리 부족으로 디스크에서 소트발생한 횟수 (sysibmadm.snapdb sort_overflows 컬럼)
메모리 SORT율: 메모리소트횟수/총정렬 ( (1-sort_overflows)/total_sorts) )
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.sql.rtn.doc/doc/r0022003.html


2. 테이블 오버플로우는 가변길이 컬럼이 위치했던 페이지에서 데이터 길이가 늘어나면서 페이지 길이를 초과하게 될때를 말합니다.
일반적으로 이 수치가 커지는 경우 reorg 실행 판단 기준이 됩니다.

3. heap 사이즈는 sort_overflows가 늘어나거나 메모리 소트율이 떨어질때, 또는 진단로그(db2diag.log)에서 소트메모리 부족 오류가 발생할때 증가시켜줍니다.

4. syscat.tables 테이블에서 status와 access_mode 컬럼값을 참조하세요. (일반적인 상테는 status=N, access_mode=F)
STATUS
C = Set integrity pending
N = Normal
X = Inoperative

ACCESS_MODE
D = No data movement
F = Full access
N = No access
R = Read-only access

활발이 2013-11-07 17:58:09
개인 공부에 많이 도움이 되었습니다 감사합니다.



728x90
728x90

DB는내운명님 | 2013-10-23 14:02:18


db2 infocenter에서 logical port /dbpartitionnum 을 보게 되었습니다.

dbpartitionnum
    0에서 999 사이일 수 있는 데이터베이스 파티션 번호는 데이터베이스 파티션을 고유하게 정의합니다. 데이터베이스 파티션 번호는 오름차순이어야 합니다. 시퀀스에는 갭이 있을 수 있습니다.

    데이터베이스 파티션 번호는 지정되면 변경할 수 없습니다. 그렇지 않으면 데이터가 분산되는 방법을 지정하는 분산 맵의 정보가 손상될 수 있습니다.

    데이터베이스 파티션을 삭제하면 추가한 새 데이터베이스 파티션에 데이터베이스 파티션 번호를 사용할 수 있습니다.
    데이터베이스 파티션 번호는 데이터베이스 디렉토리에 데이터베이스 파티션 이름을 생성하는 데 사용됩니다. 데이터베이스 파티션 번호의 형식은 다음과 같습니다.

    NODE nnnn

    nnnn은 왼쪽이 0으로 채워진 데이터베이스 파티션 번호입니다. 또한 데이터베이스 파티션 번호는 CREATE DATABASE 및 DROP DATABASE 명령에서 사용됩니다.




pajama 2013-10-24 16:42:38
Q1) 이 두가지 (logical port /dbpartitionnum) 의 차이점이 무엇인가요?
logical port는 데이터베이스 파티션(dbpartitionnum)간에 쓰이는 통신포트입니다.



Q2) backup시 dbpartitionnum를 넣게 되는데 "NODEnnnn" 의 "nnnn"을 넣게 되는것으로 알고 있습니다. 예를 들어 입력시 full name-> "0001"혹은 "1" 둘 중에 어떻게 입력을 해야 되는건가요? 
파티셔닝 된 데이터베이스 백업수행시 데이터베이스의 파티션 번호를 아래와 같은 방식으로 지정하여 백업합니다.

db2 BACKUP DATABASE wsdb on DBPARTITIONNUMS (1, 2) TABLESPACE (USERSPACE1) onLINE USE TSM


728x90

'Db2 > KDUG 2013 Q·A' 카테고리의 다른 글

[db2 reorg 관련 질문 ]  (0) 2013.12.23
각종 db 상태확인에 대해 질문  (0) 2013.12.23
테이블의 통계적 정보 산출 방법 문의  (0) 2013.12.23
[인다우트 트랜젝션, XA 트랜잭션]  (0) 2013.12.23
wm_concat  (0) 2013.12.23
728x90

LOUPOS님 | 튜닝/관리 | 2013-10-18 15:30:34


안녕하세요
최근 많은 도움을 받고 있습니다.
오늘 또 질문이 생겨서 작성해 봅니다.

관리 이슈가 생겨서 스키마 내의 전체 테이블에 대한 정보를 조사하는 중입니다.
레코드수, 사용용량 등등...

때문에 해당 데이터를 조회하고 있는데요

SELECT  B.TABSCHEMA, B.TABNAME, ROWS, COLCOUNT, DATA_MB, IDX_MB
FROM    (
          SELECT  TABNAME, CARD ROWS, COLCOUNT
          FROM    SYSCAT.TABLES 
          WHERE   TABSCHEMA = 'SPAMUSER'
        ) A,
        (
          SELECT  TABSCHEMA, TABNAME, 
                  SUM(DATA_OBJECT_P_SIZE)/1024 DATA_MB,
                  SUM(INDEX_OBJECT_P_SIZE)/1024 IDX_MB
          FROM    SYSIBMADM.ADMINTABINFO 
          GROUP BY TABSCHEMA, TABNAME
        ) B
WHERE   A.TABNAME = B.TABNAME     
--and     A.TABNAME = 'DM_FURNISH_USE_COMP'
ORDER BY A.ROWS desc, B.DATA_MB desc

간단히 위와 같이 작성을 하였는데요

우선 질문드려 볼게요

1. CARD 가 레코드(Rows) 가 맞나요? 일단.. 테이블당 레코드가 수천만 레코드 라서 count 를 쓸수가 없어서.. 저걸 쓰고있는데 아무래도 이상합니다...
2. CARD 부분이 RUNSTAT를 수행해야 최신값으로 올라오는 것을 알고 있습니다. 그런데... 너무 이상한게요...
지금 테이블 올드 데이터 정리하면서 대량 삭제를 수행하고 있습니다... 그런데... CARD가... 삭제 전보다 증가했습니다.... 이럴수가 있나요?;;;
의심되는 부분은.. 사실.. 삭제 전에 뽑은 데이터는 RUNSTAT를 수행하지 않고 뽑았던지라.. 최신데이터 가 아니라서.. 이럴수 있다고 생각은 들지만....
통계를 영 잘못 뽑고 있다는 생각이 가시질 않네요 ㅠ
3.  데이터 부분은 저렇게 뽑는게 맞지요? 다른 방법도 사용해봤는데 수치는 동일한걸로 보아 맞는 듯한데... 역시나 2번같은 문제가 발생하고 있습니다 ㅠ


몇가지 다른 예문

SELECT    row_number()  over(partition by tabschema order by tabschema ,TABNAME ), tabschema, 
      TABNAME ,to_char(create_time,'yyyymmdd') create_date, CARD ROWS, REMARKS 
FROM SYSCAT.TABLES 
WHERE   TABSCHEMA = 'SPAMUSER'
order by rows desc


SELECT TABSCHEMA, TABNAME, SUM(DATA_OBJECT_P_SIZE),
SUM(INDEX_OBJECT_P_SIZE), SUM(LONG_OBJECT_P_SIZE),
SUM(LOB_OBJECT_P_SIZE), SUM(XML_OBJECT_P_SIZE)
FROM SYSIBMADM.ADMINTABINFO GROUP BY TABSCHEMA, TABNAME

SELECT TABSCHEMA
  ,TABNAME
  ,(SUM(DATA_OBJECT_P_SIZE)+SUM(LONG_OBJECT_P_SIZE)
  +SUM(LOB_OBJECT_P_SIZE)+SUM(XML_OBJECT_P_SIZE))/1024 AS TABLE_MB_SIZE
FROM TABLE(SYSPROC.ADMIN_GET_TAB_INFO_V97('SPAMUSER', 'DM_SEND_COMP'))
GROUP BY TABSCHEMA, TABNAME
WITH UR;


공부가 많이 되기는 하는데... 참... 노력이 필요하네요...ㅋㅋㅋ




pajama 2013-10-18 23:54:26
1. 말씀하신대로 CARD가 테이블 레코드수입니다.

2. RUNSTATS를 실행한 이후에만 CARD값이 업데이트 됩니다.

3. 통계갱신일자가 최근일자라면 신뢰할수 있습니다.

통계갱신을 얼마나 자주해주는지가 관건일텐데요
테이블이 커서 통계갱신이 부담되신다면 샘플링하는 것도 방법입니다.
참고로 전체 데이터 일부를 샘플링하여 통계갱신하는 방법으로 통계갱신 성능을 향상시킬 수 있습니다.
runstats on table optim.acc1830 and sampled detailed indexes all tablesample system (10) -- 10% 데이터건수 샘플링
runstats on table db2inst1.employee and sampled detailed indexes all tablesample system (10) -- 10% 데이터페이지 샘플링

http://www.ibm.com/developerworks/data/library/techarticle/dm-0412pay/

LOUPOS 2013-10-21 23:25:52
답변 감사합니다~

냉정과열정사이. 2013-10-24 17:28:31
샘플링은 말 그대로 샘플링이기 때문에 오차가 발생할 수 있습니다.

Automatic으로 RUNSTAT을 수행하게 되면 해당 테이블의 UDI 카운트가 임계치를 넘어서게 되면(v8에서 15%였나 였던 것 같습니다.)

샘플링으로 runstats을 수행하기 때문에 오차가 있을 수 있습니다.

안하는 것보다 매우 좋겠지만 완전히 정확하냐고 물으시면 글쎄요...라고 생각합니다.



728x90

+ Recent posts