資料庫db_files引數增大怎麼辦

dawn009發表於2014-03-13
資料庫的資料檔案數(200)達到了資料庫定義的引數db_files的值,而原本需要使用alter system可以修改這個引數,但是因為限制該引數的maxdatafiles值(由控制檔案定義)儀200,故要想改大db_files引數值,需要重建控制檔案,下面是我個人根據實驗總結的操作過程。 

一、引數察看 
$sqlplus /nolog 

conn / as sysdba 



SQL> show parameter db_files; 



NAME                                 TYPE        VALUE 

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

db_files                             integer     200 

由此可看出db_files值為200,如果資料庫中資料檔案數達到或超過200,就需要更改該引數了。 

更改db_files有兩種情況: 

1,  如果控制檔案中定義的maxdatafiles以及系統允許開啟的檔案數值大於200,則可以透過alter方式來修改db_files的值 

2,  如果控制檔案中maxdatafiles值等於200,則需要重建控制檔案來修改maxdatafiles值。 

察看maxdatafiles方法 

SQL>alter database backup controlfile to trace; 

到$ORACLE_BASE/admin/db_name/udump下面查詢最新生成的trc檔案 

$grep –i MAXDATAFILES boss_ora_4310.trc 

MAXDATAFILES 200 

MAXDATAFILES 200 

系統允許開啟檔案數可用ulimit –a察看 

$ulimit –a 

open files                      (-n) 1024 

二、修改步驟 
1,生成控制檔案建立指令碼 
SQL>alter database backup controlfile to trace; 

在$ORACLE_BASE/admin/db_name/udump目下新生成的trc檔案oracle/admin/boss/udump/boss_ora_4310.trc 

根據上述檔案建立控制檔案生成指令碼recreate_control.sql 

STARTUP NOMOUNT 

CREATE CONTROLFILE REUSE DATABASE "BOSS" NORESETLOGS  NOARCHIVELOG 

    MAXLOGFILES 16 

    MAXLOGMEMBERS 3 

    MAXDATAFILES 300     修改MAXDATAFILES值 

    MAXINSTANCES 8 

    MAXLOGHISTORY 292 

LOGFILE 

  GROUP 1 '/oracle/oradata/boss/redo01.log'  SIZE 50M, 

  GROUP 2 '/oracle/oradata/boss/redo02.log'  SIZE 50M, 

  GROUP 3 '/oracle/oradata/boss/redo03.log'  SIZE 50M 

-- STANDBY LOGFILE 

DATAFILE 

  '/oracle/oradata/boss/system01.dbf', 

  '/oracle/oradata/boss/undotbs01.dbf', 

  '/oracle/oradata/boss/sysaux01.dbf', 

  '/oracle/oradata/boss/users01.dbf', 

  '/oracle/oradata/boss/example01.dbf' 

CHARACTER SET ZHS16GBK 



2,關閉資料庫 
SQL>shutdown 

3, 備份原有控制檔案,刪除原有控制檔案 
備份控制檔案 

cd /oracle/oradata/boss/ 

cp control01.ctl control01.ctl.0520 

cp control02.ctl control02.ctl.0520 

cp control03.ctl control03.ctl.0520 

刪除控制檔案 

rm control0*.ctl 

4, 建立新的控制檔案 
$sqlplus /nolog 

SQL>conn / as sysdba 

SQL>@ oracle/admin/boss/udump/recreate_control.sql 

ORACLE instance started. 



Total System Global Area  268435456 bytes 

Fixed Size                  1218892 bytes 

Variable Size              75499188 bytes 

Database Buffers          188743680 bytes 

Redo Buffers                2973696 bytes 



Control file created. 

5,使用控制檔案恢復 
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE 

ORA-00279: change 567684 generated at 05/15/2010 00:19:32 needed for thread 1 

ORA-00289: suggestion : 

/oracle/flash_recovery_area/BOSS/archivelog/2010_05_15/o1_mf_1_3_%u_.arc 

ORA-00280: change 567684 for thread 1 is in sequence #3 





Specify log: {=suggested | filename | AUTO | CANCEL} 

/oracle/oradata/boss/redo01.log 

ORA-00310: archived log contains sequence 2; sequence 3 required 

ORA-00334: archived log: '/oracle/oradata/boss/redo01.log' 





SQL> RECOVER DATABASE USING BACKUP CONTROLFILE 

ORA-00279: change 567684 generated at 05/15/2010 00:19:32 needed for thread 1 

ORA-00289: suggestion : 

/oracle/flash_recovery_area/BOSS/archivelog/2010_05_15/o1_mf_1_3_%u_.arc 

ORA-00280: change 567684 for thread 1 is in sequence #3 





Specify log: {=suggested | filename | AUTO | CANCEL} 

/oracle/oradata/boss/redo02.log 

Log applied. 

Media recovery complete. 

這裡恢復要使用redo線上日誌,需要逐個嘗試,直到介質恢復成功。 

6,resetlogs方式啟動資料庫 
SQL> ALTER DATABASE OPEN RESETLOGS; 

Database altered 

7,恢復臨時表空間 


SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/oracle/oradata/boss/temp01.dbf' 

  2       SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M; 



Tablespace altered. 

8,修改引數 
SQL> show parameter db_files; 



NAME                                 TYPE        VALUE 

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

db_files                             integer     200 





SQL> alter system set db_files=250 scope=spfile; 



System altered. 



SQL> shutdown immediate; 

Database closed. 

Database dismounted. 

ORACLE instance shut down. 

SQL> startup 

ORACLE instance started. 



Total System Global Area  268435456 bytes 

Fixed Size                  1218892 bytes 

Variable Size              75499188 bytes 

Database Buffers          188743680 bytes 

Redo Buffers                2973696 bytes 

Database mounted. 

Database opened. 



SQL>show parameter db_files 

NAME                                 TYPE        VALUE 

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

db_files                             integer     250 

SQL> exit 

至此db_files引數修改工作完成 

當然,如果控制檔案損壞或丟失,也可以使用這種方法來恢復資料庫。

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

相關文章