반응형
반응형
반응형

2.1 날짜를 다양하기 표시하기

- 날짜를 yyyy/mm/dd 형태로 표시하기

   SELECT TO_CHAR(to_date('92-FEB-16','YY-MON-DD'), 'yyyy/mm/dd') FROM dual;

 

2.2 날짜에 대한 반올림/반내림 값 구하기
- 날짜 중에 일(dd)에 대한 반올림

   SELECT ROUND(to_date('92-FEB-16','YY-MON-DD'), 'DAY') FROM dual;

- 날짜 중에 월(mm)에 대한 반올림

   SELECT ROUND (to_date('92-FEB-16','YY-MON-DD'), 'MONTH') FROM dual;

- 날짜 중에 년(yy)에 대한 반올림

   SELECT ROUND (to_date('92-FEB-16','YY-MON-DD'), 'YEAR') FROM dual;

- 날짜 중에 일(dd)에 대한 반내림

   SELECT TRUNC(to_date('92-FEB-16','YY-MON-DD'), 'DAY') FROM dual;

- 날짜 중에 월(mm)에 대한 반내림

   SELECT TRUNC (to_date('92-FEB-16','YY-MON-DD'), 'MONTH') FROM dual;

- 날짜 중에 년(yy)에 대한 반내림

   SELECT TRUNC (to_date('92-FEB-16','YY-MON-DD'), 'YEAR') FROM dual;

 

2.3 날짜에 대한 덧셈 연산하기
- 날짜 중에 일(dd)를 더하기 위해서

   SELECT to_date(’92-JUN-27’, ‘YY-MON-DD’) + 1 FROM dual

- 날짜 중에 월(mm)을 더하기 위해서

   SELECT ADD_MONTHS(to_date(’92-JUN-27’, ‘YY-MON-DD’),1) FROM dual;

- 날짜 중에 년(yy)을 더하기 위해서

   SELECT ADD_MONTHS(to_date(’92-JUN-27’, ‘YY-MON-DD’),12) FROM dual;

- 주어진 날짜로부터 다음 번에 나오는 월요일을 구하기 위해서

   SELECT next_day (to_date(’92-JUN-27’, ‘YY-MON-DD’) , ‘Monday’) FROM dual;

 

2.4 날짜에 대한 뺄셈 연산하기
- 날짜 중에 일(dd)를 빼기 위해서

   SELECT to_date(’92-JUN-27’, ‘YY-MON-DD’) - 1 FROM dual

- 날짜 중에 월(mm)을 빼기 위해서

   SELECT ADD_MONTHS(to_date(’92-JUN-27’, ‘YY-MON-DD’),-1) FROM dual;

- 날짜 중에 년(yy)을 빼기 위해서

   SELECT ADD_MONTHS(to_date(’92-JUN-27’, ‘YY-MON-DD’),-12) FROM dual;

- 두 날짜 사이의 일 수 계산 하기

   SELECT to_date(’92-JUN-29’, ‘YY-MON-DD’) - to_date(’92-JUN-27’, ‘YY-MON-DD’) FROM dual;

- 두 날짜 사이의 월 수 계산 하기

   SELECT MONTHS_BETWEEN(to_date(’92-JUN-29’, ‘YY-MON-DD’), to_date(’92-JUN-27’, ‘YY-MON-DD’)) FROM dual;

- 두 날짜 사이의 년 수 계산 하기

   SELECT days(date('92-JUN-26'), date(’92-OCT-29’)) / 365.254

   SELECT (to_date(’92-JUN-29’, ‘YY-MON-DD’) – to_date(’92-JUN-27’, ‘YY-MON-DD’) ) /365.254 FROM dual;

 

2.5 날짜에 대한 요일/월 이름 구하기
- 주어진 날짜에서 요일 구하기

   SELECT TO_CHAR(to_date('92-06-29','YY-MM-DD'), 'DAY') FROM dual;
   SELECT TO_CHAR (to_date('92-06-29','YY-MM-DD'), 'DY') FROM dual;

- 주어진 날짜에서 월 이름 구하기

   SELECT TO_CHAR(to_date('92-06-29','YY-MM-DD'), 'MONTH') FROM dual;
   SELECT TO_CHAR(to_date('92-06-29','YY-MM-DD'), 'MON') FROM dual;

 

