ALTER SYSTEM SWITCH LOGFILE V.S. ALTER SYSTEM ARCHIVE LOG CURRENT
===========================================================
ALTER SYSTEM SWITCH LOGFILE ;
SWITCH LOGFILE Clause
The SWITCH
LOGFILE
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