Listener, EM Console 시작,종료 방법 ]     

 

 10g DB, Listener, EM Console 시작,종료 방법

 

  1. listener, DB, EM 시작방법
 
# su - oracle
 
리스너 시작
$ lsnrctl start
The command completed successfully(마지막 줄에서 확인 가능)
 
리스너 상태확인
$ lsnrctl status
 
sysdba 권한으로 DB 접속
$ sqlplus "/ as sysdba" 
 
DB 시작
SQL> startup
SQL> exit
 
EM Console 시작
$ emctl start dbconsole
 
 
2. EM, listener, DB 종료방법
 
# su - oracle
 
EM Console 정지
$ emctl stop dbconsole
 
리스너 상태확인
$ lsnrctl status
 
리스너 정지
$ lsnrctl stop
The command completed successfully(마지막 줄에서 확인 가능)
 
sysdba 권한으로 DB 접속
$ sqlplus "/ as sysdba"
 
DB 정지
SQL> shutdown immediate
SQL> exit
 
3. 테이블스페이스 공간 확인
 
$ sqlplus "/ as sysdba"
 
SQL> Select tablespace_name,sum(bytes)/1024/1024 from DBA_DATA_FILES Group by tablespace_name;
 
4. 설치 상태 확인
 
sqlplus 접속만으로 설치 버전 확인 가능
$ sqlplus "/ as sysdba"
 
SQL>select * from v$version;
SQL>select * from v$option;
설치된 oracle dbms option이 출력됨. true로 확인
 

5. 프로세스 확인 방법
DB 상태 확인
$ ps -ef|grep ora_

 
listener 상태 확인
$ ps -ef | grep tns

 
 
웹브라우저에서 EM Console(DB 관리 화면)에 접속하려면
 
10g R1
http://DBserver-IP:5500/em/
 
10g R2
http://DBserver-IP:1158/em/
 

 

Posted by 농부지기
,

[ Oracle - Pro*C ]   

 

 

 Pro*C 

 

 
 
-. 오라클 데이타베이스 내의 테이블에 존재하는 레코드들을 조회,수정 등의 데이타 처리를 하고, 
   C프로그램으로 전환하기 위해 사용함.
-. C와의 차이점 
   -. 외형상의 차이 : 확장자가 .pc로 끝난다.
   -. 기본적으로 C문법을 따르며, C프로그램코드에 DB에 접속하여 레코드들을 처리하는 과정이 추가되어 
      작성된다.
      즉, C로 작성된 프로그램코드에 오라클의 SQL의 DML or DDL명령문이 'EXEC'구문과 결합된 형태가
       추가된 것임을 알 수 있다.
   -. 변수선언에서 C언어에서는 사용하지 않는, .arr과 .len이라는 변수가 컴파일된 C source코드에 
      생성되어 있는 것을 확인할 수 있다.

-. 컴파일 과정
   -. filename.pc -> filename.c -> filename.o -> filename*(생성된 오브젝트 파일을 링크해서 
      실행파일을  만드는 과정이다.)
 
-. 실제 컴파일
 -. makefile 위치 
 $ORACLE_HOME에 proc/에 보면 proc.mk파일이 있다.
 
 이중에서 
 1) USERID = uinfo/mation
  -. 오라클 DB에 접속할때 사용할 사용자 아이디와 비밀번호 지정
  
 2) DEST = /home/elfsun/simple/bin
 -. 컴파일후 실행파일을 복사할 디렉토리
 
 3) COMM_OBJ = /home/elfsun/simple/lib/lib1.o\
        /home/elfsun/simple/lib/lib2.o\
        /home/elfsun/simple/lib/lib3.o\
        /home/elfsun/simple/lib/lib4.o
 -. 컴파일시 참조로할 오브젝트 파일들.
 \(백슬레시)로 구분함.
 
 4) all : $(PROGRAM)
 -. 프로그램의 이름을 지정할 수 있다. 이것은 프로그램의 소스 이름이 되며, 컴파일후 생성될 
    실행 파일의 이름이 되기도 한다.
 
 5) install :
 -. 컴파일후 생성된 실행 파일을 복사해주는 작업을 수행
 
 6) clean : 
 -. 컴파일 과정에서 생성되는 C파일과 오브젝트 파일들을 삭제할때 수행
 
 이들중 수행할 각 명령들은 '@'바로 뒤에 작성해 줄 수 있다.
 
 [실제 컴파일 수행 - makefile이름이 proc.mk인 경우]
 
 1) 실제 컴파일을 하기 위해
  $ make -f proc.mk
 
 2) 컴파일한 실행 파일을 ~/bin/ 디렉토리에 복사하기 위해 
  $ make -f proc.mk install
 
 3) 컴파일 후 생성되는 오브젝트 파일과 c파일을 삭제하기 위해
  $ make -f proc.mk clean
  
-. SQLCA관련 변수들...
 -. sqlca.sqlerr[0] : fetch를 사용하여 쿼리된 레코드의 건수를 리컨시켜 주는 역할을 하는 
                      변수이다.
 -. sqlca.sqlwarn : 경고에 대한 정보들을 지니고 있는 변수이다.
 -. sqlca.sqlerrm.sqlerrmc : sql 명령수행중 에러가 발생했을때, 발생한 에러에 대한 내용과 오류 
                            코드번호에 관한 정보를 출력시켜 준다.
    ---------------------------------------
 -. sqlca.sqlcode값        내 용
    ---------------------------------------
    0  sql문이 정상적으로 수행
    
    1403  유일하게 양수값을 갖는 에러코드임.
      조건에 맞는 데이타가 하나도 없을때.
    
    -1405 조회된 값중 null값이 있을때
    ---------------------------------------


-. host변수 선언
 
 -. 호스트변수는 데이타베이스에서 데이타 처리 결과를 저장하기 위해 사용되며, 응용 프로그램내에서는 
    변수로서의 역할을 한다. 따라서 호스트 변수를 선언할 때에는 데이타베이스 내에서 사용되는 칼럼의
    데이타 타입과 그 크기를 고려하여 선언되어야 하며, 프리컴파일 과정을 통해 응용프로그램내에서도
    사용가능한 형태이어야 한다.
 ex)
 EXEC SQL BEGIN DECLARE SECTION;
  varchar username[16], userarea[10];
  int usrno, usrage;
 EXEC SQL END DECLARE SECTION;    
 
 [주의] 
 1) 호스트 변수 선언시에 오라클 예약어를 사용하지 말것.
 2) 호스트 변수에서는 null처리를 해주지 않기 때문에 응용 프로그램에서 반드시 null처리를 해주어야 한다. 
    단, 호스트 변수가 숫자형인 경우에는 예외이다.
   
-. DB접속
 방법1>
 EXEC SQL CONNECT elfsun
  INDENTIFIED BY 1234;
  
 방법2>
 EXEC SQL BEGIN DECLARE SECTION;
  varchar userid[8], passwd[8];
 EXEC SQL END DECALRE SECTION;    
 
 strncpy(userid.arr,"elfsun",6);
 strncpy(passwd.arr,"1234",4);
 
 EXEC SQL CONNECT :userid;
  IDENTIFIED BY :passwd;
 
 -. 일반적으로 방법2를 더 선호함.
 -. 방법2를 쓸때에 변수명 앞에는 반드시 :를 붙여서 사용하고 있는 변수가 호스트 변수임을 
    명시해야 한다.
 
