测试环境的迁移式升级和数据整合

很多时候,大家工作中都会有一种被动的思维,那就是能不动就不动,从求稳的角度来看无可厚非,但是从风险的角度来说,还是有待商榷的。如果存在风险,还保持原样很可能就是一个不定时炸弹。
这不手头有一套环境,按照以前的标准是根本入不了我的法眼的,但是因为是测试环境,小问题比较多,存在容灾风险,但是这么多年一直这样,也就默然接受了。
这套环境硬件配置很低,基本上和我的笔记本配置差不多,可能还略差一些,在上面跑着3个数据库实例,其中一个是11g的,2个是10g的。两个10g的数据库实例数据量都不大,几十G而已。
看起来是有些别扭,而且这几个数据库实例都是运行在费归档模式下,对于备份目前是采用了逻辑备份的方式,备份了几个重要的schema数据,每天凌晨开始运行,然后上传到异机上去。
听起来也还是可行的,但是一旦发生硬件问题,恢复就是一个大麻烦。
这部凌晨就收到了报警,然后发现这台服务器不可用了。登录ILO之后,发现系统健康情况为Unknown,已经无法连通了。

然后发现备用电源已经停了,强制手工启动之后,算是勉强撑了4个多小时,然后中午又宕机了,下午三点又宕机一次。
当然这个期间,自己已经开始着实一些具体的工作了。
经过评估,发现这个问题还得先整合起来,然后逐步迁移实例。
类似下面的情况,首先在一台新的服务器上安装11gR2的软件,然后把11g的库做成dataguard的形式,然后switchover,这样11g的库就迁移出去了,然后对于10gR2的库来说,因为数据量不大,可以考虑直接逻辑导出导入即可。当然前提是这几个数据库中的用户表没有冲突。

搭建dataguard用了没多少时间,简单确认就可以直接切换了。测试环境所以流程上就会送一些,但是数据迁移的质量还是要保持,当然吐槽一下dataguard搭建过程中的错误。
搭建的过程中报错。
input datafile file number=00061 name=/U01/app/oracle/oradata/actvdb/slzj_actv_index01.dbf
output file name=/U01/app/oracle/oradata/actvdb/slzj_actv_index01.dbf tag=TAG20160303T133618
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 03/03/2016 13:30:18
RMAN-05501: aborting duplication of target database
RMAN-03015: error occurred in stored script Memory Script

trace日志的信息如下:
Errors in file /U01/app/oracle/diag/rdbms/sactvdb/actvdb/trace/actvdb_ora_18030.trc:
ORA-19505: failed to identify file "/U01/app/oracle/product/11.2.3/db_1/dbs/d:oracleoradatamytbs_tl.dbf"
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 1
Thu Mar 03 13:26:37 2016
Errors in file /U01/app/oracle/diag/rdbms/sactvdb/actvdb/trace/actvdb_ora_18032.trc:
这个问题有多奇葩,竟然在$ORACLE_HOME/dbs下有数据文件,而且竟然还是以d:字样开头的数据文件。
主库端马上做了修复,
alter tablespace TEST_ACTV_DATA offline;
!cp '/U01/app/oracle/product/11.2.3/db_1/dbs/d:oracleoradatamytbs_tl.dbf' '/U01/app/oracle/oradata/actvdb/d:oracleoradatamytbs_tl.dbf';
alter tablespace TEST_ACTV_DATA rename datafile '/U01/app/oracle/product/11.2.3/db_1/dbs/d:oracleoradatamytbs_tl.dbf' to '/U01/app/oracle/oradata/actvdb/d:oracleoradatamytbs_tl.dbf';
alter tablespace TEST_ACTV_DATA online;
然后继续同步,就会从上次的断点处继续,很快就做好了。
然后开始做switchover,当然速度也很快,都在计划之中。
DGMGRL> show configuration;
Configuration - actvdb_dg
  Protection Mode: MaxPerformance
  Databases:
    actvdb  - Primary database
    sactvdb - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
