通常选择XTTS做迁移的数据库都不会太小的,至少都是几T、几十T这样的规模,这种级别的数据量原有空间不够用,所以在迁移过程临时用作存放迁移数据库备份文件的空间也是需要提前考虑规划的问题。

最近就有客户有这样场景,数据库的数据量已经达到了60T+,也是优先选择XTTS的方案做U2L迁移测试。

至于这个中转空间,目前是在存储上划分了对应空间给到源端,目标端XD是使用ACFS挂载的集群文件系统。

测试阶段发现性能不理想,主要是源端备份到挂载的存储速度太慢基本要一周时间,算了下平均都达不到100MB/s,另外由于文件数量大,scp传输也花费了几十个小时,只有目标端应用还算可以。

这说明目标端一体机的性能还是不错的,那这种场景下,如何优化这个时间呢?

简单说,确认该加的并行要加,各种找瓶颈解决瓶颈,比如计算能力、带宽、存储IO能力等。

这些都没啥或者也没改进的情况,

可以先思考下面这个问题:

Q.一体机目标端ACFS挂载的目录能否直接通过NFS挂载到源端,优化其操作时间?

如果答案是可以,那么scp这个时间自然就完全不需要了,直接省去了这一步骤。

而且,因为源端备份本来就慢,所以NFS挂载到目录也完全能满足这个需求。

现在我告诉你,答案经测试就是可以的。

无操作无真相,我这里就在自己测试环境试下Linux的情况:

  • 1.ACFS挂载目录NFS挂载到其他机器
  • 2.测试rman备份到NFS挂载点成功
  • 3.测试xtts脚本备份到NFS挂载点成功
  • 4.总结

1.ACFS挂载目录NFS挂载到其他机器

首先,客户环境要求暂时无法使用图形界面,创建ACFS可参考:

在创建ACFS系统之后,挂载到/xtts目录,启用NFS服务:

[root@db01rac1 ~]#
service nfs status
service nfs start

vi /etc/exports

/xtts *(rw)

显示NFS相关信息的命令:

showmount -e

exportfs

[root@db01rac1 ~]# showmount -e
Export list for db01rac1:
/xtts *
[root@db01rac1 ~]#
[root@db01rac1 ~]#
[root@db01rac1 ~]# exportfs
/xtts <world>

创建完成之后,使用NFS挂载到源端环境,源端环境需要做如下操作:

创建挂载点目录/xtts

mkdir /xtts

配置/etc/fstab,新增内容:

192.168.1.11:/xtts     /xtts nfs rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,actimeo=0,vers=3,timeo=600

我这里是Linux系统,如果是其他Unix系统,其实是不太一样的,具体可参考:

  • Mount Options for Oracle files for RAC databases and Clusterware when used with NFS on NAS devices (Doc ID 359515.1)

具体参考下面表格,根据你的需求选择即可:

挂载并确认挂载点成功:

mount -a
df -h /xtts [root@bogon xtts]# mount -a
[root@bogon xtts]# df -h /xtts
Filesystem Size Used Avail Use% Mounted on
192.168.1.11:/xtts 5.0G 623M 4.4G 13% /xtts

2.测试rman备份到NFS挂载点成功

测试挂载的文件系统是否能否支持xtts脚本执行正常的备份?

[root@bogon xtts]#
[root@bogon xtts]# ls -ld /xtts
drwxr-xr-x. 4 54321 54321 32768 Jun 30 00:29 /xtts

备份users表空间测试:

RMAN> backup tablespace users format '/xtts/test%U.bak';

...
ORA-19504: failed to create file "/xtts/testvf2071lq_4079_1_1.bak"
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 13: Permission denied
...

意料之中的失败,就是授权问题,但这个授权是需要在NFS服务端去授权:

[oracle@db01rac1 xtts]$ chmod 777 /xtts

然后再次在NFS客户端执行备份,成功写入没问题:

RMAN> backup tablespace users format '/xtts/test%U.bak';

