[ MariaDB. 참고URL ]

 

1. 공식 URL

    - 전체함수 목록

      : https://mariadb.com/kb/en/library/documentation/

 

    - Rank, LAG, LEAD, ROW_NUMBER 등 목록

      : https://mariadb.com/kb/en/library/window-functions/

 

    - 실행계획

     : https://mariadb.com/kb/en/library/explain/

 

2. 기타 URL

    . https://blog.naver.com/hmkuak/220583392375

 

 

'(DB) MariaDB > 기본정의' 카테고리의 다른 글

MariaDB 관리 Tool  (0) 2018.02.14
Posted by 농부지기
,

[ MSSQL. Procedure 오류 발생 시 Log만 저장하기 ]

 

1. 정의

    . 보통 오류가 발생하면 Rollback이 되기 때문에 trace정보등을 db에 저장 할 수 가 없다.

    . 이에 대한 방법으로 같은db에 dbLink정보를 만들어서

      Procedure호출 시 dbLinknam.??.db.log_procdure_name arg1, arg2;

      와 같이 호출 하면 main transaction과 관계없이 log만 insert 및 commit이 된다.

 

2. 예제

    EXEC TMS_SVR.GDMIP.dbo.CM_PROCEDURE_EXEC_LOG_PROC @@PROCID, @ERR_MSG;

 

 

USE [TMS];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
ALTER PROCEDURE [dbo].[CM_PROCEDURE_EXEC_LOG_PROC]
(
    @SPID   INT,
    @LOG_MESSAGE    NVARCHAR(1000) = NULL,
 @LOG_UID  UNIQUEIDENTIFIER = NULL,
 @ROW_CNT  DECIMAL(18,0) = NULL
)
AS
 SET NOCOUNT ON;

 INSERT INTO dbo.CM_PROCEDURE_EXEC_LOG
 (
   SP_NAME
  ,LOG_MESSAGE
  ,LOG_DATE
  ,LOG_UID
  ,ROW_CNT
 )
 VALUES
 (
   OBJECT_NAME(@SPID)
  ,@LOG_MESSAGE
  ,GETDATE()
  ,@LOG_UID
  ,@ROW_CNT
 );


GO

'(DB) MS SQL > Procedure (문법)' 카테고리의 다른 글

MS Sql -Procedure. Dynamic sql  (0) 2017.12.08
MS SQL.Procedure-시스템 변수  (0) 2017.02.09
MS SQL.Procedure-값 return  (0) 2017.02.09
MS SQL.Procedure -Argument  (0) 2017.02.09
MS SQL.Procedure -Cursor, Fetch  (0) 2017.02.09
Posted by 농부지기
,

[ Maria.DB 날짜형 함수 ]

 

1. 날짜형 함수

'(DB) MariaDB > 문자.숫자.날짜형 함수' 카테고리의 다른 글

MariaDB.숫자형 함수  (0) 2018.02.14
MariaDB.문자형 함수  (2) 2018.02.14
Posted by 농부지기
,

[ MariaDB.숫자형 함수 ]

 

1. 숫자형 함수 목록

'(DB) MariaDB > 문자.숫자.날짜형 함수' 카테고리의 다른 글

Maria.DB 날짜형 함수  (0) 2018.02.14
MariaDB.문자형 함수  (2) 2018.02.14
Posted by 농부지기
,

[ MariaDB.문자형 함수 ]

 

1. 함수 목록 및 예제

 

'(DB) MariaDB > 문자.숫자.날짜형 함수' 카테고리의 다른 글

Maria.DB 날짜형 함수  (0) 2018.02.14
MariaDB.숫자형 함수  (0) 2018.02.14
Posted by 농부지기
,

[ Nexacro.Grid Expr 목록 보기 ]

 

1. 정의

    . 헉스 이런게 있다니

      Grid의 컬럼에 가지고 있는 expr 목록은 hashmap으로 가지고 있었군.

    . expr은  parsing되어  함수처럼 관리 하고 있음.

 

2. Grid Expr 목록 보기

    . 예제

     

      . this.grid_name._exprcache['cell에 가지고 있는 expr실재값']

      . _exprcache[] : hashmap에서 expr를 가지고 있음

      . 근데 언제 grid._exprcache[]이 hashmap에 expr값이 저장 되는지 모르겠다. ㅋㅋ

        \nexacro14lib/component/Grid/Grid.js  또는 GridInfo.js  이곳에서 하는 듯

 

