Oracle dba_data_files資料字典裡的bytes大於maxbytes

來源:互聯網
上載者:User

標籤:oracle datafile

今天臨下班時,同學發來一個,意思是說dba_data_files裡的bytes值大於maxbytes值。如下:

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/8B/83/wKiom1hP4rSS04pVAACu3X-KHV4073.png" title="QQ圖片20161213195808.png" alt="wKiom1hP4rSS04pVAACu3X-KHV4073.png" />

立馬感覺就不好了,根據以往的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 a100SQL> set linesize 200SQL> set num 20SQL> 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 ZX1ORA-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.dbf33490016        /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。

本文出自 “DBA Fighting!” 部落格,請務必保留此出處http://hbxztc.blog.51cto.com/1587495/1882495

Oracle dba_data_files資料字典裡的bytes大於maxbytes

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.