迁移式升级的测试(三)

还是继续昨天的任务,今天会把剩下的工作都做完,给个交代。
昨天完成了Data Guard切换,然后Failover备库,导出了元数据信息作为TTS的准备,亮点就在于导入的部分。无需挪动数据文件,这是补充数据字典信息即可。
这个工作的一个重点内容就是如何保证数据字典信息的完整性。
在目标环境11g中需要创建相应的用户,这一点还是很有技巧的。如果采用impdp的形式直接导入用户,这样不妥,因为我们有设置profile,有临时表空间,默认表空间的信息。
比如下面的用户创建语句:
   CREATE USER "TEST" IDENTIFIED BY VALUES '5F712A8369686639'
      DEFAULT TABLESPACE "TEST_DATA"
      TEMPORARY TABLESPACE "TEMP"
      PROFILE "PF_TEST" ;
如果直接导入肯定会失败,因为默认表空间不存在,profile还没有创建。
建议的方式就是手工来完成,这样做的好处就是一次审核通过,正式环境直接运行即可。
如果手工创建,这就牵扯到另外一个问题,那就是对比两个库中的用户信息,源库中有100多个用户,目标库11g的环境有默认的数据库用户,需要排除。
可以使用如下的脚本来过滤。
10g环境运行得到一个列表
spool 10g_user.lst
set feedback off
set pages 0
select username from dba_users;
spool off

11g环境运行得到一个列表
spool 11g_user.lst
set feedback off
set pages 0
select username from dba_users;
spool off
然后对比即可。
 sort 10g_user.lst |awk '{print $1}'> 10g_users.lst
 sort 11g_user.lst |awk '{print $1}'> 11g_users.lst
 sdiff 10g_users.lst  11g_users.lst |less

不过还是实践中的对比和感悟,发现其实还有一个小窍门,那就是直接抽段,使用如下的语句即可快速得到一个列表。
select owner from dba_segments group by owner;
100多个用户的数据库环境,上面的语句会查得不到20个用户,逐一排除都绰绰有余。
这样用户列表的任务就搞定了。可以使用如下的语句得到用户的DDL语句,然后在这个基础上改动临时表空间,默认表空间信息。
select dbms_metadata.get_ddl('USER',u.username) ||';'from dba_users u WHERE USERNAME in ('OEM_MON','APP_TE_SDE','GHOSTOL','TE_GAMEUSER','JYCX','OG_SWORD','TEST','OG_GAMEUSER','PERFSTAT');
得到的语句类似下面的形式,我们简称为create_user.sql
   CREATE USER "TE_GAMEUSER" IDENTIFIED BY VALUES 'E62AFD5FC9ED1DD2'
      TEMPORARY TABLESPACE "TEMP"
      PROFILE "PF_TE_GAMEUSER"
这个时候还有几个小问题,profile的信息怎么解决,也是生成DDL,其实也可以换个方法,那就是impdp
先在11g的库中创建一个目录。
CREATE DIRECTORY EXT_DIR AS '/export/home/oracle/HF';
然后导入profile信息即可。
$ impdp \'sys/oracle as sysdba\' dumpfile=full_exclude_tab.dmp logfile=full_ddl.log directory=EXT_DIR include=PROFILE CONTENT=METADATA_ONLY
然后运行create_user.sql语句即可。
这样倒入数据字典的用户信息就准备好了。
我们停止10g的主库,把数据文件都释放出来。
创建一个parfile,类似下面的形式:
tablespaces=USERS,GHOSTOL_DATA,GHOSTOL_INDEX,TEST_DATA,TEST_INDEX,PERFSTAT,STAT_POINT,TEST_MV_DATA,TEST_MV_INDEX,TEST_AUDIT_DATA,JYCX_DATA,OEM_DATA,TEST_INDEX2,TEST_INDEX3,SWDONLINE_DATA,SWDONLINE_INDX,STORELOG_DATA,STORELOG_INDX,OEM_MON_TEST,USERCENTER_DATA
datafiles=/U01/app/oracle/oradata/TEST/stat_point_01.dbf
,/U01/app/oracle/oradata/TEST/TEST_mv_data_01.dbf
,/U01/app/oracle/oradata/TEST/users01.dbf
,/U01/app/oracle/oradata/TEST/ghostol_data01.dbf
,/U01/app/oracle/oradata/TEST/ghostol_index01.dbf
。。。
然后使用如下的方式导入即可。
imp \'sys/oracle as sysdba\' file=exp_tts_TEST.dmp transport_tablespace= y  log=imp_tts_TEST.log parfile=datafiles.par
当然也不是一帆风顺,有一个小问题需要注意。那就是默认表空间USERS已存在,我们需要删除已有的USERS表空间,重置默认表空间,比如我们创建一个表空间中转一下。
> create tablespace def_ts datafile '/U03/app/oracle/oradata/TEST/default_ts.dbf' size 10M;
> alter database default tablespace def_ts;
> drop tablespace users including contents and datafiles cascade constraint;
因为涉及的数据文件很多,如果有遗漏,不匹配,需要格外注意。
IMP-00017: following statement failed with ORACLE error 29347:
 "BEGIN   sys.dbms_plugts.beginImpTablespace('TS_AUDIT',10,'SYS',1,0,8192,1,2"
 "28967869732,1,2147483645,8,128,8,0,1,0,8,1434590011,1,33,68705469137,NULL,0"
 ",0,NULL,NULL); END;"