-. CURSOR이용 : 쿼리문으로 조회되는 레코드가 한 건 이상일때 사용함.

 형식> 
 1) EXEC SQL PREPARE statement FROM variable;  (쿼리하고자 하는 sql문장 정의)
 2) EXEC SQL DECLARE cursor_name CURSOR FOR statement; ( 사용할 커서 선언 )
 3) EXEC SQL OPEN cursor_name;   ( 선언한 커서 열기 )  
 4) EXEC SQL FETCH cursor_name INTO :host_variable1, :host_variable2, :host_variable3, ....;  
                                 ( 열어둔 커서 실행 )
 5) EXEC SQL CLOSE cursor_name;  ( 열었던 커서 닫음 )
 

 1) EXEC SQL PREPARE statement FROM variable;  (쿼리하고자 하는 sql문장 정의)
  ex)
  char SqlCmd[100];    (변수 SqlCmd를 선언)
  memset(SqlCmd,0x00,sizeof(SqlCmd));  ( memset함수를 이용하여 초기화 작업함)
  sprintf(SqlCmd,"SELECT usrno, usrname, usrarea FROM forumlist");  (쿼리문을 SqlCmd에 대입함)
  EXEC SQL PREPARE st_1 from :SqlCmd; (EXEC..문장을 이용하여 쿼리할 구조를 정의함)
 2) EXEC SQL DECLARE cursor_name CURSOR FOR statement; ( 사용할 커서 선언 )
  형식1>
  EXEC SQL DECLARE cursor_name CURSOR FOR statement;
  형식2>
  EXEC SQL DECLARE cursor_name CURSOR FOR select 문장;
  
  -. cursor_name : 사용할 커서명
  ex)
  EXEC SQL DECLARE CUR_1 CURSOR FOR ST_1; (ST_1은 PREPARE에서 정의한것과 동일해야 함)
  EXEC SQL DECLARE CUR_1 CURSOR FOR select usrno, username, userarea From forumlist;

 3) EXEC SQL OPEN cursor_name;   ( 선언한 커서 열기 ) 
  ex)
  EXEC SQL OPEN CUR_1;
  
 4) EXEC SQL FETCH cursor_name INTO :host_variable1, :host_variable2, :host_variable3, ....;  
                      ( 열어둔 커서 실행 )
  ex)
  EXEC SQL BEGIN DECLARE SECTION;
   varchar usrname[16], usrarea[10];
   int usrno;
  EXEC SQL END DECLARE SECTION;
   ......
   
  EXEC SQL FETCH CUR_1 INTO :usrno, :usrname, :userarea;
  
  -. 여기서 사용하는 조회된 칼럼들과 1대1로 대응되어야 한다.
  또한 사용될 호스트 변수들은 이미 이전에 선언이 되어 있어야만 사용이 가능하다. 
  칼럼의 데이타 타입과 크기가 일치해야함에도 주의.

 5) EXEC SQL CLOSE cursor_name;  ( 열었던 커서 닫음 )
  ex) 
  EXEC SQL CLOSE CUR_1;

-. 오류 처리
 1) whenever sqlerror 구문 
  형식)
  ① EXEC SQL WHENEVER SQLERROR GOTO stop_st;
  
  ② EXEC SQL WHENEVER SQLERROR GOTO STOP;
  
  ③ EXEC SQL WHENEVER SQLERROR GOTO CONTINUE;
   
  -. 위 문장들은 SQL문장의 수행 결과 리턴되는 sqlca.sqlcode의 값이 음수로서, 에러를 발생시키는 경우, 더이상
  프로그램을 진행시키지 않도록 stop_st루틴(①번에 해당)으로 분기하여 프로그램의 에러처리를 하도록 하는 문장임.
  stop_st대신 STOP나 CONTINUE를 쓰기도 한다.
  
  -. 또한 실행시켰던 SQL문장들이 레코드의 값 자체의 변경과 관련이 있는 문장들, 즉 INSERT, DELETE, UPDATE와 같은
  SQL문장들이었다면, 'EXEC SQL ROLLBACK WORK'명령을 이용하여 그 트렌잭션을 취소시키는 과정을 추가해 주어야 한다.
  
 2) whenever not found 구문
  형식)
  EXEC SQL WHENEVER NOT FOUND GOTO stop_st;
  
  EXEC SQL WHENEVER NOT FOUND STOP;
  
  EXEC SQL WHENEVER NOT FOUND CONTINUE;
  
  -. 위 문장들은 SQL문장 실행 결과 sqlca.sqlcode값이 1403으로 조건에 맞는 레코드 건수가 
     하나도 없는 경우이다.
  
