이글루스 | 로그인  


토드 단축키

테이블 정보 상세보기

F4 : Table, View, Proc, Funct, Package DESC(테이블명 위에 커서를 두고 F4)

 

자동완성

Ctrl+. : Table Completion (매칭되는 테이블목록 출력)

Ctrl+T : Columns Dropdown (해당테이블의 컬럼목록 표시)

 

SQL문 실행

F5 : SQL Editor내의 모든 SQL문 실행

Ctrl+Enter : 현재 커서의 SQL문 실행

F9 : SQL문 실행 후 Grid에 출력

 

히스토리(과거 수행SQL문 조회)

F8 : 과거에 실행한SQL HISTORY 목록

Alt+Up : History UP

Alt+Down : History DOWN

 

텍스트 대/소문자 변환

CTRL+L : 텍스트를 소문자로

CTRL+U : 텍스트를 대문자로

 

주석처리

Ctrl+B : 주석처리

Ctrl+Shift+B : 주석해제

 

편집 창 전환(이동)

F6 : SQL Editor와 결과창간의 이동

F2 : SQL Editor창 전체화면 전환

Shift+F2 : Grid Output창 전체화면 전환

 

기타 단축키

F7 : 화면을 모두 CLEAR

Ctrl+Shift+F : 쿼리문을 보기좋게 정렬

Ctrl+F9 : SQL Validate (SQL문을 수행하지 않음)

-출처 http://it.kimgisa.net/30

by 단팥콩팥 | 2009/09/16 18:17 | 트랙백 | 덧글(0)

오라클 원격 접속이 안될 경우

방화벽(FIREWALL)과 오라클 접속
게시일: 2006. 12. 11 오후 9:43
    
제품 : SQL*NET

작성날짜 : 2003-03-20

방화벽(FIREWALL)과 오라클 접속
==============================

Purpose



방화벽을 통한 오라클 접속과 port redirection에 대해 알아 봅니다.

firewall을 통과하기 mts/deciated, unix/windows 각각에 대한 지정 방법은
<bulletin:12098>를 참고하도록 합니다.

Explanation


오라클 접속과 방화벽



client가 sqlplus를 통해서 (sqlplus userid/password@alias) 접속을
하면 명시한 alias이름을 tnsnames.ora 파일 또는 names server 에서
찾게 됩니다.
그런다음 db에 대한 address를 얻어 server로 접속을 하려고 하게
됩니다. db에 있는 listener에 접속을 하게 되고 platform과 init<sid>.ora
설정에 따른 port redirection이 일어 나게 됩니다.
OS는 OS로 부터 free port를 얻어 리스터를 통해 new port를 할당 받
았음을 client에게 보내게 됩니다.
그러면 client는 새로운 port로 db에 접속을 시도하게 됩니다.

만일 client와 server사이에 firewall이 있어 port redirection이 일어
나게 되면 원격지에 있는 oracle client는 db로의 접속에 실패하게
될 수 있습니다.
firewall이 port를 막아 ora-12203 또는 ora-12535가 발생하게 됩니다.
client의 접속은 Windows OS의 port redirection 때문에 실패하게
되는 것입니다. Port redirection은 ora 설정파일에 설정되지 않은
port를 사용해서 db에 접속하게 되도록 하는 것입니다.
UNIX장비에서 Oracle MTS(address port를 init ora 파일에 설정하지 않은)
, Oracle SSL, NT장비의 Oracle은 port redirection을 일으킵니다.

level 16으로 client trace file을 만들어 봄으로써 이 문제가
방화벽 문제인지 알 수 있습니다.
client쪽 slqnet.ora 파일에 다음을 추가해 주십시요.

trace_level_client = 16
trace_file_client = client
trace_directory_client = < trace 파일이 생성될 디렉토리 > ie: c:\temp

sqlnet.ora 파일을 저장하고 sqlplus로 접속을 시도해서 에러를 발생 시키
십시요. 그러면 trace file이 만들어 질 것입니다.
여기 그렇게 만든 trace file의 일부분이 있습니다.

listener로 보내진 최초의 packets은 1521port로 보내짐을 trace 파일을
통해 알 수 있습니다.

niotns: Calling address: (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
(HOST=server1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=v815.world)
(CID=(PROGRAM=D:\V815\BIN\SQLPLUSW.EXE)(HOST=server1)(USER=system))))
nladget: entry
nladget: exit
nscall: entry
nscall: connecting...
nsc2addr: entry
nttbnd2addr: entry
nttbnd2addr: port resolved to 1521

