db_recovery_file_dest_size設定小 導致聯機日誌不能歸檔 Oracle不能起來

dbhelper發表於2015-03-01

一、轉載自  http://blog.sina.com.cn/s/blog_7282b74b0100tu3d.html
ORACLE開啟時提示聯機日誌無法歸檔(2011-07-18 11:48:06)
 連線到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select * from all_users;
select * from all_users

              *
第 1 行出現錯誤:
ORA-01219: 資料庫未開啟: 僅允許在固定表/檢視中查詢

SQL> startup nomount;
ORA-32004: 指定了廢棄/過時的引數
ORA-01081: 無法啟動已在執行的 ORACLE - 請首先關閉它

SQL> shutdown immediate
ORA-01109: 資料庫未開啟
已經解除安裝資料庫。
ORACLE 例程已經關閉。

 

SQL> startup mount;
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已經啟動。

 
Total System Global Area  226492416 bytes
Fixed Size                  1248212 bytes
Variable Size             180356140 bytes
Database Buffers           37748736 bytes
Redo Buffers                7139328 bytes
資料庫裝載完畢。

 

SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-16038: 日誌 3 序列號 382 無法歸檔
ORA-19809: 超出了恢復檔案數的限制
ORA-00312: 聯機日誌 3 執行緒 1: 'E:\ORADATA\NYY\REDO03.LOG'


檢查flash recovery area的使用情況:
SQL> select * from v$flash_recovery_area_usage;

FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES

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

CONTROLFILE                   0                         0               0

ONLINELOG                     0                         0               0

ARCHIVELOG               101.65                         0              61

BACKUPPIECE                   0                         0               0

IMAGECOPY                     0                         0               0

FLASHBACKLOG                  0                         0               0

 

已選擇6行。

 

計算flash recovery area已經佔用的空間:

SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;

 

SUM(PERCENT_SPACE_USED)*3/100

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

                       3.0495

檢視db_recovery_file_dest_size引數的值

SQL> show parameter db_recovery_file_dest_size

 

NAME                                 TYPE        VALUE

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

db_recovery_file_dest_size           big integer 2G

SQL>

 

原因:oracle10g在預設情況下,歸檔日誌是儲存在閃回恢復區的,如果建庫的時候用的預設設定,閃回恢復區是2G,空間被佔滿了以後就無法再歸檔了

 

解決辦法

1、透過設定db_recovery_file_dest_size引數,增大了flash recovery area來解決這個問題。
透過設定db_recovery_file_dest_size引數,增大了flash recovery area來解決這個問題。
SQL> alter system set db_recovery_file_dest_size=4G scope=both;

2、在rman中透過刪除flash recovery area中不必要的備份來釋放flash recovery area空間

RMAN> delete expired archivelog all;
釋放的通道: ORA_DISK_1
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=152 devtype=DISK
說明與恢復目錄中的任何存檔日誌均不匹配

RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
釋放的通道: ORA_DISK_1
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=152 devtype=DISK

RMAN> alter database open;
資料庫已開啟

----------------
文2:轉載自http://hi.baidu.com/liuchun0614/blog/item/517e471f554498f8e1fe0b68.html
解決過程記錄如下。

檢查了下alter日誌:

檢查了下dump檔案:

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

Dump file d:\oracle\product\10.2.0\admin\orcl\bdump\orcl_arc1_5392.trc
Fri Apr 02 09:56:09 2010
ORACLE V10.2.0.1.0 - Production vsnsta=0
vsnsql=14 vsnxtr=3
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Windows XP Version V5.1 Service Pack 3
CPU : 2 - type 586, 2 Physical Cores
Process Affinity : 0x00000000
Memory (Avail/Total): Ph:1146M/2042M, Ph+PgF:2150M/3413M, VA:1276M/2047M
Instance name: orcl

Redo thread mounted by this instance: 1

Oracle process number: 17

Windows thread id: 5392, image: ORACLE.EXE (ARC1)


