회사에서 오라클을 이용하여 오라클 관련 책을 사게되었다 
오라클 성능 고도화 원리와 해벅1
오라클 성능 고도화 원리와 해법2
이 두권 ... 기격은 거이 8마넌가까이한다.. 컴퓨터 책은 너무 비싼듯하다.
책내용은 대학교때 공부하던 수준의....딱딱한 내용의 책이다.. 내가 싫어하는 스타일 ㅠㅠ
공부하면서 정리를 해볼려고한다.
책 1은 너무 기초와 원리가있어서 보기가 졸립다 나중에 함 다시 보기로하고 2권 으로 넘어가자 ㅎㅎ

1. 쿼리중 where  잘못쓰는 예

SELECT * FROM table where   
 잘못된경우  쿼리 수정
 substr(필드,1,2)='조건'  필드1 like '조건%'
 where 필드1<>'조건'  '조건' and 필드 <'조건'    // 경우에 따라 다름
 where 필드*12 = 350  필드 = 3500*12
   
   
   

필드가공, 부정형 , null 체크 등을 할경우 table full scan 현상이 발생한다.


2. 형변환 오류

varchar2 형을  + 거나 - 면서 데이터를 비교할때 문제가 생길수있다.

필드1 = substr('20091020',1,6)-1

이런 조건 절이라면

필드1 = TO_char(add_months(to_date('20091020','yyyymmdd'),-1),'yyyymm')

요런식으로 변경해보자 ...


3.형변환 필요성

--> 만약 다른형식의 데이터를 비교할때는 꼭 형변환을 한다. 

      이유는 DBMS가 형변환할때 여러가지이유로 정확한 데이터를 제공할수 없을수 있기 때문이다

      특히 Decode 함수를 이용할때 주의해야한다.

      문자 날짜일경우는 날짜로 

      문자 숫자일경우는 숫자로

      형변환 해준다.

Decode 설명있는곳  영문이라 어려움 이해는 안간다 ㅡㅡ;;

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions040.htm

문자 조작 함수
CONCAT(column1 | expression1, column2 | expression2)

문자붙이기

SELECT concat(job,sal)
FROM emp;

CLERK800
SALESMAN1600
SALESMAN1250

SUBSTR(column | expression, m[,n])
위치 m에서 n개 지정된 문자를 반환
m이 음수면 문자 값의 끝부터 세며, n을 생략하면 끝까지 반환 n=갯수
SELECT SUBSTR(job, 1,6)
FROM emp;

SUBSTR(JOB,1 ,6)
CLERK
SALESM
SALESM
MANAGE

LENGTH(column | expressio)
문자수 반환 ,문자열의 길이
SELECT ename, length(ename)
FROM emp;

 

INSTR(column | expression, 'string', [,m],[n])
지정된 문자열의 위치를 숫자로 반환
SELECT INSTR('Hello,World', ',W')
FROM dual;

---->6

LPAD(column | expression, n, 'string') **800
전체 폭이 n이 되도록 문자 값을 오른쪽으로 정렬하고 빈 곳을 지정한 string으로 채운다.

