一、Oracle环境
Oracle服务器:oracle11g
oracle版本:11.2.0.1.0
操作系统版本:Red Hat Enterprise Linux Server release 7.6 (Maipo)
二、归档模式介绍
oracle是款高安全性的数据库,刚安装好的数据库一般没有开启归档模式,我们需要开启归档模式,特别是业务数据库,开启归档后,故障发生时才可以实现数据库的完全恢复。
在实际应用中,我们需要实现对数据的备份,其实现方式主要有冷备份和热备份两种。现在我们主要讨论热备份的具体操作。热备份也称为联机备份,在数据库的归档模式下进行备份。oracel数据库默认归档模式为关闭状态,要实现数据的热备份,需要改变数据库的归档模式,将其打开。并且需要注意的是数据库的归档模式的操作需要在MOUNT实例中进行,且数据库不能处于OPEN状态。
三、打开归档模式
步骤一:首先用sys登录数据库,查看oracle是否开启归档模式(su - oracle切换用户,然后sqlplus / as sysdba进入sql模式)
输入archive log list来查看是否开启,如下说明不是归档模式
[oracle@oracle11g ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Thu Jun 18 00:48:26 2020
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn /as sysdba
Connected.
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled /*目前不是归档模式
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 7
Current log sequence 9
步骤二:需要将数据库归档更改为enable,使用shutdown immediate来关闭数据库(因为不能在open状态下进行操作)
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
步骤三:使用startup mount来启动数据库实例(当数据库处于这个模式时,可以执行一些管理的任务,像恢复操作)
SQL> startup mount
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 281022296 bytes
Database Buffers 780140544 bytes
Redo Buffers 5554176 bytes
Database mounted.
步骤四:修改归档位置
SQL>alter system set log_archive_dest_1='location=/nbumedia-store' scope=spfile; /*可创建指定的归档目录
System altered.
步骤五:alter database archivelog开启归档模式
SQL> alter database archivelog;
Database altered.
步骤六:alter database open打开数据库,此模式为数据库的正常模式.
SQL> alter database open;
Database altered.
步骤七:此时查看归档状态,已经变为enable,已经开启归档
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /nbumedia-store
Oldest online log sequence 7
Next log sequence to archive 9
Current log sequence 9
SQL> exit
四、关闭归档模式
前面已经提到,数据的存档模式的操作必须要在mount实例中进行,且数据库要处于非open状态。所有关闭存档模式前,我们需要查看当前数据库的状态,并且关闭数据库,启动mount实例,才可进行操作。其具体操作为:
步骤一:使用SQL:select status from v$instance;查看当前数据库的状态,正常情况下一般都处于open状态。
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL>
步骤二:使用SQL:shutdown immediate; --关闭数据库,因为数据库当前状态为open
startup mount; --启动mount实例--
alter database noarchivelog; --改变数据库存档模式为非存档模式
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 281022296 bytes
Database Buffers 780140544 bytes
Redo Buffers 5554176 bytes
Database mounted.
SQL> alter database noarchivelog;
Database altered.
步骤三:此时使用SQL:archive log list 查看,存档模式已经变更为非存档模式。
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /nbumedia-store
Oldest online log sequence 9
Current log sequence 11
SQL>
步骤四:再次使用SQL:select status from v$instance;进行查看数据库的当前状态,当前状态为mount状态。
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL>
步骤五:最后别忘记使用SQL:alter database open;打开数据库。
SQL> alter database open;
Database altered.
步骤六:再次使用SQL:select status from v$instance;查看数据库状态,为open状态。
SQL> select status from v$instance;
STATUS
------------
OPEN
最后使用快捷键Crtl + C 退出sqlplus。
查看归档模式
创建归档目录
修改归档目录和归档格式
2 设置恢复目录/归档目录(仅节点1)
- 正确设置
归档文件可以放在本地,也可以放在asm共享磁盘中,RAC环境要放ASM中。
- 如果是ASM
SQL>alter system set log_archive_dest_1='location=+DATA';
- 如果是文件系统
SQL>alter system set log_archive_dest_1='location=/archivelog';
- 错误设置
SQL>alter system set db_recovery_file_dest_size=500g;
SQL>alter system set db_recovery_file_dest='+DATA';
原因分析:如果归档盘是500g,快满的时候就需要手动增加容量;
如果归档空间满了,数据库就会报归档错误,应用无法连接。
- 设置数据库为非集群模式(仅节点1)
SQL>show parameter cluster
SQL>alter system set cluster_database=false scope=spfile;
- 节点1和2关闭数据库
关闭数据库,启动后mount(仅节点1)
SQL>shutdown immediate
- 仅在节点1操作
SQL>startup mount
SQL>alter database archivelog;
SQL>alter database open;
- 查看归档状态
SQL>archive log list;
设置数据库为集群模式(仅节点1)
SQL>alter system set cluster_database=true scope=spfile;
此前是在节点1操作,节点2并没有开启归档,选择打开集群模式后,重新数据库,节点二也就打开了归档.
重启数据库,并打开(仅节点1)
节点1:
SQL>shutdown immediate;
SQL>startup
先等节点一启动完成后,再启动节点二
节点2:
SQL>startup
检查节点2的归档模式:
SQL>archive log list;
Oracle 19c RAC开归档
7、配置归档日志删除脚本和定时任务
mkdir -p /home/oracle/scripts/
vi /home/oracle/scripts/del_arch.sh
##添加以下脚本
!/bin/bashsource ~/.bash_profiledeltime=`date +"20%y%m%d%H%M%S"`rman target / nocatalog msglog /home/oracle/scripts/del_arch_${deltime}.log<<EOF crosscheck archivelog all; delete noprompt archivelog until time 'sysdate-7'; delete noprompt force archivelog until time 'SYSDATE-10';EOF