dataguard主库删除归档日志后从库恢复的方法

------------------方法1在主库上使用备份的进行恢复丢失的归档日志-------------------------
1.发现主库备份后删除了归档,但是这些归档从库还没应用,也没有传到从库
从库应用的最新的归档日志为592
SQL> connect / as sysdba
Connected.
SQL> Select Max(t.SEQUENCE#) From V$archived_Log t;

MAX(T.SEQUENCE#)
----------------
592

主库的归档日志
SQL> connect / as sysdba
Connected.
SQL> Column Name format a100;
SQL> Column THREAD# format 99;
SQL> Column SEQUENCE# format 999999;
SQL> Column STANDBY_DEST format a10;
SQL> Column ARCHIVED format a10;
SQL> Column APPLIED format a10;
SQL> Column STATUS format a10;
SQL> Column fal format a10;
SQL> Column COMPLETION_TIME format a20;
SQL> Select t.SEQUENCE#,t.STANDBY_DEST,t.APPLIED,t.STATUS From V$archived_Log t Where t.SEQUENCE#>=592 And t.STANDBY_DEST <>‘YES‘;

SEQUENCE# STANDBY_DE APPLIED STATUS
--------- ---------- ---------- ----------
592 NO NO D
593 NO NO D
594 NO NO D
595 NO NO D
596 NO NO D
597 NO NO D
598 NO NO D
599 NO NO D
600 NO NO D
601 NO NO D
602 NO NO D

11 rows selected.

发现主库的日志从592开始就删除掉了,因为主库是备份后才删除的,那么我们可以恢复这些删除的日志,然后让从库应用

2.将那些日志恢复到自定义的目录
2.1先创建目录
cd /u01/app/oracle/archive_log
mkdir gap_log

2.2 恢复归档
run{
allocate channel ci type disk;
set archivelog destination to ‘/u01/app/oracle/archive_log/gap_log‘;
restore archivelog sequence 592;
restore archivelog sequence 593;
restore archivelog sequence 594;
restore archivelog sequence 595;
restore archivelog sequence 596;
restore archivelog sequence 597;
restore archivelog sequence 598;
restore archivelog sequence 599;
restore archivelog sequence 600;
restore archivelog sequence 601;
restore archivelog sequence 602;
release channel ci;
}

好像执行如上命令后,主库会自动将该文件应用到从库了,V$archived_Log里也有相应的记录,deleted状态为NO,还是挺智能的.

--------------------方法二:采用注册的方式恢复-----------------------------------------------
1.主库模拟归档日志丢失
模拟将没有传到从库的归档日志拷贝到另外一个目录
[oracle@localhost archive_log]$ mv arch_994182077* ./gap_log/

2.物理删除后需要进行crosscheck,要不字典信息里还会有相应归档日志的记录
RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all;

查询归档字典表Select Name From v$archived_log t Order By t.SEQUENCE# Desc 相应的值为空

3.主库从新注册归档日志
3.1 单个或少量日志注册
SQL> alter database register physical logfile ‘/u01/app/oracle/archive_log/gap_log/arch_994182077_1_615.arc‘;
SQL> alter database register physical logfile ‘/u01/app/oracle/archive_log/gap_log/arch_994182077_1_616.arc‘;
SQL> alter database register physical logfile ‘/u01/app/oracle/archive_log/gap_log/arch_994182077_1_617.arc‘;
SQL> alter database register physical logfile ‘/u01/app/oracle/archive_log/gap_log/arch_994182077_1_618.arc‘;
SQL> alter database register physical logfile ‘/u01/app/oracle/archive_log/gap_log/arch_994182077_1_619.arc‘;
SQL> alter database register physical logfile ‘/u01/app/oracle/archive_log/gap_log/arch_994182077_1_620.arc‘;
SQL> alter database register physical logfile ‘/u01/app/oracle/archive_log/gap_log/arch_994182077_1_621.arc‘;

这里需要加上physical关键字,否则报如下错误

ORA-16225: Missing LogMiner session name for Streams

3.2.大量日志注册

rman> catalog start with ‘/u01/app/oracle/archive_log/gap_log‘;

4.步骤3完成后数据库会自动应用恢复回来的文件

----------------方法三:将丢失的日志文件恢复到备库直接应用-------------------------------
1.主库模拟归档日志丢失
模拟将没有传到从库的归档日志拷贝到另外一个目录
[oracle@localhost archive_log]$ mv arch_994182077* ./gap_log/

2.物理删除后需要进行crosscheck,要不字典信息里还会有相应归档日志的记录
RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all;
查询归档字典表Select Name From v$archived_log t Order By t.SEQUENCE# Desc 相应的值为空

3.将相应的归档日志拷贝到从库
scp arch_994182077_1_625.arc oracle@192.168.1.85:/u01/app/oracle/archlog/gap_log/
scp arch_994182077_1_626.arc oracle@192.168.1.85:/u01/app/oracle/archlog/gap_log/
scp arch_994182077_1_627.arc oracle@192.168.1.85:/u01/app/oracle/archlog/gap_log/
scp arch_994182077_1_628.arc oracle@192.168.1.85:/u01/app/oracle/archlog/gap_log/
scp arch_994182077_1_629.arc oracle@192.168.1.85:/u01/app/oracle/archlog/gap_log/
scp arch_994182077_1_630.arc oracle@192.168.1.85:/u01/app/oracle/archlog/gap_log/
scp arch_994182077_1_631.arc oracle@192.168.1.85:/u01/app/oracle/archlog/gap_log/

4.在从库上注册
alter database register logfile ‘/u01/app/oracle/archlog/gap_log/arch_994182077_1_625.arc‘;
alter database register logfile ‘/u01/app/oracle/archlog/gap_log/arch_994182077_1_626.arc‘;
alter database register logfile ‘/u01/app/oracle/archlog/gap_log/arch_994182077_1_627.arc‘;
alter database register logfile ‘/u01/app/oracle/archlog/gap_log/arch_994182077_1_628.arc‘;
alter database register logfile ‘/u01/app/oracle/archlog/gap_log/arch_994182077_1_629.arc‘;
alter database register logfile ‘/u01/app/oracle/archlog/gap_log/arch_994182077_1_630.arc‘;
alter database register logfile ‘/u01/app/oracle/archlog/gap_log/arch_994182077_1_631.arc‘;

5.数据库会自动应用如上的归档日志

这种方法的话在主库查询v$archived_log视图是看不到从库相应日志的应用情况

原文地址:https://www.cnblogs.com/hxlasky/p/10451170.html

时间: 2024-10-12 03:32:06

dataguard主库删除归档日志后从库恢复的方法的相关文章

12c DataGuard 无法删除归档日志

一.环境描述 Oracle 12c 单实例DataGuard Rhel 7.3 二.测试过程 主库操作 1.关闭DG,切换日志 SQL> alter system set log_archive_dest_state_2=defer; System altered. SQL> show parameter log_archive_dest_state_2 NAME                                 TYPE        VALUE ---------------

SQL SERVER 数据日志太大,磁盘没有空间,直接删除数据库日志后,显示 恢复挂起。

问题简述: sharepoint的某个站点对应的数据库日志太大了,想把日志瘦身.于是我把整个数据库分离,然后附加数据库来重新生成日志文件.谁知道在附加的时候,居然报错"附加数据库报错:由于数据库没有完全关闭,无法重新生成日志" 问题原因:原因是数据库关闭时存在打开的事务/用户,该数据库没有检查点或者该数据库是只读的.如果事务日志文件被手动删除或者由于硬件或环境问题而丢失,则可能出现此错误. 处理办法: 一.把分离之前的日志文件也复制过来一齐附加嘛从错误提示看, 应该是你的日志文件中还包

当ORACLE归档日志满后如何正确删除归档日志

当ORACLE 归档日志满了后,将无法正常登入ORACLE,需要删除一部分归档日志才能正常登入ORACLE. 一.首先删除归档日志物理文件,归档日志一般都是位于archive目录下,AIX系统下文件格式为“1_17884_667758186.dbf”,建议操作前先对数据库进行备份,删除时至少保留最近几天的日志用于数据库恢复. 二.把归档日志的物理文件删除后,我们就可以正常登入ORACLE了,但是还没完全把归档日志删除干净,ORACLE的controlfile中仍然记录着这些archivelog的

db_recovery_file_dest_size 修改大一点及删除归档日志 |转|

今天给客户测 试问题,让客户把数据发过来了.解压缩后一看,他们还是用的oracle 815版本的(他们exp导出时,带了导出日志,从导出日志中看出来是oracle 815版本的),不过没有关系,低版本的exp是可以用高版本的imp导入到高版本数据库中的.一看是导入还很正常,导入到其中某个表的时候,突然就不动 了.一开始我还没有弄明白怎末回事.后来,无意中看到了 计算机管理--事件查看器中 ,有很多报错信息: Archive process error: ORA-16038: log 1 sequ

delete archivelog all 无法彻底删除归档日志?

最近在因归档日志暴增,使用delete archivelog all貌似无法清除所有的归档日志,到底是什么原因呢? [python] view plain copy print? 1.演示环境 SQL> select * from v$version where rownum<2; BANNER ---------------------------------------------------------------- Oracle Database 10g Release 10.2.0.

oracle 删除归档日志的正确方式

在使用plsql使用游标的%rowcount时,导致了一个死循环,手动终止后数据库无法连接,服务重启后依然不行.windows日志管理器报归档日志相关的错误,最终手动启动到mount状态,禁用归档日志后,数据库正常.由于是本机的实验数据库,所以希望把归档日志删掉: 以下摘自这里ORACLE正确删除归档并回收空间的方法 一个ORACLE归档日志经常满,表现为/oraarchive 这个文件空间占用100%大家一定抱怨ORACLE为何没有归档维护工具,很多人直接删除了事,错了,ORACLE有,而且很

通过RMAN删除归档日志不释放问题

我的生产环境中归档日志满了,通过如下脚本删除后,空间并没有释放,看有网友有相关的解决思路,可以跟大家一起分享一下: RMAN> crosscheck archivelog all; RMAN> delete expried archivelog all; 关于rm删除文件空间不释放的问题可以写成一个FAQ了 一般说来不会出现rm掉不释放空间的情况出现这样的情况一般是由于有进程在向文件中写数据或有进程正在访问文件而此时rm文件则会出现不释放空间的情况 理解这样的问题需要理解rm的操作内含一个文件

RMAN删除归档日志不释放问题

今天同事问到一个问题,他那边的一套Oracle 11g数据库使用RMAN没办法删除旧的归档,导致磁盘使用率很高. [email protected]:[/opt/oracle/archive/db] ls -ltr |moretotal 3059881082 -rw-r-----   1 oracle     oinstall   725320704 May 20  2016 1_1_91233774.dbf -rw-rw----   1 oracle     oinstall   175693

Linux下设置定时任务删除归档日志

1.编辑删除归档日志的脚本----/home/oracle/clearlog.sh #! /bin/bash source ~/profile_orcl#记录归档删除的日志exec >> /home/rman_log/log/del_arch`date +%F-%H`.log $ORACLE_HOME/bin/rman target / <<EOF#检查归档crosscheck archivelog all; #列出无效的归档日志list expired archivelog al