*** SERVICE NAME:() 2010-04-02 09:56:09.203
*** SESSION ID:(155.1) 2010-04-02 09:56:09.203
kcrrwkx: work to do 0x1 (start)
*** 2010-04-02 09:56:09.281 20146 kcrr.c
ORA-16014: log 1 sequence# 93 not archived, no available destinations
ORA-00312: online log 1 thread 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'
*** 2010-04-02 09:57:09.312
kcrrwkx: work to do 0x1 (end)
*** 2010-04-02 09:58:09.390
kcrrwkx: work to do 0x1 (end)
*** 2010-04-02 09:58:09.453 20146 kcrr.c
*** 2010-04-02 09:59:09.468
kcrrwkx: work to do 0x1 (end)
*** 2010-04-02 10:00:09.546
kcrrwkx: work to do 0x1 (end)
*** 2010-04-02 10:00:09.593 20146 kcrr.c
*** 2010-04-02 10:01:09.578
kcrrwkx: work to do 0x1 (end)
*** 2010-04-02 10:02:09.656
kcrrwkx: work to do 0x1 (end)
ORA-19815: WARNING: db_recovery_file_dest_size of 2147483648 bytes is 100.00% used, and has 0 remaining bytes available.
*** 2010-04-02 10:02:09.812
************************************************************************
You have following choices to free up space from flash recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
system command was used to delete files, then use RMAN CROSSCHECK and
DELETE EXPIRED commands.
************************************************************************
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 47716352 bytes disk space from 2147483648 limit
*** 2010-04-02 10:02:09.828 60680 kcrr.c
ARC1: Error 19809 Creating archive log file to 'D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2010_04_02\O1_MF_1_89_%U_.ARC'
*** 2010-04-02 10:02:09.828 58942 kcrr.c
kcrrfail: dest:10 err:19809 force:0 blast:1
*** 2010-04-02 10:02:10.000 20146 kcrr.c
ORA-16038: log 2 sequence# 89 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 2 thread 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'
*** 2010-04-02 10:03:09.750
kcrrwkx: work to do 0x1 (end)
*** 2010-04-02 10:04:09.828
kcrrwkx: work to do 0x1 (end)
*** 2010-04-02 10:04:09.890 20146 kcrr.c
*** 2010-04-02 10:04:58.687
kcrrwkx: work to do 0x1 (end)
*** 2010-04-02 10:04:58.984 20146 kcrr.c
*** 2010-04-02 10:05:11.500
kcrrwkx: work to do 0x1 (end)
*** 2010-04-02 10:06:11.500
tkcrrxmp: Stopping ARC2 to reduce ARCH processes from 3 to 2
kcrrwkx: work to do 0x1 (end)
*** 2010-04-02 10:06:16.640 20146 kcrr.c

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

 

出現這個問題的原因,在沒看相關的日誌和dump檔案之前猜測是archive造成,同事的本子只是簡單的搭了個環境,沒必要使用歸檔,因此使用如下操作過程解決了該問題,記錄下。

--------------------------------got it process----------------------------


已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。

Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 197135236 bytes
Database Buffers 406847488 bytes
Redo Buffers 7135232 bytes
資料庫裝載完畢。
ORA-16038: 日誌 2 序列號 89 無法歸檔
ORA-19809: 超出了恢復檔案數的限制
ORA-00312: 聯機日誌 2 執行緒 1:
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'


SQL> shutdown immediate;
ORA-01109: 資料庫未開啟


已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。

Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 197135236 bytes
Database Buffers 406847488 bytes
Redo Buffers 7135232 bytes
資料庫裝載完畢。
SQL> archive log list;
資料庫日誌模式 存檔模式
自動存檔 啟用
存檔終點 USE_DB_RECOVERY_FILE_DEST
最早的聯機日誌序列 89
下一個存檔日誌序列 89
當前日誌序列 94
SQL> archive log stop;
已處理的語句
SQL> shutdown immediate;
ORA-01109: 資料庫未開啟


