今天完成了一个负载较高的中央数据库的分库操作, 并实现了oracle的滚动升级(10.2.0.1->10.2.0.4), 业务中断仅15分钟. 平台: RHEL AS 4 + Oracle 10.2.0.1

分库目的:

1) 迁出BUSINESS/BUSINESS_APP两业务系统用户数据, 减轻中央库的业务压力和负载, 调整数据库架构, 以应对后续新业务系统上线造成对中央库的冲击;

2) 新库升级Oracle10.2.0.1到10.2.0.4, 数据库本身修复了很多bug, 增强了数据库的稳定性.

3) 调整定时任务, 把原先的定时任务由crontab/job方式改为oracle scheduler.

大概操作步骤如下:

--1) 提前安装Oracle10.2.0.4, 并部署Streams复制(schema复制)

BEGIN
DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS (
      schema_names                   => 'BUSINESS,BUSINESS_APP',
      source_directory_object        => 'DIR_SOURCE',
      destination_directory_object   => 'DIR_DEST',
      source_database                => 'SOUR.NET',
      destination_database           => 'DEST.LK',
      perform_actions                => TRUE,
      script_name                    => NULL,
      script_directory_object        => NULL,
      capture_name                   => 'cap_erating',
      capture_queue_table            => 'tab_cap_que_erating',
      capture_queue_name             => 'cap_que_erating',
      capture_queue_user             => NULL,
      propagation_name               => 'prop_erating',
      apply_name                     => 'app_erating',
      apply_queue_table              => 'tab_app_que_erating',
      apply_queue_name               => 'app_que_erating',
      apply_queue_user               => NULL,
      dump_file_name                 => 'SOUR.dmp',
      log_file                       => 'SOUR.log',
      bi_directional                 => FALSE,
      include_ddl                    => TRUE,
      instantiation                  => DBMS_STREAMS_ADM.instantiation_schema
   );
END;
/

--2) 检查目标库Streams复制是否正常

SELECT   'capture' process_type,
         capture_name process_name,
         status,
         error_message
FROM   DBA_CAPTURE
UNION ALL
SELECT   'propagation' process_type,
         propagation_name process_name,
         status,
         error_message
FROM   dba_propagation
UNION ALL
SELECT   'apply' process_type,
         apply_name process_name,
         status,
         error_message
FROM   dba_apply;

SELECT   apply_name,
           local_transaction_id,
           source_commit_scn,
           error_creation_time,
           error_message
    FROM   dba_apply_error
ORDER BY   source_commit_scn DESC;

--3) 停止全部业务系统, 要求只能中断15分钟

--4) 取消源库定时任务(包括crontab/job)

--5) 核查源库是否还有连接

SELECT   username, status, COUNT ( * )
    FROM   v$session
   WHERE   username IN
                 ('BUSINESS', 'BUSINESS_APP')
GROUP BY   username, status;

--6) 核查目标库是否还有Streams复制事务

SELECT   streams_name,
           streams_type,
           cumulative_message_count,
           first_message_time,
           XIDUSN,
           XIDSLT,
           XIDSQN,
           last_message_time,
           total_message_count
    FROM   v$streams_transaction
ORDER BY   3 DESC;

--7) 从源库获得重建序列语句, Streams复制这点特别注意, 因为Streams本身不会去同步序列值

set pages 0
SELECT   'DROP SEQUENCE ' || sequence_owner || '.' || sequence_name || ';'
            stmt
FROM   dba_sequences
WHERE   sequence_owner IN
               ('BUSINESS', 'BUSINESS_APP')
UNION ALL
SELECT      'CREATE SEQUENCE '
         || sequence_owner
         || '.'
         || sequence_name
         || ' start with '
         || last_number
         || ' MAXVALUE '
         || max_value
         || ' MINVALUE '
         || min_value 
     || DECODE (cycle_flag, 'N', ' NOCYCLE ', ' CYCLE ')
     || DECODE (cache_size, 0, ' NOCACHE ', ' CACHE '||cache_size)

|| DECODE (ORDER_FLAG, 'N', ' NOORDER ', ' ORDER ')

|| ';' stmt


FROM   dba_sequences
WHERE   sequence_owner IN
               ('BUSINESS', 'BUSINESS_APP');

--8) 目标库重建序列

--9) 源库和目标库刷新同义词, 把同义词指向新的dblink, 同义词脚本提前准备好
--源库
@E:\用户迁移\sour_synonyms.sql
--目标库
@E:\用户迁移\dest_synonyms.sql

--10) 源库和目标库重新编译失效对象
@?/rdbms/admin/utlrp.sql
exec uts.get_invalid;

--11) 各业务系统更改数据库连接指向, 并启动各业务系统

--12) 测试业务系统启动情况
SELECT   username, status, COUNT ( * )
    FROM   v$session
   WHERE   username IN
                 ('BUSINESS', 'BUSINESS_APP')
