由ora-30036引出的問題,給大表新增列的時候,不要設定預設值
今天同事在執行一個指令碼的時候,報了個錯,我一看,這是undo表空間滿了啊,然後我就單獨執行指令碼里內容,執行第一行執行了半個小時,也沒執行完,強制中斷後hang在那,造成了鎖表,常規的殺程式不好使,最後殺os程式才解決。第一行的內容是:
alter table BSVCBUSCANDATA add ISSHOW CHAR(1) default '0';
後來在半夜裡我又執行了一下,結果執行了2個小時也沒執行完,期間我不斷的查詢undo表空間的使用,發現已經超過了50%,最後還是強制中斷,hang在那不動了。
SELECT a.tablespace_name as tablespace_name,
to_char(b.total/1024/1024,999999.99) as Total,
to_char((b.total-a.free)/1024/1024,999999.99) as Used,
to_char(a.free/1024/1024,999999.99) as Free,
to_char(round((total-free)/total,4)*100,999.99) as Used_Rate
FROM (SELECT tablespace_name, sum(bytes) free FROM DBA_FREE_SPACE GROUP BY tablespace_name) a,
(SELECT tablespace_name, sum(bytes) total FROM DBA_DATA_FILES GROUP BY tablespace_name ) b
WHERE a.tablespace_name=b.tablespace_name
AND a.tablespace_name='UNDOTBS1'
ORDER BY a.tablespace_name;
我檢視了一下,發現 BSVCBUSCANDATA是一個大表,有300G左右,undo表空間有32G,重新修改 BSVCBUSCANDATA, 空間怎麼都不夠啊,最後肯定就滿了啊,就報了那個錯,我一開始想到的方法是刪除表裡的歷史資料,後來請教同事,同事說因為有預設default 0,所以才會重寫,這樣執行1天都執行不完,沒有default 0,不設定預設值,這一列馬上就新增上了。後來一試果然成功了。
總結:當我們在遇到undo表空間滿了時候,不要貿然的增加undo表空間尺寸,一定要搞清楚內因,為什麼會滿。在生產中,對一個大表進行操作的時候,一定要考慮好代價,特別是大規模DML工作,給表新增一列,不僅造成了資料庫的壓力,也造成了鎖表,而且這種鎖表透過在資料庫層面的kill,根本無濟於事,必須在os層面殺死。更重要的是:在生產中為一個海量大表新增一列的時候,千萬不要設定預設值。
附:
給undo表空間大小重新加大點的語句
alter database datafile '' resize 10G;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25116248/viewspace-1266847/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MYSQL中給時間列設定預設值MySql
- Python中如何給字典設定預設值Python
- javascript給函式引數設定預設值JavaScript函式
- mysql 刪表引出的問題MySql
- MySQL設定當前時間為預設值的方法MySql
- C#給自動屬性設定預設值C#
- Django的時區設定問題Django
- js給函式設定預設值程式碼例項JS函式
- 如何解決自增列賦值的問題賦值
- 設定SAP標準報表顯示介面預設值的方式
- 利用elementui,ant design的下拉給定預設值重新選擇檢視不會更新問題UI
- 臨時表空間的建立、刪除,設定預設臨時表空間
- 由“香蕉”引出的字串匹配演算法的問題字串匹配演算法
- SCSS 檔案裡的感嘆號用法 - 給變數設定預設值CSS變數
- pydantic 欄位的預設值設定獲取當前時間
- antdesign的表單中的下拉框設定預設值BUG處理
- 關於配置檔案中的預設值的問題
- sql設定欄位預設值SQL
- django 設定預設值到SQLDjangoSQL
- iOS 設定的textFiled的時候不能編輯iOS
- 【COLUMN】設定表欄位預設值僅對未來生效
- Golang技巧之預設值設定的高階玩法Golang
- laydate設定預設時分秒
- shmmax的設定問題HMM
- Oracle使用者預設表空間的問題Oracle
- 更改資料庫預設臨時表空間出現的小問題資料庫
- 前端定義一個物件的時候,key值如何設定為數字,並抽成常量前端物件
- Entity Framework 對映的時候預設給資料庫表名新增複數“s”或者“es”的解決辦法Framework資料庫
- 如何設定新資料庫的PGA值資料庫
- mysql-欄位設定Default值問題MySql
- MySQL欄位預設值設定詳解MySql
- ORACLE預設的臨時表空間Oracle
- SGA設定過大造成的系統效能問題
- zotero的同步設定問題
- iview 表單提交資料的時候驗證問題View
- golang連線MySQL時候的連線池設定GolangMySql
- 設定placeholder時候 focus時候文字沒有隱藏
- 沉浸進行時 —— 由Diegetic UI引出的概念學習UI