目标
我想将数据库从服务器 A 移动到服务器 B。两台服务器具有相同的技术,所以一种方法是关闭源数据库,将数据文件、控制文件、重做日志、参数文件从 A 复制到 B,然后启动数据库B 上。但这需要很长时间,因此我将使用涉及存档日志的方法。例如,我可以使用 dataguard 在 SERVER B 上构建一个备用服务器,并在迁移期间切换到这个备用服务器。但出于某些原因,我不想使用备用数据库,也无法访问 A 数据库的备份以在 B 上恢复它。
方法
在 RMAN 之前,我通过以下方式执行此操作:
- 将A的数据库设置为备份模式,并将所有数据文件复制到服务器附带的磁盘中,并取消设置备份模式。
- 将此磁盘移动到 B 并将其附加到它。
- 现在不时把档案运到B去应用
- 在迁移过程中,最后的档案被带到 B 并应用,并复制数据库。
当然我也可以用 RMAN 试试这个。而不是复制所有档案,我也可以使用增量备份。
所以我做了以下事情:
- 对连接到服务器 A 的磁盘进行 0 级备份。
- 将磁盘移动到B,并在Server B上恢复数据库。
- 现在不时把档案运到B去应用
- 在迁移过程中,最后的档案被带到 B 并应用,并复制数据库。
除了最后一个阶段,我什至可以应用增量备份而不是存档,但在这里我对此不感兴趣。
问题
我现在的问题是 A 上的数据库使用增量备份进行备份: 1. 在周日进行 0 级备份 2. 在剩余的 6 天进行 1 级备份
我想在星期三复制我的 0 级备份以进行迁移。但这会扰乱常规备份。假设我在周三早上执行此 0 级备份,那么周三晚上的 1 级备份指的是今天早上的 0 级备份,而不是像往常一样指前一天的 1 级备份。但是如果星期四进行恢复/恢复,我们就会遇到问题,因为星期三的 0 级备份磁盘不再可用。我认为数据库仍然可以恢复,因为丢失的时间间隔可以用归档日志恢复。但我想要一个不会扰乱常规备份的解决方案。所以level 1 backup On Wednesday应该是指Level 1 backup on Tuesday。
解决方案
我怎样才能做到这一点?
目前我看到以下方式:
我使用活动数据库中的副本将 A 上的数据库复制到附加到 A 的磁盘上。不得打开此数据库,以便稍后使用存档日志恢复它。该磁盘从 A 分离并移动到 B。这里数据文件被注册为数据文件副本并恢复到服务器 B。
但这需要 A 上的一个额外实例,以便我可以复制到这个实例。
另一种方式可能是
BACKUP INCREMENTAL LEVEL 1... FOR RECOVER OF COPY WITH TAG...
如此处所述
手册说:
该
BACKUP INCREMENTAL LEVEL 1... FOR RECOVER OF COPY WITH TAG...
命令实际上并不总是创建 1 级增量备份。如果没有特定数据文件的 0 级映像副本备份,则执行此命令会在磁盘上创建具有指定标记的数据文件的映像副本备份,而不是创建 1 级备份。每次将数据文件添加到数据库时,都会在下次脚本运行时创建新数据文件的映像副本。之后的时间,该数据文件的第一个 1 级增量被创建,并且在所有后续运行中,新数据文件像任何其他数据文件一样被处理。
必须使用标记来标识为在该策略中使用而创建的增量 0 级数据文件副本,以便它们不会干扰您实施的其他备份策略。如果你有多个有效的增量备份策略,RMAN 不能明确地创建增量 1 级备份,除非你标记 0 级备份。
这听起来不错,但实际上我必须对此进行测试。
我的问题
你建议用什么方法得到一个0级在线备份,而这个0级在线备份被下面的常规备份周期的0级备份忽略?
我会使用 RMAN 来
DUPLICATE DATABASE TO OTHERDB
. 随意使用适合您的环境/要求的相关方法之一。参考:
FULL-Backup 不会干扰常规备份。
从《Oracle 数据库在线文档 11g 第 2 版(11.2)》的《数据库备份与恢复参考》中对备份操作数 FULL的
BACKUP
命令的描述: