기술지원 하다 보면, 고객사 compliance 문제로 지원 요청을 하는 경우가 발생한다. 우리가 쓰는 DB2가 구입한 라이센스에 적합하게 사용하는지를 알고 싶어서다. 경우에 따라서는 시스템에 DB2 서버가 설치되어 있는지 확인하는 방법에 대한 문의 요청도 들어 온다.

DB2가 설치되어 있는지 확인하는 방법은 다음에 쓰기로 하고, 라이센스 확인 및 위배 여부를 확인하는 방법을 알아 보도록 한다.

 

1. 우리가 쓰는 DB2 머신의 자원과 운영 체제 버전은 무엇인가?

    DB2에서는 OS의 정보와 자원 정보를 db2pd나 sysibmadm 스키마의 어드민 뷰를 통해 확인할 수 있다.

    다음은 sysibmadm.env_sys_info 뷰를 조회하여 확인한 os 정보 결과다.

    (db2pd는 db2pd –osinfo를 통해서 확인할 수 있다.)

SQL >>

select substr(os_name,1,10) os_name,
            substr(os_version,1,6) os_version,
            substr(os_release,1,8) os_release,
            substr(host_name,1,16) hostname,
            total_cpus,
            configured_cpus,
            total_memory 
from sysibmadm.env_sys_info ;

결과 >>

OS_NAME    OS_VERSION OS_RELEASE HOSTNAME         TOTAL_CPUS  CONFIGURED_CPUS   TOTAL_MEMORY
----------    ----------     ----------     ----------------  -----------    ---------------         ------------
AIX               6                  1                  ?????????1            2                   4                              7728

 

2. DB2 라이센스 상태는 어떻게 확인하지?

  db2licm 명령어나 sysibmadm.env_prod_info 관리 뷰를 통해 확인이 가능하다.

(db2licm 명령어는 db2licm –l 을 실행하여 확인한다.)

SQL >>

select substr(installed_prod,1,6) product,
            substr(installed_prod_fullname,1,30) product_name,
            license_installed,
            substr(prod_release,1,12) release,
            substr(license_type,1,24) licens_type  
from sysibmadm.env_prod_info ;

결과 >>

PRODUCT    PRODUCT_NAME                         LICENSE_INSTALLED   RELEASE      LICENS_TYPE            
-------       ------------------------------     --------------------    ------------ ---------------
ESE            DB2_ENTERPRISE_SERVER_EDITION                         Y     9.5               CPU_OPTION             
CONSV       DB2_CONNECT_SERVER                                           N     9.5               -
                      

 

3. 라이센스에 위배되어 사용 중인 기능(feature)가 있을까?

    db2licm –g 나 sysibmadm.env_feature_info 관리 뷰를 통해 확인할 수 있다.

SQL >>

select substr(feature_name,1,6) as feature,
        substr(feature_fullname,1,24) as feature_name,
        substr(license_installed,1,1) license ,
        substr(product_name,1,3) edition,
        substr(feature_use_status,1,12) use_status
from sysibmadm.env_feature_info



결과 >>

FEATURE FEATURE_NAME                          LICENSE EDITION USE_STATUS 
-------    ------------------------              -------   ------- ------------
DPF         DB2_DATABASE_PARTITIONIN        N          ESE       NOT_USED   
POESE    DB2_PERFORMANCE_OPTIMIZA     N          ESE       NOT_USED   
SO          DB2_STORAGE_OPTIMIZATION       N          ESE       IN_VIOLATION
AAC        DB2_ADVANCED_ACCESS_CONT    N          ESE       NOT_USED   
GEO        DB2_GEODETIC_DATA_MANAGE     N         ESE        NOT_USED   
XMLESE  DB2_PUREXML_FEATURE_FOR_     N         ESE        NOT_USED   
HFESE     IBM_HOMOGENEOUS_FEDERATI    N         ESE        NOT_USED   
HRESE    IBM_HOMOGENEOUS_REPLICAT    N         ESE         NOT_USED

     => Storage Optimization 기능이 라이센스 위배되었음을 확인할 수 있다.

         (테이블에 compress 옵션을 주었을 가능성이 높다.)

명령문 >>

db2licm –g db2licm.g

결과    >>

License Compliance Report
 
DB2 Enterprise Server Edition   In compliance
 
DB2 Database Partitioning:        "Not used"
DB2 Performance Optimization ESE: "Not used"
DB2 Storage Optimization:         "Violation"
DB2 Advanced Access Control:      "Not used"
DB2 Geodetic Data Management:     "Not used"
DB2 pureXML ESE:                  "Not used"
IBM Homogeneous Federation ESE:   "Not used"
IBM Homogeneous Replication ESE:  "Not used"

 

4. 참고

  위 기능에 대해 정보센터 내용을 간략하게 정리해 보면

  (1) Advanced Access Control 기능 : LBAC

확인 >>

SELECT TABSCHEMA, TABNAME
FROM SYSCAT.TABLES
WHERE SECPOLICYID>0

  (2) HA 기능 : HADR

확인 >>

