현재 시간

Posted 2009.02.06 16:20 by maxmini MAXMINI
sysdate = getdate()

Tag : getdate(), sysdate

Write your message and submit

Microsoft SQL Server Management Studio Express에서

Posted 2009.02.02 15:45 by maxmini MAXMINI


sp_tables;

sp_columns table명;

Tag : MSSQL, 컬럼명, 테이블명

Write your message and submit

mssql 날짜타입 형변환(?)

Posted 2009.01.28 16:36 by maxmini MAXMINI


cre_date(datetime)

select
convert(varchar, cre_date ,100),
convert(varchar, cre_date ,101),
convert(varchar, cre_date ,102),
convert(varchar, cre_date ,103),
convert(varchar, cre_date ,104),
convert(varchar, cre_date ,105),
convert(varchar, cre_date ,106),
convert(varchar, cre_date ,107),
convert(varchar, cre_date ,108),
convert(varchar, cre_date ,109),
convert(varchar, cre_date ,110),
convert(varchar, cre_date ,111),
convert(varchar, cre_date ,112),
convert(varchar, cre_date ,113),
convert(varchar, cre_date ,114),
convert(varchar, cre_date ,120),
cre_date
from tb_ktde_member_info

100 : 01 16 2009  2:20PM
101 : 01/16/2009
102 : 2009.01.16
103 : 16/01/2009
104 : 16.01.2009
105 : 16-01-2009
106 : 16 01 2009
107 : 01 16, 2009
108 : 14:20:16
109 : 01 16 2009  2:20:16:683PM
110 : 01-16-2009
111 : 2009/01/16
112 : 20090116
113 : 16 01 2009 14:20:16:683
114 : 14:20:16:683
120 : 2009-01-16 14:20:16
cre_date : 2009-01-16 14:20:16.683

필요한 타입으로 골라쓰자

Tag : date, maxmini, MSSQL

Write your message and submit

Row Level Locking

Posted 2008.12.12 17:26 by maxmini MAXMINI

1. Row Level Locking 이란?

 row level lock 은 oracle에서 기본적으로 제공하는 기능입니다. 그리고 기본적
으로는 dml 에서 주로 사용합니다. 참고로 ddl lock 같은 경우는 주로 table 단위
로 lock 을 걸지요

A 라는 USER 가 특정 DATA를 UPDATE,DELETE 등을 할 경우 A 가 사용하고 있는 DATA
는 다른 USER 가 UPDATE,DELETE 를 할 수 없습니다.

A USER
   UPDATE XXXXX SET ABC ='ZZZZ' WHERE ABC = 'DEF' 이라고 하고 COMMIT 를 하지
않았다면 A 이외의 USER 는 SELECT 시에는 DEF 의 DATA 가 보이고 UPDATE,DELETE
시에는 LOCK 이 걸려 WAITING 이 걸립니다.

A USER 가 COMMIT 를 했을 경우에는
모든 USER 는 SELECT 시에는 ZZZZ 가 보이며
     UPDATE ,DELETE 시에는 DEF 라는 DATA는 없으므로 UPDATE 할 수 없고
     UPDATE 할 수 있는 DATA는 ZZZZ가 됩니다.
물론 PRIMARY KEY 를 수정했을 경우는 A 이외의 USER 는 DATA가 없기 때문에 수정을
할 수 없습니다.

2. HINT란?

 사용자가 엑세스 경로의 변경을 위해서 SQL 내에 요구사항을 기술하면, 옵티마이
져가 엑세스 경로를 결정할 때 이를 참조하도록 하는 사용자 인터페이스를 말한다.

- HINT 사용방법및 예

 Select ord_dept, ordqty
  From  ordert
 Where ord_dept like '12%'
   And   ord_date between '950101' and '950131' ;
 위의 SQL에서는 where 조건절의 ord_dept 필드와 ord_date 필드 각각 인덱스가
있다고 가정할 때 어떤 인덱스가 사용될 지 확실치가 않다.  만약 ord_date 필드의
인덱스를 사용하는 것이 효율적이라고 판단될 경우, 아래와 같이 Hint를 사용하여
특정 인덱스를 지정할 수 있다.

 Select  /*+ INDEX(a ord_date_index) */  ord_dept, ordqty
  From  ordert  a
 Where ord_dept like '12%'
   And   ord_date between '950101' and '950131' ;
 Syntax는 SQL 내에  /*+  ...  */ (여러 라인 가능) 혹은
                               --+ ...  (한 라인만. 필드명은 다음 라인에
                                         기술하여야 함.)  를  사용함.

