1.创建表空间:
create tablespace <tablespace_name> datafile '<filepath>' size <filesize> autoextend on next <autosize> maxsize <maxsize [unlimited]>
eg:
create tablespace sales datafile 'c:\1.txt' size 10m autoextend on next 1m maxsize 100m
2.为表空间增加数据文件:
alter tablespace <tablespace_name> add datafile 'filepath' size <filesize> autoextend on next <autosize> maxsize filemaxsize[unlimited];
eg:
alter tablespace sales datafile 'c:\2.txt' size 10m autoextend on next 1m maxsize unlimited
3.调整表空间:
alter database datafile 'filepath' resize <filesize>;--重置表空间的大小
eg:
alter database datafile 'c:\2.txt' resize 10m
在实际使用中我们经常会遇到oracle某个表空间占用了大量的空间而其中的数据量却只占用了少量空间,此时我们可以用ALTER DATABASE DATAFILE '***.dbf' RESIZE nnM的命令来收缩表空间,但在收缩的过程中会遇到ora-03297错误,表示在所定义的空间之后有数据存在,不能收缩,此时的解决办法有:
(1). 先估算该表空间内各个数据文件的空间使用情况:
SQL>select file#,name from v$datafile;
SQL>select max(block_id) from dba_extents where file_id=11;
MAX(BLOCK_ID)
-------------
13657
SQL>show parameter db_block_size
NAME TYPE VALUE
----------------------------- ------- ----------- db_block_size integer 8192
SQL>select 13657*8/1024 from dual;
13657*8/1024
-----------
106.695313
这说明该文件中最大使用块位于106M与107M之间,
SQL> alter database datafile '/ora_data/cninsite/insitedev02.dbf' resize 100M;
alter database datafile '/ora_data/cninsite/insitedev02.dbf' resize 100M
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value
SQL> alter database datafile '/ora_data/cninsite/insitedev02.dbf' resize 107M;
Database altered.
(2).如果某些表占用了数据文件的最后一些块,则需要先将该表导出或移动到其他的表空间中,然后删除表,再进行收缩。不过如果是移动到其他的表空间,需要重建其索引。
SQL> alter table t_obj move tablespace t_tbs1;
(2)删除某个表空间中的某个数据文件
export该表空间的内容:expdp 用户名/密码 DUMPFILE=XXX.dmp tablespaces=xxx;
1) shutdown (abort)
2) startup mount
3) alter database datafile 'fullpath_of_removed_DF ' offline drop
在非归档模式下,可以使用... offline drop,在归档模式下,使用... offline
这个命令的意思并不是从表空间将这个数据文件彻底删除,而是说将这个数据文件“冻结”住:它的scn不在变化,不会再向它写入任何数据;但是原有存在这个文件中对象和数据还可以继续使用。因此在使用这个命令后,通过修改控制文件将它删除,数据库在启动时就会报文件丢失的错误,并且会在数据字典中产生一个MISGXXXXX的纪录。因此,以一个数据文件是无法被直接从数据库中删除掉的。
刪除表格空間.
SQL> DROP TABLESPACE users INCLUDING CONTENTS and datafiles;
在drop users表空間時遇到如下錯誤﹕
SQL> DROP TABLESPACE users INCLUDING CONTENTS and datafiles;
DROP TABLESPACE users INCLUDING CONTENTS and datafiles
*
ERROR 在行 1:
ORA-12919: 無法刪除預設永久表格空間
原來在oracle10g中﹐必須為數據庫指定一個默認的永久表空間。而默認是users表空間﹐所以會出現上面的錯誤信息。
把默認的永久表空間改為system表空間就可以了﹕
SQL> alter database default tablespace system;
4) SQL> alter database open
5)重建被drop掉的表空间,再import前面备份的表空间
impdp 用户名/密码 DUMPFILE=XXX.dmp tablespaces=xxx;
4.关闭表空间的自动扩展属性:
alter database datafile 'filepath' autoextend off
eg:
alter database datafile 'c:\2.txt' autoextend off
5.打开表空间的自动扩展属性:
alter database datafile 'filepath' autoextend on
eg:
alter database datafile 'c:\2.txt' autoextend on
6.使表空间脱机:
alter tablespace tablespace_name offline
7.使表空间联机:
alter tablespace tablespace_name online
8.设置表空间为只读:
alter tablespace tablespace_name read only
9.设置表空间为读写:
alter tablespace tablespace_name read write
11.删除表空间:
drop tablespace tablespace_name
12.删除表空间的同时,删除数据文件
drop tablespace tablespace_name including contents and datefiles
13.查看每个表空间占用空间的大小:
select tablespace_name,sum(bytes)/1024/1024 from dba_segments group by tablespace_name
10.oracle中如何移动控制文件,数据文件,日志文件
oracle9i/10G-xG中移动控制文件,数据文件,日志文件
ORACLE数据库由数据文件,控制文件和联机日志文件三种文件组成。
windows环境中用: host copy 或 host move 其它均相同。
以下是unix或linux环境中,
一.移动数据文件:
ALTER TABLESPACE方法(联机状态):
用此方法,要求此数据文件既不属于SYSTEM表空间,也不属于含有ACTIVE回滚段或临时段的表空间。
$ sqlplus '/as sysdba'
#把需要移动的数据文件对应的表空间offline
SQL> alter tablespace ipas_acct_data offline
#把数据文件cp到想要放的目录下。
SQL> !mv /opt/oracle/wacosdata/ipas_acct_data001.dbf /opt/oracle/nms/oradata/ipas_acct_data001.dbf
#修改表空间中数据库文件的位置。
SQL> alter tablespace ipas_acct_data rename datafile '/opt/oracle/wacosdata/ipas_acct_data001.dbf' to '/opt/oracle/nms/oradata/ipas_acct_data001.dbf'
#把表空间online。
SQL> alter tablespace ipas_acct_data online
#查看修改结果。
SQL> select file_name from dba_data_files where tablespace_name = 'IPAS_ACCT_DATA';
ALTER DATABASE方法(脱机状态):
用此方法,可以移动任何表空间的数据文件。
$ sqlplus '/as sysdba'
SQL> shutdown immediate
SQL> !mv /opt/oracle/oradata/wacos002.dbf /ora10g/oradata/wacos002.dbf
SQL> startup mount
SQL> alter database rename file '/opt/oracle/oradata/wacos002.dbf' to '/ora10g/oradata/wacos002.dbf';
SQL> alter database open;
SQL> set head off
SQL> SELECT file_name from dba_data_files where tablespace_name = 'WACOS';
二. 移动控制文件:
$ sqlplus '/as sysdba'
#我是用的spfile启动的,spfile文件不能修改,所以要做这一步。
SQL> create pfile from spfile
#关闭数据库。
SQL> shutdown immediate
#cp控制文件到目标位置。
SQL>cp /opt/oracle/oradata/control* /opt/oracle/oratest/
修改$ORACLE_HOME/dbs/init$ORACLE_SID.ora 文件中的控制文件的位置。
#启动数据库指定参数文件。
SQL> startup pfile='/opt/oracle/product/9.2.0.4/dbs/init$ORACLE_SID.ora'
#下次启动数据库是直接就可以用startup启动了。
SQL> create spfile from pfile;
三. 移动重做日志文件:
$ sqlplus '/as sysdba'
#关闭数据库。
SQL> shutdown immediate
#cp日志文件到目标位置。
SQL> !cp /opt/oracle/oradata/redo* /opt/oracle/oratest/
#让数据库以mount模式启动。
SQL>startup mount;
#修改数据库中日志文件的位置。
SQL> alter database rename file '/opt/oracle/oradata/redo01.log' to '/opt/oracle/oratest/redo01.log'
SQL> alter database rename file '/opt/oracle/oradata/redo02.log' to '/opt/oracle/oratest/redo02.log'
SQL> alter database rename file '/opt/oracle/oradata/redo03.log' to '/opt/oracle/oratest/redo03.log'
#修改数据库的状态。
SQL> alter database open;
#查看修改结果。
SQL> select * from v$logfile;
增加重做日志文件
alter database add logfile 'D:\oracle\oradata\ge01\redo04.log' size 100M;
管理临时表空间
注意:TEMP数据文件不能移动,只能通过重建临时表空间来重建,方法如下:
尤其值得注意:重建临时表空间的大小一定要足够大,一定要大于或等于现有临时表空间的大小,否则会出现:提示:无法通过128(在表空间temp中)扩展 temp段。
====================================================================================
Oracle9i为我们提供了一个全局的临时表空间。有的时候我们会发现在做了大量的排序操作后,temp表空间并没有去释放,而且在更大的程度上面占用了我们的磁盘空间,其实我们可以通过重建或者切换的手段来使我们的temp表空间得到重生。
首先我们可以先看一下,当前用户所属的临时表空间有那些
SQL> select username ,temporary_tablespace from dba_users;
USERNAME TEMPORARY_TABLESPACE
------------------------------ ------------------------------
SYS TEMP
SYSTEM TEMP
DBSNMP TEMP
HUJINPEI TEMP
ALAN1 TEMP
PERFUSER TEMP
ALAN2 TEMP
MYUSER TEMP
OUTLN TEMP
WMSYS TEMP
已选择10行。
查看当前有那些临时文件
SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
D:\ORACLE\ORADATA\ICMNLSDB\TEMP_01.DBF
D:\ORACLE\ORADATA\ICMNLSDB\TEMP_02.DBF
为了切换这个临时文件,我们可以重新建立一个临时表空间
SQL> create temporary tablespace temp2 tempfile 'D:\ORACLE\ORADATA\ICMNLSDB\TEMP01.DBF' size 10M ;
表空间已创建。
SQL> alter tablespace temp2 add tempfile 'D:\ORACLE\ORADATA\ICMNLSDB\TEMP02.DBF' size 10M;
表空间已更改。
这个时候我们就可以将刚刚建好的TEMP表空间设置为我们数据库默认的临时表空间:
SQL> alter database default temporary tablespace temp2;
数据库已更改。
SQL> select username,temporary_tablespace from dba_users;
USERNAME TEMPORARY_TABLESPACE
------------------------------ ---------------------------
SYS TEMP2
SYSTEM TEMP2
DBSNMP TEMP2
HUJINPEI TEMP2
ALAN1 TEMP2
PERFUSER TEMP2
ALAN2 TEMP2
MYUSER TEMP2
OUTLN TEMP2
WMSYS TEMP2
已选择10行。
当然我们还可以选择DROP掉以前旧的TEMP的表空间
SQL> drop tablespace temp including contents ;
表空间已丢弃。
临时表空间组
Oracle 10g 引进了临时表空间组(temporary tablespace group)的概念,它允许用户在不同的会话中同时利用多个临时表空间。
1. 临时表空间组的主要特征
? 一个临时表空间组必须由至少一个临时表空间组成,并且无明确的最大数量限制。
? 如果删除了一个临时表空间组的所有成员,该组也自动被删除。
? 临时表空间的名字不能与临时表空间组的名字相同。
? 在给用户分配一个临时表空间时,可以使用临时表空间组的名字代替实际的临时表空间名;在给数据库分配默认临时表空间时也可以使用临时表空间组的名字。
2. 临时表空间组的有点
使用临时表空间组而非普通的临时表空间,有如下好处:
? 由于SQL查询可以并发使用几个临时表空间进行排序操作,因此SQL查询很少会出现排序空间超出,避免当临时表空间不足时所引起的磁盘排序问题。
? 可以在数据库级指定多个默认临时表空间。
? 一个并行操作的并行服务器将有效地利用多个临时表空间。
? 一个用户在不同会话中可以同时使用多个临时表空间。
注意:从Oracle10gR2开始,使用RMAN恢复数据库之后,Oracle会自动重新创建临时文档,由于临时文档是Sparse File,所以创建会很迅速,通常您不会感觉得到。
3. 管理 临时表空间组
临时表空间组是在创建临时表空间时通过指定GROUP字句创建的。可以将一个表空间从一个组移动另一个组,或是从一个组中删除临时表空间,或是往组里添加新的表空间。
1. 创建临时表空间组
创建临时表空间时指定GROUP:
CREATE SMALLFILE TEMPORARY TABLESPACE "TEMP01"
TEMPFILE '/opt/oracle/oradata/ge01/temp01.dbf' SIZE 50M REUSE
AUTOEXTEND ON NEXT 5M MAXSIZE 500M EXTENT MANAGEMENT LOCAL
UNIFORM. SIZE 1M TABLESPACE GROUP TMP_GROUP_1;
CREATE SMALLFILE TEMPORARY TABLESPACE "TEMP02"
TEMPFILE '/opt/oracle/oradata/ge01/temp02.dbf' SIZE 50M REUSE
AUTOEXTEND ON NEXT 5M MAXSIZE 500M EXTENT MANAGEMENT LOCAL
UNIFORM. SIZE 1M TABLESPACE GROUP "TMP_GROUP_1";
2. 查询临时表空间组
SELECT * FROM DBA_TABLESPACE_GROUPS
GROUP_NAME TABLESPACE_NAME
------------- ------------------
TBS_GROUP_1 TEMP01
TBS_GROUP_1 TEMP02
TBS_GROUP_2 TEMP03
TBS_GROUP_2 TEMP04
3. 临时表空间的移动
可以将“未分组”或“已分组”的临时表空间移动到指定的 临时表空间中,或者是移出:
?将未分组的临时表空间TEMP_01加入分组TBS_GROUP_1
ALTER TABLESPACE TEMP TABLESPACE GROUP "TMP_GROUP_1";
4. 把临时表空间组指定给用户
?查看用户的默认表空间
SELECT USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE FROM DBA_USERS;
?创建用户时指定
CREATE USER zhangzj IDENTITY BY zhangzj
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE tbs_group_1
?修改已有用户
ALTER USER gedb TEMPORARY TABLESPACE TMP_GROUP_1;
5. 设置数据库默认临时表空间组
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TMP_GROUP_1;
6. 同一个用户的不同session使用不同的临时表空间
首先用sys用户查询:
SELECT USERNAME, SESSION_NUM, TABLESPACE FROM V$SORT_USAGE
测试过程:
新开session1执行
SQL> conn zhangzj/zhangzj
已连接。
SELECT A.TABLE_NAME, B.TABLE_NAME FROM DICT A, DICT B ORDER BY A.TABLE_NAME
新开session2执行
SQL> conn zhangzj/zhangzj
已连接。
SELECT A.TABLE_NAME, B.TABLE_NAME FROM DICT A, DICT B
sys查询:
SQL> SELECT USERNAME, SESSION_NUM, TABLESPACE FROM V$SORT_USAGE;
USERNAME SESSION_NUM TABLESPACE
----------- -------------- -------------
ZHANGZJ 35743 TEMP01
ZHANGZJ 25683 TEMP02
可以发现,同一个用户ZHANGZJ的两个session分别使用了两个不同的临时表空间。
6. 删除临时表空间组
即:删除组成临时表空间组的所有临时表空间
先查看要删除的 临时表空间组包含哪些 临时表空间
SELECT * FROM DBA_TABLESPACE_GROUPS
然后删除 这些临时表空间,即可
DROP TABLESPACE TEMP01 INCLUDING CONTENTS AND DATAFILES
DROP TABLESPACE TEMP02 INCLUDING CONTENTS AND DATAFILES
---------------------------------------------------------------------
11.查询表空间的信息:
select tablespace_name,bytes/1024/1024 file_size_mb,file_name from DBA_DATA_FILES
--注意数据库中的实体都是以大写表示
12 如果在数据库创建期间没有指定默认表空间,它将默认为 SYSTEM。但您如何才能知道现有的数据库的默认表空间是哪一个?发出以下查询:
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE';
DATABASE_PROPERTIES 视图显示默认表空间之外,还显示一些非常重要的信息 — 例如默认临时表空间、全局数据库名、时区等
13 在 Oracle Database 10g 中,您可以类似地为用户指定一个默认表空间。在数据库创建期间,CREATE DATABASE 命令可以包含子句 DEFAULT TABLESPACE 。在创建之后,您可以通过发出以下命令来使一个表空间变成默认表空间:
ALTER DATABASE DEFAULT TABLESPACE <tsname>;
14 重命名一个表空间
在数据仓库环境中(典型地,对于数据中心体系结构),在数据库之间传输表空间是很常见的。但源数据库和目标数据库必须不存在拥有相同名称的表空间。如果存在两个拥有相同名称的表空间,则目标表空间中的段必须转移到一个不同的表空间中,然后重新创建这个表空间— 这个任务说起来容易做起来难。
Oracle Database 10g 提供了一个方便的解决方案:您可以用以下命令来简单地重命名一个现有的表空间(SYSTEM 和 SYSAUX 除外) — 无论是永久表空间还是临时表空间:
ALTER TABLESPACE <oldname> RENAME TO <newname>;
一个重要的包DBMS_SPACE_ADMIN:
这个包为本地管理的所有表空间提供带有故障诊断和修复功能的管理程序。
包含的管理程序有:
SEGMENT_VERIFY:验证该段盘区映射的一致性
SEGMENT_CURRUPT:标注该段为损坏或有效,以便执行恰当的错误恢复
SEGMENT_DROP_CORRUPT:取消一个当前标注为损坏的段(不回收空间)
SEGMENT_DUMP:卸下一个给定段的段头部和盘区映射
TABLESPACE_VERIFY:验证该表空间中段的位图和盘区映射是否同步
TABLESPACE_REBUILD_BITMAPS: 重建适当的位图
TABLESPACE_FIX_BITMAPS:在位图中标注适当的数据块地址范围为空闲或已用
TABLESPACE_REBUILED_QUOTAS:为给定表空间重建限额
TABLESPACE_MIGERATE_FROM_LOCAL:将一个本地管理的表空间移植为字典管理的表空间
TABLESPACE_MIGRATE_TO_LOCAL:将一个字典管理的表空间移植为本地管理的表空间
TABLESPACE_RELOCATE_BITMAPES:将位图重定位到指定的目的地
TABLESPACE_FIX_SEGMENT_STATES:修改移植被放弃的表空间中数据段的状态
一些有关表空间信息的表或视图:
V$TABLESPACE:来自控制文件的所有表空间的名称和编号
DBA_TABLESPACE,USER_TABLESPACE:所有用户的表空间说明
DBA_SEGMENTS,USER_SEGMENTS:所有用户表空间种段的信息
DBA_EXTENTS,USER_EXTENTS:所有用户表空间中数据盘区的信息
DBA_FREE_SPACE,USER_FREE_SPACE:所有用户表空间中的空闲盘区的信息
V$DATAFILE:关于所有数据文件的信息,包括所属表空间和表空间号
V$TEMPFILE:关于所有临时文件的信息,包括所属表空间和表空间号
DBA_DATA_FILES:显示属于表空间的数据文件
DBA_TEMP_FILES:显示属于表空间的临时文件
V$TEMP_EXTENT_MAP:所有本地管理的临时表空间中所有盘区的信息
V$TEMP_EXTENT_POOL:由每个实例缓存和使用临时表空间(本地管理的)的状态
V$TEMP_SPACE_HEADER:显示每个临时文件的已用/空闲空间
DBA_USERS:所有用户默认的和临时表空间
DBA_TS_QUOTAS:列出所有用户表空间限额
V$SORT_SEGMENT:关于一个给定实例的每个排序段的信息,只有在表空间是TEMPOARY:类型时更新
V$SORT_USER:用户使用的临时排序空间和临时的/永久的表空间
1.如果lz是因为drop table时没有purge,或者说recyclebin里还有其他东西的话,那么需要先“purge recyclebin”,再试试。
2.如果lz已经purge了recyclebin,那很有可能是因为有其他segment在datafile的末尾,需要你找到哪个segment在末尾。
一个小实验:
[oracle@oracle ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jun 8 18:32:40 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba
Connected.
SQL> create tablespace testonce datafile '/u01/app/oradata/test/leviton01.dbf' size 50m;
Tablespace created.
SQL> create table testonce tablespace testonce as select * from dba_objects;
Table created.
SQL> insert into testonce select * from testonce;
50559 rows created.
SQL> /
101118 rows created.
SQL> /
202236 rows created.
SQL> /
insert into testonce select * from testonce
*
ERROR at line 1:
ORA-01653: unable to extend table SYS.TESTONCE by 128 in tablespace TESTONCE
SQL> commit;
Commit complete.
SQL> select sum(BYTES/1024/1024) MB from dba_extents where SEGMENT_NAME='TESTONCE';
MB
----------
49
SQL> create table testonce2 (id number) tablespace testonce;
Table created.
SQL> insert into testonce2 values(1);
1 row created.
SQL> commit;
Commit complete.
SQL> select SEGMENT_NAME,min(BLOCK_ID),max(BLOCK_ID) from dba_extents where TABLESPACE_NAME='TESTONCE'
2 ;
select SEGMENT_NAME,min(BLOCK_ID),max(BLOCK_ID) from dba_extents where TABLESPACE_NAME='TESTONCE'
*
ERROR at line 1:
ORA-00937: not a single-group group function
SQL> select SEGMENT_NAME,min(BLOCK_ID),max(BLOCK_ID) from dba_extents where TABLESPACE_NAME='TESTONCE'
2 group by SEGMENT_NAME;
SEGMENT_NA MIN(BLOCK_ID) MAX(BLOCK_ID)
---------- ------------- -------------
TESTONCE 9 6153
TESTONCE2 6281 6281
前面49M的空间是TESTONCE这张表,TESTONCE2从49.07MB开始占用datafile
SQL> select 6281*8192/1024/1024 from dual;
6281*8192/1024/1024
-------------------
49.0703125
SQL> select SEGMENT_NAME,min(BLOCK_ID),max(BLOCK_ID),min(EXTENT_ID),max(EXTENT_ID) from dba_extents where TABLESPACE_NAME='TESTONCE'
2 group by SEGMENT_NAME;
SEGMENT_NA MIN(BLOCK_ID) MAX(BLOCK_ID) MIN(EXTENT_ID) MAX(EXTENT_ID)
---------- ------------- ------------- -------------- --------------
TESTONCE 9 6153 0 63
TESTONCE2 6281 6281 0 0
SQL> select SEGMENT_NAME,BLOCK_ID,EXTENT_ID from dba_extents where TABLESPACE_NAME='TESTONCE'
2 ;
SEGMENT_NA BLOCK_ID EXTENT_ID
---------- ---------- ----------
TESTONCE 9 0
TESTONCE 17 1
TESTONCE 25 2
TESTONCE 33 3
TESTONCE 41 4
TESTONCE 49 5
TESTONCE 57 6
TESTONCE 65 7
TESTONCE 73 8
TESTONCE 81 9
TESTONCE 89 10
SEGMENT_NA BLOCK_ID EXTENT_ID
---------- ---------- ----------
TESTONCE 97 11
TESTONCE 105 12
TESTONCE 113 13
TESTONCE 121 14
TESTONCE 129 15
TESTONCE 137 16
TESTONCE 265 17
TESTONCE 393 18
TESTONCE 521 19
TESTONCE 649 20
TESTONCE 777 21
SEGMENT_NA BLOCK_ID EXTENT_ID
---------- ---------- ----------
TESTONCE 905 22
TESTONCE 1033 23
TESTONCE 1161 24
TESTONCE 1289 25
TESTONCE 1417 26
TESTONCE 1545 27
TESTONCE 1673 28
TESTONCE 1801 29
TESTONCE 1929 30
TESTONCE 2057 31
TESTONCE 2185 32
SEGMENT_NA BLOCK_ID EXTENT_ID
---------- ---------- ----------
TESTONCE 2313 33
TESTONCE 2441 34
TESTONCE 2569 35
TESTONCE 2697 36
TESTONCE 2825 37
TESTONCE 2953 38
TESTONCE 3081 39
TESTONCE 3209 40
TESTONCE 3337 41
TESTONCE 3465 42
TESTONCE 3593 43
SEGMENT_NA BLOCK_ID EXTENT_ID
---------- ---------- ----------
TESTONCE 3721 44
TESTONCE 3849 45
TESTONCE 3977 46
TESTONCE 4105 47
TESTONCE 4233 48
TESTONCE 4361 49
TESTONCE 4489 50
TESTONCE 4617 51
TESTONCE 4745 52
TESTONCE 4873 53
TESTONCE 5001 54
SEGMENT_NA BLOCK_ID EXTENT_ID
---------- ---------- ----------
TESTONCE 5129 55
TESTONCE 5257 56
TESTONCE 5385 57
TESTONCE 5513 58
TESTONCE 5641 59
TESTONCE 5769 60
TESTONCE 5897 61
TESTONCE 6025 62
TESTONCE 6153 63
TESTONCE2 6281 0
65 rows selected.
SQL>
SQL> drop table TESTONCE purge;
Table dropped.
SQL> alter database datafile '/u01/app/oradata/test/leviton01.dbf' resize 48m;
alter database datafile '/u01/app/oradata/test/leviton01.dbf' resize 48m
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value
SQL> drop table TESTONCE2;
Table dropped.
SQL> alter database datafile '/u01/app/oradata/test/leviton01.dbf' resize 48m;
alter database datafile '/u01/app/oradata/test/leviton01.dbf' resize 48m
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value
SQL> purge recyclebin;
Recyclebin purged.
这时,因为TESTONCE2的尸体还在datafile的末尾,所以不行。
SQL> alter database datafile '/u01/app/oradata/test/leviton01.dbf' resize 48m;
Database altered.
SQL> alter database datafile '/u01/app/oradata/test/leviton01.dbf' resize 1m;
Database altered.