第十七章 数据库的归档模式
<p>[TOC]</p>
<h2>归档模式的特点和要求</h2>
<ul>
<li>归档概念的一些解释</li>
<li>归档特点</li>
</ul>
<h2>将数据库设置为归档模式</h2>
<ul>
<li>
<p>设备为归档模式</p>
<pre><code>connect sys/oracle as sysdba
archive log list
shutdown immediate
startup mount
alter database archivelog;
--老版本的系统,在设置为归档模式后应该立即开户归档后台进程
alter system archive log start;
alter database open;
archive log list
--做数据库的全备份</code></pre>
</li>
<li>
<p>验证完要记得关闭归档,不然占满空间数据库就用不了了</p>
<pre><code>shutdown immediate
startup mount
alter database noarchivelog;
alter database flashback off;--如果闪回有打开,要关闭
alter database open;
archive log list
--删除归档日志
rm -rf /home/oracle/dbdata/disk4/offlinelog
rm -rf /home/oracle/dbdata/disk3/offlinelog
rm -rf /home/oracle/dbdata/disk2/offlinelog
--定位有问题文件
df -h
du -sh *</code></pre>
</li>
<li>
<p>重做日志到归档日志手工复制
<code>alter system archive log current;</code></p>
</li>
<li>设置数据库为自动归档模式
在把数据库设置为归档模式之后应该立即启动归档后台进程(将数据库设置为自动归档模式)</li>
</ul>
<pre><code>alter system archive log start;
archive log list
--以上设置方法,10g以前的版本重启后不会自动重启
--以下使用设置参数文件的方法设置自动归档模式
SQL> show parameter log_archive_start
NAME TYPE VALUE
----------------- ------- ------
log_archive_start boolean FALSE
alter system set log_archive_start=true scope=spfile;
shutdowm immediate
startup
SQL> show parameter log_archive_start
--报错:ORA-32004,原因是新版本不用这个参数了
##创建pfile
create pfile = 'pfileorcl.ora' from spfile='spfileorcl.ora';
##修改pfile后,重新生成spfile
vim /u01/app/oracle/product/12.2.0/db_1/dbs/pfileorcl.ora
##*.log_archive_start=TRUE
startup pfile='/u01/app/oracle/product/12.2.0/db_1/dbs/pfileorcl.ora'
create spfile='spfileorcl.ora' from pfile='pfileorcl.ora';
##重新启动就没有报错了
startup</code></pre>
<h2>归档进程和归档文件目录设置</h2>
<ul>
<li>了解重做日志缓冲区写重做日志,重做日志写归档日志</li>
<li>
<p>防止ARCn赶不上LGWR,开户多个归档后台进程(动态参数)</p>
<pre><code>alter system set log_archive_max_processes=3;
show parameter log_archive_max_processes</code></pre>
</li>
<li>归档日志冗余
<pre><code>show parameter log_archive_dest_
--1-31都为空
--使用如下路径
/home/oracle/data/disk4/offlinelog
alter system set log_archive_dest_1="LOCATION=/home/oracle/data/disk4/offlinelog mandatory";
--再搜索就有设置上路径了
show parameter log_archive_dest_
alter system set log_archive_dest_2="LOCATION=/home/oracle/data/disk3/offlinelog";
alter system set log_archive_dest_3="LOCATION=/home/oracle/data/disk2/offlinelog optional";
--由查询可知,为空时也是可选性
select destination,binding,target,status from v$archive_dest;
mandatory 强制性
optional 可选性
--使用日志交换命令使其产生归档日志
alter system switch logfile;
--再检查就有归档日志产生了</code></pre></li>
</ul>
<h2>归档文件和归档进程的管理和维护</h2>
<ul>
<li>
<p>设置强制性归档日志数据</p>
<pre><code>show parameter log_archive_min_succeed_dest
alter system set log_archive_min_succeed_dest=2;</code></pre>
</li>
<li>disk4的强制性归档日志坏了怎么办,另一参数设置开户或者关闭归档功能。
<pre><code>SQL> show parameter log_archive_dest_state_
select destination,binding,target,status from v$archive_dest;
alter system set log_archive_dest_state_1=defer;
--设置为不可用后,数据库不会写这个归档日志,如果维护完成为可用,丢失的归档文件应该手工恢复
alter system set log_archive_dest_state_1=enable;</code></pre></li>
</ul>
<h2>改变成归档模式的应用实例</h2>
<ul>
<li>参数设置两个强制归档</li>
<li>归档目录设置一个强制</li>
<li>三个归档写进程</li>
</ul>
<pre><code>--启动归档模式
connect sys/oracle as sysdba
archive log list
shutdown immediate
startup mount
alter database archivelog;
alter database open;
archive log list
--做全备份,备份在hotbackup
/home/oracle/hotbackup
select name from v$controlfile ;
select member from v$logfile;
select file_name,tablespace_name from dba_data_files;
SQL> show parameter spfile --有值是spfile开启的
select * from v$parameter where name='spfile';
select * from v$spparameter;
[oracle@oracle script]$ vim /home/oracle/script/hotbackup.sh
#! /bin/sh
## HotBacksCript
rlwrap sqlplus / as sysdba <<EOF
shutdown immediate;
host cp -rf /u01/app/oracle/oradata/* /home/oracle/hotbackup/oradata
host cp -rf /home/oracle/data/disk1/* /home/oracle/hotbackup/disk1
host cp -rf /home/oracle/data/disk2/* /home/oracle/hotbackup/disk2
host cp /u01/app/oracle/product/12.2.0/db_1/dbs/spfileorcl.ora /home/oracle/hotbackup
exit;
EOF
--维护归档日志
alter system set log_archive_dest_1="LOCATION=/home/oracle/dbdata/disk4/offlinelog mandatory";
alter system set log_archive_dest_2="LOCATION=/home/oracle/dbdata/disk3/offlinelog";
alter system set log_archive_dest_3="LOCATION=/home/oracle/dbdata/disk2/offlinelog optional";
show parameter log_archive_dest_
select destination,binding,target,status from v$archive_dest;
alter system switch logfile;
show parameter log_archive_min_succeed_dest
alter system set log_archive_min_succeed_dest=2;
alter system set log_archive_max_processes=3;
show parameter log_archive_max_processes</code></pre>