- HINT의 종류

ALL_ROWS : 모든 ROW 를 SELECT 하는 방안을 찾는다.(COST BASED 를 사용)
FIRST_ROWS : 첫번째 ROW 를 SELECT 하는 방안을 찾는다.(COST BASED 를 사용)
RULE : 기본적으로 VERSION 7에서는 COST-BASED 를 사용하지만 RULE-BASED 를
      사용할려고 할때 사용한다.
FULL : 특정 TABLE 을 FULL SCAN 할려고 함.
ROWID : ROWID 를 사용해서 SCAN 할려고 함.
CLUSTER : CLUSTER 를 사용해서 SCAN 할려고 함.
HASH : HASH SCAN
INDEX : INDEX 를 사용해서 SCAN 할려고 함.
INDEX_ASC : INDEX 를 사용해서 ASCENDING SCAN 할려고 함.
INDEX_DESC : INDEX 를 사용해서 DESCENDING SCAN 할려고 함.
AND_EQUAL : 여러 SINGLE COLUMN INDEX 를 사용할려고 함.
ORDERED : FROM 절의 TABLE 순서를 명확히 할려고 함.
         없으면 TBALE 순서는 OPTIMIZE 가 정함.
USE_NL : NESTED LOOP 를 사용할려고 함.
USER_MERGE : SORT-MERGE JOIN 를 사용할려고 함.

 기본적으로 ANALYZE 를 사용하지 않는 TBALE 은 RULE-BASED 를 사용한다. 그리고
COST-BASED 를 사용하지 않을 경우에 위의 HINT 들을 사용하게 된다.

 HINT는 코딩이 잘못 되거나, 논리적으로 맞지 않거나, 옵티마이져가 판단할 때
너무 많은 비용이 소요된다고 판단하면 사용자의 힌트를 무시한다. 즉 HINT는 장기
나 바둑의 '훈수' 라고 생각하면 된다. 훈수를 받을 수는 있으나 반드시 훈수대로
두는 것은 아니다. 따라서 힌트를 사용한 경우 힌트가 감안되었는지 무시되었는지
를 실행계획 (Explain Plan) 혹은 SQL_TRACE 를 통해 확인하여야 한다.

3. Database Link?

 link 는 remote db에 대해서 network(sql*net) 을 사용하여 자기 db에 있는 것과
같이 사용을 목적으로 하고 있다. link 를 사용하기 위해 우선 조건은 sql*net이
제대로 작동해야 하며 sql*net은 o/s 끼리의 network (tcp,lu6.2 decnet ) 이 되어
야 한다.

 그럼 link를 만드는 명령어를 쳐 보겠습니다.

sql> create database link test_link connect to scott
    identified by tiger using 'main' ;

위의 test_link 는 link 이름입니다.

    scott 는 상대편 userid 이며 뒤의 tiger 는 상대편 password 입니다.
    2번째 줄의 main 는 sql*net version 2를 사용할 경우는 tnsnames.ora에 등록
된 이름을 뜻합니다.
    ( 현재 T-520 은 'ora722t' 로,  K-460 은 'main' 으로 등록되어 있습니다. )

다음은 link를 사용하는 방법입니다.

sql> select * from tab@test_link ;
   위의 @test_link 는 link 이름이며 사용하고자 하는 table의 이름 뒤에 적용하
면 됩니다. 나머지 액션들은 자기 db에 있는 것과 똑 같이 사용하시면 됩니다.
   사용시 많은 data 가 이동되지 않도록 주의 하시면 됩니다.
   
   이 부분은 여러분이 현 운영환경의 data를 이동시 많이 사용하게 되므로
   그리고 어려운 부분이 아니므로 한 번 쯤은 test 를 해보시기 바랍니다.
   
sql> create synonym   emp  for  emp@test_link ;
 위와 같이 하면 Remote db 의 emp table 을 마치 자기 db에 있는 것처럼 사용할
수 있습니다.  

Tag : oracle, Row Level Locking

Write your message and submit

DBWR(database writer background process)

Posted 2008.12.12 16:50 by maxmini MAXMINI

http://radiocom.kunsan.ac.kr

