一個簡單的bigfile tablespace無法擴充套件的案例處理
最近幫助開發的同學處理了一個簡單的問題,想透過這個問題來反思一下。
在一天下午的時候,開發的同事突然找到我說,有一個開發的資料庫貌似有些表空間的問題,儘管這個資料庫是劃分在他們名下,但是對於資料庫的操作他們還是沒底,想讓我幫忙看看,當然對於這類問題,我都腦海裡閃現一兩分鐘搞定問題的成就感了。剛好下午有些事情,就叫了另外一個新同事去練練手,但是過了一會兒,新同事給我打來了電話,說現在好像有些問題,目前他們的庫使用的是bigfile tablespace,對於這類表空間,新增資料檔案是不行的,然後他嘗試了resize竟然也不成功。我腦海裡搜尋關於bigfile的內容,沒有搜尋到相關的太多資訊,實際工作中這個特性真只是一個特性而已,實踐意義應該不大,難得開發的同學這麼時髦,竟然用了這個特性。
於是我叫新同事去看看是不是哪裡的操作不對,如果實在不行,看看作業系統級是不是沒有空間了,他反饋說開發的同學目前還沒有許可權登入作業系統,他們目前使用的是客戶端工具連線。對於這類問題,看起來情況似乎已經非常明顯了,但是好像又好像探不到底。於是我建議他,這類空間的,如果實在resize不了,可以再新建一個表空間,把使用者的預設表空間改到這個新的表空間應該就可以了。新同事忙活了一會,看起來還是沒有起色。在忙完手頭的工作之後,我就到開發的同學那裡去看看真偽。
到了現場之後,發現這位同事已經嘗試了不少的方法。簡單瞭解了問題的前因後果,發現這確實是一個使用了bigfile tablespace的庫,資料檔案目前已經有50G,開發的同學在呼叫一個儲存過程的時候會丟擲空間不足的ORA錯誤。而且新同事已經建立了一個新的表空間,目前先分配了50M的空間,但是執行這個儲存過程還是報錯。
為了排除各種影響,我們就一個一個來分析。首先是這個bigfile tablespace的問題,既然丟擲了空間不足的錯誤,怎麼使用resize的時候會有問題呢,這類表空間裡面只對應一個資料檔案,檔案可以無限膨脹,達到TB級別都是很容易支援的。對於一個只有50G的資料檔案而言,是在是太小兒科了。而同事在同一個目錄下面建立了一個表空間,足以說明這個目錄下面還是有空間的。所以這個現象就比較奇怪,我再次確認,他使用的命令情況,他是使用resize嘗試把資料檔案調到100G,50G到100G裡面還是有太多的變數,於是我就保守了一下,調到了60G,稍等一會之後,從客戶端看命令就執行成功了。從這一點來看,就可以反推出來,這個問題應該不是bug導致,而是由於作業系統的空間剩餘在50G以內,導致resize 為100G的時候出錯。首先這個問題確認了,問題就解決了一大半,開發同學再次嘗試這個儲存過程,發現就沒有任何錯誤了,可見問題的解決已經告一段落,那麼我們來解釋另外幾個問題。
問題1:對於bigfile tablespace的表空間,預設都是開啟了自動擴充套件的,為什麼這個表空間到了50G就出問題了呢?
問題2:另外一個問題是對於新增的表空間,為什麼執行儲存過程依舊報錯。
問題3:最後一個問題是這個問題後續改怎麼改進。
對於第一個問題,自己也著實有些糾結,不過檢視一些資訊就會明白了。首先表空間CYTJ是一個bigfile tablespace,其它的表空間都是smallfile tablespace.
SQL> select tablespace_name,next_extent,bigfile from dba_tablespaces;
TABLESPACE_NAME NEXT_EXTENT BIG
------------------------------ ----------- ---
CYTJ_DATA YES
TEMP_DATA 1048576 NO
CYTJ_DATA01 NO
對於這個表空間而言,可以透過檢視資料檔案的資料字典來檢視maxsize了。可以看到目前是61440M。可見這個表空間在建立開始就是指定了50G的maxsize.
SQL>select tablespace_name,file_name,bytes/1024/1024 size_MB,bytes/1024/1024 max_size_MB from dba_data_files
TABLESPACE_NAME FILE_NAME SIZE_MB MAX_SIZE_MB
-------------------- -------------------------------------------------- ---------- -----------
USERS /U01/app/oracle/oradata/cytj/users01.dbf 5 5
CYTJ_DATA /home/oracle/tablespace/cytj_data.dbf 61440 61440
CYTJ_DATA01 /home/oracle/tablespace/cytj_data01.dbf 50 50
當然要看到更多的資訊,還是登陸到資料庫端去檢視日誌了,然後讓開發同事繼續協調,他們連進了作業系統,使用df -h一下子就可以看出來確實是檔案系統的空間不足,目前只剩下5G左右的空間了,而從資料庫日誌裡面,可以赫然發現,這個表空間在很早的時候就建立了。
create bigfile tablespace cytj_data
logging
datafile '/home/oracle/tablespace/cytj_data.dbf'
size 10G
autoextend on
next 200m maxsize 50G
extent management local
Wed Nov 26 11:45:15 2014
Completed: create bigfile tablespace cytj_data
有了這些一切都明瞭了。
對於問題2:
為什麼新增了表空間之後,執行儲存過程依舊報錯,這個經過排查發現,同事對裡面的使用者都指定了新的表空間為more表空間,唯獨漏了當前使用者,這個也算是操作不夠謹慎,所以給開發的同事簡單建立一個表驗證一下,就很清晰了。
第3個問題。這個問題後續的改進。
可以從資料庫日誌看出。這個問題其實已經發生很久了。
但是直到最近才被開發的同學重視起來,可能有一些功能缺失需要,產生了很大的影響,所以才被重視了起來,如果細細扒開來看,這個問題發生了已經快半年了。
Thu Mar 03 15:43:34 2016
ORA-1653: unable to extend table REPORTS.CLIENTSTATDATA_REAL by 128 in tablespace CYTJ_DATA
ORA-1653: unable to extend table REPORTS.CLIENTSTATDATA_REAL by 1024 in tablespace CYTJ_DATA
但是明白了問題之後,發現其實都是很簡單,從目前他們使用資料的情況來看短期內不會出現問題,但是從長遠考慮,目前的硬碟配置有些低了,只剩餘5G的空間是有些捉襟見肘了。需要進一步擴容。當然更多的資料庫相關的工作我還是樂於支援的。從這個看起來非常不經意的案例中,我們發現很多問題其實早就產生在了萌芽之中,如果不重視,就會逐步擴大影響,如果在這個期間出現了嚴重的問題,那就很可能是不可恢復的災難,從這也可以窺探出如果管理不夠專業和規範,很容易出現各種奇怪的問題,問題要扼殺在搖籃之中。
在一天下午的時候,開發的同事突然找到我說,有一個開發的資料庫貌似有些表空間的問題,儘管這個資料庫是劃分在他們名下,但是對於資料庫的操作他們還是沒底,想讓我幫忙看看,當然對於這類問題,我都腦海裡閃現一兩分鐘搞定問題的成就感了。剛好下午有些事情,就叫了另外一個新同事去練練手,但是過了一會兒,新同事給我打來了電話,說現在好像有些問題,目前他們的庫使用的是bigfile tablespace,對於這類表空間,新增資料檔案是不行的,然後他嘗試了resize竟然也不成功。我腦海裡搜尋關於bigfile的內容,沒有搜尋到相關的太多資訊,實際工作中這個特性真只是一個特性而已,實踐意義應該不大,難得開發的同學這麼時髦,竟然用了這個特性。
於是我叫新同事去看看是不是哪裡的操作不對,如果實在不行,看看作業系統級是不是沒有空間了,他反饋說開發的同學目前還沒有許可權登入作業系統,他們目前使用的是客戶端工具連線。對於這類問題,看起來情況似乎已經非常明顯了,但是好像又好像探不到底。於是我建議他,這類空間的,如果實在resize不了,可以再新建一個表空間,把使用者的預設表空間改到這個新的表空間應該就可以了。新同事忙活了一會,看起來還是沒有起色。在忙完手頭的工作之後,我就到開發的同學那裡去看看真偽。
到了現場之後,發現這位同事已經嘗試了不少的方法。簡單瞭解了問題的前因後果,發現這確實是一個使用了bigfile tablespace的庫,資料檔案目前已經有50G,開發的同學在呼叫一個儲存過程的時候會丟擲空間不足的ORA錯誤。而且新同事已經建立了一個新的表空間,目前先分配了50M的空間,但是執行這個儲存過程還是報錯。
為了排除各種影響,我們就一個一個來分析。首先是這個bigfile tablespace的問題,既然丟擲了空間不足的錯誤,怎麼使用resize的時候會有問題呢,這類表空間裡面只對應一個資料檔案,檔案可以無限膨脹,達到TB級別都是很容易支援的。對於一個只有50G的資料檔案而言,是在是太小兒科了。而同事在同一個目錄下面建立了一個表空間,足以說明這個目錄下面還是有空間的。所以這個現象就比較奇怪,我再次確認,他使用的命令情況,他是使用resize嘗試把資料檔案調到100G,50G到100G裡面還是有太多的變數,於是我就保守了一下,調到了60G,稍等一會之後,從客戶端看命令就執行成功了。從這一點來看,就可以反推出來,這個問題應該不是bug導致,而是由於作業系統的空間剩餘在50G以內,導致resize 為100G的時候出錯。首先這個問題確認了,問題就解決了一大半,開發同學再次嘗試這個儲存過程,發現就沒有任何錯誤了,可見問題的解決已經告一段落,那麼我們來解釋另外幾個問題。
問題1:對於bigfile tablespace的表空間,預設都是開啟了自動擴充套件的,為什麼這個表空間到了50G就出問題了呢?
問題2:另外一個問題是對於新增的表空間,為什麼執行儲存過程依舊報錯。
問題3:最後一個問題是這個問題後續改怎麼改進。
對於第一個問題,自己也著實有些糾結,不過檢視一些資訊就會明白了。首先表空間CYTJ是一個bigfile tablespace,其它的表空間都是smallfile tablespace.
SQL> select tablespace_name,next_extent,bigfile from dba_tablespaces;
TABLESPACE_NAME NEXT_EXTENT BIG
------------------------------ ----------- ---
CYTJ_DATA YES
TEMP_DATA 1048576 NO
CYTJ_DATA01 NO
對於這個表空間而言,可以透過檢視資料檔案的資料字典來檢視maxsize了。可以看到目前是61440M。可見這個表空間在建立開始就是指定了50G的maxsize.
SQL>select tablespace_name,file_name,bytes/1024/1024 size_MB,bytes/1024/1024 max_size_MB from dba_data_files
TABLESPACE_NAME FILE_NAME SIZE_MB MAX_SIZE_MB
-------------------- -------------------------------------------------- ---------- -----------
USERS /U01/app/oracle/oradata/cytj/users01.dbf 5 5
CYTJ_DATA /home/oracle/tablespace/cytj_data.dbf 61440 61440
CYTJ_DATA01 /home/oracle/tablespace/cytj_data01.dbf 50 50
當然要看到更多的資訊,還是登陸到資料庫端去檢視日誌了,然後讓開發同事繼續協調,他們連進了作業系統,使用df -h一下子就可以看出來確實是檔案系統的空間不足,目前只剩下5G左右的空間了,而從資料庫日誌裡面,可以赫然發現,這個表空間在很早的時候就建立了。
create bigfile tablespace cytj_data
logging
datafile '/home/oracle/tablespace/cytj_data.dbf'
size 10G
autoextend on
next 200m maxsize 50G
extent management local
Wed Nov 26 11:45:15 2014
Completed: create bigfile tablespace cytj_data
有了這些一切都明瞭了。
對於問題2:
為什麼新增了表空間之後,執行儲存過程依舊報錯,這個經過排查發現,同事對裡面的使用者都指定了新的表空間為more表空間,唯獨漏了當前使用者,這個也算是操作不夠謹慎,所以給開發的同事簡單建立一個表驗證一下,就很清晰了。
第3個問題。這個問題後續的改進。
可以從資料庫日誌看出。這個問題其實已經發生很久了。
但是直到最近才被開發的同學重視起來,可能有一些功能缺失需要,產生了很大的影響,所以才被重視了起來,如果細細扒開來看,這個問題發生了已經快半年了。
Thu Mar 03 15:43:34 2016
ORA-1653: unable to extend table REPORTS.CLIENTSTATDATA_REAL by 128 in tablespace CYTJ_DATA
ORA-1653: unable to extend table REPORTS.CLIENTSTATDATA_REAL by 1024 in tablespace CYTJ_DATA
但是明白了問題之後,發現其實都是很簡單,從目前他們使用資料的情況來看短期內不會出現問題,但是從長遠考慮,目前的硬碟配置有些低了,只剩餘5G的空間是有些捉襟見肘了。需要進一步擴容。當然更多的資料庫相關的工作我還是樂於支援的。從這個看起來非常不經意的案例中,我們發現很多問題其實早就產生在了萌芽之中,如果不重視,就會逐步擴大影響,如果在這個期間出現了嚴重的問題,那就很可能是不可恢復的災難,從這也可以窺探出如果管理不夠專業和規範,很容易出現各種奇怪的問題,問題要扼殺在搖籃之中。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-2089580/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個簡單的 PHP 時間處理擴充套件PHP套件
- SG :一個簡單的PHP語法糖擴充套件PHP套件
- 圖片處理擴充套件 Grafika 的簡單使用套件
- 圖片處理擴充套件 Intervention/image 的簡單使用套件
- chrome擴充套件推薦:無法無天的圖片內文書處理擴充套件 --- Project NapthaChrome套件ProjectAPT
- 表空間無法擴充套件問題處理套件
- 兩個簡單的擴充套件方法:TrimPrefix和TrimSuffix套件
- PHP擴充套件開發就是一個自己的PHP擴充套件PHP套件
- 使用View modification擴充套件SAP Fiori應用的一個案例View套件
- 一個超級簡單的PHP超全域性變數管理擴充套件PHP變數套件
- INFORMIX表的預設初始擴充套件、下一個擴充套件資料塊以及一個表允許的最大擴充套件數。ORM套件
- 我的第一個Emacs擴充套件Mac套件
- 擴充套件:使用 Vue.js 和 node 共建一個簡單的 CRUD 應用套件Vue.js
- weex componet 簡單擴充套件套件
- 案例研究:亞馬遜廣告使用 PyTorch 和 Amazon Inferentia 擴充套件廣告處理模型亞馬遜PyTorch套件模型
- 使用Kotlin擴充套件函式擴充套件Spring Data案例Kotlin套件函式Spring
- [外掛擴充套件]簡單的IP記錄外掛套件
- mobx-簡單可擴充套件的狀態管理庫套件
- 一個高效能、簡單、跨平臺的 PHP7 程式碼加密擴充套件PHP加密套件
- 03 Windows批處理的作用域和延遲擴充套件Windows套件
- win10系統c盤不能擴充套件卷怎麼辦 win10系統盤無法擴充套件卷點不了如何處理Win10套件
- 年輕人的第一個VSCode擴充套件VSCode套件
- 1. 我的第一個 PHP 擴充套件PHP套件
- Chrome第一個擴充套件程式Chrome套件
- Apache模組開發/用C語言擴充套件apache(3:一個非常簡單的apache module)ApacheC語言套件
- 自定義擴充套件jQuery功能簡單介紹套件jQuery
- [外掛擴充套件]無聊發個遊戲的,英雄聯盟套件遊戲
- Sentinel 的一些小擴充套件套件
- Cython,一個簡化 Python 編寫 C 擴充套件的語言Python套件
- 如何編寫一個獨立的 PHP 擴充套件PHP套件
- WPF如何封裝一個可擴充套件的Window封裝套件
- chrome擴充套件推薦:此刻、今天、最近~一個關於時間管理的擴充套件 – MomentumChrome套件
- chrome擴充套件推薦:此刻、今天、最近~一個關於時間管理的擴充套件 - MomentumChrome套件
- PHP擴充套件開發教程2 – 編寫第一個擴充套件 hello worldPHP套件
- [譯] 如何使用原生 JavaScript 構建簡單的 Chrome 擴充套件程式JavaScriptChrome套件
- 簡單易用且優雅的跨境支付 PHP SDK 擴充套件包PHP套件
- 官方Chrome擴充套件頁面無法訪問解決辦法Chrome套件
- Slack是如何實現分散式任務處理的擴充套件?分散式套件