DGMGRL> switchover to sactvdb;
Performing switchover NOW, please wait...
New primary database "sactvdb" is opening...
Operation requires shutdown of instance "actvdb" on database "actvdb"
Shutting down instance "actvdb"...
ORA-01031: insufficient privileges
第一步完成,后面的就是做数据的整合了。逻辑备份不会同步下面的这些信息。
profile信息,用户的密码和基本基本权限信息,系统权限,角色,表空间定义信息等,这些都需要我们自己来完成。
当然这些也不是什么难事了。生成用户的基本定义信息。
select dbms_metadata.get_ddl('USER',u.username) from dba_users u WHERE USERNAME  in ('ACC',。。。。。);
select dbms_metadata.get_granted_ddl('SYSTEM_GRANT',u.username) from dba_users u WHERE USERNAME in USERNAME  in ('ACC',。。。。。);
select dbms_metadata.get_granted_ddl('ROLE_GRANT',u.username) from dba_users u WHERE USERNAME in USERNAME  in ('ACC',。。。。。);

生成表空间信息
select dbms_metadata.get_ddl('TABLESPACE', ts.tablespace_name)||';' from dba_tablespaces ts;  
逻辑备份导出
exp xxx/xxx owner=ACC1,ACC2,ACC3....   buffer=9102000 statistics=none log=acc_test1.log file=acc_test1.dmp
逻辑导入
imp xxx/xxx fromuser=ACC1,ACC2,ACC3.... touser=ACC1,ACC2,ACC3....   buffer=9102000 statistics=none log=acc_test1_imp.log file=acc_test1.dmp
前期准备较好,数据的迁移就会很流畅。
迁移完成之后,终于能够松一口气,也算是脱离那个定时炸弹了,后期修复了电源之后,这台服务器还可以勉强做个备库。得来全不费功夫。

时间: 2024-09-28 16:55:04

测试环境的迁移式升级和数据整合的相关文章

迁移式升级的测试(二)

在之前写的一篇博文中,自己是打算对一台数据库使用Data Guard+TTS的方式来完成数据迁移和升级的工作,整体的思路如下. 备库Failover之后,导出元数据,然后同一台服务器上的11g的数据库中导入元数据,这样就避免了传输文件的时间消耗.从而达到快速迁移升级的目的. 具体的操作步骤如下所示: 1.在备库端需要开启闪回 这个也是为了能够在迁移失败的情况下,能够迅速回退,马上重构主备库的环境. 2.在开启闪回数据库之后,记录一下SCN的信息,留作后面备用.    select current

一种迁移式升级的方案考虑

目前遇到了一个问题,目前的是一主两备的环境,但是主库,备库中的存储空间都不足.而且硬件环境相对要老旧一些.想扩容难,系统版本老旧想升级也难. 数据库是基于10gR2,有异地灾备.但是因为10gR2的dataguard没有灾备的感觉,其实感觉和一个主库没有什么明显的差别.而且一旦发生问题,切换以后,硬件的限制瓶颈还是解决不了,所以化被动为主动,可以提前预警,提前规划和考虑. 现在是一主两备,但是备库目前的情况不容乐观,所以需要扩容一下,升级操作系统版本,目前为6U5,重新规划磁盘分区,在新分区中采

迁移式升级的测试

之前写了一篇文章分析了目前存在的一个问题和改进思路. 当前的硬件环境是Solaris,Oracle 10gR2 单实例,数据量在800G左右.想迁移到另外一台服务器上.大体的需求如下:     1.借助这次维护的时机,能够把数据库升级至11g     2.升级的过程需要尽可能保留一个较短的时间窗口,计划在2个小时以内完成     3.有较好的解决方案去演练整个过程,多次总结,提高迁移的效率,保证质量     4.有完善的回退计划,能够支持回退场景下业务平滑过渡     5.目前对于跨平台没有明确

