深入浅出XTTS:Oracle数据库迁移升级利器

news2025/5/26 8:43:55

演讲大纲:

1. 什么是XTTS

2. 适用场景

3. XTTS的基本操作步骤

4. XTTS案例分享

今天主要跟大家分享一下XTTS,在网上曾看过相关讨论,但发现按网上讲的那些去实际操作的话,还是会遇到一些坑,并不能实际落下来,所以今天想跟大家分享一些实战干货.

一、什么是XTTS

XTTS其实是从TTS来的,TTS大家做过吗?

TTS其实也是传输数据的一种手段,传输数据的时候可能用过EXP的方式,再往后可能用数据泵导入导出一些数据,或者去做备份然后再恢复.其实还有一种方式是用TTS,TTS就是传输表空间,把表空间传输出去,数据从一个库传输到另外一个库,而XTTS是在TTS基础上做了一些更新,支持了跨平台,再有一个可以支持增量备份.

因为过去传统的TTS是不支持增量的,可以想象一下,一个表空间从一个库拷贝到另外一个库,转移过程当中业务新增的数据是有所丢失的.

二、适用场景

1.数据泵

这种方式进行数据迁移,为了保证应用不丢数据,做的时候需要把应用停掉,停完应外之后数据没有更新了,可以能保证所有业务表的一致性,这种方式操作起来其实是最简单的,它比较适用的场景就是数据量比较小、数据大概在5T以下,使用数据泵会方便很多.

 

2.GoldenGate

再往下一种就是在做一些重要的大型系统,对它进行迁移时,往往会使用GoldenGate,它迁移的时间很短,刚才使用数据泵时需要提前把应用停掉,或者允许迁移过程中的数据丢失,但是对于GoldenGate而言,在准备的阶段数据一直是同步的,只有业务正式割接时才把业务停掉,切换连接串,切到新的库上,停机时间十分短暂.

 

3.XTTS

再看一下XTTS,XTTS其实也是类似于GoldenGate的方式,也是前期要有一个准备,有一个数据的初始化,数据初始化之后,它是后续作为一个增量的恢复,把初始化之后的那些变更数据,使用增量的备份和恢复,去把之前的数据往前补上,到最后应用切换时,把最后一次小增量再补回来.这样保证割接的时间便会比较短暂.

最短停机时间,最少数据丢失的一种,这是甲方的诉求.那么来总结下三种方式:

数据泵、GoldenGate、XTTS这三种方式都是支持跨版本、跨平台、停机时间,对于GoldenGate来说它的停机时间是最短的,数据泵是停机时间最长,XTTS是介于这两者之间的,后面会进行更深入的讨论,看一下XTTS实际的步骤,在看完这个步骤之后,就可以看到时间具体花在哪.

三、XTTS的基本操作步骤

对于现在很多大型企业来说,现在有一个很大的环境是去IOE,但O是很难去掉的一个东西,而I和E其实是很多厂商开始实施的事情,这里就有一个很重要的点就是跨平台,平台会从以前的小机迁移到x86,所以需要考虑到跨平台的问题.

1.TTS的基本步骤

A、将源端数据库表空间设置为READ ONLY模式.

B、传输数据文件到目标系统.

C、转换数据文件为目标系统的字节序.

D、在源端导出元数据,并在目标端导入.

E、将目标端的数据库表空间设置为READ WRITE.

讲解XTTS前可以先看一下TTS,很多同学想必都用过TTS.TTS操作起来很简单,第一步是把源端的表空间设置为READ ONLY,把源端的数据文件传输到目标端,拷贝过去就可以,拷贝过去之后会牵扯到转换字节序的问题,然后是在源端对源数据做一个元数据的导出,在目标端把元数据再导入,导入之后目标端就已经能看到用户的数据,最后把目标端表空间置为READ WRITE.

2.XTTS的基本步骤

A、将源端数据文件传输到目标系统.

B、转换数据文件为目标系统的字节序.

C、在源端创建增量备份,并传输到目标端.

