Oracle归档与非归档模式的切换
1. 查看oracle数据库的归档模式
sys@TEST> select name ,log_mode from v$database;
NAME LOG_MODE
--------------------------- ------------------------------------
TEST NOARCHIVELOG
也可以用以下命令 archive log list 方式查看日志归档模式。需要有SYSDBA权限
sys@TEST> archive log list ;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 12
Current log sequence 14
2. 什么是oracle归档模式
oracle数据库有联机重做日志,这个日志是记录多数据库所做的修改,比如增删改数据等操作记录,这些都会保存在重做日志文件里,一般情况下,数据库至少有2个或2个以上的重置文件,当一个写满的时候,会自动的写入下一个日志文件,
当日志文件都写满的时候,又会发生日志切换,去写第一个文件。(第一个文件的原日志记录会自动转移),就这样反复进行。
如果数据库处于非归档模式下,联机日志在切换时原日志内容会被丢弃,而处在归档模式下,发生日志切换时候,被切换的日志会进行归档。例如,当前正在往日志1写入,当日志1写满的时候,发生日志切换,开始写日志2,这时日志1的内容会被保存到指定的目录下,这个目录叫归档目录,拷贝的日志叫做归档重做日志。
数据库只有在归档模式下运行时才可以进行灾难性恢复。
归档日志和非归档日志区别在于:非归档模式只能做冷备份,并且恢复时只能完全备份,最后一次完全备份到系统破坏期间的数据无法恢复,
归档模式可以做热备份,并且可以增量备份,可以部分恢复。
3. 非归档模式切换归档模式
1.指定归档日志存放目录
sys@TEST> alter system set log_archive_dest_1='location=/u01/app/product/11.2.0/dbhome_1/log/archive_log';
System altered.
sys@TEST> alter system set log_archive_dest_1='location=/u01/app/product/11.2.0/dbhome_1/log/dcl/archive_log';
System altered.
2. 关闭数据库
sys@TEST> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
3. 启动数据库到mount状态
sys@TEST> startup mount;
ORACLE instance started.
Total System Global Area 732352512 bytes
Fixed Size 1339036 bytes
Variable Size 490733924 bytes
Database Buffers 234881024 bytes
Redo Buffers 5398528 bytes
Database mounted.
4、修改数据库为归档模式
sys@TEST> alter database archivelog;
Database altered.
5. 打开数据库
sys@TEST> alter database open;
Database altered.
6. 验证是否更改为归档模式
sys@TEST> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/product/11.2.0/dbhome_1/log/dcl/archive_log
Oldest online log sequence 12
Next log sequence to archive 14
Current log sequence 14
至此基本上完成了归档到非归档的模式的切换。
1. 归档模式下,日志文件组不允许被覆盖(重写),当日志文件写满之后,如果没有进行手动归档,那么系统将挂起,知道归档完成为止. 这时只能读而不能写.
2. 运行过程中关闭和重启归档日志进程
sys@TEST> archive log stop;
Statement processed.
sys@TEST> archive log start;
Statement processed.
3. 切换日志,强迫归档
sys@TEST> alter system switch logfile;
System altered.
sys@TEST> select archiver from v$instance;
ARCHIVER
---------------------
STARTED
sys@TEST> select name from v$archived_log;
4. 查看生成归档文件路径
NAME
----------------------------------------------------------------------------------------------------
/u01/app/product/11.2.0/dbhome_1/log/dcl/archive_log1_14_839115527.dbf
sys@TEST>
5. 配置多个归档进程
如果归档过程会消耗大量的时间,那么可以启动多个归档进程,这是个动态参数(Oracle9i中最多可以指定10个归档进程 )
sys@TEST> alter system set log_archive_max_processes=5;
System altered.
6. 与归档进程有关的动态性能视图 v$bgprocess 检查后台进程,v$archive_processes
sys@TEST> select * from v$archive_processes;
PROCESS STATUS LOG_SEQUENCE STATE
---------- ------------------------------ ------------ ------------
0 ACTIVE 0 IDLE
1 ACTIVE 0 IDLE
2 ACTIVE 0 IDLE
3 ACTIVE 0 IDLE
4 ACTIVE 0 IDLE
5 STOPPED 0 IDLE
6 STOPPED 0 IDLE
7 STOPPED 0 IDLE
...........................
7. 配置归档目标,多归档目标,远程归档目标,归档日志格式
归档目标 LOG_ARCHIVE_DEST_N(N不是固定字符N)
LOG_ARCHIVE_DEST_n(其中,n = 1、2、3、4、5...10)与 LOG_ARCHIVE_DEST 、LOG_ARCHIVE_DUPLEX_DEST( LOG_ARCHIVE_DEST静态参数指定主位置,使用LOG_ARCHIVE_DUPLEX_DEST参数定义备份目标)是互斥的:
本地归档目标:
sys@TEST> alter system set log_archive_dest_1='location=/u01/app/product/11.2.0/dbhome_1/log/archive_log';
System altered.
sys@TEST> alter system set log_archive_dest_2='location=/u01/app/product/11.2.0/dbhome_1/log/dcl/archive_log';
System altered.
远程归档目标:
sys@TEST> log_archive_dest_2= "SERVICE=TEST_DB1";
强制的归档目标,如果出错,600秒后重试:
sys@TEST> alter system set log_archive_dest_4 ='LOCATION=/u01/app/product/11.2.0/dbhome_1/log/archive_log MANDATORY REOPEN=600';
可选的归档目标,如果出错,放弃归档:
sys@TEST> alter system set log_archive_dest_3 = "LOCATION='LOCATION=/u01/app/product/11.2.0/dbhome_1/log/archive_log OPTIONAL';
MANDATORY 表示必须成功完成归档到该目标的操作才可以覆盖联机重做日志文件。
OPTIONAL 表示即使联机重做日志文件尚未成功地归档到该目标,也可以重新使用。这是缺省设置。
REOPEN属性定义发生故障时是否必须重新尝试归档到目标。缺省值为300秒。归档到目标的尝试次数没有限制。归档中的所有错误将在主站点的警报文件中报告。如果未指定REOPEN,则可选目标上的错误将被记录并忽略。不再将重做日志发送到这些目标。在归档成功之前,强制目标上的错误将导致无法重新使用联机重做日志。只要归档不成功,归档目标的状态就设置为ERROR。
8. 归档目标状态:log_archive_dest_state_n
归档目标的状态可以动态地进行更改。缺省情况下,归档目标是ENABLE状态,表明Oracle 服务器可以使用该目标。
关闭归档目标1
sys@TEST> alter system set log_archive_dest_state_1=defer;
System altered.
SQL ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1 = DEFER
打开归档目标2
sys@TEST> alter system set log_archive_dest_state_2=enable;
System altered.
归档目标的状态可以通过设置相应的LOG_ARCHIVE_DEST_STATE_n 参数来进行修改。例如,要在发生错误时暂时停止归档到强制位置,可以将该目标的状态设置为DEFER。当另一目标出现错误或需要维护时,可以启用该目标。
注:如果一个目标的状态设置为DEFER,则不会执行归档到该目标的操作。如果该目标的状态更改为 ENABLE,则必须手动将所有缺失的日志归档到该目标。
9. 归档日志格式 LOG_ARCHIVE_FORMAT
alter system set log_archive_format='arch_%d_%t_%r_%s.log' #设置归档日记款式
%s 或 %S:包括日志序列号,作为文件名的一部分。
%t 或 %T:包括线程号,作为文件名的一部分。使用%S可通过在值的左侧用0 来填补空位使该值长度保持固定。
%a activation ID
%d database ID
%r resetlogs ID
10. 指定成功归档位置的最小数量--LOG_ARCHIVE_MIN_SUCCEED_DEST 参数
LOG_ARCHIVE_MIN_SUCCEED_DEST 参数的值。该参数用于为需要归档的本地目标数指定一个下限值。如果该值小于强制本地目标的数量,则它对归档行为没有影响。如果该值大于强制本地目标的数量,则本地归档目标的数量必须至少等于该值,才可以重新使用联机重做日志文件。
11. 启用自动归档
alter system set log_archive_start=true scope=spfile; #启用主动归档
12.禁用自动归档
alter system set log_archive_start=false scope=spfile; #禁用自动归档
13..归档日志常用数据字典 V$ARCHVIED_LOG V$ARCHVIE_DEST V$LOG_HISTORY V$DATABASE V$ARCHIVE_PROCESSES
设置非归档方式
- sys@TEST> archive log list; /查看是否是归档方式
- sys@TEST> alter system set log_archive_start=false scope=spfile; //禁用自动归档
- sys@TEST>shutdown immediate;
- sys@TEST> startup mount; //打开控制文件,不打开数据文件
- sys@TEST>alter database noarchivelog; //将数据库切换为非归档模式
- sys@TEST> alter database open; //将数据文件打开
- sys@TEST>archive log list; //查看此时便处于非归档模式