数据库db_files参数增大怎么办

前段时间碰到一个数据库的数据文件数( 200 )达到了数据库定义的参数 db_files 的值,而原本需要使用 alter system 可以修改这个参数,但是因为限制该参数的 maxdatafiles 值(由控制文件定义)仪 200 ,故要想改大 db_files 参数值,需要重建控制文件,下面是我个人根据实验总结的操作过程。

 

备注: 数据库级的限制由两个参数控制MAXDATAFILES和DB_FILES.
MAXDATAFILES 是创建control file时指定的,DB_FILES存在于init.ora中。从8i以后,当datafile的数目大于maxdatafiles时, controlfile会自动扩展不会影响。所以需要调整数据库级的限制只需要设置db_files参数就好了,不需要重新创建控制文件。 db_files依赖于OS的两个参数nfile和maxfiles。不能超过这两个参数。当然也不能超过上面表格中所列出的最大限制。
maxdatafiles会影响controlfile size 的大小,db_files会影响PGA的大

一、参数察看

$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: {<RET>=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: {<RET>=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 参数修改工作完成

当然,如果控制文件损坏或丢失,也可以使用这种方法来恢复数据库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值