-. ProC내에서의 select 문장
 ex1)
 -------------------------------------------------------------
 EXEC SQL BEGIN DECALRE SECTION;
  varchar usrname[16], usrarea[10];
  int usrno;
 EXEC SQL END DECLARE SECTION;
 
 EXEC SQL SELECT usrno, usrname, usrarea
  INTO : usro, :usrname, :usrarea
  FROM forumlist
  WHERE usrno=5;
 
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 
 EXEC SQL COMMIT WORK;
 
 printf("\n 회원의 고유번호 =%d",usrno);
 printf("\n 회원의 이름  =%d",usrname.arr);
 printf("\n 회원의 이름(크기) =%d BYTE", usrname.len);
 printf("\n 회원의 거주지역 =%s", usrarea.arr);
 printf("\n 회원의 거주지역(크기) =%d BYTE", usrarea.len);
 
 stop_st :
 printf("\n 에러메시지 =%s", sqlca.sqlerrm.sqlerrmc);
 -------------------------------------------------------------
 -. into 구문은 쿼리 결과에 만족하는 데이타를 검색해 와서 into구문 뒤의 변수에 각각 할당한다.
 -. 호스트 변수명 앞에 (:)을 붙여 줌으로써 조회할 테이블이 칼럼명과 구분을 지어 준다.
 
 ex2)
 -------------------------------------------------------------
 EXEC SQL BEGIN DECALRE SECTION;
  varchar usrname[16], usrarea[10];
  int usrno;
  char SqlCmdp100];
 EXEC SQL END DECLARE SECTION;
 
 memset(SqlCmd,0x00,sizeof(SqlCmd));
 sprintf(Sqlcmd,"select usrno, usrname, usrarea from forumlist");
 EXEC SQL PREPARE ST_1 FROM :SqlCmd;
 EXEC SQL DECLARE CUR_1 FOR ST_1;
 EXEC SQL OPEN CUR_1;
 EXEC SQL FETCH SUR_1 INTO :usrno, :usrname, :usrarea;
 if (sqlca.sqlcode < && sqlca.sqlcode != -1405)
 {
  printf("\n 에러메시지 = %s", sqlca.sqlerrm.sqlerrmc);
  printf("\n 레코드 조회시 에러 발생!");
  EXEC SQL CLOSE CUR_1;
  EXEC SQL ROLLBACK WORK;
  exit();
 } /* error */
 else if(sqlca.sqlcode == 1403)
 {
  printf("\n 에러메시지 ="%s", sqlca.sqlerrm.sqlerrmc);
  printf('\n 조건에 맞는 데이타가 없슴다!");
  EXEC SQL CLOSE CUR_1;
  EXEC SQL ROLLBACK WORK;
  exit();
 } /* not exist */
 while(sqlca.sqlcode ==0)
 {
  printf("\n 회원의 고유번호 =%d",usrno);
  printf("\n 회원의 이름  =%d",usrname.arr);
  printf("\n 회원의 이름(크기) =%d BYTE",usrname.len);
  printf("\n 회원의 거주지역 =%s", usrarea.arr);
  printf("\n 회원의 거주지역(크기) =%d BYTE", usrarea.len);
  EXEC SQL FETCH CUR_1 INTO :usrno, :usrname, :usrarea;
 } /* while */
 printf("\n 오라클 메시지 = %s",sqlca.sqlerrm.sqlerrmc);
 printf("\n 레코드가 성공적으로 조회되었습니다.");
 EXEC SQL CLOSE CUR_1;
 EXEC SQL COMMIT WORK;
 -------------------------------------------------------------
 
-. PROC속의 UPDATE문장
 -----------------------------------------------------------------------------
 ex1)
 EXEC SQL BEGIN DECLARE SECTION;
  varchar username[16], usrarea[10];
  int usrno;
 EXEC SQL END DECLARE SECTION; 
 
 EXEC SQL SELECT usrno, username, usrarea
  into :usrno, :usrname, :usrarea
  from forumlist
  where usrno=3;
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 
 printf("\n 변경전 회원[%d]번의 거주지역 =[%s]",usrno,usrarea.arr);
 EXEC SQL COMMIT WORK;
 strcpy(userarea.arr,"SEOUL");
 usrarea.len =5;
 
 EXEC SQL UPDATE FORUMLIST
  SET usrarea =:usrarea
  WHERE usrno =3;
 
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 
 EXEC SQL COMMIT WORK;
 printf("\n 오라클 메시지 =%s",sqlca.sqlerrm.sqlerrmc);
 
 EXEC SQL SELECT usrno,usrarea
  INTO :usrno, :usrarea
  FROM forumlist
  WHERE usrno=3;
 
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 
 printf("\n 변경후의 회원 [%d]번의 거주지역 =[%s]", usrno.usrarea.arr);
 EXEC SQL COMMIT WORK;
 exit();
 
 stop_st:
 EXEC SQL ROLLBACK WORK;
 printf("\n 에러발생 =%s",sqlca.sqlerrm.sqlerrmc);
 -----------------------------------------------------------------------------
 
 -----------------------------------------------------------------------------
 ex2) 
 EXEC SQL BEGIN DECLARE SECTION;
  varchar usrname[16], usrarea[10];
  int usrno;
 EXEC SQL END DECLARE SECTION;
 char SqlCmd[100];
 
 EXEC SQL select usrno,username,usrarea
  into :usrno, :usrname, :usrarea
  from forumlist
  where usrno=3;
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 
 printf("\n 변경전의 [%d]번째 회원의 거주지역 =[%s]", usrno, usrarea.arr);
 EXEC SQL COMMIT WORK;
 
 memset(SqlCmd,0x00,sizeof(SqlCmd));
 sprintf(SqlCmd,"UPDATE FORUMLIST set usrarea=%s \ (한 문장이 끝나지 않았기 때문에 \(역슬래시)를
  사용함)
    where usrno=3","seoul");
 EXEC SQL EXCUTE IMMEDIATE :SqlCmd;
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 EXEC SQL COMMIT WORK;
 
 EXEC SQL select usrno, usrarea
  into :usrno, :usrarea
  from forumlist
  where usrno=3;
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 
 printf("\n 변경후의 [%d]번째 회원의 거주지역 =[%s]", usrno,usrarea.arr);
 EXEC SQL COMMIT WORK;
 exit();
 
 stop_st:
 EXEC SQL ROLLBACK WORK;
 printf("\n 에러 메시지 =%s", sqlca.sqlerrm.sqlerrmc);
 -----------------------------------------------------------------------------
 -. 위의 update문을 약간 수정하면
  sprintf(SqlCmd,"update forumlist set userarea=%s where usrno=%d","seoul",3);로 해도 됨.

-. ProC속의 Insert문장
 -----------------------------------------------------------------------------
 ex1)
 EXEC SQL BEGIN DECLARE SECTION;
  varchar usrname[16], usrarea[10], usrkindcode[4];
  int usrno ;
 EXEC SQL END DECLARE SECTION;
 int tot;
 
 tot =0;
 usrno=10;
 strncpy(usrname.arr,"LEE-Y-S",Strlen("LEE-Y-S"));
 strncpy(usrarea.arr,"seoul",strlen("seoul"));
 strncpy(usrkindcode,"1004",strlen("1004"));
 
 EXEC SQL INSERT INTO FORUMLIST(usrno, usrname, usrarea, usrkindcode)
  values(:usrno, :usrname, :usrarea, :usrkindcode);
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 printf("\n insert success!!");
 printf("\n 오라클 메시지 = %s", sqlca.sqlerrm.sqlerrmc);
 
 EXEC SQL SELECT COUNT(*)
  INTO :TOT
  FROM FORUMLIST
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 
 printf("\n forumlist 테이블에 존재하는 총 회원 수 =%d", tot);
 EXEC SQL COMMIT WORK;
 
 EXEC SQL SELECT usrno, usrarea
  INTO :usrno, :usrarea
  FROM FORUMLIST
  WHERE usrno=10;
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 
 printf("\n 추가된 회원 [%d]번의 거주지역 =[%s]", usrno, usrarea.arr);
 EXEC SQL COMMIT WORK;
 
 stop_st;
 EXEC SQL ROLLBACK WORK;
 printf("\n 오라클 에러=%d",sqlca.sqlerrm.sqlerrmc);
 -----------------------------------------------------------------------------
 ex1은 insert문장에 함께 기술해 줄 호스트 변수들을 선언해 주었지만...
 ex2에서는 선언하지 않았다.
 ex2의 첨에 있는 usrarea는 그 다음에 수행할 select명령에 필요한 선언 문장이다.
 -----------------------------------------------------------------------------
 ex2)
 EXEC SQL BEGIN DECLEARE SECTION;
  varchar usrarea[10];
  int usrno;
 EXEC SQL END DECLARE SECTION;
 char SqlCmd[100];
 int tot;
 
 tot=0;
 memset(SqlCmd,0x00,sizeof(SqlCmd));
 sprintf(SqlCmd,"insert into forumlist(usrno, usrname, usrarea, \
   usrkindcode) values(%d, %s, %s, %s)", \
   10,"lee-k-y","seoul","1004");
 EXEC SQL EXECUTE IMMEDIATE :SqlCmd;
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 
 printf("\n Insert Success!");
 
 EXEC SQL SELECT count(*)
  into :tot;
  from forumlist
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 
 printf("\n forumlist 테이블에 존재하는 총 회원 수 = %d",tot);
 EXEC SQL COMMIT WORK;
 
 EXEC SQL SELECT usrno, usrarea
  into :usrno, :usrarea
  from forumlist
  where usrno=10;
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 printf("\ 추가된 회원 [%d]번의 거주지역 =[%s]",usrarea.arr);
 EXEC SQL COMMIT WORK;
 
 stop_st:
 EXEC SQL ROLLBACK WORK;
 printf("\n 오라클 에러 = %d", sqlca.sqlerrm,sqlerrmc);
 -----------------------------------------------------------------------------
