답변:
그것을 생각하는 가장 쉬운 방법은 다음과 같습니다.
DBA_ / USER_ / ALL_
뷰는 데이터 딕셔너리를 기반으로합니다. 데이터베이스가 마운트되어 열려 있지 않으면 사용할 수 없습니다.
V$
뷰는 인스턴스에 대해 실행되는 경향이 있으므로 뷰의 특성에 따라 데이터베이스가 마운트되지 않았거나 마운트 및 열려 있지 않은 경우 사용 가능할 수 있습니다.
귀하의 예를 사용하여 :
V$TABLESPACE
X$KCCTS
내부 메모리 구조 인 에 대한보기입니다 . DBA_TABLESPACES
데이터 사전 테이블의 뷰입니다. SYS.TS$
Adam Musch가 나열한 차이점 외에도 dba_보기와 v $보기 사이에는 몇 가지 차이점이 있습니다.
1) 대부분의 v $ 뷰는 기술적으로 전혀 뷰가 아니지만 v_ $ 뷰와 동의어입니다. 동의어에 대한 권한을 부여하거나 취소 할 수 없으므로 이는 중요한 차이점입니다.
sqlplus / as sysdba
grant select on v$tablespace to user1;
SQL Error: ORA-02030: can only select from fixed tables/views
select table_name from dba_synonyms where synonym_name = 'V$TABLESPACE';
TABLE_NAME
-------------
V_$TABLESPACE
grant select on V_$TABLESPACE to user1;
grant succeeded.
2) dba_ 뷰에 대해 플래시백 쿼리를 실행할 수 있습니다. 그러나 v $ 뷰에 대해 플래시백 쿼리를 실행하면 현재 데이터 (Oracle Flashback Technology 사용의 12.1 문서)가 반환됩니다 .
동적 성능 (V $)보기에서 과거 데이터를 검색 할 수 없습니다. 이러한 뷰에 대한 쿼리는 현재 데이터를 반환합니다.
* _TABLES와 같은 정적 데이터 사전보기에서 과거 데이터에 대한 쿼리를 수행 할 수 있습니다.
Adam Musch가 지적했듯이 v $ 뷰는 인스턴스에 대해 직접 실행되는 반면 dba_ 뷰는 데이터 사전에 대해 실행됩니다. 일단 당신이 그것을 이해하면, 왜이 제한이 존재하는지 이해가됩니다. 아직하지만, 나는 정말 조용히 꽤 오랫동안 주목 남아있을 수있는이 잡았다대로 작동하지 않고 오류를 반환 V $ 뷰에 대한 플래시백 쿼리를 바랍니다 ...