-
[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');
'IT > etc' 카테고리의 다른 글
[Oracle] 오라클 아키텍처 2 (0) 2022.03.27 [Oracle] 오라클 아키텍처 1 (0) 2022.03.26 [중고차 고질병 6탄] 기아 모하비 (0) 2022.03.23 네이버 증권 "종목" 크롤링 (0) 2022.03.22 [iPhone SE review] 디자인은 Classic 하며 성능은 쑥쑥!!! (0) 2022.03.20