best365(中文版)官网登录-Official Platform

best365官网中文版登录Logo best365官网中文版登录Logo

Oracle快照备用数据库测试最佳实践

2026-06-05

什么是 Oracle 快照备用数据库?


Oracle 11g 的 Data Guard 不仅通过 Active Data Guard 提供了实时查询这一卓越功能,还带来了一项额外惊喜——快照备用数据库(Snapshot Standby Database)功能。该功能允许将备用数据库切换至“读写”模式,从而构建一个可用于测试的环境;此类测试若直接在生产主数据库上执行则可能带来不便,例如模拟线上部署及其他相关任务。当在读写模式下完成各项任务后,可轻松将快照备用数据库的角色切换回常规备用数据库角色,并恢复与主数据库的同步。处于快照备用数据库状态时,该数据库仍可接收主数据库的日志,但无法将这些变更应用到自身数据库中。

Oracle 快照备用数据库测试最佳实践

1. 停止重做应用进程

如果备用数据库当前正在进行重做应用操作,则必须首先将其停止。

sys@ora11gdg> alter database recover managed standby database cancel;
 
Database altered.

2. 检查备用数据库当前状态,确保其处于 MOUNTED 状态。

sys@ora11gdg> select database_role,open_mode from v$database;
 
DATABASE_ROLE OPEN_MODE
 
PHYSICAL STANDBY MOUNTED

此时,备用数据库作为物理备用数据库运行,并处于 MOUNTED 模式。

3. 确保已指定闪回恢复区。

温馨提示: 启用快照备用数据库功能,并不要求在主数据库和备用数据库上都启用闪回数据库功能。该功能与是否启用闪回数据库功能无关。

sys@ora11gdg> show parameter db_recovery_file_dest
 
NAME TYPE VALUE
 
db_recovery_file_dest string /u01/app/oracle/flash_recovery_area
db_recovery_file_dest_size big integer 3852M

确认主数据库上未启用闪回功能。

sys@ora11g> select FLASHBACK_ON from v$database;
 
FLASHBACK_ON
NO

确认备用数据库上未启用闪回功能。

sys@ora11gdg> select FLASHBACK_ON from v$database;
 
FLASHBACK_ON
NO

4. 通过执行一条简单直接的 SQL 命令,将备用数据库调整为快照备用(Snapshot Standby)状态。

sys@ora11gdg> alter database convert to snapshot standby;
 
Database altered.
 
sys@ora11gdg> select database_role,open_mode from v$database;
 
DATABASE_ROLE OPEN_MODE
 
SNAPSHOT STANDBY MOUNTED

5. 将备用数据库置于读写状态,以供外部访问。

sys@ora11gdg> alter database open;
 
Database altered.
 
sys@ora11gdg> select database_role,open_mode from v$database;
 
DATABASE_ROLE OPEN_MODE
 
SNAPSHOT STANDBY READ WRITE

一个全新的读写型数据库展现在我们面前。

6. 分析切换过程中的日志信息。

Oracle 11g 主数据库告警日志:

Mon Mar 19 18:46:28 2012
LNS: Attempting destination LOG_ARCHIVE_DEST_2 network reconnect (3135)
LNS: Destination LOG_ARCHIVE_DEST_2 network reconnect abandoned
Errors in file /u01/app/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_nsa2_27302.trc:
ORA-03135: connection lost contact
Error 3135 for archive log file 2 to 'ora11gdg'
Errors in file /u01/app/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_nsa2_27302.trc:
ORA-03135: connection lost contact
LNS: Failed to archive log 2 thread 1 sequence 50 (3135)
Errors in file /u01/app/oracle/diag/rdbms/ora11g/ora11g/trace/ora11g_nsa2_27302.trc:
ORA-03135: connection lost contact

Oracle 11g 备用数据库告警日志:

