/ALL_TABLES view trong oracle

ALL_TABLES view trong oracle

ALL_TABLES là một trong các “Static data dictionary views” được hỗ trợ sẵn bởi hệ quản trị cơ sở dữ liệu Oracle, dùng để cung cấp thông tin về các bảng đối tượng và bảng quan hệ mà người dùng hiện tại có quyền truy cập.

1. Các view ALL_TABLES

ALL_ALL_TABLES: Cung cấp thông tin về tất cả các bảng đối tượng và bảng quan hệ mà người dùng hiện tại có quyền truy cập. Thông tin bao gồm tên bảng, chủ sở hữu, tablespace, cluster (nếu có), và nhiều thông số khác.

DBA_ALL_TABLES: Tương tự như ALL_ALL_TABLES, nhưng hiển thị thông tin về tất cả các bảng trong toàn bộ cơ sở dữ liệu. Chỉ có người quản trị hệ thống hoặc người dùng có đặc quyền đặc biệt mới có thể truy cập view này.

USER_ALL_TABLES: Cung cấp thông tin về các bảng đối tượng và bảng quan hệ mà người dùng hiện tại sở hữu. Điều này không hiển thị cột “OWNER” vì nó chỉ ánh xạ đến bảng mà người dùng sở hữu.

Những views này giúp người quản trị cơ sở dữ liệu và người phát triển ứng dụng có cái nhìn tổng quan về cấu trúc và thông tin của các bảng trong cơ sở dữ liệu Oracle. Đồng thời, chúng cung cấp quyền truy cập khác nhau dựa trên vai trò của người dùng.

ALL_TABLES view trong oracle

2. Cấu trúc ALL_TABLES views