listener로 부터 받은 packet은 client에게 1729 port를 사용하라고 명령하고
있습니다.

nscon: recving a packet
nsprecv: entry
nsbal: entry
nsbgetfl: entry
nsbgetfl: normal exit
nsmal: entry
nsmal: 44 bytes at 0xb892d0
nsmal: normal exit
nsbal: normal exit
nsprecv: reading from transport...
nttrd: entry
nttrd: socket 232 had bytes read=64
nttrd: exit
nsprecv: 64 bytes from transport
nsprecv: tlen=64, plen=64, type=5
nsprecv: packet dump
nsprecv:00 40 00 00 05 00 00 00 |.@......|
nsprecv:00 36 28 41 44 44 52 45 |.6(ADDRE|
nsprecv:53 53 3D 28 50 52 4F 54 |SS=(PROT|
nsprecv:4F 43 4F 4C 3D 74 63 70 |OCOL=tcp|
nsprecv:29 28 48 4F 53 54 3D 31 |)(HOST=1|
nsprecv:33 38 2E 32 2E 32 31 33 |38.2.213|
nsprecv:2E 36 31 29 28 50 4F 52 |.61)(POR|
nsprecv:54 3D 31 37 32 39 29 29 |T=1729))| <- 바뀐 port
nsprecv: normal exit
nscon: got NSPTRD packet
nscon: got 54 bytes connect data
nscon: exit (0)

client는 1729 port를 통해 접속을 하려 합니다.

nscall: connecting...
nsc2addr: entry
nttbnd2addr: entry
nttbnd2addr: port resolved to 1729
nttbnd2addr: using host IP address: 138.2.213.61
nttbnd2addr: exit
nsc2addr: normal exit

먼저 client는 1521 port로 packets을 보내게 되고 server로 부터 새
로운 port할당을 내용으로 하는 packets을 받게 됩니다.
그러면 이번에 client는 이 다른 port로 packets을 전송하게 됩니다.
이 부분에서 접속이 실패하고 있음을 trade파일이 보여 주고 있습니다.

client에 할당되는 port는 os에서 다른 software나 hardware에서 사용하지
않는 port중에서 임으로 정해서 할당하는 port이며 수정이 불가능 합니다.

일단 접속 실패가 firewall문제임이 밝혀질 경우,
다음으로 할 일은 이 문제를 어떤 방법으로 해결할 것인가를 결정하는
일입니다.

Oracle과 firewall이 정상적으로 동작하는 경우 다음과 같은 몇가지
해결 방법이 있습니다.

해결 방법: Firewall Vendor
첫번째 해결 방법은 firewall를 만든 회사에게 OS port redirection을 하는
오라클 접속을 허락도록 upgrade를 할 수 있는지를 문의해 보는 것입니다.
만일 firewall software가 upgrade가 가능할 경우 이것이 최상의 방법입니다.

해결 방법: Connection Manager
두번째 해결 방법은 oracle net8이상의 버젼을 사용할 경우 connection
manager (cman)를 설치하여 client가 firewall을 통해 접속할 수 있도록
하는 것입니다. Connection Manager는 bin디렉토리 아래에 있는 실행파일
이며 client와 server사이에 있는 firewall을 통해 접속을 할 수 있도록
합니다. Connection Manager는 listener와 비슷합니다.
Connection Manager는 cman.ora 파일안의 있는 주소를 읽어 실행되며
들어오는 접속에 대한 대기 상태로 있게 됩니다. 일반적으로 port는
1610 또는 1630 을 사용합니다.
Connection Manager는 listener와 비슷하게 시작되며 listening 상태에
들어 가게 됩니다.
client쪽 tnsnames.ora 파일에는 다음과 같은 설정이 필요하게 됩니다.

cmantest =
(description =
(address_list =
(address = <- 처음 주소는 cman의 것입니다
(protocol=tcp)
(host=hostname or ip of cman)
(port=1610)
)
(address= <- 두번째 주소는 listener의 것입니다
(protocol=tcp)
(host=hostname or ip of listener)
(port=1521)
)
)
(connect_data = (sid = sidname))
(source_route = yes) <-이것은 clietn가 cman을 사용하며
) 위의 두 주소들을 사용하게 됨을
의미합니다.

client가 connection manager에 접속을 하게 되면 cman은 client가 가져온
두번째 주소를 cache에서 찾게 됩니다. 두번째 주소는 listener가 실행
되고 있는 컴퓨터의 주소를 가리킵니다. cman은 그 주소를 사용해서
client를 listener쪽으로 돌려 주어 db에 접속을 하도록 합니다.

