表空间的使用情况监控:
SQL> select tablespace_name,sum(bytes)/1024/1024 "free(M)" from dba_free_space g
roup by tablespace_name;
TABLESPACE_NAME free(M)
------------------------------ ----------
UNDOTBS1 284.9375
SYSAUX 14.5625
USERS 4.375
SYSTEM 6.5
EXAMPLE 22.3125
扩展users表空间到100m
SQL> alter database datafile 4 resize 100m;
数据库已更改。
SQL>
SQL> select tablespace_name,sum(bytes)/1024/1024 "free(M)" from dba_free_space g
roup by tablespace_name;
TABLESPACE free(M)
---------- ----------
UNDOTBS1 284.9375
SYSAUX 14.5625
USERS 94.375
SYSTEM 6.5
EXAMPLE 22.3125
创建T1表,插入数据,查看表空间变化
SQL> create table t1 as select * from dba_objects;
表已创建。
SQL> insert into t1 select * from t1;
已创建50646行。
SQL> select tablespace_name,sum(bytes)/1024/1024 "free(M)" from dba_free_space g
roup by tablespace_name;
TABLESPACE free(M)
---------- ----------
UNDOTBS1 284.9375
SYSAUX 14.5625
USERS 82.375
SYSTEM 6.5
EXAMPLE 22.3125
段收缩测试:
SQL> select table_name,blocks from user_tables where table_name='T1';
TABLE_NAME BLOCKS
------------------------------ ----------
T1
收集统计信息
SQL> exec dbms_stats.gather_table_stats('SCOTT','T1');
PL/SQL 过程已成功完成。
SQL> select table_name,blocks from user_tables where table_name='T1';
TABLE_NAME BLOCKS
------------------------------ ----------
T1 1524
启动行移动
SQL> alter table t1 enable row movement;
表已更改。
删除5000行数据,查看表的块数量
SQL> delete from t1 where rownum<50000;
已删除49999行。
SQL> select table_name,blocks from user_tables where table_name='T1';
TABLE_NAME BLOCKS
------------------------------ ----------
T1 1524
此时没有改变,即使收集统计信息后,也没有改变,因为删除并不释放数据块
SQL> exec dbms_stats.gather_table_stats('SCOTT','T1');
PL/SQL 过程已成功完成。
SQL> select table_name,blocks from user_tables where table_name='T1';
TABLE_NAME BLOCKS
------------------------------ ----------
T1 1524
然后进行段收缩操作
SQL> alter table t1 shrink space ;
表已更改。
SQL> select table_name,blocks from user_tables where table_name='T1';
TABLE_NAME BLOCKS
------------------------------ ----------
T1 1524
SQL> exec dbms_stats.gather_table_stats('SCOTT','T1');
PL/SQL 过程已成功完成。
SQL> select table_name,blocks from user_tables where table_name='T1';
TABLE_NAME BLOCKS
------------------------------ ----------
T1 706
这样发现块数量减少到了706达到了释放块的目的
管理可恢复空间
创建不能自动扩展的表空间
SQL> create tablespace test datafile 'd:\test.dbf' size 1m
2 /
表空间已创建。
SQL> create table tt as select * from user_tables;
表已创建。
SQL> alter table tt move tablespace test;
表已更改。
SQL> insert into tt select * from tt;
已创建5行。
SQL> insert into tt select * from tt;
已创建10行。
SQL> insert into tt select * from tt;
已创建20行。
SQL> insert into tt select * from tt;
已创建40行。
SQL> insert into tt select * from tt;
已创建80行。
SQL> insert into tt select * from tt;
已创建160行。
SQL> insert into tt select * from tt;
已创建320行。
SQL> insert into tt select * from tt;
已创建640行。
SQL> insert into tt select * from tt;
已创建1280行。
SQL> insert into tt select * from tt;
insert into tt select * from tt
*
第 1 行出现错误:
ORA-01653: unable to extend table SCOTT.TT by 8 in tablespace TEST
此时没有打开可恢复功能,于是该操作将被回滚掉
然后打开可恢复功能
SQL> commit;
提交完成。
SQL> alter session enable resumable;
会话已更改。
SQL> insert into tt select * from tt;
这时发现这个插入操作将被挂起
在另一个session,查看test.dbf的文件号
SQL> col file_name format a50;
SQL> select file_name,file_id from dba_data_files;
FILE_NAME FILE_ID
-------------------------------------------------- ----------
F:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\ORCL\USERS01 4
.DBF
F:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\ORCL\SYSAUX0 3
1.DBF
F:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\ORCL\UNDOTBS 2
01.DBF
F:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\ORCL\SYSTEM0 1
1.DBF
FILE_NAME FILE_ID
-------------------------------------------------- ----------
F:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\ORCL\EXAMPLE 5
01.DBF
D:\TEST.DBF 6
已选择6行。
将test.dbf扩展到10M
SQL> alter database datafile 6 resize 10m;
数据库已更改。
然后回到之前的session
SQL> insert into tt select * from tt;
已创建2560行。
挂起的操作此时完成了
另外可以设置挂起时间,10秒
SQL> alter session enable resumable timeout 10;
会话已更改。
。。。。。。
然后挂起10秒后,还没有处理该问题就报错
SQL> insert into tt select * from tt;
已创建5120行。
SQL>
SQL> insert into tt select * from tt;
已创建10240行。
SQL> insert into tt select * from tt;
insert into tt select * from tt
*
第 1 行出现错误:
ORA-30032: the suspended (resumable) statement has timed out
ORA-01653: unable to extend table SCOTT.TT by 128 in tablespace TEST
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24104518/viewspace-712745/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24104518/viewspace-712745/
本文介绍了Oracle数据库中表空间的使用情况监控方法,包括如何扩展表空间、创建表及插入数据的影响,并详细展示了段收缩的过程及其效果。此外,还讨论了如何管理可恢复空间,通过设置可恢复选项来处理表空间满的问题。
1608

被折叠的 条评论
为什么被折叠?