-. Proc내에서의 delete문장.
 
 -----------------------------------------------------------------------------
 ex1) 
 EXEC SQL BEGIGN DECLRAE SECTION;
  varchar usrarea[10];
  int usrno;
 EXEC SQL END DECLARE SECTION;
 int tot;
 
 tot=0;
 EXEC SQL DELETE FORUMLIST WHERE USRNO=10;
 
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 EXEC SQL COMMIT WORK;
 
 printf("\n Delete 문장 성공!!");
 
 EXEC SQL SELECT count(*)
  into :tot;
  from forumlist
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 
 printf("\n forumlist 테이블에 존재하는 총 회원 수 =%d",tot);
 EXEC SQL COMMIT WORK;
 
 stop_st:
 EXEC SQL ROLLBACK WORK;
 printf("\n Oracle Error =%d",sqlca.sqlerrm.sqlerrmc);
 -----------------------------------------------------------------------------
 -. 어떠한 호스트 변수도 사용하지 않음.
 
 -----------------------------------------------------------------------------
 ex2) 
 EXEC SQL BEGIN DECLARE SECTION;
  varchar usrarea[10];
  int usrno;
 EXEC SQL END DECLARE SECTION;
 char SqlCmd[100];
 int tot;
 tot=0;
 memset(SqlCmd,0x00,sizeof(SqlCmd));
 sprintf(SqlCmd,"Delete forumlist where usrno=%d",10);
 EXEC SQL EXCUTE IMMEDIATE :SqlCmd;
 
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 EXEC SQL COMMIT WORK;
 
 prinf("\n Delete Success!!");
 
 EXEC SQL SELECT COUNT(*)
  INTO :TOT;
  FROM FORUMLIST
 EXEC SQL WHENEVER SQLERROR GOTO stop_st;
 
 printf("\n forumlist 테이블에 존재하는 총 회원 수=%d",tot);
 EXEC SQL COMMIT WORK;
 
 stop_st;
 EXEC SQL ROLLBACK WORK;
 printf("\n Oracle Error : =%d",sqlca.sqlerrm.sqlerrmc);
 -----------------------------------------------------------------------------
 -. where절에서 회원의 고유번호값을 지정해주었다.는 점이 ex1과 다른점이다.
 -. delete 부분을 다음과 같이 수정해도 된다.
  usrnum=10;
  sqlprintf(SqlCmd,"delete forumlist where usrno=%d",usrnum);
  이처럼 변수를 먼저 선언해준 후 값을 대입해서 삭제 하는 방법도 있다.

-. 트랜잭션의 제어
 
 -. EXEC SQL COMMIT WORK;
     : DML 명령인 INSERT, DELETE ,UPDATE 문장을 수행한 경우에 유용하다.
     : DDL 명령은 자동 COMMIT 되므로 사용안해도 됨.
 
 -. EXEC SQL ROLLBACK WORK;    
     
-----------------------------------------------------------------------------------------------
? memset :

 

Posted by 농부지기
,

[ Oracle - Recovery - Point in Time ]

 

'(DB) Oracle > Object & Utility' 카테고리의 다른 글

 
Oracle 8i Point-in-Time Recovery는 Archive log mode인 경우 아래의 상황에서 적용할 수 있다.
 
1. 실수로 Table을 delete 혹은 drop 했을 때
2. Datafile Resize 실패로 인한 DB 장애 발생시
 
Delete, Drop, Datafile Resize 장애 시점: Wed Nov 19 15:19:39 2004
 
*Datafile Resize 장애의 예 
Wed Nov 19 15:19:39 2004
/* OracleOEM */ ALTER DATABASE DATAFILE 'D:\ORADATA\ORCL\KANG01.DBF' RESIZE  4096M 
Wed Nov 19 15:20:46 2004
Completed: /* OracleOEM */ ALTER DATABASE DATAFILE 'D:\ORADAT
Wed Nov 19 15:23:50 2004
KCF: write/open error block=0xabc36 omline=1
     file=7 D:\ORADATA\ORCL\KANG01.DBF
     error=27069 txt: 'OSD-04026: 부적당한 매개변수가 보내졌습니다 (OS 703542)'
Automatic datafile offline due to write error on
file 7: D:\ORADATA\ORCL\KANG01.DBF
 

다음의 시나리오는 Full backup(DB를 shutdown 상태에서 받은 Datafiles, Redo log files, controlfiles)이 존재하지 않고
Hot backup(datafile)만 존재하는 상황에서 복구하는 방법이다.

 
**********************  현재 DB에서 작업 **********************
0. DB에 접속한다.
C:\> svrmgrl
SVRMGR> connect internal
or
C:\> sqlplus internal
 
1. 현재 DB 모드가 Archive log mode인지 확인한다.
SVRMGR> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            D:\ORADATA\ARCHIVE
Oldest online log sequence     440
Next log sequence to archive   442
Current log sequence           442
 
2. 현재 controlfile을 trace로 생성한다.
SVRMGR> alter database backup controlfile to trace;
 
3. trace가 어느 경로에 생성 되는지 확인한다.
SVRMGR> show parameter user_dump_dest
 
4. 위에서 확인한 경로에서 가장 최근에 생성된 trc 파일을 열고 수정한다.
NORESETLOGS -> RESETLOGS로 변경(Hotbackup 받은 Datafile로 복구할때)

CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS ARCHIVELOG
    MAXLOGFILES 32
    MAXLOGMEMBERS 2
    MAXDATAFILES 254
    MAXINSTANCES 1
    MAXLOGHISTORY 678
LOGFILE
  GROUP 1 'D:\ORADATA\ORCL\REDO01.LOG' SIZE 10M reuse,     * --> reuse 추가
  GROUP 2 'D:\ORADATA\ORCL\REDO02.LOG' SIZE 10M reuse,     * --> reuse 추가
  GROUP 3 'D:\ORADATA\ORCL\REDO03.LOG' SIZE 10M reuse      * --> reuse 추가
DATAFILE
  'D:\ORADATA\ORCL\SYSTEM01.DBF',
  'D:\ORADATA\ORCL\RBS01.DBF',
  'D:\ORADATA\ORCL\KANG01.DBF',
  'D:\ORADATA\ORCL\USERS01.DBF',
  'D:\ORADATA\ORCL\TEMP01.DBF',
  'D:\ORADATA\ORCL\TOOLS01.DBF',
  'D:\ORADATA\ORCL\INDX01.DBF'
;
 
5. 현재 DB shutdown
SVRMGR> shutdown immediate
 
6. 현재 DB Cold Backup
장애가 발생한 현재 DB를 모두 백업
(D드라이브의 여유가 충분 하다면 D:\ORADATA 폴더 이름을 D:\ORADATA_20041119 로 변경함)
 
 
**********************  과거 DB에서 작업 **********************
7. 이전에 받은 Hot backup을 복원한다. (cold backup을 restore할 경우 controlfile 재생성은 skip한다.)
백업장치, 혹은 Disk에서 D:\ORADATA로 copy
 