3. Expr로 적용되었던 문장의 결과 값을 보는 방법

   . 예제 : edittype 에 대한 expr 결과 보기

   

 

4. grid._exprcache[]이 hashmap 만드는 소스

   

'Nexacro-Grid > Expr' 카테고리의 다른 글

Nexacro.Grid - Expr 사용 기본문법  (0) 2017.06.30
Posted by 농부지기
,

[ Oracle - db link ]

 

 

DAGDA@hanafos.com 고성

 

 

1. 원격지에 서버와 로컬 서버간에 조인하려고 할 경우 사용

2. db link 설정 순서

     a. 클라이언트 설정 하기

         - 파일 위치 : C:\app\user\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora

         - 서버의 연결정보 하나 추가

         - cmd에서 : c:\>tngping orcl2  5

             (서버 연결이 잘 되는지 확인)

             (아직 서버 방화벽 설정이 안되어 있기 때문에 연결이 안됨)

    b. 서버 설정 (방화벽 열기)

         - 시작 > [방화벽] -> Windows 방화벽 클릭

         - 왼쪽 목록에서 [고급 설정]

         - 왼쪽 목록에서 [인바운드 규칙]

         - 오른쪽에서 [새규칙]

         - 규칙종류 클릭

             (o) 프로그램    > [다음]

             (o)다음프로그램 경로 [%SystemDrive%\app\user\product\11.2.0\dbhome_1\BIN\oracle.exe]

            (oracle 설치 파일 위치 찾기)

          - [다음] > [다음] > [다음] > 이름[oracle]

    c. 서버 설정 (방화벽 열기)

          - 오른쪽에서 [새규칙]

          - 규칙종류 클릭

             (o) 프로그램    > [다음]

             (o)다음프로그램 경로 [%SystemDrive%\app\user\product\11.2.0\dbhome_1\BIN\LSNRCTL.EXE]

             [다음] > [다음] > [다음] > 이름[lsnrctl]
    d. 서버설정 (port 열기)

           - 규칙종류 클릭

             (o) 포트 > [다음]

             (o) 특정 로컬 포트 : 1521

             name [oracleport]

 

    e. 서버 db restart

 

    f. 클라이언트에서 접속 확인

            - cmd에서 : c:\>tngping orcl2  5

 

    g. 클라이언트에서 서버 db 접속하기

           - cmd창에서 : c:\scott/tiger@orcl2

 

    h. 클라이언트에서 권한 부여

       - 클라이언트에서 서버와 join하기 위해서는 아래처럼 권한을 수행 해 줘야 됨

 

       system> GRANT CREATE PUBLIC DATABASE LINK TO SCOTT;

 

       scott > CREATE PUBLIC DATABASE LINK SEOUL

                  CONNECT TO SCOTT

                  IDENTIFIED BY tiger

                  USING 'db1';

 

    h. 클라이언트에서 원격지와 db 간 join하기

         - SELECT e.ename, d.dname

               FROM emp e, dept@SEOUL d

            WHERE e.deptno = d.deptno;

         

          . 원격지와 join하게 되는 원격지의 table은 항상 TABLE FULL SCAN하게 된다.

            그래서 원격지에서 테이블을 가져오게 되면 속도가 너무 느린 현상이 존재 한다.

            이 해결방법으로는 MATERIALIZED VIEW 를 이용하면 된다.

 

 

