hyeonga_code
Database_49_데이터베이스 STORAGE 본문
/*
UNDO 파일이 있습니다.
HR 에서 113번 급여정보를 변경한 뒤 COMMIT하지 않고 LOCK을 걸었습니다.
C:드라이브 > oraclexe > app > oracle > oradata > xe(DB 이름입니다.)
-- 데이터가 저장되어있는 위치를 몰라도 논리적으로 접근할 수 있습니다.
-- CONTROL.DBF : 아래의 다른 파일들을 제어하기 위한 프로그램입니다.
-- SYSAUX.DBF
-- SYSTEM.DBF
-- TEMP.DBF
-- UNDOTBS1.DBF : 두 번째 창에서 접근 시 USERS.DBF 를 거쳐 넘어옵니다.
-- USERS.DBF
-- 윈도우에서는 사이즈 크기만 알 수 있고 안에 얼만큼의 용량이 저장되어 있는지 알 수 없습니다.
*/
---------------------------------------------------------------------------------------------------
/*
ORACLE GET STARTED 실행 시 웹 브라우저로 페이지가 열립니다.
'http://127.0.0.1:8080/apex/f?p=4950:1:794200455130576'
- STORAGE : 데이터베이스 저장공간
- SESSIONS : 사용하고 있는 세션
- PARAMETERS
- APPLICATION EXPRESS
-- STORAGE 선택
-- 관리자 권한이 있는 계정으로 접근해야 합니다.
-- sys/oracle
>>> 위에서 확인한 파일을 확인할 수 있습니다.
-- Tablespace : 데이터 파일은 물리적인 개념이므로 논리적인 표현으로 표기합니다.
-- tablespace와 데이터베이스는 1:1로 이루어지지 않는 경우도 있습니다.
-- 데이터베이스가 꽉 차서 두 개의 데이터베이스를 묶어 tablespace라고 할 수 있습니다.
-- CONTROL.DBF 파일은 제어의 역할을 가지고 있으므로 표시되지 않습니다.
-- 데이터 딕셔너리 : 오라클 설치 시 자동으로 들어와 있는 정보입니다.
-- SYSAUX
-- SYSTEM
-- UNDOTBS1 : 변경되기 전의 데이터가 임시로 저장됩니다.
-- = 롤백 세그먼트
-- TEMP : 정렬 작업 시 부족한 메모리를 위해 사용합니다.
-- 정렬할 수 있는 데이터는 최대 1GB입니다.
-- 실제 데이터 테이블같은 경우 10GB가 넘어갈 수 있습니다.
-- 페이징/스와핑을 담당합니다.
-- USERS : 모든 테이블이 저장되어 있습니다.
*/
-- 테이블을 확인합니다.
SELECT tablespace_name, table_name
FROM user_tables;
/*
TABLESPACE_NAME TABLE_NAME
-----------------------------------------------
USERS REGIONS
USERS LOCATIONS
USERS DEPARTMENTS
USERS JOBS
USERS EMPLOYEES
USERS JOB_HISTORY
USERS JOB_GRADES
USERS EMPL_DEMO
USERS SALES_REPS
( null ) COUNTRIES
*/
UPDATE employees
SET salary=salary+200;
/*
23개 행 이(가) 업데이트되었습니다.
*/
-- UNDO Tablespace에 용량에 영향이 없습니다.
-- 데이터를 다시 돌려놓습니다.
ROLLBACK;
-- DB_test > SCRIPT > CRE_BIGEMP.SQL
-- 혹시 있을 테이블을 삭제합니다.
DROP TABLE bigemp purge;
/*
Table BIGEMP이(가) 삭제되었습니다.
*/
-- 테이블을 생성합니다.
CREATE TABLE bigemp AS SELECT * FROM empl_demo;
/*
Table BIGEMP이(가) 생성되었습니다.
*/
-- 데이터 타입을 수정합니다.
ALTER TABLE bigemp MODIFY (employee_id NUMBER);
/*
Table BIGEMP이(가) 변경되었습니다.
*/
-- 데이터 삽입을 반복하여 대량으로 생성합니다.
DECLARE
n NUMBER
BEGIN
FOR n IN 1..12 -- 12번 반복합니다.
LOOP -- 반복문입니다.
INSERT INTO bigemp SELECT * FROM bigemp;
END LOOP;
COMMIT; -- 커밋까지 자동으로 수행합니다.
END;
/*
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
-- 생성한 테이블의 데이터를 간략하게 조회합니다.
SELECT MIN(employee_id), MAX(employee_id), COUNT(*) FROM bigemp;
/*
MIN(employee_id) MAX(employee_id) COUNT(*)
----------------------------------------------------------
100 206 438272
*/
/*
-- 실행 후 Storage 페이지 새로고침
-- UNDOTBS1에 INSERT 데이터가 저장되지 않습니다.
-- USERS에 저장된 데이터가 늘어난 것을 알 수 있습니다.
*/
UPDATE bigemp
SET employee_id=rownum;
/*
438,272개 행 이(가) 업데이트되었습니다.
*/
SELECT MIN(employee_id), MAX(employee_id), COUNT(*) FROM bigemp;
/*
MIN(employee_id) MAX(employee_id) COUNT(*)
----------------------------------------------------------
1 438272 438272
*/
-- UNDOTBS1에 저장된 데이터가 늘어났습니다.
-- 업데이트를 진행하여 이전의 데이터를 저장하여 ROLLBACK을 하거나 다른 사용자가 조회하는 경우를 위함입니다.
-- 15분정도 저장됩니다.
-- FLASH BACK
-- 커밋 후에 이전 상태로 되돌리기 위한 기술입니다.
-- 커밋 후 UNDO DATA를 바로 지우지 않는 것을 활용한 기술입니다.
COMMIT;
/*
커밋 완료.
*/
-- 용량 비교를 위한 데이터 전체 삭제
DELETE FROM bigemp;
/*
438,272개 행 이(가) 삭제되었습니다.
*/
-- USERS의 데이터 공간은 줄어들지 않습니다.
-- UNDOTBS1은 INSERT 보다 DELETE가 용량을 많이 사용합니다.
-- 데이터만 삭제됩니다.
-- 데이터 삭제 확인
SELECT * FROM bigemp;
/*
선택된 행 없음
*/
-- 삭제된 데이터 복구
ROLLBACK;
/*
-- 데이터가 다시 복구됩니다.
-- 복구했다고 해서 UNDOTBS1의 데이터 용량을 바로 비우지 않습니다.
*/
-- TEMP 테이블스페이스 사용 확인
SELECT *
FROM employees
ORDER BY salary;
-- TEMP 메모리는 변동이 없습니다.
SELECT *
FROM bigemp
ORDER BY salary;
-- 데이터가 조금 많은 테이블을 정렬하는 경우 TEMP 메모리에 변동이 생길 수 있습니다.
'Oracle Database' 카테고리의 다른 글
Database_51_SQL 오라클 데이터 유형, 테이블 생성_숫자, 날짜, 문자, 이진 (0) | 2023.08.07 |
---|---|
Database_50_SQL 테이블 생성과 관리_테이블 유형, 구조, 딕셔너리 뷰, 데이터베이스 객체 (0) | 2023.08.07 |
Database_48_데이터 조작과 트랜잭션_DCL 제어어 (0) | 2023.08.05 |
Database_47_데이터 조작과 트랜잭션_DML 데이터 조작어 DELETE (0) | 2023.08.04 |
Database_46_데이터 조작과 트랜잭션_DML 데이터 조작어 UPDATE (0) | 2023.08.04 |