ora-16014错误和flash空间满
昨天创建一个表 create table user as select name from t_userinfo
t_userinfo 这个表很大. 过了一段时间一直在读写硬盘.持续了有3个小时.
pl/sql developer 也无法中断.
通过查v$sqlarea 的sql_fulltext 找到了 sql_id=gutz8yut71m22
然后在v$session找到了 session_id=646 serial#=57
然后alter system kill session '646,57' 无法删除.
查v$session_wait 的event 发现是log siwtch
shutdown immediate 也无法关闭.只好在windows下关闭了oracle服务.
再次启动时候,很怕数据库做回滚操作,因为我已经把归档日志删除了1.1g,也害怕无法恢复.
1.问题以及解决过程
sql> select status from v$instance;
status
------------
mounted
sql> alter database open;
alter database open
*
第 1 行出现错误:
ora-16014: 日志 2 的序列号 27 未归档, 没有可用的目的地
ora-00312: 联机日志 2 线程 1:
'd:\oracle\product\10.2.0\oradata\orcl\redo02.log'
sql> show parameter db_recovery_file
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> alter system archive log current;
alter system archive log current
*
第 1 行出现错误:
ora-01109: 数据库未打开
sql> alter system switch logfile;
alter system switch logfile
*
第 1 行出现错误:
ora-01109: 数据库未打开
sql> show parameter db_recovery
name type value
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string c:\oracle\product\10.2.0/flash
_recovery_area
db_recovery_file_dest_size big integer 2g
sql> alter system set db_recovery_file_dest_size=3g scope=both;
系统已更改。
sql> alter database open;
数据库已更改。
(1).检查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 7.23 0 48
backuppiece 0 0 0
imagecopy 0 0 0
flashbacklog 0 0 0
已选择6行。
sql>
(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.1369
也可以用下面的语句检查
select substr(name, 1, 30) name, space_limit as quota,space_used as used,space_reclaimable
as reclaimable, number_of_files as files
from v$recovery_file_dest ;
create table as 语句产生了很多归档导致 online redo log无法归档,在这里,我们通过设置
db_recovery_file_dest_size参数,增大了flash recovery area来解决这个问题。
(3).也可以通过删除flash recovery area中不必要的备份来释放flash recovery area空间来解决这个问
题:
c:\rman
rman> connect target sys/pwd@test
(1). delete obsolete;
(2). crosscheck backupset; delete expired backupset;
(3). crosscheck archivelog all; delete expired archivelog all;
oracle指出,我们可以通过执行以下命令:
rman> backup recovery area;
将闪回区的内容备份到第三方介质,,也同样可以解决这个问题。
是以为记。