2.6 날짜에 대한 일/월 구하기
- 주어진 날짜에서 일 구하기
   SELECT TO_NUMBER(to_char(to_date('92-06-29','YY-MM-DD'), 'DD')) FROM dual;

- 주어진 날짜에서 요일을 수로 구하기
   SELECT TO_NUMBER(to_char(to_date('92-06-29','YY-MM-DD'), 'D')) FROM dual;

- 주어진 날짜에서 월 구하기
   SELECT TO_NUMBER(to_char(to_date('92-06-29','YY-MM-DD'), 'MM')) FROM dual;


2.7 현재 일자 구하기

   SELECT SYSDATE FROM dual;
   SELECT CURRENT_DATE FROM dual;


2.8 해당 월의 마지막 날짜 구하기
   SELECT LAST_DAY(sysdate) FROM dual;


2.9 NEW_TIME

   NEW_TIME ( date-expression, timezone, new timezone )


반응형

'Database > Oracle' 카테고리의 다른 글

sum over 와 rollup 을 이용한 통계, 누적 쿼리  (0) 2009.02.11
누적 쿼리  (0) 2009.02.11
날짜 계산 - 날짜 차이  (0) 2009.02.11
Date 포멧..  (0) 2009.02.11
트리거 예제  (0) 2009.02.11
반응형
select trunc(date1) - trunc(date2) from ...


일단위 계산..


자세한건 trunc 메뉴얼 참조.ㅋ

반응형

'Database > Oracle' 카테고리의 다른 글

누적 쿼리  (0) 2009.02.11
Date 관련 query  (1) 2009.02.11
Date 포멧..  (0) 2009.02.11
트리거 예제  (0) 2009.02.11
계층적 쿼리 connect by  (0) 2009.02.11
반응형
YYYY/MM/DD HH24:MI:SS

반응형

'Database > Oracle' 카테고리의 다른 글

Date 관련 query  (1) 2009.02.11
날짜 계산 - 날짜 차이  (0) 2009.02.11
트리거 예제  (0) 2009.02.11
계층적 쿼리 connect by  (0) 2009.02.11
group by  (0) 2009.02.11
반응형

========
오라클
========
!! 트리거,트리거백업,트리거업뎃,after,before

create table tr1(name varchar2(10), age number(3));
create table test1(name varchar2(10), age number(3));
create table test(name varchar2(10), age number(3), tel varchar2(16));
==============================================
트리거 연습
create trigger t1_trigger
after insert on test
begin
insert into tr1 values('park',25);
end;
/

insert into test values('hong',25,'1234-44');
select * from tr1;
insert into test values('nam',25,'1334-44');
select * from tr1;

drop trigger t1_trigger;
===================================================
지우면 아래 값넣기
create trigger tr2_trigger
after delete on test1
for each row
begin
insert into tr1 values('행트리거',10);
end;
/

insert into test1 values('11',22);

delete test1;
하면
insert into tr1 values('행트리거',10);가 실행된다
====================================
지우기전에 빽업
create trigger tr3_trigger
after delete on test1
for each row
begin
insert into tr1 values(:old.name,:old.age);
end;
/

insert into test1 values('qqqq',31);

delete test1;

select * from tr1;
=====================================

사원 테이블에서 2000보다 많은 봉급을 받는 여사원들의 봉급이
update 되면 update_tab3 table 에('sawon',1,'female') data 를 insert (행 trigger)

create table update_tab3(name varchar2(10), su number(3), tel varchar(10));

create trigger ex_tri5
after update of sapay on sawon for each row
when(old.sapay>2000 and old.sasex='여자')
begin
insert into update_tab3 values('sawon',1,'femail');
end;
/

select * from sawon;
update sawon set sapay=sapay*0.9 where sasex='여자'; 
select * from update_tab3;
select * from sawon;
===========================================================
사원 테이블의 data 가 update 될때 이전에 있던 데이터를 savesawon 테이블에 insert
create table savesawon(name, job,pay,bouns)
as select saname, sajob, sapay,sapay*0.7 from sawon;

create trigger up_tri
before update on sawon for each row
begin
insert into savesawon values
(:old.saname,:old.sajob,:old.sapay,:old.sapay*0.7);
end;

