情况描述
做测试时,往表T插入数据时出现卡住运行很久。后面想通过PLSQL查看是否出现假死的状态,此时出现错误提示:
“ORA-00257归档程序错误,在释放之前仅限于内部连接”
SQL操作如下
SQL>DROP TABLE T PURGE;
SQL>CREATE TABLE T AS SELECT * FROM DBA_OBJECTS;
SQL>INSERT INTO T SELECT * FROM T;
SQL>INSERT INTO T SELECT * FROM T;
SQL>INSERT INTO T SELECT * FROM T;
SQL>INSERT INTO T SELECT * FROM T;
问题追踪
通过百度查询到这个问题基本上是由于归档FLASH_RECOVERY_AREA空间满了造成的。
一般有2种解决方法:
1.手动增加FLASH_RECOVERY_AREA空间
2.删除一些过期或者不需要的archive log文件
解决方案
(1)手动增加FLASH_RECOVERY_AREA空间
A.检查flash recovery area的使用情况,可以看见archivelog已经很大了,达到99.56
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
CONTROL FILE 0 0 0
REDO LOG 0 0 0
ARCHIVED LOG 99.56 0 122
BACKUP PIECE 0 0 0
IMAGE COPY 0 0 0
FLASHBACK LOG 0 0 0
FOREIGN ARCHIVED LOG 0 0 0
B. 计算flash recovery area已经占用的空间
SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
SUM(PERCENT_SPACE_USED)*3/100
-----------------------------
2.9868
C. 修改FLASH_RECOVERY_AREA的空间修改为6GB。
SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=6g;
D. 查询相关参数正常,可以连接了
SQL> select * from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------------------------------------------------------------------- ----------- ---------- ----------------- ---------------
E:\app\keungyu\flash_recovery_area 6442450944 5182151168 0 113
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
CONTROL FILE 0 0 0
REDO LOG 0 0 0
ARCHIVED LOG 80.44 0 113
BACKUP PIECE 0 0 0
IMAGE COPY 0 0 0
FLASHBACK LOG 0 0 0
FOREIGN ARCHIVED LOG 0 0 0
7 rows selected
(2) 手动删除归档日志释放空间
A. 找到recovery目录, show parameter recover
SQL> show parameter recover;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string E:\app\keungyu\flash_recovery_area
db_recovery_file_dest_size big integer 4977M
recovery_parallelism integer 0
B.根据找到的归档文件所在位置手动删除部分不需要或者过期的文件
C.此时出现了问题,为了测试手动删除文件后,空间是否有释放,对数据进行shutdown操作。
SQL>shutdown immediate;
(此时卡在这一步,没有执行下去因为之前的insert还没执行完毕,因为数据量比较大在回滚,为了能够快速关闭,选择了shutdown abort操作)
SQL>shutdown abort
(但是在启动的时候出现了问题,报“ORA-03113: 通信通道的文件结尾”错误,分析可能由于数据库立即关闭,导致文件状态可能不一致,因为正常关闭数据库会同步校验各文件,使得重新启动的时候文件时间点一致并且不用进行崩溃恢复,不得不进行下面的恢复)
C:\Users\keungyu>sqlplus "/as sysdba"
SQL*Plus: Release 11.2.0.1.0 Production on 星期五 5月 31 14:14:35 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 535662592 bytes
Fixed Size 1375792 bytes
Variable Size 205521360 bytes
Database Buffers 322961408 bytes
Redo Buffers 5804032 bytes
数据库装载完毕。
ORA-03113: 通信通道的文件结尾
进程 ID: 3956
会话 ID: 9 序列号: 3
SQL> startup mount;
ORA-24324: 未初始化服务句柄
ORA-01041: 内部错误, hostdef 扩展名不存在
SQL> conn /as sysdba
已连接到空闲例程。
SQL>
SQL>
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 535662592 bytes
Fixed Size 1375792 bytes
Variable Size 205521360 bytes
Database Buffers 322961408 bytes
Redo Buffers 5804032 bytes
数据库装载完毕。
SQL> set lineszie 1000;
SP2-0158: 未知的 SET 选项 "lineszie"
SQL> set linesize 1000;
SQL>
SQL>
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------- ------------ --------------
1 1 172 52428800 512 1 NO CURRENT 2004354 31-5月 -13 2.8147E+14
3 1 171 52428800 512 1 NO INACTIVE 2001237 31-5月 -13 2004354 31-5月 -13
2 1 170 52428800 512 1 NO INACTIVE 1996178 31-5月 -13 2001237 31-5月 -13
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效
<执行恢复操作>
SQL> recover database until time '2013-05-31 12:00:00';
完成介质恢复。
SQL> alter database open resetlogs;
数据库已更改。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 535662592 bytes
Fixed Size 1375792 bytes
Variable Size 205521360 bytes
Database Buffers 322961408 bytes
Redo Buffers 5804032 bytes
数据库装载完毕。
数据库已经打开。
SQL>
D.此时查询归档文件空间仍然为99.56并没有释放,但是可以以非sys用户登陆
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
CONTROL FILE 0 0 0
REDO LOG 0 0 0
ARCHIVED LOG 99.56 0 122
BACKUP PIECE 0 0 0
IMAGE COPY 0 0 0
FLASHBACK LOG 0 0 0
FOREIGN ARCHIVED LOG 0 0 0
7 rows selected
E.用RMAN对归档文件进行操作
RMAN删除过期归档文件.sql
--检查一些无用的archivelog
RMAN> crosscheck archivelog all;
归档日志文件名=E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_27\O
1_MF_1_105_8T69TZSV_.ARC RECID=58 STAMP=816542946
对归档日志的验证成功
归档日志文件名=E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_27\O
1_MF_1_106_8T69V5MF_.ARC RECID=59 STAMP=816542953
对归档日志的验证成功
归档日志文件名=E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_27\O
1_MF_1_107_8T69V9XD_.ARC RECID=60 STAMP=816542956
对归档日志的验证成功
归档日志文件名=E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_27\O
1_MF_1_108_8T69VLPJ_.ARC RECID=61 STAMP=816542966
对归档日志的验证成功
已交叉检验的 122 对象
--删除无效的日志
RMAN> delete expired archivelog all;
释放的通道: ORA_DISK_1
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=144 设备类型=DISK
db_unique_name 为 MYTEST 的数据库的归档日志副本列表
=====================================================================
关键字 线程序列 S 时间下限
------- ---- ------- - ----------
1 1 48 X 08-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_09\O1_MF_1_48_8ROWMYK1_.ARC
2 1 49 X 09-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_10\O1_MF_1_49_8RRKFGG1_.ARC
3 1 50 X 10-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_13\O1_MF_1_50_8S0GNDN4_.ARC
4 1 51 X 13-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_13\O1_MF_1_51_8S0RQXCW_.ARC
5 1 52 X 13-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_14\O1_MF_1_52_8S32VFVL_.ARC
6 1 53 X 14-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_14\O1_MF_1_53_8S36M9O8_.ARC
7 1 54 X 14-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_14\O1_MF_1_54_8S3OFOJO_.ARC
8 1 55 X 14-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_16\O1_MF_1_55_8S8CJGYB_.ARC
9 1 56 X 16-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_16\O1_MF_1_56_8S9TZ298_.ARC
10 1 57 X 16-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_20\O1_MF_1_57_8SLX634K_.ARC
11 1 58 X 20-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_20\O1_MF_1_58_8SMZ5P3H_.ARC
12 1 59 X 20-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_21\O1_MF_1_59_8SOL3G2Q_.ARC
13 1 60 X 21-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_21\O1_MF_1_60_8SPZVRDD_.ARC
14 1 61 X 21-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_22\O1_MF_1_61_8SSGDJ7R_.ARC
15 1 62 X 22-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_22\O1_MF_1_62_8SSNC5PR_.ARC
16 1 63 X 22-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_23\O1_MF_1_63_8SW6HB7T_.ARC
17 1 64 X 23-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_23\O1_MF_1_64_8SW6K672_.ARC
18 1 65 X 23-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_23\O1_MF_1_65_8SW6VPK4_.ARC
19 1 66 X 23-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_23\O1_MF_1_66_8SW76455_.ARC
20 1 67 X 23-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_23\O1_MF_1_67_8SW7RHT5_.ARC
21 1 68 X 23-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_23\O1_MF_1_68_8SW89WRV_.ARC
22 1 69 X 23-5月 -13 名称: E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_24\O1_MF_1_69_8SXGXQ00_.ARC
是否确定要删除以上对象 (输入 YES 或 NO)? YES
已删除的归档日志
归档日志文件名=E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_09\O
1_MF_1_48_8ROWMYK1_.ARC RECID=1 STAMP=814956544
已删除的归档日志
归档日志文件名=E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_10\O
1_MF_1_49_8RRKFGG1_.ARC RECID=2 STAMP=815043375
已删除的归档日志
归档日志文件名=E:\APP\KEUNGYU\FLASH_RECOVERY_AREA\MYTEST\ARCHIVELOG\2013_05_24\O
1_MF_1_69_8SXGXQ00_.ARC RECID=22 STAMP=816253241
22 EXPIRED 对象已删除
RMAN>
F. 此时查询归档文件空间仍然为87.43,空间释放了
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
CONTROL FILE 0 0 0
REDO LOG 0 0 0
ARCHIVED LOG 87.43 0 100
BACKUP PIECE 0 0 0
IMAGE COPY 0 0 0
FLASHBACK LOG 0 0 0
FOREIGN ARCHIVED LOG 0 0 0
7 rows selected
--转自