2014년 11월 11일 화요일

mysql 데이터 용량 확인

SELECT
concat(table_schema,'.',table_name),  
concat(round(table_rows/1000000,2),'M') rows,  
concat(round(data_length/(1024*1024*1024),2),'G') DATA,  
concat(round(index_length/(1024*1024*1024),2),'G') idx,  
concat(round((data_length+index_length)/(1024*1024*1024),2),'G') total_size,  
round(index_length/data_length,2) idxfrac   
FROM information_schema.TABLES 
where table_name = 'TN_MM_PRDUCT_MTTR_DISTB_QY_D' ;

2014년 11월 3일 월요일

mysql oracle 유사 명령어

-- 포트

mysql : 3306
oracle : 1521

-- DB 접속

shell > mysql --user=user_name --password=your_password db_name
shell > mysql -u user_name -p password db_name

shell > sqlplus username/password@db_name


-- DB내 존재하는 테이블 검색

mysql> show tables;
oracle> select * from tabs;


-- 결과수 제한

mysql> select * from table where ROWNUM < 10;
oracle > select * from table limit 10;


-- NULL 처리

mysql> select IFNULL(field1, 0) from table;
oracle> select NVL(field1, 0) from table;


-- 현재시간

mysql> select now() from dual;
oracle> select sysdate from dual;


-- if-else 구문

mysql> select if(field=1, 'X','Y') from table;
oracle> select decode(field,1,'X','Y') from table;

2014년 10월 31일 금요일

MYSQL CONNECT BY 예제

MYSQL에서 CONNECT BY를 구현하는 방법 중 함수를 만들어서 구현하는 방법이 있다.

CONNECT BY를 사용하기 위한 함수는 해당 테이블에서만 사용 가능한 함수이다.



DROP FUNCTION IF EXISTS DEV_UCI_DB.FN_CONNECT_BY_ROOT_MTTR;
CREATE FUNCTION DEV_UCI_DB.`FN_CONNECT_BY_ROOT_MTTR`(v_no INT) RETURNS int(11)
    READS SQL DATA
BEGIN
        DECLARE v_mttr_iem_no INT;
        DECLARE v_upper_mttr_iem_no INT; -- 부모 항목
        DECLARE v_count INT;
        SET v_mttr_iem_no := v_no;
        SET v_count := 0;
       
        IF v_mttr_iem_no IS NULL THEN
                RETURN NULL;
        END IF;
        LOOP
                SELECT UPPER_MTTR_IEM_NO
                  INTO v_upper_mttr_iem_no
                  FROM TN_MM_MTTR_IEM_I
                 WHERE MTTR_IEM_NO = v_mttr_iem_no;
                IF v_upper_mttr_iem_no = 0 THEN
                        RETURN v_mttr_iem_no;
                END IF;
                SET v_mttr_iem_no := v_upper_mttr_iem_no;
                SET v_count := v_count + 1;
               
                IF v_count >= 10 THEN
                  RETURN 0;
                END IF;
        END LOOP;
END;

함수를 이용해서 CONNECT BY 기능을 구현할 수 있다.