메모리 영역에도 사용상의 크기 제한이 있으므로 항상 사용자 원하는 데이터를 메모리에 보관하기 곤란하다. 그렇기 때문에 사용자의 요청이 없더라도 메모리의 내용을 하드디스크에 존재하는 데이터파일(data file)에 내려 적음으로써 데이터의 안정성을 확보하고 메모리 공간을 효율적으로 관리할 수 있다

다시 말해서 DBWR은 데이터 버퍼 캐시에 존재하는 dirty blocks들을 체크포인트가 발생하는 동시에 데이터 파일로 내려쓰는 기능을 한다.

체크포인트가 발생하는 경우는 다음과 같다.

• 새로운 데이터 블럭을 데이터 버퍼 캐시로 불러들이고자 할 때 여유공간이 없는 경우
• Timeout(3초)이 발생하는 경우(LOG_CHECKPOINT_TIMEOUT 파라미터로 설정)
• 온라인 리두로그 파일에 기록된 데이터 블럭(operating system block)의 수가 임의의 개수에 도달하는 경우(LOG_CHECKPOINT_INTERVAL 파라미터로 설정)
• 데이터베이스를 종료하는 경우(closing)
• 더티 버퍼의 수가 어느 정도의 threshold 값에 도달하는 경우
• 테이블스페이스가 오프라인(offline), READ ONLY, 온라인 백업(begin backup)이 실행되는 경우
• ALTER SYSTEM CHECKPOIN 문을 사용하여 오라클 데이터베이스 운영자에 의해 인위적으로도 가능하다.
• 테이블스페이스가 DROP되거나 TRUNCATE 되는 경우



백그라운드 프로세스의 종류
필수 DBWR Database writer로 database b uffer cache의 내용을 data file로 저장함, 즉, 사용자가 실행한 SQL문에 의해 데이터의 변경 내역을 테이블에 저장하 는 작업
LGWR Log writer는 redo log buffer에 기록된 변경사항 을 redo log file에 기록함
PMON Process Monitor는 데이터베이스에 접속할 때마다 만들어지는 프로세스의 생성된 상태를 감시하는 프로세스 모니터, 즉 process를 감시하여 resource를 정리한다.
SMON System monitor는 백그라운드 프로세스와 데이터베이스 메모리 영역의 상태를 감시하며, 데이터베이스가 다운된후 다시 시작될 때 자동적인 복구 작업을 수행, 즉 데이 터베이스 STARTUP시 consistency(일관성) 검사, 데이터베이스 recovery를 담당함
CKPT Check Point는 LGWR에 의해서 작동하며, 커밋문이 실행될 때마다 오라클 서버가 관리하는 시스템 변경번호 및 데이터베이스의 상태정보를 컨트롤 파일과 데이터 파일에 저장하는 작업, 즉 데이터베이스의 동기화 정보를 담당함
기타 ARCH Redo log file에 저장된 내용을 Offline 저장장치에 백업한다 .
RECO Recovery(복구)시 사용됨
LCKn 데이터 Lock(잠금)에 사용됨
SNPn SNAPSHOT에 관련된 process임
Pnnn Parallel server(병렬 서버) 구성시 필요한 process임

Tag : DBWR, oracle

Write your message and submit

Oracle의 메모리 구조 ? SGA(요약)

Posted 2008.12.12 16:03 by maxmini MAXMINI

Oracle의 메모리 구조 ? SGA

오라클은 정보를 메모리와 디스크등에 저장 합니다. 가능하면 메모리에 원하는 정보가 있는 것이 훨씬 빠르고 효율적 입니다. 오라클의 메모리 구조는 크게 아래와 같이 3가지 구조로 볼 수 있습니다.

SGA(System Global Area) ? 오라클 프로세스들이 접근하는 하나의 큰 공유 메모리 세그먼트(Share Pool, DataBase Buffer Cache, Redo Log Buffer, Java Pool, Large Pool)

PGA(Process Global Area) ? 한 프로세스 혹은 스레드의 개별적인 메모리 공간으로 다른 프로세스와 스레드는 접근 불가

UGA(User Global Area) ? 사용자 세션과 관련된 메모리 공간, MTS 혹은 전용서버모드로 동작 하느냐에 따라 SGA 또는 PGA에 존재 합니다.

----------------------------------------------------

