دیتادیکشنری جداولی هستند که به صورت پیش‌فرض در اوراکل وجود دارند و ساختار دیتابیس رو نگه‌داری می‌کنند. اونایی که اولشون DBA است جدول هستند و اونایی که اولشون V است VIEW هستند.

یه وضعیتی روی TableSpaceها وجود داره که شما می‌تونید به وسیله دیتا دیکشنری اسم همه TableSpaceهاتون رو پیدا کنید:

نکته: با دستور DESCRIB می‌توانید ساختار یک جدول را ببینید. وقتی می‌خوایم ساختار جداول دیتادیکشنری رو ببینیم از این دستور پر کاربرد استفاده می‌کنیم.

SQL> DESCRIB DBA_TABLESPACES;
Name Null? Type
----------------------------------------- -------- ---------------
 TABLESPACE_NAME                            NOT NULL  VARCHAR2(30)
BLOCK_SIZE NOT NULL NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NOT NULL NUMBER
MAX_EXTENTS NUMBER
MAX_SIZE NUMBER
PCT_INCREASE NUMBER
MIN_EXTLEN NUMBER
STATUS VARCHAR2(9)
CONTENTS VARCHAR2(9)
LOGGING VARCHAR2(9)
FORCE_LOGGING VARCHAR2(3)
EXTENT_MANAGEMENT VARCHAR2(10)
ALLOCATION_TYPE VARCHAR2(9)
PLUGGED_IN VARCHAR2(3)
SEGMENT_SPACE_MANAGEMENT VARCHAR2(6)
DEF_TAB_COMPRESSION VARCHAR2(8)
RETENTION VARCHAR2(11)
BIGFILE VARCHAR2(3)
PREDICATE_EVALUATION VARCHAR2(7)
ENCRYPTED VARCHAR2(3)
COMPRESS_FOR VARCHAR2(30)

با SELECT گرفتن از TABLESPACE_NAME می‌توانید به لیست TABLESPACEهای موجود در اوراکل برسید:

SQL> SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
TS

6 rows selected.

جدول DBA_FREE_SPACE

برای دیدن وضعیت بلاک‌ها و بایت‌هایی که توی TableSpaceهای شما وجود داره:

نکته: یک TableSpace میتونه از چندین DataFile تشکیل شده باشه ولی هر DataFile مطلق به یک TableSpace است.

SQL> DESCRIBE DBA_FREE_SPACE;
Name Null? Type
----------------------------------------- -------- ------------
 TABLESPACE_NAME                                    VARCHAR2(30)
FILE_ID NUMBER
BLOCK_ID NUMBER
BYTES NUMBER
BLOCKS NUMBER
RELATIVE_FNO NUMBER

SQL> SELECT * from DBA_FREE_SPACE;
TABLESPACE_NAME                FILE_ID    BLOCK_ID   BYTES      BLOCKS     RELATIVE_FNO
------------------------------ ---------- ---------- ---------- ---------- ------------
SYSTEM 1 100240 7208960 880 1
SYSAUX                         3          109120     49807360   6080       3
UNDOTBS1                       5          280        851968     104        5

TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO
------------------------------ ---------- ---------- ---------- ---------- ------------
UNDOTBS1 5 1024 2097152 256 5
UNDOTBS1                       5          1408       1048576    128        5
UNDOTBS1                       5          1664       2097152    256        5

TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO
------------------------------ ---------- ---------- ---------- ---------- ------------
UNDOTBS1 5 2048 5242880 640 5
UNDOTBS1                       5          2816       2097152    256        5
UNDOTBS1                       5          3200       108003328  13184      5

TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO
------------------------------ ---------- ---------- ---------- ---------- ------------
UNDOTBS1 5 17408 148897792 18176 5
UNDOTBS1                       5          35592      468647936  57208      5
USERS                          6          224        3407872    416        6

TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO
------------------------------ ---------- ---------- ---------- ---------- ------------
TS 2 128 103809024 12672 2
13 rows selected.

چون یک TableSpace شامل چندیت DataFile است پس وضعیت بلاک‌ها، بایت‌های اشغال شده، هر کدوم از DataFileهای TableSpaceها را در بالا می‌بینید.

پیدا کردن آدرس DataFileها

 آدرس DATAFILEها و فضاهای مالک آنها در V$DATAFILE قرار دارد.

SQL> SELECT NAME FROM V$DATAFILE;
NAME
-------------------------------------------
E:\APP\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
E:\A.DBF
E:\APP\ORACLE\ORADATA\ORCL\SYSAUX01.DBF
E:\APP\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
E:\APP\ORACLE\ORADATA\ORCL\USERS01.DBF

نکته:‌ توجه داشته باشید یکسری از DataDictionart رو نشون نمیده به این علت که اگر اون DataFileها رو پاک کنیم یا مشکلی براشون به وجود بیاد دیتابیس به مشکل بزرگی می‌خوره چون ساختار DataDictionaryها روی این TableSpaceها قرار داره 

برای اطلاعات بیشتر می‌توانید از دستورات زیر استفاده کنید:

SELECT * FROM V$DATAFILE;
DESCRIB V$DATAFILE;
DESCRIB V$DATABASE;

پیداکردن نام موجودیت‌های موجود در TABLESPACE

SQL> DESCRIB DBA_SEGMENTS;
Name Null? Type
----------------------------------------- -------- -------------
 OWNER                                              VARCHAR2(128)
SEGMENT_NAME VARCHAR2(128)
PARTITION_NAME VARCHAR2(128)
SEGMENT_TYPE VARCHAR2(18)
SEGMENT_SUBTYPE VARCHAR2(10)
TABLESPACE_NAME VARCHAR2(30)
HEADER_FILE NUMBER
HEADER_BLOCK NUMBER
BYTES NUMBER
BLOCKS NUMBER
EXTENTS NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NUMBER
MAX_EXTENTS NUMBER
MAX_SIZE NUMBER
RETENTION VARCHAR2(7)
MINRETENTION NUMBER
PCT_INCREASE NUMBER
FREELISTS NUMBER
FREELIST_GROUPS NUMBER
RELATIVE_FNO NUMBER
BUFFER_POOL VARCHAR2(7)
FLASH_CACHE VARCHAR2(7)
CELL_FLASH_CACHE VARCHAR2(7)

نحوه جستجو در گوگل برای دیتا دیکشنری

- HOW TO GET ORACLE DATAFILE ADDRESS DATA DICTIONARY
- ORACLE CONCEPTS - DATA DICTIONARY