RPAD(column | expression, n, 'string)800**
전체 폭이 n이 되도록 문자 값을 왼쪽으로 정렬하고 빈 곳을 지정한 string으로 채운다.

SELECT LPAD(sal, 5, '*'), RPAD(sal, 6, '*')
FROM emp;

 

SELECT ename, CONCAT(ename, job),
LENGTH(ename), INSTR(ename, 'A'),
LPAD(sal, 5, '*'), RPAD(sal, 6, '*')
FROM emp
WHERE SUBSTR(job, 1, 5) = UPPER('sales');

ENAME CONCAT(ENAME,JOB) LENGTH(ENAME) INSTR(ENAME,'A') LPAD(SAL,5 RPAD(SAL,6,'
ALLEN ALLENSALESMAN 5 1 *1600 1600**
WARD WARDSALESMAN 4 2 *1250 1250**
MARTIN MARTINSALESMAN 6 2 *1250 1250**
TURNER TURNERSALESMAN 6 0 *1500 1500**

CHR
숫자에 맞는 ASCII문자 출력
SELECT CHR(65)
FROM dual;

 

ASCII
해당 ASCII로 변환
SELECT ASCII('a')
FROM dual;

 

LTRIM
정의된 문장에서 왼쪽에서 지정된 단어가 나타나면 제거
SELECT LTRIM('xyxXxyLAST WORD', 'xy')
FROM dual;

---->XxyLAST WORD

RTRIM
정의된 문장에서 오른쪽에서 지정된 단어가 나타나면 제거
SELECT RTRIM('TURNERyxXxy', 'xy')
FROM dual;

 

REPLACE
해당문자가 발견되면 지정된 문자로 변환
SELECT REPLACE('JACK and JUE', 'J', 'BL')
FROM dual;

REPLACE('JACKA
BLACK and BLUE

GREATEST
주어진 단어 중 가장 높은 값
SELECT GREATEST('HARRY', 'HARIOT', 'HALORD')
FROM dual;
처음에는 H부터 비교 -> A비교 ->

LEAST
주어진 단어 중 가장 낮은 값
SELECT LEAST('HARRY', 'HARIOT', 'HALORD')
FROM dual;

 

NVL
칼럼이 NULL이면 지정한 값으로 대치
SELECT NVL(sal, 0), NVL(ename, '*'),
NVL(hiredate, SYSDATE)
FROM emp;

DB 별 문자열 더하기 DB&NoSql 2010. 10. 21. 11:38

MSSQL

SELECT  필드명 + 필드명 + 필드명 FROM 테이블명

SELECT  필드명 +'내용'+ 필드명 FROM 테이블명

MySQL

SELECT CONCAT(필드명,필드명,필드명) FROM 테이블명

SELECT CONCAT(필드명,'내용', 필드명) FROM  테이블명

ORACLE

SELECT 필드명 || 필드명 || 필드명 FROM 테이블명

SELECT 필드명 || '내용' || 필드명 FROM 테이블명
검색 명령에
select * from all_db_links;
입력하면 해당 DB에 연결되어있는 DB 링크 리스트가 보인다.

sp_password @old=null, @new='1472',@loginame='sa'
테이블과  이름  확인 하는 쿼리문 
DECLARE @Check  INT 
set @Check =( select count(name)NO_CHECK  from syscolumns 
where id = object_id('테이블명')) and name='필드명'

아래 방법중 한가지로 해결합니다.
 
첫째 방법
 
MS SQL SA 계정의 암호를 분실했을 경우
d0022886_02104015.gif

 

C:\Program Files\Microsoft SQL Server\MSSQL\Binn>osql -E
sp_password @old = null, @new = 'newpassword',  @loginame ='sa'

1. osql -E 를 통해서 윈도우인증을 통해서 MSDE에 접속합니다.

2. 그런다음 sp_password 프로시져를 통해서 sa계정의 패스워드를 재설정합니다.

 

출처: http://systemx.egloos.com/480207

 

 

 

둘째 방법

 

MS-SQL sa 암호를 분실했을때 이를 변경시키는 방법

1. administrator 혹은 administrator 그룹에 속한 계정으로 들어간 후 sql 서버에 로그인을 한다.
2. 쿼리 분석기를 수행하고 윈도우 인증으로 로그인을 한다.
3. 다음의 sql 구문을 수행한다.

sp_password null, '[새 sa 암호]', 'sa';

4. 암호가 잘 바뀌었는지 확인한다. -_-;

출처: http://sqler.pe.kr/
http://www.inet.co.kr/faq/stories.php?story=03/10/14/9114497


 

set nocount on;

 

select

         object_name(max(object_id)) [Object Name]

       , sum(used_page_count) * 8 as 'Total Used(KB)'

       , sum(reserved_page_count) * 8 as 'Total Reserved(KB)'

       , sum(case when index_id = 0 then used_page_count else 0 end) * 8 as 'Heap(KB)'

       , sum(case when index_id = 1 then used_page_count else 0 end) * 8 as 'Cluster(KB)'

       , sum(case when index_id < 2 then used_page_count else 0 end) * 8 as 'Index(KB)'

       , max(row_count) as 'RowCount'

       , sum(in_row_used_page_count) * 8 as 'Row Used(KB)'

       , sum(in_row_reserved_page_count) * 8 as 'Row Reserved(KB)'

       , sum(lob_used_page_count) * 8 as 'LOB Used(KB)'

       , sum(lob_reserved_page_count) * 8 as 'LOB Reserved(KB)'

       , sum(row_overflow_used_page_count) * 8 as 'Overflow Used(KB)'

       , sum(row_overflow_reserved_page_count) * 8 as 'Overflow Reserved(KB)'

from sys.dm_db_partition_stats with(nolock)

where object_name(object_id) not like 'sys%'

group by object_id

order by 2 desc


시드값 확인
dbcc checkident('테이블 이름', noreseed)

시드값 변경

dbcc checkident('테이블 이름', reseed, 변경값)

* 변경값은 현재시드값을 그 쪽으로 이동시켜주는 것이 됩니다. 예를 들어 증가값이 1로 identity가 설정되어있고 변경값에 40을 입력하여준 뒤 데이터를 추가시키면 컬럼값은 41이 되어서 데이터가 입력이 되게 됩니다(그리고 이 상태에서 계속 순차적으로 값이 올라갑니다)


 출처 :http://azbdc.tistory.com/268

1.MSSQL서버매니저에서

   새쿼리를 선택해서  backup log DB명 with no_log 를 실행

 

2.개체탐색기의 해당 DB명에서 우클릭으로 작업>축소>파일 을 선택

 

3.파일축소 팝업화면에서
    파일유형:로그 선택
    축소작업:사용하지 않는 공간 해제 선택
    확인버튼 클릭

   (처리는 1~2초정도)

 

4.로그파일 싸이즈 확인(97G -> 1.25M)