Oracle数据迁移实用入门

在一个大型企业中做数据工作,难免要跟各种不同种类的数据库打交道。Oracle,凭借其优异的性能,曾经是很多大型企业标配商业数据库,自然也是我们要重点应对的一种数据库。

Oracle的数据导入导出是一项基本的技能,但是对于懂数据库却不熟悉Oracle的同学可能会有一定的障碍。正好在最近的一个项目中碰到了这样一个任务,于是研究了一下Oracle的数据导入导出,在这里跟大家分享一下。

(本文以下内容假设大家熟悉Mysql PostgreSQL等常见的其他数据库,但是不了解Oracle)

Oracle的一些基本内容

表空间TableSpace

Oracle被设计用于管理大量的数据,当一些数据库的数据量太大,以至于一块磁盘存不下的时候该怎么办呢?

Oracle设计了表空间来应对这个问题,一个数据库可以包含多个表空间,一个表空间可以对应多个数据文件,而一张数据库表可以属于某一个表空间。这样一来,我们可以在不同的磁盘上面创建表空间,从而可以方便的用多块磁盘来存放数据了。这几个概念可以图示如下:

当然,表空间的意义远不止于解决多磁盘的问题,表空间其实是Oracle中的非常开创性的设计,它还可以应用于解决下面这些问题:

  • 控制用户所能占用的空间配额;
  • 控制数据库所占用的磁盘空间;
  • 提高数据读写性能;
  • 提高数据安全性。

对于一个大型数据库的数据导入导出工作,首先要做的一件事就是根据数据量大小来合理的规划表空间。

用户(User)与模式(Schema)

Oracle中的用户概念与其他数据库一致,都是用来连接数据库进行操作的。而Schema也与其他数据库中的schema概念一样,是一个数据表及其他对象的集合,用于进行统一管理。

但是Oracle中有一些特别的地方。在Oracle中,我们无法直接创建一个schema。当我们创建user的时候,会创建一个与此user同名的schema。这一点与其他数据库很不一样,需要注意。

虽然如此,通过授权还是可以实现一个用户访问另一个用户的schema。

数据导入导出工具

参考官方的文档可知,如果是从oracle到oracle进行数据导入导出,我们可以使用Data Pump Export/Import工具,也可以使用Export and Import Utilities工具进行数据导入导出。

Data Pump工具对应的命令行工具是expdp/impdp,其优势是速度快,但是使用上略显复杂(请参考后续实操部分)。

Export and Import Utilities工具对应的命令行工具是exp/imp,速度比Data Pump慢,官方更推荐使用Data Pump工具,但是这组工具使用上却更为简单。

如果是将Oracle数据同步到其他数据库或者基于hadoop的数据湖,则可以考虑使用数据平台常用的数据迁移工具sqoop,或者编写spark程序做数据导入导出。

字符集

Oracle支持多种字符集,这样一来,在数据导入导出的时候就需要关注字符集的转换,否则将可能出现乱码问题。

好在Oracle数据库足够聪明,内置了完善的字符集支持,可以自动完成大部分的字符集转换工作,尽量做到用户无感知。

在Oracle对Oracle的数据导入导出的过程中,将涉及到四处字符集:

  • 源数据库字符集;
  • Export过程中用户会话字符集(通过NLS_LANG环境变量设定);
  • Import过程中用户会话字符集(通过NLS_LANG环境变量设定);
  • 目标数据库字符集。

这四处字符集分别对应到数据导入导出的各个步骤,在执行某一个特定步骤时,expdp/impdp或exp/imp工具都可以自动的进行字符集转换。但是由于字符集情况比较复杂,事实上这类自动转换也不能完全处理所有情况。

比如,从GBK的数据库导入UTF8的数据库,导出的文件中的建表语句为…,some_column VARCHAR(100),…时,导入

相关文章

文章浏览阅读601次。Oracle的数据导入导出是一项基本的技能,...
文章浏览阅读553次。开头还是介绍一下群,如果感兴趣polardb...
文章浏览阅读3.5k次,点赞3次,收藏7次。折腾了两个小时多才...
文章浏览阅读2.7k次。JSON 代表 JavaScript Object Notation...
文章浏览阅读2.9k次,点赞2次,收藏6次。navicat 连接postgr...
文章浏览阅读1.4k次。postgre进阶sql,包含分组排序、JSON解...