Joe*_*til 1 oracle-11g-r2 dataguard standby
我已经使用数据代理配置了数据保护设置。当我向主数据库中的表插入新数据时,该数据应该反映在备用数据库中。当我检查备用数据库中的这些数据时,它没有反映在那里。所以,我重新启动了数据库并以只读方式打开它。我使用以下命令来避免延迟:
SQL> alter database recover managed standby database nodelay disconnect from session;
Run Code Online (Sandbox Code Playgroud)
但是仍然需要很多时间才能在备用数据库中反映出来。
将数据从主服务器获取到备用服务器所花费的时间延迟是多少?
这是数据反映在备用数据库中所花费的标准时间延迟吗?或者我是否错过了配置中的任何内容。
有什么办法可以解决吗?
我认为您想要的是实时应用,但为此,您必须首先在备用数据库上创建备用重做日志。附带说明一下,为了使角色转换更容易,最好的做法是在主数据库上创建备用重做日志:
备用重做日志应与重做日志大小相同,并且您至少需要比重做日志多 1 组备用日志:
我在主数据库上使用以下脚本,该脚本为备用重做日志构建创建语句,然后在备用数据库上运行:
select 'alter database add standby logfile group ' ||
to_number((select count(*) from v$log) + rownum) || '(''T:\ORACLE\STANDBYREDO\REDO0' ||
to_number((select count(*) from v$log) + rownum) || '.LOG'') SIZE ' ||
(select max( bytes/1024/1024) from v$log) || 'M;' as standbyredo
from v$log
union all
select 'alter database add standby logfile group ' ||
((select max(group#) from v$log) + (select count(*) from v$log) + 1) || '(''T:\ORACLE\STANDBYREDO\REDO0' ||
((select max(group#) from v$log) + (select count(*) from v$log) + 1) || '.LOG'') SIZE ' ||
(select max( bytes/1024/1024) from v$log) || 'M;'
from dual;
Run Code Online (Sandbox Code Playgroud)
在备用数据库上存在备用日志后,要启动实时应用,您需要using current logfile
在您的恢复命令中包含该短语:
SQL> alter database recover managed standby database using current logfile disconnect from session;
Run Code Online (Sandbox Code Playgroud)
在传送和应用期间,您可以通过查询备用数据库上的 v$standby_log 来检查以验证备用日志是否正在使用:
select * from v$standby_log;
Run Code Online (Sandbox Code Playgroud)
当我学习如何设置物理备用数据库时,我发现Tim Hall 的备用数据库指南非常有用。