select * from sawon;
update sawon set sapay=sapay*1.1;
select * from savesawon;
select * from sawon;
===========================================
sawon table data 가 update 될때 새로운 data 를 newsawon table 에 insert

create table newsawon(name,job,pay,bouns)
as select saname,sajob,sapay,sapay*0.7
from sawon;

create or replace trigger up_tri2
after update on sawon for each row
begin
insert into newsawon values
(:new.saname,:new.sajob,:new.sapay,:new.sapay*0.7);
end;
/

select * from sawon;

update sawon set sapay=sapay*0.9;
select * from newsawon;
===================================================================
if book_loan(책대출 테이블)에 data insert 시 같은 책의 id를 가진책을
book_loan tale(책정보)에서 loan column을 Y 대출중 표시 로 update

create table book_info
(id number primary key, bookname varchar2(10),loan char(2));

create table book_loan
(id number, anem varchar2(10),
constraints book_fk foreign key(id)
references book_info(id));

insert into book_info values(1,'computer','n');
insert into book_info values(2,'economy','n');
insert into book_info values(3,'science','n');

create trigger book_tri
after insert on book_loan for each row
begin
update book_info set loan='y'
where book_info.id = :new.id;
end;
/

insert into book_loan values(1,'kim');
select * from book_info;

 

반응형

'Database > Oracle' 카테고리의 다른 글

날짜 계산 - 날짜 차이  (0) 2009.02.11
Date 포멧..  (0) 2009.02.11
계층적 쿼리 connect by  (0) 2009.02.11
group by  (0) 2009.02.11
오라클 페이징 (서브쿼리)  (0) 2009.02.11
반응형

Connect by 계층적 쿼리는 오라클만이 가진 기능 중 하나로, 데이터를 선택하여 계층적인 순서 그대로 리턴하는데 사용된다.

예를 들면,  아래와 같이 직원 테이블이 있다고 생각 하자.

 

직원   직속상사      직급

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

철수     순희         대리

순희     영희        과장

길동     순희        대리

영희     개똥        부장

개똥                   사장

 

기본적인 SQl을 사용하여 계층 관계를 표현하는것은 불가능하다. 하지만 재귀 PL/SQL 루틴connect by 를 사용한다면 표현이 가능하다.

재귀 PL/SQL은개발과 처리 과정에서 다소 많은 시간이 필요로 한다는 단점이 있으며, 변경사항이 있을 때 다른 저장 프로시저를 만들거나 보다 복잡하게 변경해야한다는 점도 무시 할수 없다.

이에 오라클에서는 connect by라는 확장된 select 구문을 지원한다.

 

기본형식

select lpad(' ',(level-1)*2,' ')||직원 직원, 직급
  from 직원
start with 직원 = '개똥'
connect by 직속상사 = prior 직원

   직원      직급

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

개똥         사장
  영희       부장
    순희     과장
      철수   대리
      길동   대리

 

 

start with

select 구문의 start with 절은 계층 구조가 어떤 행에서 시작하는지 지정하는 기능을 한다.

 정의 : start with <조건>

where 절의 내용으로 쓸 수 있는 조건이라면 start with로도 사용이 가능하며, 하나 이상의 조건을 결함하는 것도 가능하다.

 ex) start with 직원 ='개똥'and 직원 ='순희'

start with 적의 조건에 맞는 행은 결과셋의 루트 노드가 된다. 주의할점은 조건에 맞는 행이 한 번 이상 등장할 경우이다.

예를 들면 start with 직원 ='개똥'and 직원 ='순희' 사용하면 개똥 이 순희 하위에 있기 때문에 순희 트리가 두 번 만들어지게 된다.

(한번은 개똥의 하위에서, 그리고 한 번은 루트로서)

 

select lpad(' ',(level-1)*2,' ')||직원 직원, 직급
  from 직원
start with 직원 = '개똥' or 직원 ='순희'
connect by 직속상사 = prior 직원 
   직원      직급

 

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

순희         과장
  철수       대리
  길동       대리
개똥         사장
  영희       부장
   
순희     과장
      철수   대리
      길동   대리

 

같은 결과셋이 여러 번 만들어지는 것을 방지하기 위해서는 이러한 조건을 사용해서는 안 된다.
 