D、在目标端恢复增量别分.

E、重复多次操作C和D步骤.

F、将源端数据库表空间设置为READ ONLY模式.

G、最后一次执行C和D步骤.

H、在源端导出元数据,并在目标端导入.

I、将目标端的数据库表空间设置为READ WRITE.

再看到XTTS的步骤,猛的看上去这个步骤比TTS多了很多,但其实它中间变化很少,其实E这个步骤写的是重复C和D,G这部分也是重复C和D,真正多的步骤是在源端进行一个增量的备份,把它传输到目标端,在目标端做一个增量的恢复.

谈谈做TTS具体存在哪些问题.把源端的一个表空间置成了READ ONLY,这时已经不能提供正常业务了,对于5乘8的系统来说,对它的影响其是比较小的,可以接受这种情况的.但对于7*24小时的业务来说,不可能在迁移的过程中随便的停掉源端的业务,这种肯定不能接受的,这个时候就需要迁移的过程当中尽量保证业务是可用的,而XTTS就可以保证源端的业务迁移前一直可用.

3.XTTS的参数设置

XTTS涉及到的参数,乍一看感觉比较多,其实可以分成两部分的参数,XTTS可以使用两种方法去传输数据.个人是建议使用DBMS_FILE_TRANSFER数据包的方式去做.

第一个是平台号,可以通过语句从源端数据库里面查询到.

第二个是源端的数据文件目录,第三个是目标端的一个目录,第四个是目标端创建的db_link,剩下几个是源端备份保存路径,目标端备份文件的保存路径,还有目标端增量备份的路径.

底下这两个都叫目标端文件的路径,这两个有什么区别呢?

这个目标端备份的路径可以理解为,你迁移完之后,你数据文件所在的路径,即迁移完之后,把数据从这边迁移到了这边,新的数据文件在目录里面就是它的目录

backupondest是增量备份文件目录,增量备份文件是从源端产生的,是源端做完第一次初始化之后,源端需要对这段时间做一个增量的备份,而这些备份集放在这个目录里面.

4.XTTS案例

1).XTTS案例-准备

下面讲一个简单的例子,看一下XTTS操作是什么样的,首先第一步是在源端,源端执行如下命令:

§ 源端运行perl脚本,操作命令

$ORACLE_HOME/perl/bin/perl xttdriver.pl –S

该操作将生成xttnewdatafiles.txt、getfile.sql两个文件.

2).XTTS案例-数据文件拷贝

首先需要在配置信息里面,把这些信息做好配置,做好配置之后可以在源端执行 - S操作,当然在这个位置需要设置上要传输哪一些表空间,执行完 - S会生成两个文件.然后,要把生成的那两个文件传输到目标端,传输到目标端之后执行 - G这个参数,会把源端数据文件抽到目标端.

目标端执行命令:

3).XTTS案例-进行第1次增量备份

因为抽取过程往往是比较费时的,所以需要把这一段时间的数据再追回来,追回来时在源端做一次增量备份,这个备份指的是从第一次拽数据文件到做本次增量备份的时间段内新增的数据,执行如下命令,这样执行完了文件的备份,目录底下生成三个文件,做增量恢复的时候需要把它产生的文件,以及增量备份级同时拷到目标端.

$ORACLE_HOME/perl/bin /perl xttdriver.pl –i

该命令将对xtt.properties参数文件中指定的表空间,使用进行一个增量备份,同时会生成tsbkupmap.txt、incrbackups.txt、xttplan.txt三个文件.

备份的数据是从做xttdriver.pl  -S时在xttplan.txt文件中记录的SCN开始的.备份完成后需要将这3个文件连同增量备份集一起传输到目标端.

4).XTTS案例-进行第1此增量恢复

拷贝到目标端后,就执行一下 - r操作,完了之后把增量备份恢复到了目标端.然后回到源端执行Pl - s操作,确认了增量备份已经完成了恢复,这样下次再做增量备份时,就从上一次做增量备份的点继续往后去做备份.

