Oracle表空间操作详解

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.

你可能感兴趣的:(oracle,sql,数据库,session,File,database)