迁移式升级的测试(三)

还是继续昨天的任务,今天会把剩下的工作都做完,给个交代. 昨天完成了Data Guard切换,然后Failover备库,导出了元数据信息作为TTS的准备,亮点就在于导入的部分.无需挪动数据文件,这是补充数据字典信息即可. 这个工作的一个重点内容就是如何保证数据字典信息的完整性. 在目标环境11g中需要创建相应的用户,这一点还是很有技巧的.如果采用impdp的形式直接导入用户,这样不妥,因为我们有设置profile,有临时表空间,默认表空间的信息. 比如下面的用户创建语句:    CREATE U

迁移式升级的一点思考

目前有一个很实际的需求,因为硬件老化严重,需要能够借助一次维护时机把数据库迁移到一台较好配置的机器上,避免潜在的硬件故障导致的业务停顿,也算防患于未然吧. 本来这个事情不是很紧急,但是因为硬件故障导致的问题防不胜防,踩过几次坑,就会有些经验教训,在这种情况下维持现状就是一个潜在的炸弹. 当前的硬件环境是Solaris,Oracle 10gR2 单实例,数据量在800G左右.我大体想了下,主要的目标有以下几个.     1.借助这次维护的时机,能够把数据库升级至11g     2.升级的过程需要尽

基于docker搭建测试环境

layout: post title: 基于docker搭建测试环境 category: 技术 tags: Docker keywords: Docker shipyard jenkins 简介 当web项目开发完毕后,一般会在测试环境上运行一下,供开发部门调错和测试部门测试.对于具有一定业务规模的公司,几十个上百个web服务,每个服务分别占用一个tomcat目录,配置过程繁琐,且无法集中管理.此外,对于公司的新手来讲,需要一定的背景知识才可以上手. 本文主要讲述基于docker搭建测试环境,或

oracle数据泵不同工作方式性能比较(一)测试环境

根据Oracle的文档的描述,数据泵采用不同的方式导出导入,性能也会有明显的差别,这次正好有机会测试一下,迁移表空间.直接路径.外部表方式,以及数据库链方式导出.导入的性能差异. 这篇介绍一下测试环境. 源数据库和目标数据库的版本都是10.2.0.3,不存在版本差异,字符集都是ZHS16GBK,国家字符集都是AL16UTF16字符集,源数据库和目标数据库都是16k的BLOCK_SIZE,因此采用迁移表空间的方式不存在任何的问题: SQL> SELECT GLOBAL_NAME FROM GLOB

Oracle数据库升级或数据迁移方法研究_oracle

一.数据库升级的必要性 数据库升级是数据库管理员经常要面对的问题,如果你的应用要使用新版本数据库的新特性:如果数据库运行负载过重,而通过软硬件调整又不能有根本性的改善:如果要更换操作系统平台:如果要增强数据库的安全性:还有一个原因是随着新版本数据库的出现与成熟,oracle停止了对旧版本数据库的技术支持,升级到高版本,可以继续获得oracle的支持,还可以利用新版本数据库的新特新,可以改善系统的性能,健壮性,可扩张性和可用性,等等,面对这些问题,需要通过数据库升级才得以解决.不过,如果你的系统运

ASP.NET比拼PHP的测试环境

ASP.NET与PHP速度对比 PHPChina资讯:刚刚在9月编程语言排行榜上取得历史性突破的PHP在Web开发领域最到的对手可能就是基于微软.NET技术的ASP.NET.近日,微软的Joe Stagner在博客上发表了一系列文章比较了PHP和ASP.NET性能方面的文章,引起了来自双方程序员的大量回应.Joe表示,他会将这样的测试持续下去,并寻求更为合适的方式,以获得对实际项目来说尽可能有参考价值的结论. Joe在博客中称,一般来说,作性能测试的目的是要尝试证明一方比令一方要快.我受雇于微软