已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。

Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 197135236 bytes
Database Buffers 406847488 bytes
Redo Buffers 7135232 bytes
資料庫裝載完畢。
SQL> show parameter arch;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
log_archive_config string
log_archive_dest string
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_2 string
log_archive_dest_3 string
log_archive_dest_4 string
log_archive_dest_5 string
log_archive_dest_6 string
log_archive_dest_7 string

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_8 string
log_archive_dest_9 string
log_archive_dest_state_1 string enable
log_archive_dest_state_10 string enable
log_archive_dest_state_2 string enable
log_archive_dest_state_3 string enable
log_archive_dest_state_4 string enable
log_archive_dest_state_5 string enable
log_archive_dest_state_6 string enable
log_archive_dest_state_7 string enable
log_archive_dest_state_8 string enable

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_9 string enable
log_archive_duplex_dest string
log_archive_format string ARC%S_%R.%T
log_archive_local_first boolean TRUE
log_archive_max_processes integer 2
log_archive_min_succeed_dest integer 1
log_archive_start boolean FALSE
log_archive_trace integer 0
remote_archive_enable string true
standby_archive_dest string %ORACLE_HOME%\RDBMS
SQL> archive log list;
資料庫日誌模式 存檔模式
自動存檔 啟用
存檔終點 USE_DB_RECOVERY_FILE_DEST
最早的聯機日誌序列 89
下一個存檔日誌序列 89
當前日誌序列 94
SQL> alter system switch logfile;
alter system switch logfile
*
第 1 行出現錯誤:
ORA-01109: 資料庫未開啟


SQL> clear
SQL> clear scr;

C:\Documents and Settings\lenovo>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 4月 2 09:55:25 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> conn /as sysdba
已連線。
SQL> shutdown immediate;
ORA-01109: 資料庫未開啟


已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount;
ORACLE 例程已經啟動。

Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 197135236 bytes
Database Buffers 406847488 bytes
Redo Buffers 7135232 bytes
資料庫裝載完畢。
SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-16038: 日誌 2 序列號 89 無法歸檔
ORA-19809: 超出了恢復檔案數的限制
ORA-00312: 聯機日誌 2 執行緒 1:
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'


SQL> select * from log;
select * from log
*
第 1 行出現錯誤:
ORA-01219: 資料庫未開啟: 僅允許在固定表/檢視中查詢

SQL> select * from logfile;
select * from logfile
*
第 1 行出現錯誤:
ORA-01219: 資料庫未開啟: 僅允許在固定表/檢視中查詢
SQL> archive log next;
ORA-16014: 日誌 2 的序列號 89 未歸檔, 沒有可用的目的地
ORA-00312: 聯機日誌 2 執行緒 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'


SQL> alter database drop logfile member 'D:\oracle\product\10.2.0\oradata\orcl\
EDO02.LOG';
alter database drop logfile member 'D:\oracle\product\10.2.0\oradata\orcl\REDO0
.LOG'
*
第 1 行出現錯誤:
ORA-00361: 無法刪除最後一個日誌成員
D:\oracle\product\10.2.0\oradata\orcl\REDO02.LOG (組 2)


SQL> alter database clear unarchived logfile 'D:\oracle\product\10.2.0\oradata\
rcl\REDO02.LOG';

資料庫已更改。

SQL> alter database open;

資料庫已更改。

SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。

Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 197135236 bytes
Database Buffers 406847488 bytes
Redo Buffers 7135232 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL>
----------------------------------------------------------------------------------------------------

由於是同事的本子的例項,解決過程中並沒有考慮其他因素,時候檢閱其他文件發現可以如下處理:

(1).flash recovery area的使用情況:

SQL> show parameter db_recovery

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string D:\oracle\product\10.2.0/flash
_recovery_area
db_recovery_file_dest_size big integer 2G

SQL> select * from v$flash_recovery_area_usage;

(2).計算flash recovery area已經佔用的空間:

SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;

SUM(PERCENT_SPACE_USED)*3/100
-----------------------------
2.1231

可以看到,這裡已經有2.1231G使用了,這說明我們剛開始設定的db_recovery_file_dest_size=2G不足,導致 online redo log無法歸檔;
透過設定db_recovery_file_dest_size引數,增大了flash recovery area來解決這個問題。
SQL> alter system set db_recovery_file_dest_size=3G scope=both;

系統已更改。

(3).也可以透過刪除flash recovery area中不必要的備份來釋放flash recovery area空間來解決這個問題:

(1). delete obsolete;

(2). crosscheck backupset;

delete expired backupset;

最後開啟資料庫;

SQL> alter database open;

-The End-

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

相關文章