Mon Mar 19 18:46:26 2012
alter database convert to snapshot standby
Starting background process RVWR
Mon Mar 19 18:46:26 2012
RVWR started with pid=26, OS id=8824
Allocated 3981204 bytes in shared pool for flashback generation buffer
Created guaranteed restore point SNAPSHOT_STANDBY_REQUIRED_03/19/2012 18:46:26
krsv_proc_kill: Killing 3 processes (all RFS)
Begin: Standby Redo Logfile archival
End: Standby Redo Logfile archival
RESETLOGS after complete recovery through change 1472476
Resetting resetlogs activation ID 4174194338 (0xf8cd26a2)
Online log /u01/app/oracle/oradata/ora11gdg/redo01.log: Thread 1 Group 1 was previously cleared
Online log /u01/app/oracle/oradata/ora11gdg/redo02.log: Thread 1 Group 2 was previously cleared
Online log /u01/app/oracle/oradata/ora11gdg/redo03.log: Thread 1 Group 3 was previously cleared
Standby became primary SCN: 1472474
Mon Mar 19 18:46:29 2012
Setting recovery target incarnation to 5
CONVERT TO SNAPSHOT STANDBY: Complete - Database mounted as snapshot standby
Completed: alter database convert to snapshot standby

关键信息行显示:“已创建保证还原点 SNAPSHOT_STANDBY_REQUIRED_03/19/2012 18:46:26。”这表明我们转换为快照的准确时刻,从而为后续回退操作提供支持。

7. 测试快照备用数据库接收主数据库日志的情况

即使主数据库发生日志切换,备用数据库仍会持续接收日志,只是暂不应用这些日志。

1) 在主数据库上执行日志切换。

sys@ora11g> alter system switch logfile;
 
System altered.

2)主数据库记录的告警日志内容

Oracle 11g 主数据库告警日志:

Mon Mar 19 18:52:00 2012
Thread 1 cannot allocate new log, sequence 52
Private strand flush not complete
Current log# 3 seq# 51 mem# 0: /u01/app/oracle/oradata/ora11g/redo03.log
Mon Mar 19 18:52:00 2012
ARC3: Standby redo logfile selected for thread 1 sequence 50 for destination LOG_ARCHIVE_DEST_2
Thread 1 advanced to log sequence 52 (LGWR switch)
Current log# 1 seq# 52 mem# 0: /u01/app/oracle/oradata/ora11g/redo01.log
Mon Mar 19 18:52:03 2012
Archived Log entry 91 added for thread 1 sequence 51 ID 0xf8cd26a2 dest 1:
Mon Mar 19 18:52:03 2012
LNS: Standby redo logfile selected for thread 1 sequence 51 for destination LOG_ARCHIVE_DEST_2
LNS: Standby redo logfile selected for thread 1 sequence 52 for destination LOG_ARCHIVE_DEST_2

Oracle 11g 备用数据库告警日志:

Mon Mar 19 18:52:00 2012
RFS[5]: Assigned to RFS process 9174
RFS[5]: Identified database type as 'snapshot standby': Client is ARCH pid 27296
Mon Mar 19 18:52:00 2012
RFS[6]: Assigned to RFS process 9176
RFS[6]: Identified database type as 'snapshot standby': Client is ARCH pid 27300
RFS[6]: Selected log 4 for thread 1 sequence 50 dbid -120744030 branch 778023141
Mon Mar 19 18:52:00 2012
Archived Log entry 47 added for thread 1 sequence 50 ID 0xf8cd26a2 dest 1:
Mon Mar 19 18:52:03 2012
RFS[7]: Assigned to RFS process 9180
RFS[7]: Identified database type as 'snapshot standby': Client is LGWR ASYNC pid 27302
RFS[7]: Selected log 4 for thread 1 sequence 51 dbid -120744030 branch 778023141
Mon Mar 19 18:52:04 2012
Archived Log entry 48 added for thread 1 sequence 51 ID 0xf8cd26a2 dest 1:
RFS[7]: Selected log 4 for thread 1 sequence 52 dbid -120744030 branch 778023141

3)检查主数据库和备用数据库归档目录中日志文件的内容

(1)主数据库的归档日志文件:

ora11g@secdb /home/oracle/arch/ora11g$ ls -ltr
total 879M
...omitted...
-rw-r----- 1 oracle oinstall 1.1M Mar 19 18:51 1_50_778023141.arc
-rw-r----- 1 oracle oinstall 363K Mar 19 18:52 1_51_778023141.arc

(2)归档备用数据库的日志文件:

ora11g@secdb /home/oracle/arch/ora11gdg$ ls -ltr
total 847M
...omitted...
-rw-r----- 1 oracle oinstall 1.1M Mar 19 18:52 1_50_778023141.arc
-rw-r----- 1 oracle oinstall 363K Mar 19 18:52 1_51_778023141.arc

