'alter system switch logfile' 和 'alter system archive log current'的区别

 首先看一下文档上面的定义:

ALTER SYSTEM SWITCH LOGFILE V.S. ALTER SYSTEM ARCHIVE LOG CURRENT

===========================================================

SWITCH LOGFILE Clause

The SWITCHLOGFILE clause lets you explicitly force Oracle to begin writing to a new redo log file group, regardless of whether the files in the current redo log file group are full. When you force a log switch, Oracle begins to perform a checkpoint but returns control to you immediately rather than when the checkpoint is complete. To use this clause, your instance must have the database open.

ALTER SYSTEM ARCHIVE LOG CURRENT ;

CURRENT Clause

Specify CURRENT to manually archive the current redo log file group of the specified thread(instance), forcing a log switch. If you omit the THREAD parameter, then Oracle archives all redo log file groups from all enabled threads(instances), including logs previous to current logs. You can specify CURRENT only when the database is open.

ALTER SYSTEM ARCHIVE LOG CURRENT NOSWITCH;

NOSWITCH

Specify NOSWITCH if you want to manually archive the current redo log file group without forcing a log switch. This setting is used primarily with standby databases to prevent data divergence when the primary database shuts down. Divergence implies the possibility of data loss in case of primary database failure.

You can use the NOSWITCH clause only when your instance has the databasemounted but not open. If the database is open, then this operation closes the databaseautomatically. You must then manually shut down the database before you can reopen it

主要的区别在于
ALTER SYSTEM SWITCH LOGFILE对单实例数据库或RAC中的当前实例执行日志切换。
而ALTER SYSTEM ARCHIVE LOG CURRENT会对数据库中的所有实例执行日志切换

另外,检查点是否切换、是否归档、是否切换日志进行分析:

------在非归档模式下:

SQL> select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIVED STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
         1          1        152   52428800          1 NO       INACTIVE         1248991531022 2012-2-27 1
         2          1        153   52428800          1 NO       INACTIVE         1248991534659 2012-2-28 1
         3          1        154   52428800          1 NO       CURRENT          1248991537881 2012-3-2 14
SQL>  select CHECKPOINT_CHANGE#,ARCHIVE_CHANGE#,ARCHIVELOG_CHANGE# from v$database;
CHECKPOINT_CHANGE# ARCHIVE_CHANGE# ARCHIVELOG_CHANGE#
------------------ --------------- ------------------
    12489915378816  12489915310225     12487317965303
SQL> select FILE#,CHECKPOINT_CHANGE#   from v$datafile_header;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1     12489915378816
         2     12489915378816
         3     12489915378816
         4     12489915378816
         5     12489915378816
         6     12489915378816
         7     12489915378816
7 rows selected
SQL> select FILE#,CHECKPOINT_CHANGE# from v$datafile;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1     12489915378816
         2     12489915378816
         3     12489915378816
         4     12489915378816
         5     12489915378816
         6     12489915378816
         7     12489915378816
7 rows selected
SQL> alter system switch logfile;
System altered
SQL> select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIVED STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
         1          1        155   52428800          1 NO       CURRENT          1248991537920 2012-3-2 14
         2          1        153   52428800          1 NO       INACTIVE         1248991534659 2012-2-28 1
         3          1        154   52428800          1 NO       ACTIVE           1248991537881 2012-3-2 14
SQL> select CHECKPOINT_CHANGE#,ARCHIVE_CHANGE#,ARCHIVELOG_CHANGE# from v$database;
CHECKPOINT_CHANGE# ARCHIVE_CHANGE# ARCHIVELOG_CHANGE#
------------------ --------------- ------------------
    12489915378816  12489915346592     12487317965303
SQL> select FILE#,CHECKPOINT_CHANGE#   from v$datafile_header;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1     12489915378816
         2     12489915378816
         3     12489915378816
         4     12489915378816
         5     12489915378816
         6     12489915378816
         7     12489915378816
7 rows selected
SQL> select FILE#,CHECKPOINT_CHANGE# from v$datafile;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1     12489915378816
         2     12489915378816
         3     12489915378816
         4     12489915378816
         5     12489915378816
         6     12489915378816
         7     12489915378816
7 rows selected
SQL> alter system archive log current;
alter system archive log current
ORA-00258: manual archiving in NOARCHIVELOG mode must identify log

从上面可以查看到在非归档模式下不能执行alter system archive log current;
而alter system switch logfile;有如下改变 1. 日志改变 2. 做检查点  3. 不会做归档

