Oracle database 12c:segment相关 / autoextensible相关
在我的数据库中,有一个用户【C##TEST1】。
通常,我们查看它的账户信息是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
SQL> col username for a18 SQL> col profile for a18 SQL> col account_status for a18 SQL> col password for a24 SQL> col "Created" for a25 SQL> col "EXPIRY" for a25 SQL> col "LOCKED" for a25 SQL> col DEFAULT_TABLESPACE for a14 SQL> col temporary_Tablespace for a14 SQL> set linesize 300 SQL> select user_id,username,profile,account_status,default_tablespace,temporary_tablespace,password,to_char(CREATED,'yyyy-mm-dd hh24:mi:ss') "Created",to_char(EXPIRY_DATE,'yyyy-mm-dd hh24:mi:ss') "EXPIRY",to_char(lock_date,'yyyy-mm-dd hh24:mi:ss') "LOCKED",to_char(LAST_LOGIN,'yyyy-mm-dd hh24:mi:ss') "Last Login" from dba_users where username='C##TEST1' 2 ; USER_ID USERNAME PROFILE ACCOUNT_STATUS DEFAULT_TABLES TEMPORARY_TABL PASSWORD Created EXPIRY LOCKED Last Login ---------- ------------------ ------------------ ------------------ -------------- -------------- ------------------------ ------------------------- ------------------------- ------------------------- ------------------- 107 C##TEST1 DEFAULT OPEN TBS_TEST TEMP 2018-12-26 13:43:14 2019-06-24 13:43:14 SQL> |
可以看到,该账户的默认表空间是【TBS_TEST】
看看该表空间:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
SQL> Col "SUM_SPACE(M)" for a12 SQL> Col "USED_RATE(%)" for a12 SQL> Col "FREE_SPACE(M)" for a12 SQL> SELECT * FROM ( 2 SELECT D.TABLESPACE_NAME, 3 SPACE || 'M' "SUM_SPACE(M)", 4 BLOCKS "SUM_BLOCKS", 5 SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)", 6 ROUND ( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) || '%' 7 "USED_RATE(%)", 8 FREE_SPACE || 'M' "FREE_SPACE(M)" 9 FROM ( SELECT TABLESPACE_NAME, 10 ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 11 SUM (BLOCKS) BLOCKS 12 FROM DBA_DATA_FILES 13 GROUP BY TABLESPACE_NAME) D, 14 ( SELECT TABLESPACE_NAME, 15 ROUND (SUM (BYTES) / (1024 * 1024), 2) FREE_SPACE 16 FROM DBA_FREE_SPACE 17 GROUP BY TABLESPACE_NAME) F 18 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 19 UNION ALL 20 SELECT D.TABLESPACE_NAME, 21 SPACE || 'M' "SUM_SPACE(M)", 22 BLOCKS SUM_BLOCKS, 23 USED_SPACE || 'M' "USED_SPACE(M)", 24 ROUND (NVL (USED_SPACE, 0) / SPACE * 100, 2) || '%' "USED_RATE(%)", 25 NVL (FREE_SPACE, 0) || 'M' "FREE_SPACE(M)" 26 FROM ( SELECT TABLESPACE_NAME, 27 ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 28 SUM (BLOCKS) BLOCKS 29 FROM DBA_TEMP_FILES 30 GROUP BY TABLESPACE_NAME) D, 31 ( SELECT TABLESPACE_NAME, 32 ROUND (SUM (BYTES_USED) / (1024 * 1024), 2) USED_SPACE, 33 ROUND (SUM (BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE 34 FROM V$TEMP_SPACE_HEADER 35 GROUP BY TABLESPACE_NAME) F 36 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 37 ORDER BY 1) ; TABLESPACE_NAME SUM_SPACE(M) SUM_BLOCKS USED_SPACE(M) USED_RATE(%) FREE_SPACE(M ------------------------------ ------------ ---------- ----------------------------------------- ------------ ------------ SYSAUX 1500M 192000 1401.37M 93.42% 98.63M SYSTEM 840M 107520 832.81M 99.14% 7.19M TBS_TEST 30M 3840 1M 3.33% 29M TEMP 131M 16768 131M 100% 0M UNDOTBS1 60M 7680 48.25M 80.42% 11.75M USERS 5M 640 1M 20% 4M 6 rows selected. SQL> |
看看该表空间拥有的对象:
1 2 3 4 5 6 7 8 9 10 11 |
SQL> Set linesize 400 SQL> Col owner for a12 SQL> Col object_name for a12 SQL> Col object_type for a12 SQL> Select owner,object_name,object_type from dba_objects where owner='C##TEST1'; OWNER OBJECT_NAME OBJECT_TYPE ------------ ------------ ------------ C##TEST1 PEOPLE TABLE SQL> |
可以看到它有一个表对象【C##TEST1.PEOPLE】
我们知道,数据库的逻辑结构依次是:
数据库
表空间
段
区
块
具体关系,可以查看下图
既然在表空间下,已经查到了表对象,那么是不是在【段】的层面也能查到信息呢?
查查段的信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
SQL> select distinct tablespace_name from dba_segments order by 1; TABLESPACE_NAME ------------------------------ SYSAUX SYSTEM UNDOTBS1 SQL> SQL> select tablespace_name,segment_type,count(*) from dba_segments group by tablespace_name,segment_type order by 1,2; TABLESPACE_NAME SEGMENT_TYPE COUNT(*) ------------------------------ ------------------ ---------- SYSAUX CLUSTER 1 SYSAUX INDEX 878 SYSAUX INDEX PARTITION 493 SYSAUX LOB PARTITION 49 SYSAUX LOBINDEX 412 SYSAUX LOBSEGMENT 412 SYSAUX NESTED TABLE 3 SYSAUX TABLE 718 SYSAUX TABLE PARTITION 507 SYSAUX TABLE SUBPARTITION 32 SYSTEM CLUSTER 9 TABLESPACE_NAME SEGMENT_TYPE COUNT(*) ------------------------------ ------------------ ---------- SYSTEM INDEX 888 SYSTEM LOBINDEX 157 SYSTEM LOBSEGMENT 157 SYSTEM NESTED TABLE 10 SYSTEM ROLLBACK 1 SYSTEM TABLE 860 SYSTEM TABLE PARTITION 100 UNDOTBS1 TYPE2 UNDO 10 19 rows selected. SQL> |
可以看到,居然没有上面表【C##TEST1.PEOPLE】的信息。
查看一下这个表:
1 2 3 4 5 |
SQL> select * from c##test1.people; no rows selected SQL> |
添加一些数据:
1 2 3 4 5 6 7 8 9 10 |
SQL> insert into c##test1.people values (1,'Angela Baby'); 1 row created. SQL> SQL> insert into c##test1.people values (2,'King Summary'); 1 row created. SQL> |
再次查看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
SQL> select tablespace_name,segment_type,count(*) from dba_segments where tablespace_name='TBS_TEST' group by tablespace_name,segment_type order by 1,2; TABLESPACE_NAME SEGMENT_TYPE COUNT(*) ------------------------------ ------------------ ---------- TBS_TEST TABLE 1 SQL> SQL> col segment_name for a12 SQL> Col owner for a12 SQL> Col tablespace_name for a12 SQL> select tablespace_name,segment_type,owner,segment_name,bytes/1024/1024 "MB" from dba_segments where tablespace_name='TBS_TEST'; TABLESPACE_N SEGMENT_TYPE OWNER SEGMENT_NAME MB ------------ ------------------ ------------ ------------ ---------- TBS_TEST TABLE C##TEST1 PEOPLE .0625 SQL> |
然后就查到了。
——————
然后,看看关于数据文件的自动扩展:AUTOEXTENSIBLE
先看看数据文件状态:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
SQL> set linesize 400 SQL> col file_name for a48 SQL> col tablespace_name for a18 SQL> select 2 a.file#,b.file_name,b.tablespace_name,b.bytes/1024/1024 "MB",b.maxbytes/1024/1024 "Max MB",to_char(a.CREATION_TIME,'yyyy-mm-dd hh24:mi:ss') "Create Date",b.status,AUTOEXTENSIBLE 3 from 4 v$datafile a, 5 dba_data_files b 6 where a.file#=b.file_id and tablespace_name='TBS_TEST' 7 order by tablespace_name,file#; FILE# FILE_NAME TABLESPACE_NAME MB Max MB Create Date STATUS AUT ---------- ------------------------------------------------ ------------------ ---------- ---------- ------------------- --------- --- 13 /oradata/orcl/tbs_test01.dbf TBS_TEST 30 32767.9844 2018-12-26 13:37:40 AVAILABLE YES SQL> |
表空间:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
SQL> Col "SUM_SPACE(M)" for a12 SQL> Col "USED_RATE(%)" for a12 SQL> Col "FREE_SPACE(M)" for a12 SQL> SELECT * FROM ( 2 SELECT D.TABLESPACE_NAME, 3 SPACE || 'M' "SUM_SPACE(M)", 4 BLOCKS "SUM_BLOCKS", 5 SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)", 6 ROUND ( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) || '%' 7 "USED_RATE(%)", 8 FREE_SPACE || 'M' "FREE_SPACE(M)" 9 FROM ( SELECT TABLESPACE_NAME, 10 ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 11 SUM (BLOCKS) BLOCKS 12 FROM DBA_DATA_FILES 13 GROUP BY TABLESPACE_NAME) D, 14 ( SELECT TABLESPACE_NAME, 15 ROUND (SUM (BYTES) / (1024 * 1024), 2) FREE_SPACE 16 FROM DBA_FREE_SPACE 17 GROUP BY TABLESPACE_NAME) F 18 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 19 UNION ALL 20 SELECT D.TABLESPACE_NAME, 21 SPACE || 'M' "SUM_SPACE(M)", 22 BLOCKS SUM_BLOCKS, 23 USED_SPACE || 'M' "USED_SPACE(M)", 24 ROUND (NVL (USED_SPACE, 0) / SPACE * 100, 2) || '%' "USED_RATE(%)", 25 NVL (FREE_SPACE, 0) || 'M' "FREE_SPACE(M)" 26 FROM ( SELECT TABLESPACE_NAME, 27 ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 28 SUM (BLOCKS) BLOCKS 29 FROM DBA_TEMP_FILES 30 GROUP BY TABLESPACE_NAME) D, 31 ( SELECT TABLESPACE_NAME, 32 ROUND (SUM (BYTES_USED) / (1024 * 1024), 2) USED_SPACE, 33 ROUND (SUM (BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE 34 FROM V$TEMP_SPACE_HEADER 35 GROUP BY TABLESPACE_NAME) F 36 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 37 ORDER BY 1) ; TABLESPACE_NAME SUM_SPACE(M) SUM_BLOCKS USED_SPACE(M) USED_RATE(%) FREE_SPACE(M ------------------ ------------ ---------- ----------------------------------------- ------------ ------------ SYSAUX 1500M 192000 1410.37M 94.02% 89.63M SYSTEM 840M 107520 832.81M 99.14% 7.19M TBS_TEST 30M 3840 1.06M 3.53% 28.94M TEMP 131M 16768 131M 100% 0M UNDOTBS1 60M 7680 42.25M 70.42% 17.75M USERS 5M 640 1M 20% 4M 6 rows selected. SQL> |
然后,开始生成数据:
1 2 3 4 5 |
SQL> create table c##test1.duplicate_dba_objects as select * from dba_objects; Table created. SQL> |
再看看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
SQL> col segment_name for a12 SQL> Col owner for a12 SQL> Col tablespace_name for a12 SQL> select tablespace_name,segment_type,owner,segment_name,bytes/1024/1024 "MB" from dba_segments where tablespace_name='TBS_TEST'; TABLESPACE_N SEGMENT_TYPE OWNER SEGMENT_NAME MB ------------ ------------------ ------------ ------------ ---------- TBS_TEST TABLE C##TEST1 PEOPLE .0625 TBS_TEST TABLE C##TEST1 DUPLICATE_DB 12 A_OBJECTS SQL> SQL> Set linesize 400 SQL> Col tablespace_name for a12 SQL> Col "SUM_SPACE(M)" for a12 SQL> Col "USED_RATE(%)" for a12 SQL> Col "FREE_SPACE(M)" for a12 SQL> SELECT * FROM ( 2 SELECT D.TABLESPACE_NAME, 3 SPACE || 'M' "SUM_SPACE(M)", 4 BLOCKS "SUM_BLOCKS", 5 SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)", 6 ROUND ( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) || '%' 7 "USED_RATE(%)", 8 FREE_SPACE || 'M' "FREE_SPACE(M)" 9 FROM ( SELECT TABLESPACE_NAME, 10 ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 11 SUM (BLOCKS) BLOCKS 12 FROM DBA_DATA_FILES 13 GROUP BY TABLESPACE_NAME) D, 14 ( SELECT TABLESPACE_NAME, 15 ROUND (SUM (BYTES) / (1024 * 1024), 2) FREE_SPACE 16 FROM DBA_FREE_SPACE 17 GROUP BY TABLESPACE_NAME) F 18 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) and d.tablespace_name='TBS_TEST' 19 UNION ALL 20 SELECT D.TABLESPACE_NAME, 21 SPACE || 'M' "SUM_SPACE(M)", 22 BLOCKS SUM_BLOCKS, 23 USED_SPACE || 'M' "USED_SPACE(M)", 24 ROUND (NVL (USED_SPACE, 0) / SPACE * 100, 2) || '%' "USED_RATE(%)", 25 NVL (FREE_SPACE, 0) || 'M' "FREE_SPACE(M)" 26 FROM ( SELECT TABLESPACE_NAME, 27 ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 28 SUM (BLOCKS) BLOCKS 29 FROM DBA_TEMP_FILES 30 GROUP BY TABLESPACE_NAME) D, 31 ( SELECT TABLESPACE_NAME, 32 ROUND (SUM (BYTES_USED) / (1024 * 1024), 2) USED_SPACE, 33 ROUND (SUM (BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE 34 FROM V$TEMP_SPACE_HEADER 35 GROUP BY TABLESPACE_NAME) F 36 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 37 ORDER BY 1) ; TABLESPACE_N SUM_SPACE(M) SUM_BLOCKS USED_SPACE(M) USED_RATE(%) FREE_SPACE(M ------------ ------------ ---------- ----------------------------------------- ------------ ------------ TBS_TEST 30M 3840 13.06M 43.53% 16.94M TEMP 131M 16768 131M 100% 0M SQL> |
再做一次:
1 2 3 4 5 |
SQL> create table c##test1.duplicate_dba_objects_1 as select * from dba_objects; Table created. SQL> |
再查查:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
SQL> Set linesize 400 SQL> Col tablespace_name for a12 SQL> Col "SUM_SPACE(M)" for a12 SQL> Col "USED_RATE(%)" for a12 SQL> Col "FREE_SPACE(M)" for a12 SQL> SELECT * FROM ( 2 SELECT D.TABLESPACE_NAME, 3 SPACE || 'M' "SUM_SPACE(M)", 4 BLOCKS "SUM_BLOCKS", 5 SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)", ROUND ( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) || '%' 6 7 "USED_RATE(%)", 8 FREE_SPACE || 'M' "FREE_SPACE(M)" 9 FROM ( SELECT TABLESPACE_NAME, 10 ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 11 SUM (BLOCKS) BLOCKS 12 FROM DBA_DATA_FILES 13 GROUP BY TABLESPACE_NAME) D, 14 ( SELECT TABLESPACE_NAME, 15 ROUND (SUM (BYTES) / (1024 * 1024), 2) FREE_SPACE 16 FROM DBA_FREE_SPACE 17 GROUP BY TABLESPACE_NAME) F 18 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) and d.tablespace_name='TBS_TEST' 19 UNION ALL 20 SELECT D.TABLESPACE_NAME, 21 SPACE || 'M' "SUM_SPACE(M)", 22 BLOCKS SUM_BLOCKS, 23 USED_SPACE || 'M' "USED_SPACE(M)", 24 ROUND (NVL (USED_SPACE, 0) / SPACE * 100, 2) || '%' "USED_RATE(%)", 25 NVL (FREE_SPACE, 0) || 'M' "FREE_SPACE(M)" 26 FROM ( SELECT TABLESPACE_NAME, 27 ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 28 SUM (BLOCKS) BLOCKS 29 FROM DBA_TEMP_FILES 30 GROUP BY TABLESPACE_NAME) D, 31 ( SELECT TABLESPACE_NAME, 32 ROUND (SUM (BYTES_USED) / (1024 * 1024), 2) USED_SPACE, 33 ROUND (SUM (BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE 34 FROM V$TEMP_SPACE_HEADER 35 GROUP BY TABLESPACE_NAME) F 36 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 37 ORDER BY 1) ; TABLESPACE_N SUM_SPACE(M) SUM_BLOCKS USED_SPACE(M) USED_RATE(%) FREE_SPACE(M ------------ ------------ ---------- ----------------------------------------- ------------ ------------ TBS_TEST 30M 3840 25.06M 83.53% 4.94M TEMP 131M 16768 131M 100% 0M SQL> select tablespace_name,segment_type,owner,segment_name,bytes/1024/1024 "MB" from dba_segments where tablespace_name='TBS_TEST'; TABLESPACE_N SEGMENT_TYPE OWNER SEGMENT_NAME MB ------------ ------------------ ------------ ------------ ---------- TBS_TEST TABLE C##TEST1 PEOPLE .0625 TBS_TEST TABLE C##TEST1 DUPLICATE_DB 12 A_OBJECTS TBS_TEST TABLE C##TEST1 DUPLICATE_DB 12 A_OBJECTS_1 SQL> |
注意,此时,剩余空间只有【4.94M】了。
也就是说,如果再像上面那样操作一次,表空间就会爆掉。
但是,当前表空间的数据文件,是自动扩展的,那么它会如何操作呢?
先看看数据文件的当前大小:
1 2 3 4 5 6 |
suse-1:/oradata/orcl # pwd /oradata/orcl suse-1:/oradata/orcl # suse-1:/oradata/orcl # du -sh * | grep tbs_test 31M tbs_test01.dbf suse-1:/oradata/orcl # |
开始操作。
先看看大小适宜的表有哪些:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
SQL> select tablespace_name,segment_type,owner,segment_name,bytes/1024/1024 "MB" from dba_segments where segment_type='TABLE' and bytes/1024/1024>5 and rownum<8 order by 5; TABLESPACE_N SEGMENT_TYPE OWNER SEGMENT_NAME MB ------------ ------------------ ------------ ------------ ---------- SYSTEM TABLE SYS DEPENDENCY$ 7 SYSTEM TABLE SYS VIEW$ 8 SYSTEM TABLE SYS IDL_CHAR$ 9 SYSTEM TABLE SYS OBJ$ 10 SYSTEM TABLE SYS ARGUMENT$ 11 SYSTEM TABLE SYS SOURCE$ 36 SYSTEM TABLE SYS IDL_UB1$ 336 7 rows selected. SQL> |
选择一个7MB的表开始做实验:
1 2 3 4 5 |
SQL> create table c##test1.duplicate_sys_dependency$_1 as select * from sys.DEPENDENCY$; Table created. SQL> |
再看看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
SQL> select tablespace_name,segment_type,owner,segment_name,bytes/1024/1024 "MB" from dba_segments where tablespace_name='TBS_TEST'; TABLESPACE_N SEGMENT_TYPE OWNER SEGMENT_NAME MB ------------ ------------------ ------------ ------------ ---------- TBS_TEST TABLE C##TEST1 PEOPLE .0625 TBS_TEST TABLE C##TEST1 DUPLICATE_DB 12 A_OBJECTS TBS_TEST TABLE C##TEST1 DUPLICATE_DB 12 A_OBJECTS_1 TBS_TEST TABLE C##TEST1 DUPLICATE_SY 7 S_DEPENDENCY $_1 SQL> SQL> Set linesize 400 SQL> Col tablespace_name for a12 SQL> Col "SUM_SPACE(M)" for a12 SQL> Col "USED_RATE(%)" for a12 SQL> Col "FREE_SPACE(M)" for a12 SQL> SELECT * FROM ( 2 SELECT D.TABLESPACE_NAME, 3 SPACE || 'M' "SUM_SPACE(M)", 4 BLOCKS "SUM_BLOCKS", 5 SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)", 6 ROUND ( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) || '%' 7 "USED_RATE(%)", 8 FREE_SPACE || 'M' "FREE_SPACE(M)" 9 FROM ( SELECT TABLESPACE_NAME, 10 ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 11 SUM (BLOCKS) BLOCKS 12 FROM DBA_DATA_FILES 13 GROUP BY TABLESPACE_NAME) D, 14 ( SELECT TABLESPACE_NAME, 15 ROUND (SUM (BYTES) / (1024 * 1024), 2) FREE_SPACE 16 FROM DBA_FREE_SPACE 17 GROUP BY TABLESPACE_NAME) F 18 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) and d.tablespace_name='TBS_TEST' 19 UNION ALL 20 SELECT D.TABLESPACE_NAME, 21 SPACE || 'M' "SUM_SPACE(M)", 22 BLOCKS SUM_BLOCKS, 23 USED_SPACE || 'M' "USED_SPACE(M)", 24 ROUND (NVL (USED_SPACE, 0) / SPACE * 100, 2) || '%' "USED_RATE(%)", 25 NVL (FREE_SPACE, 0) || 'M' "FREE_SPACE(M)" 26 FROM ( SELECT TABLESPACE_NAME, 27 ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 28 SUM (BLOCKS) BLOCKS 29 FROM DBA_TEMP_FILES 30 GROUP BY TABLESPACE_NAME) D, 31 ( SELECT TABLESPACE_NAME, 32 ROUND (SUM (BYTES_USED) / (1024 * 1024), 2) USED_SPACE, 33 ROUND (SUM (BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE 34 FROM V$TEMP_SPACE_HEADER 35 GROUP BY TABLESPACE_NAME) F 36 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 37 ORDER BY 1) ; TABLESPACE_N SUM_SPACE(M) SUM_BLOCKS USED_SPACE(M) USED_RATE(%) FREE_SPACE(M ------------ ------------ ---------- ----------------------------------------- ------------ ------------ TBS_TEST 34M 4352 32.06M 94.29% 1.94M TEMP 131M 16768 131M 100% 0M SQL> |
看看文件系统中的数据文件:
1 2 3 4 5 6 |
suse-1:/oradata/orcl # du -sh * | grep tbs_test 31M tbs_test01.dbf suse-1:/oradata/orcl # suse-1:/oradata/orcl # du -sh * | grep tbs_test 35M tbs_test01.dbf suse-1:/oradata/orcl # |
可以看到了,增加了【4M】。
这个AUTOEXTEND的过程,在ALERT中可以看到痕迹:
1 2 3 4 5 6 7 8 |
2018-12-27T00:22:12.735378+08:00 Resize operation completed for file# 13, old size 30720K, new size 31744K 2018-12-27T00:22:12.788539+08:00 Resize operation completed for file# 13, old size 31744K, new size 32768K 2018-12-27T00:22:12.846606+08:00 Resize operation completed for file# 13, old size 32768K, new size 33792K 2018-12-27T00:22:12.912136+08:00 Resize operation completed for file# 13, old size 33792K, new size 34816K |
每次增加都是【1024K】
从最初的【30720K = 30M】,增加到了【34816K = 34M】
看看更详细的内容:
1 2 3 4 5 6 7 8 9 |
SQL> col file_name for a28 SQL> set linesize 400 SQL> select file_id,file_name,tablespace_name,bytes/1024/1024 "MB",status,autoextensible,increment_by,maxbytes/1024/1024 "MB MAX",user_bytes/1024/1024 "MB User",lost_write_protect from dba_data_files where tablespace_name='TBS_TEST'; FILE_ID FILE_NAME TABLESPACE_N MB STATUS AUT INCREMENT_BY MB MAX MB User LOST_WR ---------- ---------------------------- ------------ ---------- --------- --- ------------ ---------- ---------- ------- 13 /oradata/orcl/tbs_test01.dbf TBS_TEST 34 AVAILABLE YES 1 32767.9844 33 OFF SQL> |
确实,步进是【1M】
————————————————————
Done。