Oracle逻辑迁移某业务用户及数据

1.确定基本信息

确定基本信息:

源数据库所在系统类型:________
源数据库地址:__.__.__.__
源数据库版本:________
数据库高可用/灾备:{单机|RHCS|RAC|DataGuard|其他}
迁移导出业务用户:________

目的数据库所在系统类型:________
目的数据库地址:__.__.__.__
目的数据库版本:________
数据库高可用/灾备:{单机|RHCS|RAC|DataGuard|其他}
迁移导入业务用户:________

按上面模板填好必要信息,示例如下:

源数据库所在系统类型:RHEL 6.4
源数据库地址:192.168.XX.XX
源数据库版本:9.2.0.8.0
数据库高可用/灾备:单机
迁移导出业务用户:jingyu

目的数据库所在系统类型:RHEL 6.4
目的数据库地址:192.168.XX.XX
目的数据库版本:11.2.0.4.0
数据库高可用/灾备:RAC
迁移导入业务用户:jingyu

2.源数据库导出

2.1 业务用户相关信息

--用户默认数据表空间,临时表空间
select * from dba_users where username='JINGYU';
--连接到业务用户
conn jingyu/jingyu
--用户角色权限
select * from user_role_privs;
--用户总的对象数量
select count(1) from user_objects;
--用户总的表数量
select count(1) from user_tables;

2.2 用户用到的表空间

--连接到业务用户
conn jingyu/jingyu
--用户用到的表空间
select tablespace_name from user_tables union
select tablespace_name from user_tab_partitions union
select tablespace_name from user_indexes union
select tablespace_name from user_ind_partitions;

2.3 查询对应表空间数据文件情况

--数据表空间对应数据文件信息
select FILE_ID, FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 "MB", MAXBYTES/1024/1024/1024 "GB", AUTOEXTENSIBLE, STATUS from dba_data_files where TABLESPACE_NAME in ('SYSTEM', 'USERS', 'DBS_D_JINGYU', 'DBS_I_JINGYU');
--数据表空间对应数据文件按表空间分组统计总大小
select TABLESPACE_NAME, sum(BYTES/1024/1024) "MB" from dba_data_files where TABLESPACE_NAME in ('SYSTEM', 'USERS', 'DBS_D_JINGYU', 'DBS_I_JINGYU') group by TABLESPACE_NAME;
--临时表空间对应临时文件信息
select FILE_ID, FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 "MB", MAXBYTES/1024/1024/1024 "GB", AUTOEXTENSIBLE, STATUS from dba_temp_files where TABLESPACE_NAME='TEMP_JINGYU';
--临时表空间对应临时文件统计总大小
select sum(BYTES/1024/1024) "MB" from dba_temp_files where TABLESPACE_NAME='TEMP_JINGYU';

2.4 选择合适的导出方案

--导出方案exp示例(10g之前版本使用)
nohup exp jingyu/jingyu OWNER=jingyu BUFFER=10240000 STATISTICS=none RESUMABLE=y FILE=jingyu_exp.dmp LOG=jingyu_exp.log &

--导出方案expdp示例(10g及以后版本建议使用数据泵expdp)
nohup expdp system directory=jy schemas=jingyu dumpfile=jingyu_all%U.dmp logfile=jingyu_all.log parallel=2 &

有关expdp详细内容可参考:

3.目的数据库导入

3.1 目的数据库当前相关信息

--确定目的数据库基本信息
select instance_name, status from v$instance;
select dbid, open_mode from v$database;
--确定ASM磁盘组剩余空间
select GROUP_NUMBER, NAME, TYPE, TOTAL_MB, FREE_MB, USABLE_FILE_MB from v$asm_diskgroup;
--如果是文件系统管理,直接df -g查看数据文件存放目录的空间
--确定已有表空间数据文件情况
select FILE_ID, FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 "MB", MAXBYTES/1024/1024/1024 "GB", AUTOEXTENSIBLE, STATUS from dba_data_files where TABLESPACE_NAME in ('SYSTEM', 'USERS', 'DBS_D_JINGYU', 'DBS_I_JINGYU');

3.2 导入前准备

