今天臨下班時,同學發來一個截圖,意思是說dba_data_files里的bytes值大于maxbytes值。截圖如下:
我們提供的服務有:成都網站制作、網站建設、微信公眾號開發、網站優化、網站認證、太原ssl等。為上千余家企事業單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的太原網站制作公司
立馬感覺就不好了,根據以往的Oracle運維經驗覺得這絕對是不可能的。但是數據查出來的事實就是這樣的。于是上百度搜相關問題,無耐搜出來的都是不太相關的資料。于是直接上MOS找資料,還真有一篇是介紹這個的Value in BYTES Column Greater than MAXBYTES Column in DBA_DATA_FILES (文檔 ID 197244.1) 其中有這么一句The BYTES column in DBA_DATA_FILES has a value greater than MAXBYTES column when a datafile was manually resized to a value GREATER than MAXSIZE (MAXBYTES).那現在明白了,手動resize數據文件會導致這一現象。
下面動手還原一下
本次測試的平臺為11.2.0.3
--創建一個測試表空間 SQL> create tablespace zx1 datafile '/opt/bboss/tst4/oracle/arch/zx1.dbf' size 10M; Tablespace created. --查看數據文件的屬性 SQL> col file_name for a100 SQL> set linesize 200 SQL> set num 20 SQL> select file_name,tablespace_name,bytes,maxbytes,autoextensible from dba_data_files where tablespace_name='ZX1'; FILE_NAME TABLESPACE_NAME BYTES MAXBYTES AUT ---------------------------------------------------------------------------------------------------- ------------------------------ ---------- ---------- --- /opt/bboss/tst4/oracle/arch/zx1.dbf ZX1 10485760 0 NO --看到默認數據文件的自動增長為NO,bytes也只有創建時指定的10M --把數據文件轉為自動增長 SQL> alter database datafile '/opt/bboss/tst4/oracle/arch/zx1.dbf' autoextend on; Database altered. SQL> select file_name,tablespace_name,bytes,maxbytes,autoextensible from dba_data_files where tablespace_name='ZX1'; FILE_NAME TABLESPACE_NAME BYTES MAXBYTES AUT ---------------------------------------------------------------------------------------------------- ------------------------------ -------------------- -------------------- --- /opt/bboss/tst4/oracle/arch/zx1.dbf ZX1 10485760 34359721984 YES --看到打開自動增長后MAXBYTES默認為32G,也就是數據文件擴展到32G后就不再擴展 --測試是自動擴展 --創建測試用戶及表 SQL> create user zhaoxu identified by zhaoxu; User created. SQL> grant connect , resource to zhaoxu; Grant succeeded. SQL> create table zhaoxu.test1 tablespace zx1 as select * from dba_objects; Table created. --循環插入數據 SQL> begin 2 for i in 1..100 3 loop 4 insert /* append */ into zhaoxu.test1 select * from zhaoxu.test1; 5 commit; 6 end loop; 7 end; 8 / begin * ERROR at line 1: ORA-01653: unable to extend table ZHAOXU.TEST1 by 8192 in tablespace ZX1 ORA-06512: at line 4 --執行一段時間后報錯,表空間無法擴展 --查看數據文件大小 SQL> select file_name,tablespace_name,bytes,maxbytes,autoextensible from dba_data_files where tablespace_name='ZX1'; FILE_NAME TABLESPACE_NAME BYTES MAXBYTES AUT ---------------------------------------------------------------------------------------------------- ------------------------------ -------------------- -------------------- --- /opt/bboss/tst4/oracle/arch/zx1.dbf ZX1 34293743616 34359721984 YES --看操作系統上的數據文件大小 SQL> !du -sk /opt/bboss/tst4/oracle/arch/zx1.dbf 33490016 /opt/bboss/tst4/oracle/arch/zx1.dbf --可以看到數據文件增長沒有超過MAXBYTES指定的32G --此時resize數據文件 SQL> alter database datafile '/opt/bboss/tst4/oracle/arch/zx1.dbf' resize 33554424k; --由于操作系統限制最大只能33554424k,不過足可以說明問題 Database altered. SQL> select file_name,tablespace_name,bytes,maxbytes,bytes-maxbytes,autoextensible from dba_data_files where tablespace_name='ZX1'; FILE_NAME TABLESPACE_NAME BYTES MAXBYTES BYTES-MAXBYTES AUT ---------------------------------------------------------------------------------------------------- ------------------------------ -------------------- -------------------- -------------------- --- /opt/bboss/tst4/oracle/arch/zx1.dbf ZX1 34359730176 34359721984 8192 YES --現在看到數據文件的bytes>maxbytes了
上面還原了BYTES>MAXBYTES的過程。
上面提到的表空間的數據文件是自動擴展的,那對于不自動擴展的數據文件又會怎么樣呢?
下面繼續測試
--取消數據文件的自動擴展 SQL> alter database datafile '/opt/bboss/tst4/oracle/arch/zx1.dbf' autoextend off; Database altered. SQL> select file_name,tablespace_name,bytes,maxbytes,bytes-maxbytes,autoextensible from dba_data_files where tablespace_name='ZX1'; FILE_NAME TABLESPACE_NAME BYTES MAXBYTES BYTES-MAXBYTES AUT ---------------------------------------------------------------------------------------------------- ------------------------------ -------------------- -------------------- -------------------- --- /opt/bboss/tst4/oracle/arch/zx1.dbf ZX1 34359730176 0 34359730176 NO --可以看到MAXBYTES變為了0
如果再把數據文件改為可自動擴展又會出現什么情況呢
SQL> alter database datafile '/opt/bboss/tst4/oracle/arch/zx1.dbf' autoextend on; Database altered. SQL> select file_name,tablespace_name,bytes,maxbytes,bytes-maxbytes,autoextensible from dba_data_files where tablespace_name='ZX1'; FILE_NAME TABLESPACE_NAME BYTES MAXBYTES BYTES-MAXBYTES AUT ---------------------------------------------------------------------------------------------------- ------------------------------ -------------------- -------------------- -------------------- --- /opt/bboss/tst4/oracle/arch/zx1.dbf ZX1 34359730176 34359730176 0 YES --可以看到BYTES=MAXBYTES了
下面總結一下:
dba_data_files數據字典里的bytes值和maxbytes沒有什么必然的聯系
數據文件不可自動擴展時,MAXBYTES=0,BYTES的值既為該文件已實際分配的大小,也為該為件最大大小
數據文件可自動擴展時,默認的MAXBYTES=32G,BYTES為該文件已實際分配的大小,默認情況下BYTES不會超過MAXBYTES,如果對該文件進行resize操作,那么BYTES就用可能大于MAXBYTES。
文章題目:Oracledba_data_files數據字典里的bytes大于maxbytes
分享網址:http://m.newbst.com/article4/jeeeoe.html
成都網站建設公司_創新互聯,為您提供、營銷型網站建設、定制開發、自適應網站、品牌網站制作、網站策劃
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