ORA-16038: log 3 sequence# 103 cannot be archived

[size=large] 今天在自己机器做了个实验,插入10万条,由于空间少,重启数据库时出现:

[size=x-large]
SQL> startup
ORACLE instance started.

Total System Global Area  188743680 bytes
Fixed Size                  1218460 bytes
Variable Size             167774308 bytes
Database Buffers           16777216 bytes
Redo Buffers                2973696 bytes
Database mounted.
ORA-16038: log 3 sequence# 103 cannot be archived
ORA-19502: write error on file "", blockno  (blocksize=)
ORA-00312: online log 3 thread 1: '/home/lc_orauser/oradata/niutest/redo03.log'


后来发现是 闪回区的空间被全部占用

select group#,sequence#,archived,status from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1        104 NO  INACTIVE
         3        103 NO  INACTIVE
         2        105 NO  CURRENT


--1、清空闪回区空间,根据查询视图v$log可知,当前活动日志为2号日志组,则此时需要清空3号日志组的,

alter database clear unarchived logfile group 3;

然后再

alter database open;

解决了。

--2、增大db_recovery_file_dest_size的值

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> 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                 6.36                         0               4
BACKUPPIECE                 .22                         0               1
IMAGECOPY                 63.68                         0               5
FLASHBACKLOG                .51                       .25               2
已选择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.1231
可以看到,这里已经有2.1231G使用了,这说明我们刚开始设置的db_recovery_file_dest_size=2G不足,导致online redo log无法归档,在这里,我们通过设置db_recovery_file_dest_size参数,增大了flash recovery area来解决这个问题。
(3).也可以通过删除flash recovery area中不必要的备份来释放flash recovery area空间来解决这个问题:
      (1). delete obsolete;
      (2). crosscheck backupset;
             delete expired backupset;[/size][/size]

你可能感兴趣的:(sequence)