3. MATERIALIZED VIEW생성

    system > grant create materialized view to scott;

 

    scott > CREATE MATERIALIZED VIEW dept_sal

                AS

                SELECT a.deptno, SUM(a.sal) sum_sal

                 FROM emp a, dept@SEOUL b

                 WHERE a.deptno = b.deptno

                 GROUP BY a.deptno;

 

    이와 같이 했을 경우에는

        SELECT e.ename, d.deptno, d.sum_sal
           FROM emp e, dept_sal d     --local  db와  join하게 됨
         WHERE e.deptno = d.deptno;

 

    문제점 : 원격지에 자료가 변경시 적용되지 않는다.

 

    MATERIALIZED VIEW 갱신 방법

        - 원격지에서 자료가 변경되었을 경우 자동으로 MATERIALIZED VIEW 자료가 변경되지 않는다.

        - 옵션으로 변경시 언제 갱신할지를 지정할 수 있다.

        - 생성시 OPTION 추가 

            REFRESH ON COMMIT    --원격지에서 COMMIT하면 바로바로 변경됨

            REFRESH ON DEMOND   --요청(DBMS_MVIEW)이 있을 때 갱신

         - REFRESH ON DEMOND option 적용 할 권한 부여

            SYS>GRANT EXECUTE ON DBMS_MVIEW TO SCOTT;

            SCOTT>EXEC DBMS_MVIEW.REFRESH('dept_sal');

                   . 이때 원격지에 변경된 레코드가 로컬 MATERIALIZED VIEW 에 자료가 적용된다.

 

      최종 생성문장 예제)

         - SCOTT>CREATE MATERIALIZED VIEW EMP_VW

                        REFRESH

                        ON COMMIT

                        AS

                        SELECT * FROM EMP;

 

         - 참고 : EMP 테이블에 PK가 존재 하지 않는다면

                     'ORA-12054: 구체화된 뷰에 ON COMMIT 재생 속성을 설정할 수 없습니다'

                     라는 오류가 발생한다.

                     이유는 원본테이블에 자료가 변경 시 MATERIALIZED VIEW 간에 갱신되는 조건을

                     찾아가야 되는데 찾을 수 가 없기 때문이다.

 

                     원본테이블인 EMP 에  PK를 설정하면 'ORA-12054' 오류는 해결 할 수 있다.

'(DB) Oracle 튜닝 > 쌍용튜닝교육' 카테고리의 다른 글

Oracle SQL튜닝. 접근경로(Access Path)  (0) 2018.02.24
Oracle 기본 내용  (0) 2018.02.20
실행계획 - join  (0) 2018.02.10
자주 사용하는 SQL  (0) 2018.02.10
Oracle- Clustered Table  (0) 2018.02.10
Posted by 농부지기
,

[ 실행계획 - join ]


1. 정의

   . 두 개 이상의 테이블을 마치 하나의 테이블처럼 만들기 위해 연결


2. Sort Merge Join

   - 동시적(무조건 전체범위처리). 전체 데이터를 리턴받는 시간이 Nested-Loop보다 빠르다.
   - 추가적인 sort메모리 비용이 필요하다. 메모리 공간이 부족하다면 temp tablespace를 사용하게 됨.
   - Sort 메모리에 위치하는 대상은 Join key뿐만 아니라 select list도 포함하므로 불필요한 select list는 제거해야 한다.
   - Sort를 요구하지 않는 경우는 Hash Join이 유리하다.
   - 독립적(자기의 처리범위만으로 처리량 결정)
   - 스캔(Scan)액세스 위주
   - 연결고리 상태에 영향이 없음
   - 주로 넓은범위 처리에 유리

 

   장단점
   단점 - 두 결과 집합의 크기가 많이 차이나는 경우에는 SORT Merge Join이 비효율적
   어느 한쪽이라도 정렬 작업이 종료되지 않으면 조인이 시작될 수 없으므로 
   두 테이블 조인 집합의 크기가 많이 차이가 난다면 한쪽에 '대기' 상태가 발생하여
   비효율적으로 처리가 된다. 이렇게 크기가 비슷하지 않은 집합의 조인을 위해서 
   HASH 조인을 사용할 수 있다.

 

   - Sort Merge Join 수행 예제

   

- PLAN

 

. DEPT 를 읽어서 정렬

  EMP 를 읽어서 정렬

   WHERE 조건인 DEPTNO 를 기준으로 서로 MERGE

   > 위 2가지를 수행하므로 SORT MERGE JOIN이라고 함

- 특징

  두 테이블을 모두 읽고 각각 정렬

  두 테이블간에 비교(WHERE 조건을 기준으로)

 