STTTên CộtKiểu Dữ LiệuNullableMiêu Tả
1OWNERVARCHAR2(128) Chủ sở hữu của bảng
2TABLE_NAMEVARCHAR2(128) Tên của bảng
3TABLESPACE_NAMEVARCHAR2(30) Tên của tablespace chứa bảng; NULL đối với các bảng được phân vùng, tạm thời và có tổ chức chỉ mục
4CLUSTER_NAMEVARCHAR2(128) Tên của cluster, nếu có, mà bảng thuộc về
5IOT_NAMEVARCHAR2(128) Tên của bảng tổ chức chỉ mục, nếu có, mà dòng tràn hoặc mục nhập ánh xạ thuộc về. Nếu cột IOT_TYPE không NULL, thì cột này chứa tên bảng cơ sở.
6STATUSVARCHAR2(8) Nếu thao tác DROP TABLE trước đó thất bại, chỉ định liệu bảng có thể sử dụng (UNUSABLE) hoặc hợp lệ (VALID)
7PCT_FREENUMBER Tỷ lệ phần trăm tối thiểu của không gian trống trong một block; NULL cho các bảng được phân vùng
8PCT_USEDNUMBER Tỷ lệ phần trăm tối thiểu của không gian đã sử dụng trong một block; NULL cho các bảng được phân vùng
9INI_TRANSNUMBER Số giao dịch ban đầu; NULL cho các bảng được phân vùng
10MAX_TRANSNUMBER Số giao dịch tối đa; NULL cho các bảng được phân vùng
11INITIAL_EXTENTNUMBER Kích thước của phạm vi khởi tạo (tính bằng byte); NULL cho các bảng được phân vùng
12NEXT_EXTENTNUMBER Kích thước của các phạm vi phụ (tính bằng byte); NULL cho các bảng được phân vùng
13MIN_EXTENTSNUMBER Số phạm vi tối thiểu được phép trong đoạn; NULL cho các bảng được phân vùng
14MAX_EXTENTSNUMBER Số phạm vi tối đa được phép trong đoạn; NULL cho các bảng được phân vùng
15PCT_INCREASENUMBER Tăng phần trăm kích thước phạm vi; NULL cho các bảng được phân vùng
16FREELISTSNUMBER Số danh sách tự do quy định cho đoạn; NULL cho các bảng được phân vùng
17FREELIST_GROUPSNUMBER Số nhóm danh sách tự do được phân cho đoạn
18LOGGINGVARCHAR2(3) Chỉ định liệu các thay đổi trên bảng có được ghi lại hay không: (YES, NO)
19BACKED_UPVARCHAR2(1) Chỉ định liệu bảng đã được sao lưu từ sau lần sửa đổi cuối cùng hay không (Y) hoặc không (N)
20NUM_ROWSNUMBER Số dòng trong bảng
21BLOCKSNUMBER Số block đã sử dụng trong bảng
22EMPTY_BLOCKSNUMBER Số block trống (chưa sử dụng) trong bảng
23AVG_SPACENUMBER Trung bình không gian trống có sẵn trong bảng
24CHAIN_CNTNUMBER Số dòng trong bảng được liên kết từ một block dữ liệu sang một block khác hoặc đã di chuyển sang một block mới, đòi hỏi một liên kết để bảo tồn rowid cũ. Cột này chỉ được cập nhật sau khi bạn phân tích bảng.
25AVG_ROW_LENNUMBER Độ dài trung bình của dòng, bao gồm cả độ dài phụ trội của dòng
26AVG_SPACE_FREELIST_BLOCKSNUMBER Trung bình không gian tự do của tất cả các block trên danh sách tự do
27NUM_FREELIST_BLOCKSNUMBER Số block trên danh sách tự do
28DEGREEVARCHAR2(10) Số luồng mỗi trường hợp để quét bảng, hoặc DEFAULT
29INSTANCESVARCHAR2(10) Số phiên bản trên các phiên bản mà bảng sẽ được quét, hoặc DEFAULT
30CACHEVARCHAR2(5) Chỉ định liệu bảng có nên được lưu trong bộ đệm (Y) hay không (N)
31TABLE_LOCKVARCHAR2(8) Chỉ định liệu khóa bảng có được kích hoạt (ENABLED) hay vô hiệu hóa (DISABLED)
32SAMPLE_SIZENUMBER Kích thước mẫu được sử dụng trong việc phân tích bảng
33LAST_ANALYZEDDATE Ngày mà bảng được phân tích lần cuối cùng
34PARTITIONEDVARCHAR2(3) Chỉ định liệu bảng có được phân vùng hay không (YES)
35IOT_TYPEVARCHAR2(12) Nếu bảng là bảng tổ chức chỉ mục, thì IOT_TYPE là IOT, IOT_OVERFLOW, hoặc IOT_MAPPING. Nếu bảng không phải là bảng tổ chức chỉ mục, thì IOT_TYPE là NULL.
36OBJECT_ID_TYPEVARCHAR2(16) Chỉ định xem ID đối tượng (OID) là USER-DEFINED hay SYSTEM GENERATED
37TABLE_TYPE_OWNERVARCHAR2(128) Nếu là bảng đối tượng, chủ sở hữu của loại từ đó bảng được tạo ra
38TABLE_TYPEVARCHAR2(128) Nếu là bảng đối tượng, loại của bảng
39TEMPORARYVARCHAR2(1) Chỉ định liệu bảng có phải là tạm thời (Y) hay không (N)
40SECONDARYVARCHAR2(1) Chỉ định liệu bảng có phải là đối tượng phụ được tạo ra bởi phương thức ODCIIndexCreate của Oracle Data Cartridge để chứa nội dung của một chỉ mục miền (Y) hay không (N)
41NESTEDVARCHAR2(3) Chỉ định liệu bảng có phải là bảng lồng nhau (YES) hay không (NO)
42BUFFER_POOLVARCHAR2(7) Bộ đệm sẽ được sử dụng cho các block của bảng: (DEFAULT, KEEP, RECYCLE, NULL)
43FLASH_CACHEVARCHAR2(7) Gợi ý Flash Cache thông minh cơ sở dữ liệu sẽ được sử dụng cho các block của bảng: (DEFAULT, KEEP, NULL). Chỉ hoạt động trên Solaris và Oracle Linux.
44CELL_FLASH_CACHEVARCHAR2(7) Gợi ý Flash Cache của ô được sử dụng cho các block của bảng: (DEFAULT, KEEP, NULL). Xem thêm: Tài liệu Oracle Exadata Storage Server Software để biết thêm thông tin.
45ROW_MOVEMENTVARCHAR2(8) Nếu là bảng phân vùng, chỉ định liệu di chuyển dòng có được kích hoạt (ENABLED) hay vô hiệu hóa (DISABLED)
46GLOBAL_STATSVARCHAR2(3) GLOBAL_STATS sẽ là YES nếu thống kê được thu thập hoặc duy trì theo cách tăng dần, ngược lại sẽ là NO
47USER_STATSVARCHAR2(3) Chỉ định liệu thống kê có được nhập trực tiếp bởi người dùng (YES) hay không (NO)
48DURATIONVARCHAR2(15) Chỉ định thời gian tồn tại của bảng tạm thời: (SYS$SESSION – Các dòng được bảo tồn trong suốt phiên, SYS$TRANSACTION – Các dòng được xóa sau COMMIT, Null – Bảng cố định)
49SKIP_CORRUPTVARCHAR2(8) Chỉ định liệu Oracle Database có bỏ qua các khối được đánh dấu là hỏng trong quá trình quét bảng và chỉ mục (ENABLED) hay phát ra lỗi (DISABLED). Để kích hoạt tính năng này, thực hiện thủ tục DBMS_REPAIR.skip_corrupt_blocks.
50MONITORINGVARCHAR2(3) Chỉ định liệu bảng có thuộc tính MONITORING được đặt (YES) hay không (NO)
51CLUSTER_OWNERVARCHAR2(128) Chủ sở hữu của cụm, nếu có, mà bảng thuộc về
52DEPENDENCIESVARCHAR2(8) Chỉ định liệu theo dõi theo dõi cấp dòng có được kích hoạt (ENABLED) hay vô hiệu hóa (DISABLED)
53COMPRESSIONVARCHAR2(8) Chỉ định liệu nén bảng có được kích hoạt (ENABLED) hay không (DISABLED); NULL đối với các bảng phân vùng
54COMPRESS_FORVARCHAR2(30) Nén mặc định cho loại hoạt động nào: (BASIC, ADVANCED, QUERY LOW, QUERY HIGH, ARCHIVE LOW, ARCHIVE HIGH, NULL)
55DROPPEDVARCHAR2(3) Chỉ định liệu bảng đã bị xóa và nằm trong thùng tái chế hay không (YES) hay không (NO); NULL đối với các bảng phân vùng. Chế độ xem này không trả lại tên của các bảng đã bị xóa.
56SEGMENT_CREATEDVARCHAR2(3) Chỉ định liệu đoạn của bảng đã được tạo ra (YES) hay chưa (NO)
57INMEMORYVARCHAR2(8) Chỉ định liệu Bộ lưu trữ cột In-Memory (IM column store) có được kích hoạt (ENABLED) hay không (DISABLED) cho bảng này
58INMEMORY_PRIORITYVARCHAR2(8) Chỉ định ưu tiên mà bảng này được lưu vào Bộ lưu trữ cột In-Memory (IM column store). Các giá trị có thể: (LOW, MEDIUM, HIGH, CRITICAL, NONE, NULL). Cột này có giá trị dựa trên nơi đoạn nằm đối với bảng. Ví dụ, nếu bảng được phân vùng và được kích hoạt cho Bộ lưu trữ cột IM, giá trị sẽ là NULL cho ALL_TABLES nhưng không phải NULL cho ALL_TAB_PARTITIONS.
59INMEMORY_DISTRIBUTEVARCHAR2(15) Chỉ định cách bảng này sẽ được phân phối trong các kho lưu trữ cột IM trong môi trường Oracle Real Application Clusters (Oracle RAC): (AUTO, BY ROWID RANGE, BY PARTITION, BY SUBPARTITION)
60INMEMORY_COMPRESSIONVARCHAR2(17) Mức nén cho kho lưu trữ trong bộ nhớ: (NO MEMCOMPRESS, FOR DML, FOR QUERY [ LOW
61INMEMORY_DUPLICATEVARCHAR2(13) Chỉ định cài đặt trùng lặp cho Bộ lưu trữ cột In-Memory (IM column store) trong môi trường Oracle RAC: (NO DUPLICATE, DUPLICATE, DUPLICATE ALL)
62EXTERNALVARCHAR2(3) Chỉ định liệu bảng có phải là bảng ngoại vi (YES) hay không (NO)
63HYBRID (*)VARCHAR2(3) Chỉ định liệu bảng có phải là bảng phân vùng lai (YES) hay không (NO). Bảng phân vùng lai có thể chứa một sự kết hợp của các phân vùng được lưu trữ trong đoạn và các phân vùng được lưu trữ ở ngoại vi.
64CELLMEMORY (**)VARCHAR2(24) Giá trị cho nén cột trong bộ nhớ độ flash. Các giá trị có thể: (ENABLED: Oracle Exadata Storage sẽ tự động quyết định xem có lưu trữ dưới dạng cột hay không, DISABLED: Oracle Exadata Storage bị ngăn chặn khỏi việc lưu trữ dưới dạng cột, NO CACHECOMPRESS: Oracle Exadata Storage sẽ lưu trữ dưới dạng HCC format (không nén lại), FOR QUERY: Oracle Exadata Storage sẽ nén lại và lưu trữ dưới dạng INMEMORY query high format, FOR CAPACITY: Oracle Exadata Storage sẽ nén lại và lưu trữ dưới dạng INMEMORY capacity low format)
65INMEMORY_SERVICEVARCHAR2(12) Chỉ định cách Bộ lưu trữ cột IM được lưu trữ trên các trường hợp khác nhau. Các giá trị có thể: (DEFAULT: Dữ liệu được lưu trữ trên tất cả các trường hợp được chỉ định với tham số khởi tạo PARALLEL_INSTANCE_GROUP. Nếu tham số này không được thiết lập, thì dữ liệu được lưu trữ trên tất cả các trường hợp. Đây là giá trị mặc định., NONE: Dữ liệu không được lưu trữ trên bất kỳ trường hợp nào., ALL: Dữ liệu được lưu trữ trên tất cả các trường hợp, không phụ thuộc vào giá trị của tham số khởi tạo PARALLEL_INSTANCE_GROUP. USER_DEFINED: Dữ liệu chỉ được lưu trữ trên các trường hợp mà dịch vụ được chỉ định bởi người dùng hoạt động. Tên dịch vụ tương ứng với điều này được lưu trong cột INMEMORY_SERVICE_NAME.)
66INMEMORY_SERVICE_NAMEVARCHAR2(1000) Chỉ định tên dịch vụ cho dịch vụ mà Bộ lưu trữ cột IM nên được lưu trữ. Cột này chỉ có giá trị khi INMEMORY_SERVICE tương ứng là USER_DEFINED. Trong tất cả các trường hợp khác, cột này là null.
67MEMOPTIMIZE_READVARCHAR2(8) Chỉ định liệu bảng có được kích hoạt cho Truy cập Nhanh dựa trên Khóa (ENABLED) hay không (DISABLED)
68MEMOPTIMIZE_WRITEVARCHAR2(8) Chỉ sử dụng nội bộ
69HAS_SENSITIVE_COLUMNVARCHAR2(3) Chỉ định liệu bảng có một hoặc nhiều cột nhạy cảm (YES) hay không (NO)
70LOGICAL_REPLICATION (*)VARCHAR2(8) Chỉ định liệu bảng có được kích hoạt cho sao chép logic (ENABLED) hay không (DISABLED). Cài đặt này bị bỏ qua nếu sao chép dữ liệu cột toàn cầu trên cấp độ cột được kích hoạt.

Chú ý:

  • Dấu (*) trong bảng tương ứng: “Cột này có sẵn bắt đầu từ phiên bản Oracle Database 19c, phiên bản 19.1.”
  • Dấu (**) trong bảng tương ứng: “Cột này được thiết kế để sử dụng với Oracle Exadata.”

Trong đó:

  • Oracle Exadata là một nền tảng cơ sở dữ liệu doanh nghiệp chạy các công việc Oracle Database với mọi quy mô và mức độ quan trọng, đảm bảo hiệu suất, sẵn có và an ninh cao.
  • Thiết kế mở rộng của Exadata sử dụng các tối ưu hóa độc đáo, giúp xử lý giao dịch, phân tích, học máy và các công việc kết hợp chạy nhanh chóng và hiệu quả hơn.
  • Tích hợp các công việc đa dạng của Oracle Database trên nền tảng Exadata trong các trung tâm dữ liệu doanh nghiệp, Oracle Cloud Infrastructure (OCI) và môi trường đa đám mây giúp các tổ chức tăng cường hiệu suất vận hành, giảm quản trị IT và giảm chi phí.

3. Các câu lệnh truy vấn thường xuyên sử dụng

Liệt kê tất cả các bảng và xem thông tin về cột của mỗi bảng:

SELECT t.table_name, c.column_name, c.data_type
FROM all_all_tables t
JOIN all_tab_columns c ON t.table_name = c.table_name;

Xem tất cả các chỉ mục và cột của một bảng cụ thể:

SELECT t.table_name, i.index_name, c.column_name
FROM all_all_tables t
JOIN all_indexes i ON t.table_name = i.table_name
JOIN all_ind_columns c ON i.index_name = c.index_name
WHERE t.table_name = 'TEN_BANG';

Xem quyền truy cập và loại quyền trên một bảng:

SELECT t.table_name, p.privilege, p.grantee
FROM all_all_tables t
JOIN all_tab_privs p ON t.table_name = p.table_name
WHERE t.table_name = 'TEN_BANG';

Xem ràng buộc khóa ngoại của một bảng và bảng liên quan:

SELECT c.table_name, r.constraint_name
FROM all_all_tables c
JOIN all_constraints r ON c.table_name = r.table_name
WHERE c.table_name = 'INVTEMPLATE'
ORDER BY c.table_name, r.constraint_name;

Xem số lượng hàng và dung lượng của tất cả các bảng trong một tablespace:

SELECT t.table_name, t.num_rows, s.bytes
FROM all_all_tables t
JOIN user_segments s ON t.table_name = s.segment_name
WHERE t.tablespace_name = 'TEN_TABLESPACE';

Xem thông tin về lịch sử phân tích của một bảng:

SELECT t.table_name, t.last_analyzed
FROM all_all_tables t
WHERE t.table_name = 'TEN_BANG';

Xem các bảng có cột đặc biệt (ví dụ: ‘TEN_COT’) và giá trị cụ thể:

SELECT t.table_name, c.column_name, t.num_rows
FROM all_tab_columns c
JOIN all_all_tables t ON c.table_name = t.table_name
WHERE c.column_name = 'TEN_COT' AND t.num_rows > 1000;

Xem các bảng có quyền SELECT cho một người dùng cụ thể:

SELECT t.table_name, p.privilege, p.grantee
FROM all_tab_columns t
JOIN all_tab_privs p ON t.table_name = p.table_name
WHERE p.privilege = 'SELECT' AND p.grantee = 'TEN_NGUOI_DUNG';

Xem các bảng thuộc một namespace (chủ sở hữu) cụ thể:

SELECT OWNER, table_name
FROM all_all_tables
WHERE OWNER = 'TEN_CHU_SO_HUU';

Xem các bảng có dung lượng vượt quá một giới hạn cụ thể

SELECT t.table_name, t.tablespace_name, s.bytes
FROM all_all_tables t
JOIN user_segments s ON t.table_name = s.segment_name
JOIN all_tab_columns c ON t.table_name = c.table_name
JOIN dba_data_files d ON t.tablespace_name = d.tablespace_name
WHERE s.bytes > 100000000; -- Dung lượng lớn hơn 100 MB