SGA(System Global Area)
SGA는 오라클이 시스템의 일정 자원을 정적으로 할당 받아 관리하는 오라클 시스템 영역으로 데이터베이스 인스턴스가 활성화 되면(Oracle이 Startup 될때) 시스템의 일정 부분을 할당 받고 인스턴스 종료 시(Shutdown 시) 반환하는 구조를 가집니다.

사용자가 테이블의 데이터를 엑세스 할 때 이러한 데이터는 메모리에 위치하며 즉 SGA안에 위치하게 되면 다른 사용자가 같은 데이터를 요구할  때는 오라클이 디스크에서 해당 내용을 읽어 오는 것이 아니라 이 메모리 영역에서 데이터를 가져다가 보여주게 됩니다.

이럴 경우 디스크에서 읽어 오는 것 보다 훨씬 빠르고 효율적 입니다. 이렇게 빠른 엑세스를 위해 SGA는 서버의 Main Memory에 위치하게 되며 만약 SGA 영역이 스와핑 된다면 SGA내의 데이터를 빠르게 접근 할 수 없게 됩니다.

모든 사용자는 데이터베이스 인스턴스에 접근하여 인스턴스의 SGA내의 정보를 읽을 수 있으며 오라클의 여러 프로세스는 SGA 영역을 읽고 쓸 수 있습니다. SGA의 데이터 구조와 그에 대한 간단한 설명 입니다.

데이터베이스 버퍼 캐시(Database Buffer Cache) ? 실행 한 SQL문장의 대상이 되는 데이터 즉 디스크로부터 읽혀진 데이터의 복사본이 저장되는 메모리 영역, SQL이 실행되기 전의 Before 이미지와 변경된 후의 After Image가 저장 됩니다.

리두 로그 버퍼(Redo Log Buffer) ? DataBase의 데이터 블록에 행하여 진 모든 변경 사항에 관한 정보를 기록하며 장애 발생시 복구에 이용됩니다.

공유 풀(Shared Pool) ? DB에 접근하는 사용자들이 공유, 처리되는 SQL문장들이 저장되는 Library Cache와 SQL 문장의 실행을 위해 필요한 딕셔너리 정보를 간직하고 있는 Data
Dictionary Cache로 구성 됩니다. Library Cache는 가장 최근에 실행된 SQL 문과 그것에 관한 정보를 보관 합니다. Data Dictionary Cache는 가장 최근에 사용된 데이터베이스 정의(able, View이름, Table의 Column명, 사용자 정보)가 저장되어 있으며 이들 정의는 Data Dictionary로부터 읽혀 집니다.

자바 풀(Java Pool) ? Java 프로그램을 사용하여 데이터베이스에 접근하여 일련의 작업을 하는 경우 사용되는 영영으로 데이터베이스 내에서 실행되는 Java Code를 저장 합니다.

대용량 풀(Large Pool, Optional) ? 백업이나 복구 같은 작업시에 처리되는 대용량 데이터를 저장하는데 사용되는 대용량 메모리 영역으로 SQL문의 처리와는 직접적인 관련이 없습니다.

SGA 영역에는 데이터베이스의 상태와 인스턴스에 대한 일반적인 정보가 들어 있습니다. 이것은 백그라운드 프로세스가 필요한 정보로 Fixed SGA라고 하며, 사용자 정보는 이 영역에 저장되지 않습니다. SGA는 프로세스끼리의 정보(예를들면 Locking)를 주고 받는 중간 역할을 합니다. 만약 시스템이 공유 서버 (Shared Server) Architecture라면 사용자의 요구와 반응에 대한 큐와 PGA에 대한 약간의 정보를 SGA에 포함하고 있습니다.


참고로  SGA의 상태를 보기 위해서는 SQL*Plus등으로 로그인 한 후… 아래 처럼 하면 된다.

SQL> show sga
Total System Global Area   72123504 bytes
Fixed Size                   279664 bytes
Variable Size              67108864 bytes
Database Buffers            4194304 bytes
Redo Buffers                 540672 bytes


오라클 9i에서는, SGA가 이전 버전에서 처럼 정적으로 구성될 수도 있고,  동적으로 바뀔 수 있게 구성될 수 도 있습니다.

Tag : oracle, SGA

Write your message and submit

테스트DB에서 실DB로 데이터 옮길때

Posted 2008.12.03 10:41 by maxmini MAXMINI

insert into uhmp.tb_hmp_cardi@hcdb.world  

seq, title, contents, title_img, year, season, write_id, reg_date 

