在Oracle数据库中,日志操作模式分为:归档模式和非归档模式。在默认情况下,数据库采用非归档模式。它们两个的区别就是当前的重做日志切换以后,会不会被归档进程cope到归档的目的地,有了归档日志和备份,在数据库发生故障的时候,可以恢复。
1、查看当前数据库的的归档处于什么模式
SYS@ zxy>archive log list
Database log mode No Archive ModeAutomatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 6
Current log sequence 8
2、关库
SYS@ zxy>shutdown immediateDatabase closed.
Database dismounted.
ORACLE instance shut down.
3、启动到mount,设置归档模式必须是mount模式
SYS@ zxy>startup mountORACLE instance started.
Total System Global Area 830930944 bytes
Fixed Size 2232920 bytes
Variable Size 482348456 bytes
Database Buffers 343932928 bytes
Redo Buffers 2416640 bytes
Database mounted.
4、打开归档
SYS@ zxy>alter database archivelog;5、打开数据库
SYS@ zxy>alter database open;
6、验证是否修改成功
SYS@ zxy>archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 6
Next log sequence to archive 8
Current log sequence 8
同理,如果想要关闭归档,则在mount模式下,执行alter database noarchivelog;
补充:日志的切换流程
一般来说,Oracle数据库的重做日志是可以重复写的,oracle数据库有多个重做日志组(redo log group),每个重做日志组有包含多个成员(member,其实每个成员都互为镜像,存储的内容都是一样的),我们大部分的数据更改操作(更新,插入,删除)都会写入到在线日志中,也就是当前正在使用的日志(current redo log)。当一个日志写满,或者DBA发出日志切换(switch log)的时候,就会发生日志切换。如果Oracle运行在非归档模式下,Oracle会直接覆盖下一个重做日志组,如果运行在归档模式下,Oracle会查询该重做日志组是否被归档,如果归档了,则覆盖写入重做日志记录。如果当前发生了归档等待的话,可以通过添加日志组或者开启更多的归档进程来避免这个更待事件。