--1. 创建新表空间
create tablespace DBS_D_JINGYU datafile '+DATA01';
create temporary tablespace TEMP_JINGYU tempfile '+DATA01';
--此步骤还需要确定是否需要创建其他表空间,确定是否需要建多个数据文件
--2. 创建用户
create user jingyu identified by jingyu TEMPORARY TABLESPACE TEMP_JINGYU default tablespace DBS_D_JINGYU;
--3. 赋予用户权限
grant resource, connect, dba to jingyu;

3.3 导入方案

--导入方案的选择由之前导出方案决定:exp/imp,expdp/impdp。
--导入方案imp示例
nohup imp jingyu/jingyu BUFFER=10240000 RESUMABLE=y FILE=jingyu_exp.dmp LOG=imp_jingyu_exp.log IGNORE=y FULL=y &

--导入方案impdp示例
nohup impdp system directory=jy schemas=jingyu table_exists_action=replace dumpfile=jingyu_all%U.dmp logfile=impdp_jingyu_all.log parallel=2 &

有关impdp详细内容可参考:

4.逻辑迁移注意事项

4.1 如果需要保证业务数据前后一致性

那么在导出开始前,需要停止源数据库业务,直到成功导入到目标数据库时,应用修改新的连接方式完毕,才可以再次启动业务;

4.2 如果之前表空间管理不规范

早期imp导入工具还没有显示指定重定向表空间的功能,建议整改后迁移;后来impdp才引入重定向表空间的功能,导入时直接使用REMAP_TABLESPACE参数。

对于更复杂的逻辑迁移场景可参考:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏cmazxiaoma的架构师之路

删库跑路不怕,用mysqldump和mysqlbinlog进行数据恢复

1.创建douyin数据库、tbl_douyin_author数据库表、插入测试数据。

13110
来自专栏idba

MySQL 最新的release notes

从MySQL发布正式版本8.0.11以来,MySQL 又相继发布8.0.12-8.0.15 四个版本.本文着重介绍8.0.13和8.0.14 版本中值得关注的改...

14720
来自专栏Android技术分享

Android ContentProvider实例详解

ContentProvider(内容提供者)是Android的四大组件之一,管理android以结构化方式存放的数据,以相对安全的方式封装数据(表)并且提供简易...

29420
来自专栏idba

show status和set gtid_mode 导致线程死锁案例

我们数据库组今年上半年的计划之一是将所有数据库实例打开GTID特性。在线上进行灰度开启GITD过程中遇到数据库hang。具体表现是执行如下命令时:

11120
来自专栏Linyb极客之路

Spring ShedLock指南

Spring为定时任务提供了一个易于实现的API。在没有部署应用程序的多个实例之前,它很有效。默认情况下,Spring无法处理多个实例上的调度程序同步,而是在每...

16230
来自专栏飞总聊IT

飞总聊IT的2019年

2019年转眼就过去两周了。两周前写完2018年总结的时候,我就问自己的2019年的公众号要做什么不要做些什么。两周以来伴随我对公众号的更新,这个问题也有了比较...

18750
来自专栏Linyb极客之路

面试官:你有过一线的MySQL实战经验,能给我详细聊聊吗?

本文来自一线的实战经验,主要针对DBA和后端开发人员,总是在灾难发生后,才想起容灾的重要性;总是在吃过亏后,才记得曾经有人提醒过。

12630
来自专栏机器学习算法与Python学习

两个月成为资深数据分析师:带你Python+SQL+Tableau等五大工具一次拿下

大数据现在有多热门?在公司里私下问一圈,发现10个同事中就有9个,正打算或者已经开始了自学数据分析。

38130
来自专栏idba

数据库的异地多活分析和方案

前文提到异地多活的几种型态和基于OceanBase实现方案。这里再总结一下基于其他分布式数据库(MySQL)实现异地多活时要考虑的点。本文不讨论为什么做异地多活...

90410
来自专栏PHPer 进击

MySQL - 扩展性 2 扩展策略:氪金氪脑任君选

如果将应用的所有数据简单地放在一台 MySQL 服务器实例上,就不用谈什么扩展性了。但是业务能稳定持续的增长,那么应用肯定会碰到性能瓶颈。

7820

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励