Sự khác biệt chung giữa một v$
khung nhìn và dba_
tương đương của nó là gì? Lấy ví dụ, v$tablespace
và dba_tablespaces
.
Sự khác biệt chung giữa một v$
khung nhìn và dba_
tương đương của nó là gì? Lấy ví dụ, v$tablespace
và dba_tablespaces
.
Câu trả lời:
Cách dễ nhất để nghĩ về nó là:
DBA_ / USER_ / ALL_
Chế độ xem được xây dựng trên từ điển dữ liệu - chúng không khả dụng nếu cơ sở dữ liệu không được gắn kết và mở.
V$
Các khung nhìn có xu hướng chạy ngược lại, và do đó có thể có sẵn nếu cơ sở dữ liệu không được gắn kết, hoặc không được gắn kết và mở, tùy thuộc vào bản chất của chế độ xem.
Sử dụng ví dụ của bạn:
V$TABLESPACE
là một khung nhìn trên X$KCCTS
, là một cấu trúc bộ nhớ trong. DBA_TABLESPACES
là một khung nhìn trên bảng từ điển dữ liệu SYS.TS$
Bên cạnh những khác biệt mà Adam Musch đã liệt kê, có một vài khác biệt nữa giữa các chế độ xem dba_ và v $ đáng được đề cập vì chúng là các vấn đề tiềm năng nếu bạn không biết về những khác biệt này:
1) Hầu hết (nhưng không hoàn toàn là tất cả) v $ lượt xem hoàn toàn không phải là lượt xem về mặt kỹ thuật, nhưng là từ đồng nghĩa với lượt xem v_ $. Đây là một điểm khác biệt quan trọng vì bạn không thể cấp / thu hồi quyền đối với các từ đồng nghĩa:
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) Bạn có thể chạy các truy vấn hồi tưởng theo lượt xem dba_. Tuy nhiên, việc chạy các truy vấn flashback đối với lượt xem v $ trả về dữ liệu hiện tại (12.1 tài liệu về Sử dụng Công nghệ Flashback của Oracle) :
Bạn không thể truy xuất dữ liệu trong quá khứ từ chế độ xem hiệu suất động (V $). Một truy vấn trên một khung nhìn như vậy trả về dữ liệu hiện tại.
Bạn có thể thực hiện các truy vấn về dữ liệu trong quá khứ trong chế độ xem từ điển dữ liệu tĩnh, chẳng hạn như * _TABLES.
Như Adam Musch đã chỉ ra, các lượt xem v $ chạy trực tiếp với thể hiện trong khi các lượt xem dba_ chạy theo từ điển dữ liệu. Một khi bạn hiểu điều đó, nó có ý nghĩa tại sao giới hạn này được đưa ra. Tuy nhiên, tôi thực sự muốn truy vấn flashback đối với lượt xem v $ sẽ trả về lỗi thay vì âm thầm không hoạt động vì gotcha này có thể vẫn không được chú ý trong một thời gian ...