Loading

Oracle的归档日志

归档模式的特点和要求

  在归档模式下,当LGWR后台进程的写操作从一个重做日志组切换到另一个重做日志组后,归档写后台进程(ARCH/ARCRn)就会将原来的重做日志的信息复制到归档日志文件中。

  可以把归档日志文件看做是重做日志文件的克隆。

  对于归档模式的日志切换,当日志归档完成后,下一个日志才能被覆盖或重新使用。

  归档日志文件的用途:

    1.当数据库崩溃后,数据库所有提交的数据都能得到恢复。

    2. 在归档模式下,数据库可以进行联机备份

    3. 当某一个非系统表空间脱机时,数据库其它部分可以正常工作。

    4. 可以进行如下不完全恢复:

      --恢复到一个特定的时间点

      --恢复到一个特定的SCN号

      --恢复到某一个特定的归档文件结尾

 

开启归档

步骤如下:

   a.一致性关闭数据库(shutdown [immediate | transactional |normal])

        b.启动到mount阶段(startup mount)

        c.切换到归档模式(alter database noarchivelog  )

        d.切换到open阶段(alter database open)

        e.对数据做一个完整备份(full backup)

演示:

1.查看当前模式
SQL> archive log list;
Database log mode           No Archive Mode
Automatic archival           Disabled
Archive destination           USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     87
Current log sequence           89

2.关闭数据库

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

3.启动数据库到mount状态

SQL> startup mount;
ORACLE instance started.

Total System Global Area 3624390656 bytes
Fixed Size            2218632 bytes
Variable Size         2583692664 bytes
Database Buffers     1023410176 bytes
Redo Buffers           15069184 bytes
Database mounted.

4.启动归档

SQL> alter database archivelog;

Database altered.

5.开启数据库

SQL> alter database open;

Database altered.

6.再次查看归档模式

SQL> archive log list;
Database log mode           Archive Mode
Automatic archival           Enabled
Archive destination           USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     87
Next log sequence to archive   89
Current log sequence           89

这是需要对数据库做一个全备份,因为之前的非归档模式下的备份在归档模式下已经不能个使用了。

 

关闭归档

   a.一致性关闭数据库(shutdown [immediate | transactional |normal])

        b.启动到mount阶段(startup mount)

        c.切换到归档模式(alter database noarchivelog  )

        d.切换到open阶段(alter database open)

        e.对数据做一个完整备份(full backup)

 

 

归档模式下的几个重要参数

归档进程的调整 :

LOG_ARCHIVE_MAX_PROCESSES 

  这个主要是因为如果数据库的DML操作频繁,ARCn的读写跟不上LGWR,一般情况是是不需要修改这个参数的,Oracle会根据归档情况自动启动额外的归档进程。

  也可以动态的修改该参数

SQL> show parameter log_archive_max_process

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
log_archive_max_processes         integer     4


SQL> ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;

系统已更改。

 

归档到本机或者远程主机

LOG_ARCHIVE_DEST_n

oracle11g可以同时将31个相同归档日志文件写到不同的位置

--查看归档文件位置

 

SQL> show parameter LOG_ARCHIVE_DEST_

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1              string
log_archive_dest_10             string
log_archive_dest_11             string
log_archive_dest_12             string

........................................................

log_archive_dest_state_8         string     enable
log_archive_dest_state_9         string     enable

 

也可以用 select *from v$archive_dest;查看

 

--设置归档文件位置

SQL> alter system set log_archive_dest_1="LOCATION=/u01/ARCHLOG/ mandatory";

系统已更改。

SQL> alter system set log_archive_dest_2="LOCATION=/u02/ARCHLOG/";

系统已更改。

SQL> alter system set log_archive_dest_3="LOCATION=/u03/ARCHLOG/ optional";

系统已更改。

   对于远程归档位置,SERVICE选项需要指定远程数据库的网络服务名(在tnsnames.ora文件中配置)

   alter system set log_archive_dest_2 = 'SERVICE=standby1';

--再次查看归档的位置

