ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Oracle] DBA_View의 테이블을 생성해보자.
    IT/etc 2022. 3. 24. 20:00

    DBA_View 테이블 생성

    Oracle Database의 dba_view는 dba_로 시작하는 뷰로 Database 운영 시 schema 그리고 운영시 필요한 정보를 담고 있는 뷰(View)이다.

    DBA_View를 조회 해보자. "select * from dba_views;" 이렇게 조회하면 Database 내의 view의 정보를 확인할 수 있다. dba_views 는 SYS계정 소유의 뷰이다. 만약 다른 A라는 계정에게  X,Y,Z 계정의 뷰 정보만 보여주자고 할 경우 dba_views의 select  권한을 부여하면 Database 내의 전체 계정의 뷰를 조회할 수 있어 요청의 범위를 넘어선다. 이럴 경우는 어떻게 해야 할까! 테이블을 생성해서 요청 계정의 뷰 정보만 삽입하여 처리할 수 있다. 여기서 말하는 부분은 DBA_View와 동일한 이름으로 요청할 경우이다. A라는 계정은 마치 DBA_VIEW의 소유자 인거 처럼 보여주자는 말이다.

    다음 순서로 생성하여 보자.

    • A.dba_views 테이블 생성
    • A.dba_views 테이블에 dba_views(X,Y,Z)의 정보만 조회하여 Insert
    • 정기적인 Data 갱신을 위한 배치 등록(Job or crontab)

    이 순서로 생성하면 A 계정은 Database의 dba_views 테이블를 조회하면 마치 sys.dba_views를 조회하는 하는 것처럼 보여진다. 일반적으로는 이렇게 생성할 일이 없을꺼 같은데, 막상 업무를 하다보면 다양한 요청이 있다. 일을 하다보니 어쩔수 없이 위와 같이 작업해 줘야 하는 경우가 있었다.

     

    For example :

    테이블 생성
    CREATE TABLE A.DBA_VIEWS
    (OWNER VARCHAR2(30) NOT NULL,
    VIEW_NAME VARCHAR2(30) NOT NULL,
    TEXT_LENGTH NUMBER,
    TEXT CLOB,
    TYPE_TEXT_LENGTH NUMBER,
    TYPE_TEXT VARCHAR2(4000),
    OID_TEXT_LENGTH NUMBER,
    OID_TEXT VARCHAR2(4000),
    VIEW_TYPE_OWNER VARCHAR2(30),
    VIEW_TYPE VARCHAR2(30),
    SUPERVIEW_NAME VARCHAR2(30),
    EDITIONING_VIEW VARCHAR2(1),
    READ_ONLY VARCHAR2(1)
    );
    INSERT 
    INSERT INTO A.DBA_VIEWS
    SELECT
    OWNER,
    VIEW_NAME,
    TEXT_LENGTH,
    TO_LOB(TEXT),
    TYPE_TEXT_LENGTH,
    TYPE_TEXT,
    OID_TEXT,
    OID_TEXT,
    VIEW_TYPE_OWNER,
    VIEW_TYPE,
    SUPERVIEW_NAME,
    EDITIONING_VIEW,
    READ_ONLY
    FROM DBA_VIEWS
    WHERE OWNER IN ('X','Y','Z');

     

Designed by Tistory.