我們如何才能在oracle中收縮臨時表空間?以及爲什麼它增加了如此高達25 GB,因爲應用程序的數據庫中只有一個模式,數據表空間大小爲2 GB,索引表空間大小爲1 GB。如何在oracle中收縮臨時表空間?
回答
哦,我的天啊!看看我的臨時表空間的大小! 或...如何縮小Oracle中的臨時表空間。
是的,我跑了查詢,看看我的臨時表空間有多大:
SQL> SELECT tablespace_name, file_name, bytes
2 FROM dba_temp_files WHERE tablespace_name like 'TEMP%';
TABLESPACE_NAME FILE_NAME BYTES
----------------- -------------------------------- --------------
TEMP /the/full/path/to/temp01.dbf 13,917,200,000
你要問的第一個問題是,爲什麼臨時表空間是如此之大。 你可能知道這個問題的答案。這可能是由於您的一個大錯誤(我已經多次完成了 )才運行的大型查詢。這可能是由於其他特殊情況。如果這種情況是 ,那麼清理所需要做的只是縮小臨時表空間,然後繼續前進。
但是如果你不知道怎麼辦?在決定縮小之前,您可能需要對大表空間的原因進行一些調查。如果這發生在定期的 上,那麼您的數據庫可能只需要這麼多的空間。
動態性能視圖
V$TEMPSEG_USAGE
可以是確定的原因是非常有用的。
也許你只是不在乎原因,你只需要縮小它。 這是你工作的第三天。如果數據和臨時表空間是13GiB,那麼數據庫中的數據只有200MiB - 只需將其縮小並繼續。 如果它再次增長,那麼我們將研究原因。與此同時,我在該磁盤捲上的空間不足 ,我只需要返回空間。
讓我們來看看縮小它。它將取決於您正在運行的Oracle的版本 以及臨時表空間的設置方式。
Oracle會盡最大努力防止出現任何可怕的錯誤 因此我們只會嘗試命令,如果它們不起作用,我們會以新的方式縮小 。
首先讓我們試着收縮數據文件。如果我們能夠做到這一點,那麼我們就會回到 的空間,我們可以擔心明天爲什麼會增長。
SQL>
SQL> alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M;
alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value
根據錯誤消息您可能需要使用不同尺寸 那些比文件的當前站點較小試試這個。我有限制 成功與此。如果臨時表空間 位於文件的開頭並且其大小小於 指定的大小,Oracle將只縮小文件。一些舊的Oracle文檔(他們糾正了這個)說 你可以發出命令,錯誤信息會告訴你你可以縮小的尺寸。當我開始作爲DBA工作時,這是 不正確。你只需猜測並重新運行命令 ,看看它是否工作。
好的。這沒有用。這個怎麼樣。
SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M;
如果你在11克(Maybee在10克太)這就是它!如果它有效,你可能想要 回到前面的命令並給它更多的嘗試。
但是,如果失敗了。如果臨時表空間是安裝數據庫時設置的默認臨時表空間 ,那麼您可能需要做更多的工作 。在這一點上,我通常會重新評估是否真的需要這個空間。所有磁盤空間只需要$ X.XX一個GiB。通常我不希望 在生產時間內進行這樣的更改。這意味着再次在2AM 工作! (不是說我真的反對 在凌晨2點工作 - 這只是...好吧,我也喜歡睡覺。而我的妻子 喜歡在凌晨2點讓我在家裏...不要在凌晨4點在市中心街道漫遊,試着 記得我在3小時前把我的車停在哪裏,我聽說過「遠程辦公」我的網絡連接 將會失敗 - 然後我不得不趕上市中心解決它所有鄉親在 早上顯示使用該數據庫。)
好吧......回到嚴肅的事情...... 如果你要收縮的臨時表空間是默認 臨時表空間,你將有先創建一個新的臨時表空間 ,將其設置爲默認臨時表空間,然後將 刪除舊的默認臨時表空間並重新創建它。後綴 刪除創建的第二個臨時表。
SQL> CREATE TEMPORARY TABLESPACE temp2
2 TEMPFILE '/the/full/path/to/temp2_01.dbf' SIZE 5M REUSE
3 AUTOEXTEND ON NEXT 1M MAXSIZE unlimited
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
Tablespace created.
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;
Database altered.
SQL> DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.
SQL> CREATE TEMPORARY TABLESPACE temp
2 TEMPFILE '/the/full/path/to/temp01.dbf' SIZE 256M REUSE
3 AUTOEXTEND ON NEXT 128M MAXSIZE unlimited
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
Tablespace created.
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
Database altered.
SQL> DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.
希望這些東西中的一個會有所幫助!
只是一個說明 - 收縮空間是在11g中引入的,並不適用於10g。感謝您對所有選項進行了非常全面的介紹! –
互聯網上的許多帖子和文章都提示了非常複雜的程序。這是我找到的最簡單的! –
非常感謝您提供清晰準確的解釋和解決方案。這是目前互聯網上最好的一個。 –
alter database datafile 'C:\ORA_SERVER\ORADATA\AXAPTA\AX_DATA.ORA' resize 40M;
如果它不能幫助:
- 創建新的表空間
- 切換到新的臨時表空間
- 等待,直到舊的表將不會被使用
- 刪除舊的表
用於管理tablespa的選項在8i開始的版本中,ces有更好的表現。如果您爲臨時表空間使用適當類型的文件(即本地管理的臨時文件),則尤其如此。
所以,這可能是因爲該命令,它會收縮你的表空間,以128兆那樣簡單......
alter tablespace <your_temp_ts> shrink space keep 128M;
Oracle的在線文檔是相當不錯的。 Find out more.
編輯
它會出現在OP具有數據庫的早期版本。在早期版本中,我們必須調整個別數據文件的大小。所以,首先找到文件名。一個或其他這些查詢應該這樣做的......
select file_name from dba_data_files where tablespace_name = '<your_temp_ts>'
/
select file_name from dba_temp_files where tablespace_name = '<your_temp_ts>'
/
然後使用該路徑在此命令:
alter database datafile '/full/file/path/temp01.dbf' resize 128m
/
SQL> alter tablespace temp shrink space keep 128M; alter tablespace temp shrink space keep 128M * 錯誤在第1行: ORA-02142:丟失或無效ALTER TABLESPACE選項 –
將增加,因爲你有一個需要臨時存儲空間,這可能是由於到笛卡爾產品或大型排序操作。
動態性能視圖V$TEMPSEG_USAGE
將有助於診斷原因。
它會在使用後顯示嗎? –
我不這麼認爲。 –
另一個原因可能是大量使用全局臨時表。 –
您應該已經編寫了您使用的Oracle版本。您最有可能使用的不是Oracle 11g,這就是爲什麼您無法縮小臨時表空間的原因。
替代方案:
1)alter database tempfile '[your_file]' resize 128M;
這可能會失敗
2)刪除並重新創建表空間。如果想要縮小的臨時表空間是您的默認臨時表空間,則可能必須先創建一個新的臨時表空間,將其設置爲默認臨時表空間,然後刪除舊的默認臨時表空間並重新創建它。之後放下創建的第二個臨時表。 3)對於Oracle 9i和更高的你可以只刪除臨時文件(S),並添加
一切都介紹的很詳細here一個新的(S)。
請參閱此鏈接:http://databaseguide.blogspot.com/2008/06/resizing-temporary-tablespace.html
它已經聯繫在一起,但也許你錯過了,所以這裏要再次重申。
我不萬一我需要在將來再次回收存儲下探備用臨時打擾...
- 從臨時組設置默認爲獨立溫度
- 等一會兒,然後調整臨時組的成員的大小
- 將默認設置恢復爲臨時組
- 等待一會,調整大小獨立臨時。有沒有急於做最後一步
- 1. oracle中的全局臨時表空間
- 2. 歸檔oracle表使用收縮空間
- 3. 如何知道Oracle中臨時表空間的用法
- 4. Oracle +壓縮+臨時空間使用情況
- 5. 如何清除在Oracle 10g服務器的臨時表空間,請提供
- 6. Oracle中的臨時表?
- 7. Oracle 10g臨時表
- 8. 在事務中截斷Oracle臨時表,截斷* ALL *臨時表
- 9. SQL臨時表空間爲空
- 10. 如何使用Oracle全局臨時表?
- 11. 臨時中間表
- 12. 在Oracle中更新臨時表數據
- 13. 臨時將數據存儲在Oracle的JTable或臨時表中
- 14. 如何使用git臨時作爲臨時空間?
- 15. 查詢Oracle中的臨時空間限制
- 16. Oracle全球臨時表
- 17. 全球臨時表Oracle
- 18. oracle全局臨時表
- 19. 如何在Oracle的子查詢中定義臨時表值
- 20. 如何在Oracle中使用或創建臨時表
- 21. 如何在Oracle數據庫中創建臨時表?
- 22. 如何在Oracle中創建臨時表+工會
- 23. 如何在oracle中避免全局臨時表pl/sql
- 24. 創建臨時表空間DB2
- 25. 回收後大的空間在Oracle
- 26. 使用查詢創建臨時表空間以確定Oracle中的大小
- 27. 在WP7/XAML翻譯後收縮空間
- 28. Oracle中的表空間
- 29. 臨時命名空間
- 30. 臨時表垃圾收集
什麼版本的Oracle? – BradC
你看過我的答案和它鏈接到的頁面嗎?我想知道你還需要什麼。 –