Oracle表空間操作詳解

lyf625發表於2011-06-09

1.建立表空間:

create tablespace datafile '' size autoextend on next maxsize

eg:

create tablespace sales datafile 'c:\1.txt' size 10m autoextend on next 1m maxsize 100m

2.為表空間增加資料檔案:

alter tablespace add datafile 'filepath' size autoextend on next 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 ;--重置表空間的大小

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 ;
 
14 重新命名一個表空間

在資料倉儲環境中(典型地,對於資料中心體系結構),在資料庫之間傳輸表空間是很常見的。但源資料庫和目標資料庫必須不存在擁有相同名稱的表空間。如果存在兩個擁有相同名稱的表空間,則目標表空間中的段必須轉移到一個不同的表空間中,然後重新建立這個表空間— 這個任務說起來容易做起來難。

Oracle Database 10g 提供了一個方便的解決方案:您可以用以下命令來簡單地重新命名一個現有的表空間(SYSTEM 和 SYSAUX 除外) — 無論是永久表空間還是臨時表空間:

  ALTER TABLESPACE RENAME TO ;
 


一個重要的包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.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13024285/viewspace-697479/,如需轉載,請註明出處,否則將追究法律責任。

相關文章