双机热备(双机容错)就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务。当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务 双机热备由备用的服务器解决了在主服务器故障时服务不中断的问题。但在实际应用中,可能会出现多台服务器的情况,即服务器集群 双机热备一般情况下需要有共享的存储设备。但某些情况下也可以使用两台独立的服务器 实现双机热备,需要通过专业的集群软件或双机软件
从狭义上讲,双机热备特指基于active/standby方式的服务器热备。服务器数据包括数据库数据同时往两台或多台服务器写,或者使用一个共享的存储设备。在同一时间内只有一台服务器运行。当其中运行着的一台服务器出现故障无法启动时,另一台备份服务器会通过双机软件的诊测(一般是通过心跳诊断)将standby机器激活,保证应用在短时间内完全恢复正常使用.
所以,像VCS (VERITAS Cluster Manager)等软件实现的Oracle Cluster Server以及Oracle Standby ,Oracle RAC(Real Application Cluster),高级复制(Advanced Replication), Streams等技术都能认为是双机热备。
二.Physical Standby,Logical Standby (物理Standby及逻辑Standby)
Physical standby直接从主库接受archived log,然后直接做基于block的物理恢复(更新或调整变化的block),所以physical standby在物理文件一级完全都等同于主库。physical standby恢复只是底层的block apply, OS层面的工作,数据库SCHEMA,包括索引都是一样的。它是直接应用REDO或归档实现同步的。不会涉及temp ,undo等。物理STANDBY可能的模式:只读模式(OPEN READONLY)和恢复模式(MANANGED RECOVERY)。
在逻辑STANDBY中,逻辑信息是相同的,但物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的REDO转换成SQL语句,然后在STANDBY上执行SQL语句(SQL Apply)。逻辑STANDBY除灾难恢复外还有其它用途,比如用于用户进行查询和报表。
在9i R2之前,data guard的服务器只能运行在read only或者recover模式, 一个physical standby database在物理上完全等同主库,当physical standby database正在做恢复的时候,不能打开用作其他用途。 而logical standby database只是在logical上等同需要恢复的schema, 所以在恢复的时候,可以同时打开做report(做查询动作),也可以用户和主库不一样的 数据对象等等,极大了提高了备用库的利用率。
三.Dataguard
都是Standby。在Oracle 9i之前称为Standby,9i或之后的Standby被改名为Data guard。不过功能上也有了很多的改进和区别 。
四.Standby下LGWR / ARCH传输
查看数据库保护模式:
SQL> select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;
1.最大性能(maximize performance):这是data guard默认的保护模式。primay上的事务commit前不需要从standby上收到反馈信息(主数据库的提交操作不等待STANDBY),该模式在primary故障时可能丢失数据,但standby对primary的性能影响最小。 可以使用LGWR ASYNC或者ARCH两种传输模式。
ARCH传输模式:Primary DB上的online redo log写满或其他条件引起redo log写归档的时候,redo log生成的archived log file写到本地归档目录的同时,写入了Standby归档目录。只是Primary db上的online redo log切换不必等Standby上的写归档动作结束。
2.最大可用(maximize availability):在正常情况下,最大可用模式和最大保护模式一样;在standby不可用时,最大可用模式会自动降低成最大性能模式,所以standby故障不会导致primay不可用。在问题纠正之后,Standby和主数据库进行再同步,至少有一个standby可用的情况下,即使primary down机,也能保证不丢失数据。(不过当问题修复,再同步之前有必要FAILOVER,那么有些数据可能会丢失)。最大可用性模式Standby必须配置Standby Redo log,Oracle推荐最大可用模式使用LGWR ASYNC(异步)模式传输。
采用最大可用的data guard模式,主库往备库传递在线日志(online redo log)信息,在线日志信息写入备用库的standby redo log,这些standby redo log归档后,备用库应用归档日志。
LGWR还分为LGWR ASYNC(异步)和LGWR SYNC(同步)两种。
|
最大保护 |
最大可用 |
最大性能 |
进程 |
LGWR |
LGWR |
LGWR或ARCH |
网络传输模式 |
SYNC |
SYNC |
LGWR时设置ASYNC |
磁盘写操作 |
AFFIRM |
AFFIRM |
NOAFFIRM |
备用日志 |
YES |
物理备用需要 |
LGWR和物理备用时需要 |
备用库类型 |
物理Standby |
物理或逻辑 |
物理或逻辑 |
最大保护(maximize protection):最高级别的保护模式。primay上的事务在commit前必须确认redo已经传递到至少一个standby上,如果所有standby不可用,则primary会挂起。该模式能保证零数据丢失。对于最大保护和最高可用性模式,Standby数据库必须配置standby redo log,并且oracle推荐所有数据库都使用LGWR ASYNC模式传输。
一. DBWR写磁盘数据触发条件
1. 当进程在辅助LRU链表和主LRU链表上扫描以查找可以覆盖的buffer header[空闲缓冲区]时,如果已经扫描的buffer header的数量到达一定的限度(由隐藏参数:_db_block_max_scan_pct决定)时,触发DBWR进程。 _db_block_max_scan_pct表示已经扫描的buffer header的个数占整个LRU链表上buffer header总数的百分比。这时,搜索可用buffer header的进程挂起,在v$session_wait中表现为等待“free buffer wait”事件,同时增加v$sysstat中的“dirty buffers inspected”的值。(can query by x$kvit)
这部分内容在我的Blog里也有说明:
Oracle Buffer Cache 原理
http://blog.csdn.net/tianlesoftware/archive/2011/06/28/6573438.aspx
2. 当DBWR在主LRUW链表上查找已经更新完而正在等待被写入数据文件的buffer header时,如果找到的buffer header的数量超过一定限度(由隐藏参数:_db_writer_scan_depth_pct决定)时,DBWR就不再继续往下扫描了,而转到辅助LRUW链表上将其上的脏数据块写入数据文件。_db_writer_scan_depth_pct表示已经扫描的脏数据块的个数占整个主LRUW链表上buffer header总数的百分比。
3. 如果主LRUW链表和辅助LRUW链表上的脏数据块的总数超过一定限度,也将触发DBWR进程。该限度由隐藏参数:_db_large_dirty_queue决定。
4. 发生增量检查点(incremental checkpoint)或完全检查点(complete checkpoint)时触发DBWR。
5. 每隔三秒钟启动一次DBWR。
6. 将表空间设置为离线(offline)状态时触发DBWR。
7. 发出命令:alter tablespace … begin backup,从而将表空间设置为热备份状态时触发DBWR。
8. 将表空间设置为只读状态时,触发DBWR。
9. 删除对象时(比如删除某个表)会触发DBWR。
二. LGWR写联机日志文件触发条件
1. 超时(timeout)
当LGWR处于空闲状态时,它依赖于rdbms ipc message等待,处于休眠状态,直到3秒超时时间到。 如果LGWR发现有redo需要写出,那么LGWR将执行写出操作,log file parallel write等待事件将会出现。
2. 阈值达到
只要一个进程在log buffer中分配空间,已经使用的Log buffer的数量将被计算。如果使用的块的数量大于或等于_log_io_size参数设置,那么将会触发LGWR写操作。
如果此时LGWR未处于活动状态,那么LGWR将被通知去执行后台写操作。
缺省的_log_io_size等于1/3 log buffer大小,上限值为1M,此参数在X$KSPPSV中显示的0值,意为缺省值。也就是,LGWR将在Min(1M,1/3 log buffer size)时触发。
注意此处的log buffer size是以log block来衡量的。此值通常为512 bytes.
3. 提交
当一个事物提交时,在redo stream中将记录一个提交标志。
在这些redo被写到磁盘上之前,这个事物是不可恢复的。所以,在事务返回成功标志给用户前,必须等待LGWR写完成。进程通知LGWR写,并且以log file sync事件开始休眠,超时时间为1秒。
Oracle的隐含参数_wait_for_sync参数可以设置为false避免redo file sync的等待,但是就将无法保证事务的恢复性.注意,在递归调用(recursive calls)中的提交(比如过程中的提交)不需要同步redo直到需要返回响应给用户。因此递归调用仅需要同步返回给用户调用之前的最后一次Commit操作的RBA。
存在一个SGA变量用以记录redo线程需要同步的log block number。
如果多个提交在唤醒LGWR之前发生,此变量记录最高的log block number,在此之前的所有redo都将被写入磁盘。这有时候被称为组提交(group commit).
4. 在DBWR写之前
如果DBWR将要写出的数据的高RBA超过LGWR的on-Disk RBA,DBWR将post LGWR去执行写出。
在Oracle8i之前,此时DBWR将等待log file sync事件。
从Oracle8i开始,DBWR把这些Block放入一个defer队列,同时通知LGWR执行redo写出,DBWR可以继续执行无需等待的数据写出。
三. CKPT发送CHECKPOINT信号的触发条件
1. log_checkpoint_timeout时间达到
2. 当前redo日志已经写够log_checkpoint_internavl*操作系统块大小
3. redo log switch
4. alter system checkpoint
5. alter tablespace XXX begin backup,end backup的時候
6. alter tablespace , datafile offline, shutdown immediate, direct read的時候;
四. ARCH进程日志归档触发条件
1. 如果设置了自动归档模式,则日志切换时,由LGWR进程触发ARCH进程进行归档。这是最常见的方式。
2. 可以手工进行归档。使用命令:alter system archive log current表示启动ARCH进程,从而对当前的日志文件进行归档。
3. 如果ARCH进程在5分钟以后还没有接收到LGWR的通知,则发生超时,于是ARCH被唤醒以检查是否存在需要归档的日志文件。ARCH通过读取控制文件中的信息来决定是否需要归档以及应该归档哪些日志文件。但是在进行实例恢复或者介质恢复的过程中,ARCH进程不会启动。
归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换时,后台进程ARCH会将重做日志的内容保存到归档日志中,当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库。在Oracle10g中,只要启动数据库的归档模式,Oracle就会启用自动归档,从而避免了10g以前由于用户疏忽所带来的一系列问题。
日志操作模式:ARCHIVELOG(归档),NOARCHIVELOG(非归档)
对于非归档模式的数据库改为归档模式(主要以Oracle 10g为参考)使用以下步骤:
步骤1(查看数据库的归档状态)
首先查看数据库现有模式可使用以下语句,显示数据库处于非归档模式下
SQL>select name,log_mode from v$database;
NAME LOG_MODE
--------- ------------
ZHQHDB NOARCHIVELOG
也可以用下面的语句
[oracle@wangdm~ 10:28 #9]$ sqlplus / as sysdba
SQL>archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination ?/dbs/arch
Oldest online log sequence 534
Current log sequence 536
步骤2(设置归档日志文件路径)
SQL>alter system setlog_archive_dest_1='location=/u01/arch';
该语句含义是设置归档日志文件的存放路径,实际上Oracle 10g以后可以生成多份一样的日志,保存多个位置以防不测
例如再添加一个归档日志文件存放位置可使用以下语句
SQL>alter system set log_archive_dest_2='location=/u02/arch ';
“location=/u01/arch”此目录是要从根目录开始的一个完整的目录
详细介绍归档日志文件的存放的两种方法:
方法一、使用log_archive_dest和log_archive_duplex_dest配置归档位置
如果不使用备用数据库,只需要将归档日志存放到本地目录.配置本地归档位置可以使用初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST,其中,第一个参数用于设置第一个归档位置,第二个参数用于设置第二个归档位置.
ALTER SYSTEM SET log_archive_dest='/u01/arch';
ALTER SYSTEM SET log_archive_duplex_dest='/u01/arch';
方法二、使用LOG_ARCHIVE_DEST_n配置多个归档位置.
初始化参数LOG_ARCHIVE_DEST_n用于指定多个归档位置,该参数最多可以指定10个归档位置.通过使用初始化参数LOG_ARCHIVE_DEST_n,不仅可以配置本地归档位置,还可以配置远程归档位置. 如果既要在主节点上生成归档日志,又要将归档日志传递到备用节点,那么必须使用参数LOG_ARCHIVE_DEST_n.
两种方法的比较:
1) 方法二可以配置本地和远程归档目录,而方法一只能配置本地归档目录.
2) 方法二可以配置多达10个归档目录,方法一最多只能配置两个归档目录.
3) 如果用方法一那么log_archive_dest是强制(MANDATORY)归档目录,而log_archive_duplex_dest为可选(OPTIONAL)归档目录,且第一种方法中不能使用REOPEN关键字
4) 方法一与方法二是互拆的,设置了方法一参数就不能再设置方法二的参数反之亦然
当使用初始化参数LOG_ARCHIVE_DEST_n配置本地归档位置时,需要指定LOCALTION选项.当配置远程归档位置时,需要指定SERVICE选项.
示例如下:
ALTER SYSTEM SET log_archive_dest_1='location=/u01/arch';
ALTER SYSTEM SET log_archive_dest_2='location=/u02/arch';
ALTER SYSTEM SET log_archive_dest_3='service=standby';
配置远程归档位置时,SERVICE选项需要指定远程数据库的网络服务名(在tnsnames.ora文件中配置)
使用LOG_ARCHIVE_DEST_n的关键字
使用初始化参数LOG_ARCHIVE_DEST_n配置归档位置时,可以在归档位置上指定OPTIONAL或MANDATORY选项;指定MANDATORY选项时,可以设置REOPEN属性.
OPTIONAL:该选项是默认选项.使用该选项时,无论归档是否成功,都可以覆盖重做日志.
MANDATORY:强制归档.使用该选项时,只有在归档成功之后,重做日志才能被覆盖,在设置时至少应该有一个本地(location)强制(mandatory)归档目录
REOPEN:该属性指定如果归档不成功尝试重新归档的时间间隔,默认值为300秒,必须跟在MANDATORY后.
例如:
Alter system set log_archive_dest_1=’location=/u01/arch mandatory’;
Alter system set log_archive_dest_2=’location=/u02/arch mandatory reopen=500’;
Alter system set log_archive_dest_3=’location=/u03/arch optional’;
控制本地归档成功的最小个数
使用初始化参数LOG_ARCHIVE_MIN_SUCCEED_DEST控制本地归档的最小成功个数
alter system set log_archive_min_succeed_dest=2;
如上设置为2就说明至少要有2个归档目录归档成功后redo日志才能被重写;如果log_archive_dest_n中的mandatory关键字个数大于这个参数那么此参数值失效,只有小于这个数的时候这个参数才有效
使用初始化参数LOG_ARCHIVE_DEST_STATE_n控制归档位置的可用性
设置该参数为ENABLE(默认值),表示会激活相应的归档位置;设置该参数为DEFER/DISABLE,表示禁用相应归档位置.当归档日志所在磁盘损坏或填满时,DBA需要暂时禁用该归档目录.
Alter system set log_archive_dest_state_3=defer/disable;(禁用)
Alter system set log_archive_dest_state_3=enable;(启用)
配置归档文件格式
SQL> alter system set log_archive_format = "archive_%t_%s_%r.log" scope=spfile(指定归档日志文件的格式);
当数据库处于ARCHIVELOG模式时,如果进行日志切换,后台进程将自动生成归档日志目录,归档日志的默认位置为%oracle_home%rdbms,在oracle database 10g中,归档日志的默认文件格式为ARCH%S_%R.%T。
归档日志文件可以指定以下匹配符:
%s: 日志序列号:
%S: 日志序列号(带有前导0)
%t: 重做线程编号.
%T: 重做线程编号(带有前导0)
%a: 活动ID号
%d: 数据库ID号
%r: RESETLOGS的ID值
%R: RESETLOGS的ID值(带有前导0)
从10g开始,配置归档日志文件格式时,必须带有%s,%t和%r匹配符,设置了归档文件格式后必须重启数据库,修改完成后手动干预进行日志切换查看归档日志文件格式是否正确。
步骤3(修改数据库为归档模式)
关闭数据库
SQL>shutdown immediate
启动数据mount状态:
SQL>startup mount
修改数据库为归档模式:
SQL>alter database archivelog;
打开数据库,查询:
SQL>alter database open
步骤4(配置归档进程个数)可选
初始化参数LOG_ARCHIVE_MAX_PROCESSES用于指定例程初始启动的最大归档进程个数,当将数据库转变为ARCHIVELOG模式时,默认情况下oracle会自动启动两个归档进程.通过改变初始化参数LOG_ARCHIVE_MAX_PROCESS的值,可以动态地增加或降低归档进程的个数,每个实例归档进程数量最多只能为30个取值范围为[0-9 a-t]:
ALTER SYSTEM SETLOG_ARCHIVE_MAX_PROCESSES=3 scope=both;
如果设置的归档进程个数超过30如下图会有错误提示
其实对于oracle 10g以前的版本还有log_archive_start参数与LOG_ARCHIVE_MAX_PROCESSES结合使用,但是对于10g及后期的版本这个参数完全做废了,如下图数据库已启用归档同时在日志发生切换时日志也会自动归档只是log_archive_start参数值还是false,所以到10G后这个参数就不用理它了
步骤5(显示归档日志信息)
1.使用ARCHIVE LOG LIST命令可以显示日志操作模式,归档位置,自动归档机器要归档的日志序列号等信息.
2.显示归档日志信息.
Select name,sequence#, first_change# FROM v$archived_log;
Name用于表示归档日志文件名,sequence#用于表示归档日志对应的日志序列号,firs_change#用于标识归档日志的起始SCN值.
3.执行介质恢复时,需要使用归档日志文件,此时必须准确定位归档日志的存放位置.通过查询动态性能视图v$archive_dest可以取得归档日志所在目录.
SELECT * FROMv$archive_dest;
4.显示日志历史信息
SELECT * FROMv$loghist;
THREAD#用于标识重做线程号,SEQUNCE#用于标识日志序列号,FIRST_CHANGE#用于标识日志序列号对应的起始SCN值,FIRST_TIME用于标识起始SCN的发生时间.SWICTH_CHANGE#用于标识日志切换的SCN值.
5.显示归档进程信息.
进行日志切换时,ARCH进程会自动将重做日志内容复制到归档目录中,为了加快归档速度,应该启用多个ARCH进程.通过查询动态性能视图V$ARCHIVE_PROCESSES可以显示所有归档进程的信息!
SELECT * FROMv$archive_processes;
Porcess用于标识ARCH进程的编号,status用于标识ARCH进程的状态(ACTIVE:活动,STOPPED:未启动),log_sequence用于标识正在进行归档的日志序列号,state用于标识ARCH进程的工作状态
步骤6(执行手工归档)
从oracle database 10g开始,当将日志操作模式转变未ARCHIVELOG模式时,oracle会自动启动ARCH进程.如果要使用手工归档.那么在改变日志操作模式时必须使用命令ALTER DATABASEARCHIVELOG MANUAL;
需要注意,使用手工归档方式,数据库管理员必须手工执行归档命令.如果没有执行手工归档命令,日志组的原有内容将不能被覆盖.ALTER DATABASE ARCHIVELOG MANUAL 命令是为了与先前的版本兼容而保留的,将来的oracle版本会淘汰该命令,使用手工归档方式时,数据库管理员可以执行以下命令归档重做日志:
alter systemarchive log all; --手动归档所有switch的日志
alter systemarchive log sequence 545; --545为日志序列号
alter systemarchive log current; --归档当前联机日志文件
arter databasearchivelog; --用此命令再次将数据库改为自动归档,手动归档一般情况下在10g及后期版本其实已经没什么了
注意点
1 特别指出的是在Oracle 9i中还要修改参数log_archive_start = true才
能生效,oracle 10g中已经废除了该参数,所以不需要设置该参数。oracle 9i 设置log_archive_start = true的命令是:alter system setlog_archive_start=TRUE scope=spfile;并且不用重启数据库,就可以生效;
2 alter system switch logfile 是强制日志切换,不一定就归档当前的重做日志文件(若自动归档打开,就归档前的重做日志,若自动归档没有打开就不归档当前重做日志)
3 10G如果没有设置归档路径,在设置了闪回目录的情况下默认会把归档日志放到闪回恢复目录中,如果闪回恢复目录也没设置那么会将归档日志放在$ORACLE_HOME/dbs/arch目录中。
showparameter db_recovery_file_dest
停用归档(将数据库从归档变为非归档)
在归档日志模式下,有可能会遇到归档日志大小超过最大值而出现讨厌的ORA-00257错误,前面说了如何把归档日志空间变大。而在普通的开发环境下,其实是根本用不着归档日志的,设个时候我们就把数据库的归档日志给禁用了,也就是说把数据库变为非归档日志模式,应该怎么做呢。
1. 如果是10G及后期的版本直接跳到步骤2,而10G之前的版本此步必须操作,用
SYS用户进行登录,首先设置归档进程关闭。
alter system set log_archive_start=falsescope=spfile;
2.关闭数据库。
shutdown immediate
3.再后面把数据库启动到mount的模式
startup mount
4.如果是10G及后期的版本直接跳至步骤5,而10G之前的版本必须关闭数据库的flash
模式,如果不关闭此功能在后面关闭归档日志的时候就会出现讨厌的ORA-38774错
误;这个主要针对早期的版本,而对于10G及后期的版本此参数也是不需要改的,而
且闪回功能最好是要开启否则数据库的整个闪回特性都失效,也是得不偿失的。
alter database flashback off
5.接着把数据库改为非归档模式
alter database noarchivelog;
6.都修改好了以后,然后打开数据库
alter database open;
7.接着看一下log日志的状态,这一步不能省略修改后切记发现日志的状态为stale非
正常状态的要留意一下,联机日志全部手工切换一遍确保没有问题
select * from v$log;
select * from v$logfile;
8.查看闪回恢复区域空间使用状况,这个只在没有指定归档目录而指定了闪回恢复区域的
情况下才用得着
select * from v$flash_recovery_area_usage;
这些都没有问题以后至此停用数据库归档就算顺利完成了
停用归档日志遇到错误
ORA-00258:
停用归档日志后打开数据库时报如下错误
Sql>alter database open;
alter database open
*
ERROR at line 1:
ORA-00258: manual archiving in NOARCHIVELOG mode must identify log
出现这个问题的原因主要就是将数据库从归档改为非归档模式导致数据打开时报如上错误,可能是日志归档没有完成而这时已将数据改为非归档模式了,在打开数据库的时候没有归档完成的日志又要重新进行归档,可这时发现据库已处于非归档模式下了。解决这个问题的方法是先进入归档模式将所有联机日志进行手工归档然后再将数据库改为非归档模式如下:
(1)查看数据库的归档目录位置
sql> show parameter log_archive_dest_1
(2)查看当前数据库日志情况
sql> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCSTATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- --------------------- -------------------
1 1 1528 209715200 1 NO CURRENT 476386158 2010-04-20 13:20:13
2 1 1526 209715200 1 YESINACTIVE 476094078 2010-04-14 16:00:07
3 1 1527 209715200 1 NO INACTIVE 476248931 2010-04-17 22:00:54
(3)尝试归档第一组日志
sql>alter system archive log group 1;
alter system archive log group 1
ERROR at line 1:
ORA-00259: log 1 of open instance ora10g (thread 1) is the current log, cannotarchive
错误提示很显然,当前日志组不允许归档。
(4)尝试归档第二组日志
sql >alter system archive log group 2;
alter system archive log group 2
ERROR at line 1:
ORA-16013: log 2 sequence# 1526 does not need archiving
因为归档状态是“YES”,因此该组日志无需归档。
(5)尝试归档第三组之日
sql >alter system archive log group 3;
System altered.
归档成功。
(6)确认归档文件
sql > !ls-l /u01/arch/
total 194652
-rw-r----- 1 oracle oinstall 199121920 Apr 21 06:38 1_1527_688786498.arch
(7)有关手工归档操作补充内容
以上我们使用的是数据库参数指定的路径存放手工归档生成的文件,我们还可以额外指定归档写入的路径方法如下
sql > alter system archive log group 3 to'/home/oracle';
System altered.
sql > !ls -l /home/oracle/1_1527_688786498.arch
-rw-r----- 1 oracle oinstall 199121920 Apr21 06:45 /home/oracle/1_1527_688786498.arch
注意:其实还有一种方法就是将数据改回归档模式然后打开数据过一段时间后再将数据库改为非归档模式,数据库就可以正常开启了。
与归档信息相关的视图:
视图
作用
V$DATABASE
LOG_MODE字段归档模式
V$INSTANCE
ARCHIVER字段是否正在归档
V$ARCHIVED_LOG
从控制文件中获取的所有历史归档日志文件信息
V$ARCHIVE_DEST
归档目标位置的信息
V$ARCHIVE_PROCESSES
归档进程的信息
V$BACKUP_REDOLOG
所有已备份的归档日志文件的信息
V$LOG
所有重做日志文件的信息,其中包含那些需要归档的重做日志文件
V$LOG_HISTORY
重做日志文件的历史信息
来源:https://www.cnblogs.com/klb561/p/10890397.html