Linux下oracle开启归档并定期删除归档日志

1、首先用sys登录数据库,查看oracle是否开启归档模式(su - oracle切换用户,然后sysdba / as sysdba进入sql模式)

如果是非归档模式,需要开启归档模式,具体步骤如下:

[root@admin ~]# su - oracle
Last login: Thu Jan 16 15:42:13 CST 2020 on pts/3
[oracle@admin ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Mar 6 09:14:11 2020

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

(1)输入archive log list来查看是否开启,如下说明不是归档模式

SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /oradata/archivelog/h
Oldest online log sequence     14
Current log sequence           17

(2)需要将数据库归档更改为enable,使用shutdown immediate来关闭数据库

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

(3)使用startup mount来启动数据库(当数据库处于这个模式时,可以执行一些管理的任务,像恢复操作)

SQL> startup mount;
ORACLE instance started.

Total System Global Area 1235959808 bytes
Fixed Size            2252784 bytes
Variable Size          956301328 bytes
Database Buffers      268435456 bytes
Redo Buffers            8970240 bytes
Database mounted.

(4)alter database archivelog开启归档

SQL> alter database archivelog;
Database altered.

(5)alter database open打开数据库,此模式为数据库的正常模式

SQL> alter database open;
Database altered.

(6)此时查看归档状态,已经变为enable,已经开启归档

SQL> archive log list;
Database log mode               Archive Mode
Automatic archival              Enabled
Archive destination             /oradata/archivelog/
Oldest online log sequence      14
Next log sequence to archive    17
Current log sequence            17

2、查看归档日志路径

SQL> archive log list;
Database log mode               Archive Mode
Automatic archival              Enabled
Archive destination             /oradata/archivelog/
Oldest online log sequence      14
Next log sequence to archive    17
Current log sequence            17

如果没有设置归档日志路径,需要设置归档日志的存放路径具体如下:

(1)创建归档目录:

mkdir -p /oradata/archivelog

修改归档目录权限

chown oracle:oinstall /oradata/archivelog 

(2)设置归档路径

sqlplus / as sysdba
alter system set log_archive_dest_1='LOCATION=/oradata/archivelog/' scope=spfile;

注意最后要带上/ 斜杠。

如果是9i还需要设置参数log_archive_start,参数不能在线修改,需要重启生效。10g和11g不需要修改此参数。

命令:alter system set log_archive_start =true  scope=spfile;

另外,归档路径一定要设置专门存放归档的目录,不要放到闪回空间里!

闪回空间受限于db_recovery_file_dest_size的大小,及时闪回所在的文件系统或者ASM磁盘组剩余空间再充足,也无法生成新的归档日志。

另外如果手动在删除了闪回空间里的归档文件,归档日志仍然是无法切换的,因为控制文件仍然认为闪回空间是满的。 

(3)关闭数据库:

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

(4)启动到mount状态:

SQL> startup mount
ORACLE instance started.
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 96469696 bytes
Database Buffers 184549376 bytes
Redo Buffers 7139328 bytes
Database mounted.

(5)修改为归档模式

SQL> alter database archivelog; 
Database altered. 

(6)启动数据库:

SQL> alter database open; 
Database altered. 

(7)检查归档模式:

SQL> archive log list; 
Database log mode                Archive Mode 
Automatic archival               Enabled 
Archive destination              /oradata/archivelog/ 
Oldest online log sequence       14 
Next log sequence to archive     17 
Current log sequence             17 

3、手动删除归档日志

检查数据库中是否存在offline的数据文件

select * from v$recover_file;

如果没有返回结果,那么可以直接执行删除归档命令(rman下)
如果发现系统中存在offline的数据文件,该数据文件是否需要offline,如果不需要offline,归档日志可以被清理,如果数据文件需要online,那么应当按照如下步骤进行删除。
根据select * from v$recover_file; 中time列返回的结果以及数据库alert日志中offline操作的时间,找到需要的最早的时间点,如果存在断档,应先恢复对应归档日志,然后通过rman执行恢复命令。最后通过rman删除归档。

(1)进入oracle的rman模式:

[oracle@admin ~]$ rman target /

Recovery Manager: Release 11.2.0.4.0 - Production on Fri Mar 6 10:04:27 2020

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1555210243)

RMAN> 

(2)列出所有的归档日志并确认归档日志路径

RMAN> list archivelog all;

(3)删除归档日志具体的语句

删除一天之前的全部归档日志

delete archivelog all completed before 'sysdate-1';  

删除一个小时之前的全部归档日志。

delete archivelog all completed before 'sysdate-1/24';

删除失效的归档日志

delete expired archivelog all;

如果日志爆了,用以上命令可能不起作用,可以使用下面的命令强行删除所有日志

delete noprompt force archivelog all;

4、设置定时删除归档日志

 (1)在oracle账号下,创建归档日志删除文件del_arch.sh
文件位置:/home/oracle/crontabora,内容如下:

#!/bin/bash
. ~/.bash_profile
LOG_DIR=/oradata/archivelog/
DATEL=`date '+%Y-%m-%d'`
LOG_NAME=${LOG_DIR}${DATEL}".log"

$ORACLE_HOME/bin/rman log=$LOG_NAME target sys/oracle@orcl <

(2)赋可执行权限

chmod +x del_arch.sh

3、设定定时任务,在oracle账号下,编辑配置文件

crontab -e

配置文件内容(每天凌晨1点执行删除任务):

0 1 * * * /home/oracle/crontabora/del_arch.sh

ps -ef | grep crond                             #判断定时服务是否启动
service crond start|stop|restart          #启动、停止或重启服务

可以用 tail -f /var/log/cron 观察

5、附设置归档日志大小

[oracle@admin ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Mar 6 10:12:36 2020

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> alter system set db_recovery_file_dest_size=100G;

System altered.

SQL> show parameter recover

NAME                     TYPE         VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                 string      /oradata/archivelog/
db_recovery_file_dest_size            big integer 100G
db_unrecoverable_scn_tracking         boolean     TRUE
recovery_parallelism                  integer     0

对比数据库设置的日志空间,该目录大小不能大于数据库设置的空间。

你可能感兴趣的:(oracle)