ความแตกต่างทั่วไประหว่างv$
มุมมองและสิ่งที่dba_
เทียบเท่าคืออะไร ใช้ตัวอย่างเช่น, และv$tablespace
dba_tablespaces
ความแตกต่างทั่วไประหว่างv$
มุมมองและสิ่งที่dba_
เทียบเท่าคืออะไร ใช้ตัวอย่างเช่น, และv$tablespace
dba_tablespaces
คำตอบ:
วิธีคิดที่ง่ายที่สุดคือ:
DBA_ / USER_ / ALL_
มุมมองถูกสร้างขึ้นในพจนานุกรมข้อมูล - ไม่สามารถใช้ได้หากฐานข้อมูลไม่ได้ถูกเมาท์และเปิด
V$
มุมมองมีแนวโน้มที่จะทำงานกับอินสแตนซ์และดังนั้นอาจพร้อมใช้งานถ้าฐานข้อมูลไม่ถูกเมาท์หรือไม่ถูกเมาท์และเปิดขึ้นอยู่กับลักษณะของมุมมอง
ใช้ตัวอย่างของคุณ:
V$TABLESPACE
คือมุมมองX$KCCTS
ซึ่งเป็นโครงสร้างหน่วยความจำภายใน DBA_TABLESPACES
คือมุมมองบนตารางพจนานุกรมข้อมูล SYS.TS$
นอกจากความแตกต่างที่ Adam Musch แสดงไว้มีความแตกต่างเล็กน้อยระหว่าง dba_ views และ v $ views ที่ควรพูดถึงเนื่องจากเป็น gotchas ที่อาจเกิดขึ้นหากคุณไม่ทราบถึงความแตกต่างเหล่านี้:
1) ส่วนใหญ่ (แต่ไม่ทั้งหมดค่อนข้าง) v $ views ไม่ได้มีมุมมองทางเทคนิคเลย แต่มีความหมายเหมือนกันกับ v_ $ views นี่คือความแตกต่างที่สำคัญเนื่องจากคุณไม่สามารถให้ / เพิกถอนการอนุญาตจากคำพ้องความหมาย:
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 $ views จะส่งคืนข้อมูลปัจจุบัน(12.1 เอกสารในการใช้ Oracle Flashback Technology) :
คุณไม่สามารถดึงข้อมูลที่ผ่านมาจากมุมมองประสิทธิภาพแบบไดนามิก (V $) แบบสอบถามในมุมมองดังกล่าวส่งคืนข้อมูลปัจจุบัน
คุณสามารถดำเนินการค้นหาข้อมูลที่ผ่านมาในมุมมองพจนานุกรมข้อมูลแบบคงที่เช่น * _TABLES
ดังที่ Adam Musch ชี้ให้เห็น v $ views เรียกใช้โดยตรงกับอินสแตนซ์ในขณะที่ dba_ views ทำงานกับพจนานุกรมข้อมูล เมื่อคุณเข้าใจแล้วมันสมเหตุสมผลแล้วว่าทำไมจึงมีข้อ จำกัด นี้ แต่ถึงกระนั้นฉันก็หวังว่าแบบสอบถามแบบย้อนกลับกับ v $ views จะกลับข้อผิดพลาดแทนที่จะไม่ทำงานอย่างเงียบ ๆ เนื่องจาก gotcha นี้ยังคงไม่มีใครสังเกตเห็นในบางครั้ง ...