但是如果一套库上有多个实例的话,在执行该步骤之前,需要对环境变量进行确认,如检查当前ORACLE_SID是否是需要执行的SID,否则可能会恢复到其他实例上.(并非是真实的恢复,因为其他实例跟这个备份集没有任何关系,但恢复的过程会在其他实例上进行一遍,如关闭/启动数据库,包括增量恢复的日志都会在另一个数据库上显示.)如果发生了这种事情,不用紧张,调整好环境变量,再执行一次perl xttdriver.pl –r即可.误操作的实例不受影响.

 

5).XTTS案例-进行SCN推进

解释下 - s这个过程.

假设初始化数据文件时SCN号是100,做增量时SCN号是200,这之间数据是从100到200之间,如果做完 - s之后再做增量备份,这个SCN号就变成200了.如果不做 - s,就意味着在源端做恢复的时候,有可能出现了异常,没有恢复成功,这会再去做增量备份,还是从100开始往后做.

$ORACLE_HOME/perl/bin/ perl xttdriver.pl –s

该命令将修改FROM_SCN,用于确定下一次增量备份的起点.

建议在【目标端】每次做完recover动作后,【源端】就执行一次该命令,以免遗忘.

 

6).XTTS案例-最后的增量备份和恢复

最后一次做备份及恢复时有很重要的一步,就是把源端的表空间设成RARD ONLY,再做一次备份和恢复,这样就完成了数据文件传输的过程.最后的步骤还是元数据的导入,最后这个步骤和TTS步骤几乎是一样的.导出和导入的命令也是很简单.

【原库端】表空间设置为READ ONLY

alter tablespace XXXX read only;

【原库端】做最后一次增量备份

perl xttdriver.pl –i

【目标端】做最后一次增量恢复

perl xttdriver.pl –r

在执行完恢复操作后,脚本会自动将目标库重启,不需要人工干预,如果出现到mount状态出现异常,根据情况手工执行后续命令.

刚才说的是理想的实验环境过程,通过这个过程大家可以简单了解XTTS整个过程,而从这个过程大家会发现XTTS其实是很简单的一个过程,第一步是写配置文件,配置文件里面写好的一些系统里的信息,它的平台号,写上传输哪一些表空间,以及设置一些文件的源端的地址,目标端的地址配备好之后,然后去执行一些后面的参数,都是很简单的一些操作,下面就考虑一些实际当中的一些案例.

四、XTTS案例分享

1.运营商环境

首先是目标端是生产库,第二个是源端的数据量是20TB+,每天归档量是1TB+,本地空间不足2TB,网络单进程是35MB/S,业务中断时间是3小时内,业务中断时间这么短,数据量比较大的情况下,第一时间就会考虑GoldenGate,因为它的数据是实时传输的,最后保证最后中断时间比较短.

大家入行业时大概都听说过DBA是比较清闲的一份事业,这个其实是每个人刚入行时的愿景,实际工作当中往往碰不到,尤其遇到这种需求时.在这种情况下,如果用GoldenGate的话,就需要把数据库里的每一个用户去分组做一个导出,导出完之后再去目标端做一个个恢复,恢复完之后建立了某几个用户的连接之后再循环操作.再加上每次传出数据量只有1TB,网络速度又不是很高,时间和工作量是一个很大的情况.基本上至少要两周的时间才能完成GoldenGate的搭建,这样再过一段时间稳定之后,业务方才会去允许你做正式的割接,这个工作量可能大家都深有体会.实际上, XTTS可以较轻松地解决这个问题.

首先,数据量虽然是20TB,但是调用dbms_file_transfer包,可以很轻松地把源端数据文件传输到目标端,传输的过程当中人为不需要干预的,周末的时候让它传输文件就好了,一个周末传完数据文件之后,周一来了之后对它进行从周五到周一这段时间增量数据做一个恢复就OK,只要保证在正式迁移的那一天,差的数据比较少的情况下就可以完成迁移的工作.