8. DB에 접속한다.
C:\> svrmgrl
SVRMGR> connect internal
or
C:\> sqlplus internal
 
9. DB를 nomount 시킴
SVRMGR> startup nomount
 
10. Controlfile 재생성
SVRMGR>
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS ARCHIVELOG
    MAXLOGFILES 32
    MAXLOGMEMBERS 2
    MAXDATAFILES 254
    MAXINSTANCES 1
    MAXLOGHISTORY 678
LOGFILE
  GROUP 1 'D:\ORADATA\ORCL\REDO01.LOG' SIZE 10M reuse,
  GROUP 2 'D:\ORADATA\ORCL\REDO02.LOG' SIZE 10M reuse,
  GROUP 3 'D:\ORADATA\ORCL\REDO03.LOG' SIZE 10M reuse
DATAFILE
  'D:\ORADATA\ORCL\SYSTEM01.DBF',
  'D:\ORADATA\ORCL\RBS01.DBF',
  'D:\ORADATA\ORCL\KANG01.DBF',
  'D:\ORADATA\ORCL\USERS01.DBF',
  'D:\ORADATA\ORCL\TEMP01.DBF',
  'D:\ORADATA\ORCL\TOOLS01.DBF',
  'D:\ORADATA\ORCL\INDX01.DBF'
;
 
11. Point-in-Time Recovery 수행
SVRMGR> set autorecovery on
SVRMGR> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL TIME '2004-11-19:15:19:36';   --> 장애발생 이전 시점으로 복구한다.
...
SVRMGR> alter database open resetlogs;   --> recovery에서 until 옵션을 사용할 경우. 즉 Incomplete recovery시 resetlogs 옵션 사용한다.
 
12. 장애가 발생한 Tablespace에 포함된 table 혹은 drop,delete 작업을 수행한 table을 export함.
D:\> exp kang/kang file=kang.dmp log=kang_exp.log tables=emp,dept,bonus,dummy
 
13. export가 완료된 뒤 과거 DB shutdown하고 삭제
SVRMGR> shutdown abort
 
탐색기로 D:\ORADATA 하위 디렉토리 모두 삭제
 
14. 현재 DB 복원
D:\ORADATA_20041117 --> D:\ORADATA 로 폴더이름 변경
 
 
**********************  현재 DB에서 작업 **********************
15. 현재 DB mont
SVRMGR> startup mount
ORACLE instance started.
Total System Global Area                        653465628 bytes
Fixed Size                                          75804 bytes
Variable Size                                   337760256 bytes
Database Buffers                                314572800 bytes
Redo Buffers                                      1056768 bytes
Database mounted.
 
16. 장애가 발생한 Datafile 삭제 (Tablespace에 장애가 발생한 경우만 진행한다.)
SVRMGR> alter database datafile 'D:\ORADATA\ORCL\KANG01.DBF' offline drop;
Statement processed.
SVRMGR> alter database open;
Statement processed.
 
17. 장애가 발생한 Tablespace 삭제 (Tablespace에 장애가 발생한 경우만 진행한다.)
SVRMGR> drop tablespace KANG including contents;
Statement processed.
 
18. 같은 이름의 Tablespace 생성 (Tablespace에 장애가 발생한 경우만 진행한다.)
SVRMGR> create tablespace KANG datafile 'D:\ORADATA\ORCL\KANG01.DBF' size 3000m;
Statement processed.
 
19. 12번에서 생성된 OLD DB의 export파일을 이용하여 import 작업 수행
D:\>imp kang/kang file=kang.dmp fromuser=kang commit=y log=kang_imp.log
 
20. DATA 복원 완료.

Oracle - Listener_EM Console  (0) 2017.01.21
Oracle - Pro*C  (0) 2017.01.21
Oracle - Data를 Insert 문장으로 만들기  (0) 2017.01.21
Oracle - Export Script  (0) 2017.01.21
Oracle - Export  (0) 2017.01.21
Posted by 농부지기
,

[ Oracle - Data를 Insert 문장으로 만들기 ] 

 

 

☞ 정의

 

1. 정의 : DB에 저장 되어 있는 자료를 Toad를 이용해서 Insert 문장으로 만들기

☞ 방법

 

1. Toad에서 Schema Browser를 연다.
2. Insert 문장으로 만들고 싶은 테이블을 double click한다.
3. 그러면 아래와 같이 나온다.
4. Data Tab page에서  오른쪽 마우스를 누르면 [Save As]가 나온다.

   



5. 그러면 아래와 같이 POP_UP창이 뜬다.
   - Export Format : Insert Statements  (Insert 문장을 만들기 때문)
   - Insert Table  : Insert 문장을 만들고 싶은 테이블명
   - File : Insert문장을 만들어서 저장할 파일명

   



6. 완료
   - 해당 폴더에 가면 파일이 생성되어져 있고, 그 곳에 insert 문장들이 수두록 하게 존재 한다.
   - 참고, 위 4번 화면.data Tab page에 보여지는 레코드만 insert 문장으로 만들어진다.
           만약, filter를 했을 경우 filter 에 적용된 레코드만 insert 문장으로 만들어진다.

7. Pop_UP창에서
   [Export Format] 콤보에서  --> [Merge Statements]를 하게 되면 Merge sql문장으로 만들 수 있다.

 

 


 

'(DB) Oracle > Object & Utility' 카테고리의 다른 글

Oracle - Pro*C  (0) 2017.01.21
Oracle - Recovery - Point in Time  (0) 2017.01.21
Oracle - Export Script  (0) 2017.01.21
Oracle - Export  (0) 2017.01.21
Oracle - SQL*PLUS  (0) 2017.01.21
Posted by 농부지기
,

[ Export Script]     

 

☞ Script만 Export하기

 
1. 정의 : Procedure, Function, View 등 Script만 Export하기

2. Toad에서 방법
   메뉴 : Database -> Export -> Generate Schema Script
               [Source and Output] tab
                    [v] Create Individual Object DDL Files
                    Top Level Directory;
                    [                     ] [...]
               [Object Types] tab 
                  [v] Funcitons
                  [v] Procedures
               [Source and Output] tab에 와서
             위쪽에 있는  초록색[>] 버튼을 누른다.

   

 

   



3. 참고
   - Tables :를 체크 하면
             테이블의 Create Script 문장이 만들어 진다.
 




 

 

 

'(DB) Oracle > Object & Utility' 카테고리의 다른 글

Oracle - Recovery - Point in Time  (0) 2017.01.21
Oracle - Data를 Insert 문장으로 만들기  (0) 2017.01.21
Oracle - Export  (0) 2017.01.21
Oracle - SQL*PLUS  (0) 2017.01.21
Oracle - Sequence  (0) 2017.01.21
Posted by 농부지기
,

[Oracle - Export  ]

 


 Win오라클 export 자동 백업

 
 제목: 자동 export 및 정기적인 자동 삭제 배치파일 만들기
 
작성자: 강명호
작성일: 2004년 11월 26일
 