-------在归档模式下:
-------常态下的检查单

SQL>  select * from v$log;
Warning: connection was lost and re-established
 
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIVED STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
         1          1        155   52428800          1 YES      INACTIVE         1248991537920 2012-3-2 14
         2          1        156   52428800          1 NO       CURRENT          1248991537937 2012-3-2 14
         3          1        154   52428800          1 YES      INACTIVE         1248991537881 2012-3-2 14
SQL>  select CHECKPOINT_CHANGE#,ARCHIVE_CHANGE#,ARCHIVELOG_CHANGE# from v$database;
CHECKPOINT_CHANGE# ARCHIVE_CHANGE# ARCHIVELOG_CHANGE#
------------------ --------------- ------------------
    12489915379881  12489915378815     12487317965303
SQL> select FILE#,CHECKPOINT_CHANGE#   from v$datafile_header;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1     12489915379881
         2     12489915379881
         3     12489915379881
         4     12489915379881
         5     12489915379881
         6     12489915379881
         7     12489915379881
7 rows selected
SQL>  select FILE#,CHECKPOINT_CHANGE# from v$datafile;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1     12489915379881
         2     12489915379881
         3     12489915379881
         4     12489915379881
         5     12489915379881
         6     12489915379881
         7     12489915379881
7 rows selected

-------执行切换日志组
SQL> alter system switch logfile;
System altered
SQL>  select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIVED STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
         1          1        155   52428800          1 YES      INACTIVE         1248991537920 2012-3-2 14
         2          1        156   52428800          1 YES      ACTIVE           1248991537937 2012-3-2 14
         3          1        157   52428800          1 NO       CURRENT          1248991538041 2012-3-2 14
SQL>  select CHECKPOINT_CHANGE#,ARCHIVE_CHANGE#,ARCHIVELOG_CHANGE# from v$database;
CHECKPOINT_CHANGE# ARCHIVE_CHANGE# ARCHIVELOG_CHANGE#
------------------ --------------- ------------------
    12489915379881  12489915379203     12489915380413
 
SQL> select FILE#,CHECKPOINT_CHANGE#   from v$datafile_header;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1     12489915379881
         2     12489915379881
         3     12489915379881
         4     12489915379881
         5     12489915379881
         6     12489915379881
         7     12489915379881
7 rows selected
SQL>  select FILE#,CHECKPOINT_CHANGE# from v$datafile;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1     12489915379881
         2     12489915379881
         3     12489915379881
         4     12489915379881
         5     12489915379881
         6     12489915379881
         7     12489915379881
7 rows selected
SQL>  select FILE#,CHECKPOINT_CHANGE# from v$datafile;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1     12489915379881
         2     12489915379881
         3     12489915379881
         4     12489915379881
         5     12489915379881
         6     12489915379881
         7     12489915379881
7 rows selected

------执行切换归档日志组
SQL> alter system archive log current;

System altered
SQL>  select * from v$log;
 
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARCHIVED STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
         1          1        158   52428800          1 NO       CURRENT          1248991538045 2012-3-2 14
         2          1        156   52428800          1 YES      ACTIVE           1248991537937 2012-3-2 14
         3          1        157   52428800          1 YES      ACTIVE           1248991538041 2012-3-2 14
SQL>  select CHECKPOINT_CHANGE#,ARCHIVE_CHANGE#,ARCHIVELOG_CHANGE# from v$database;
CHECKPOINT_CHANGE# ARCHIVE_CHANGE# ARCHIVELOG_CHANGE#
------------------ --------------- ------------------
    12489915379881  12489915380452     12489915380455
SQL> select FILE#,CHECKPOINT_CHANGE#   from v$datafile_header;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1     12489915379881
         2     12489915379881
         3     12489915379881
         4     12489915379881
         5     12489915379881
         6     12489915379881
         7     12489915379881
7 rows selected
SQL>  select FILE#,CHECKPOINT_CHANGE# from v$datafile;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1     12489915379881
         2     12489915379881
         3     12489915379881
         4     12489915379881
         5     12489915379881
         6     12489915379881
         7     12489915379881
7 rows selected

从上面可以查看到在归档模式下:
执行alter system archive log current :  1. 日志组改变 2. 做检查点切换  3. 日志组归档
而alter system switch logfile;有如下改变 1. 日志组改变 2. 做检查点切换  3. 日志组归档;

实验环境oracle单实例,在rac环境下alter system switch logfile会对所有的实例进行归档。

SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值