select seq, title,  contents, title_img, year, season, write_id, reg_date from tb_hmp_cardi
where seq=1 
;

uhmp.tb_hmp_cardi@hcdb.world   <- 이건 실DB

데이터 이관이라는건 어떻게 하는걸까...

이런식으로 한건 한건 하는건 아닐텐데....

Tag : oracle

Write your message and submit

[Oracle] Primary Key 수정

Posted 2008.11.05 18:21 by maxmini MAXMINI

1.해당하는 PK를 삭제한다
: ALTER TABLE TABLE명 DROP CONSTRAINT PK명;

 

2.변경하고자 하는 COLUMN으로 Unique Index를 생성한다.
: CREATE UNIQUE INDEX PK명 ON TABLE명(COLUMN명) TABLESPACE TABLESPACE명;

 

3.PK에 속성을 추가한다.
: ALTER TABLE TABLE명 ADD CONSTRAINT PK명 PRIMARY KEY(COLUMN명);

 

-----------------------------------------------------------------------------

 

 

-- PK 제거하기

Alter TABLE 테이블이름 drop primary key cascade

 

--PK추가 하기

ALTER TABLE 테이블이름 ADD CONSTRAINT 인덱스 이름 PRIMARY KEY(field1, field2)


-----------------------------------------------------------------------------

1. PK INDEX Create

 

ALTER TABLE TABLE_NAME
        ADD CONSTRAINTS PK_INDEX_NAME
            PRIMARY KEY (PK_1, PK_2, PK_3)
            USING INDEX
            TABLESPACE TABLESPACE_NAME
            STORAGE(    INITIAL     1280K
                        NEXT        1280K
                        PCTINCREASE 0   );

2. INDEX Create

 

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(PK_1, PK_2, PK_3)

TABLESPACE TABLESPACE_NAME

STORAGE ( INITIAL 5M NEXT 5M PCTINCREASE 0 );

 

3. PK_INDEX Drop

 

ALTER TABLE TABLE_NAME DROP CONSTRAINT INDEX_NAME;

 

4. INDEX Drop

 

DROP INDEX INDEX_NAME;

Tag : oracle, primary key

Write your message and submit

[펌]NVL2 함수

Posted 2008.10.24 09:56 by maxmini MAXMINI

NVL2라는 함수 DECODE랑 조금 비슷한 놈 같기도 하고요..
참 편한놈이네용..

문법
NVL2(expr,expr1,expr2);


expr의 값이 null이 아닐 경우에는  expr1의 값을 반환 하고요 null일 경우에는 expr2의 값을 반환 합니다.



예제)

-- 보통 SQL문을 실행 했을 경우
SQL>  SELECT ename, comm FROM emp;

ENAME                      COMM
---------------- ----------
SMITH              
ALLEN                        300
WARD                        500
JONES              
MARTIN                     1400
BLAKE               
CLARK               
SCOTT              
KING                
TURNER                        0
ADAMS            



-- NVL함수를 사용 했을 경우

SQL>SELECT ename, NVL(comm, 0) comm  FROM emp;

ENAME                      COMM
---------------- ----------
SMITH                           0
ALLEN                        300
WARD                         500
JONES                           0
MARTIN                     1400
BLAKE                            0
CLARK                            0
SCOTT                           0
KING                               0
TURNER                         0
ADAMS                           0



-- NVL2함수를 사용 했을 경우

SQL>SELECT ename, NVL2(comm, 1, 0) FROM emp;
ENAME                      COMM
--------------- ----------
SMITH                          0
ALLEN                          1
WARD                          1
JONES                          0
MARTIN                        1
BLAKE                          0
CLARK                          0
SCOTT                         0
KING                             0
TURNER                        1
ADAMS                         0


http://www.oracleclub.com/article/2869

Tag : NVL, nvl2, oracle, 오라클

Write your message and submit

다중 업데이트

Posted 2008.06.27 18:04 by maxmini MAXMINI
UPDATE  TB_HMP_BOARD a
SET  a.WRITER_NICKNAME = (SELECT NICKNAME FROM TB_HMP_USER b WHERE a.WRITER_ID = b.ID)
WHERE  EXISTS (SELECT * FROM TB_HMP_USER b WHERE a.WRITER_ID = b.ID)
AND BOARD_ID='PHOTO'

Tag : DB, 다중업데이트, 쿼리

Write your message and submit