如所观察,备用数据库已成功接收来自主数据库发送的日志文件。

8. 在快照备用数据库中创建用户、表并初始化数据。

sys@ora11gdg> create user ocmu identified by ocmu;
 
User created.
 
secooler@ora11gdg> grant dba to ocmu;
 
Grant succeeded.
 
secooler@ora11gdg> conn ocmu/ocmu
Connected.
ocmu@ora11gdg> create table t (x varchar2(8));
 
Table created.
 
ocmu@ora11gdg> insert into t values ('Secooler');
 
1 row created.
 
ocmu@ora11gdg> commit;
 
Commit complete.
 
ocmu@ora11gdg> select * from t;
 
X
Secooler

此时,备用数据库处于可修改、可调整的状态,即符合预期的“读写”(READ WRITE)模式。

需要特别注意的是,快照备用数据库功能的实现从根本上依赖于闪回数据原理。因此,此处应避免执行任何可能妨碍数据库闪回的操作。否则,快照备用数据库将无法恢复到之前的备用恢复状态。

9. 将快照备用数据库还原为物理备用数据库

1)重启备用数据库至 MOUNTED 状态。

ocmu@ora11gdg> conn / as sysdba
Connected.
sys@ora11gdg> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ora11gdg> startup mount
ORACLE instance started.
 
Total System Global Area 313860096 bytes
Fixed Size 1336232 bytes
Variable Size 268438616 bytes
Database Buffers 37748736 bytes
Redo Buffers 6336512 bytes
Database mounted.
 
sys@ora11gdg> select database_role,open_mode from v$database;
 
DATABASE_ROLE OPEN_MODE
 
SNAPSHOT STANDBY MOUNTED

2) 执行命令以恢复物理备用数据库的原始身份。

sys@ora11gdg> alter database convert to physical standby;
 
Database altered.

3) 备用数据库的告警日志详细记录了此切换过程。

Mon Mar 19 19:30:24 2012
alter database convert to physical standby
ALTER DATABASE CONVERT TO PHYSICAL STANDBY (ora11gdg)
Flashback Restore Start
Flashback Restore Complete
Stopping background process RVWR
Deleted Oracle managed file /u01/app/oracle/flash_recovery_area/ORA11GDG/flashback/o1_mf_7pg3n2jc_.flb
Deleted Oracle managed file /u01/app/oracle/flash_recovery_area/ORA11GDG/flashback/o1_mf_7pg52yst_.flb
Guaranteed restore point dropped
Clearing standby activation ID 4174523254 (0xf8d22b76)
The primary database controlfile was created using the
'MAXLOGFILES 30' clause.
There is space for up to 27 standby redo logfiles
Use the following SQL commands on the standby database to create
standby redo logfiles that match the primary database:
ALTER DATABASE ADD STANDBY LOGFILE 'srl1.f' SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE 'srl2.f' SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE 'srl3.f' SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE 'srl4.f' SIZE 52428800;
Completed: alter database convert to physical standby

从告警日志可推断,所采用的恢复方法使用了“闪回数据库”功能。这意味着即使备用数据库未处于闪回数据库模式,仍可借助闪回数据库功能完成备用数据库的角色转换。

4)以自动恢复日志模式重启备用数据库。

(1)此时,数据库处于未装载(NOMOUNTED)状态,需要重新启动。

请注意,这需要重启数据库,而不是使用 ALTER 命令,否则将遇到以下错误信息:

sys@ora11gdg> alter database mount;
alter database mount
 
l ERROR at line 1:
ORA-00750: database has been previously mounted and dismounted
sys@ora11gdg> shutdown immediate;
ORA-01507: database not mounted
 
ORACLE instance shut down.
sys@ora11gdg> startup mount;
ORACLE instance started.
 
Total System Global Area 313860096 bytes
Fixed Size 1336232 bytes
Variable Size 268438616 bytes
Database Buffers 37748736 bytes
Redo Buffers 6336512 bytes
Database mounted.
sys@ora11gdg> alter database recover managed standby database disconnect;
 
Database altered.

(2)通过检查备用数据库的告警日志,可以清晰地观察到恢复过程。