SELECT A.MTTR_IEM_NM -- 물질 항목 명
     , A.MTTR_IEM_NO -- 물질 항목 번호
     , A.UPPER_MTTR_IEM_NO -- 상위 물질 항목 번호
     , LEVEL
     , (SELECT COUNT(*) C_CNT
          FROM TN_MM_MTTR_IEM_D
         WHERE MTTR_ID = '91235'
           AND MTTR_IEM_NO = A.MTTR_IEM_NO
           AND USE_AT = 'Y'
       ) C_CNT  -- 항목 내용 결과 수
     , (SELECT COUNT(*) I_CNT
          FROM TN_MM_MTTR_IEM_I
         WHERE UPPER_MTTR_IEM_NO = A.MTTR_IEM_NO
           AND USE_AT = 'Y'
               LIMIT 1
       ) I_CNT  -- 상위 물질 항목 번호 수 (0이면 최하위 항목)
  FROM (
       SELECT CONCAT(REPEAT('   ', LEVEL - 1) , CAST(B.MTTR_IEM_NM AS CHAR)) AS MTTR_IEM_NM
            , B.MTTR_IEM_NO
            , LEVEL
            , B.UPPER_MTTR_IEM_NO
         FROM (
              SELECT FN_CONNECT_BY_MTTR(MTTR_IEM_NO) AS UPPER_MTTR_IEM_NO
                   , MTTR_IEM_NO
                   , @LEVEL AS LEVEL
                FROM (
                     -- 0 : 전체, 1 : 기본정보, 87 : 위험유해성정보, 200 : 법규 규제 정보, 229 : INVENTORY, 484 : 안전관리정보, 539 : 측정방법
                     SELECT @START_WITH := 1 -- 2단계 표준항목 번호 (파라미터)
                          , @ID := @START_WITH
                          , @LEVEL := 0
                     ) VARS
                   , TN_MM_MTTR_IEM_I -- 물질관리 물질 항목 정보엔티티
              WHERE @ID IS NOT NULL
                AND USE_AT = 'Y'
              ) A
              JOIN TN_MM_MTTR_IEM_I B -- 물질관리 물질 항목 정보엔티티
                ON A.UPPER_MTTR_IEM_NO = B.MTTR_IEM_NO
       ) A
;

-- CONNECT BY ROOT

DROP FUNCTION IF EXISTS DEV_UCI_DB.FN_CONNECT_BY_ROOT_MTTR;
CREATE FUNCTION DEV_UCI_DB.`FN_CONNECT_BY_ROOT_MTTR`(v_no INT) RETURNS int(11)
    READS SQL DATA
BEGIN
        DECLARE v_mttr_iem_no INT;
        DECLARE v_upper_mttr_iem_no INT; -- 부모 항목
        DECLARE v_count INT;
        SET v_mttr_iem_no := v_no;
        SET v_count := 0;
       
        IF v_mttr_iem_no IS NULL THEN
                RETURN NULL;
        END IF;
        LOOP
                SELECT UPPER_MTTR_IEM_NO
                  INTO v_upper_mttr_iem_no
                  FROM TN_MM_MTTR_IEM_I
                 WHERE MTTR_IEM_NO = v_mttr_iem_no;
                IF v_upper_mttr_iem_no = 0 THEN
                        RETURN v_mttr_iem_no;
                END IF;
                SET v_mttr_iem_no := v_upper_mttr_iem_no;
                SET v_count := v_count + 1;
               
                IF v_count >= 10 THEN
                  RETURN 0;
                END IF;
        END LOOP;
END;

ERWIN에서 MYSQL SCRIPT 생성시 COMMENT 생성하는 방법

Physical > Database > Pre & Post Scipts 에서 아래 코드 입력

%ForEachTable()
{
 alter TABLE %TableName COMMENT = '%EntityName';

 %ForEachColumn()
 {       
ALTER TABLE %TableName CHANGE COLUMN %ColName %ColName %AttDatatype %AttNullOption COMMENT '%AttName';
 }
}


Tools > Forwoard Engineer > Schema Generation > Schema > Post-Script 선택

2013년 12월 12일 목요일

테이블 변경 중인 락 확인

-- 락 확인

SELECT CC.SID,CC.SERIAL#
     , BB.OWNER,BB.OBJECT_NAME
     , CC.MACHINE
     , CC.PROGRAM
     , CC.TERMINAL
     , DD.SPID BG_PID
     , CC.PROCESS FG_PID
  FROM V$LOCKED_OBJECT AA
     , ALL_OBJECTS BB
     , V$SESSION CC
     , V$PROCESS DD
 WHERE BB.OBJECT_ID = AA.OBJECT_ID
   AND CC.SID = AA.SESSION_ID
   AND CC.PADDR = DD.ADDR
;
-- KILL

ALTER SYSTEM KILL SESSION '921,3217';

