ORA-00059錯誤分析以及MAXDATAFILES、DB_FILES引數修改

djb1008發表於2012-01-19

ORA-00059錯誤分析以及MAXDATAFILES、DB_FILES引數修改

1. 問題描述

本文的環境為:

OS: AIX 6.1

DB: oracle 10.2.0.5 rac

在擴表空間的容量,增加資料檔案時,報了ORA-00059:達到最大的檔案數量,錯誤的描述如下:

alter tablespace p_data_low add datafile '/dev/rora_p_data_31_l' size 25580m

*

ERROR at line 1:

ORA-00059: maximum number of DB_FILES exceeded

[@more@]

2.問題分析

2.1 使用oerr工具,查詢一下導致該錯誤的原因和解決該問題的簡單描述,如下:

$ oerr ora 00059

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.

2.2 檢查資料庫的DB_FILES引數設定,本例為DB_FILES=200 ,如下:

SQL> show parameter db_files

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_files integer 200

2.3 統計資料庫資料檔案的數量,可以看到資料庫資料檔案的數量已經達到了引數DB_FILES設定的200閥值,如下:

SQL> select count(1) from v$datafile;

COUNT(1)

----------

200

ORACLE 透過兩個引數來限制資料檔案的數量,分別為MAXDATAFILES和DB_FILES.

MAXDATAFILES 是在控制檔案建立的時候設定的,並且儲存在控制檔案中,oracle 10G RAC該引數的預設設定為1024,

如果要修改這個引數,則需要透過重新建立控制檔案來完成,該引數被稱為'hard limit';

DB_FILES 是在spfile或者init{SID}.ora檔案中設定的,可以被手工修改,重啟資料庫後就生效,被成為'soft limit';

各個作業系統和資料庫版本的MAXDATAFILES最大限制值如下:

V7 8.0.5 8.1.6 9.2 10.1 10.2

-------- -------- ------ -------- -------- --------

UNIX Per TS 1022 1022 1022 1022 1022

Per DB 1022 65536 65536 65534 65334 65334

VMS Per TS 1022 - - - 1022

Per DB 1022 65536 - 65334

WINDOWS Per TS 1022 1022

Per DB 1022 65536 65536 65534 65334 65334

增加MAXDATAFILES引數,將增加控制檔案的大小。所以需要加以限制。

當達到MAXDATAFILES閥值時,只要磁碟空間允許,控制檔案將自動擴充套件.

增加DB_FILES引數,將增加了PGA的開銷(增加了每個連線資料庫的使用者的PGA開銷)。

3. 問題解決

3.1 查詢控制檔案中MAXDATAFILES引數的設定值。

先將控制檔案的建立資訊匯出到dump檔案中,在dump檔案中可以查詢到該引數的設定值。

SQL>alter database backup control file to trace;

SQL>host

$cd $ORACLE_BASE/admin/{ORACLE_SID}/udump

$ls -lt|more

$ ls -lt

total 312

-rw-r----- 1 oracle oinstall 17404 Jan 18 10:43 jlzdh1_ora_7274760.trc

-rw-r----- 1 oracle oinstall 858 Jan 18 10:26 jlzdh1_ora_7471420.trc

......

$more ./jlzdh1_ora_7274760.trc

......

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "JLZDH" RESETLOGS NOARCHIVELOG

MAXLOGFILES 192

MAXLOGMEMBERS 3

MAXDATAFILES 1024

MAXINSTANCES 32

MAXLOGHISTORY 292

LOGFILE

GROUP 1 '/dev/rora_redo1_01' SIZE 380M,

GROUP 2 '/dev/rora_redo1_02' SIZE 380M,

GROUP 5 '/dev/rora_redo1_03' SIZE 380M,

GROUP 6 '/dev/rora_redo1_04' SIZE 380M

-- STANDBY LOGFILE

DATAFILE

'/dev/rora_system_01',

'/dev/rora_undotbs1_01',

'/dev/rora_sysaux_01',

'/dev/rora_n_data_01',

......

可看到MAXDATAFILES被設定為1024.

3.2 因為當前的檔案數量未達到MAXDATAFILES引數值,所以不需要使用重新建立控制檔案來修改該引數。

注:如果需要透過重新建立控制檔案來修改MAXDATAFILES引數值,請參看我的部落格文章http://djb1008.itpub.net/post/42280/526053

3.3 修改DB_FILES引數(RAC 環境,需要加上SID='*'

SQL>alter system set db_files=1000 scope=spfile sid='*';

重新啟動資料庫

SQL>shutdown immediate;

SQL>STARTUP

如果是rac的話,可以使用srvctl命令,停止和啟動資料庫,如下:

$srvctl stop db -d orcl

$srvctl start db -d orcl

3.4 繼續擴充表空間的容量,不再報錯,命令執行成功。

SQL>alter tablespace p_data_low add datafile '/dev/rora_p_data_31_l' size 25580m

Tablespace altered.

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

相關文章