但XTTS也并非完美,它存在一个问题,就是在它做恢复时,就是刚才看到的那个步骤需要重启数据库,这个案例里面对的问题是目标端数据库也是一个生产库,这种情况下如何破解呢?很简单.

只需要创建一个pfile就可以了,这样在做数据文件恢复的过程中,就不会影响到的生产环境.再有一个问题就是考虑如何把整个最后增量的备份和恢复时间缩短到可控的时间(三个小时之内).

2.如何加速XTTS

来看一下这个XTTS整个的时间流程,准备阶段、初始化和N次增量备份恢复,这些都是迁移之前的,只需要考虑实际停业务的时间,这段时间做表空间只读,增量备份恢复,元数据导入,数据校验.知道表空间的只读和数据的校验,这两个时间是固定的,表空间只读速度很快,关键的时间点是增量的备份和恢复的时间,以及元数据的导入时间.

这是一个实际的案例,在做增量备份时,一天的数据,因为它每天的归档量是1T,每24个小时业务数据需要备份的时间是6个小时,这种情况下再加上网络速度,备份是需要6小时,传输这些增量备份时间也需要6小时,恢复需要4个小时,时间一加是6+6+4就是16个小时,整个备份恢复的时间是一个很长的时间,换句话说,完全不可能缩减到3小时以内.

其实可以利用Oracle的一些特性,比方说它有一个BCT的特性,可以开启BCT的特性,它做增量备份时,它只会扫描有变更的数据块,这样就可以加速备份的时间.开启的方式也很简单,执行如下命令就直接开启,需要注意的目录需要共享的目录.

再有一个问题就是关于传输的问题,有了增量备份,增量备份放在源端,放在源端之后,传输备份也是需要一定时间.刚刚看到实际环境里面,网络环境是35兆每秒,对于24小时数据,产生的备份文件也是1T,拿1T除以35兆每秒,时间也很长,如何优化传输的时间呢?

这里面有一个小技巧,就是在RMAN里面开启并行,表空间最多对应那么多分片,这样有了分片之后就可以开不同的进程传输数据文件.

为什么说这个有意义呢?

因为在生产环境里面,发现有一些表空间会比其他表空间大很多,就是它的容量很不均匀,有可能一个表空间的大小就可以超过其它表空间很多倍,虽然是一口气对十几个表空间做迁移的工作,但那一个表空间传输的时间是最长的.经过开启并行之后,把一个表空间分成8个片,分组进行传输,这样就可以加快传输的速度.

再有一个是要考虑元数据导入的时间,正常情况下,元数据导入的时间73%花在统计信息导入这一块.这块有一个小的技巧可加入统计信息导入,就是第一次导入这个元数据的时候,把统计信息排除,排除掉之后可以快速地第二次导入,第二次导入时会加入一个并行,这一块就可以很快速地导入这些文件.同时这一步可以把之前没有导入的这些过程,视图、包、触发器这些信息也可以导入进去.表空间里面只包含表、索引这些东西,但下面这些东西其实是存在系统表空间里的,系统表空间没有通过XTTS做迁移,所以这部分数据如果不导入的话是丢失的.

 

3.迁移前的准备

最后再来看看整个XTTS在前期准备当中还需要做哪一些工作.

首先是对象的统计,跟业务确认需要传输哪一些数据,哪一些表空间是迁移的对象.

第二个是源端字符集的检查.

第三个是检查表有没有空段.

第四个是失效对象检查.

第五是基于XMLSchema的HMLType对象检查.

第六个是目标端创建检查用DBlink.

第七个是检查源数据库的目标库具有重复名称的表空间.

最后是检查是否存在应用用户建在systmwem、sysaux、users上的情况.

然后表空间自包含的检查,所有表空间里面是否都是自包含的,对表新旧环境role,对比新旧环境profile,在新环境当中对比并创建用户,生成恢复用户默认表空间和临时表空间的脚本,创建非默认的temep表空间,最后一部分是软件包上传.

五、总结

简单总结一下,XTTS支持跨平台迁移,操作起来十分方便,使用XTTS之后就可以让DBA过上一个理想中的生活,轻松完成迁移工作.最后,它的停机时间较短.

