Oracle startup error on AIX 系列问题

上一篇 / 下一篇  2010-05-14 00:32:48 / 个人分类:Oracle

环境:

OS:AIX 5300

DB:Oracle 11G R1

问题一:

今天启动数据库,启动出现如下的错误:

ORA-16038:   log   1   sequence#   913   cannot   be   archived   
ORA-19504:   failed   to   create   file   ""   
ORA-00312:   online   log   1   thread   1:   'E:\ORACLE\ORADATA\PRFCH\REDO01.LOG' 

查看alert_hzdb.log发现频繁的出现No space left on device,这可能是由于磁盘空间不足引起,使用df -k命令查看,发现/oracle挂在的磁盘使用率在100%,立刻去检查该目录下的使用情况,发现$ORACLE_HOME/dbs目录占用了2G多,为何有这样的情况呢?进一步查看发现该目录下是一些archive文件,原来archive文件被存储在这里。先删除文件再说,之后在查找原因。删除文件后,释放了磁盘空间,启动问题解决。

问题二:

为何会在/dbs目录下生成archive文件呢?我的/Oradata/flash_recovery_area/HZDB/archivelog中已经有了这些归档文件,那/dbs下的又是怎样产生的呢?查看show parameter archive,发现log_archivelog_dest_n均没有被设置,有standby_archice_dest = ?/dbs/arch,这项参数显得很可疑。

查看文档发现,standby_archice_dest是一个备用的归档地址,当没有指定任何的log_archivelog_dest_n的时候,这个参数就会生效。查看"V$ARCHIVE_DEST"视图,的确是这样的路径。

接下来alter system set standby_archice_dest = '' scope=both;

alter system set log_archivelog_dest_1= 'location=USE_DB_RECOVERY_FILE_DEST' scope=both;

这里要说明一下,

理解几个参数:
log_archive_dest_n和log_archive_dest不能共存
1、log_archive_dest_n 需要加上location/service参数的,能实现归档到standby 数据库,实现 dataguard。
2、log_archive_dest 与 log_archive_dest_n 及 USE_DB_RECOVERY_FILE_DEST 互斥,不能同时设置。
3、log_archive_start 在9I 之前的版本,需要设置 数据库启动时,才能自动归档!

Note:

TheSTANDBY_ARCHIVE_DESTparameter is deprecated. It is retained for backward compatibility only.

STANDBY_ARCHIVE_DESTis relevant only for a standby database in managed recovery mode. It specifies the location of archive logs arriving from a primary database. Oracle usesSTANDBY_ARCHIVE_DESTandLOG_ARCHIVE_FORMATto fabricate the fully qualified standby log filenames and stores the filenames in the standby control file.

确定归档路径生效,执行alter system switch logfile;检查/dbs目录,确实没有生成归档文件了,仅仅在/Oradata/flash_recovery_area/HZDB/archivelog中生成新的归档文件。问题解决,于是重启数据库。

问题三:

SQL> STARTUP;
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE instance started.

启动之后出现以上信息,存在过期的参数设置,查看alert log,发现如下信息:

Deprecated system parameters with specified values:
  standby_archice_dest 
End of deprecated system parameter listing

由于这个参数已经在11G中被废弃,所以才会出现提示信息。执行

SQL>ALTER SYSTEM RESET log_archive_start SCOPE=SPFILE SID='*';
System altered.

重启后,问题解决

问题四:

archivelog的存在无疑要占用大量的磁盘空间,该如何避免磁盘空间被无限的占用呢?

SQL> show parameter db_r

NAME                      TYPE               VALUE
--------------------------------------------------
db_recovery_file_dest           string      /Oradata/flash_recovery_area
db_recovery_file_dest_size      big integer   2G
db_recycle_cache_size           big integer   0

db_recovery_file_dest_size的大小默认为2G,我们设置它为4G,alert system set db_recovery_file_dest_size = 4g;

这样设置只能存储4G的archivelog,但是archivelog是伴随oracle的运行而不断生成的,当归档文件满了之后,Oracle会处于挂起状态,不做任何的工作,这显然是不能忍受的。这时你可能会想,写个脚本定期删除过期的归档不就行了么?这样的回答是错误的。因为Oracle记录这4G的容量并不是从磁盘去计算的,它是根据v$recovery_file_dest这张视图去记录的,如果你只是单单的删除了磁盘中的归档文件,也是无济于事的,这些归档的记录仍然存在视图中。

ORA-19815: WARNING: db_recovery_file_dest_size of 2147483648 bytes is 100.00% used, and has 0 remaining bytes available.
*************************************************************
You have the following choices to free up space from
flash recovery area:
1. Consider changing your RMAN retention policy.
   If you are using dataguard, then consider changing your
   RMAN archivelog deletion policy.
2. Backup files to tertiary device such as tape using the
   RMAN command BACKUP RECOVERY AREA.
3. Add disk space and increase the db_recovery_file_dest_size
   parameter to reflect the new space.
4. Delete unncessary files using the RMAN DELETE command.
   If an OS command was used to delete files, then use
   RMAN CROSSCHECK and DELETE EXPIRED commands.
*************************************************************

SQL>SELECT substr(name, 1, 30) name, space_limit AS quota,
  2         space_used        AS used,
  3          space_reclaimable AS reclaimable,
  4          number_of_files   AS files
  5    FROM  v$recovery_file_dest ;

NAME                                    QUOTA       USED RECLAIMABLE      FILES
---------------------------------- ---------- ---------- ----------- ----------
/data5/flash_recovery_area         21474836482144863232           0        227


为了保证archivelog永远保存可用,不会满掉。我们通过RMAN定期的删除大于7天的archivelog,策略是每天都执行一遍。打开dbconsole的作业管理,添加一个RMAN作业,脚本为:

run {

DELETE force(noprompt) ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';}

单独执行没有问题,使用作业调度很不巧,这里又出现错误了,ERROR: NMO not setuid-root (Unix-only)

由于是重建了em之后,没有执行root.sh,使用root登录,执行后。问题解决!

至此,已经一天的时间过去了,直到凌晨深夜....zzzzzzzzzzzzzzz

另外,给出几个使用过的AIX命令:

df -k     //查看磁盘使用空间

mkdir 目录名    //创建目录

rm -fr  目录名  //删除目录及文件

du -m    //目录大小 MB

ps -ef   //启动进程查看

topas      //性能监控

shutdown -Fr   //重启AIX

参考资料:http://www.58daxue.cn/showtopic-105728.aspx

http://shaomingxu6.blog.163.com/blog/static/453048062008614105254488/

http://www.blogjava.net/decode360/archive/2009/06/25/287747.html

http://www.eygle.com/archives/2005/03/oracle10gecieif.html

http://hi.baidu.com/jason_xux/blog/item/1ed07c0e10177ee4aa645712.html

http://blog.chinaunix.net/u3/105031/showart_2166111.html

http://www.eygle.com/archives/2009/06/dataguard_standby_archive_dest.html

 

 

 


TAG:

 

评分:0

我来说两句

Open Toolbar