SELECT * FROM V$SESSION WHERE SID='921';

-- 롤백시 남은 레코드및 블럭수
--USED_UBLK(사용된 언두 블럭) USED_UREC(사용된 언두 레코드)
SELECT S.SID
     , S.MACHINE
     , R.NAME ROLLNAME
     , T.USED_UBLK USED_UBLK
     , T.USED_UREC
  FROM V$SESSION S
     , V$ROLLNAME R
     , V$TRANSACTION T
 WHERE S.SADDR=T.SES_ADDR
   AND T.XIDUSN=R.USN
 --AND USED_UBLK > 10
 --AND R.NAME IN ('R18')
   AND S.SID = '921'
 ORDER BY USED_UBLK
;

오라클 테이블스페이스 확인

-- 테이블스페이스 용량 확인

SELECT A.TABLESPACE_NAME
     , ROUND(SUM(A.BYTES) / (1024 * 1024 * 1024), 2) || 'G' "전체"
     , ROUND(SUM(B.FREES) / (1024 * 1024 * 1024), 2) || 'G' "여유"
  FROM ( SELECT FILE_ID, TABLESPACE_NAME, SUM(BYTES) BYTES
            FROM DBA_DATA_FILES
          GROUP BY FILE_ID, TABLESPACE_NAME
       ) A
     , ( SELECT TABLESPACE_NAME, FILE_ID, SUM(BYTES) FREES
           FROM DBA_FREE_SPACE
          GROUP BY TABLESPACE_NAME, FILE_ID
       ) B
 WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME
   AND A.FILE_ID = B.FILE_ID
--   AND A.TABLESPACE_NAME LIKE 'SP_FMC%'
 GROUP BY A.TABLESPACE_NAME;
;

-- 테이블스페이스 데이터 파일 용량 확인

SELECT A.TABLESPACE_NAME                                    "테이블스페이스명"
     , ROUND((A.BYTES - B.FREE) / (1024 * 1024 * 1024), 2)  "사용공간"
     , ROUND(B.FREE / (1024 * 1024 * 1024),2)               "여유 공간"
     , ROUND(A.BYTES / (1024 * 1024 * 1024),2)              "총크기"
     , TO_CHAR((B.FREE / A.BYTES * 100) , '999.99')||'%'    "여유공간"
  FROM ( SELECT FILE_ID,
                TABLESPACE_NAME,
                SUBSTR(FILE_NAME,1,200) FILE_NM,
                SUM(BYTES) BYTES
           FROM DBA_DATA_FILES
          GROUP BY FILE_ID,TABLESPACE_NAME,SUBSTR(FILE_NAME,1,200)
       ) A,
       ( SELECT TABLESPACE_NAME,
                FILE_ID,
                SUM(NVL(BYTES,0)) FREE
           FROM DBA_FREE_SPACE
          GROUP BY TABLESPACE_NAME,FILE_ID
       ) B
 WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME
   AND A.FILE_ID = B.FILE_ID
   AND A.TABLESPACE_NAME = 'SP_AS_AORM_DB'
;

2010년 10월 28일 목요일

한자를 공부하는 방법