建议大家在做迁移的时候减少批次,批次越多,增量备份的数据越少,数据越少,最后停机时间越短,但是这个过程如果做太多就越容易出错.谢谢大家!

   

Q&A  

Q1:完成增量备份的时候,假如说要恢复时,能不能用归档的方法?

A1:在XTTS里面是不可以的.

Q2:如果说加快传输方式的就要开并行,如果有20t,如果开并行有可能影响现有生产?

A2:没错,初始化传输数据文件的时候可以开并行,做增量备份的时候也可以开并行,这两个是不一样的.其实这个影响主要是网络传输那一块,看实际的网络带宽.

Q3:并行开完了以后传输速度是加快,生产不停机可能会影响现在生产,会出现等待事件.

A3:做并行的时候,肯定是先要测试网络和磁盘性能最大可以开到几个并行,可以开到最大并行减N的方式来保证生产,肯定要给生产留一点空间的.

Q4:EXP导出的时候,有可能会遇到ora-01555的问题.

A4:没错,但是导出原数据的过程出现的时间很小的,而且表空已经设置为read only,表空间的没有被使用,所以不会出现ora-01555.

Q5:之前说传输,从源端到目标端有一个重启,那块没听太懂.

A5:XTTS在执行 - l的时候,会导致目标和数据库自动重启到写nomount状态下恢复数据文件,这个过程中,可以创建另外一个实例来做恢复这个事情,只有真正的到元数据导入这个步骤的时候,再切换到实际的目标库就可以了.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1355660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux第5步_测试虚拟机网络连接

安装好VMwareTools后,就可以测试虚拟机网络连接了,目的是实现虚拟机上网。 1、打开“控制面板”,得到下图: 2、双击“网络和 Internet” ,得到下图: 3、双击“网络和共享中心” 4、点击“更改适配器设置”…

海康威视摄像头+服务器+录像机配置校园围墙安全侦测区域入侵侦测+越界侦测.docx

一、适用场景 1、校园内,防止课外时间翻越围墙到校外、从校外翻越围墙到校内; 2、通过服务器摄像头的侦测功能及时抓图保存,为不安全因素提供数字化依据; 3、网络录像机保存监控视频,服务器保存抓拍到的入侵与越界&am…

大数据时代的WEB运维高级架构师,Web系统运维工程师的实战成长之路

一、教程描述 本套WEB架构师教程,大小30.61G,共有183个文件。 二、教程目录 01-Web架构之单机时代(共7课时) 02-Web架构之集群时代(共9课时) 03-Web架构之DNS(共6课时) 04-Web…

2397. 被列覆盖的最多行数

