Giới thiệu Data Dictionary trong Oracle Database
Oracle Data Dictionary là một loại siêu dữ liệu(Metadata) của cơ sở dữ liệu và chứa tên và thuộc tính của tất cả các đối tượng trong cơ sở dữ liệu. Việc tạo hoặc sửa đổi bất kỳ đối tượng nào đều sẽ được cập nhật vào Data Dictionary của Oracle để phản ánh những thay đổi đó.
Thông tin này lưu trữ trong các bảng gốc(base table) và được bảo trì bởi máy chủ cơ sở dữ liệu Oracle, bạn có thể truy cập vào các bảng này thông qua việc sử dụng các view được định nghĩa trước đó thay vì đọc trực tiếp các bảng này.
Data Dictionary:
- Được sử dụng bởi máy chủ cơ sở dữ liệu Oracle để tìm thông tin về Users, Objects, constraints và storage
- Được bảo trì bởi máy chủ cơ sở dữ liệu Oracle khi cấu trúc hoặc định nghĩa về một đối tượng nào đó được sửa đổi
- Luôn có sẵn để sử dụng bởi bất kỳ người dùng nào cũng có thể truy vấn thông tin về cơ sở dữ liệu
- Thuộc sở hữu của User SYS
- Không bao giờ được sửa đổi trực tiếp bằng SQL
Lưu ý: View data dictionary “DICTIONARY” (hoặc synonym DICT) chứa các tên và mô tả của các tables và view data dictionay. Sử dụng view DICT_COLUMNS để xem các cột của view và định nghĩa của chúng. Để xem định nghĩa đầy đủ của mỗi view, hãy xem tham khảo Cơ sở dữ liệu Oracle. Có hơn 1000 view tham chiếu đến hàng trăm bảng gốc.
Data Dictionary Views
Các tiền tố của view cho biết dữ liệu (và số lượng dữ liệu đó) mà người dùng được xem là gì. Một view global truy xuất về tất cả mọi thứ chỉ được truy cập bởi người dùng có quyền DBA, sử dụng tiền tố DBA_.
Cấp độ quyền tiếp theo là cấp độ tiền tố ALL_, đại diện cho tất cả các đối tượng mà người dùng truy vấn được cấp quyền xem, cho dù người dùng sở hữu chúng hay không. Ví dụ, nếu USER_A đã được cấp quyền truy cập vào một bảng được sở hữu bởi USER_B, thì USER_A sẽ thấy bảng đó được liệt kê trong bất kỳ ALL_ view nào có liên quan đến tên bảng đó của USER_B.
Tiền tố USER_ đại diện cho phạm vi nhìn thấp nhất. Loại view này chỉ hiển thị các đối tượng mà người dùng truy vấn sở hữu (nghĩa là các đối tượng đó có mặt trong schema của người dùng).
Nói chung, mỗi bộ view là một tập hợp con của bộ view có quyền cao hơn, theo cột và dòng. Không phải tất cả các view trong một bộ view nhất định đều có một view tương ứng trong các bộ view khác. Điều này phụ thuộc vào tính chất của thông tin trong view. Ví dụ, có một view DBA_LOCK, nhưng không có view ALL_LOCK.
Điều này là vì chỉ có DBA mới quan tâm đến dữ liệu về khóa. Hãy chọn bộ view phù hợp để đáp ứng nhu cầu của bạn. Nếu bạn có quyền truy cập vào các view DBA, bạn vẫn có thể truy vấn phiên bản USER của view vì kết quả hiển thị thông tin về các đối tượng mà bạn sở hữu.
Các view DBA_ chỉ có thể được truy vấn bởi người dùng có quyền SYSDBA, SELECT ANY DICTIONARY hoặc SELECT_CATALOG_ROLE.
Không phải tất cả các view từ điển bắt đầu bằng tiền tố DBA_, ALL_ và USER_. Các view hoặc đồng nghĩa với view sau đây là ngoại lệ của điều này:
•AUDIT_ACTIONS
• CAT
• CHANGE_PROPAGATIONS
• CHANGE_PROPAGATION_SETS
• CHANGE_SETS
• CHANGE_SOURCES
• CHANGE_TABLES
• CLIENT_RESULT_CACHE_STATS$
• CLU
• COLS
• COLUMN_PRIVILEGES
• DATABASE_COMPATIBLE_LEVEL
• DBMS_ALERT_INFO
• DBMS_LOCK_ALLOCATED
• DICT
• DICTIONARY
• DICT_COLUMNS
• DUAL
• GLOBAL_NAME
• IND
• INDEX_HISTOGRAM
• INDEX_STATS
• LOGSTDBY_UNSUPPORTED_TABLES
• NLS_DATABASE_PARAMETERS
• NLS_INSTANCE_PARAMETERS
• NLS_SESSION_PARAMETERS
• OBJ
• RECYCLEBIN
• RESOURCE_COST
• ROLE_ROLE_PRIVS
• ROLE_SYS_PRIVS
• ROLE_TAB_PRIVS
• SEQ
• SESSION_PRIVS
• SESSION_ROLES
• SM$VERSION
• SYN
• TABLE_PRIVILEGES
• TABS
BÀI VIẾT LIÊN QUAN
Ví dụ hữu ích về Data Dictionary trong Oracle Database
Các truy vấn ví dụ trong hình trên trả lời các câu hỏi sau đây:
- Tên của các bảng (cùng với tên của tablespace mà chúng nằm trong) đã được tạo ra trong schema của bạn là gì?
- Thông tin quan trọng về các chuỗi số trong cơ sở dữ liệu mà bạn có quyền truy cập là gì?
- Những người dùng trong cơ sở dữ liệu này hiện đang có thể đăng nhập là ai?
- Những cột của DBA_INDEXES view là gì? Điều này cho bạn thấy thông tin bạn có thể xem về tất cả các chỉ mục trong cơ sở dữ liệu. Dưới đây là một phần kết quả của lệnh này:
SQL> DESCRIBE dba_indexes
Name Null? Type
-------------------- -------- -------------
OWNER NOT NULL VARCHAR2(30)
INDEX_NAME NOT NULL VARCHAR2(30)
INDEX_TYPE VARCHAR2(27)
TABLE_OWNER NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)