배치파일 장점
exp_daily.bat 배치파일을 수행할 경우 매일 export가 수행되고 
exp_delete.bat 배치파일을 수행할 경우 2, 3일의 백업을 항상 보유하며 주기적으로 삭제하기 때문에 더 이상 Disk가 꽉 차는 현상(Disk Full)을 막을 수 있다.
단점.
DB의 Size가 클 경우 매일 export 받는다면 Local Disk의 공간 부족 현상이 발생할 수 있다. 이런 경우에는 여러 개의 백업을 보유하기 힘들기 때문에 좀 더 주기적으로 삭제하거나 백업받은 파일을 압축하여 관리해야 한다. 백업하고 자동으로 압축하는 방법은 다음에... ^_^;;
 
 
1. 배치파일 만들기
시작 --> 실행 --> notepad  실행하여 각각 배치파일의 내용을 붙여넣기 한 다음 설정된 파일 이름으로 변경한다
 
exp_daily.bat
@echo off
SET ORACLE_SID=ORCL
for %%a in (%date%) do SET day=%%a
md D:\ORA_BACKUP\EXP\1\%day%
C:\oracle\ora92\BIN\EXP system/manager file=D:\ORA_BACKUP\EXP\1\%DAY%\%DAY%-full.dmp full=y  log=D:\ORA_BACKUP\EXP\1\%DAY%\%DAY%-full-exp.log
 
exp_daily.bat 설명
D:\ORA_BACKUP\EXP\1\ 하위 디렉토리에 날짜 폴더가 생성되고 
system 유저로 Full export를 수행하며 날짜 이름의 dmp, log 파일이 생성된다
 
exp_delete.bat
rd /s /q D:\ORA_BACKUP\EXP\2
move D:\ORA_BACKUP\EXP\1 D:\ORA_BACKUP\EXP\2
 
exp_delete.bat 설명
D:\ORA_BACKUP\EXP\2 디렉토리를 지우고 
D:\ORA_BACKUP\EXP\1 디렉토리를 D:\ORA_BACKUP\EXP\2 디렉토리로 폴더 이름을 변경한다.
 
 
2. 작업 예약 설정하기

매일 새벽 1시에 export 받는 작업 예약하기
C:\> at 01:00 /every:Su,M,T,W,Th,F,S D:\ORA_BACKUP\exp_daily.bat
 
매주 일,수 밤 10시에 백업 삭제하는 작업 예약하기
C:\> at 22:00 /every:Su,W D:\ORA_BACKUP\exp_delete.bat
 
AT 명령 변수 설명
 /every: date ,... : 
이 매개 변수를 사용하여 매주 금요일이나 매월 8일처럼 
지정된 요일이나 날짜에 작업을 실행하도록 예약합니다. 
하나 이상의 요일(다음 약자 사용: M,T,W,Th,F,S,Su)이나 
하나 이상의 날짜(숫자 1 - 31 사용)로 date를 지정합니다. 
쉼표를 사용하여 여러 날짜 항목을 구분해야 합니다. 
이 매개 변수를 생략하면 현재 날짜에 작업이 실행되도록 예약됩니다.
 
*** 주의 ***
SID, EXP 파일의 경로, 백업 받을 경로, export주기, 삭제 설정은 사용자의 환경에 맞게 수정하여 사용하면 된다.

 Windows 2000 서버에서 오라클 백업하기

 
제가 사용하는 스크립트 입니다.
설명을 붙이 자면 날짜와 시간을 받아서 화일명을  바꾸는 배치화일을 만들고
At 이라는 스케줄러를 이용하여 백업을 합니다.
 
물론 Exp 를 이용하여 벡업을 하고 있습니다.
 
참고로  Doff 라는 프로그램을 이용하며 날짜을 넘겨 받을수 있도록 합니다.(하단 소스 참고)
 
============================================================================
# at 04:00 /every:M,T,W,Th,F,S,Su E:ORACLE_BKscriptfullbackup.bat
at 03:00 /every:M,T,W,Th,F,S,Su E:ORACLE_BKscriptuserdump.bat
at 04:00 /every:M,W,F,Su E:ORACLE_BKscriptfullbackup.bat
=============================================================================
 
================================ Full backup.bat===============================
@echo off
 
for /f "tokens=1-3 delims=/ " %%a in ('doff mm/dd/yyyy -1') do (
set mm=%%a
set dd=%%b
set yyyy=%%c)
 
e:
cd E:ORACLE_BK

rename fullbackup.dmp fullbackup-%yyyy%%mm%%dd%.dmp
exp system/systempass file='E:ORACLE_BKfullbackup.dmp' full=y
===================================================================
 
 
================================ userdump.bat===============================
@echo off
for /f "tokens=1-3 delims=/ " %%a in ('doff mm/dd/yyyy -1') do (
set mm=%%a
set dd=%%b
set yyyy=%%c)
 
e:
cd E:ORACLE_BK

rename user.dmp user-%yyyy%%mm%%dd%.dmp
exp userid=user/userpass file='E:ORACLE_BKuser.dmp'
===================================================================
 
