hyeonga_code

Database_50_SQL 테이블 생성과 관리_테이블 유형, 구조, 딕셔너리 뷰, 데이터베이스 객체 본문

Oracle Database

Database_50_SQL 테이블 생성과 관리_테이블 유형, 구조, 딕셔너리 뷰, 데이터베이스 객체

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

-- 테이블 생성과 관리
    -- 테이블의 유형
        -- 사용자 테이블
            -- 사용자가 생성 및 유지 관리하는 테이블의 COLLECTION입니다.
            -- 사용자 정보를 포함합니다.
                -- 사용자 테이블만 있는 것이 아니라 데이터 딕셔너리도 존재합니다.
        -- 데이터 딕셔너리
            -- Oracle Server가 생성, 유지 관리하는 테이블의 collection입니다.
            -- 데이터베이스 자체에 관한 정보를 포함하는 테이블의 모음입니다.
            -- 데이터베이스 생성 시 자동으로 생성되어 오라클 서버에 의해 자동으로 유지 관리됩니다.
            -- 시스템 자체 정보를 포함하고 있으므로 삭제할 수 없습니다.
            -- 관리자 계정인 sys 사용자가 소유하고 있습니다.
            -- 사용자가 데이터베이스에 관한 정보를 얻기 위해 데이터 딕셔너리 뷰를 엑세스할 수 있습니다.
                -- 관리자만 조회가 가능한 뷰
                -- 사용자 레벨에서 조회가 가능한 뷰
            -- USER_TABLE : 관리자의 테이블에는 없습니다.
                -- 뷰 카테고리에 있습니다.
            -- 구조
                -- 기본 테이블_BASE TABLE
                    -- 데이터베이스에 관한 정보가 암호화 되어 있고 복잡한 구조_헥사값으로 사용자가 읽을 수 없습니다.
                -- 데이터 딕셔너리 뷰
                    -- 데이터베이스 생성 과정에서 기본 테이블의 정보를 해독하고 간소화하여 생성된 뷰입니다.
            -- 저장되어 있는 정보
                -- 데이터베이스 계정 정보
                -- 사용자에게 부여된 권한
                -- 데이터베이스에 포함된 객체 관련 정보
                -- 테이블 제약 조건
                -- 감사 정보
                    -- 사용 이력을 저장해두어야 합니다.
                    -- 개인 정보를 많이 다루는 분야는 필수적입니다.
                    -- 법적으로 문제가 될 만한 분야
                    -- 포렌식 관련 
            -- 데이터 딕셔너리 뷰
                -- 사용 목적 또는 정보를 제공하는 단위에 따라 접두어를 다르게 사용합니다.
                -- USER_ : 현재 사용자가 소유하는 객체에 관한 정보
                -- ALL_ : 현재 사용자가 엑세스 할 수 있는 모든 객체에 관한 정보
                -- 데이터베이스 전체에 관한 정보를 제공하기 때문에 DBA 권한이 있는 사용자만 엑세스 할 수 있습니다.
                    -- DBA_ : 데이터베이스의 모든 객체에 관한 정보
                    -- V$ : 데이터베이스 서버 성능, 메모리 및 LOCK 등에 대한 동적 성능 정보
                -- 동적 데이터 : 시스템의 성능에 관련되어 상황에 따라 변하는 데이터입니다.
    
    
-------------------------------------------
----------관리자 데이터베이스-----------
SELECT * FROM lob$;
    -- 데이터가 조회되지만 사용자가 알아보기 힘듯 숫자로 되어 있습니다.


    
SELECT file_name FROM dba_data_files;
    /*
    FILE_NAME
    --------------------------------------------------------------------
    C:\ORACLEXE\APP\ORACLE\ORADATA\XE\USERS.DBF
    C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSAUX.DBF
    C:\ORACLEXE\APP\ORACLE\ORADATA\XE\UNDOTBS1.DBF
    C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF
        -- 데이터 파일 경로를 조회할 수 있습니다.
    */



    
-----------------------------------------  
---------- HR 인사관리 계정 ----------
    
