..
DEV/DB (46)
mssql 호환성 변경
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

호환성 변경

EXEC sp_dbcmptlevel [DB명], 100; 

 

'DEV > DB' 카테고리의 다른 글

테이블 description  (0) 2011.03.25
[MSSQL][tip] identity 증가값 설정  (0) 2011.01.17
MSSQL 기본 정리  (0) 2011.01.13
  Comments,     Trackbacks
[MSSQL][tip] identity 증가값 설정
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
identity 설정된 테이블의 column의 값을 수동으로 변경하고 싶은 경우가 있다.
아래와 같이 진행하면 된다.

  1. 최종적으로 저장된 identity값을 확인한다.
  2. 자동증가 설정을 잠시 꺼준다. (수동 변경을 하기 위해서)
  3. 새로운 identity 값을 설정해준다.
  4. 자동증가 설정을 다시 복구한다.
1.SELECT @@IDENTITY
2.SET IDENTITY_INSERT 테이블 OFF
3.DBCC CHECKIDENT(테이블 , reseed, 번호)
4.SET IDENTITY_INSERT 테이블 ON
다음 번에 해당 테이블에 insert시 indentity 컬럼에 저장되는 번호는
reseed한 번호를 기준으로 설정된 증가 값이 반영된 값(보통 +1로 증가 값을 설정한 경우 reseed한 번호+1의 값)이 저장되게 된다

'DEV > DB' 카테고리의 다른 글

mssql 호환성 변경  (0) 2011.03.25
MSSQL 기본 정리  (0) 2011.01.13
조인 방법  (0) 2010.11.17
  Comments,     Trackbacks
MSSQL 기본 정리
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

/*
1. 데이터 타입
1) 문자열
char, varchar
text(clob과 같음)

varchar2 타입은 없음!!!
*/

-- 특정 테이블에서 값을 가져올 필요가 없는 경우
select 1
GO

-- SQL 서버에 선언된 변수값 호출
select @@LANGUAGE
GO

-- 특정 테이블(company) 호출
select *
from company
Go


-- 변수 @
DECLARE @vc varchar(100)
SET @vc = 'ABCDEF'
IF @vc LIKE 'ABC%'
PRINT 'TRUE'
ELSE
PRINT 'FALSE'
GO

-- 테이블 만들기 전에 ANSI_PADDING을 OFF 로 변경 ( 'a2    ' 값인 경우 공백은 저장되지 않게 하기 위해)
-- 기본 세팅은 SET ANSI_PADDING ON 이다.
set ANSI_PADDING OFF
GO

-- c 칼럼이 null 이면 0으로 체인지!! NVL(null ,0)
select ISNULL(null,0)
GO

-- alis 주기
select compno a
from COMPANY
GO

select ABS(12.3)

'DEV > DB' 카테고리의 다른 글

[MSSQL][tip] identity 증가값 설정  (0) 2011.01.17
조인 방법  (0) 2010.11.17
MSSQL의 속도가 너무 느릴때 NVARCHAR로 형변환할 때 jeus설정  (0) 2010.11.10
  Comments,     Trackbacks
조인 방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[참고] http://dbrang.tistory.com/tag/JOIN
http://scidb.tistory.com/118

- 선행테이블 == Driving 테이블 == 바깥테이블 (outer)
- 후행테이블 == Driven 테이블 == 안쪽테이블 (inner)

예)

select *
from tcafe a, tcafe_member b
where a.cafeno = b.cafeno;

실행계획)

select statement optimizer=ALL_ROWS
-hash join
-- table access (full) 'tcafe' (table)
-- table access (full) 'tcafe_member' (table)

풀이)

tcafe, tcafe_member 의 위치 / cafeno 조인조건의 순서와 상관없이
tcafe 먼저 driving 하고 tcafe_member 를 driven 하고 있음.

하나의 커뮤니티(tcafe)에 여러 멤버(tcafe_member)가 존재함.

위 상황은 옵티마이저가 결정한다.
( 힌트를 통해 개발자가 제어도 가능하다 )