1.한자 교재,입문서에 대한 설명
  1) 천자문(千字文)
    a. 중국 양(梁)나라의 주흥사(周興嗣)가 무제(武帝)의 명으로 지은 책.
    b. 1구 4자로 250구, 모두 1,000자로 된 고시(古詩)이다.
    c. 하룻밤 사이에 이 글을 만들고 머리가 허옇게 세었다고 하여 ‘백수문(白首文)’이라고도 한다.
    d. 한자를 배우는 입문서

 2) 사자소학(四字小學)
    a. 우리나라에서 편찬(編纂)된 『사자소학(四字小學)』은  송나라 학자 주희가 짓고  유자징이 편찬했던 『소학(小學)』을 바탕으로 하여 엮은 책(冊)임.
    b. 소학과 기타 경전의 내용을 알기 쉽게 생활한자로 편집한 한자의 입문서
    c. 어린이들이 실천할 수 있는 소중한 행동 철학을 4자씩 묶어서 한자와 한문의 기초과정을 위하여 만든 내용으로 실천 중심의 간결한 문구로 되어 있습니다.
    d. 한국에서는 조선 초기부터 중요하게 다루어져 사학(四學)·향교·서원·서당 등 모든 유학 교육기관에서 필수과목.
    e. 조선시대 사대부의 8세 전후의 아이들이 배우던 수신서(修身 書)  이며
       유학의 초보로 배워 조선시대의 충효사상을 중심으로 한 유교적 윤리관을 보급하는 데 큰 기여를 했다.
    f. 사자소학은
         첫째 부모에 대한 효도  '효행(孝行)'편
         둘째 부부와 형제의 우애 '부부/형제(夫婦/兄弟)'편
         셋째 스승과 제자의 도리 '사제(師弟)'편
         넷째 친구사이의 의리 '붕우(朋友)'편
         다섯째 스스로의 몸가짐과 수양  '수신(修身)'편
      으로 나누었다.
    g. 현재 통용되고 있는 책은 네 글자의 구절 256개와 1024자 본과, 320구절 1280자 본, 그리고 400구절에 1600자 본이 있습니다.

 3) 명심보감(明心寶鑑)
   a. 고려 충렬왕 때의 문신(文臣) 추적(秋適)이 금언(金言), 명구(名句)를 모아 놓은 책.
   b. "마음을 밝히는 보배로운 거울"이란 뜻의 명심 보감은 인간의 일상 생활에 필요한 격언과 윤리도덕 및 처세에 관한 예지와 자기 수양의 방도를 수록한 교양필독서이다.
   c. 원래 19편으로 되어 있었으나 후에 어떤 학자가 증보(增補), 팔반가(八反歌), 효행(孝行), 염의(廉義), 권학(勸學) 등 5편을 더하여 총 24편으로 구성되어 있다.

 4) 소학(小學)
   a. 중국(中國) 송(宋)나라 유학자(儒學者) 주희(朱熹)가 짓고  그 제자(弟子) 劉子澄(유자징)이 이어서 편찬(編纂)한 초학 교재(敎材).
   b. 內篇(내편)ㆍ外篇(외편) 모두 6편으로 되어 있다.
       내편은 立敎(입교)ㆍ明倫(명륜)ㆍ敬身(경신)ㆍ稽古(계고)로 나뉘고
       외편은 嘉言(가언)ㆍ善行(선행)으로 나뉘어 있다.
   c.孝(효)ㆍ弟(제)ㆍ忠(충)ㆍ信(신) 등(等) 사람의 도리(道理)와 수신의 절차(節次)가 기록(記錄)되어 있음

 5) 사서오경(四書五經) 또는 사서삼경(四書三經)
   a. 유교의 경전으로, 경전 중에 가장 핵심적인 책이다.
   b. 고대 중국의 자연현상 및 사회생활의 기록이며, 제왕의 정치, 고대의 가요, 가정생활, 공자가 태어난 노(魯)나라 역사 등의 기록이다.
   c. 사서는 논어(論語),맹자(孟子),대학(大學),중용(中庸)을 말한다.
      삼경은 시경(詩經),서경(書經),역경(易經)을 말한다.
      삼경에 춘추(春秋),예기(禮記)  합해 오경이라 부르고, 합해서 사서오경이라 부른다.

2.예전 서당에 한자 학습의 순서
   1) 입문 : 천자문,유합,사자소학,추구
   2) 초급 : 계몽편 ,동몽선습,격몽요결,명심보감
   3) 중급 : 소학,십팔사략,통감절요
   4) 고급 : 대학,논어,맹자,중용, 시경,예기,서경,역경,춘추

   ※ 초급 '명심보감'까지가 한문독해력의 50% 완성이고 고급 '중용'까지 하면 한문독해력의 거의대부분을 할수 있고 그 이후는 고문의 격식과 아름다움을 공부하게 된다.