GROUP BY   username, status;

--12) 增加定时任务, 为方便管理统一改为scheduler

--13) 删除流配置
exec dbms_streams_adm.remove_streams_configuration;

--14) 其它收尾工作, 如各开发人员查询用户的授权等等.

--End--

Oracle 一次生产分库,升级,迁移的更多相关文章

  1. 【转帖】从 Oracle 到 PostgreSQL ,某保险公司迁移实践 技术实践

    从 Oracle 到 PostgreSQL ,某保险公司迁移实践 http://www.itpub.net/2019/11/08/4108/ 信泰人寿保险股份有限公司 摘要:去O一直是金融保险行业永恒 ...

  2. 【Linux】将Oracle安装目录从根目录下迁移到逻辑卷

    [Linux]将Oracle安装目录从根目录下迁移到逻辑卷 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到 ...

  3. gitlab升级迁移(二)

    前面我们写了一篇gitlab升级迁移的文章(https://www.cnblogs.com/liangyou666/p/9434158.html),这次我们主要是讲另一种升级迁移方法和其中遇到的一些问 ...

  4. 将Oracle 12c的某用户数据迁移至OracleXE的用户

    前言:OracleXE全称为oracle database 11g express edition .Oracle Database 11g Express Edition是 Oracle 数据库的免 ...

  5. FastAdmin 生产环境升级注意

    FastAdmin 生产环境升级注意 列出 FastAdmin 实际生产中升级注意事项. 安全相关,看 FastAdmin 的资讯. 如果使用 Git 更新生产文件,注意更新后的权限. JS 修改后注 ...

  6. 案例分享 生产环境逐步迁移至k8s集群 - pod注册到consul

    #案例分享 生产环境逐步迁移至k8s集群 - pod注册到consul #项目背景 多套业务系统, 所有节点注册到consul集群,方便统一管理 使用consul的dns功能, 所有节点hostnam ...

  7. 生产环境下,oracle不同用户间的数据迁移。第一部分

    :任务名称:生产环境下schema ELON数据迁移至schema TIAN ######################################## 测试一:测试参数 数据泵数据导出:exp ...

  8. 生产环境下,oracle不同用户间的数据迁移。第二部分

    任务名称:生产环境下schema ELON数据迁移至schema TIAN######################################## 测试二:测试参数remap_tablespa ...

  9. 生产环境下,oracle不同用户间的数据迁移。第三部分

    任务名称:生产环境下schema ELON数据迁移至schema TIAN########################################前期准备:1:确认ELON用户下的对象状态se ...

随机推荐

  1. 跟我一起学WCF(6)——深入解析服务契约[下篇]

    一.引言 在上一篇博文中,我们分析了如何在WCF中实现操作重载,其主要实现要点是服务端通过ServiceContract的Name属性来为操作定义一个别名来使操作名不一样,而在客户端是通过重写客户端代 ...

  2. 架构模式对象与关系结构模式之:标识域(Identity Field)

    一:标识域(Identity Field) 标识域(Identity Field)可以理解为主键.使用领域模型和行数据入口的时候,就要使用标识域,因为这两个对象代表的是唯一存在的那个数据记录.事务脚本 ...

  3. [安卓] 5、SeekBar拖动条

    越来越发现这些控件用法大同小异了,这里注意几个函数:seekBar.setSecondaryProgress(0);设置初始进度为0,总共为0~99,对其监听用setOnSeekBarChangeLi ...

  4. Web API 简单示例

    一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...

  5. Apache CXF Webservice入门

    1.步骤一览 关于CXF的介绍请移步官网.百科,这里仅供初次使用者入门. 2.步骤详情 2.1.环境准备 apache-cxf-3.0.0.zip下载 jdk1.7.0_51 Eclipse4.3.0 ...

  6. 技巧~向URL地址添加参数

    只是个小技巧,感觉挺有用,拿出来分享一下 功能:在URL地址上添加参数,如果只有一个,会是?userid=1,需要是大于1个,会是&userid=1 实现: private string Ad ...

  7. jQuery/javascript实现简单网页计算器

    <html> <head> <meta charset="utf-8"> <title>jQuery实现</title> ...

  8. FreeCodeCamp 前端初级算法(个人向)

    freecodecamp 初级算法地址戳这里 Reverse a String 翻转字符串 function reverseString(str) { str=str.split("&quo ...

  9. 分页sql语句优化

    MySQL的limit工作原理就是先读取n条记录,然后抛弃前n条,读m条想要的,所以n越大,性能会越差. 一般的分页做法,测试耗时 10.961s   SELECT * FROM v_history_ ...

  10. mac工具收藏

    1.office字体兼容 http://mac.pcbeta.com/thread-32703-1-1.html