처음 쿼리의 예제에서 직원 ='개똥'이라는 조건을 사용했으며, 이는 회사의 가장 높은 사람을 의미하는 것으로 전체 직원에 대한 목록이 만들어 진다. 하지만 이러한 방법은 그다지 좋지 않다. 왜냐하면, 개똥이 테이블에서 빠져나간다면 새로운 쿼리를 작성하여 직속상사가 의 값이 NULL 인 직원으로 부터 루트 노드가 다시 시작되도록 해야할 것이다.

그러므로, 가능하면 보다 구체적인, 즉 결과셋의 양이 적은 조건을 사용하는 것이 바람직하다. 직원 테이블을 보면 개똥의 직속상사의 값이 NULL로 저장되어 있는데, 이는 개똥이라는 직원이 보고할 사람이 없음을, 즉 가장 최상의 간부임을 의미한다.

 

select lpad(' ',(level-1)*2,' ')||직원 직원, 직급
  from 직원
start with 직속상사 is null

connect by 직속상사 = prior 직원

 

   직원      직급

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

개똥         사장
  영희       부장
    순희     과장
      철수   대리
      길동   대리

 

Connect by Prior

connect by 절은 각 행이 어떻게 연결되는지를 오라클에게 알려주는 역할을 한다. 즉 계층 구조 내에서 각 행의 관계를 설정하는 것이다.

현재 행과 다른 행은 Prior라는 키워드를 통해 구별된다. Prior는 상위 행을 참조하는 것으로, 우리의 예제에서는 다음과 같이 사용되었다.

  connect by 직속상사 = prior 직원

이는 "방금 전 행의 직원 값이 현재 행의 직속상사 값인 모든 행을 찾아라"라는 의미이다.

쉽게 말하면, 방금전에 살펴본 직원이 현재 직원의 상사가 되는 방식으로 리턴하라는 것이다.

다음 예제 코드를 보면, prior 부분이 = 기호를 사이에 두고 반대편으로 건너갔는데, 결과는 다음과 같이 트리를 거슬러 내려가는 것이 아니라, 거슬러 올라가는 방식으로 리턴되었다.

 

select lpad(' ',(level-1)*2,' ')||직원 직원, 직급
  from 직원
start with 직원 ='철수'
connect by prior 직속상사 = 직원

 

   직원      직급

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

철수         대리
  순희       과장
    영희     부장
      개똥   사장

이 쿼리에서는 철수가 루트 노드이며, 그의 상사가 오히려 아래에 표현되어 있다. 그 이유는 " 방금 전 행의 직속상사 값이 현재 행의 직원 값인 모든 행을 찾아라"라고 선언했기 때문이다. 이와 같이 prior 키워드를 등호의 반대편으로 넣어도 오류가 발생하지 않고, 전혀 다른 결과가 얻어짐을 알 수 있다.

 

prior 키워드는 또한 이전 행의 열을 참조하기 위해 다음과 같이 select 절 내에서 사용 될 수도 있다.

 

select lpad(' ',(level-1)*2,' ')||직원 직원, prior 직원 상사,직급
  from 직원
start with 직원 ='철수'
connect by prior 직속상사 = 직원

   직원      상사   직급

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

철수                  대리
  순희       철수   과장
    영희     순희   부장
      개똥   영희   사장

여기서는 직원과 직속상사의 이름을 동시에 선택하였는데, 사실 두 값은 같은 행에 존재하는 것이 아니기 때문에 평범한 방법으로는 이와 같은 결과를 얻을 수 없다. 그래서 예제에서는 두 행을 동시 접근하여 각각 값을 얻어낸 것이다.

 

Level

level은 오라클에서 실행되는 모든 쿼리 내에서 사용 가능한 가상-열로서, 트리 내에서 어떤 단계(level)에 있는지를 나타내는 정수값이다.

계층적인 쿼리가 아니라면 다음과 같이 모든 값이 0, 즉 같은 단계를 가질 것이다.

 

select 직원,level

  from 직원

 

 직원  level

-----------

 철수    0
 순희    0
 길동     0
 영희     0
 개똥     0

한편, 계층적 쿼리에서는 level의 값을 통해 트리에서의 위치를 확인할 수 있다. 루트 노드의 level 값이 1이다.

 

select lpad(' ',(level-1)*2,' ')||직원 직원,직급,level
  from 직원
start with 직속상사 is null
connect by prior 직원 = 직속상사

 

   직원      직급   level

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

