扒一扒Oracle数据库迁移中的各种坑


 
 

Oracle迁移是数据库运维中一项必不可少的工作,具体到项目层面上则有系统割接、数据库版本升级迁移、数据库主机更换、数据库拆库、数据库合库、测试系统搭建等等各类场景,然而正所谓万变不离其宗,迁移总的来说就是Dataguard、RMAN、底层复制等物理方式以及Datapump、GoldenGate等逻辑方式。本文目的在于从笔者实际参与的各种迁移类项目出发,简明扼要地从宏观的角度数一数迁移类项目中可能遇到的坑。

 

一无法绕过的架构类问题 
 

对于一个核心的系统来说,数据库很可能并不是孤立的,而是涉及应急、容灾、BCV、备份等各个方面,同时这个数据库又可能是别的数据库的数据源的源端或者目标端。当进行这种复杂系统的迁移时,务必考虑到这些方面。

 

笔者进行参与的某运营商数据库升级项目是通过GoldenGate方式实现换机器方式升级的,这个运营商的某核心库则相当复杂了,其涉及的外围因素如下:

  1. 通过赛门铁克底层同步库软件实现的容灾库;
  2. 通过赛门铁克底层同步库软件实现的BCV库;
  3. 通过GoldenGate软件实现的应急系统。

 

由于涉及的数据库较多,我们在处理这个项目时,采用了提前升级应用系统,同时升级主系统以及容灾系统,最后升级BCV系统的方式进行调配。

 

二不能掉以轻心的资源问题 
 

迁移工作应当尽可能降低对现网运维工作的影响,由于迁移工作而引发的现网系统出现问题是客户很难接受的事情,然而在实际的迁移工作中,因为疏忽大意或者对系统架构不了解而导致问题。

 

对于需要从源端数据库直接进行DATAPUMP等方式数据导出的迁移工作而言,需要注意导出工作对源端造成的CPU、内存、IO、文件系统等影响相信很多DBA都能想到,但在后续的传输以及入库中,则反而容易遇到不了解系统架构的问题了,例如下述两个例子:

  1. 网络未分离,过多ftp进程并发传输占用网络带宽,进而影响应用系统;
  2. 目标数据上没有应用,但其存储与现网是共用的,大并发进行数据导入导致影响现网。

 

对于目标端本身就是生产系统的情况,则操作更得小心翼翼了,除了常规的CPU、内存等指标外,还得注意归档、表空间等细节,遗漏其中一项都可能引发故障,这种迁移只能步步为营,慢慢搞了。

 

三难以省心的应用 
 

迁移工作的完成需要应用厂商和数据库的相互支撑,然而,从笔者亲身的项目经验来看,偶尔也会遇到个别不靠谱的开发人员,进而影响整个项目的推进,下面是笔者遇过的几个例子:

  1. 割接后跑过来抗议说新库和旧库数据不一致,核查原因发现旧库应用未停止干净,幸亏提前做了监控,否则问题说不清;
  2. 未正确修改应用配置,导致连错实例,影响进度;
  3. 前期未充分测试,在升级期间才发现,处理起来相当被动。

 

四五花八门的数据库问题 
 

与上面相比起来,数据库本身的问题就更复杂了,需要通过项目经理来积累了,下面是笔者总结的类型:

  1. SQL语句性能类,例如版本变更导致的语句性能退化;
  2. 对象及权限类问题,例如对象编译不通过,这种问题留到割接期间会显得相当被动;
  3. JOB调度问题,例如实例重启导致的job多余调度导致脏数据;
  4. 数据库管理问题,例如监控或者备份机制跟不上;
  5. 数据库配置问题,例如参数设置不合理;
  6. 特殊对象类型问题,例如不常用的QUEUE仅迁移而未START导致应用报错。

 

 
 

时间: 2024-09-19 18:56:19

扒一扒Oracle数据库迁移中的各种坑的相关文章

oracle数据库迁移问题

问题描述 oracle数据库迁移问题 现在要将oracle数据库整库进行迁移,所以先要将数据库导出, 现在导出用的exp username/password file=**.dmp owner=username;每次导到一半 ,就报错说磁盘空间不足,导出失败.我看了下,应该跟这些 表空间下的dbf文件有关,这种文件三四G大小,但实际数据占用率却很低 解决方案 exp username/password file=D:**.dmp owner=username; 加上盘符,那个盘剩余空间大,就在哪