이 문서에서는 connection manager의 설정에 관한 내용은 언급하지
않겠습니다.
자세한 내용은 metalink의 여러 문서들을 참고하시기 바랍니다.
(참고 2077721.6)

해결 방법: Use_Shared_Socket
세번째 해결 방법은 NT server를 사용하는 경우 registry에
use_shared_socket = true를 추가 하는 방법입니다. (참고 124140.1)
이 설정은 OS가 1521 port를 공유해서 사용하도록 하며 따라서 client는
1521 port만을 사용하게 되어 port redirection이 일어나지 않게 됩니다.
이 옵션의 단점은 모든 접속이 listener의 port를 사용하게 되기때문에
만일 listener가 stop이나 start되면 모든 접속이 영향을 받게 된다는
점입니다.

UNIX장비에서는 만일 Multi Threaded Server (MTS)를 사용하는 경우라면
문제가 있을 수 있습니다. MTS dispatchers가 NT에서처럼 접속하는 port
를 redirect하기 때문입니다.

해결 방법: MTS 포트 설정
위 문제를 해결하기 위해서는 init.ora파일에 mts parameter를 설정할때
port를 명시해야 합니다.(참고 1016349.102)
이렇게 하면 dispatcher가 명시된 port만을 사용하게 됩니다.
물론 명시된 port들은 firewall에서 열려 있어야 합니다.
다음 예에서 port를 2450과 3125로 설정하고 있습니다.
이 방법은 NT에서도 가능합니다.

예)
mts_listener_address="(ADDRESS=(PROTOCOL=TCP)
(HOST=HOSTNAME or IP ADDRESS)(PORT=1521))"
mts_dispatchers="(ADDRESS=(PARTIAL=TRUE)(PROTOCOL=TCP)
(HOST=IP ADDRESS)(PORT=5000))(DISPATCHERS=1)"
mts_dispatchers="(ADDRESS=(PARTIAL=TRUE)(PROTOCOL=TCP)
(HOST=IP ADDRESS)(PORT=5100))(DISPATCHERS=1)"
mts_dispatchers="(ADDRESS=(PARTIAL=TRUE)(PROTOCOL=TCP)
(HOST=IP ADDRESS)(PORT=5200))(DISPATCHERS=1)"
mts_max_dispatchers=10
mts_servers=2
mts_max_servers=5


SSL
SSL을 사용하면 port redirection이 일어나게 됩니다.
해결할 수 있는 방법은 init.ora 파일에 port를 명시해서 MTS를 사용
하거나 cman.ora파일에 port를 명시해서 Connection Manager를 사용하
시면 됩니다.


Reference Documment

-출처 
 http://kr.forums.oracle.com/forums/thread.jspa?messageID=1593803

by 단팥콩팥 | 2009/09/14 10:57 | DB | 트랙백 | 덧글(1)

ms-sql db mdf, ldf 파일 변경

db 엔터프라이즈 관리자에서 해당 디비 오프라인 시킨 뒤 삭제

쿼리 실행기에서 

use master
go

sp_attachdb '디비명' , '복제mdf 경로', '복제ldf 경로'
go

by 단팥콩팥 | 2009/07/28 10:13 | DB | 트랙백 | 덧글(0)

테이블 검색 속도가 느려질때는 테이블 단편화 정보를 체크하자

 

테이블 사용량이 잦고 데이타가 많은 경우 프로시저의 이상은 없어보이는데도 데드락 현상이 발생하는 수가 있다.

 

테이블 검색 속도 자체가 너무 느려져서 생기는 문제인데 인덱스도 제대로 걸려 있는 상황이라면 단편화를 생각해 볼 필요가 있다.

 

먼저 단편화 정보를 확인하는 명령어는 DBCC SHOWCONTIG  이다.

 

다음은 mail_box 라는 테이블에 대한 단편화 정보를 조회해본 샘플이다.

 

참고로 이 테이블은 본인이 다니는 회사 제품 중에 메일 서비스에서 사용하는 테이블이다.  메일 사용량이 많은 경우 수십만건의 데이타가 존재하기도 하고 편지함 이동 및 삭제 등으로  프로그램에서의 입력, 수정, 삭제 작업이 빈번하게 일어나는 테이블이다.

 

