海量数据迁移方案
Upcoming SlideShare
Loading in...5
×
 

海量数据迁移方案

on

  • 2,765 views

徐进挺(淘宝丁原)分享:海量数据迁移方案

徐进挺(淘宝丁原)分享:海量数据迁移方案

Statistics

Views

Total Views
2,765
Views on SlideShare
2,765
Embed Views
0

Actions

Likes
2
Downloads
76
Comments
2

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • f
    Are you sure you want to
    Your message goes here
    Processing…
  • dsaf
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

海量数据迁移方案 海量数据迁移方案 Presentation Transcript

  • 海量数据迁移方案 徐进挺 新浪围脖: tb 丁原 Mail:dingyuan@taobao.com 日期: 201104
    • 1. 数据迁移的场景,目标是什么
    • 2. 全量迁移常见方案
    • 3. 增量迁移常见方案
    • 4.oracle->mysql 简单案例
    大纲
    • 场景:
    • 表太“大”
    • 业务架构调整,数据需要重新分布
    场景是什么 enq: HW - contention enq: TX - row lock contention enq: TX - index contention 需求: 表需要从 1 个库迁移到另外的库中 迁移对应关系可能是 1->1, 1->N, N->1,N->M 源,目标端环境可能是: Oracle <-> oracle , Oracle <-> mysql , Oracle <-> nosql
    • 目标:
    • 确保数据的完整性。
    • 尽量减少对业务的影响,尽量控制停机时间。
    • 业务可接受的时间, 0 分钟, 1 分钟, 10 分钟, 1 小时, 1 天?
    • 数据量大小, 10G , 50G , 100G , 200G , 1T ?
    • 注:
    • 把迁移分成全量迁移,增量迁移两个步骤。
    目标是什么
    • 1. 数据迁移的场景,目标是什么
    • 2. 全量迁移常见方案
    • 3. 增量迁移常见方案
    • 4.oracle->mysql 简单案例
    大纲
    • 1.Exp/imp/expdp/impdp
    • 2.Insert into table select * from table@Dblink
    • 3.Select * from table into outfile/load data(mysql)
    • 4.Extent->rowid
    • 5.Mv refresh
    • 6.Sqluldr/load data ( http://www.anysql.net/software/sqluldr.zip )
    • 7.Rowid(pkid)/procedure
    • 8.Perl
    • 9.Tddl 数据层
    全量迁移
  • 使用过哪些方案 选择简单,高效,高可靠性的方案
    • 场景:
    • 2.Insert into table select * from table@Dblink
    • 4.Mv
    • 风险点:
    • 1.ora-01555 错误
    • 2. 迁移过程出错,回滚会非常缓慢
    全量迁移的风险点 全量迁移: 建议化整为零分片迁移
    • Rowid :
    • 8i 之前 rowid 结构:
    • 8i 之后 rowid 结构:
    • Segment :
    • 通过 extent 为粒度来迁移,来手动并行迁移?
    化整为零之 extent 方案 File# Block# Row# data_object_id# File# Block# Row# 1 Segment N extent N*N Block N*N*N rowid
    • 抽取每个分区:
    • insert into my_rowid(id,rowid_min,rowid_max,has_deal)
    • select rownum,
    • dbms_rowid.rowid_create(1,o.data_object_id,e.relative_fno,e.block_id,0),
    • dbms_rowid.rowid_create(1,o.data_object_id,e.relative_fno,e.block_id+e.blocks-1,10000),
    • 0
    • from dba_extents e,dba_objects o
    • where e.segment_name=upper('test_table') and e.owner='db1'
    • and o.object_name = upper('test_table') and o.owner='db1';
    化整为零之 extent 方案
    • 根据分区同步数据:
    • for c in (select id, rowid_min, rowid_max from my_rowid where has_deal = 0 and mod(id, p_number) = p_now)
    • loop
    • insert into test_table
    • select /*+ rowid(t) */* from test_table@dblink_db1 t
    • where rowid >= chartorowid(c.rowid_min) and rowid <= chartorowid(c.rowid_max);
    化整为零之 extent 方案
    • 1. 数据迁移的场景,目标是什么
    • 2. 全量迁移常见方案
    • 3. 增量迁移常见方案
    • 4.oracle->mysql 简单案例
    大纲
    • 1.created_date,modified_date 字段设计
    • 2. Mv refresh
    • 3. Trigger/procedure
    • 4.Dbsync 复制中心: redo log , binlog 解析
    • 5.Tddl 复制中心
    • 6.Perl
    增量迁移 备注: 每个表必须要有 创建时间和修改时间 两个字段 问题: 如果迁移过程中,需要加上业务处理逻辑,哪种方式更容易满足呢 ?
  • trigger/procedure
  • dbsync
  • Tddl 复制中心
    • 1. 数据迁移的场景,目标是什么
    • 2. 全量迁移常见方案
    • 3. 增量迁移常见方案
    • 4.oracle->mysql 简单案例
    大纲
    • 场景:
    • 1.Oracle 的某一张迁移到 mysql 对应的表中
    • 2.Oracle 的某一张表迁移到 mysql 对应的多张表( mysql 分表)
    • 常见思路:
    • 1.sqluldr/load data
    • 2.Perl
    • 3.Tddl 数据层复制
    Oracle-my(no)sql
    • 使用 sqluldr 从 oracle 导出数据 :
    • Sqluldr user=${userpwd} query=&quot;${v_dw_sql}&quot; quote='&quot;' text=mysql file=${exp_file}
    • load data 导入到 mysql 中 :
    • LOAD DATA INFILE &quot;${exp_file}&quot;
    • IGNORE
    • INTO TABLE ${v_lake_tab}
    • FIELDS TERMINATED BY ',' ENCLOSED BY '&quot;' LINES TERMINATED BY 'n'
    • ${v_lake_col};
    Sqluldr/load data
    • 1. 迁移的场景、目标决定方案了方案的选择
    • 2. 全量,增量迁移常用方案
    • 可选方案很多,灵活使用,选择最简单,高效,可靠性
    • 3. 海量数据下全量迁移更倾向于 extent 切分 + 手动并行,增量主要采用 gmt_modified 字段来判断,跨平台迁移主要通过 perl/tddl/sqluldr/dbsync 来处理
    小结
  •