3. Nested LOOP JOIN

   - Nested LOOP Join 수행하면 좋은 경우

      . 조인 조건 컬럼에 인덱스가 없는 경우

      . 조인 조건 컬럼에 Data type이 다른 경우

      . 주로 랜덤 엑세스에 유리

      . 부분 범위처리 가능 (즉, 먼저 검색된 레코드를 먼저 join시킴)

      . 연결 고리 상태에 따라 성능 차이가 많이 발생

      . Drving table 지정시 ordering hint 사용하면 좋다.

 

   - 중첩 Loop join (프로그램으로는 이중 for 문으로 생각하면 됨)

   - 수행 방법 예제

     . 두개의 테이블간 JOIN을 수행 할 경우

       첫번째 테이블의 레코드 결과가 3개 존재 할 경우(PK값  A, B, C)

       첫번째 레코드 A값을 가진 레코드를 두번째 테이블과 JOIN하고

       두번째 레코드 B값을 가진 레코드를 두번째 테이블과 JOIN하고

       세번째 레코드 C값을 가진 레코드를 두번째 테이블과 JOIN 한다.

       > 이와 같이 하나의 레코드별로 반복 JOIN 수행 됨

       > Driving Table에 결과가 많을 경우 반복Join (Loop join)이 많이 수행되어 속도가 느리다.

     . Driving Table이 적은 결과 갯수일 수록 성능이 좋음

   - 조회

     
  - PLAN

     

     . DEPT 를 먼저 읽고 EMP 를 나중에 읽음

       (예전에는 FROM 앞쪽부터 먼저 읽었지만 CBO로 넘어 오면서 뒤쪽부터 읽음)

     . 

   - FROM 앞쪽부터 테이블을 읽게 하려면 (hint  ORDERED)

      

 

. PLAN

      



4. Hash Join

   - Hash Join 수행하면 좋은 경우

      .

   - Hash Join 수행 예제

     . 기존에 존재 하는 index들 모두 제거

      


     . index가 없는 상태에서 join

      

 

   

   . dept, emp를 Table full scan 후 서로 Hash Join함

   .

  - HASH JOIN은 HASH기법을 이용하여 조인을 수행

    조인 칼럼을 기준으로 HASH FUNCTION를 수행하여 서로 동일한 HASH VALUE을

    갖는 것들 사이에서 실제 값이 같은지를 비교하면서 주인을 수행

    

  - NL Join랜덤 액세스와 SortMerge Join의 문제점인 정렬 작업의 부담을

    해결하기 위한 대안으로 등장

  - Hash Join은 조인 칼럼의 인덱스가 존재하지 않을 경우에도 사용할 수 있는 기법

  - Hash Join은 해쉬 함수를 이용하여 조인을 수행하기 때문에 = 로 수행하는

    join, 동등조건에서만 사용할 수 있다.

  - Hash Join을 할 때는 결과 행의 수가적은 테이블을 Driving Table로 사용하는 것이 좋다.

  - 현재 가능 좋은 성능 

    

     > 선행테이블에서 자료를 추출 후 hash 값을 만들어서 SGA 영역에 올려놓고

       후행테이블에서 자료를 추출 후 hash 값을 만들어서 SGA 영역에 올려놓은 후

       서로 JOIN을 수행하여 결과 조회

       (이 Hash값을 만들어서 join하는 방법은 oracle의 노하우다)



5. OUTER JOIN

    . 단점

      - OUTER JOIN이 걸려 있는 테이블은 FULL SCAN하는 경우가 존재

        (차후 레코드가 많아지면 수행속도가 아주 느려진다.)

         > 예) SELECT * FROM 고객  C,   주문 O

                   WHERE C.고객NO(+) = O.고객NO;

    . 특징

      - 처리 방향이 한쪽으로 고정

      - Outer(+)기호가 붙지 않은 테이블이  항상 Driving table로 선택

      - READING힌트를 넣어도 순서가 바뀌지 않음


 

'(DB) Oracle 튜닝 > 쌍용튜닝교육' 카테고리의 다른 글

Oracle 기본 내용  (0) 2018.02.20
Oracle - db link  (0) 2018.02.10
자주 사용하는 SQL  (0) 2018.02.10
Oracle- Clustered Table  (0) 2018.02.10
DB 튜닝. hint 목록  (0) 2018.01.27
Posted by 농부지기
,


1. 중복데이터 찾아서 삭제하기




2. 한 테이블의 2개의 레코드를 1개의 레코드로 보여주기

   


   - 첫 번째 방법   

   



   - 두 번째 방법
   

   

   . PLAN

     - TABLE을 3번 호출 됨 (TABLE ACCESS FULL)

     - EMP 목록이 같기 때문에 EMP는 block에서 한번만 읽고,  EMP 를 두 번 더 읽을 때는

       Memory에서 읽어 오게 된다.


'(DB) Oracle 튜닝 > 쌍용튜닝교육' 카테고리의 다른 글