DBCC SHOWCONTIG이(가) 'mail_box' 테이블을 검색하는 중...
테이블: 'mail_box'(1139691308); 인덱스 ID: 1, 데이터베이스 ID: 9
TABLE 수준 검색을 수행했습니다.
- 검색한 페이지................................: 77802  
- 검색한 익스텐트 ..............................: 10259
- 익스텐트 스위치..............................: 76211
- 익스텐트당 평균 페이지 수........................: 7.6
- 검색 밀도[최적:실제].......: 12.76% [9726:76212]
- 논리 검색 조각화 상태 ..................: 99.27%
- 익스텐트 검색 조각화 상태 ...................: 86.36%
- 페이지당 사용 가능한 평균 바이트 수.....................: 3838.4
- 평균 페이지 밀도(전체).....................: 52.58%
DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 출력하면 시스템 관리자에게 문의하십시오.

 

이때 속도에 영향을 미치는 부분은 익스텐트 스위치이다.

 

관련 용어를 설명해보자면  1페이지는 8Kbyte 를 갖는 공간이다. MSSQL  DB 베이스를 구성하는 최소 단위라고 보면 된다. 1익스텐트는 8개의 페이지의 묶음이다. 고로 1 익스텐트는 8*8 = 64Kbyte 의 공간이다.  이건 뭐 -_- 의미없다.  구구단을 외자-_-)

 

이때 제일 중요한 수치인 익스텐트 스위치는  DBCC 문이 테이블이나 인덱스의 페이지를 이동하는 동안 익스텐트 간에 이동한 횟수를 나타낸다.

 

익스텐트 스위치의 값은 검색한 익스텐트의 값에 가능한 근접해야 한다.  그 말은 순서대로 정렬이 되어서 필요 이상의 이동을 하지 않았다는 의미가 된다.  반면에 단편화가 많이 되어 익스텐트 간의 이동한 횟수가 높아진다면 접근 속도에 영향을 준다.

 

이 비율은 검색 밀도 값으로 계산되며  값은 높을수록 좋으며 인덱스 조각화를 줄여 개선 가능하다.

 

위의 예에 나온 테이블은 보다시피 단편화 정도가 심각하여 시스템에 아주 많은 과부하를 가져다주게 되었다. 

 

- 검색한 익스텐트 ..............................: 10259
- 익스텐트 스위치..............................: 76211

 

위에서 보다시피 익스텐트의 수보다 스위치 수가 7배 이상 많다.  그만큼 익스텐트의 순서가 꼬여 있다는 말이다.

 

이는 밀도에서도 바로 알 수 있다.

 

- 검색 밀도[최적:실제].......: 12.76% [9726:76212]

 

최적과 비교했을때는 거의 8배의 차이가 난다.

 

이런 단편화가 생기는 이유는 해당 테이블에 대한 입력, 삭제 작업이 워낙 잦은 경우 빈번하게 발생할 수 있는 문제이다.

 

주기적인 단편화 정리 작업을 자동으로 하도록 설정이 필요한 경우라 볼 수 있다.

 

참고로 단편화 정리 작업을 한 경우에는 아래의 수치로 변경이 되었다.

(그래봐야 페이지 재정렬이다 -_-)

 

DBCC SHOWCONTIG이(가) 'mail_box' 테이블을 검색하는 중...
테이블: 'mail_box'(1139691308); 인덱스 ID: 1, 데이터베이스 ID: 9
TABLE 수준 검색을 수행했습니다.
- 검색한 페이지................................: 50463
- 검색한 익스텐트 ..............................: 6414
- 익스텐트 스위치..............................: 6670
- 익스텐트당 평균 페이지 수........................: 7.9
- 검색 밀도[최적:실제].......: 94.56% [6308:6671]
- 논리 검색 조각화 상태 ..................: 1.90%
- 익스텐트 검색 조각화 상태 ...................: 88.29%
- 페이지당 사용 가능한 평균 바이트 수.....................: 1519.7
- 평균 페이지 밀도(전체).....................: 81.22%
DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 출력하면 시스템 관리자에게 문의하십시오.

 

보다시피 익스텐트 수와 익스텐트 스위치의 수가 거의 1:1에 가깝도록 변경되었으며 당연하겠지만 밀도도 94퍼센트로 올라갔다.

 

물론 전체를 새로 끼워 맞추는 작업도 가능하지만 운용중인 디비에 그러한 방식의 적용은 현실적으로 어렵다는걸 잊지 말자.


다음 게시물에서는 인덱스 재생성 및 인덱스의 페이지를 재정렬하여 단편화 현상을 줄이는 방법에 대해서 알아보자.

by 단팥콩팥 | 2009/07/28 09:35 | DB | 트랙백 | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