archive log

本文详细介绍了如何在Oracle环境下管理数据库日志,包括添加日志成员、查看日志信息、开启归档模式、日志切换及使用dba_hist_log视图检查日志状态。同时展示了如何通过命令调整日志文件的存储位置和组别,以及在不同状态下执行的SQL命令。
idle> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME
1 1 166 52428800 512 1 NO INACTIVE 3245716 2013/12/16 22:20:33 3269932 2013/12/17 14:31:52
3 1 168 52428800 512 1 NO CURRENT 3303501 2013/12/18 14:29:46 281474976710655

2 1 167 52428800 512 1 NO INACTIVE 3269932 2013/12/17 14:31:52 3303501 2013/12/18 14:29:46


我们看到一共有三组日志,分别是group1,group2,group3,oracel 建议每组日志里有1个以上的成员(member),而我们目前的环境是分别都只有1个成员

下面添加成员:语法1:ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2b.rdo' TO GROUP 2;

语法2:ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2c.rdo'    TO ('/oracle/dbs/log2a.rdo', '/oracle/dbs/log2b.rdo');

idle> select * from v$logfile;


    GROUP# STATUS  TYPE    MEMBER     IS_
---------- ------- ------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---
         1         ONLINE  /u01/app/oracle/oradata/ocp/redo01.log     NO
         2         ONLINE  /u01/app/oracle/oradata/ocp/redo02.log     NO
         3         ONLINE  /u01/app/oracle/oradata/ocp/redo03.log     NO


idle> ALTER DATABASE ADD LOGFILE MEMBER '/u01/app/oracle/oradata/ocp/testlog/redo01.log' TO GROUP 1;


Database altered.


idle> ALTER DATABASE ADD LOGFILE MEMBER '/u01/app/oracle/oradata/ocp/testlog/redo02.log' TO GROUP 2;


Database altered.


idle> ALTER DATABASE ADD LOGFILE MEMBER '/u01/app/oracle/oradata/ocp/testlog/redo03.log' TO GROUP 3;


Database altered.

一般同一组的不通成员所在的位置不会在一起,我这边是测试环境就直接放在了testlog下区分下

下面来看下创建后的文件

idle> select * from v$log;


    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
         1          1        166   52428800        512          2 NO  INACTIVE               3245716 16-DEC-13      3269932 17-DEC-13
         3          1        168   52428800        512          2 NO  CURRENT                3303501 18-DEC-13   2.8147E+14
         2          1        167   52428800        512          2 NO  INACTIVE               3269932 17-DEC-13      3303501 18-DEC-13


idle> select * from v$logfile;


    GROUP# STATUS  TYPE    MEMBER     IS_
---------- ------- ------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---
         1         ONLINE  /u01/app/oracle/oradata/ocp/redo01.log     NO
         2         ONLINE  /u01/app/oracle/oradata/ocp/redo02.log     NO
         3         ONLINE  /u01/app/oracle/oradata/ocp/redo03.log     NO
         1 INVALID ONLINE  /u01/app/oracle/oradata/ocp/testlog/redo01.log     NO
         2 INVALID ONLINE  /u01/app/oracle/oradata/ocp/testlog/redo02.log     NO
         3 INVALID ONLINE  /u01/app/oracle/oradata/ocp/testlog/redo03.log     NO

查看数据库是否开启archive

idle> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u01/app/oracle/product/11.2.0/dbs/arch
Oldest online log sequence     166
Current log sequence           168

idle> select log_mode from v$database;

LOG_MODE
------------
NOARCHIVELOG


要开启归档模式,需要先把数据库停止shutdown,然后开始到mount状态,开启归档,最后open数据库。

idle> startup mount
ORACLE instance started.


Total System Global Area 1068937216 bytes
Fixed Size                  2235208 bytes
Variable Size             272630968 bytes
Database Buffers          788529152 bytes
Redo Buffers                5541888 bytes
Database mounted.
idle> alter database archivelog
  2  ;


Database altered.


idle> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/product/11.2.0/dbs/arch
Oldest online log sequence     166
Next log sequence to archive   168
Current log sequence           168

idle> alter database open;


Database altered.

