[Oracle] 2020.12.23. day_43 백업, 복구 / sequence

2020. 12. 23. 16:52Web_Back-end/Oracle

 

◎ 백업

  • exp.exe 사용
  • 모든 계정은 백업을 수행할 수 있다
  • DOS 창에서 수행
도움말 보기 : exp help=y

테이블만 백업 : exp userid=계정명/비번 tables=백업할테이블,,,,,,, file=백업파일경로

모든 Object 백업 : exp userid=계정명/비번 full=y file=백업파일경로

백업파일은 확장자를 .dmp 로 설정 ( .ora 를 사용했었는데 요즘 안씀 )

 

◎ 복구

  • imp.exe 사용
  • 모든 계정은 복구를 수행할 수 있다
  • DOS 창에서 수행
  • 같은 이름의 객체가 존재하면 해당 객체는 복구되지 않는다 
도움말 보기 : exp help=y

테이블만 복구 : imp userid=계정명/비번 tables=복구할테이블,,, file=복구할파일경로

모든 Object 복구 : imp userid=계정명/비번 full=y file=복구할파일경로

 



◎ sequence

  sequence
  순차적인 번호를 관리하는 객체
  nextval, currval 번호를 얻는 psuedo 컬럼이다
  user_sequences 에서 시퀀스를 확인할 수 있다 
nextval :  File 영역에 존재하는 시퀀스의 값을 변경하고, 접속자 세션에 시퀀스 객체를 올리고, 다음 번호를 얻는다
currval :  접속자 세션에 올라와있는 시퀀스 객체의 현재 번호를 얻는 일
// 메모리에 올리는 일을 할 수 없다 -> 올라와있는 일만 할 수 있다
작성법
생성)
create sequence 시퀀스명 
increment by 증가하는 수
start with 시작하는수
maxvalue 끝값
cache 메모리에 올려놓을 수 // 20이 default
cycle | nocycle : 반복여부 // nocycle이 default

(java의 for문과 비슷한 개념으로 이해할 수 있다)
작성법
번호얻기)
1. 다음번호 : 시퀀스명.nextval

2. 현재번호 : 시퀀스명.currval
작성법
삭제)
drop sequence 시퀀스명

 


※ sequence를 사용하지 않고 순차적인 번호 관리하기

sequence를 사용하지 않고 순차적인 번호 관리하기

--test 테이블에 아래의 레코드를 추가
/*
번호 : 이전에 들어가있는 번호 다음 번호를 추가해야한다
이름 : 신ㅇ영, 남ㅇ진, 박ㅇ원, 박익을 추가
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
---------------------------sequence-------------------------
create table test(num number, name varchar2(30));
insert into test(num, name) values(1'김ㅇ규');
commit;
 
select * from test;
 
--test 테이블에 아래의 레코드를 추가
/*
번호 : 이전에 들어가있는 번호 다음 번호를 추가해야한다
이름 : 신ㅇ영, 남ㅇ진, 박ㅇ원, 박익을 추가
*/
 
insert into test(num, name) values((select max(num)+1 from test), '신ㅇ원');
insert into test(num, name) values((select max(num)+1 from test), '남ㅇ진');
insert into test(num, name) values((select max(num)+1 from test), '박ㅇ원');
insert into test(num, name) values((select max(num)+1 from test), '박ㅇ익');
cs


※ sequence 연습해보기

1에서부터 시작해서, 999999999까지 1씩 증가하는 시퀀스를 생성
1
2
3
4
5
6
create sequence test_seq
increment by 1
start with 1
maxvalue 999999999;
 
select * from user_sequences;
cs

○ 간접실행 : 쿼리문에 넣어서 사용하는 것

1
2
3
4
5
6
7
--currval은 메모리에 올라와있는 시퀀스의 현재값을 얻는일만 수행
select    test_seq.currval
from        dual;
 
--nextval
select    test_seq.nextval
from        dual;
cs
※ 주의 : 데이터형에 맞지않아, 입력실패하면 해당 시퀀스 번호는 사라진다
1
2
3
4
--실패하면 해당 시퀀스번호는 사라진다
insert into test(num, name) values (test_seq.nextval, '테스트테스트');
 
insert into test(num, name) values (test_seq.nextval, '테스트');
cs