10、数据库归档模式管理
实验目的:掌握数据库归档模式转换和设置
实验内容:将数据库由非归档模式转化为归档模式,备份数据库,设置归档模式下的参数
实验环境:
实验步骤:
1、以sys登录数据库,并查看数据库的模式
SQL>conn sys/orcl@orcl as sysdba
SQL>shutdown immediate;
SQL>startup mount;
SQL>archive log list;
2、将数据库改为归档模式,并查看归档文件状态
SQL>alter database archivelog;
#设置为非归档模式的命令:alter database noarchivelog;
SQL>alter database open;
--Oracle自动启动归档后台进程。
SQL>show parameter log_archive_dest_;
注:设置为归档模式后,如果重启Oracle会出现如下错误信息:
这个信息是因为oracle10g会自动启动归档后台进程,不需要归档后台进程参数log_archive_start自启动参数设置了,这时候会出现上述提示该参数作废,不再使用的信息。
3、将数据库重新进行备份,由于更改了归档模式,所以在非归档模式下的备份已经不能使
用了。
//查询数据文件、重做日志文件、控制文件、参数文件、口令文件的位置
//查看数据文件
SQL>desc dba_data_files
SQL>select file_name from dba_data_files;
//查看重做日志文件
SQL>desc v$logfile
SQL>select group#,member from v$logfile;
//查询控制文件
SQL>desc v$controlfile;
SQL>select name from v$controlfile;
//查询参数文件位置
SQL>show parameter pfile;
//口令文件位置
%ORACLE_HOME%\database\pwdorcl.ora
//创建备份用文件夹,对应于现有的Oracle系统路径
例如:SQL>host md f:\oradata\orcl
…
…
//由于数据库是归档模式,因此可以联机备份,不再脱机备份
//将上面的文件复制到相应的文件夹中
SQL>host copy c:\oracle\product\10.2.0\oradata\orcl\*.* f:\oradata\orcl
…
…
4、归档进程设置
Oracle系统默认的归档进程最大值是2个,下面可以查询如下参数来证实一下:
SQL>show parameter log_archive_max_processes;
在较大型或者繁忙的归档模式下的Oracle数据库中,这样只有两个归档后台进程的设置,往往会因为ARCn(归档后台进程)进程跟不上LGWR,造成数据库性能下降。
我们可以通过设置参数来改变这种状况:
SQL>alter system set log_archive_max_processes=5 scope=both;
重启Oracle数据库,使参数生效。
5、设置归档文件数量、路径
归档日志文件中存储了数据库恢复所需的所有信息,如果归档日志文件损坏了,数据库的全部恢复是很难做到的。
所以对归档日志文件也要采取保护措施以防止由于磁盘或文件的损毁而造成的数据丢失。
我们这里采取的措施就是文件冗余,也就是把归档日志同时写到多个不同位置的归档文件中。
//查看归档文件数量、路径、状态
SQL>show parameter log_archive_dest_
看到了什么?还没有归档文件可用
下面来设置至少5,最多10个不同的归档日志文件路径:log_archive_dest_1~log_archive_dest10
SQL>alter system set log_archive_dest_1=”location=f:\offlinelog\mandatory”;
SQL>alter system set log_archive_dest_2=”location=f:\offlinelog\optio nal”;
…
…
SQL>alter system set lo g_archive_dest_10=”location=f:\offlinelog\optional”
--其中location是表示归档日志文件将放在指定的本地磁盘上。
--设置完后查看一下归档日志文件物理路径
SQL>show parameter log_archive_dest_;
//结果显示已经成功设置了归档日志文件路径
6、查看归档日志文件生成情况
SQL>host dir c:\offlinelog
结果没有文件。
这样的结果是什么原因造成的呢?
是由于时间短,产生的重做日志很少,还没有填满重做日志文件,没有发生重做日志的切换,当然也就不能产生归档日志文件了。
我们这里可以通过命令强制进行重做日志切换,从而产生日志归档而产生归档日志文件:
SQL>alter system switch logfile;
这是在查看归档日志文件夹,里面就有完全相同的文件了。
7、设置归档文件状态
在设置归档日志文件路径时有两个选项mandatory和optional,其中mandatory是强制写成功后才能重用,而optional不是强制的,这样往往是可以使用的归档文件只有1个,比较危险和脆弱。
因此Oracle引入了一个参数log_archive_min_succeed_dest,通过这个参数可以保证成功的归档日志文件数量(最低要求),这样一来即使没有设置足够的强制参数(mandatory),系统也会保证最低的要求。
//查询log_archive_min_succeed_dest
SQL>show parameter log_archive_min_succeed_dest;
//设置log_archive_min_suceed_dest
SQL>alter system set log_archive_min_succeed_dest=2;
//设置完后,查询当前值,这是系统保证强制写成功的归档文件最少2个
SQL>show parameter log_archive_min_succeed_dest;
8、设置了mandatory后,如果没有写成功或者所在的磁盘坏了,会造成Oracle挂起的
错误,出现上面的故障的时候,怎样尽快解决这个问题呢?
我们可以针对某一个归档日志文件路径状态参数log_archive_dest_state_n改为defer就可以了
SQL>alter system set log_archive_dest_state_1 = defer;
这样系统就会忽略掉它而去写其他的归档日志文件
//查询状态
SQL>desc v$archive_dest;
SQL>select destination,binding,target,status from v$archive_dest;
注:为防止出现因mandatory参数设置造成的数据库挂起错误,我们可以不设置mandatory 这个参数,直接由log_archive_min_succeed_dest参数来保证就可以了。
9、手工强制归档的方法
SQL>alter system switch logfile;
//强制当前重做日志归档
SQL>alter system archive log current;
10、启动归档进程(Oracle10g之前)
//手工启动归档进程
SQL>alter system archive log start;
至此归档模式设置实验完成。