Hash Join의 특징 )

  ㅇ선행 테이블이 해쉬 테이블로 사용된다.
  ㅇ선행 테이블은 후행 테이블이 처리 되기 전에 완전히 모두 읽혀진다.(hash join의 특징)
  ㅇ작은 테이블이 바깥 테이블로 사용된다.(작은 테이블 우선)
  ㅇNo order is preserved(hash join 특징으로 필요시 Order by를 해줘야 한다.)
  ㅇ선행 테이블이 커지면 해시 버켓으로 인해 메모리 사용량은 늘어난다.
  ㅇ인덱스는 사용되지 않는다. 따라서 임의성 쿼리에 탁월한 성능 발휘.(hash index생성)
  ㅇ자주 나타나면 인덱스가 없거나 상당히 큰 테이블에 유효하다.


예)
select *
from tcafe_member b, tcafe a
where b.cafeno = a.cafeno
and a.cafeno = 2471;

실행계획)

- NESTED LOOPS
-- TABLE ACCESS(BY INDEX ROWID) OF TCAFE
---INDEX(UNIQUE SCAN) OF 'PK_CAFE
-- TABLE ACCESS(BY INDEX ROWID) OF TCAFE_MEMBER
---INDEX(UNIQUE SCAN) OF 'FK_CAFE_MEMBER01'

풀이)

Nested Loop Join
  ㅇ선행 테이블의 일치하는 모든 행을 후행 테이블에서 반복하여 찾는다.
  ㅇ후행 테이블에 인덱스가 있으면 최상(인덱스 없는 놈을 나중에 쓴다.)
  ㅇ선행 테이블의 처리 결과를 후행 테이블에서 받아 필터링하기에 선행 테이블이 전체 일의 양이다.
  ㅇ후행 테이블의 필터링 조건은 선행 테이블에서 나온 결과에 대한 추가 필터링 역할만 한다.
  ㅇ메모리 사용량 적다.
  ㅇ어느 테이블이 먼저 사용? 크기와 상관 없다.(필터링된 양이 적은 테이블이 선행되는게 좋겠지..)
  ㅇ필요하다면 선행 테이블을 정렬하고 조인된다.
  ㅇ양이 적은 경우에 유효하다.
  ㅇRanddom I/O가 많이 발생할 수 있다.
  ㅇCPU(Random I/O에 의한 ↑), I/O (↓), Memory (?)

'DEV > DB' 카테고리의 다른 글

MSSQL 기본 정리  (0) 2011.01.13
MSSQL의 속도가 너무 느릴때 NVARCHAR로 형변환할 때 jeus설정  (0) 2010.11.10
[ibatis] resultType 참거짓  (0) 2010.11.04
  Comments,     Trackbacks
MSSQL의 속도가 너무 느릴때 NVARCHAR로 형변환할 때 jeus설정
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MSSQL의 속도가 너무 느릴때 NVARCHAR로 형변환할 때

 

mssql 로 프로젝트를 하다보면 클라이언트 툴에서는 빠른데
서버에서만 느린경우가 있습니다. 한진프로젝트할때 발생했던문제인데
여기 롯데쇼핑쪽에서 문제가 똑같은 문제가 생겼습니다.
아시는분은 패스하시고 공유하고자 메일보냅니다.
하위버전의 mssql jdbc 드라이버에서는 오류가 납니다.
그래서 jdbc드라이버도 첨부합니다.
WAS 서버에 적용 jdbc 풀 부분: sendStringParametersAsUnicode:java.lang.Boolean=false

정보의바다 인터넷에서 찾은글 
JDBC 의 PreparedStatement 를 사용한 경우 MS-SQL 성능과 관련된 문제입니다.

MS-SQL JDBC 의 대부분은 PreparedStatement 를 처리할 때, 스토어드 프로시
져 형태로 처리를 합니다. 이 경우, 입력받는 파라메터 중 String 때문에 문
제가 발생하는데...

Java 의 String 은 16-bit 캐릭터이며, 이는 MS-SQL 의 nvarchar 유형과 일치
하므로,

내부적으로 String 파라메터를 nvarchar 유형으로 처리하고자 합니다.

다행히 DB Table 이 nvarchar 유형이라면, 문제가 발생하지 않지만 varchar 라면

