开启/关闭归档,增加归档空间删除归档(归档满了)

1. 开启归档

先关闭数据库 shutdown immediate
开启到挂载状态 startup mount 
改到归档模式 alter database archivelog; 
查看结果 archive log list 
启动数据库 alter database open 启动数据库(此处startup open不行)

2.关闭归档

1、登录数据库:执行alter system set cluster_database = false scope=spfile;
2、关闭node1和node2数据库:shutdown immediate;
3、启动node1至mount状态:startup mount;
4、执行关闭归档:alter database noarchivelog;
5、开启数据库:alter database open;
6、在node1执行:alter system set cluster_database=true scope=spfile;
7、关闭数据库:shutdown immediate;
8、启动node1数据库:startup
9、启动node2数据库:startup
 

3. 增加归档日志空间

1、查看归档情况
sql>archive log list;

 

SYS@DBDJ1> set linesize 1000;
SYS@DBDJ1> set pagesize 1000;
SYS@DBDJ1> show parameter db_recovery_file_dest;
NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
db_recovery_file_dest                string                 /u01/app/oracle/fast_recovery_
                                                           area
db_recovery_file_dest_size           big integer            4122M

 

 

 2. 增加到50G

SQL>ALTER SYSTEM SET db_recovery_file_dest_size=50g scope=both;

3. 重启数据库

SQL>shutdown immediate;
SQL>startup

4. 查看测试结果

SQL>show parameter db_recovery_file_dest --50G
SQL>sqlplus zz_**/password@10.126.29.241/jw

4.定时删除归档日志

建议使用RMAN提供的命令来搞定比较妥当。因为rm,find方式删除了实际的归档日志也释放了空间,但对应的存储在控制文件中的归档信息并没有彻底清除。
 

1、清除归档日志的方式

a、手动删除
      使用rm 或者find方式来删除,通过该方式删除之后,在RMAN下可以通过 crosscheck archivelog all 校验归档是否失效,如下面的操作:
       rm -rf arch_816906485_1_10.arc 
    find /u02/database/GOBO1/archive/ -ctime +0 -delete
    RMAN> crosscheck archivelog all

b、使用RMAN方式清除
      RMAN清除方式会自动清除磁盘上的归档日志文件,同时会释放控制文件中对应的归档日志的归档信息。
      可以基于不同的条件来清除归档日志,如基于SCN,基于SEQUENCE,基于TIME等方式。
      对于上述的三种方式又可以配合from, until, between .. and .. 等等子句来限定范围,方式灵活多变。
      下面的命令用于校验归档日志的有效性,列出无效的归档日志,以及以何种方式清除归档日志,列出几种常用的: 
                 crosscheck archivelog all;                             --->校验日志的可用性
          list expired archivelog all;                           --->列出所有失效的归档日志
          delete archivelog until sequence 16;                   --->删除log sequence为16及16之前的所有归档日志
          delete archivelog all completed before 'sysdate-7';    --->删除系统时间7天以前的归档日志,不会删除闪回区有效的归档日志
          delete archivelog all completed before 'sysdate - 1';  --->同上,1天以前的
          delete archivelog from time 'sysdate-1';               --->注意这个命令,删除系统时间1天以内到现在的归档日志
          delete noprompt archivelog all completed before 'sysdate';   --->该命令清除所有的归档日志
          delete noprompt archivelog all;                              --->同上一命令
 
2、演练使用RMAN清除归档日志
robin@SZDB:~> export ORACLE_SID=GOBO1
robin@SZDB:~> rman target /
 
Recovery Manager: Release 10.2.0.3.0 - Production on Thu Jul 11 17:07:00 2013
 
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 
connected to target database: GOBO1 (DBID=733951103)
 
RMAN> host;
 
robin@SZDB:~> cd /u02/database/GOBO1/archive/
robin@SZDB:/u02/database/GOBO1/archive> ls      
arch_816906485_1_10.arc      arch_816906485_1_12.arc  
arch_816906485_1_11.arc      arch_816906485_1_13.arc  
    ............
 
