SQL> SELECT NAME FROM V$CONTROLFILE; - 사용 중인 control file의 목록을 조회한다.
3-2 Spfile 환경에서 contril file 다중화 실습
- Spfile을 사용하는 환경에서 다음 step에 따라 control file을 /app/ora19c/oradata/disk4, /app/ora19c/oradata/disk5에 분산 배치한다. step 1. DB의 상태를 확인한다. step 2. control_files 파라미터를 수정한다. step 3. DB를 SHUTDOWN 한다. step 4. 파라미터에 정의한 것과 같이 control file의 물리적 상태를 수정한다. step 5. DB를 STARTUP 한다.
/app/ora19c/oradata/ 디렉토리 안에 disk1,2,3,4,5 디렉토리를 만들어 준다.
DB의 상태를 확인하고 control_files의 위치를 disk4와 disk5로 옮긴다고 입력해주고 shutdown immediate 한다.
오라클이 startup 하지 않은 상태에서 control01, control02 file을 DB19디렉토리에서 disk4, disk5 디렉토리로 옮겨준다.
startup으로 오라클을 open하여 controlfile이 disk4와 disk5에 들어 있는지 확인한다.
SQL> ALTER DATABASE [ MOUNT | OPEN [ READ ONLY | READ WRITE ]]; - DB가 SHUTDOWN 상태가 아니라 NOMOUNT나 MOUNT 상태인 경우 오라클을 더 상위 단계로 올리기 위해 사용한다. NOMOUNT 상태의 DB를 한 번에 OPEN 상태로 올릴 수는 없다. MOUNT : MOUNT 단계로 DB를 변경한다. OPEN: OPEN 단계로 DB을 변경한다. READ ONLY : DB를 읽기전용으로 OPEN한다. READ WRITE : DB를 읽기쓰기 상태로 OPEN한다. SQL> SELECT STATUS FROM V$INSTANCE; - DB의 상태를 확인한다. - STATUS 칼럼의 값은 DB의 상태를 나타낸다.
1-3)shutdown 옵션의 이해
NORMAL : 현재 사용 중인 모든 접속이 종료되길 기다린다. (기본값)
TRANSACTIONAL : 진행 중인 TRANSACTION은 기다려주지만 TRANSACTION이 진행 중이지 않은 세션은 강제 종료 시킨다.
SQL> STARTUP OPEN READ ONLY; - 종료 상태의 DB를 읽기전용으로 OPEN한다. SQL> ALTER DATABASE OPEN READ ONLY; - MOUNT 상태의 DB를 읽기 전용으로 OPEN한다. SQL> SELECT OPEN_MODE FROM V$DATABASE; - 데이터베이스의 상태를 조회한다. - READ ONLY와 READ WRITE 상태가 있다.
read only로 startup
read only로 startup시 일반 사용자 터미널에서는 테이블을 읽을 순 있지만 테이블을 삭제하지는 못한다.
2-1parameter file 확인
SQL> SELECT name, value FROM V$PARAMETER; - Parameter 이름과 설정된 값을 확인한다. SQL> SHOW PARAMETER <parameter 명> - 설정된 parameter 값을 확인 한다.
parameter의 설정된 값과 이름, 위치를 확인 할 수 있다.
2-2 spfile 환경에서 파라미터 확인과 수정
SQL> ALTER SYSTEM SET <parameter 명> = <값>; - 지정한 파라미터의 값을 수정한다. - spfile 사용 환경에서 설정된 파라미터 값은 항구적으로 수정된다. - 동적인 파라미터만 수정 가능하다.
SQL> SELECT NAME, VALUE FROM V$PARAMETER; - 현재 운영중인 parameter 값을 조회한다. - 'SHOW PARAMETER ~'에 출력 값과 동일하다.
SQL> SELECT NAME, VALUE FROM V$SPPARAMETER; - spfile에 설정된 값을 조회한다.
SQL> select name, value from v$spparameter where name like '%undo%';
SQL> select name,value from v$parameter where name like '%undo%';SQL> show parameter undo;
alter 명령어를 이용하여 undo_retention의 값을 300으로 변경
shutdown 후 startup 해서도 변경된 값이 저장되어 있다.
2-3 Spfile 운영 환경에서 scope 설정에 따른 parameter 값의 변화
SQL> ALTER SYSTEM SET <parameter 명> = <값> SCOPE = [SPFILE | MEMORY | BOTH]; - 지정한 parameter의 값을 수정한다. - SCOPE 절은 spfile 운영 환경인 경우만 사용한다. - SPFILE : spfile만 수정한다. (정적 parameter 수정에서는 필수이다.) - MEMORY : 현재 DB의 parameter 설정 값만 수정한다. spfile은 수정하지 않음으로 DB를 재시작하면 원래 설정 값으로 환원된다. - BOTH : spfile과 instance의 설정된 parameter값을 모두 수정한다.(default값)
3-1 Control file 확인
SQL> SELECT NAME FROM V$CONTROLFILE; - 사용 중인 control file의 목록을 조회한다.
3-2 Spfile 환경에서 contril file 다중화 실습
- Spfile을 사용하는 환경에서 다음 step에 따라 control file을 /app/ora19c/oradata/disk4, /app/ora19c/oradata/disk5에 분산 배치한다. step 1. DB의 상태를 확인한다. step 2. control_files 파라미터를 수정한다. step 3. DB를 SHUTDOWN 한다. step 4. 파라미터에 정의한 것과 같이 control file의 물리적 상태를 수정한다. step 5. DB를 STARTUP 한다.
/app/ora19c/oradata/ 디렉토리 안에 disk1,2,3,4,5 디렉토리를 만들어 준다.
DB의 상태를 확인하고 control_files의 위치를 disk4와 disk5로 옮긴다고 입력해주고 shutdown immediate 한다.
오라클이 startup 하지 않은 상태에서 control01, control02 file을 DB19디렉토리에서 disk4, disk5 디렉토리로 옮겨준다.startup으로 오라클을 open하여 controlfile이 disk4와 disk5에 들어 있는지 확인한다.
4-1) Redo log file 확인
SQL> SELECT A.GROUP#, A.MEMBER, B.BYTES, B.STATUS, B.SEQUENCE# 2 FROM V$LOGFILE A, V$LOG B 3 WHERE A.GROUP# = B.GROUP# 4 ORDER BY 1; - 현재 log 그룹과 member의 운영 상황을 조회한다. - GROUP# : 그룹 번호 - MEMBER : 멤버 파일의 경로 및 파일명 - BYTES : 멤버 파일의 크기 - STATUS : 그룹의 상태 [표 4.1]을참고 한다. SQL> ARCHIVE LOG LIST - Archive log 관련 내용을 조회한다. - Archive log mode가 아닌 경우 조회된 내용은 별 의미가 없다.
SELECT a.group#, a.member, b.bytes, b.status, b.sequence# FROM v$logfile a, v$log b WHERE a.group# = b.group# ORDER BY 1;ARCHIVE LOG LIST
4-2) Log switch와 checkpoint
SQL> ALTER SYSTEM SWITCH LOGFILE; - Log switch를 강제로 발생 시킨다. SQL> ALTER SYSTEM CHECKPOINT; - Check point를 강제로 발생 시킨다.
SELECT a.group#, a.member, b.bytes, b.status, b.sequence# FROM v$logfile a, v$log b WHERE a.group# = b.group# ORDER BY 1; 를 이용하여 현재 redo파일의 상태를 확인한다.
ALTER SYSTEM SWITCH LOGFILE; 명령어로 Log switch를 강제로 발생시켜 상태를 변경시킨다.
ALTER SYSTEM CHECKPOINT; 명어로 Check point를 강제로 발생시킨다.
SQL> !vi switch.sql < switch.sql을 만들고 switch 와 checkpoint 강제로 발생시키게 내용을 입력해준다. ALTER SYSTEM SWITCH LOGFILE; ALTER SYSTEM CHECKPOINT;
@switch 명령어를 사용하면 안에 입력한 내용이 실행되면서 Log switch와 checkpoint를 강제로 발생시킨다.
4)3 Redo log group 추가와 삭제
SQL> ALTER DATABASE DROP LOGFILE GROUP [group number]; - 지정한 redo log group을 삭제한다. SQL> ALTER DATABASE ADD LOGFILE GROUP [group number] 2 (['member file1', 'member file2', ... ]) SIZE [크기]; - redo log group을 추가한다. [group number]는 생략 가능하다.
ALTER DATABASE DROP LOGFILE GROUP 3; 명령어로 GROUP 3이 삭제되었다.
!ls /app/ora19c/oradata/DB19/ 를 해보면 안에 redo03.log 파일이 남아 있는데
!rm /app/ora19c/oradata/DB19/redo03.log 명령어로 삭제해 준다.
ALTER DATABASE ADD LOGFILE GROUP 4 '/app/ora19c/oradata/DB19/redo04.log' SIZE 50M; 용량이 50M인 LOGFILE GROUP 4를 만들어준다.
SELECT a.group#, a.member, b.bytes, b.status, b.sequence# FROM v$logfile a, v$log b WHERE a.group# = b.group# ORDER BY 1;
조회결과 용량 50M의LOGFILE GROUP 4가 생성된 것을 확인 할 수 있다.
ALTER DATABASE ADD LOGFILE GROUP 5 '/app/ora19c/oradata/DB19/redo05.log' SIZE 50M; 명령어로 50M의 LOGFILE GROUP 5가 생성되었다.
4-5) Redo log file 재배치
- redo log 그룹과 member를 시스템 상태에 다음 조건에 따라 재배치한다. . /app/ora19c/oradata/DB19 디렉토리에 위치한 redo log file을 3개의 그룹과 2개의 멤버 파일로 서로 다른 디스크의 마운트 디렉토리인 disk4와 disk5에 다중화 한다. . 단 그룹의 번호는 1,2,3으로, 멤버 파일의 크기는 50M로 제한한다.
현재 redo log file group을 확인한다.
GROUP 1, 2를 삭제 해준다.
GROUP 1,2,3,의 redo log file을 용량50M로 disk4와 disk5에 위치하게 생성한다.
GROUP 4, 5를 삭제한다.SELECT a.group#, a.member, b.bytes, b.status, b.sequence# FROM v$logfile a, v$log b WHERE a.group# = b.group# ORDER BY 1; 명령어로 각각의 redo log file group의 위치와 정보를 확인한다.
DB19 디렉토리에 남은 log파일을 확인하고 지워준다.
실습 5.4 Tablespace 확장 2 - 자동
OPEN 상태에서 tablespace 이동
SQL> CREATE TABLESPACE <tablespace명> 2 DATAFILE '<data file명>' SIZE <크기> 3 AUTOEXTEND ON NEXT <크기> MAX SIZE <크기>; - 자동으로 커지는 data file을 갖는 tablespace를 생성한다. - NEXT : 증가치 - MAX SIZE : 최대 크기 SQL> ALTER TABLESPACE <tablespace명> 2 ADD DATAFILE '<추가될 data file명>' SIZE <크기> 3 AUTOEXTEND ON NEXT <크기> MAX SIZE <크기>; - tablespace에 자동으로 커지는 data file을 추가 한다. SQL> ALTER DATABASE 2 DATAFILE '<변경할 data file명> 3 AUTOEXTEND [ON | OFF] NEXT <크기> MAX SIZE <크기>; - 지정한 data file을 자동증가를 설정한다.
User 생성과 관리
1) User 조회
SQL> SELECT username, default_tablespace, temporary_tablespace, 2 account_status, profile 3 FROM dba_users; - User의 이름과 각 user의 여러 설정 사항을 조회한다. - USERNAME : 사용자명 - DEFAULT_TABLESPACE : 기본으로 사용할 tablespace명 - TEMPORARY_TABLESPACE : 사용할 temporary tablespace명 - ACCOUNT_STATUS : 계정의 상태 - PROFILE : 사용 중인 profile명
SQL> DESC dba_users;
SQL> SELECT username, default_tablespace, temporary_tablespace, account_status, profile FROM dba_users ORDER BY 1;
2) User 생성
SQL> CREATE USER <user 명> 2 IDENTIFIED BY <암호> 3 DEFAULT TABLESPACE <tablespace 명> 4 TEMPORARY TABLESPACE <tablespace 명> 5 QUOTA <크기> ON <tablespace 명>, ...... 6 [ACCOUNT {LOCK / UNLOCK}] 7 [PROFILE {<profile명> / DEFAULT}] - User를 생성한다. - DEFAULT TABLESPACE : User의 기본 tablespace - TEMPORARY TABLESPACE : User의 기본 temporary tablespace - QUOTA : tablespace별 허용된 저장량 - ACCOUNT : 계정 잠금 설정 - PROFILE : 적용될 PROFILE 지정 - CREATE 문장은 ALTER 문장과 형식이 동일하다. SQL> SELECT username, tablespace_name, max_bytes, max_blocks FROM dba_ts_quotas; - 각 사용자의 tablespace별 quota량을 조회한다. - MAX_BYTES : 할당된 quota량 (byte단위) - MAX_BLOCKS : 할당된 quota량 (block개수) - quota가 unlimited로 지정되어 제한하지 않는 경우 -1로 표시된다.
SQL> SELECT tablespace_name, bytes, file_name FROM dba_data_files;
컨트롤파일 관리 파일명에는 경로명이 반드시 들어가야한다. v$ 데이터딕셔너리캐시에 만들어지는데 셧다운하면 없어진다.
SQL> SELECT NAME FROM V$CONTROLFILE; - 사용 중인 control file의 목록을 조회한다.
SQL> SHOW PARAMETER control_files
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_files string /app/ora19c/oradata/DB19/control01.ctl,
/app/ora19c/oradata/DB19/control02.ctl
컨트롤 파일의 이름,타입과 위치정보
SQL> DESC v$controlfile; Name Null? Type ----------------------------------------- -------- ---------------------------- STATUS VARCHAR2(7) NAME VARCHAR2(513) IS_RECOVERY_DEST_FILE VARCHAR2(3) BLOCK_SIZE NUMBER FILE_SIZE_BLKS NUMBER CON_ID NUMBER
SQL> SELECT name FROM v$controlfile;
NAME -------------------------------------------------------------------------------- /app/ora19c/oradata/DB19/control01.ctl /app/ora19c/oradata/DB19/control02.ctl
인스턴스에 접속하려면 파라미터파일이 필요하다. 파라미터파일 하나로 여러곳 공유 가능하다. (다중 인스턴스 구현)
파미터파일중에 실시간으로 바꿀수있는게 있고 실시간으로 바꾸지 못하는게 있다.
SQL> SELECT name, value FROM V$PARAMETER; - Parameter 이름과 설정된 값을 확인한다. SQL> SHOW PARAMETER <parameter 명> - 설정된 parameter 값을 확인 한다.
SQL> SELECT name, value FROM v$parameter WHERE name = 'spfile';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- spfile /app/ora19c/19c/dbs/spfileDB19.ora
: 파라미터 파일의 위치를 알 수 있다.
SQL> SHOW PARAMETER instance_name
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ instance_name string DB19 SQL>
SQL> SELECT name, value FROM v$spparameter WHERE name LIKE '%undo%';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- temp_undo_enabled
undo_management
undo_tablespace UNDOTBS1
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 500 현재 운영중인 파라미터 값 조회,'SHOW PARAMETER ~'에 출력 값과 동일하다.
SQL> SELECT name,value FROM v$parameter WHERE name LIKE '%undo%';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- temp_undo_enabled FALSE
undo_management AUTO
undo_tablespace UNDOTBS1
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 500 - spfile에 설정된 값을 조회한다.
SQL> SHOW PARAMETER undo;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ temp_undo_enabled boolean FALSE undo_management string AUTO undo_retention integer 500 undo_tablespace string UNDOTBS1
SQL> ALTER SYSTEM SET = <값>;</parameter 명> - 지정한 파라미터의 값을 수정한다. - spfile 사용 환경에서 설정된 파라미터 값은 항구적으로 수정된다. - 동적인 파라미터만 수정 가능하다.
SQL> ALTER SYSTEM SET undo_retention=300;
System altered.
SQL> SELECT name, value FROM v$spparameter 2 WHERE name = 'undo_retention';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 300
값을 300으로 변경
SQL> SHOW PARAMETER undo_retention;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 300
Total System Global Area 830469472 bytes Fixed Size 8901984 bytes Variable Size 562036736 bytes Database Buffers 251658240 bytes Redo Buffers 7872512 bytes Database mounted. Database opened. SQL> SHOW PARAMETER undo_retention;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 300 SQL>
shutdown 후 startup 후에도 적용된 모습
Spfile 운영 환경에서 scope 설정에 따른 parameter값의 변화
SQL> ALTER SYSTEM SET <parameter 명> = <값> SCOPE = [SPFILE | MEMORY | BOTH]; - 지정한 parameter의 값을 수정한다. - SCOPE 절은 spfile 운영 환경인 경우만 사용한다. - SPFILE : spfile만 수정한다. (정적 parameter 수정에서는 필수이다.) - MEMORY : 현재 DB의 parameter 설정 값만 수정한다. spfile은 수정하지 않음으로 DB를 재시작하면 원래 설정 값으로 환원된다. - BOTH : spfile과 instance의 설정된 parameter값을 모두 수정한다.(default값)
SQL> SHOW PARAMETER undo_retention;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 300 SQL> SHOW PARAMETER undo_retention;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 300 SQL> ALTER SYSTEM SET undo_retention = 600 SCOPE = memory;
System altered.
SQL> SHOW PARAMETER undo_retention;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 600 SQL> SELECT name, value FROM v$parameter WHERE name = 'undo_retention';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 600
SQL> SELECT name, value FROM v$spparameter WHERE name = 'undo_retention';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 300
SQL> startup ORACLE instance started.
Total System Global Area 830469472 bytes Fixed Size 8901984 bytes Variable Size 562036736 bytes Database Buffers 251658240 bytes Redo Buffers 7872512 bytes Database mounted. Database opened. SQL> SHOW PARAMETER undo
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ temp_undo_enabled boolean FALSE undo_management string AUTO undo_retention integer 300 undo_tablespace string UNDOTBS1 SQL> ALTER SYSTEM SET undo_retention = 500 SCOPE = spfile;
System altered.
SQL> SHOW PARAMETER undo_retention;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 300 SQL> SELECT name,value FROM v$parameter WHERE name = 'undo_retention';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 300
SQL> SELECT name,value FROM v$spparameter WHERE name = 'undo_retention';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 500
STARTUP spfileora19c.ora 파일로 오라클을 실행한다. 한단계씩 올라갈 수 있다. (두단계씩은 못올라감)
alter database 단계명 (DB가 shutdown 상태가 아니라 NOMOUNT나 MOUNT 상태인 경우 오라클을 더 상위 단계로 올리기 위해 사용한다.
NOMOUNT 상태의 DB를 한번에 OPEN 상태로 올릴 수는 없다.
MOUNT 인스턴스 시작, 컨트롤파일을 열어서 물리적인 위치나 상태정보를 알 수 있다. OPEN 모든 파일을 열어서 일반사용자가 사용 할 수 있게 해준다.
READ ONLY DB를 읽기전용으로 OPEN한다.
READ WRITE DB를 읽기쓰기 상태로 OPEN한다.
SQL> SELECT STATUS FROM V$INSTANCE; - DB의 상태를 확인한다. - STATUS 칼럼의 값은 DB의 상태를 나타낸다.
STARTUP NOMOUNT으로 스타트하여 인스턴스가 시작된 상태DATABASE MOUNTDATABASE OPEN
Shutdown
Shutdown 종료 옵션
NORMAL: 현재 사용 중인 모든 접속이 종료되길 기다린다.(서버에 접속한사람이 없을때 셧다운)
TRANSACTIONAL : 진행 중인 transaction은 기다려주지만 transaction이 진행 중이지 않은 세션은 강제 종료시킨다. (서버에 접속한사람 끊고 셧다운 (작업중이면 끝나고 셧다운시킴)) IMMEDIATE : 모든 transaction과 접속을 강제로 종료한다. (서버에 접속한사람 강제로 셧다운)
ABORT : DB의 상태와는 상관없이 메모리에서 instance를 해제한다. (정전)
SYS 계정의 SHUTDOWN IMMEDIATE일반 사용자 계정으로는 shutdown 명령을 할 수 없다.
startup 역순
오픈단계 : 컨트롤파일로 데이터파일, 리두로그파일을 열어야한다. 마운트단계 : 파라미터파일안에 컨트롤파일의 정보를 읽어서 실행하고 데이터파일과 리두로그파일의 위치,상태정보를 확인한다. 노마운트단계 : 파라미터파일의 정보는 위치와 이름이 정해져 있다.
identified by st01 default tablespace users quota unlimited on users;
grant connect, resource to st01; grant create view to st01;
tnsping 계정이름 >> 데이터베이스 연결 확인방법
sql 명령어 트랜잭션(Transaction)과 잠금(Lock)의 이해 트랙잭션 : 커밋이나 롤백 하기 전까지의 작업단위 특성 원자성(Aotomicity) - 트랜잭션은 최소의 작업 단위로서 전체가 처리되거나 취소될 수 있지만 일부만 처리될 수 없다. 일관성(Consistency) - 트랜잭션이 실행된 이후 데이터베이스의 무결성은 반드시 유지돼야 한다. 독립성(Isolation) - 트랜잭션을 여러 개 동시에 실행하더라도 각각의 트랜잭션은 서로 영향을 줄 수 없다. 즉 실행이 종료되지 않은 트랜잭션의 결과는 다른 트랜잭션에서 참조하는 것이 불가능하다. 영속성(Durability) - 종료된 트랜잭션의 결과는 반드시 데이터베이스에 반영돼야 한다.
트랜잭션의 시작과 종료
1.시작 - 이전 트랜잭션이 종료된 이후 DML(INSERT, UPDATE, DELETE)문장이나 DDL(CREATE, ALTER, DROP, TRUNCATE), DCL(GRANT, REVOKE)문장에 실행됐을 때 시작된다. (보안등급에 따라 다르게 만들어져서 DML은 명령어 실행후에 커밋과 롤백 명령어를 실행을 완료되어야 종료되지만 DDL, DCL은 커밋과 롤백없이 명령어 실행이 완료되면 바로 종료된다. DML은 작업을 계획하지 않고 하는 경우가 많고, DDL과 DML은 검증된 작업을 수행하는 경우가 많아서 커밋과 롤백을 묻지않고 실행된다.)
2.종료 - COMMIT이나 ROLLBACK 명령이 실행 될 때 종료된다. - DDL이나 DCL문장의 실행이 완료되면 자동으로 종료된다. - 사용자의 정상 종료 시에 종료된다. - 데드락(Deadlock)이 걸리면 트랜잭션의 일부만 종료된다.
segment : 저장하는 곳을 뜻함 undo segment : 롤백을 수행할때 필요한 데이터를 저장하는 곳 독점 잠금 : 행을 잠금(현재 세션 이외에는 접근을 불허하는 잠금), 공유 잠금 : 테이블 잠금 (사용은 가능하지만 삭제는 불가능)
오라클의 데드락 해소 방식에대해서 기술하고 이렇게 해소하는 이유는 무엇인지 기술하시오.
세션1에서 먼저 한 테이블의 행의 데이터를 수정하면 해당 행을 독점 잠금 하고 해당 테이블을 공유 잠금한다. 세션2에서 해당 테이블의 다른 행의 데이터를 수정하여 독점잠금하지만 해당 테이블의 공유잠금은 되지 않는다. 세션2에서 세션2가 독점잠금한 행의 데이터를 수정하고 세션1에서 세션1이 독점잠금한 행의 데이터를 수정하려고 할때 세션2에서 2번째로 데이터를 수정할때 명령어 실행이 취소가 된다. 데드락을 해소하기 위해서는 세션1에서 commit,roolback 을 해주면 데드락이 해소가 되며 세션1의 명령은 다 수행이 되고 세션2의 명령은 2번째 명령을 제외한 1번째 명령만 적용이된다.
데드락이 생기는 이유는 세션1에서 행의 데이터 수정으로 행의 독점 잠금과 테이블의 공유 잠금이 되었고 세션2에서 같은 테이블의 행하나를 독점 잠금 하지만 세션1이 공유 잠금으로 먼저 실행의 우선권이 주어져서 세션2가 세션1보다 독점잠금한 행의 데이터를 먼저 수정하려고 해도 데드락 해소를 위해 세션2의 명령은 취소가 되기 때문이다.
이렇게 해소하는 이유는 먼저 해당 테이블의 행을 수정함으로써 독점 잠금과 공유 잠금을 설정한 세션에게 공유 잠금을 풀 수 있는 권한이 주어지기 때문이다.
테이블 생성에서 이름 규칙 - 문자로 시작한다. - 30자 이내로 한다. - 영문, 숫자, _, $, #만을 사용한다. . 한글 사용은 가능하지만 되도록 사용하지 않는 것이 좋다. - 테이블의 이름은 동일한 유저(스키마) 안에서 유일해야 한다. - 예약어는 사용이 불가능하다. - 대소문자를 구별하지 않는다.ITCLASS - 79 - B&A . 생성할 때 사용한 문자와는 관계없이 모든 이름은 대문자로 정의된다. . 테이블 이름은 딕셔너리에 저장되는데, 모두 대문자로 저장된다.
데이터 타입 - 오라클은 다양한 데이터 타입을 제공한다. 다음은 그 중 많이 사용되는 데이터 타입들이다. - 문자 타입 . VARCHAR2, CHAR, LONG, CLOB - 숫자 타입 . NUMBER - 날짜 타입 . DATE - 이진 타입 . RAW, LONG RAW, BLOB, BFILE - ROWID 타입 . ROWID : 각행을 구별할수있는 고유한 위치값(index에 저장되어 있음)
제약 조건 이해와 설정 : PK, FK 오라클에서 제공되는 제약 조건 - PRIMARY KEY (주키, 주식별자) : PK는 테이블의 모든 데이터를 유일하게 식별해주는 컬럼이다. - FOREIGN KEY (외부키, 외부식별자) : FK는 테이블 간 관계(Relationship)를 의미한다. - UNIQUE KEY - NOT NULL - CHECK
PK
예를 들어 student 테이블의 학번은 나머지 컬럼의 결정인자 주식별자는 중복되지 않아야한다. score 테이블에서는 sno와 cno를 합친게 주식별자가 된다. sno -> (sname, sex, major, avr, syear ...) eno -> (ename, job, dno,...)
제약 조건 조회 SQL> SELECT c.table_name, c.constraint_name, c.constraint_type, s.column_name 2 FROM user_constraints c, user_cons_columns s 3 WHERE c.constraint_name = s.constraint_name 4 AND c.table_name in (검색_대상_테이블_목록) 5 ORDER BY c.table_name;
SQL> SELECT p.table_name 상위테이블, p.constraint_name 상위제약조건, 2 c.table_name 하위테이블, c.constraint_name 참조제약조건 3 FROM user_constraints p, user_constraints c 4 WHERE c.r_constraint_name=p.constraint_name 5 AND p.table_name in (검색_대상_테이블_목록) 6 ORDER BY p.table_name;
MAX 값들 중에 최대 값을 반환한다. MAX(컬럼) MIN 값들 중에 최소 값을 반환한다. MIN(컬럼) AVG 평균 값을 계산한다. AVG(컬럼) - null 이있으면 정확하게 계산 못함 (행이 없다고 인식함) COUNT 반환된 행의수를 계산한다. COUNT(컬럼 | *) - null 이있으면 정확하게 계산 못함 (행이 없다고 인식함) SUM 합계를 계산한다. SUM(컬럼) STDDEV 표준편차를 계산한다.(Standard deviation) STDDEV(컬럼) VARIANCE 분산을 계산한다. VARIANCE(컬럼)
그룹 함수를 사용하는 경우 고려 사항 - NULL값은 무시된다. - 반드시 단 하나의 값만을 반환한다. - GROUP BY 설정 없이 일반 컬럼과 기술될 수 없다.
예제 1. 사원의 급여 평균을 검색한다. select avg(sal) 평균급여, round(avg(sal)) 평균급여 from emp;