以前知道
ALTER SYSTEM SWITCH LOGFILE对单实例数据库或RAC中的当前实例执行日志切换,
ALTER SYSTEM ARCHIVE LOG CURRENT会对数据库中的所有实例执行日志切换,
所以在RAC环境上大多时间一般使用后者,而今天遇到了不管执行多少次ALTER SYSTEM ARCHIVE LOG CURRENT命令,日志就是不切换的情况
最后使用 ALTER SYSTEM SWITCH LOGFILE 进行强制切换才解决这个问题,而ALTER SYSTEM SWITCH LOGFILE这个命令需要去具体的节点执行,该命令单实例或当前节点有效
另外,SWITCH LOGFILE 只是强制切换日志组,归档功能是否打开与之没多大关系:
归档如果打开,切换日志组附带着必然要归档,在开归档的情况下,日志切换必然会归档的
归档如果关闭,肯定不能归档了,但该功能同样能切换日志组,因为它的功能就是强制切换日志组
而 archive log 则是归档的意思,常用的两个参数:
alter system archive log current:归档当前的日志组,仅在归档模式下使用,因为是当前日志组,归档之前必先切换日志组,所以该命令伴随着切换日志组
alter system archive log all: 归档除当前日志组以外,尚未归档的日志组,仅在归档模式下使用,该命令不会切换日志组
非归档模式下使用则会报以下错误:
补充说明:非归档模式下就不能使用 ARCHIVE LOG了吗?上面的ORA-00258提示说指定日志,相关参数如下:
ARCHIVE LOG
[ INSTANCE 'instance_name' ]
{ { SEQUENCE integer
| CHANGE integer
| CURRENT [ NOSWITCH ]
| GROUP integer
| LOGFILE 'filename'
[ USING BACKUP CONTROLFILE ]
| NEXT
| ALL
| START
}
[ TO 'location' ]
| STOP
}
非归档模式下可以使用该方式指定到具体的日志组进行归档,但group n 不能是当前日志组
SQL> alter system archive log group 2 to '/tmp';
总结:
ALTER SYSTEM SWITCH LOGFILE:就是切换日志,SWITCH(切换) ,LOGFILE(日志),就是字面的意思
ALTER SYSTEM ARCHIVE LOG CURRENT:就是归档当前日志,归档(ARCHIVE )日志(LOG)当前的(CURRENT),也是字面意思,
然后就是在不同的环境下(单机/RAC/是否开归档功能),由于功能设计的出发点不同,各自附带的效果也有所不同。