Oracle 2강

programing/Oracle 2009.04.13 21:31


TCL :  commit, rollback, savepoint(ansi명령어 X, oracle용)
트랜잭션 - 일련의 작업처리를 위한 연관된 DML의 모음 (login부터 logout 까지)
All(commit) or Nothing(rollback)

DML -> 1개 TCL

 

* 컬럼 폭조절  col department_name format a10

*
>create table d1
>as
>select * from departments
>where 0=1;                          <- 테이블의 구조만 복사해옴

>insert into d1
>values (1, '자재부', 100,12);      

>insert into d1
>values (2, '영업부', 200,13);


>rollback;           <--다시 되돌림 들어간 레코드 다 사라짐


만약 2000개의 db를 만들었을 었는데 1800번째 것이 오타가 났을경우
commit or rollback

일부분만 롤백 하고 싶을경우
>insert into d1
>values (1, '자재부', 100,12);

>savepoint a1;

>insert into d1
>values (2, '영업부', 200,13);

>rollback to a1;       <-a1 savepoint 지점으로 돌아감

>commit;       <-영구적으로 DB에 반영 rollback 해도 돌아가지 않음.

 

-------------------------------------------------------------------
* LOCK
1.
A :
>SELECT salary from employees where last_name = 'Jones';       <- 2800
2. 2800의 값을 3000으로 변경
>UPDATE employees
>SET salary = 3000
>WHERE last_name = 'Jones';           <- Jones 의 salary 가 3000으로 변경됨.

3.
B: 가 보기에는 아직 2800의 값을 가짐 (A가 commit을 안했기 때문)
DML순서
1. before 이미지 복사(undo segment안에)
읽기 일관성(read consistency) : SELECT명령이 실행되는 순간까지 commit된 데이터를 읽는다)
2. lock 설정
3. 변경

4.
B:
>update employees
>set salary = 3500                   <- B는 3500으로 변경
>where last_name = 'Jones';          <- BUT 갱신 X  LOCK걸림
LOCK : 트랜잭션간 상호파괴적인 행위를 막기위한 보호관리 메커니즘. 무한대기. AUTO. ROW LEVEL LOCK
다른 row 에 대한 update는 LOCK 안걸림.
ex1) A: kevin salary = 3000, B: dennis salary = 3500 변경시 LOCK X
ex2) A: Kevin salary = 3000, B: Kevin commission = 0.25 변경시 LOCK O  <-- 같은 ROW 이기 때문에

5.
A:
>rollback;                <- B: LOCK걸렸던 B의 update 가 실행됨.
-----------------------------------------------------------------------------------------------------
commit   T => 반영
rollback T => 취소
둘다 T종료 , LOCK 해제

AUTO COMMIT   : DDL사용시(create, alter, drop, rename, truncate, comments), DCL사용시, 정상종료(EXIT)
AUTO ROLLBACK : 비정상종료.
------------------------------------------------------------------------------------------------------
*TABLE : 데이터 저장소
1. USER define
2. DATA dictionary : 테이블의 종류를 보여줌.(employees, departments, jobs ....)
접두사 + 관심keyword + 복수형
-USER_ : 내가 생성한것과 관련된 정보
>desc user_tables
>select table_name from user_tables;       <--HR 계정에 들어있는 TABLE
-ALL_ : 접근 권한이 있는것과 관련된 정보
>desc ALL_tables
>SELECT TABLE_name, OWNER FROM ALL_tables;
-DBA_ : 관리자의 관리 정보
-V$ : 동적, 성능 관련정보(memory사용량, 동시접속자수..)

--------------------------------------------------------------------------------------------------------
>SELECT *
>FROM dict;   

* 사용자 계정 전환
>connect system/0105      <-관리계정일경우 권한이 더많으므로 더많은 정보 출력
>select *
>from dict;

>desc dba_users   <-해당 테이블의 컬럼 보기

>SELECT USERNAME, PASSWORD
>FROM DBA_USERS;            <--- 접근가능한 사용자의 ID, PASSWORD 계정정보 보기(password 암호화되어 출력)

 

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

Oracle 6강  (0) 2009.04.13
Oracle 5강  (0) 2009.04.13
Oracle 4강  (0) 2009.04.13
Oracle 3강  (0) 2009.04.13
Oracle 2강  (0) 2009.04.13
Oracle 1강  (0) 2009.04.13
Posted by 대절님

댓글을 달아 주세요