=============================doff.exe ========================================
* 
** doff - prints a formatted date string offset by a specified time interval
**
** File:    doff.c
** Author:  John Fitzgibbon (fitz@jfitz.com http://www.jfitz.com)
** Version: 1.0
** Date:    11/08/1999
**
** This program and code is FREEWARE.
**
**  Command line format: doff [format_str [offset_str [exclude_format_str]]]
**  doff -h to display help.
**
**  Revision History
**  11/08/1999 1.0 Original Version 
*/
char helpstr[] = 
"doff - Prints a formatted date string offset by a specified time intervaln"
"syntax is: doff [format_str [offset_str [exclude_format_str]]]n"
"       or: doff -h   (displays this help screen)n"
"n"
"format_str, (case sensitive), may include any of the following:n"
"  yyyy - replaced by four digit year in output stringn"
"  yy - replaced by two digit year in output stringn"
"  mm - replaced by month (1 - 12) in output stringn"
"  dd - replaced by day (1 - 31) in output stringn"
"  hh - replaced by hour (0 - 23) in output stringn"
"  mi - replaced by minute (0 - 59) in output stringn"
"  ss - replaced by second (0 - 59) in output string (leap seconds = 59)n"
"Other characters in format_str are returned as-isn"
"n"
"offset_str, (case sensitive), is specified as [+/-]n[smhd]n"
"  "n" is the offset valuen"
"  offset qualifiers are: s = seconds, m = minutes, h = hours, d = daysn"
"n"
"exclude_format_str has the same format as format str.n"
"Patterns in exclude_format_str that would normally be translated are ignored.n"
"For example, including "ss" in exclude_format_str means "ss" will appearn"
"untranslated in the output string.n"
"n"
"Default offset value is zero, default offset qualifier is daysn"
"Bad offset values default to zero, bad offset qualifiers default to daysn"
"Note: -10xd will evaluate to "10 days ago", (because atoi("-10x") = -10)n"
"  but -x10d will evaluate to "now", (because atoi("-x10") = 0)n"
"n"
"When both format_str and offset_str are omitted the output format is:n"
"yyyymmddhhmissn";
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
int main (int argc, char * argv[])
{
  time_t etime;
  struct tm * stime;
  char dstr[15];
  char * cp;

  if ((argc > 1) && !strncmp(argv[1],"-h",2))
  {
    puts(helpstr);
    exit(0);
  }
  time(&etime);
  if (argc > 2)
  {
    if ((cp = strstr(argv[2],"s")) != NULL) // offset seconds
    {
      *cp = '

스크랩을 하면서...
doff를 이용하여 날짜를 파일 이름에 넣을 수 있습니다.
 

'(DB) Oracle > Object & Utility' 카테고리의 다른 글

Oracle - Data를 Insert 문장으로 만들기  (0) 2017.01.21
Oracle - Export Script  (0) 2017.01.21
Oracle - SQL*PLUS  (0) 2017.01.21
Oracle - Sequence  (0) 2017.01.21
Oracle - Gateway 사용 하기  (0) 2017.01.21
Posted by 농부지기
,

[ Oracle - SQL*PLUS]


☞ SQL*PLUS기능

 

1. SQL문을 인식하여 서버로 보내주는 역할 담당
2. SQL의 사용을 편리하게 하기 위해 Oracle 자체로 지원하는 명령어를 제공
3. 축약하여 사용이 가능, 명령어가 긴 경우 라인 구별시 연결 명령어 -(dasu) 사용


☞ SQL*PLUS접속방법
 

1. WEB을 이용한 접속방법
   -http://<host-name>:port/isqlplus - <host-name>은 오라클이 설치된 서버의 이름
2.

 

☞ 버퍼에 있는 명령어 편집하기

 

- A(PPEND) text : line의 끝에 text를 추가함 
- C(HANGE) /old/new : old를 new로 바꿈 
- DEL n : n line를 지움 
- I(NPUT) text : 다음 line에 text를 추가함 
- L(IST) 전체 문장을 보여줌 
- n text : n line전체를 text로 바꿈 
- R(UN) : buffer에 있는 문장을 실행함 (/와 같음) 
- EDIT : buffer에 있는 문장을 파일로 부룸(afdeidt.buf)

 

SQL>  SELECT name , dept-id
2  FROM s_emp ;
SELECT name , dept-id
                    *
ERROR at line 1:
ORA-00904: invalid column name
SQL> c/-/_
1* SELECT name , dept_id
SQL> list
1  SELECT name , dept_id
2* FROM s_emp
SQL> run
1  SELECT name , dept_id
2* FROM s_emp

☞ 파일에 있는 명령어 편집하기

 

1. SAVE a : buffer에 있는 내용을 a.sql 파일로 저장
2. GET a : 파일 a에 있는 내용을 buffer로 부름
3. START a (@a) 파일 a를 실행함

☞ 환경설정 : SET 환경변수 값

 

- COLSEP (text)     : 칼럼이 표시될 때 칼럼간의 구별문자, 기본값은 공백
- FEEDBACK (off|on) : 선택된 행이 몇행인지를 표시함, 기본값은 6행 이상인 경우에 on
- HEADING (off|on)  : 칼럼에 대한 HEADING를 표시함, 기본은 24
- LINESIZE (n)      : 한 라인당 표시되는 문자의 수, 기본값은 80
- PAGES (n)         : 한 페이지당 표시되는 라인 수, 기본값은 24
- PAUSE (off|on|text) : 「ENTER」키를 누를 때마다 화면이 지나감, 기본값은 off
- TIMING (off|on)   : SQL문장이 처리되는데 걸리는 시간을 표시, 기본값은 off
- VERIFY (off|on)   : & 변수로 값을 받는 경우 화면에 확인하기 위해 old, new 를 출력할 것인지 
                    여부, 기본 값은 on
※ SHOW ALL : SET 환경이 어떻게 설정되어 있는지 보는 명령어

☞ㅇ 표시형식

 

- COLUMN : COL(UMN) [칼럼이나 ALIAS] [옵션]
         : 칼럼의 Heading이나 폭, 표시형식을 바꿈
         : 옵션 - CLE(AR), FOR(MAT), HEADING text
- BREAK  : BREAK ON [칼럼명 이나 ALIAS], 해제는 CLEAR BREAK
         : 같은 값의 출력을 하지 않고 한번만 출력 
- TITLE, BTITLE : BTITLE|TTITLE [문자|OFF|OF]

☞기타 명령어

 

- DESC [TABLE 명] : 특정 테이블 구조를 확인 
- HELP [topics] : 도움말을 지원받음

☞치환변수 사용

 

- '&'의 사용 예 : WHERE dept_id = &부서번호 ;
  Enter value for 부서번호: 112 
- '&&'의 사용 : 입력받은 값을 다시 적용 가능 
- 'DEFINE'의 사용 예 : DEFINE title_name = 사원
                       WHERE title = '&title_name'; 
- ACCEPT를 사용 : ACCEPT [변수명] [데이터 타입] [FORMAT PROMPT] [text[ [HIDE]
                : 데이터 타입 - NUMBER, CHAR, DATE 중에서 지정
                : FORMAT - A10, 9, 999 등의 표시 형식 지정
                : PROmPT text - 사용자가 데이터를 입력할 때 보여주는 문장
                : password 등을 지정시 화면에 보이지 않도록 함
                : 사용 예) ACCEPT pswd CHAR PROMPT 'Password : ' HIDE


 

 

'(DB) Oracle > Object & Utility' 카테고리의 다른 글

Oracle - Export Script  (0) 2017.01.21
Oracle - Export  (0) 2017.01.21
Oracle - Sequence  (0) 2017.01.21
Oracle - Gateway 사용 하기  (0) 2017.01.21
Oracle - Export/Imprt  (0) 2017.01.21
Posted by 농부지기
,

[ Oracle - Sequence  ]


 


☞ 형식
 

1. 생성
CREATE SEQUENCE Sequence 이름
  [ 
INCREMENT BY n ]                   : 번호간의 간격 (기본 1)
  [ 
START WITH n ]                     : 첫번째 번호 (기본 1)
  [ { 
MAXVALUE n | NOMAXVALUE } ]      : 최대값 (기본 10^27)
  [ { 
MINVALUE n | NOMINVALUE } ]      : 최소값 (기본 1)
  [ { 
CYCLE | NOCYCLE
 } ]              : 최대값이나 최소값 이후 순환의 여부 (기본 NOCYCLE)
  [ { 
CACHE n | NOCACHE } ]            : 메모리에 유지할 값의 수 (기본 20)

2. 수정
ALTER SEQUENCE Sequence이름
  [ INCREMENT BY n ]
  [ { MAXVALUE n | NOMAXVALUE } ]
  [ { MINVALUE n | NOMINVALUE } ]
  [ { CYCLE | NOCYCLE } ]
  [ { CACHE n | NOCACHE } ]
※ 주의 1 : 수정 가능한 권한의 소유
          : MAX은 기존보다 크게 설정
          : START WITH 옵션은 변경 불가, 수정하려면 삭제 후 생성

3. 삭제
   DROP SEQUENCE Sequence이름 ;

 

 예제
 

SQL> INSERT INTO c_emp (id, name, salary)
     VALUES (c_emp_id.
NEXTVAL, '개나리', 1500 ); ※ NEXTVAL을 이용해서 다음 Seguence값을 입력

SQL> SELECT  c_emp_id.CURRVAL
     FROM  SYS.dual ;                            ※ 현재 Sequence에 대한 값 확인

   

 

'(DB) Oracle > Object & Utility' 카테고리의 다른 글

Oracle - Export  (0) 2017.01.21
Oracle - SQL*PLUS  (0) 2017.01.21
Oracle - Gateway 사용 하기  (0) 2017.01.21
Oracle - Export/Imprt  (0) 2017.01.21
Oracle - DB Scheduler_스케쥴러  (0) 2017.01.21
Posted by 농부지기
,

[ Oracle Gateway 사용 하기 ]

 

출처:http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=42&MAEULNO=17&no=20&page=1SQL Server 와 Oracle 을 통합 운영하는 데 SQL Server에서 Oracle과의 통합 운영은 연결된 서버나 Oracle 게시자 복제, Oracle 구독자 복제 등 다양한 형태를 제공합니다. 그렇지만 Oracle에서 제공하는 SQL Server로의 접근은 Oracle Gateway Service를 통해야만 가능합니다.

이러한 기능을 제공하고 있지만 워낙 비싼 라이센스를 지불해야 하므로 사실상의 효율성을 없지만 많은 분들이 궁금해 해서 다음과 같이 간략하게 Oracle Gateway Service For Microsoft SQL Server를 구성하는 방법에 대해서 설명합니다.

 

1) Transparent Gateway

Oracle은 이기종과의 연결 작업을 위해서 Gateway Service 기능을 제공합니다. Oracle9i 이전 버전에는 TG4MSQL이라는 이름으로 별도로 제공되던 제품이 Oracle9i 버전부터 제품 CD에 포함되어 있습니다. , 설치 및 사용을 위해서는 반드시 별도의 라이센스를 구매해야만 합니다.다음에서 Oracle Transparent Gateway For Microsoft SQL Server(이하 TG4MSQL)를 구성하고 TG4MSQL을 통해서 SQL Server와 통합된 쿼리를 사용하는 방법에 대해서 살펴봅니다.

TG4MSQL 구성은 원본 Oracle 인스턴스 및 TG4MSQL 인스턴스, 그리고 연결 대상 SQL Server로 구성되며 다음 다섯 단계로 진행하여 설치 및 구성을 완료합니다.

 

 Oracle Universal Installer를 통한 Transparent Gateway For Microsoft SQL Server 설치 및 설정

 SQL Server 및 원본 Oracle 인스턴스에서 각각 TG4MSQL용 계정 생성 및 권한 부여

 TG4MSQL 인스턴스 리스너 구성

④ 원본 Oracle 인스턴스에서 TG4MSQL 인스턴스에 대한 tnsname.ora 파일 구성

⑤ 원본 Oracle 인스턴스에서 TG4MSQL 인스턴스에 대한 데이터베이스 링크 구성

⑥ 원본 Oracle 인스턴스에서 데이터베이스 링크를 통한 연결 대상 SQL Server로 쿼리 수행

 

2) TG4MSQL 설치

다음과 같이 Oracle Universal Installer를 실행하고 사용 가능한 제품 구성 요소 선택 페이지에서 Oracle Transparent Gateway For Microsoft SQL Server를 선택하고 [다음] 버튼을 누릅니다.

 

 

 

이어 지는 설치 과정에서 다음과 같이 연결하고자 하는 SQL Server 이름과 데이터베이스 이름을 입력합니다.

 

 

 이 사항은 TG4MSQL을 설치 완료한 뒤 %ORACLE_HOME% tg4msql\admin 폴더의 initTG4MSQL.ora 초기 파라미터 파일에서 수정할 수 있습니다. 주의 사항은 명명된 인스턴스의 경우에는 TG4MSQL이 인식하지 못하므로 SQL Server Configuration Manager에서 서버의 별칭을 생성하여 접속해야 합니다.

 

3) TG4MSQL 인스턴스 리스너를 구성

 

설치가 완료되면 다음과 같은 내용을 추가하여 TG4MSQL 인스턴스 리스너를 구성합니다.

TG4MSQL 인스턴스 리스너에 다음과 같은 내용을 추가합니다.

 

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = tg4msql) <--지정한 SID

(ORACLE_HOME = G:\oracle\ora92)<-- 설치 시 지정한 홈 폴더

  (PROGRAM = tg4msql)

)

)

 