개똥         사장      1
  영희       부장      2
    순희     과장      3
      철수   대리      4
      길동   대리      4

트리를 한 단계씩 거슬러 내려갈 때마다 값이 1씩 증가함을 알 수 있다.

 

level은 여러 가지 면에서 아주 유용하다. 먼저, 다음과 같이 각 항목을 출력할 때 앞에 붙는 공백의 양을 조절하여 계층적인 형식을 한눈에 알아볼 수 있도록 하는 것이 가능하다.

 

 select lpad(' ',(level-1)*2,' ')||직원 직원

 

또한, level 값이 3까지인 내용만을 출력하라. 등의 명령도 가능하다.

 

select lpad(' ',(level-1)*2,' ')||직원 직원,직급,level
  from 직원
start with 직속상사 is null
connect by prior 직원 = 직속상사 and level <=3

 

   직원      직급   level

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

개똥         사장      1
  영희       부장      2
    순희     과장      3

철수와 길동의 경우는 level 값이 4이기 때문에 출력되지 않았다.

level <=3 이라는 조건을 where 절이 아닌 connect by 절에 넣은 것에 주의해야한다.  어떤 곳에 넣어도 결과는 같지만, where 절에 넣으면 전체 트리를 구성한 후에 다시 선택하는 반면, connect by 절에 넣으면 이 조건을 사용해서 트리를 구성하기 때문에 보다 효과적이라고 할 수 있다



정렬은..ORDER SIBLINGS BY사용가능

반응형

'Database > Oracle' 카테고리의 다른 글

Date 포멧..  (0) 2009.02.11
트리거 예제  (0) 2009.02.11
group by  (0) 2009.02.11
오라클 페이징 (서브쿼리)  (0) 2009.02.11
오라클 원격 접속하기  (0) 2009.02.11
반응형
select user_id from tbl_customer group by user_id;

오라클에서 group by 를 사용하면 select 할 수 있는 필드는 group by 에서 사용한 것 뿐이다. 




select * from tbl_customer group by user_id;

위와 같이 사용하면 에러가 난다.
반응형

'Database > Oracle' 카테고리의 다른 글

트리거 예제  (0) 2009.02.11
계층적 쿼리 connect by  (0) 2009.02.11
오라클 페이징 (서브쿼리)  (0) 2009.02.11
오라클 원격 접속하기  (0) 2009.02.11
nvl 함수  (0) 2009.02.11
반응형
select * from (select rownum as rnum, tbl.* from tbl_user_pb_05 tbl) where rnum between 1 and 2;
반응형

'Database > Oracle' 카테고리의 다른 글

계층적 쿼리 connect by  (0) 2009.02.11
group by  (0) 2009.02.11
오라클 원격 접속하기  (0) 2009.02.11
nvl 함수  (0) 2009.02.11
sqlplus 사용법  (1) 2009.02.11
반응형
$conn = OCILogon("", "");
    $lob = OCINewDescriptor($conn, OCI_D_LOB);
    $stmt=OCIParse($conn,"insert into UPLOAD_TEST (COLUMN1, COLUMN2) values (1, EMPTY_BLOB()) returning COLUMN2 into :BLOBDATA");

    OCIBindByName($stmt, ':BLOBDATA', $lob, -1, OCI_B_BLOB);
    OCIExecute($stmt, OCI_DEFAULT);

    if($lob->savefile($_FILES[lob_upload][tmp_name]))
    {
        OCICommit($conn);
        //echo "Blob successfully uploaded\n";
    }
    else
    {
        //echo "Couldn't upload Blob\n";
        OCIRollback($conn);
    }

    OCIFreeDesc($lob);
    OCIFreeStatement($stmt);
    OCILogoff($conn);


반응형

'프로그래밍 > PHP' 카테고리의 다른 글

short_open_tag 설정.  (0) 2012.08.07
파일 업로드.  (0) 2012.07.11
한글 사용할때 헤더  (0) 2009.02.11
한글 자르기  (0) 2009.02.11
페이지 구하기  (0) 2009.02.11
반응형

오라클 원격 접속하기


1. 오라클 서버에 리스너(Listener) 를 가동한다.