해당 테이블의 해당컬럼이 인덱스가 생성되어 있더라도 테이블의 해당컬럼이
nvarchar 로 변환됨으로 인해서 인덱스를 사용하지 못하게 되어(컬럼의 형변
환 되면 인덱스를 사용할 수 없음)

성능문제가 발생하게 됩니다.

 

 

JEUS 매니저 리소스 > JDBC
Property sendStringParametersAsUnicode:java.lang.Boolean=false;


'DEV > DB' 카테고리의 다른 글

조인 방법  (0) 2010.11.17
[ibatis] resultType 참거짓  (0) 2010.11.04
프로시저에서 다른프로시저 호출  (0) 2010.10.25
  Comments,     Trackbacks
[ibatis] resultType 참거짓
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

resultType 이 boolean인경우

1이상은 참
0은 거짓으로

if문에 사용하면 된다.
  Comments,     Trackbacks
프로시저에서 다른프로시저 호출
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

프로시저명();

call 은 안됨.

외부에서 프로시저 호출시 call 프로시저명();

dbms_output.put_line('prompt ------------------------------------------');

'DEV > DB' 카테고리의 다른 글

[ibatis] resultType 참거짓  (0) 2010.11.04
EXPLAIN PLAN FOR  (0) 2010.10.12
clob 검색  (0) 2010.10.05
  Comments,     Trackbacks
EXPLAIN PLAN FOR
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

EXPLAIN PLAN FOR
SELECT /*+ rule */LECTNO,
       USERID,
       nvl(round(SUM(DECODE(HIGH_OBJ_SEQ, 0, CNT, 1))/ decode(1, 0, 1, 1)*100), 0) LECT_PROGRESS_AVG
FROM   (SELECT /*+ ordered  */A.LECTNO,
               A.USERID,
               D.HIGH_OBJ_SEQ,
               COUNT(*) CNT
        FROM   MR_LECTURE_MEMBER A,
               MR_LECTURE_COURSE B,
               LCMS_ORGANIZATION C,
               LCMS_COURSE_ITEM D,
               SM4_OBJECTINFO E
        WHERE  A.LECTNO = 53122
        and    A.LMSTATECD = '9'
        AND    B.LECTNO = A.LECTNO
        AND    C.COURSE_SEQ = B.COURSENO
        AND    C.ORG_CD = B.ORG_CD
        AND    D.COURSE_SEQ = C.COURSE_SEQ
        AND    D.ORG_CD = C.ORG_CD
        AND    D.ORG_SEQ = C.ORG_SEQ
        AND    E.OBJ_SEQ = D.OBJ_SEQ
        AND    E.LEARNER_ID = A.USERID
        AND    E.completion_status = 'completed'
        AND    D.ITEM_OPEN = 'true'
        AND    D.HIGH_OBJ_SEQ >= 0
        GROUP BY A.LECTNO, A.USERID, HIGH_OBJ_SEQ) AA
GROUP BY LECTNO, USERID;;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);;

'DEV > DB' 카테고리의 다른 글

프로시저에서 다른프로시저 호출  (0) 2010.10.25
clob 검색  (0) 2010.10.05
시퀀스 다른 계정에도 접근권한 주기  (0) 2010.09.11
  Comments,     Trackbacks
clob 검색
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 SELECT *
     FROM test_table

   WHERE DBMS_LOB.INSTR( content, 'aa' )>0;

'DEV > DB' 카테고리의 다른 글

EXPLAIN PLAN FOR  (0) 2010.10.12
시퀀스 다른 계정에도 접근권한 주기  (0) 2010.09.11
sql 작업시 주의점.  (0) 2010.08.27
  Comments,     Trackbacks
시퀀스 다른 계정에도 접근권한 주기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

GRANT SELECT ON A.SEQ_T TO B;

GRANT : 권한 부여

SELECT : select 권한

A.SEQ_T : A계정에 있는 SEQ_T 시퀀스

B : 계정

'DEV > DB' 카테고리의 다른 글

clob 검색  (0) 2010.10.05
sql 작업시 주의점.  (0) 2010.08.27
Invalid byte 1 of 1-byte UTF-8 sequence.  (0) 2010.08.27
  Comments,     Trackbacks