IMP-00003: ORACLE error 29347 encountered
ORA-29347: Tablespace name validation failed - failed to match tablespace 'TS_AUDIT'
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "SYS.DBMS_PLUGTS", line 1876
ORA-06512: at line 1
IMP-00000: Import terminated unsuccessfully
这个问题就是数据文件信息存在,但是导入的tablespaces参数却不完整,就会出现这类问题。
导入的过程很快,可以从日志进度看出。用不了几分钟。
完成之后,一个大工程总算完成了,还有补充的任务就是导入其它的DDL信息,这个可以impdp的形式全库导入即可。也就3分钟就完事了。
impdp \'sys/oracle as sysdba\' dumpfile=full_exclude_tab.dmp logfile=full_ddl_impdp.log directory=EXT_DIR full=Y  CONTENT=METADATA_ONLY
Job "SYS"."SYS_IMPORT_FULL_01" completed with 270 error(s) at Wed Sep 28 16:33:35 2016 elapsed 0 00:03:09
看起来整个过程还是非常平滑的,后续的就是问题跟踪和统计信息收集了,这些都可以按照计划来补充,可以在线完成。

然后惊讶的是11g的库迁移完之后,停掉11g的库,重新打开10g的库,竟然还可以打开,这是不是一种更加平滑的数据库升级,降级。
实践总结总是会让人有不一样的感触和所得,不要相信自己的记忆力,为了方便自己,受益更多的人,还是好记星不如烂笔头。技

时间: 2024-10-13 15:42:14

迁移式升级的测试(三)的相关文章

迁移式升级的测试(二)

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

迁移式升级的测试

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

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

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

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

很多时候,大家工作中都会有一种被动的思维,那就是能不动就不动,从求稳的角度来看无可厚非,但是从风险的角度来说,还是有待商榷的.如果存在风险,还保持原样很可能就是一个不定时炸弹. 这不手头有一套环境,按照以前的标准是根本入不了我的法眼的,但是因为是测试环境,小问题比较多,存在容灾风险,但是这么多年一直这样,也就默然接受了. 这套环境硬件配置很低,基本上和我的笔记本配置差不多,可能还略差一些,在上面跑着3个数据库实例,其中一个是11g的,2个是10g的.两个10g的数据库实例数据量都不大,几十G而已

迁移式升级的一点思考

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

网站可用性测试:三种可用性测试方法

文章描述:网站可用性测试:三种可用性测试方法. 本文介绍三种可用性测试方法,可能很多朋友已经知道,不过对于网站设计师来说可用性测试时十分重要的.所以再次整理出来供分享.  我们先说下为什么可用性测试如此重要. 首先可用性测试可以发现你网站的潜在问题,通过可用性测试获得的反馈数据,可以了解一个用户在你网站中做了什么,以及用户如何看待和理解你的网站.此外优秀的可用性性网站可以增强用户的互动性,用户也更愿意将网站分享给其他人.对于电子商务网站来说,可用性可以增加网站转化率.总之可用性可以增加你网站的附

测试三问——新手必看

测试三问--新手必看 在进入软件测试行业之初,很多人都会存在下面最原始的问题,我称之为"测试三问": 1.什么是软件测试? 2.为什么会有或会需要做软件测试? 3.软件测试的目的是什么? 答: 一.什么是软件测试? 软件测试是一个过程.是一个质量保证中的一个环节,是一个验证被测产品是否符合客户需求的过程.而且是一个有计划.有规律.有组织的活动. 二.为什么会有或需要进行软件测试? 先简单来描述一个逻辑: 第一.随着信息化的发展,我们在各行各业使用了越来越多的软件.一方面为我们提高工作效

大奶升级VS小三上位,2B创业的两种路径

  这个春节如往常一样,伴随春运和返乡大军,城里人又开始想起了农村,特别是上海女生逃离江西农村的帖子引发了各方热议,各大公众号也纷纷发出文章.这个春节和往常不一样的是,2B(所有创业者都有点Er B,但我们讨论的是To B)创业的讨论比往年更多了些.   企业级SaaS应用之所以火是因为理论上大家都希望持续从客户那里赚钱,哪怕是初始收入少点,美其名曰降低客户初始投入.   衡量企业级SaaS应用成功与否简单说来就这三张图,模式并没有多么高深.       对客户来说,传统软件模式尽管初始投入多,

从Unix到Linux的迁移部署:移植、升级和测试

从Unix迁移到Linux,在最初阶段,应该建立一个沙盘环境用于测试.也许您的整个团队都没有Linux方面的经验,有这样一个沙盘环境能帮上大忙(无需担心任何风险). 有关代码和编译的问题.你正在使用JAVA还是C?是否有第三方应用需要迁移?这些第三方软件能移植到Linux上吗? 假设您正在使用C语言.假设您将会在Linux上编译代码.如果使用GNU(gcc)编译器,因为这是工业标准,而且这是Linux自己的编译器.那么所有在其它平台上编译过的应用程序都需要重新编译. 对于编译,有两种方法供您使用