• [综合] 在线迁移和离线迁移的对比
    在线迁移:是指在系统不停机的情况下,将服务器或虚拟机上的系统、服务程序等从自建机房(IDC)或云平台等源环境迁移同步至云上,方便实现企业上云、跨云平台迁移、跨账号/区域迁移或部署混合云等业务需求。@离线迁移:(1)离线实例迁移:将系统盘镜像(若需同时迁移实例已挂载的数据盘,则可将系统盘镜像和数据盘镜像)迁入至指定的云服务器。(离线数据迁移)将数据盘镜像迁入至指定的云硬盘。区别:离线迁移需要先将源端服务器的系统盘或数据盘制作成镜像,再将镜像迁移至您指定的云服务器或云硬盘。在线迁移无需制作镜像,直接在源端服务器运行迁移工具,即可将源端服务器迁移至指定的云服务器。在线迁移、离线迁移对比三方面:成本、效率、安全性。成本:大规模数据的迁移需要耗费大量传输资源,就是网络,成本较高,因此数据量太大有时不适合在线传输。效率:效率受网速限制,如通过网络转移1EB的数据大约需要26 年,而用十辆卡车可以将传输时间降至6个月内安全:利用云计算的黑客攻击愈发频繁,尤其像金融等传统客户是不放心数据在线迁移的。在线迁移工具:技术流:Oracle系统迁移(自带)Oracle Golden Gate/ Data Guard(DG),MS Always On……服务流:采用数据复制服务DRS做数据库迁移,此外若客户涉及异构数据库迁移,则也可用数据库应用迁移服务UGO做迁移离线迁移工具:DES数据快递服务、OBS对象存储
  • [综合] Oracle数据库迁移上云和迁移到数仓的工具和流程
    利用华为云云数据库RDS和分布式数据库中间件DDM完成Oracle应用迁移上云,提高访问效率,轻松应对高并发的实时交易场景,若采用工具流:Oracle Golden Gate/Data guard/Always On/数据库自带迁移工具等若采用公有云服务:DRS数据复制服务(偏同构数据库)1、Oracle数据库迁移上云的工具和流程迁移上云的工具5Oracle数据库可以使用OGG迁移上云流程Oracle GoldenGate 数据复制过程如下:利用抽取进程(Extract Process)在源端数据库中读取Online Redo Log或者Archive Log,然后进行解析,只提取其中数据的变化信息,比如DML操作——增、删、改操作将抽取的信息转换为GoldenGate自定义的中间格式存放在队列文件(trail file)中再利用传输进程将队列文件(trail file)通过TCP/IP传送到目标系统。目标端有一个进程叫Server Collector,这个进程接受了从源端传输过来的数据变化信息把信息缓存到GoldenGate 队列文件(trail file)当中,等待目标端的复制进程读取数据。GoldenGate 复制进程(replicat process)从队列文件(trail file)中读取数据变化信息,并创建对应的SQL语句,通过数据库的本地接口执行,提交到目标端数据库,提交成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。2、Oracle迁移至数据仓库(GaussDB)的工具和流程使用DRS的实时同步功能将本地Oracle数据库实时迁移至华为云GaussDB(for openGauss)。通过全量+增量同步,实现源数据库Oracle和目标数据库GaussDB(for openGauss)的数据长期同步。(1)迁移至数据仓库的工具:DRS(2)迁移至数据仓库的流程:创建VPC和安全组创建GaussDB(for openGauss)实例迁移前构造数据迁移数据库(创建DRS实例,将本地Oracle上的test_info数据库迁移到GaussDB(for openGauss)实例中test_database_info数据库中)迁移后进行数据校验PS:补充业务架构和迁移原理(防止考到)1、业务架构图2、迁移原理次实践使用全量+增量同步功能,原理如下:全量同步阶段,先进行结构迁移,例如表、主键、唯一键的迁移。结构迁移完成后,启动增量数据抽取,以确保全量数据同步期间的增量数据完整的抽取到DRS实例。启动全量迁移任务。全量迁移完成后自动进入增量同步,从全量迁移开始抽取的位点开始回放。当增量回放全部完成后,启动比对任务进行一致性检查,支持实时比对。实时比对数据一致时,可以启动业务割接。
  • [教程] 使用CDM搬迁关系型数据库类作业报错Read timed out的排查流程
    关系型数据库类作业搬迁报错Read timed out的排查说明问题背景在进行关系型数据库的搬迁时,经常会出现Read timed out异常,该类问题一般是在设定的超时时间内没有完成对应抽取或写入数据的SQL。下面以MySQL2DWS的单表迁移作业日志为示例,讲述如何简单并快速定位该类问题。定位流程找到导致作业失败的异常日志在作业日志中的位置,界面提示报错信息如下:作业日志异常位置关键信息如下:aa:表示出现异常的时间点为2022-05-18 09:57:18,049bb:表示出现异常的线程名称为LocalJobRunner Map Task #51 cc:表示导致异常产生的原因为The last packet successfully received from the server was 300,100 milliseconds ago.  The last packet sent successfully to the server was 300,100 milliseconds ago.dd:异常堆栈中出现该方法表示是在抽取线程中出现的异常:org.apache.sqoop.connector.jdbc.GenericJdbcExtractor.extractee:表示导致该异常的根因是Read timed out由以上关键信息,即可分析出现异常的原因是cdm在抽取数据过程中出现了超时,超时时间是300100ms(5min)左右,cdm作为客户端抽取源端数据,由于源端数据超过5min没有返回(也可以说是某个数据包),导致超时异常产生;进一步确认是那个动作执行出现了超时,按照抽取线程名LocalJobRunner Map Task #51向上搜索作业日志,寻找上一次该线程的时间点,因为cdm对应该抽取线程名的laoder线程名为LocalJobRunner Map Task #51 #laoder,所以一般按照LocalJobRunner Map Task #51 [ 来搜索;由以上日志可以看出是cdm提交的查询语句(SELECT * FROM xxxx WHERE xxxx)在数据源端超过了5min(从2022-05-18 09:52:17到2022-05-18 09:57:18,049)问题根因对应的SQL执行时间超过了CDM设置的默认超时时间,读写数据的默认超时时间是5min,获取连接的默认超时时间是1min;解决措施配置对应连接的相关超时参数。   关于关系型数据库的该类超时问题,排查思路如下:先要确认是抽取源端超时还是写入目的端超时;再确认当前生效的超时时间;最后在连接管理中找到对应的连接,配置高级属性,对于MySQL、SqlServer、DWS等关系型数据库读写超时参数为socketTimeout,连接超时参数为connectTimeout,对于oracle数据库,读写超时参数为jdbc.ReadTimeout,连接超时参数为oracle.net.CONNECT_TIMEOUT,单位均为ms。   上面讲述了出现了超时的基本解决措施,另外还可以从如下几个方面考虑:数据大表,考虑用where条件拆分成多个子作业,where条件中的字段最好是主键或者索引字段;避免数据源在同一时间大批量执行业务,尽量错峰运行业务(数据源端业务压力大时,相关sql会执行缓慢);cdm 作业的抽取并发数和抽取并发字段设置合理,抽取并发字段一般建议设置成主键,其次是设置成数据分布均匀的带有索引的字段; 
  • [问题求助] 单表迁移作业报错Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
    【功能模块】HIVE2MySQL 单表迁移作业报错,日志提示“java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.ffffffffff]”【操作步骤&问题现象】【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【CDM】抽取HBASE表数据报错”HBASE_CONNECTOR_1104:Failed to open tablble.
    【功能模块】【操作步骤&问题现象】抽取HBASE表数据作业失败,作业日志报错”HBASE_CONNECTOR_1104:Failed to open table. Cause : callTimeout=6000…”【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【CDM】【单表迁移】DWS自动建表报错“column name “tid” conflicts with a system
    【功能模块】mysql2dws 单表迁移,自动建表【操作步骤&问题现象】作业运行失败【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [其他] CDM作业配置界面选择模式或表空间/表名选项,列表显示为空也没有任何报错提示
    作业配置界面选择模式或表空间/表名选项,列表显示为空也没有任何报错提示建议按照如下排查方式排查:检查对应连接的连通性是否正常;检查对应连接所使用的用户权限配置是否满足,权限参考https://support.huaweicloud.com/productdesc-cdm/cdm_01_0008.html ;对于关系型数据库类,可以尝试在对应连接的高级属性中,配置或去掉引用符号尝试;对于关系型数据库类,检查驱动版本是否是正确匹配,更换驱动尝试;
  • [迁移系列] CDM迁移阿里云ADB到华为云DWS
    1. 阿里云ADB导入数据到DWS前提配置点(1) CDM绑定的公网IP的带宽不能太低,建议为按需购买的300M/S;(2) 阿里云ADB端的一个查询的连接时长默认为30min,若导数时长长于此值,会报错(Query exceeded maximum time limit of 1800000.00ms)进行设置:SET adb_config QUERY_TIMEOUT=XXXX;(阿里云这个全局生效)(3) DWS目标端为列存表时,delta不要开启;DWS目标端最好提前建好表,是分区表的话注意分区范围1.1 创建阿里云连接1.2 创建DWS连接1.3 作业配置1.4 CDM配置管理
  • [沙箱纠错] 使用CDM将CSV文件迁移至RDS_步骤
    无法配置文件迁移作业。源端可以配置,目标端无法选择连接器
  • [沙箱纠错] 使用CDM将CSV文件迁移至RDS_步骤
    全文没有看到预置环境的密码,这个是有问题的!!!
  • [交流吐槽] 总结出这套数据库迁移经验,我花了20年……
    作者:白鳝   2022-06-09 10:23:06数据库迁移是DBA经常会面临的工作,这二十多年来,我们也做过很多数据库迁移的工作。早期的时候,作为一个DBA,考虑迁移方案的时候总是从数据库的角度去考虑。随着项目做多了,知识范围不断地扩大,加入了很多系统级的迁移方案,使迁移工作变得更加简单了。迁移工作做多了,也难免会遇到鬼,在这二十多年,上百个迁移项目中,也确实遇到过不少坑,有时候甚至面对命悬一线的绝境。​到了后来,面对迁移方案的选择,如果是十分重要的核心系统,一定要选择最为稳妥的方案,以备不测。昨天微信群里有人在问一个数据库想迁移存储,有没有什么好方案,从我脑子里冒出来的都是系统层面的迁移方案,而群里的DBA朋友往往都说的是数据库层面的迁移技术。实际上没有最好的技术和方案,只有最合适的。具体选择哪种数据库迁移方案,最终还是要看具体的系统环境以及迁移实施队伍的技术能力。一、存储复制存储复制是最近我比较喜欢的一种数据库跨存储迁移的方法,可以用于很多迁移需求。特别是一个环境中存在多种数据库/多个数据库的场景,用存储复制的方式一下子可以搞定所有的数据库,十分便捷。存储复制的主要实施工作都由存储厂商完成,对于DBA来说也是最为轻松的,如果出问题,都不需要DBA去甩锅,肯定是存储厂商的问题。DBA要做的就是打开数据库,用rman validate校验一下数据文件是否存在物理/逻辑坏块就可以了。十年前一个金融客户的核心数据库数据库从9i HA升级为10g RAC,存储从IBM 8000系列迁移到HDS高端存储,采用的就是这个方案。使用HDS自带的异构存储虚拟化能力,首先将数据从IBM 8000系列存储复制到HDS上,最后切换的那一晚上停掉生产数据库,作最后一次增量复制后,用10g RAC的环境挂在新的卷,然后UPGRADE数据库,整个数据库迁移升级工作一个多小时就完成了。很多DBA会把卷复制和存储复制看作一码事,对于DBA来说,存储和卷并无不同,反正看到的是一堆裸设备。实际上二者还是不同的,卷复制采用的是卷管理软件的数据同步功能,比如VERITAS的LVM,卷管理软件天生就是支持异构平台的,因此使用卷复制技术同步数据有更广泛的适用性,而存储复制技术需要存储本身的支持(不过现在大多数高端存储都支持异构存储的存储虚拟化,因此大多数情况下都能支持,如果实在你的环境中的存储不支持异构复制,也可以考虑租借一台支持你所需要复制的存储的虚拟化机头来做实施,费用在几千块钱到几万块钱不等,看你租借的设备和租借的时间)。大概十年前吧,一个运营商从HP小机上迁移一个数据库到IBM小机,存储也从HP存储更换为EMC存储,当时他们原来的系统使用了VCS,因此使用VERITAS的卷复制做的数据迁移。在IBM端CONVERT数据库的时候(因为HP-UX和AIX都是大端的,所以可以做DATABASE CONVERT,而不需要使用XTTS)遇到了ORACLE 10G的一个BUG, UNDO表空间CONVERT失败,数据库无法打开,当时也是惊出一身冷汗,最后通过强制OFFLINE相关UNDO SEGMENT,重新创建UNDO表空间切换等方式解决了这个问题,不过完成迁移的时候已经接近早上8点,超出了申请的停机窗口,差点影响了第二天营业厅开门。所以说,再简单的迁移方案,都不能保证不出意外。二、逻辑复制逻辑复制是一种停机窗口较为紧张时候常用的数据库迁移的方案。两千零几年的时候帮助一个运营商把计费/账务两大核心系统从Oracle 8i迁移到Oracle 10g的时候,为了缩短停机窗口,使用ogg进行逻辑复制。那时候的OGG也是比较垃圾的,功能、性能都存在一定的问题,BUG也比较多。切换当晚发现有几张表总是追不上,最后决定直接通过dblink CTAS重建的方式迁移了。最后还好,在规定的时间窗口内完成了数据库的迁移和数据校验工作。使用OGG做迁移,数据校验的工作量十分大,如果是十分核心的系统,对数据一致性和完整性要求较高,一定要留足时间做数据校验。逻辑导出导入一直是被认为最为安全的迁移方式,不过天底下没有绝对安全的迁移方案。大概6/7年前,一个银行把核心系统从HDS存储迁移到华为18K上的时候,想把数据库也顺便从10g升级到11g,因为核心应用也要做升级,因此申请了36小时的业务停机窗口,其中核心系统完全停止业务18小时,这18小时中,给了数据库迁移8个小时的时间。通过综合考虑,他们决定采用最为稳妥的数据库逻辑导出导入的方式。首先在老存储上导出数据,然后把整个卷挂载到新的服务器上,再做导入。按理说够安全了吧,没想到主机工程师挂载这块盘的时候没注意给挂载成只读的了。DBA也没检查就开始导入了,几个小时后报无法写入磁盘数据,impdp异常退出了。这时候8小时的时间窗口已经使用了5个多小时了,如果重新导入一次,时间上肯定是不够的。当时我正好在现场,通过检查发现是impdp输出日志的时候无法写盘导致了错误,而刚开始的时候写入日志的时候是写在缓冲里并没有刷盘,所以没有报错,等刷盘的时候就报错了。通过校验数据表和索引发现所有的索引都已经完成创建了。因此报错时可能已经完成了主要的数据导入过程。最后经过会商决定暂时不回退整个工作,继续进行后续工作。不过因为这个插曲,原本计划的对所有表和索引做一次重新统计(通过SPA分析后发现11g对统计数据的依赖性更强,因此建议最后做一次表分析)就没有进行了。核心系统启动顺利完成,主要功能测试也顺利完成,大家揪着的心才放了下来。不过前台很快传来更坏的消息,应用开发商在测试性能的时候,认为主要核心交易的延时都慢了几十毫秒,平均核心交易延时从升级前的80毫秒提高到120毫秒以上,因此拒绝新系统上线。大家折腾了这么长时间还要回退,这对IT部门的打击十分严重的。因此CIO希望我们能够尽快找到问题,解决问题。通过分析存储的性能,数据库的总体性能没有发现什么问题。时间已经接近8小时的窗口了,按道理现在必须做回退了。我当时和CIO说,能不能再给我20分钟我再分析一下,如果找不到原因再回退。当时CIO说,我给你40分钟,如果不行只能我去向行长请罪了。最后在差不多半小时后,我终于定位了引起一部分核心交易延时增加的主要原因是几张表的统计数据过旧,更新了统计数据后,核心交易延时恢复到90毫秒左右,低于开发商要求的不高于120毫秒的要求。从这个案例上看,最简单靠谱的迁移方案,也不是万全的。三、ASM磁盘组加盘/删盘ASM磁盘组上加入新存储的磁盘,然后逐步删除老存储的磁盘,利用ASM的REBALANCE功能实现存储迁移也是一种挺不错的方案,只是REBALANCE时间比较长(如果数据量较大,业务负载较大),需要DBA随时关注整个进程,如果系统负载较高,IO吞吐量较大,那么在此期间可能会引起一些IO方面的性能问题。严重时可能导致应用系统总体性能严重下降,而一旦这些问题发生,我们只能暂时降低REBALANCE的优先级,缓解问题,无法彻底解决问题。因此对于特别核心的系统使用这种方式还是要十分注意。我把这个方法教给一家银行后,他们就喜欢上了这种迁移方式,并用这种方式迁移了大量的系统,总体上来说还是比较平稳的。不过在核心交易系统上,他们还是没敢使用。数据库迁移的方法有很多,今天时间的关系我就不一一举例了。不过无论采用何种方式,都需要实施者不要掉以轻心,对每个环节都做最精心的准备。不过有一定可以提醒大家的是,跳出DBA的思维方式,可能会找到更好的方法。​
  • [新手课堂] 2022.6.7直播签到
    2022.6.7直播签到
  • [沙箱纠错] 通过CDM同步数据到MRS Hive 连接SFTP服务器不检测
  • [问题求助] 【CDM云数据迁移】http作业失败
    【功能模块】使用CDM,将第三方语料库文件(url:https://openslr.magicdatatech.com/resources/33/data_aishell.tgz,文件大小15G)迁移至OBS桶【操作步骤&问题现象】1、新建两个连接:http连接器(连接第三方语料库数据),obs连接2、新建作业并运行3、报错fail,提示无法连接至url。但该url可以手动在浏览器打开并下载【截图信息】【日志信息】(可选,上传日志内容或者附件)2022-04-21 17:22:00.248|INFO|cdm-job-submit-pool1|||o.a.s.d.job.JobSubmissionContext creating job request 2022-04-21 17:22:01.004|INFO|cdm-job-submit-pool1|||o.a.s.c.file.FileFromInitializer Keep dir structure is true. 2022-04-21 17:22:01.004|INFO|cdm-job-submit-pool1|||o.a.s.c.file.FileToInitializer running SFTP Connector TO initializer. 2022-04-21 17:22:33.318|ERROR|cdm-job-submit-pool1|||o.a.s.c.h.client.HttpConnectorClient failed to connect to us.openslr.org/46.101.158.64:443 2022-04-21 17:22:33.336|ERROR|cdm-job-submit-pool1|||o.a.s.d.job.JobSubmissionContext submit failed. org.apache.sqoop.common.SqoopException: HTTP_CONNETOR_1453:Can't connect url [https://us.openslr.org/resources/33/data_aishell.tgz]. at org.apache.sqoop.connector.http.client.HttpConnectorClient.checkURLConnection(HttpConnectorClient.java:184) at org.apache.sqoop.connector.http.client.HttpConnectorClient.checkInputDir(HttpConnectorClient.java:168) at org.apache.sqoop.connector.file.configuration.LinkConfiguration.getInputPaths(LinkConfiguration.java:296) at org.apache.sqoop.connector.file.TraveralFileLister.getFileBeanList(TraveralFileLister.java:72) at org.apache.sqoop.connector.file.TraveralFileLister.init(TraveralFileLister.java:98) at org.apache.sqoop.connector.file.FileUtils.getFromSchema(FileUtils.java:79) at org.apache.sqoop.connector.file.FileFromInitializer.getSchema(FileFromInitializer.java:63) at org.apache.sqoop.connector.file.FileFromInitializer.getSchema(FileFromInitializer.java:22) at org.apache.sqoop.driver.job.JobInitiator.getSchemaForConnector(JobInitiator.java:560) at org.apache.sqoop.driver.job.JobInitiator.createJobRequest(JobInitiator.java:346) at org.apache.sqoop.driver.job.JobSubmissionContext.submitInternal(JobSubmissionContext.java:179) at org.apache.sqoop.driver.job.JobSubmissionContext.submit(JobSubmissionContext.java:135) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) 2022-04-21 17:22:33.344|ERROR|cdm-job-submit-pool1|||o.a.s.d.job.JobSubmissionContext submit failed. org.apache.sqoop.common.SqoopException: HTTP_CONNETOR_1453:Can't connect url [https://us.openslr.org/resources/33/data_aishell.tgz]. at org.apache.sqoop.connector.http.client.HttpConnectorClient.checkURLConnection(HttpConnectorClient.java:184) at org.apache.sqoop.connector.http.client.HttpConnectorClient.checkInputDir(HttpConnectorClient.java:168) at org.apache.sqoop.connector.file.configuration.LinkConfiguration.getInputPaths(LinkConfiguration.java:296) at org.apache.sqoop.connector.file.TraveralFileLister.getFileBeanList(TraveralFileLister.java:72) at org.apache.sqoop.connector.file.TraveralFileLister.init(TraveralFileLister.java:98) at org.apache.sqoop.connector.file.FileUtils.getFromSchema(FileUtils.java:79) at org.apache.sqoop.connector.file.FileFromInitializer.getSchema(FileFromInitializer.java:63) at org.apache.sqoop.connector.file.FileFromInitializer.getSchema(FileFromInitializer.java:22) at org.apache.sqoop.driver.job.JobInitiator.getSchemaForConnector(JobInitiator.java:560) at org.apache.sqoop.driver.job.JobInitiator.createJobRequest(JobInitiator.java:346) at org.apache.sqoop.driver.job.JobSubmissionContext.submitInternal(JobSubmissionContext.java:179) at org.apache.sqoop.driver.job.JobSubmissionContext.submit(JobSubmissionContext.java:135) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
  • [沙箱纠错] MySQL本地数据库迁移_步骤
    DRS迁移任务已经结束 无法结束实验
总条数:74 到第
上滑加载中