DB_FILES引數

wzq609發表於2018-07-16

【前言】Oracle資料庫建立是的預設引數一般是夠大部分的資料庫使用了,但是在一些情況下有寫引數是需要進行變更的。


【問題背景】公司有個Oracle的資料庫倉庫,整個資料庫大小5TB+,但是整個空間也快滿了。在進行新增表空間的時候就報了ORA-59的錯誤。


【問題分析】

1、錯誤分析

[oracle@ekpjdbtest trace]$ oerr ora 59
00059, 00000,  "maximum number of DB_FILES exceeded"
// *Cause:  The value of the DB_FILES initialization parameter was exceeded.
// *Action: Increase the value of the DB_FILES parameter and warm start.

以上報錯顯示DB_FILES引數值已經達到最大。

SQL>   select   count(1)  from   dba_data_files;
 
   COUNT(1)
----------
        200
 
SQL> show parameter db_files;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_files                             integer     200


2、db_files的oracle文件說明

Property Description
Parameter type Integer
Default value 200
Modifiable No
Range of values Minimum: the largest among the absolute file numbers of the datafiles in the database

Maximum: operating system-dependent

Basic No
Oracle RAC Multiple instances must have the same value.

DB_FILES specifies the maximum number of database files that can be opened for this database. The maximum valid value is the maximum number of files, subject to operating system constraint, that will ever be specified for the database, including files to be added by ADD DATAFILE statements.

If you increase the value of DB_FILES , then you must shut down and restart all instances accessing the database before the new value can take effect. If you have a primary and standby database, then they should have the same value for this parameter.


【解決方法】

知道了整個問題的來龍去脈,解決方法也就很簡單了。

SQL> alter system  set   db_files=500 scope=spfile;
 
Shutdown the database with immediate option and restart so that the  new   value  for   db_files can be read.
SQL> shutdown immediate
SQL> startup
 
Check the  new   value  for   db_files parameter
SQL> show parameter db_files;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_files                             integer     500


【其他】

1、 DB_FILES 引數涉及到要開啟作業系統的資料檔案的個數,所以如果還有問題也要檢視下作業系統的一些引數情況

[oracle@test trace]$ ulimit -a
 
open files                      (-n) 65536


2、db_files和maxdatafiles引數的關係

The db_files parameter is a "soft limit " parameter that controls the maximum number of physical OS files that can map to an Oracle instance. Historically (before Oracle8i) you need to be careful not to set db_files too high, else you would have DBWR (database writer) issues.

The maxdatafiles parameter is a different "hard limit" parameter.  When you issue a"create database" command, the value you specify for maxdatafiles is stored in your Oracle control files.  The default value of 32 is usually sufficient, but after Oracle8i there is no downside to using a larger value.


在Oracle11G  maxdatafiles這個引數是會自動擴充套件的,所以我們沒有必要對該檔案進行設定(發現有網友因為db_files的檔案問題重新建立了控制檔案,經過本人測試確實沒有必要)。

我在測試環境中進行了操作,maxdatafiles的大小是8,然後增加資料檔案的方式來進行表空間,發現資料庫的alert log裡面就記錄了整個maxdatafiles擴充套件的操作記錄。

1、alert log顯示控制檔案進行了Expanded的操作
 
Expanded controlfile section 4  from   10 to 40 records
Requested to grow  by   30 records; added 1 blocks of records
 
 
2、alter database backup controlfile to trace resetlogs; 檢視控制檔案的引數情況
 
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE  "WZQ"   RESETLOGS  NOARCHIVELOG
     MAXLOGFILES 16
     MAXLOGMEMBERS 3
     MAXDATAFILES 40
     MAXINSTANCES 8
     MAXLOGHISTORY 292
顯示MAXDATAFILES檔案已經修改成40了。


【總結】一個簡單的表空間問題,經過測試和驗證把問題都弄清楚了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12679300/viewspace-2157899/,如需轉載,請註明出處,否則將追究法律責任。

相關文章