hyeonga_code

Database_49_데이터베이스 STORAGE 본문

Oracle Database

Database_49_데이터베이스 STORAGE

hyeonga 2023. 8. 6. 05:59
반응형

           


/*
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 메모리에 변동이 생길 수 있습니다.

반응형