robin@SZDB:/u02/database/GOBO1/archive> rm -rf arch_816906485_1_10.arc arch_816906485_1_11.arc arch_816906485_1_12.arc
robin@SZDB:/u02/database/GOBO1/archive> exit;
exit                                         
host command complete                        
                                             
RMAN> crosscheck archivelog all;                 
released channel: ORA_DISK_1                                                                       
allocated channel: ORA_DISK_1                                                                      
channel ORA_DISK_1: sid=1075 devtype=DISK                                                          
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_9.arc recid=2085 stamp=817211151 
validation failed for archived log                                                                 
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_10.arc recid=2086 stamp=817250793
      ..............
validation succeeded for archived log                                                              
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_90.arc recid=2166 stamp=820458049
Crosschecked 83 objects                    
 
RMAN> list expired archivelog all;
 
List of Archived Log Copies
Key     Thrd Seq     S Low Time          Name
------- ---- ------- - ----------------- ----
2086    1    10      X 20130604 11:05:51 /u02/database/GOBO1/archive/arch_816906485_1_10.arc
2087    1    11      X 20130604 22:06:17 /u02/database/GOBO1/archive/arch_816906485_1_11.arc
2088    1    12      X 20130605 19:30:53 /u02/database/GOBO1/archive/arch_816906485_1_12.arc
 
RMAN> delete archivelog until sequence 16;
 
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=1075 devtype=DISK
 
List of Archived Log Copies
Key     Thrd Seq     S Low Time          Name
------- ---- ------- - ----------------- ----
2084    1    8       A 20130604 09:53:17 /u02/database/GOBO1/archive/arch_816906485_1_8.arc
                        .................
2092    1    16      A 20130607 22:03:23 /u02/database/GOBO1/archive/arch_816906485_1_16.arc
 
Do you really want to delete the above objects (enter YES or NO)? yes
          ...............
deleted archive log
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_16.arc recid=2092 stamp=817516861
Deleted 9 objects
 
RMAN> delete archivelog all completed before 'sysdate-7';
 
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=1075 devtype=DISK
 
List of Archived Log Copies
Key     Thrd Seq     S Low Time          Name
------- ---- ------- - ----------------- ----
2093    1    17      A 20130608 00:01:00 /u02/database/GOBO1/archive/arch_816906485_1_17.arc
2094    1    18      A 20130608 18:00:17 /u02/database/GOBO1/archive/arch_816906485_1_18.arc
            ...........
deleted archive log
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_72.arc recid=2148 stamp=819847035
Deleted 56 objects            
 
RMAN> list copy of database archivelog all;
 
 
List of Archived Log Copies
Key     Thrd Seq     S Low Time          Name
------- ---- ------- - ----------------- ----
2149    1    73      A 20130703 23:17:13 /u02/database/GOBO1/archive/arch_816906485_1_73.arc
2150    1    74      A 20130704 22:00:19 /u02/database/GOBO1/archive/arch_816906485_1_74.arc
2151    1    75      A 20130704 22:04:40 /u02/database/GOBO1/archive/arch_816906485_1_75.arc
                       ...............
2164    1    88      A 20130709 23:19:34 /u02/database/GOBO1/archive/arch_816906485_1_88.arc
2165    1    89      A 20130710 13:00:34 /u02/database/GOBO1/archive/arch_816906485_1_89.arc
2166    1    90      A 20130710 22:02:44 /u02/database/GOBO1/archive/arch_816906485_1_90.arc
 
RMAN> delete archivelog from time 'sysdate-1';
 
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=1075 devtype=DISK
 
List of Archived Log Copies
Key     Thrd Seq     S Low Time          Name
------- ---- ------- - ----------------- ----
2165    1    89      A 20130710 13:00:34 /u02/database/GOBO1/archive/arch_816906485_1_89.arc
2166    1    90      A 20130710 22:02:44 /u02/database/GOBO1/archive/arch_816906485_1_90.arc
 
