原因:归档日志文件爆满
什么是Oracle归档模式?
Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操 作都会记录在联机重做日志里。一般数据库至少要有2个联机重做日志组。当一个联机重做日志组被写满的时候,就会发生日志切换,这时联机重做日志组2成为当 前使用的日志,当联机重做日志组2写满的时候,又会发生日志切换,去写联机重做日志组1,就这样反复进行。
如果数据库处于非归档模式,联机日 志在切换时就会丢弃. 而在归档模式下,当发生日志切换的时候,被切换的日志会进行归档。比如,当前在使用联机重做日志1,当1写满的时候,发生日志切换,开始写联机重做日志 2,这时联机重做日志1的内容会被拷贝到另外一个指定的目录下。这个目录叫做归档目录,拷贝的文件叫归档重做日志。
数据库使用归档方式运行时才可以进行灾难性恢复。
解决方法:
oracle分为归档模式(ARCHIVELOG)和非归档模式(NOARCHIVELOG)。
我的就是在归档模式下,导致日志满了。归档模式,只要数据库有操作,会不停歇的进行日志记录,会占用很多空间。
扩大归档日志空间大小。
Sql>startup nomount ‘将数据库启到NOMOUNT状态
Sql> alter system set db_recovery_file_dest_size=30G; ‘将空间改为30G(自己控制)
sql>alter database mount;
SQL>alter database open;
数据操作多的时候也会存在日志空间不足的情况。
删除过期归档日志
进入rman命令状态
[oracle@localhost ~]$ rman target/
查看所有LOG文件
RMAN> crosscheck archivelog all;
删除所有LOG文件
RMAN> delete archivelog all; (或者删除前10天的日志 DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-10'; )
这种方法可以解决占时,往后如果不做日志管理计划,还会出现日志满了的状况。
将归档模式改为非归档模式,这样,日志就不会去实时记录下来,也就不存在日志空间不足。(缺点:对于数据库恢复存在风险。)
首先,查看oracle数据库是否为归档模式:
select name,log_mode from v$database;
为ARCHIVELOG是归档模式,NOARCHIVELOG为归档模式。
改变归档模式到非归档模式:
1)SQL>SHUTDOWN NORMAL / IMMEDIATE;
2)SQL>STARTUP MOUNT;
3)SQL>ALTER DATABASE NOARCHIVELOG;
4)SQL>ALTER DATABASE OPEN;
这个时候就可以了,当然后续,归档日志怎么管理就自己决定了。
改变非归档模式到归档模式:
1)SQL>SHUTDOWN NORMAL/IMMEDIATE; 先down下数据
2)SQL>STARTUP MOUNT; 启动数据库实例到mount状态,但不要打开
3)SQL>ALTER DATABASE ARCHIVELOG; 设置数据库为归档日志模式
4)SQL>ALTER DATABASE OPEN; 打开数据库
5)SQL>archive log list; 确认数据库现在处于归档日志模式
6)SQL>archive log all; 将这个时间点的redo logs归档
提供给大家查询归档日志位置,大小方法
位置:
SQL> connect /as sysdba;
Connected.
SQL> archive log list;
---------------------------------------------------------------------------
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 1
Next log sequence to archive 2
Current log sequence 2
从这个可以看出Archive destination USE_DB_RECOVERY_FILE_DEST 归档日志的存放闪回区.
查看闪回区大小
SQL> show parameter db_re
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string D:\app\Administrator\fast_reco very_area
db_recovery_file_dest_size big integer 4122M
db_recycle_cache_size big integer 0
从这里可以看出闪回去的位置和大小
去查看归档所在目录的真实大小 .这里就是闪回区所在的目录。
前面讲的 SQL> alter system set db_recovery_file_dest_size=30G; 这一句就是更改这个位置的大小
ok