Mon Mar 19 19:43:48 2012
Managed Standby Recovery not using Real Time Apply
Parallel Media Recovery started with 4 slaves
Waiting for all non-current ORLs to be archived...
All non-current ORLs have been archived.
Clearing online redo logfile 1 /u01/app/oracle/oradata/ora11gdg/redo01.log
Clearing online log 1 of thread 1 sequence number 1
Completed: alter database recover managed standby database disconnect
Clearing online redo logfile 1 complete
Clearing online redo logfile 2 /u01/app/oracle/oradata/ora11gdg/redo02.log
Clearing online log 2 of thread 1 sequence number 2
Clearing online redo logfile 2 complete
Media Recovery Log /home/oracle/arch/ora11gdg/1_49_778023141.arc
Media Recovery Log /home/oracle/arch/ora11gdg/1_50_778023141.arc
Media Recovery Log /home/oracle/arch/ora11gdg/1_51_778023141.arc
Media Recovery Log /home/oracle/arch/ora11gdg/1_52_778023141.arc
Media Recovery Log /home/oracle/arch/ora11gdg/1_53_778023141.arc
Media Recovery Log /home/oracle/arch/ora11gdg/1_54_778023141.arc
Media Recovery Waiting for thread 1 sequence 55

(3)通过检查动态性能视图 V$ARCHIVED_LOG 来监控日志应用状态。

sys@ora11gdg> select sequence#, first_time, next_time, applied from v$archived_log order by sequence#;
 
SEQUENCE# FIRST_TIME NEXT_TIME APPLIED
 
...omitted...
49 20120319 18:32:32 20120319 18:38:03 YES
50 20120319 18:38:03 20120319 18:51:00 YES
51 20120319 18:51:00 20120319 18:52:03 YES
52 20120319 18:52:03 20120319 19:09:57 YES
53 20120319 19:09:57 20120319 19:10:15 YES
54 20120319 19:10:15 20120319 19:10:25 YES
 
52 rows selected.

10. 启用备用数据库进入只读(READ ONLY)状态,以验证此前在快照备用数据库上执行的操作已被回滚。

sys@ora11gdg> alter database recover managed standby database cancel;
 
Database altered.
 
sys@ora11gdg> alter database open read only;
 
Database altered.
 
sys@ora11gdg> select database_role,open_mode from v$database;
 
DATABASE_ROLE OPEN_MODE
 
PHYSICAL STANDBY READ ONLY
 
sys@ora11gdg> select username from dba_users where username = 'OCMU';
 
no rows selected

结论已确认:此前创建的测试用户“OCMU”不存在。

使用专业解决方案保护您的 Oracle 数据库

Oracle 快照备用数据库对测试用途非常有用。然而,为了进一步保护您的数据库环境,建议使用专业的备份与灾难恢复解决方案来备份您的 Oracle 数据库。

Vinchin 备份与恢复

Vinchin 备份与恢复 提供强大功能,可自动、灵活且高效地保护虚拟机和物理服务器中的数据库。它支持多种数据库的保护,包括Oracle DB、MySQL、SQL Server、Postgres Pro 和 MariaDB,具备数据库压缩、集中式任务管理、智能备份策略、热备份以及针对 SQL Server/Oracle 的高级支持。此外,它还支持强大的勒索软件防护 功能,以及跨 10 多个虚拟化平台的虚拟机到虚拟机(V2V)迁移

Vinchin 备份与恢复软件已被数千家企业选用,您也可以立即开始使用这一功能强大的系统,享受为期15天的全功能免费试用!此外,您还可联系我们,留下您的具体需求,我们将根据您的IT环境为您量身定制解决方案。

结论

“快照备用数据库”这一显著特性,使备用数据库能够临时转变为可读写的独立数据库,从而极大拓展了备用数据库的应用场景。借助该备用数据库的特殊功能,您可以安全地测试并复现那些在生产环境中模拟和复现存在风险的问题。测试完成后,即可将数据库恢复为物理备用数据库身份,并继续执行日志恢复。

best365官网中文版登录备份软件,best365官网中文版登录容灾备份系统,虚拟机备份,数据库备份,文件备份,实时备份,勒索软件,美国,图书馆

您可能感兴趣的新闻 换一批

现在下载,可享15天免费试用

立即下载

请添加好友为您提供支持
jia7jia_7

微信售后服务二维码

请拨打电话
为您提供支持

400-9955-698

XML 地图