Starting backup at 01-JUL-23
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=247 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=369 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=488 device type=DISK
allocated channel: ORA_DISK_4
channel ORA_DISK_4: SID=609 device type=DISK
allocated channel: ORA_DISK_5
channel ORA_DISK_5: SID=731 device type=DISK
allocated channel: ORA_DISK_6
channel ORA_DISK_6: SID=852 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00007 name=/flash/oradata/DEMO/users01.dbf
channel ORA_DISK_1: starting piece 1 at 01-JUL-23
channel ORA_DISK_1: finished piece 1 at 01-JUL-23
piece handle=/xtts/testvg2071t2_4080_1_1.bak tag=TAG20230701T231337 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 01-JUL-23 Starting Control File and SPFILE Autobackup at 01-JUL-23
piece handle=/hdd/orabak/AUTO_c-3869296410-20230701-06.CTL comment=NONE
Finished Control File and SPFILE Autobackup at 01-JUL-23

3.测试xtts脚本备份到NFS挂载点成功

下面进一步测试xtts脚本调用备份是否可以,先改下配置文件:

[oracle@bogon xtt]$ grep -vE '^$|^#' xtt.properties
tablespaces=TEST
platformid=13
src_scratch_location=/u01/media/src_backups
dest_datafile_location=+DATADG
dest_scratch_location=/xtts
parallel=3
rollparallel=2
getfileparallel=4
srcconnstr=sys/oracle@jingyu
destconnstr=sys/oracle@jingyu
allowstandby=1

修改 src_scratch_location 为 /xtts,这样就省去了scp传输的过程。

[oracle@bogon xtt]$ grep -vE '^$|^#' xtt.properties
tablespaces=TEST
platformid=13
src_scratch_location=/xtts
dest_datafile_location=+DATADG
dest_scratch_location=/xtts
parallel=3
rollparallel=2
getfileparallel=4
srcconnstr=sys/oracle@jingyu
destconnstr=sys/oracle@jingyu
allowstandby=1

执行xtts脚本:

[oracle@bogon xtt]$
$ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3 --如果报错,再次执行,只需要加-L参数或手工清除错误日志
$ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3 -L

测试执行成功,跑了两次,全量增量都没问题:

[oracle@bogon xtt]$ ls -lrth /xtts/
total 103M
drwx------. 2 root root 64K Jun 1 14:31 lost+found
-rw-r-----. 1 oracle oinstall 2.3M Jul 1 23:13 testvg2071t2_4080_1_1.bak
-rw-r-----. 1 oracle oinstall 101M Jul 1 23:57 TEST_34.tf <----- 第一次全量生成文件
-rw-r-----. 1 oracle oinstall 56K Jul 1 23:58 vj2074hh_4083_1_1 <----- 第一次增量生成文件

此时目标端查看,就直接有这些文件了,权限到时恢复前改下就OK。

[oracle@db01rac1 xtts]$ ls -lrth
total 103M
drwx------ 2 root root 64K Jun 1 14:31 lost+found
-rw-r----- 1 10001 10001 2.3M Jul 1 23:13 testvg2071t2_4080_1_1.bak
-rw-r----- 1 10001 10001 101M Jul 1 23:57 TEST_34.tf
-rw-r----- 1 10001 10001 56K Jul 1 23:58 vj2074hh_4083_1_1

4.总结

XTTS用的中转空间可以使用目标端的ACFS挂载目录,再通过NFS挂载到源端,至少可以节省scp的传输时间。

另外目标端通常新硬件,通常性能要比之前源环境的更好一些,也能加快些速度。

