Oracle数据库能运行在种模式下:归档模式(archivelog)和非归档模式(noarchivelog)归档模式能提高Oracle数据库的可恢复性生产数据库都应该运行在此模式下归档模式应该和相应的备份策略相结合只有归档模式没有相应的备份策略只会带来麻烦
检查归档模式命令
SQL> archive log list Database log mode No Archive Mode Automatic archival Disabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence Current log sequence
设置归档模式
SQL> shutdown immediate; Database closed Database dismounted ORACLE instance shut down SQL> startup mount ORACLE instance started Total System Global Area bytes Fixed Size bytes Variable Size bytes Database Buffers bytes Redo Buffers bytes Database mounted SQL> alter database archivelog; Database altered SQL> alter database open; Database altered SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence Next log sequence to archive Current log sequence
如果需要停止归档模式使用alter database noarchivelog 命令Oracleg之前你还需要修改初始化参数使数据库处于自动归档模式在pfile/spfile中设置如下参数
log_archive_start = true
重启数据库此参数生效此时数据库处于自动归档模式也能在数据库启动过程中手工执行
archive log start
使数据库启用自动归档不过重启后数据库仍然处于手工归档模式g使用db_recovery_file_dest来作为归档日志的存放地
SQL> show parameter db_recovery NAME TYPE VALUE db_recovery_file_dest string /home/oracle/orag/flash_reco very_area/ db_recovery_file_dest_size big integer G
能修改db_recovery_file_dest_size参数的大小
alter system set db_recovery_file_dest_size=
一
重做日志文件把对数据文件的修改在写入数据文件之前记录下来日志文件以一种循环的方式被写入信息当一个日志组被写满时回自动向另一个日志组写入管理员可以手工切换当前日志组alter system switch logfile 可以切换当前的日志组当日志组发生切换时oracle向新的重做日志组分配一个日志序列号当存在大量的事务时必须调整重做日志文件的大小以避免频繁的日志切换发生重做日志文件被顺序的写在磁盘上如果磁盘没有其他活动I/O将会很快应该把重做日志文件保存在单独的磁盘上以获取良好的性能尤其不要把经常处于活动状态的SYSTEMUNDOTBSSYSAUX的表空间或索引表空间文件保存到同一块磁盘上因为只有在事务的请求被写到重做日志后请求才能被完成最大限度的提高重做日志的吞吐量是oracle性能优化首先考虑的因素当发生重做日志切换而生成一个新的检查点时DBWn就会写髒缓沖器块这样会影响oracle的性能可以通过fast_start_mttr_target初始化参数来调整检查点
每个数据库都有自己的联机重做日志组一个联机重做日志组有多个重做日志成员每个日志成员有单独的操作系统文件在一个rac配置(这种配置中单个数据库装有多个实例)每个实例有一个联机重做日志线程每个实例的lgwr进程都写到相同的联机重做日志文件因此oracle必须跟蹤数据库实例修改来自那个实例
当多路复用重做日志文件时应该把一个组的成员保存在不同的磁盘上以避免单点故障的发生如果重做日志文件组的所有成员都无法写入数据oracle将被挂起Dba可以在创建数据库时创建多个联机重做日志文件的副本
对日志的操作如下
a 创建新的重做日志组
Alter database add logfile
Group (/ora/oradata/mydb/redolog
/ora/oradata/mdb/redolog) size m;
如果省略group子句oracle分配一个有效的编号如下
Alter database add logfile
b 添加新的组成员
alter database add logfile member
/ora/oradata/mydb/redolog to group ;(向第二组中添加新的成员)
c重命名日志成员
在重命名日志组成员之前新的目标必须已经存在Oracle的sql命令只是把控制文件中的内部指针指向新的日志文件Dba需要用操作系统命令来重命名此日志文件步骤如下
.关闭数据库
.使用操作系统命令重命名或移动日志文件
启动数据库实例(start mount)重命名控制文件中的日志文 件成员Alter database rename file old_redo_file_name to new_redo_file_name;
.打开数据库 alter database open
.备份控制文件
D.删除重做日志组
将要被删除的重做日志组不能是活动的日志组Alter database drop logfile group ;当重做日志文件被删除后相关的操作系统文件也被删除相关的数据库控制文件也给更新
E.使用和删除重做日志组相同的方式dba可以只删除一个非活动的重做日志组的成员
Alter database drop logfile member /ora/oradata/mydb/redolog;
f 创建联机重做日志文件
当重做日志组成员遭到破坏时可以删除并重新添加这个重做日志组或组成员
二
档案重做日志文件
它是联机重做日志文件的一个副本Lgwr和arcn进程的故障都会引起数据库的挂起只有当arcn进程把联机重做日志写到归档地后才可以向此重做日志组成员写入数据
设置归档目的地
可以在参数初始化文件中的log_archive_dest_n来定义归档目的地归档目的地可以在本地计算机上也可在远程的数据库服务器上定义语法如下
LOG_ARCHIVE_DEST_n= null_string |
(service=tnsnames_name |
LOCATION= directory_name)
[MANDATORY | OPTIONAL]
[REOPEN[=integer]]
例
LOG_ARCHIVE_DEST_=((LOCATION=/archive/MYDB) MANDATORU REOPEN=)定义归档日志的位置为/archive/MYDBmandatory子句的定义向这个位置写日志的操作必须的成功的Reopen子句定义在日志写入失败时下次尝试写入操作的时间间隔缺省是秒
例
LOG_ARCHIVE_DEST_@=(SERVICE=STDBY) OPTIONAL REOPEN;语句中的stdby的连接到远程数据库的oracle net连接串由于写操作是可选的所以数据库活动继续当arcn进程不能写档案日志文件时进程将立即尝试重新写入(这个动作有reopen子句来定义)
Log_archive_min_succeed_dest:定义最少归档日志的副本数量
Log_archive_format:定义归档日志文件采用的名称和使用的格式可以使用预定义变量来构造每个归档日志文件的名称变量如下
%s 日志序列号
%t 线程号
%r 复位日志id
%d 数据库id
定义归档日志名称的变量至少包含%s%t%r当多个数据库实例的归档日志采用相同的归档日志位置时还必须定义%d例如%t_%s_%rdbf