给你一个下标从 0 开始、大小为 m x n 的二进制矩阵 matrix ;另给你一个整数 numSelect,表示你必须从 matrix 中选择的 不同 列的数量。 如果一行中所有的 1 都被你选中的列所覆盖,则认为这一行被 覆盖 了。 形式上,假设 s {c1…

肿瘤til细胞类型

TISCH (comp-genomics.org)

抖店申请流程是什么?

我是电商珠珠 想要入驻抖店的人很多,但是知道流程的新手却没有几个。 从开店资料到入驻流程,我来具体的跟大家讲一讲。 第一个,新手开店资质 1、营业执照 营业执照是入驻门槛之一,营业执照类型分为两类,一类为企业…

阿里云服务器Valheim端口2456、2457和2458放行设置

使用阿里云服务器搭建Valheim英灵神殿需要开启2456-2458端口,阿里云服务器默认只开放了22核3389端口,开通2456端口是在安全组中配置的,阿里云服务器网aliyunfuwuqi.com来详细说下阿里云服务器安全组开通端口流程: 阿里云服务器安…

UE5.1保存资源报错

UE5.1保存资源报错 错误: The asset /Game/XXX(XXX.uasset) failed to save. Cancel: Stop saving all assets and return to the editor. Retry: Attempt to save the asset again. Continue: Skip saving this asset only. 解决: 1. 可能是进程中有多开的项目&…

洛谷P1024[NOIP2001 提高组] 一元三次方程求解(cpp)(二分查找)

目录 1.题目 2.思路 3.AC 1.题目 # [NOIP2001 提高组] 一元三次方程求解 ## 题目描述 有形如: 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在 -…

stm32实战之su-03t语音模块固件的制作与烧录

目录 su-03t简介 管脚定义 ​​智能公元语音固件制作​​ 账号注册 创建产品 产品配置 唤醒词自定义 命令词自定义 发音人配置 其他配置 生成和下载语音固件 固件烧录 下载SDK固件烧录工具 SU-03T驱动分享 su-03t简介 SU-03T 是一款低成本、低功耗、小体积的离线…

巨杉数据库荣登2023胡润全球猎豹企业榜

胡润研究院与广州南沙联合发布《2023胡润全球猎豹企业榜》,这是胡润研究院首次发布“全球猎豹企业”。榜单列出了全球成立于2000年后,五年内最有可能达到独角兽级十亿美金估值的高成长性企业。巨杉数据库凭借在分布式文档型数据库领域的创新突破&#xf…

本地监控jar包可视化性能数据

一、机器申请 二、maven项目jar打包 三、机器性能监控 1.jdk版本配置 本地下载的机器虽自带jdk,但是jdk版本过低,需重新安装jdk 参考: Linux系统安装JDK1.8 详细流程_linux安装jdk1.8-CSDN博客 2.jvm参数修改 需修改jvm堆内存 栈内存信…

【Java期末】学生成绩管理系统

诚接计算机专业编程任务(C语言、C、Python、Java、HTML、JavaScript、Vue等)10/15R,如有需要请私信我,或者加我的企鹅号:1404293476 本文资源下载地址:https://download.csdn.net/download/weixin_47040861/88697244 —————…

环境监测LoRa网关解决方案应用空气质量监控

随着全球工业化和城镇化的快速发展,空气质量问题越来越受到关注。环境监测技术的发展,可以有效地帮助我们监测和改善空气质量。而LoRa网关则是一种可以帮助我们实现远距离、低功耗通信的无线通信技术,它的应用可以为空气质量监测提供解决方案…

Linux软连接的创建、删除、修改

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 软连接介绍 软链接(Soft Link)也称为符号链接(Symbolic Link).Linux里面的软链接…

Python+Selenium+ChromeDriver的配置和问题解决

安装前的准备 1.python的安装和配置 在Window下:在开始菜单中找到运行输入cmd或直接搜索cmd点击进入,输入python,如果出现下图中的>>>则证明Python安装成功。 检测Chrome的版本号安装Chromedriver 记录版本号: 87.0.42…

学习华为企业无线网络,有这篇文章就够了(一)

华为HCIA视频教程:超级实用,华为VRP系统文件详解 华为HCIA视频教程:不会传输层协议,HCIA都考不过 华为HCIA视频教程:网络工程师的基本功:网络地址转换NAT 华为HCIP视频教程:DHCP协议原理与配…

Django 6 后台与便签

1. 什么是后台管理 后台管理是网页管理员利用网页的后台程序管理和更新网站上网页的内容。各网站里网页内容更新就是通过网站管理员通过后台管理更新的。 2. 创建超级用户 1. python .\manage.py createsuperuser 2. 输入账号密码等信息 Username (leave blank to use syl…

SparkGraphX 基础解析(五)

1、Spark GraphX概述 1.1什么是Spark GraphX Spark GraphX是一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求。 那么什么是图,都计算些什么?众所周知社交…

面试算法88:爬楼梯的最少成本

题目 一个数组cost的所有数字都是正数,它的第i个数字表示在一个楼梯的第i级台阶往上爬的成本,在支付了成本cost[i]之后可以从第i级台阶往上爬1级或2级。假设台阶至少有2级,既可以从第0级台阶出发,也可以从第1级台阶出发&#xff…