第 2 阶段 — 向前滚动阶段(源数据库保持在线) - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

第 2 阶段 — 向前滚动阶段(源数据库保持在线)

您可以根据需要多次重复前滚阶段,以将目标数据文件捕获到源数据库。

向前滚动阶段包括以下步骤。

  1. 从源数据库创建增量备份。

  2. 将备份传输到目标系统。

  3. 将备份转换为目标系统字节序格式。

  4. 将备份应用于转换后的目标数据文件副本以将其向前滚动。

每次连续的增量备份都应花费更少的时间,并且会使目标数据文件副本与源数据库保持一致。

步骤 1:并行进行增量备份

并行备份源系统上正在传输的表空间组的增量备份。

此步骤将为文件中列出的所有 tablespaces= 创建增量备份。xtt.properties

如果可以在源系统上激活 “块更改跟踪” 功能,则可以大大缩短增量备份的时间。

以下命令会自动识别完全备份后的下一个 SCN。

cd /u01/oracle/expimp/xtt<nn> export TMPDIR=/u01/oracle/expimp/out/out<nn> $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3

步骤 2:将增量备份和 res.txt 文件传输到目标系统

如果您有足够的带宽,则可以通过使用来缩短传输持续时间 Direct Connect。

src_scratch_location和之间传输增量备份dest_scratch_location。在源系统和$TMPDIR目标系统之间$TMPDIR传输res.txt文件。

如果您进行多个增量备份,则必须在最后一次增量备份之后复制该res.txt文件,然后才能将其应用于目标系统。

[source]$ scp $TMPDIR/res.txt oracle@[dest]:/u01/oracle/expimp/out/out<nn> [source]$ scp <src_scratch_location>/* oracle@[dest]:<dest_scratch_location>

步骤 3:转换并应用增量备份

将增量备份转换为目标系统字节序格式,并将增量备份应用于目标系统上的目标数据文件副本。

在本指南中,假设表空间组是四个。使用每个表空间组的--restore选项运行每条xttdriver.pl命令。

在此步骤中,Oracle XTTS 实用程序会启动要重新启动的目标数据库。要并行运行该命令,必须在 Perl 脚本中使用以下自定义设置。xttdriver.pl

  1. 注释掉以下几行:

    • 4867 行: my $outputstart = `sqlplus -L -s \"/ as sysdba\" \@xttstartupnomount.sql`;

    • 4868 行: checkError ("Error in executing xttstartupnomount.sql", $outputstart);

    • 第 4992 行: my $outputstart = `sqlplus -L -s \"/ as sysdba\" \@xttdbopen.sql`;\

  2. 使目标数据库处于NOMOUNT状态。

    sqlplus / as sysdba @xttstartupnomount.sql
  3. 并行执行增量备份的前滚操作。

    cd /u01/oracle/expimp/xtt<nn> export TMPDIR=/u01/oracle/expimp/out/out<nn> $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore --debug 3
  4. 向前滚动所有增量备份后,将目标数据库设置为OPEN状态。

    sqlplus / as sysdba @xttdbopen.sql

此时,您可以重复第 2 阶段, SCNs 直到源数据库和目标数据库足够接近。您必须根据给定的目标停机时间决定是进入第 3 阶段还是重复第 2 阶段。

为了缩短第 3 阶段(传输阶段)的停机时间,可以在将源数据库设置为USER之前,导出和导入非分段对象的元数据,例如FUNCTION、、和。PACKAGE PROCEDURE READ ONLY

如果源数据库中的数据库对象数量非常大(数十万),则导出和导入元数据将需要几个小时。在这种情况下,可以考虑导出元数据。

导出基于非分段的对象是在源系统上以读/写模式运行的。然后,必须先将对象导入目标系统,然后才能将源系统设置为READ ONLY。此时,必须保持PACKAGEPROCEDURE、和等数据库源对象FUNCTION不变。

这是转储参数文件的一个示例,该文件用于导出非基于分段的对象的元数据,包括、USERPACKAGE_SPECPACKAGE_BODYPROCEDURE和。FUNCTION

directory=dmpdir dumpfile=xttsmsc%U.dmp full=y filesize=1048576000 logfile=expmsc.log metrics=y exclude=TABLE,INDEX,CONSTRAINT,COMMENT, MATERIALIZED_VIEW,MATERIALIZED_VIEW_LOG,SCHEMA_CALLOUT

使用以下命令导出元数据。

SQL> create directory dmpdir as <location>; expdp system/<system password> parfile=<parameter file>

这是用于导入非分段对象元数据的转储参数文件的示例。

directory=dmpdir dumpfile=xttsmsc%U.dmp full=y logfile=impmsc1.log EXCLUDE=TABLESPACE, PROCOBJ, RLS_CONTEXT, RLS_GROUP, RLS_POLICY, TABLESPACE_QUOTA metrics=y remap_tablespace= APPS_TS_ARCHIVE:SYSTEM, APPS_TS_INTERFACE:SYSTEM, APPS_TS_SEED:SYSTEM, APPS_TS_SUMMARY:SYSTEM, …..

目前,目标系统TEMP上除了SYSTEMSYSAUXUNDO、和之外没有其他表空间。因此,必须重新映射所有要导入到SYSTEM表空间的对象。

使用以下命令导入元数据。

SQL> create directory dmpdir as <location>; impdp system/<system password> parfile=<parameter file>

现在,您可以在目标数据库上看到创建的对象。

SQL> select object_type, count(*) from dba_objects group by object_type order by count(*) desc; OBJECT_TYPE COUNT(*) ------------------------------- ---------- SYNONYM 89327 PACKAGE 55670 PACKAGE BODY 54447 VIEW 41378 JAVA CLASS 31978 SEQUENCE 12766 …..

除了SYSTEM、、SYSAUX和之外没有其他表空间。UNDO TEMP创建USER对象时使用默认表空间USERS作为默认表空间。在第 3 阶段,将创建可传输表空间,然后使用原始默认表空间更改 USER 对象。