日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

缩小数据文件尺寸报ORA-03297的处理办法

發(fā)布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 缩小数据文件尺寸报ORA-03297的处理办法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【轉(zhuǎn)自】http://space.itpub.net/48361/viewspace-253106

?

最近歷史數(shù)據(jù)庫磁盤空間不足,而有一個表空間有50個G容量,但是實際只占100m的空間,
使用ALTER TABLE table SHRINK SPACE CASCAD后大部分數(shù)據(jù)文件可以調(diào)整,當試圖調(diào)整其中一個數(shù)據(jù)文件尺寸的時候報
RA-03297: file contains used data beyond requested RESIZE value
說明這個文件不能通過降低hwm來釋放空間了。


數(shù)據(jù)庫版本:oracle 10.2.1
--找到數(shù)據(jù)文件對應的文件號
SQL>select file#,name from v$datafile where name like '%BASEINFO.dbf';
5???????????????? ?/data/eucpdb/eucpdb/BASEINFO.dbf

找到文件中最大的塊號
SQL>select max(block_id) from dba_extents where file_id=5 ;

1213833

--查看數(shù)據(jù)庫塊大小
SQL>show parameter db_block_size

db_block_size integer 8192

計算一下文件中最大使用塊占用的位置
SQL>select 1213833*8/1024 from dual;

9483.0703125 M

--為了驗證上面做法的準確性,下面做一個試驗??????????????????????

--調(diào)整前數(shù)據(jù)文件大小為10000M
--現(xiàn)在調(diào)整數(shù)據(jù)庫文件為9500M
SQL>ALTER DATABASE DATAFILE '/data/eucpdb/eucpdb/BASEINFO.dbf' RESIZE 9500M
? 2? /

數(shù)據(jù)庫已更改

--調(diào)整文件為 9400m

SQL>ALTER DATABASE DATAFILE '/data/eucpdb/eucpdb/BASEINFO.dbf' RESIZE 9400M
? 2? /


SQL> ALTER DATABASE DATAFILE '/data/eucpdb/eucpdb/BASEINFO.dbf' RESIZE 9400M;
ALTER DATABASE DATAFILE '/data/eucpdb/eucpdb/BASEINFO.dbf' RESIZE 9400M
*
第 1 行出現(xiàn)錯誤:
ORA-03297: 文件包含在請求的 RESIZE 值以外使用的數(shù)據(jù)

--看來了上面的計算是準確的


SQL> col segment_name format a30
SQL> SET LIN 200??
SQL> select segment_name,segment_type,tablespace_name,extent_id,bytes,blocks from dba_extents where file_id=5 and?? block_id='1213833';

SEGMENT_NAME?????????????????? SEGMENT_TYPE?????? TABLESPACE_NAME???????????????? EXTENT_ID????? BYTES???? BLOCKS
------------------------------ ------------------ ------------------------------ ---------- ---------- ----------
REGISTRYINFO?????????????????? TABLE????????????? BASEINFO?????????????????????????????? 25???? 524288???????? 64

SQL>

SQL>? ALTER TABLE eucpmanager.REGISTRYINFO SHRINK SPACE CASCADE;

表已更改。


創(chuàng)建一個新的表空間,把block_id比較高的幾個表移出表空間

SQL> CREATE SMALLFILE TABLESPACE "BASEINFO_BAK" DATAFILE '/data/eucpdb/eucpdb/baseinfo_bak.dbf' SIZE 100M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
? 2? /

表空間已創(chuàng)建。

SQL> alter user eucpmanager quota unlimited on BASEINFO_BAK;

用戶已更改。


把block_id比較高的幾個表移動到新的表空間

SELECT DISTINCT SEGMENT_NAME FROM DBA_EXTENTS WHERE TABLESPACE_NAME='BASEINFO' AND FILE_ID=5 and block_id>1159985 and segment_type='TABLE' ;

SQL> SELECT distinct? 'alter table '|| SEGMENT_NAME||' move tablespace baseinfo_bak; ' FROM DBA_EXTENTS WHERE TABLESPACE_NAME='BASEINFO' AND FILE_ID=5 and block_id>1159985 and segment_type='TABLE' ;

'ALTERTABLE'||SEGMENT_NAME||'MOVETABLESPACEBASEINFO_BAK;'
----------------------------------------------------------------------------------------------------------------------------
alter table ENTERPRISESERVICEINFO move tablespace baseinfo_bak;
alter table REGISTRYFEEDETAILEX move tablespace baseinfo_bak;
alter table ENTERPRISEROUTE move tablespace baseinfo_bak;
alter table REGISTRYAUTHINFO move tablespace baseinfo_bak;
alter table ENTERPRISEBASEINFO move tablespace baseinfo_bak;

SQL> alter table ENTERPRISESERVICEINFO move tablespace baseinfo_bak;
alter table REGISTRYFEEDETAILEX move tablespace baseinfo_bak;
alter table ENTERPRISEROUTE move tablespace baseinfo_bak;
alter table REGISTRYAUTHINFO move tablespace baseinfo_bak;
alter table ENTERPRISEBASEINFO move tablespace baseinfo_bak;
表已更改。

SQL>
表已更改。

SQL>
表已更改。

SQL>
表已更改。

告警日志中會出現(xiàn)下面的內(nèi)容,索引需要重建
Thu Apr 24 14:20:21 2008
Some indexes or index [sub]partitions of table EUCPMANAGER.ENTERPRISEBASEINFO have been marked unusable


把下面的執(zhí)行結(jié)果的語句執(zhí)行所有重建
?SELECT distinct? 'alter INDEX '|| SEGMENT_NAME||' REBUILD TABLESPACE BASEINFO_BAK; ' FROM DBA_EXTENTS WHERE TABLESPACE_NAME='BASEINFO' AND FILE_ID=5 and block_id>1159985 and segment_type='INDEX' ;
?
?
?alter INDEX PK_ENTERPRISEBASEINFO REBUILD TABLESPACE BASEINFO_BAK;
alter INDEX PK_REGISTRYINFO REBUILD TABLESPACE BASEINFO_BAK;
alter INDEX PK_REGISTRYFEEDETAILEX REBUILD TABLESPACE BASEINFO_BAK;
alter INDEX UNI_REGISTRYAUTHINFO REBUILD TABLESPACE BASEINFO_BAK;
alter INDEX UNI_REGISTRYAUTHINFO REBUILD TABLESPACE BASEINFO_BAK;
alter INDEX UNI_REGISTRYAUTHINFO REBUILD TABLESPACE BASEINFO_BAK;
alter INDEX UNI_REGISTRYAUTHINFO REBUILD TABLESPACE BASEINFO_BAK;
alter INDEX UNI_REGISTRYAUTHINFO REBUILD TABLESPACE BASEINFO_BAK;


再次修改數(shù)據(jù)文件大小


SQL>? select max(block_id) from dba_extents where file_id=5 ;

MAX(BLOCK_ID)
-------------
???????? 3209

SQL> ALTER DATABASE DATAFILE '/data/eucpdb/eucpdb/BASEINFO.dbf' RESIZE 1000m;

數(shù)據(jù)庫已更改。

數(shù)據(jù)庫文件的空間已經(jīng)調(diào)整成功了

SQL>

--把挪走的表在挪回來


SQL> alter table ENTERPRISESERVICEINFO move tablespace baseinfo;
alter table REGISTRYFEEDETAILEX move tablespace baseinfo;
alter table ENTERPRISEROUTE move tablespace baseinfo;
alter table REGISTRYAUTHINFO move tablespace baseinfo;
alter table ENTERPRISEBASEINFO move tablespace baseinfo;
alter table registryinfo move tablespace baseinfo;
表已更改。

SQL>
表已更改。


--重建索引
SQL>
SQL>
SQL> ALTER INDEX PK_REGISTRYINFO REBUILD TABLESPACE BASEINFO;
ALTER INDEX AK_REGISTRYCODE_REGISTRYINFO REBUILD TABLESPACE BASEINFO;
ALTER INDEX PK_ENTERPRISEBASEINFO REBUILD TABLESPACE BASEINFO;
ALTER INDEX PK_ENTERPRISESERVICEINFO REBUILD TABLESPACE BASEINFO;
ALTER INDEX UNI_REGISTRYAUTHINFO REBUILD TABLESPACE BASEINFO;
ALTER INDEX PK_REGISTRYFEEDETAILEX REBUILD TABLESPACE BASEINFO;

索引已更改。


SQL> SELECT COUNT(*) FROM DBA_SEGMENTS WHERE TABLESPACE_NAME='BASEINFO_BAK' ;

? COUNT(*)
----------
???????? 0

已經(jīng)沒有對象在新建的這個表空間了。現(xiàn)在刪除掉

SQL> drop tablespace baseinfo_bak;

表空間已刪除。


到此調(diào)整已經(jīng)結(jié)束了。
其實調(diào)整方法有很多,如用imp/exp等
如果我的做法有什么不足之處請執(zhí)教,誰有更好的辦法歡迎提供,本人水平有限。

?

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的缩小数据文件尺寸报ORA-03297的处理办法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。