XTTS系列之三:中转空间的选择和优化的更多相关文章

  1. CAN总线学习系列之三——CAN控制器的选择

    CAN总线学习系列之三——CAN控制器的选择 在进行CAN总线开发前,首先要选择好CAN总线控制器.下面就比较一些控制器的特点. 一些主要的CAN总线器件产品 制造商 产品型号 器件功能及特点 Int ...

  2. 高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框

    上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输 ...

  3. 完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三

       手把手叫你玩转网络编程系列之三    完毕port(Completion Port)具体解释                                                    ...

  4. SNF开发平台WinForm之三-开发-单表选择控件创建-SNF快速开发平台3.3-Spring.Net.Framework

    3.1运行效果: 3.2开发实现: 3.2.1 这个开发与第一个开发操作步骤是一致的,不同之处就是在生成完代码之后,留下如下圈红程序,其它删除. 第一个开发地址:开发-单表表格编辑管理页面 http: ...

  5. Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程

    原文:Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程 Red Gate系列之三 SQL S ...

  6. 单元测试系列之三:JUnit单元测试规范

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6762032.html Junit测试代 ...

  7. TCP/IP网络编程系列之三(初级)

    TCP/IP网络编程系列之三-地址族与数据序列 分配给套接字的IP地址和端口 IP是Internet Protocol (网络协议)的简写,是为首发网络数据而分配给计算机的值.端口号并非赋予计算机值, ...

  8. DataSnap 2009 系列之三 (生命周期篇)

    DataSnap 2009 系列之三 (生命周期篇) DataSnap 2009的服务器对象的生命周期依赖于DSServerClass组件的设置 当DSServer启动时从DSServerClass组 ...

  9. Sql Server来龙去脉系列之三 查询过程跟踪

    我们在读写数据库文件时,当文件被读.写或者出现错误时,这些过程活动都会触发一些运行时事件.从一个用户角度来看,有些时候会关注这些事件,特别是我们调试.审核.服务维护.例如,当数据库错误出现.列数据被更 ...

  10. .NET 4 并行(多核)编程系列之三 从Task的取消

    原文:.NET 4 并行(多核)编程系列之三 从Task的取消 .NET 4 并行(多核)编程系列之三 从Task的取消 前言:因为Task是.NET 4并行编程最为核心的一个类,也我们在是在并行编程 ...

随机推荐

  1. OpenTiny 跨端、跨框架组件库升级TypeScript,10万行代码重获新生

    摘要:一份精心准备的<JS项目改造TS指南>文档供大家参考,顺便介绍TS 基础知识和 TS 在 Vue 中的实践. 本文分享自华为云社区<历史性的时刻!OpenTiny 跨端.跨框架 ...

  2. 【谷粒商城】(二)SpringCloudAlibaba分布式组件

    微服务 分布式组件 注册中心:每一个微服务上线都应该注册到注册中心.这样做的好处在于方便微服务之间的相互调用,比如订单服务想要调用商品服务,就可以通过注册中心查看有哪几台主机的商品服务进行了注册,然后 ...

  3. C# 从0到实战 命名空间

    什么是命名空间 命名空间是C#为了解决类名冲突而产生的一种方案,通过特定的前缀来标识一个类,使得编程者可以在自己的命名空间中自由使用各种类名,这很类似于Java中的包. 一般新手学习C#都会使用一个 ...

  4. 线上诊断神器-arthas基本应用

    Arthas基本应用 一.Arthas作用 什么是Arthas呢? ​ Arthas 是一款阿里推出的线上监控诊断产品,通过全局视角实时查看应用 load.内存.gc.线程的状态信息,并能在不修改应用 ...

  5. 几种常见的Python数据结构

    摘要:本文主要为大家讲解在Python开发中常见的几种数据结构. 本文分享自华为云社区<Python的常见数据结构>,作者: timerring . 数据结构和序列 元组 元组是一个固定长 ...

  6. Feign踩坑源码分析--@FeignClient注入容器

    一. @EnableFeignClients 1.1.类介绍 从上面注释可以看出是扫描声明了@FeignClient接口的类,还引入了 FeignClientsRegistrar类,从字面意思可以看出 ...

  7. mysql-高级功能(触发器、存储过程、视图、事务)

    目录 触发器-created trigger 1.触发器分为六种情况 2.语法结构 3.创建触发器 4.查询/删除触发器 存储过程-created procedure 1.创建存储过程 2.使用存储过 ...

  8. 各种远程工具通过ssh连接服务器

    开头 最近遇到一个新的连接方式,不能使用日常的本地通过账号连接,要通过私钥和公钥的连接方式,然后连接到服务器之后才能连接到数据库.因为之前没试过这种连接方式,所以很多工具有不同的连接方式.所以现在就记 ...

  9. 2023-03-19:使用Go语言和FFmpeg库实现pcm编码为mp3。

    2023-03-19:使用Go语言和FFmpeg库实现pcm编码为mp3. 答案2023-03-19: 本文将介绍如何使用Go语言和FFmpeg库实现PCM音频文件编码为MP3格式.我们将使用moon ...

  10. 2022-10-08:以下go语言代码输出什么?A、0 0;B、0 4;C:4 0;D:4 4。 package main const s = “Go101.org“ // len(s) == 9

    2022-10-08:以下go语言代码输出什么?A.0 0:B.0 4:C:4 0:D:4 4. package main const s = "Go101.org" // len ...