다른 컴퓨터에서 오라클에 접속하려면 리스너가 동작해야 한다. 오라클 9i라면, 설치시에 기본적으로 리스너를 설치하고, 서비스를 구성한다. Enterprise Edition이나 Standard Edition은 기본으로 구성하는 단계가 있는데, 혹시 구성 중에 취소했다면 안 만들어 졌을 수도 있다.


리스너는 네트워크를 이용하여 클라이언트에서 오라클 서버로 연결하기 위한 오라클 네트워크 관리자 이다. 오라클 서버에서 리스너를 시작시켜 주어야 클라이언트들이 접속 할 수 있다.


리스너 관련 명령어

c:\>lsnrctl start  리스너 시작하기

c:\>lsnrctl stop  리스너 정지하기

c:\>lsnrctl reload  리스너 재시작하기

c:\>lsnrctl status  리스너 상태보기

c:\>lsnrctl help  도움말


리스너 구성 파일은 $ORACLE_HOME/network/admin 아래에 있는 listener.ora 파일이며, 오라클 서버에서 클라이언트의 요청을 듣고 클라이언트와의 통신 환경을 설정한다.


listener.ora 파일이 없다면, cmd 창을 열어서

C:\> lsnrctl start

라고 치면 자동으로 만들어진다.

만들어진 리스너는 서비스로 등록되는데, 서비스 관리자에서 Oracle....TNSListener라는 이름이 바로 리스너 서비스다.

이 서비스의 시작 유형을 "자동" 으로 해 놓는 것이 편리하다.


서비스 관리자에서 이 서비스를 start 시키거나, cmd 창에서

C:\> lsnrctl start

하면 외부에서 접속할 수 있다.

2. 클라이언트에 오라클 클라이언트를 설치 한다.


리눅스용 오라클 클라이언트는 http://www.oracle.com/technology/global/kr/software/products/database/oracle10g/index.html 에서 다운 받을 수 있다. 되도록이면 설치되어 있는 오라클 버전하고 같은 것을 다운 받는다.
주) 리눅스용 오라클 클라이언트는 X 윈도 에서 설치가 가능하다.

3. 리눅스 시스템의 경우 .bash_profile 파일을 수정한다.

SQL PLUS 같은 터미널 접속 이라면 먼저 해당 계정의 .bash_profile 파일을 수정해 주어야 한다.
예를 들면 아래와 같다.

export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=/oracle/app/oracle/product/8.1.7
export ORACLE_OWNER=oracle
export ORACLE_SID=ORCL
export TMPDIR=$ORACLE_BASE/tmp
export PATH=$PATH:$ORACLE_HOME/bin:/usr/local/java/bin
export JAVA_HOME=/usr/local/java
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG=American_America.KO16KSC5601
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

이 계정으로 접속을 했을 때 아무 곳에서나 오라클의 접속이 가능 하도록 패스 지정을 한 것이다.
 

접속 방법

사용자 이름   : <사용자계정>

암호          : <계정비밀번호>

호스트 스트링 : tnsnames.ora 에 설정된 호스트의 별칭

주) 웹을 이용한 접속 이라면 PHP 의 경우 오라클 클라이언트 설치 경로를 지정해 주어 PHP 를 다시 컴파일 해주어야 하며 JSP 같은 경우 라면 오라클 경로를 다시 잡아 주어야 한다.

4. 클라이언트에서 tnsnames.ora 파일을 수정한다.


tnsnames.ora 파일은 오라클 서버로 접속할 때 필요한 프로토콜 및 포트번호, 서버주소, 인스턴스 등을 설정해 주는 파일로써, C:\oracle\ora92\network\admin 디렉토리에 위치한다.

 

MY_DB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 126.138.95.21)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = oradb)
    )
  )


오라클 클라이언트는 원격 DB 접속을 위해 위의 파일 내용을 참조하게 된다.

MY_DB 는 원격 데이터베이스의 사용자 정의 명칭이다. 자신의 PC 에서만 유효한 이름이므로 아무렇게나 주어도 된다. HOST = 126.138.95.21 이 부분이 중요한데...실제 원격 DB 가 위치하고 있는 머신의 IP 주소를 입력하면 된다. 포트는 기본 값이 1521 이다.

