注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
使用 V4 跨平台可传输表空间将 Oracle Database 迁移到 OCI 并从 12c 升级到 19c
简介
本教程介绍了将 V4 跨平台可传输表空间 (XTTS) 与 Oracle Recovery Manager (RMAN) 增量备份结合使用所需的步骤,以在具有不同 endian 格式的系统之间迁移数据,同时尽可能减少应用程序停机时间。
第一步是将完整备份从源复制到目标。然后,通过使用一系列增量备份(每个备份都比上一个备份小),可以在需要停机之前,使目标系统中的数据与源系统几乎保持最新。此过程仅在最终增量备份以及元数据导出或导入期间需要停机。
本教程介绍了可以与 11.2.0.3 及更高版本一起使用的跨平台增量备份的 V4 过程。
环境详细信息
-
源数据库:
-
数据库版本: 12.1.0.2
-
操作系统:AIX
-
-
目标数据库:
-
数据库版本:19.18.0.0 (OCI)
-
操作系统:Oracle Linux
-
目标
- 将跨平台可传输表空间 (Cross Platform Transportable Tablespaces,XTTS) 与 RMAN 增量备份结合使用,可以在具有不同 endian 格式的系统之间迁移数据,同时尽可能减少应用程序停机时间。
先决条件
-
当前版本不支持将 Windows 作为源或目标。
-
跨平台仅适用于 Enterprise Edition。此过程不能与标准版一起使用。
-
源数据库
COMPATIBLE
参数不能大于目标数据库COMPATIBLE
参数。 -
源数据库必须处于 ARCHIVELOG 模式。
-
在运行 XTTS 脚本之前,请设置
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
。其他NLS_LANG
设置可能会导致错误。 -
源系统上的 RMAN 不能具有:
-
配置有 COMPRESSED 的设备类型磁盘。
-
要复制的备份类型。源必须具有“BACKUP TYPE TO BACKUPSET”。
-
配置为键入 SBT 的默认通道。这是此过程只能与磁盘通道一起使用。
-
任何通道配置限制。例如,MAXSETSIZE、MAXPIECESIZE 等。
-
-
要移动的表空间集必须全部处于联机状态,并且不包含脱机数据文件。表空间必须为 READ WRITE。
-
可以使用普通的 XTTS 方法移动 READ ONLY 表空间。无需合并跨平台增量备份即可移动始终为 READ ONLY 的表空间。
-
虽然首选的目标系统是 Linux(64 位 Oracle Linux 或 RedHat Linux 的认证版本),但此过程可以与其他基于 Unix 的操作系统一起使用。但是,任何非 Linux 操作系统必须在目标和源中运行 12.1.0.1 或更高版本。
-
Oracle 版本的源必须小于或等于目标。因此,此过程可用作升级方法。
-
源和目标的最低版本为 11.2.0.3。早期的 11.2 版本可能功能相同,但未经测试。
-
根据建议,在将过程依赖于生产环境之前,请先测试该过程。
-
自动存储管理 (Automatic Storage Management,ASM) 只能用于数据文件在目标中的最终位置,无法在此版本的 ASM 上放置备份。
-
目标的备份位置必须是具有读/写权限的设备。这不能是 READ ONLY 设备。这可能会导致在备份集转换时使用 ORA-19624。
-
源和目标数据库必须使用兼容的字符集和国家字符集。
-
表空间必须在第一个备份(级别 0)处处于 READ WRITE 状态。
-
源和目标数据库必须:
-
使用兼容的时区版本。
-
具有最新补丁程序版本。
-
-
将以下脚本从 Oracle E-Business Suite 应用程序节点复制到目标数据库服务器(仅适用于 Oracle E-Business Suite 应用程序)。
audb19c.sql ausy19c.sql adstats.sql auque2.sql
任务 1:准备源数据库
-
运行以下查询以检查源数据库上的 endian 格式。
col PLATFORM_NAME for a50 select platform_name,platform_id, endian_format from v$transportable_platform;
-
标识要传输的源数据库中的表空间。如果要迁移所有表空间,请运行以下查询。
select tablespace_name from dba_tablespaces where contents='PERMANENT' and tablespace_name not in ('SYSTEM','SYSAUX');
-
基于源数据库创建
transport_set_violations
视图。exec dbms_tts.transport_set_check('<list of tablespaces with comma saperated>'); SELECT * FROM SYS.TRANSPORT_SET_VIOLATIONS;
-
(可选)在源数据库上启用块更改跟踪,以提高增量备份的性能。
-
验证源数据库上的所有表空间都处于联机状态。
-
删除重建索引参数空间索引并修改不可用空间索引。
-
此步骤进行检查以确保空间索引中没有重建索引参数。对于多租户环境,请先运行以下命令,将数据库 SID 字段设置为 Oracle 数据库 (PDB NAME) 的可插入数据库名称。
export ORACLE_PDB_SID=[PDB NAME]
-
要查看是否有任何重构索引参数,请在源数据库服务器节点上作为源数据库服务器文件系统和数据库实例的所有者,使用 SQL*Plus 以 sysdba 身份连接到源数据库并运行以下查询。
select owner,index_name from dba_indexes where index_type='DOMAIN' and upper(parameters) like '%REBUILD%';
-
要删除重建索引参数,请使用 SQL*Plus 以索引的所有者身份连接到源数据库,然后运行以下查询。
alter index [index name] rebuild parameters [parameters]
-
-
同步文本索引。使用 SQL*Plus 以 SYSDBA 身份连接到源数据库,然后运行以下查询来查找所有待同步的索引。
select pnd_index_owner,pnd_index_name,count(*) from ctxsys.ctx_pending group by pnd_index_owner,pnd_index_name;
要同步索引,请运行以下查询。
exec ctx_ddl.sync_index('[index owner].[index name]');
任务 2:准备目标数据库
-
创建临时新用户表空间。如果目标数据库是多租户环境,则连接到 PDB。
alter session set container=[PDB NAME] select TABLESPACE_NAME from dba_tablespaces where TABLESPACE_NAME='USERS_OCI'; select TABLESPACE_NAME from dba_tablespaces order by 1; set long 99999 SELECT DBMS_METADATA.GET_DDL ('TABLESPACE','USERS') from dual;
使用上述数据定义语言 (Data Definition Language,DDL) 输出,替换如下所示的磁盘组名称并创建新用户表空间。
CREATE BIGFILE TABLESPACE USERS_OCI DATAFILE '+DATAC2' SIZE 1073741824 AUTOEXTEND ON NEXT 17179869184 MAXSIZE 33554431M LOGGING ONLINE PERMANENT BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL AUTOALLOCATE ENCRYPTION USING 'AES256' ENCRYPT DEFAULT NOCOMPRESS SEGMENT SPACE MANAGEMENT AUTO;
使用以下查询将新用户表空间 USERS_OCI 分配给具有默认表空间 USERS 的所有数据库用户。
select 'alter user '||username||' default tablespace users_OCI;' from dba_users where default_tablespace='USERS';
查询的输出必须返回 0 。
select count(*) from dba_users where default_tablespace='USERS'; ALTER DATABASE DEFAULT TABLESPACE USERS_OCI; drop tablespace users including contents and datafiles; select TABLESPACE_NAME from dba_tablespaces where TABLESPACE_NAME='USERS';
-
在目标数据库上创建临时表空间。对源运行以下查询并收集表空间详细信息。
select TABLESPACE_NAME from dba_tablespaces where CONTENTS='TEMPORARY'; Create temp tablespaces on target database like below example. create bigfile temporary tablespace USER_TEMP tempfile size 672m autoextend on next 672m extent management local;
-
为 Oracle E-Business Suite 应用程序创建
nls/data/9idata
目录。srvctl getenv database -d $ORACLE_UNQNAME perl $ORACLE_HOME/nls/data/old/cr9idata.pl --> on all the nodes of the cluster srvctl setenv database -d $ORACLE_UNQNAME -t ORA_NLS10=$ORACLE_HOME/nls/data/9idata srvctl getenv database -d $ORACLE_UNQNAME
-
为 Oracle E-Business Suite 应用程序创建
$ORACLE_HOME/appsutil/jre
。将appsutil
文件夹从路径$ORACLE_HOME
下的源数据库复制到路径$ORACLE_HOME
下的目标数据库服务器。复制文件夹后,在目标数据库服务器的所有节点上运行以下命令。cd $ORACLE_HOME/appsutil ln -s $ORACLE_HOME/jdk/jre cd $ORACLE_HOME/jdk/jre/lib/ext cp $ORACLE_HOME/jlib/orai18n.jar .
-
为 Oracle E-Business Suite 应用程序设置系统方案。
export ORACLE_PDB_SID=[PDB_NAME] sqlplus / as sysdba show con_name @audb19c.sql
-
为 Oracle E-Business Suite 应用程序设置系统方案。
export ORACLE_PDB_SID=[PDB_NAME] sqlplus / as sysdba show con_name @ausy19c.sql
-
设置 Oracle E-Business Suite 应用程序的
CTXSYS
参数。export ORACLE_PDB_SID=[PDB_NAME] sqlplus / as sysdba show con_name exec ctxsys.ctx_adm.set_parameter('file_access_role', 'public');
-
自动收集 Oracle E-Business Suite 应用程序的统计信息。
export ORACLE_PDB_SID=[PDB_NAME] sqlplus / as sysdba show con_name alter system enable restricted session; @adstats.sql alter system disable restricted session;
任务 3:增量 V4 XTTS 步骤
任务 3.1:初始阶段
-
从此处下载最新的 v4 perl 脚本并解压缩:V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245.1) 。创建目录以解压缩脚本和临时目录。
例如:
mkdir -p <Backup_location>/XTTS_Migration mkdir -p <Backup_location>/XTTS_Migration/XTTS_TEMP
-
使用特定于站点的配置编辑源系统上的
xtt.properties
文件。有关xtt.properties
文件中参数的更多信息,请参见此处配置文件xtt.properties
部分中参数的说明:V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245.1) 。对于此过程,只有以下参数是必需的。其他选项为可选和/或可供使用。tablespaces=<list of tablespaces that are migrated with comma saperated> platformid= <obtained from the query select platform_name,platform_id, endian_format from v$transportable_platform> src_scratch_location= <Backup location on source database server> dest_scratch_location= <Backup location on target database server> dest_datafile_location= <path for the datafile location of PDB > destconnstr=sys/<password>>@<Target PDB Connect String> usermantransport=1 - It is recommended this be set if the source database is running 12c or higher. This causes new 12c (and higher) parallel=1
任务 3.2:准备阶段
-
在源系统上运行备份。在源系统上,以 Oracle 用户身份登录,其中环境(
ORACLE_HOME
和ORACLE_SID
环境变量)指向源数据库,按如下方式运行备份。export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3 &
-
将以下文件传输到目标数据库服务器。
-
从源
src_scratch_location
创建到目标dest_scratch_location
的备份。 -
从源
$TMPDIR
到目标$TMPDIR
的res.txt
文件。
在以下示例中,scp 用于将上一步创建的 level=0 备份从源系统传输到目标系统。
[oracle@source]$ scp /src_scratch_location/* oracle@dest:/dest_scratch [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
-
-
恢复目标系统上的数据文件。
export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 cp nohup.out nohup.out_L0 nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore --debug 3 &
任务 3.3:向前滚动阶段
在此阶段,将从源数据库创建增量备份,传输到目标系统,转换为目标系统 endian 格式,然后应用于转换后的目标数据文件副本以向前滚动。此阶段可以多次运行。每个连续增量备份所用的时间应该比以前的增量备份少,并且会使目标数据文件副本在源数据库上更加最新。在此阶段,传输的数据(源)完全可访问。
注:可以针对源执行多个备份,而无需将其应用于目标。在目标上执行 “– restore”命令之前,必须复制备份文件和
res.txt
。
-
为源系统上要传输的表空间创建增量备份。
export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 cp nohup.out nohup.out_1 nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3 &
此步骤将为
xtt.properties
文件中列出的所有表空间创建增量备份。 -
将增量备份和
res.txt
传输到目标系统。将增量备份(在src_scratch_location
和dest_scratch_location
之间)和res.txt
(在$TMPDIRs
之间)从源传输到目标。当前备份中的增量备份文件列表可在源系统的incrbackups.txt
文件中找到。例如:
[oracle@source]$ scp `cat incrbackups.txt` oracle@dest:/dest_scratch_location [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
-
将增量备份应用于目标系统上的数据文件副本。在目标系统上,以 Oracle 用户身份登录,其中环境(
ORACLE_HOME
和ORACLE_SID
环境变量)指向目标数据库,按如下方式运行向前滚动数据文件步骤。export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 cp nohup.out nohup.out_3 $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore --debug 3
向前滚动步骤连接到目标数据库,并对要传输的每个表空间的数据文件应用增量备份。
注:虽然可以针对源执行多个备份而不会在目标上应用,但必须在上次备份之后以及在目标上执行
--restore
之前复制res.txt
文件。重复前滚阶段,直到数据库切换窗口。
任务 3.4:最终增量备份阶段
-
在源数据库中将源表空间更改为 READ ONLY。如果所有表空间都传输到目标数据库,请运行以下查询。
set lines 300 select 'alter tablespace "'||tablespace_name||'" read only;' from dba_tablespaces where contents='PERMANENT' and tablespace_name not in ('SYSTEM','SYSAUX');
-
为源系统上要传输的表空间创建最终增量备份。
export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 cp nohup.out nohup.out_4 nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3 &
-
将增量备份和
res.txt
传输到目标系统。例如:
[oracle@source]$ scp 'cat incrbackups.txt' oracle@dest:/dest_scratch_location [oracle@source]$ scp res.txt oracle@dest:/home/oracle/xtt
-
将上次增量备份应用于目标数据文件。
export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 cp nohup.out nohup.out_5 nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore --debug 3 &
任务 3.5:传输阶段 - 将元数据和插件表空间导出到目标数据库
-
创建目录以存储导出备份文件。
例如:
mkdir -p <Backup_location>/XTTS_DPUMP
运行以下查询以在源数据库中创建目录。
create or replace directory XTTS_DUMP as '<Backup_location>/XTTS_DUMP'; grant read,write on directory XTTS_DUMP to system;
-
准备导出语法分析文件。
vi xtts_expdp.par directory=XTTS*DUMP metrics=y dumpfile=xttsfulltts*%U.dmp filesize=1048576000 full=y exclude=STATISTICS logfile=expfulltts.log parallel=4 transportable=always EXCLUDE=NORMAL_OPTIONS
-
在源数据库上运行数据泵导出。
nohup expdp system/<password>@<source_db_name> parfile= xtts_expdp.par &
-
在生成要导入的样例语法分析文件的目标数据库服务器上运行以下命令。
export TMPDIR=<Backup_location>/XTTS_Migration/XTTS_TEMP export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 $ORACLE_HOME/perl/bin/perl xttdriver.pl -e
更新在上一步中生成的以下语法分析文件行。
impdp directory=<DATA_PUMP_DIR> logfile=<tts_imp.log> \ network_link=<ttslink> transport_full_check=no \ replace these parameters transport_tablespaces=<tablespace list> \ delete this line from parfile
最终导入配置文件应如下所示:
directory=XTTS*DUMP logfile=impdpfulltts.log \ metrics=y dumpfile=xttsfulltts*%U.dmp parallel=6 full=y logtime=all exclude=STATISTICS \ transport_datafiles=<list of datafile path generated from above parfile>
-
禁用以下审计相关参数,直到如上所述完成导入。导入完成后重新启用它们。
show parameter audit_sys_operations show parameter audit_trail alter system set audit_trail=none scope=spfile sid='_'; alter system set audit_sys_operations=FALSE scope=spfile sid='_'; srvctl stop database -d ${ORACLE_UNQNAME} srvctl start database -d ${ORACLE_UNQNAME} show parameter audit_sys_operations show parameter audit_trail
-
在目标数据库上运行数据泵导入。
-
创建目录以复制导出备份文件。
例如:
mkdir -p <Backup_location>/XTTS_DPUMP
-
运行以下命令以在源数据库中创建目录。
create or replace directory XTTS_DUMP as '<Backup_location>/XTTS_DUMP'; grant read,write on directory XTTS_DUMP to system;
nohup impdp system/<password>@<>target_db_name> parfile=<parfile_name> &
-
-
在导入完成后启用以下审计相关参数。
show parameter audit_sys_operations show parameter audit_trail alter system set audit_trail=DB scope=spfile sid='_'; alter system set audit_sys_operations=TRUE scope=spfile sid='_'; srvctl stop database -d ${ORACLE_UNQNAME} srvctl start database -d ${ORACLE_UNQNAME} show parameter audit_sys_operations show parameter audit_trail
-
验证传输的数据。
rman target sys/<password>@<>target_db_name> trace=rman_trace.trc log=<backup_location>/tablespace_validate.log validate tablespace <list of tablespaces transported with comma saperated> check logical;
-
分配用户表空间以还原在目标数据库准备过程中所做的更改。
select 'alter user '||username||' default tablespace users;' from dba_users where default_tablespace='USERS_OCI';
验证源数据库和目标数据库上的数据。
相关链接
-
可传输表空间 (Transportable Tablespace,TTS) 限制和限制:详细信息、参考以及适用的版本(文档 ID 1454872.1)
-
基于 Oracle Cloud Infrastructure 的 Oracle E-Business Suite 入门(文档 ID 2517025.1)
-
Oracle Cloud Infrastructure 20.1.1 版 Oracle E-Business Suite 的要求。X(文档 ID 2438928.1)
-
互操作性说明:Oracle E-Business Suite 发行版 12.1 和 Oracle Database 19c(文档 ID 2580629.1)
-
在 Oracle E-Business Suite 发行版 12.x 中遵守夏令时 (DST) 和时区规则更改(文档 ID 563019.1)
确认
- 作者 — Pavan Yennampelli(Oracle 北美云服务— NACIE 高级云工程师)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Migrate Oracle Database to OCI using V4 Cross Platform Transportable Tablespaces and Upgrade from 12c to 19c
G17530-01
October 2024