oracle数据库表中在没有主键的情况下如何删除重复记录

问题描述 oracle数据库表中在没有主键的情况下如何删除重复记录 数据库表没有主键,没有唯一性约束,如何删除重复记录呢?求大神解答. 解决方案 http://www.cosdiv.com/page/M0/S505/505957.htmlhttp://www.jb51.net/article/35593.htmhttp://www.newhua.com/2012/0106/141377.shtml 上面几篇文章你可以点击进去看看. 如果回答对你有帮助请采纳 解决方案二: delete from

Oracle数据库迁移方案_oracle

1 在数据迁移时,用户首先有权限修改数据库,并且进行表空间创建.删除等权利 例如: select * from dba_tab_privs where grantee='SCOT'; ---查看SCOTT权限(sys用户登录) 显示结果为: select * from dba_role_privs where grantee='SCOT'; --查看SCOTT角色 显示结果为: (1) 如果用户被锁定通过以下语句来解锁表 alter user scott account unlock; --解锁

用java实现 把一个文件保存到oracle数据库表中

问题描述 如何把一个文件保存到oracle数据库表中 用java实现 解决方案 public class InsertBlobData {Connection con = null;/** * @param args * @throws Exception */public static void main(String[] args) throws Exception {// TODO Auto-generated method stubInsertBlobData data = new In

XTTS,又一个值得你重视的Oracle数据库迁移升级利器

   嘉宾简介    杨志洪 [DBA+社群]上海发起人 数据管理专家.Oracle ACE.OCM. SHOUG/ZJOUG核心成员.DAMA会员/CCF会员,译著<Oracle核心技术>. 在Oracle OOW.DTCC及2015Oracle数据库技术大会等全国性技术会议上发表主题分享,并主办了2014Oracle全国技术巡讲. 2015年创立DBA+社群迅速成为全中国最大的涵盖数据架构师.DBA及中间件的专业社群.   演讲实录    既然说是又一个数据库迁移.升级的利器,那自然而然的

确定Oracle数据库表中重复记录的方法

作为一个Oracle数据库开发者或者DBA,在实际工作中经常会遇到这样的问题:试图对库表中的某一列或几列创建唯一索引时,系统提示ORA-01452:不能创建唯一索引,发现重复记录. 下面我们以表code_ref为例来讨论这个问题及其解决办法. ERROR位于第1行: ORA-01452: 无法 CREATE UNIQUE INDEX:找到重复的关键字 Oracle系统提示不能对表code_ref创建一个唯一索引,因为系统发现表中存在重复的记录.我们必须首先找到表中的重复记录并删除该记录,才可以创

Oracle数据库安装中的问题及解决方法

花了两天的时间来安装Oracle数据库,中间遇到很多的问题,例如 ORA-12541,ORA-12154各种各样的问题,开始都是搜这种错误的解决方法,最后弄得越来越复杂,越来越难解决,最后才恍然大悟.原来是因为自己对于Oracle数据库连皮毛都不懂,根本就不知道数据库的运行流程,不能正确的认识装Oracle时所遇到的各种问题. 现把Oracle 12C的安装步骤写下: 1.首先是安装12C数据库,只要按照百度文库里面的文章进行安装就应该能成功. 百度文库12C安装参考 2.在安装完成后,对中间设

Oracle数据库迁移

之前做了一个项目,使用的是oracle数据库,数据库是建在本地测试服务器上的:现需要将整个数据库数据结构及数据放到正式服务器上,现将整个移动过程做一下记录,以做备用. 1.首先需要在正式数据库上创建和测试数据库相同名称的库名CSSP,创建之后可以到$ORACLE_HOME$\product\10.2.0\db_1\network\admin\tnsnames.ora这个文件下看到CSSP库的端口号. 2.打开浏览器进入http://localhost:1158/em 此处的端口可以到$ORACL

查找oracle数据库表中是否存在系统关键字的方法_oracle

今天在工程中遇到"ORA-01747: user.table.column, table.column 或列说明无效"的报错情况,查了一下是由于数据库列名起的不好引起的,名字用到了数据库的关键字. select * from v$reserved_words where keyword in( select COLUMN_NAME from all_tab_columns where table_name = '表名大写' and owner='用户名大写' ); ID可以忽略 以上是