查找文件id:
select file#,name from v$datafile;找到文件中最大的块号(以18为例)
SQL> select max(block_id) from dba_extents where file_id=18;
MAX(BLOCK_ID)
-------------
244992--查看数据库块大小
SQL> show parameter db_block_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
计算大小SQL> select 244992*8/1024 from dual;
244992*8/1024
-------------
1914最后你resize到大于这个值的最小值:
ALTER DATABASE DATAFILE '/data/eucpdb/eucpdb/BASEINFO.dbf' RESIZE 2000M
select file#,name from v$datafile;找到文件中最大的块号(以18为例)
SQL> select max(block_id) from dba_extents where file_id=18;
MAX(BLOCK_ID)
-------------
244992--查看数据库块大小
SQL> show parameter db_block_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
计算大小SQL> select 244992*8/1024 from dual;
244992*8/1024
-------------
1914最后你resize到大于这个值的最小值:
ALTER DATABASE DATAFILE '/data/eucpdb/eucpdb/BASEINFO.dbf' RESIZE 2000M
可以参考这个博客:
http://blog.csdn.net/fm0517/article/details/5969553
剩余的不多,如果使用率比较高的话,就别压缩了。非要压缩,可以考虑:
1.move 到别的表空间,收缩文件,再 move 回来。
2.方法1 中,如果不想移回来,可以考虑把原 TS 干掉,再修改新 TS 间的名称(10g 及以上版本可用)。
3.exp/imp 一下。这 3 个方法,都要重建 IX,并且要手动收集一下统计信息。
可以参考这个博客:
http://blog.csdn.net/fm0517/article/details/5969553
我试验了还是不好用啊,不能resize数据文件
select file#,name from v$datafile;找到文件中最大的块号(以18为例)
SQL> select max(block_id) from dba_extents where file_id=18;
MAX(BLOCK_ID)
-------------
244992--查看数据库块大小
SQL> show parameter db_block_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
计算大小SQL> select 244992*8/1024 from dual;
244992*8/1024
-------------
1914最后你resize到大于这个值的最小值:
ALTER DATABASE DATAFILE '/data/eucpdb/eucpdb/BASEINFO.dbf' RESIZE 2000M
按照这个方法试验了,还是不能resize
以前人家有说过, 导出 ,再重新导入。
哦,必须datafile里面的块是连续的resize才好用呗
都是一个用户的数据,我把部分的表移动到新建的表空间,然后resize原来的数据文件,还是不允许resize。
另外,利用MOVE后,表上的索引会失效,注意应重建