4) 원본 Oracle 인스턴스에서 TG4MSQL 인스턴스에 대한 클라이언트 구성 설정

 

원본 Oracle 인스턴스에서 TG4MSQL 인스턴스에 대한 tnsname.ora 파일을 다음과 같이  구성합니다.

 

 

TG4MSQL =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = home1)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = tg4msql)

    )

    (HS = OK) ß 이 부분 추가 확인

)

 

 


Net Manager를 사용하는 경우에는 서비스 이름으로 [TG4MSQL]을 지정하고 서비스 ID의 고급 버튼을 누른고 이기종 서비스 체크 박스를 선택합니다.

 

 

 

5) 원본 Oracle 인스턴스에서 TG4MSQL 인스턴스에 대한 데이터베이스 링크 구성

 

원본 Oracle 인스턴스에서 TG4MSQL 인스턴스에 대한 다음과 같이 데이터베이스 링크를 생성합니다.

 

CREATE PUBLIC DATABASE LINK [LINK]

CONNECT TO [계정명] IDENTIFIED BY [패스워드]

USING '[GATEWAY 서비스명]'

 

 


이때 해당 계정은 Oracle 원본 인스턴스와 대상 SQL Server에 모두 존재해야 합니다.

 

6) TG4MSQL 구성 확인

다음과 같이 TG4MSQL을 통해서 Oracle 원본 인스턴스에서 SQL Server로 쿼리를 수행하여

TG4MSQL이 올바르게 구성되었음을 확인합니다.

 

SELECT  * FROM table_name@db_link_name ;

 

 

 


다음은 SQL Server 2005 Adventureworks.Person.AddressType 테이블에 테스트 쿼리를 수행한 결과입니다.

 

'(DB) Oracle > Object & Utility' 카테고리의 다른 글

Oracle - SQL*PLUS  (0) 2017.01.21
Oracle - Sequence  (0) 2017.01.21
Oracle - Export/Imprt  (0) 2017.01.21
Oracle - DB Scheduler_스케쥴러  (0) 2017.01.21
Oracle - DB Link  (0) 2017.01.21
Posted by 농부지기
,

[ Oracle - Export/Imprt ]

 

 1. Export

        1. DOS 실행

        2. C:\ora81\bin> exp   user_id/password@sid

        3. 파일 > 파일명   : 만 필요한대로 변경 함

        * 나머지는 모두 yes 로 하면 됨

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

        db export : exp userid=hrms/hrms1234 owner=hrms file=20050628.dmp

 

   2. Import

       db import :imp userid=hrms_py/hrms1234 file=20050628.dmp          fromuser=hrms touser=hrms_py

                        imp userid=hrms_py/hrms1234  file=/backup/20050218.dmp  fromuser=dump안의사용자  touser=import해서사용할사용자

 

   3. 별첨 문서

      1. OTN에서 제공하는 문서 - 

Export.Import.ppt

 

'(DB) Oracle > Object & Utility' 카테고리의 다른 글

Oracle - Sequence  (0) 2017.01.21
Oracle - Gateway 사용 하기  (0) 2017.01.21
Oracle - DB Scheduler_스케쥴러  (0) 2017.01.21
Oracle - DB Link  (0) 2017.01.21
Oracle - DATABASE LINK 사용 방법  (0) 2017.01.21
Posted by 농부지기
,