Ü STORAGE MANAGEMENT
q HOW IS THE DATA STORED IN THE DATABASE?
v LOGICALLY STORE IN THE TABLESPACE AND PHYSICALLY WE HAVE DATA FILES
q TABLESPACE
v COLLECTION OF SEGMENTS
q SEGMENT
v COLLECTION OF EXTENTS
q EXTENT
v COLLECTION OF BLOCKS
q BLOCK
v DATA BLOCK IS THE SMALLEST UNIT
q INITIALLY 8 BLOCKS ARE ALLOCATED BY DEFAULT TOTAL SIZE [8KBx8]
64KB
q ONE TABLE WILL HAVE A NUMBER OF EXTENTS
q ONE BLOCK HAS 5 PARTS
q COMMON AND VARIABLE HEADER
v BLOCK ADDRESS [EX: DATA OR INDEX]
q TABLE DIRECTORY
v IN THIS BLOCK WHICH TABLE DATA STORE
q ROW DIRECTORY
v WHICH ROW STORE IN THIS BLOCK
q FREE SPACE
v ALLOCATED FOR INSERTION OF NEW ROWS
q ROW DATA
Ü TABLESPACE
q
SMALL
FILE TABLESPACE
v IN A TABLESPACE 1024 DATA FILES YOU CAN ADD
v ORACLE RECOMMENDS ONE DATA FILES SIZE MAX 32 GB
q BIGFILE TABLESPACE
v LIMIT SIZE 32TB [OS & ORACLE LEVEL]
v ONLY ADD ONE DATA FILE
v SHOULD ONLY BE USED WITH ASM OR WITH OTHER LOGICAL VOLUME MANAGERS
q SYSTEM
TABLESPACE
v CONTAINS DATA DICTIONARY TABLES [META DATA]
q SYSAUX
TABLESPACE
v CONTAINS EMBEDDED ENTERPRISE MANAGER[EM] REPOSITORY, LOGMINER,
STATSPACK, AWR
q UNDO
TABLESPACE
v ROLL BACK TRANSACTIONS
q USER
TABLESPACE
v ACTUAL USER DATA
q TEPORARY
TABLESPACE
v FOR SORT OPERATIONS PURPOSES
q TABLESPACE TWO TYPES
q LOCALLY MANAGED TABLESPACE
v USED FOR DML OPERATIONAL [INSERT, UPDATE, DELETE WITH DATA GETTING
MODIFIED]
q DICTIONARY MANAGED TABLESPACE
v STATIC TABLE [MASTER TABLE]
v WE DO NOT MODIFY DATA
v SYSTEM AND SYSAUX ARE IN INCLUDE THIS TABLESPACE
q EXTENT MANAGEMENT HAS TWO TYPES
q AUTOALLOCATE
v EXTENT SIZES ARE MANAGED BY ORACLE AUTOMATIC
q UNIFORM
v EXTENT ALLOCATION IN THE TABLESPACE IS IN A FIXED UNIFORM SIZE
>>>>>>>>>>>>>>>>>>>>>>>>>>
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/MAXCDB/maxpdb/system01.dbf
/u01/app/oracle/oradata/MAXCDB/maxpdb/sysaux01.dbf
/u01/app/oracle/oradata/MAXCDB/maxpdb/undotbs01.dbf
/u01/app/oracle/oradata/MAXCDB/maxpdb/users01.dbf
/u01/app/oracle/oradata/MAXCDB/maxpdb/users02.dbf
/u01/app/oracle/oradata/MAXCDB/maxpdb/apex01.dbf
CREATE TABLESPACE TS_HR1 DATAFILE '/u01/app/oracle/oradata/MAXCDB/maxpdb/ts_hr1.dbf' size 10M uniform size 200K;
CREATE USER HR1 IDENTIFIED BY abc DEFAULT TABLESPACE TS_HR1 TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK;
GRANT CONNECT, RESOURCE TO HR1;
ALTER USER HR1 DEFAULT ROLE ALL;
GRANT CREATE TABLE TO HR1;
ALTER USER HR1 QUOTA UNLIMITED ON TS_HR1;
EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(10),
MGR NUMBER(4),
HIDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(2),
DEPTNO NUMBER(2))
tablespace TS_HR1; --Optional
col SEGMENT_NAME format A20
col TABLESPACE_NAME format A20
select segment_type || ' - ' || segment_name segment_name, tablespace_name, extent_id, file_id, block_id, blocks from dba_extents where segment_name = 'TAB1';
commit;
col SEGMENT_NAME format A20
col TABLESPACE_NAME format A20
select segment_type || ' - ' || segment_name segment_name, tablespace_name, extent_id, file_id, block_id, blocks from dba_extents where segment_name = 'TAB1';
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
insert into HR1.TAB1 values (1000, 'SMITH', 'CLERK', 7902, TO_DATE('13-SEP-07', 'DD-MON-RR'), 80, NULL,20);
commit;
end;
/
for i in 1..8 loop
insert into HR1.TAB1 select * from HR1.TAB1;
end loop;
commit;
end;
/
set pages 0
col SEGMENT_NAME format A20
col TABLESPACE_NAME format A20
select segment_type || ' - ' || segment_name segment_name, tablespace_name, extent_id, file_id, block_id, blocks from dba_extents where segment_name = 'TAB1';
tablespace_name,
file_name,
bytes / 1024 / 1024 AS total_mb,
(bytes - free_bytes) / 1024 / 1024 AS used_mb,
free_bytes / 1024 / 1024 AS free_mb,
ROUND((bytes - free_bytes) / bytes * 100, 2) AS used_percent
FROM (
SELECT
df.tablespace_name,
df.file_name,
df.bytes,
(df.bytes - NVL(fs.free_bytes, 0)) AS used_bytes,
NVL(fs.free_bytes, 0) AS free_bytes
FROM dba_data_files df
LEFT JOIN (
SELECT tablespace_name, file_id, SUM(bytes) AS free_bytes
FROM dba_free_space
GROUP BY tablespace_name, file_id
) fs
ON df.file_id = fs.file_id
)
ORDER BY used_percent DESC;
col FILE_NAME format A80
col BYTES format 9999999999
col TABLESPACE_NAME format A20
select tablespace_name, file_name, bytes from dba_data_files where tablespace_name= 'TS_HR1';