SERVICE_NAME 이라는 것은 실제 데이터베이스 이름이라고 보면 된다. MY_DB 가 내 PC 에서만 유효한 것이라면 SERVICE_NAME 은 NETWORK 내에서 유일해야 하므로 실제 원격 머신 상에서 오라클 Database 를 Create할 때 결정되어진다. SERVICE_NAME 및 호스트 머신의 IP 주소에 대해서는 원격 Database 를 관리하는 DATABASE 관리자에게 문의하면 된다.


각 오라클의 버전별로 약간의 tnsname.ora 의 내용이 약간씩 다를 수 있으나 위에 설명한 내용은 9i 에서도 그대로 적용된다.


실제 연결을 위해서 tnsname.ora 를 직접 편집하는 것보다 Net Configuration Assistant 라는 프로그램을 이용하길 바란다. 이 프로그램을 이용하여 원격 DB 연결을 설정하면 실제 연결 테스트를 해 볼 수도 있고, 직접 작성으로 인한 tnsname.ora 파일의 버전간 차이 등의 문제를 피할 수 있다. 위의 프로그램은 오라클 클라이언트를 설치하면 프로그램 메뉴에서 찾아볼 수 있다. 해당 프로그램 사용법은 지면 관계상 생략하나 네이버에서 검색하면 쉽게 찾아볼 수가 있을 것이다.


그 후에 다시 로그아웃 하고 로그인을 한후 sqlplus 라고 입력하면 됩니다.

오라클의 설치도 쉽지 않지만 클라이언트의 설치도 간단치 않으므로 차근차근 실수 없이 진행 해야 합니다.

TNSPING으로 접속 TEST하는 방법

Windows 3.1용 SQL*Net을 설치한 경우에 Nettest.exe로써 Server에 접속 여부를 test했었으나, Windows 95용 SQL*Net을 설치하면 tnsping.exe라는 프로그램이 생긴다. 이 프로그램은 일반적인 TCP/IP 프로그램에서 제공하는 Ping Utility와 유사한 방식으로 DB Server에 Login 여부를 확인할 수 있다. SQL*Net 2.2이상에서만 제공이 되며, SQL*Net V1에서는 사용할 수 없다.


C:\oracle\ora92\bin\tnsping.exe

[ 사용 방법 ]

tnsnames.ora file에 tns services name 및 접속에 관련된 내용을 기술한다.  
예: MY_DB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 126.138.95.21)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = oradb)
    )
  )


tnsping utility 사용 예
 

c:\>tnsping oradb 5

TNS Ping Utility for 32-bit WINDOWS: Version 9.2.0.1.0 - Production on 18-NOV-2006 09:52:34  

Copyright (c) Oracle 1997 Corporation. All rights reserved.

사용된 매개변수 파일

C:\oracle\ora92\network\admin\sqlnet.ora

별칭 분석을 위해 TNSNAMES 어댑터 사용
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 126.138.95.21)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = oradb)))
확인 (50 밀리초) 
확인 (30 밀리초) 
확인 (30 밀리초) 
확인 (50 밀리초) 
확인 (30 밀리초)


주) tnsping 은 되는데 오라클 연결이 안될 때는 방화벽을 검사한다. 방화벽은 예외설정을 해도 되지 않고 사용안함 설정을 해야 한다. 또한 tnsnames.ora 파일에 HOST = 126.138.95.21 부분을 ip 주소가 아닌 host 명으로 했을 때 안되는 경우가 있다.

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

반응형

'Database > Oracle' 카테고리의 다른 글

계층적 쿼리 connect by  (0) 2009.02.11
group by  (0) 2009.02.11
오라클 페이징 (서브쿼리)  (0) 2009.02.11
nvl 함수  (0) 2009.02.11
sqlplus 사용법  (1) 2009.02.11
반응형

NVL(표현식1,표현식2)

- 표현식 1이 NULL이면 표현식2, 아니면 표현식 1

 

NVL2(표현식1,표현식2,표현식3)

- 표현식 1이 널이 아니면 표현식 2

- 표현식 1이 널이면 표현식 3


반응형

'Database > Oracle' 카테고리의 다른 글

계층적 쿼리 connect by  (0) 2009.02.11
group by  (0) 2009.02.11
오라클 페이징 (서브쿼리)  (0) 2009.02.11
오라클 원격 접속하기  (0) 2009.02.11
sqlplus 사용법  (1) 2009.02.11

+ Recent posts