-- 사용자가 소유한 테이블의 개수를 조회합니다.
SELECT COUNT(*) FROM user_tables;
    /*
    COUNT(*)
    -----------
        11
            -- 인사관리 계정에서 접근할 수 있는 테이블의 개수입니다.
    */


    
SELECT COUNT(*) FROM all_tables;
    /*
    COUNT(*)
    -----------
        82
            -- 현재 사용자 + 소유하지 않았으나 접근할 수 있는 테이블을 포함한 개수입니다.
            -- 인사관리 테이블에는 dual 테이블이 존재하지 않습니다.
                -- 71개의 테이블에는 dual 테이블이 포함됩니다.
    */


    
    -- 관리자가 접근할 수 있는 테이블의 개수를 조회합니다.
SELECT COUNT(*) FROM dba_tables;
    /*
        <오류>-------------------------------------------
        ORA-00942: table or view does not exist
        00942. 00000 -  "table or view does not exist"
        *Cause:    
        *Action:
        20행, 22열에서 오류 발생
        ---------------------------------------------------
            -- 관리자 계정이 아니므로 오류가 발생합니다.
    */       


            
           
-------------------------------------------
----------관리자 데이터베이스-----------
    
    -- 관리자가 접근할 수 있는 테이블의 개수를 조회합니다. 
 SELECT COUNT(*) FROM user_tables;
     /*
    COUNT(*)
    -----------
       935
    */ 


    
SELECT COUNT(*) FROM all_tables;        
    /*
    COUNT(*)
    -----------
       1701
    */    


    
SELECT COUNT(*) FROM dba_tables;         
    /*
    COUNT(*)
    -----------
       1701
    */        




-- 데이터베이스 객체
    -- 데이터베이스를 열었을 때 카테고리로 보여지는 모든 것입니다.(스키마)
    -- TABLE_테이블 : 기본 저장 단위이며 행과 열로 구성됩니다.
    -- VIEW_뷰 : 논리적으로 하나 이상의 테이블에 잇는 데이터의 부분 집합을 나타냅니다.
    -- SEQUENCE_시퀀스 : 숫자값을 생성합니다.
    -- INDEX_인덱스 : 쿼리 성능을 향상시킵니다.
    -- SYNONUM_동의어 : 객체에 다른 이름을 제공합니다.
    
-- 테이블, 열 이름 지정 규칙
    -- 문자로 시작해야 합니다.
    -- 1자부터 30자까지 가능합니다.
    -- A-Z, a-z, 0-9, _, $, # 만 포함해야 합니다.
    -- 동일한 사용자가 소유한 다른 객체의 이름과 중복되지 않아야 합니다. *****
        -- 인사관리에 emp 가 있는 경우 인사관리에서 emp는 사용할 수 없으나 관리자에서는 emp를 사용할 수 있습니다.
        -- 작성자는 테이블 이름만 작성하지만 시스템은 앞에 작성자의 데이터를 자동으로 붙여 실행합니다.
            -- 작성자 A : TB >>> ORACLE : 작성자 A.TB
    -- Oracle Server의 예약어가 아니어야 합니다.
    -- 이름 지정 지침
        -- 테이블 및 다른 데이터베이스 객체에는 기술적인 이름을 사용합니다.
        -- 이름은 대소문자를 구분하지 않습니다.
            -- 딕셔너리에는 모든 문자를 대문자로 저장합니다.
-- 다른 사용자의 테이블 참조
    -- 다른 사용자에게 속한 테이블은 해당 사용자의 스키마에 없습니다.
    -- 다른 사용자의 테이블을 사용할 때에는 소유자 이름을 접두어로 붙여야 합니다.
    /*
    SELECT *
    FROM '가져올 테이블의 소유자 계정'.'테이블 이름';
    */
--------------------------------------------------------------------------------------------------------
    -- PLSQL : 테이블을 엑세스할 때 사용하는 프로그램조차 객체로 저장해 둔 상태입니다?
    -- 구체화된 뷰 : ENTERPRISE EDITION에서만 실행할 수 있습니다.
    
    -- 이화식 : 대용량 데이터베이스 솔루션 : SQL 튜닝 최고 기술자
        -- 앤코아?
--------------------------------------------------------------------------------------------------------





반응형