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

本文深入探讨了Oracle数据库中ALTERSYSTEMSWITCHLOGFILE和ALTERSYSTEMARCHIVELOGCURRENT两个核心命令的区别与应用,包括非归档模式与归档模式下的操作差异,通过SQL查询展示了日志状态变化及关键步骤,帮助理解数据库日志管理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

 

 

修复STANDBY_MANAGEMENT设置成MANUAL,创建datafile导致的错误的步骤如下: 1. 首先,检查错误日志以获取更多信息。你可以使用以下命令访问错误日志: ```sql SELECT name, value FROM v$parameter WHERE name LIKE '%background_dump_dest%'; ``` 在返回的结果中,找到包含 "alert" 字样的目录,并打开其中的 alert.log 文件。在文件中搜索包含 "ORA-" 或 "error" 字样的行,以查看有关错误的详细信息。 2. 确认数据库是否处于归档模式。如果是,则可以尝试执行以下步骤: - 在主数据库上运行以下命令: ```sql ALTER SYSTEM SWITCH LOGFILE; ``` - 在备用数据库上运行以下命令: ```sql ALTER DATABASE RECOVER MANAGED STANDBY DATABASE; ``` 3. 如果数据库未处于归档模式,则需要在主数据库上手动备份控制文件日志文件,然后将它们复制到备用数据库。执行以下步骤: - 在主数据库上运行以下命令: ```sql ALTER SYSTEM SWITCH LOGFILE; ALTER SYSTEM CHECKPOINT; ALTER SYSTEM ARCHIVE LOG CURRENT; ``` 这将创建一个新的归档日志文件,并将它们备份到控制文件日志文件中。 - 将备份的控制文件日志文件复制到备用数据库,并将其替换为现有的控制文件日志文件。 - 在备用数据库上运行以下命令: ```sql ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT; ``` 这将使备用数据库启动自动恢复过程并将其带到与主数据库同步的状态。 请注意,如果你不熟悉执行此类操作,最好联系专业人员进行支持帮助,以避免可能的数据丢失或其他问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值