Oracle - db link  (0) 2018.02.10
실행계획 - join  (0) 2018.02.10
Oracle- Clustered Table  (0) 2018.02.10
DB 튜닝. hint 목록  (0) 2018.01.27
Oracle-실행계획 개별  (0) 2018.01.27
Posted by 농부지기
,

[ Oracle - Clustered Table ]


1. Cluster

   . 정의 : 특정 조건을 기준으로 데이터를 하나로 묶어서 관리하는 기법


2. Clustered Table

   . 정의 : 특정 조건을 기준으로 데이터를 하나로 묶어서 관리되는 테이블

   . index : clustered index 존재

             clustered index는 null도 존재

   . non clustered : 보통 table 및 index


3. 장.단점

   . 특정그룹을 찾을 때 특정Block을 모두 읽으면 되므로 읽기가 아주 빠르다.

   . 같은 데이터 블록을 공유하는 1개 이상의 테이블의 그룹

     - join에서 같이 자주 사용되는 공통 컬럼을 공유

     - disk i/o가 감소 됨 (join을 안해도 되므로)

     - 클러스터 테이블을 조인하는 경우 엑세스 시간이 향상된다.

     - 단점 : Full Tablescan은 일반 테이블보다 느리다.


4 생성방법 

 - 2개의 테이블이 자주 join되어 하나의 cluster에 저장하는 예제

  a. Cluster만들기

  b. Cluster Index만들기

  c. Cluster table 생성

 

  CREATE CLUSTER cls_emp_dept(deptno NUMBER(2))

    SIZE 600

    TABLESPACE users

    STORAGE (INITIAL 200K

                NEXT 300K

                MINEXTENTS 2                

                MAXEXTENTS 20

                PCTINCREASE 33);


   CREATE INDEX IDX_CLS_EMP_DEPT

     ON CLUSTER CLS_EMP_DEPT

     TABLESPACE users;


   --아래 예제는 기존 EMP테이블을 활용한 예제.

   --보통 컬럼들을 기술해서 만들어야 됨

   CREATE TABLE EMP1

      CLUSTER CLS_EMP_DEPT(DEPTNO)

      AS

      SELECT * FROM EMP;


    CREATE TABLE DEPT1

       CLUSTER CLS_EMP_DEPT(DEPTNO)

       AS

       SELECT * FROM DEPT;


   --조회

   SELECT e.empno, e.deptno, e.rowid, d.rowid, d.deptno

      FROM emp1 e, dept1 d

     WHERE e.deptno = d.deptno

    ORDER BY e.deptno;


   

      . ROWID가 거의 비슷하다. 같은 저장 공간이기 때문

      . ROWID : OFBR : Object(6자리) + file(3자리) + block(6자리) + row(3자리)

        - 위 결과를 보면 다른 Object 이지만 같은 file, 같은 block에 저장 됨


   

      . 


5. 특징

   . 지정된 컬럼값의 순서대로 row를 저장시키는 방법

   . 하나 혹은 그 이상의 테이블을 같은 클러스터내 저장 가능

   . 엑세스 기법이 아니라 액세스 효율향상 시키는 물리적 저장기법

   . 검색의 속도는 높여주나 DML속도는 저하된다.

   . 분포도가 넓을수록 유리


6. 사용하기 적합한 조건

   . 6블럭 이상의 테이블

   . 넓은 범위를 자주 액세스 해야 하는 경우

   . 인덱스를 사용한 처리가 부담이 되는 넓은 분포도

   . 여러 개의 테이블이 빈번히 조인되는 경우

   . 수정이 자주 발생하지 않는 경우 (clustered 가 된 컬럼. 위예제는 deptno)

     - 이유 : clustered된 컬럼이 변경되면 레코드가 delete, insert가 발생 하기 때문











담배, 술, 삼각기밥

10대, 20대..., 10대 담배필때.. 구몬이 3일 밀렸어

'(DB) Oracle 튜닝 > 쌍용튜닝교육' 카테고리의 다른 글

실행계획 - join  (0) 2018.02.10
자주 사용하는 SQL  (0) 2018.02.10
DB 튜닝. hint 목록  (0) 2018.01.27
Oracle-실행계획 개별  (0) 2018.01.27
Oracle-튜닝.수행내역 이력을 파일로 저장  (0) 2018.01.27
Posted by 농부지기
,