Do you really want to delete the above objects (enter YES or NO)? yes
deleted archive log
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_89.arc recid=2165 stamp=820447373
deleted archive log
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_90.arc recid=2166 stamp=820458049
Deleted 2 objects
 
RMAN> delete archivelog all completed before 'sysdate - 1';
 
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=1075 devtype=DISK
 
List of Archived Log Copies
Key     Thrd Seq     S Low Time          Name
------- ---- ------- - ----------------- ----
2149    1    73      A 20130703 23:17:13 /u02/database/GOBO1/archive/arch_816906485_1_73.arc
              .......................
2164    1    88      A 20130709 23:19:34 /u02/database/GOBO1/archive/arch_816906485_1_88.arc
 
Do you really want to delete the above objects (enter YES or NO)? yes
     ................
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_88.arc recid=2164 stamp=820414835
Deleted 16 objects
 
RMAN> sql " alter system archive log current";
 
sql statement:  alter system archive log current
 
RMAN> list copy of archivelog all;
 
 
List of Archived Log Copies
Key     Thrd Seq     S Low Time          Name
------- ---- ------- - ----------------- ----
2167    1    91      A 20130711 01:00:48 /u02/database/GOBO1/archive/arch_816906485_1_91.arc
 
RMAN> delete noprompt archivelog all completed before 'sysdate';
 
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=1075 devtype=DISK
 
List of Archived Log Copies
Key     Thrd Seq     S Low Time          Name
------- ---- ------- - ----------------- ----
2167    1    91      A 20130711 01:00:48 /u02/database/GOBO1/archive/arch_816906485_1_91.arc
deleted archive log
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_91.arc recid=2167 stamp=820517964
Deleted 1 objects
 

3、清除归档日志简单的shell脚本

 

 1 #对于RAC环境或者ASM需要清除archive,使用shell脚本调用RMAN是比较妥当的方式
 2 #其次,如果你的archive位于闪回区,制定合理的保留策略,也可以让Oracle自动老化无用的归档日志
 3 robin@SZDB:~/dba_scripts/custom/bin> more clean_arch.sh 
 4 # +-------------------------------------------------------+
 5 # +    Clean archived log as specified time               |
 6 # +    Author : Robinson                                  |
 7 # +    Blog   : http://blog.csdn.net/robinson_0612        |
 8 # +    Usage  :                                           | 
 9 # +         clean_arch.sh $ORACLE_SID                     |
10 # +-------------------------------------------------------+
11 #
12 #!/bin/bash 
13 # --------------------
14 # Define variable
15 # --------------------
16  
17 if [ -f ~/.bash_profile ]; then
18 . ~/.bash_profile
19 fi
20  
21 if [ -z "${1}" ];then
22     echo "Usage: "
23     echo "      `basename $0` ORACLE_SID"
24     exit 1
25 fi
26  
27 ORACLE_SID=$1;                 export ORACLE_SID 
28 $ORACLE_HOME/bin/rman log=/users/robin/log/rman.log <<EOF   
29 connect target /
30 run{
31 crosscheck archivelog all;
32 delete noprompt expired archivelog all;
33 delete noprompt archivelog all completed before 'sysdate - 1';
34 }
35 exit;
36 EOF
37 exit 
38  

 

4、小结
a、归档日志清除的方法最好是在RMAN方式下完成,这样子是最彻底的清除方式
b、对于生产环境应考虑在RMAN备份的时候清除归档日志,如backup archivelog all时使用delete input与delete all input清除归档日志
c、如果备份期间不清除归档日志则arch会很大,造成归档磁盘满而导致归档失败。建议还是删除或考虑存放到闪回区
d、如果清除大部分又想保留最近的,则使用delete noprompt archivelog all completed before 'sysdate - n'方式
e、详细的清除归档日志语法: http://docs.oracle.com/cd/B19306_01/backup.102/b14194/rcmsynta008.htm#RCMRF106

 

 
 
 
 
 
 
 
 
 
 
 
 

 

posted @ 2020-12-03 06:59  Miracle2019  阅读(562)  评论(0编辑  收藏  举报