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 대절님

댓글을 달아 주세요



티스토리 툴바