SQL> show parameter LOG_ARCHIVE_DEST_

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1             string     LOCATION=/u01/ARCHLOG/ mandatory
....... log_archive_dest_2 string LOCATION
=/u02/ARCHLOG/ log_archive_dest_20 string ........ log_archive_dest_29 string log_archive_dest_3 string LOCATION=/u03/ARCHLOG/ optiona
LOCATION

LOG_ARCHIVE_DEST_n的两个常用选项,缺省为OPTIONAL

              MANADATORY | OPTIONAL:

                    MANADATORY(强制性的)表示归档必须成功复制到目的路径之后,联机重做日志才能被复用,OPTIONAL正好相反

                REOPEN:

                    指定归档失败后指定间隔多少时间重试归案,缺省的为300秒

                示例:

                log_archive_dest_1 = 'LOCATION=/u01/app/oracle/archivelog3 manadatory reopen = 600'

                log_archive_dest_2 = 'SERVICE=standby1 manadatory reopen'

 

--查看是否在制定路径下产生了归档

切换重做日志:

SQL> alter system switch logfile;

[oracle@oracledb u03]$ ls ARCHLOG/
1_768_917304775.dbf
[oracle@oracledb u03]$ ls ../u02/ARCHLOG/
1_768_917304775.dbf

 

归档成功的最小个数

log_archive_min_succeed_dest

alter system set log_archive_min_succeed_dest = 2;   --缺省为1

            联机重做日志组能够被覆盖的前提

                所有强制路径归档位置成功实现归档

                归档目的地的成功归档的个数大于或等于上述参数设定的值

                当强制个数大于该参数设定的个数,则以强制个数为准

                当强制个数小于该参数设定的个数,则可选的成功归档路径加上强制的归档路径个数至少等于该参数设定值

SQL> show parameter log_archive_min_succeed_dest

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
log_archive_min_succeed_dest         integer     1
SQL> alter system set log_archive_min_succeed_dest = 2; 

 

控制归档的可用性

log_archive_dest_state_n

      这个参数引入的目的主要是为系统的维护提供方便,DEFER(推迟)状态是一个临时的维护状态,一旦维护结束就要及时转回ENABLE状态(如硬盘已经修好),所丢失的归档文件必须手工恢复。

alter system set log_archive_dest_state_1 = enable | defer

            enable  -->缺省状态,可以在该归档位置进行归档

            defer   -->禁用该归档位置

 

 

归档日志命名格式

 

设置LOG_ARCHIVE_FORMAT参数,Unix下的缺省设置为LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf

 

                %s: 日志序列号:

 

                %S: 日志序列号(带有前导)

 

                %t: 重做线程编号.

 

                %T: 重做线程编号(带有前导)

 

                %a: 活动ID号

 

                %d: 数据库ID号

 

                %r RESETLOGS的ID值.

 

            alter system set log_archive_format = 'arch_%t_%s_%r.arc';

 

归档位置状态

    Valid/Invalid      --磁盘位置及服务名等是否有效

            Enabled/Disabled   --磁盘位置的可用状态及数据库能否使用该归档位置

            Active/Inactive    --访问归档目的地是否有异常

 

归档日志相关视图

  v$archived_log           -->从控制文件中获得归档的相关信息

    v$archive_dest           -->归档路径及状态

    v$log_history              -->控制文件中日志的历史信息

    v$database                 -->查看数据库是否处于归档状态

    v$archive_processes       -->归档相关的后台进程信息

SQL> col DEST_NAME for a40
SQL> col DESTINATION for a50
SQL>  select dest_name,destination from v$archive_dest where status='VALID';

DEST_NAME                 DESTINATION
---------------------------------------- --------------------------------------------------
LOG_ARCHIVE_DEST_1             /u01/ARCHLOG/
LOG_ARCHIVE_DEST_2             /u02/ARCHLOG/
LOG_ARCHIVE_DEST_3             /u03/ARCHLOG/

SQL> select * from v$archive_processes where status='ACTIVE';

   PROCESS STATUS     LOG_SEQUENCE STAT
---------- ---------- ------------ ----
     0 ACTIVE         0 IDLE
     1 ACTIVE         0 IDLE
     2 ACTIVE         0 IDLE

 

posted @ 2016-07-28 11:13  头痛不头痛  阅读(612)  评论(0编辑  收藏  举报