日志切换,当写满一个文件会自动切换,也可以用命令手动切换

idle> alter system switch logfile;


System altered.

dba_hist_log视图可以查看之前的log是在哪个group及是否归档

idle> select group#,sequence#,bytes,members,ARCHIVED,status from dba_hist_log order by sequence# desc;


    GROUP#  SEQUENCE#      BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- --- ----------------
         3        174   52428800          2 NO  CURRENT
         2        173   52428800          2 YES INACTIVE
         1        172   52428800          2 YES INACTIVE
         2        167   52428800          1 NO  CURRENT
         2        167   52428800          1 NO  CURRENT
         2        167   52428800          1 NO  CURRENT
         2        167   52428800          1 NO  CURRENT
         2        167   52428800          1 NO  CURRENT
         1        166   52428800          1 NO  INACTIVE
         1        166   52428800          1 NO  INACTIVE
         1        166   52428800          1 NO  CURRENT
         1        166   52428800          1 NO  INACTIVE
         1        166   52428800          1 NO  INACTIVE
         1        166   52428800          1 NO  INACTIVE
         3        165   52428800          1 NO  CURRENT
         3        165   52428800          1 NO  INACTIVE
         3        165   52428800          1 NO  INACTIVE
         3        165   52428800          1 NO  INACTIVE
         3        165   52428800          1 NO  INACTIVE

### 解决 Oracle 数据库中关于归档日志配置和语法错误的问题 #### 错误 -810 和 -2007 的原因分析 在 Oracle 数据库中,`ALTER DATABASE primary` 操作失败并提示错误 -810 通常是因为数据库未启用归档模式。此外,执行 `archive log list` 命令时出现错误 -2007 表明用户可能缺乏必要的权限或数据库未正确配置归档功能[^1]。 #### 配置归档模式以解决错误 -810 为了解决错误 -810,必须确保数据库处于归档模式。以下是具体操作方法: ```sql -- 关闭数据库实例 shutdown immediate; -- 启动数据库至 mount 状态 startup mount; -- 启用归档模式 alter database archivelog; -- 打开数据库 alter database open; ``` 完成上述操作后,使用以下命令验证归档模式是否已启用: ```sql archive log list; ``` 如果输出显示 `Database log mode: Archive Mode`,则表明归档模式已成功启用。 #### 解决 `archive log list` 语法错误 -2007 错误 -2007 通常与用户权限不足有关。确保当前用户具有 `SYSDBA` 权限。可以通过以下方式连接到数据库并验证权限: ```sql sqlplus / as sysdba ``` 如果权限问题已排除,但仍出现错误 -2007,则可能是数据库实例未正常启动或归档配置存在问题。检查数据库状态并确保其处于打开状态: ```sql select status from v$instance; ``` 如果状态不是 `OPEN`,请按照以下步骤重新启动数据库: ```sql shutdown immediate; startup; ``` #### 配置归档日志路径 为了确保归档日志的正常生成和存储,需要设置归档日志的目标路径。可以通过以下命令完成配置: ```sql alter system set log_archive_dest_1='LOCATION=/path/to/archive' scope=both; ``` 此处 `/path/to/archive` 应替换为实际的归档日志存储路径。此外,可以为备用数据库配置远程归档目标: ```sql alter system set log_archive_dest_2='service=standbydb lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=standbydb' sid='*'; ``` #### 验证归档日志配置 完成归档模式和路径配置后,通过以下步骤验证归档日志功能是否正常: 1. 切换日志以生成新的归档日志: ```sql alter system switch logfile; ``` 2. 检查归档日志的状态和位置: ```sql archive log list; ``` 3. 查询归档日志的生成情况: ```sql select * from v$archived_log; ``` #### 处理备用数据库中的归档日志同步问题 在主备数据库环境中,如果备用数据库未能正确同步归档日志,可能的原因包括网络问题、归档路径不匹配或日志传输延迟。可以通过以下命令检查备用数据库的归档日志应用状态: ```sql select process, status, error from v$managed_standby; ``` 如果发现错误或延迟,可以尝试重新启动日志应用进程: ```sql alter database recover managed standby database cancel; alter database recover managed standby database using current logfile disconnect; ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值