需要创建多少个 standby日志?它们的大小应是多少?
建议每个线程创建一个额外的 standby日志组,其大小应与主数据库的 redo log 相同。
例如,如果主数据库有4个200M的 redo log 组,那么我们需要创建5个200M的standby redolog。
为什么需要额外的一个:
在主数据库上进行大量DML操作时,额外的 standby日志可以作为缓冲区,帮助同步。
请注意,Oracle建议不要在standby redolog上进行多路复用,因为这会在日志传输期间增加不必要的I/O开销。
如果我的DataGuard设置中有一个主数据库和一个备库,并且处于最大保护模式,我可以将备库转换为快照备库吗?
不可以。在最大保护模式下,事务数据必须先写入standby redolog才能继续进行,因此不能将唯一的备库转换为快照备库。
switchover和failover有什么区别?
switchover指的是主数据库和备库之间的角色互换。在切换过程中,主数据库转换为 standby角色,而备库则转换为主角色。这通常用于计划中的主数据库服务器维护。
failover是在主数据库发生故障时,某个备库被转换为主数据库。故障切换通常在主数据库发生灾难性故障且无法及时恢复时执行。故障切换可能导致数据丢失,具体取决于故障切换时的保护模式。
什么是FAL_CLIENT和FAL_SERVER参数?
FAL的意思是“获取归档日志(Fetch Archive Log)”。FAL_CLIENT和FAL_SERVER参数用于备库的归档间隙解决。
这些参数仅在备库上配置。
「FAL_SERVER」:指定一个Oracle Net服务名(TNS别名或连接描述符),指向要请求缺失归档日志的数据库,即主数据库的TNS别名。
「FAL_CLIENT」:指定一个Oracle Net服务名(TNS别名或连接描述符),从FAL_SERVER连接到备库,即备库的TNS别名。该参数已被废弃。
fal_server = 'pridb'
fal_client = 'stbdb'
什么是standby_file_management参数?
standby_file_management参数可以有两个值:MANUAL或AUTO(推荐)。
「AUTO」:在主数据库上创建的数据文件会自动在备库上创建。
「MANUAL」:在主数据库上创建的数据文件不会自动复制到备库。必须手动在备库上创建数据文件。
DataGuard中有哪些不同类型的重做传输服务?
「ARCH传输模式」
在这种模式下,日志由ARCH进程传输。此时LNS进程未激活,standby redolog也不是强制性的,即不会实时应用日志。在这种模式下,归档日志将被复制到 standby服务器,并在 standby服务器上应用。「SYNC和ASYNC传输模式(实时应用)」
在以下情况下,需要standby redolog。 redo log 数据从 redo log 缓冲区中读取,并由LNS进程传输到备库。「同步模式(SYNC)」
用于最大保护和最大可用性保护模式。同步重做传输模式与事务提交同步传输重做数据。除非所有由该事务生成的重做数据成功传输到所有备库,否则事务无法提交。「异步模式(ASYNC)」
用于最大性能模式。事务可以在无需等待由该事务生成的重做数据成功传输到任何使用异步重做传输模式的传输目的地的情况下提交。
哪个参数定义了 redo log 传输服务的属性?
log_archive_dest_2(n)
:该参数定义了备库的服务名以及传输模式是SYNC还是ASYNC,还有其他属性,如AFFIRM/NOAFFIRM。
除了上述属性,还有一些其他的附加属性。
可以在备库上运行expdp
命令吗?
是的,我们可以通过创建db_link
并在expdp
中使用network_link
参数在备库上运行expdp
。
为什么在设置备库之前需要在主数据库上启用强制日志记录?
如果有人在主数据库上进行未记录的操作,这些数据将不会传输到备库,这将导致备库与主数据库不一致。为了确保主数据库上的所有事务都生成 redo log ,必须启用强制日志记录。
将备库打开为读写模式以进行测试,可以在测试结束后恢复吗?
可以使用闪回方法。
在DataGuard环境中常见的问题有哪些?
由于网络问题导致的复制问题。
归档日志丢失错误。
如果在主数据库上重命名了数据文件,也会在备库中出现错误。
如果有人误修改了DataGuard相关参数,如
log_archive_config
、log_archive_dest
等,可能会出现问题。
如果备库上有块损坏,如何恢复?
首先检查备库上哪些块损坏。
SQL> SELECT * FROM v$database_block_corruption;
取消恢复:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
恢复数据文件:
SQL> RESTORE DATAFILE 9 FORCE FROM SERVICE 'PRIM_DB';
启动MRP:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
DBA在主数据库中添加了一个临时文件,但该临时文件未反映在备库上,尽管standby_file_management设置为AUTO。
在主数据库的TEMP表空间中添加临时文件时,不会自动在备库上创建临时文件,因为在添加临时文件时不会生成 redo log 。因此,DBA必须手动添加临时文件。
什么是快照备库?
快照备库是Oracle 11g中的一个特性,允许在备库上进行读写操作,即可以将物理备库转换为快照备库用于测试。在快照备库上可以进行所有类型的测试(读写操作),或者将其用作开发数据库(与生产数据库完全一致)。测试结束后,可以再次将快照数据库转换回物理备库。一旦转换为物理备库,所有在快照备库上所做的更改将会被回滚。
DataGuard的不同类型及其差异是什么?
DataGuard有三种类型:物理 standby、逻辑 standby和快照 standby。
「物理 standby」
物理备库是主数据库的精确、逐块复制品。通过称为重做应用(Redo Apply)的过程,保持物理备库与主数据库同步,即通过应用从主数据库接收到的重做数据来持续更新物理备库。因此,物理备库总是与主数据库同步。
这种备库可以以只读模式打开(称为活动DataGuard),用于报告目的。大多数公司在DataGuard配置中使用物理备库。
物理备库适用于高可用性和灾难恢复。
「逻辑 standby」
逻辑备库通过SQL应用(SQL Apply)保持与主数据库的同步,即将从主数据库接收到的重做数据转换为SQL语句,并在备库上执行这些SQL语句。因此,逻辑备库包含与生产数据库相同的逻辑信息,但物理结构可能不同。
逻辑备库适用于报告用途,可以进行读写操作(但不应修改存在于主数据库上的 standby对象)。这种配置还可以帮助实现几乎零停机时间的数据库升级。
「快照 standby」
快照备库允许对备库进行读写操作,主要用于测试目的。在测试结束后,快照备库可以被转换回物理备库。
解释DataGuard中的不同保护模式?
DataGuard中有三种模式。
「最大保护(MAXIMUM PROTECTION)」
这种模式提供最高的保护,保证数据零丢失。在此模式下,重做/事务数据必须同时写入主数据库的 redo log 和standby redolog。如果因任何原因(通常是网络问题)无法写入 standby日志,主数据库将会关闭。即用户提交的事务将在确认写入完成后才会完成提交。「最大可用性(MAXIMUM AVAILABILITY)」
该模式在不影响主数据库可用性的情况下提供最高的数据保护。在所有重做数据写入在线 redo log 并传播到至少一个同步的备库之前,不允许提交事务。如果由于某种原因,主数据库无法将重做数据传输到一个备库,主数据库不会关闭,而是以最大性能模式继续运行,直到问题得到解决。「最大性能(MAXIMUM PERFORMANCE,默认模式)」
这是默认的保护模式。在该模式下,事务提交时只需将恢复事务所需的重做数据写入本地(在线) redo log 。
standby redolog的作用是什么?
standby redolog的优势在于,主数据库的在线 redo log 中记录的每条记录都会同时传输到备库,并写入standby redolog中。因此,它最大程度地减少了备库数据丢失的可能性。
对于实时应用,必须在备库上设置standby redolog。
如果没有standby redolog,RFS进程会创建一个归档日志,当该日志完成后,MRP进程将其应用到备库。如果归档日志文件不完整,则无法应用到备库,也不能在故障切换时使用,这会导致数据丢失。
如果配置了standby redolog,当记录插入到Oracle redo log 时,RFS进程会将其写入standby redolog,并由MRP应用,确保实时同步。当日志切换发生时,备库的归档进程会将此standby redolog归档成归档日志,同时MRP进程将信息应用到备库。在故障切换情况下,还可以访问已经写入standby redolog的信息,因此信息不会丢失。
Oracle建议在主数据库和备库上都保留standby redolog。(虽然主数据库上不强制要求配置standby redolog,但配置后可以快速进行切换,而无需额外的DBA操作。如果主数据库上没有standby redolog,每次切换时都需要创建standby redolog。)
如果主数据库中有一些归档日志在传输到备库之前丢失了,该如何解决同步问题?
可以通过使用主数据库的增量备份(使用备库的SCN)来恢复备库。
DataGuard中有哪些不同的应用服务类型?
「重做应用(Redo Apply)」
使用重做应用时,应用服务会等待standby redolog文件被归档后,再将重做数据应用到备库。
「实时应用(Real-Time Apply)」
如果启用了实时应用功能,则应用服务可以在接收到重做数据时(从 redo log 缓冲区或 redo log 文件中)立即应用,而无需等待当前的standby redolog文件被归档。
当standby_file_management设置为AUTO时,如果在主数据库中重命名了一个数据文件,该更改会传播到备库吗?
不会,要重命名数据文件,还需要在备库上运行重命名命令。
什么是多实例重做应用(Multi-Instance Redo Apply)?我们如何启用它?
在12.2之前,如果DataGuard是RAC,则MRP进程只能在一个节点上运行。然而,从12.2开始,我们可以启用多实例重做应用(MIRA),即MRP可以在多个实例或所有节点上运行。
以下是语法:
-- 从所有可用实例启动MRP:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION INSTANCES ALL;
-- 从2个实例启动MRP:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION INSTANCES 2;
主数据库和备库的db_name
和db_unique_name
是否相同?
DB_NAME
在主数据库和其备库中是相同的。但每个数据库都有不同的db_unique_name
。
为了配置备库,我们需要在主数据库上添加哪些额外的参数?
log_archive_configdb_unique_namestandby_file_management=autolog_archive_dest_2
:备库的TNS详细信息,用于日志传输。log_archive_dest_state_2db_file_name_convert
:用于映射主数据库和备库的数据库文件(当主数据库和备库的目录结构不同时)。log_file_name_convert
:用于映射主数据库和备库的 redo log 。fal_server
:定义备库应从哪个数据库请求缺失的归档日志,即在备库上,fal_server
的值应为主数据库的TNS服务名。
什么是DataGuard Broker及其用途?
DataGuard Broker用于轻松管理和管理员工多个备库。它有助于简单的切换、故障切换、快速启动故障切换(FSFO)、角色转换等操作。
在启用DataGuard Broker时,会运行DMON进程。
使用dgmgrl
实用程序可以进行DataGuard Broker的管理。
每当从dgmgrl
提示符下发出命令时,DMON进程会在主数据库上处理请求,并协调所有备库。同时,还会在需要时更新配置。
出于安全原因,不允许使用SYS用户进行 redo log 传输服务。是否有替代方法,还是必须使用SYS用户?
如果我们想使用SYS以外的用户,可以创建具有SYSOPER权限的用户,并将REDO_TRANSPORT_USER
参数设置为该用户名。
我们进行了failover,备库变成了新的主数据库。现在我们需要将旧的主数据库变为新的备库,但数据库非常大,所以重建需要时间。有什么办法可以解决吗?
有一种方法,但前提是启用了闪回功能。如果启用了闪回功能,可以从新的主数据库获取当前SCN,并将旧的主数据库(现在的新备库)闪回到该SCN。
我们可以将物理备库转换为逻辑备库吗?
是的,可以将物理备库转换为逻辑备库。
Oracle如何检测和解决日志间隙问题?
有两种方法。
「自动间隙解决」
这是由日志传输服务完成的。当传输的 redo log 与备库上最后接收到的日志不匹配时,RFS进程会通过ARCH-RFS心跳请求主数据库的缺失日志序列。无需特殊设置。
「获取归档日志(FAL方法)」FAL_SERVER
指定需要从哪个数据库获取缺失的归档日志。
当归档日志传输到备库时,它会在备库的控制文件中注册。当日志应用服务检测到间隙时,会向fal_server
发送请求以重新传输缺失的日志。
以上是一些关于dataguard的问题和回答,关于回答有不足或者有错误的,欢迎大家指出并补充分享其他的问题。
「欢迎关注我们的公众号,获取更多技术分享与经验交流。」