SELECT NAME, VALUE
FROM SYSIBMADM.DBCFG
WHERE NAME='hadr_db_role'

  (3) Performance Optimization : MQT, MDC, Query Parallelism (interquery parallelism)

확인 >>

SELECT OWNER, TABNAME
FROM SYSCAT.TABLES
WHERE TYPE='S' ;

SELECT A.TABSCHEMA, A.TABNAME, A.INDNAME, A.INDSCHEMA FROM SYSCAT.INDEXES A, SYSCAT.TABLES B
WHERE (A.TABNAME=B.TABNAME AND
            A.TABSCHEMA=B.TABSCHEMA) AND
            A.INDEXTYPE='BLOK' ;

SELECT NAME, VALUE
FROM SYSIBMADM.DBMCFG
WHERE NAME IN ('intra_parallel') ;

  (4) Storage Optimization : Compression

확인 >>
SELECT TABSCHEMA, TABNAME
FROM SYSCAT.TABLES
WHERE COMPRESSION IN ('R', 'B') ;

 

보다 자세한 정보는 정보 센터를 참고 한다.

http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=/com.ibm.db2.luw.admin.trb.doc/doc/t0053718.html

드디어 오랫동안 박스 안에서 잠자던 InfiniBand Switch를 깨워서 Rack에 태워줬다.

InfiniBand Switch 아래층에는 이번 DSF 테스트의 Main이 될 p550 서버 되시겠다.

일차적으로는 이 서버를 2개의 pureScale Member와 2개의 CF로 구성할 예정이고, 추후 p750을 추가로 붙여볼 계획이다. ( 아니면, 남아도는 p550 서버들 중에서 한두 놈 더 잡아서 DSF 테스트에 동참시킬 예정이다. )

우리 팀 하드웨어 엔지니어들의 도움을 받아 필요한 장비들을 무사히 탑승을 다 시켰다.

InfiniBand Switch의 파란색 커버가 유난히 돋보인다. ( 나머지 애들은 다 시커먼데, 혼자 튄다. )

현재 우리 팀 서버실에 총 Rack이 5개가 있는데 ( 3개는 사용 중, 2개는 전시 중 ), Rack 정리가 잘 되어있지 않아서 DB2 pureScale 테스트와 관련된 장비들이 3개의 Rack에 분산되어 있다.

( 사진은 InfiniBand Switch가 장착된 Rack )

추후에 서버실이 정리가 되면 Rack 하나에 DSF 테스트 관련 모든 장비들을 몰아놓을 예정이다.

추후에 할 일들이 점점 쌓여만 간다.

데이터 적재 작업을 하던가 DB 운영 작업을 하면 테이블만 남기고 데이터를 삭제해야 되는 경우가 발생한다.

현재 V9.7 코브라에서는 truncate 명령문을 지원하지만 그 하위 버전에서는 사용할 수 없었다. (V9.5에서는 Registry 변수 DB2_COMPATIBILITY_VECTOR  값을 설정함으로써 제한적으로 사용 가능했던 것으로 기억이 난다. 현재 9.5 정보센터를 찾아보니 검색되지 않는다.-_-;)

9.7 코브라가 나오기 전에 이런 작업을 어떻게 했는지 기록을 남겨 본다.

(1) db2 load/import 를 사용하는 방법

    (유닉스, 리눅스) db2 “load from /dev/null of del replace into 스키마명.테이블명”

    (윈도우)            db2 “load from 빈파일명 of del replace into 스키마명.테이블명”

          * 빈 파일명: notepad를 실행하여 만든 내용없는 텍스트 파일(txt) 을 의미한다.

 

(2) Alter Table 명령문의 사용하는 방법

    (유닉스,리눅스,윈도우) db2 “alter table 테이블명 activate not logged initially with emtpy table”

    * 참고: ‘not logged initially’ 키워드는 테이블 단위 로깅 옵션이다. transaction log 파일에

              로깅하지 못하게 하는 옵션이며 추가적으로 with empty table 구문을 주어 로깅없이 테

              이블의 데이터를 삭제한다.

 

DB2 적인 truncate 표현법은 alter table을 이용한 명령문이라 할 수 있겠다.

 

 

추가로, not logged initially 옵션은 Insert ~ Select 방식의 대용량의 데이터를 작업 상황에서 트랜잭션 로그 full 상황을 피하고자 할 때 사용할 수 있다.

이 경우 한 트랜잭션(작업 단위, UOW) 안에서 처리를 해야 되기에 db2 CLP 옵션을 주어야 한다.

db2 +p +c –tv <<EOF

alter table 테이블명 activate not logged initially ;

insert into 테이블명 select * from 테이블1 ;

EOF

혹은 위 SQL을 파일로 만든 후 “db2 +c –tvf 파일명” 으로 실행을 할 수도 있다.

이런 식으로 하면 대용량 데이터를 추가/변경/삭제 작업 시, transaction log full이 발생하는 것을 피할 수 있다.

단, 해당 SQL이 실행 중에 오류가 발생하거나 작업이 정상적으로 실행되지 못해 rollback되는 경우 table을 재생성 해야되므로 주의해서 사용해야 된다.

참고: http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.sql.ref.doc/doc/r0000888.html

+ Recent posts