当前位置:首页 > 问答 > 正文

Oracle数据库导入导出那些命令和步骤大概是怎么回事儿,简单说说

(主要依据Oracle官方文档《Oracle Database Utilities》中的“Data Pump Export and Import”章节及Oracle基础管理知识)

Oracle数据库的导入导出,简单说就是把你数据库里的东西(比如表、数据、程序等)打包成一个文件,或者反过来,把这种文件解包再塞回到数据库里的过程,最常用的工具叫Data Pump,它比老式的EXP/IMP工具快得多,功能也强,下面我就用大白话讲讲Data Pump是怎么一回事。

核心思想:两个工具,两种模式

Data Pump本质上就两个主要命令:expdpimpdpexpdp 负责导出(打包),impdp 负责导入(解包),它们不是在数据库里面用SQL运行的,而是在操作系统的命令行里执行的。

干活的时候,主要有两种模式:

  1. 全库模式:就像给整个房子拍照存档,数据库里所有的东西,包括系统数据、用户数据、表结构等等,全都打包进去,这通常是DBA(数据库管理员)干的事,需要很大的权限,一般用于整个数据库的备份或迁移。
  2. 按用户模式:这是最常见的方式,好比只打包某个住户(用户)家里的所有家具和物品,你可以指定一个或多个用户,把这个用户拥有的所有表、数据、视图、存储过程等都导出来,恢复的时候,也是按用户整体恢复。
  3. 按表模式:更精细一点,只打包某几件特定的家具(表),你可以指名道姓地说要导出哪几张表,甚至可以只导出表的结构(空壳)或者连数据一起导。

导出(expdp)的简单步骤

假设你现在想把你自己的用户(比如叫 scott)的所有东西都导出来做个备份。

  1. 准备一个目录:Data Pump不能随便把文件写在哪,它需要一个在Oracle里“注册”过的目录,DBA需要先在数据库里创建一个逻辑目录,并把这个目录的实际操作系统路径关联起来,DBA执行:CREATE DIRECTORY dump_dir AS '/home/oracle/dumps'; 这样,Oracle就知道 dump_dir 这个逻辑名对应着服务器上的 /home/oracle/dumps 这个文件夹,DBA还得给你这个用户读写这个目录的权限:GRANT READ, WRITE ON DIRECTORY dump_dir TO scott;
  2. 执行导出命令:你连接到数据库所在的服务器,在命令行里输入: expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=scott_backup.dmp LOGFILE=expdp_scott.log SCHEMAS=scott 我来解释一下这几个参数:
    • scott/tiger:你的用户名和密码。
    • DIRECTORY=dump_dir:告诉工具,把导出的文件放在刚才创建的那个逻辑目录里。
    • DUMPFILE=scott_backup.dmp:指定导出的文件名,比如叫 scott_backup.dmp
    • LOGFILE=expdp_scott.log:让工具把操作过程的详细记录写到这个日志文件里,万一出错了可以查看。
    • SCHEMAS=scott:指定按用户模式导出,导出的就是 scott 这个用户下的所有对象。
  3. 等着完成:命令运行后,它会显示进度条和状态信息,完成后,在 /home/oracle/dumps 目录下你就会找到 scott_backup.dmp 文件(数据文件)和 expdp_scott.log 文件(日志),这个 .dmp 文件就是你的宝贝备份。

导入(impdp)的简单步骤

过了一段时间,你可能因为误操作删了数据,或者需要把数据搬到另一个数据库,这时候就要用导入。

假设你要把上面那个备份文件导入到同一个数据库(或者另一个数据库)的 scott 用户下。

  1. 确保文件和环境就位:要把那个 scott_backup.dmp 文件放到目标服务器上Oracle能访问的目录里,比如同样是 /home/oracle/dumps,目标数据库上也要有对应的逻辑目录(dump_dir)定义,而且执行导入的用户(可能就是 scott 自己,也可能是另一个有权限的用户)要有读写这个目录的权限。
  2. 处理目标用户:如果目标数据库里已经存在 scott 用户和他的表了,导入时会根据设置决定是覆盖还是跳过。scott 用户不存在,你需要先让DBA创建这个用户并授予基本权限。
  3. 执行导入命令:在命令行输入: impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=scott_backup.dmp LOGFILE=impdp_scott.log SCHEMAS=scott 这个命令的参数和导出很像:
    • 同样是指定用户密码、目录、备份文件名、日志文件。
    • SCHEMAS=scott 告诉工具,要把数据导入到 scott 这个用户下。
  4. 处理冲突和等待:导入过程中,工具会尝试创建表、插入数据等,如果遇到已经存在的对象,它会根据规则处理(比如跳过或替换),你可以在日志里看到详细过程,完成后,你的 scott 用户下的数据就应该恢复如初了。

一些实用的补充点

  • 只导结构或不导数据:可以用 CONTENT 参数。CONTENT=METADATA_ONLY 就只导表结构等定义,不导数据;CONTENT=DATA_ONLY 就只导数据。
  • 排除或包含特定对象:用 EXCLUDEINCLUDE 参数可以精细控制,比如你不想导某张超级大的日志表,可以用 EXCLUDE=TABLE:"='BIG_LOG_TABLE'" 把它排除掉。
  • 并行操作:如果数据量很大,可以用 PARALLEL 参数启动多个线程一起来干活,能快很多。PARALLEL=4
  • 估算大小:导出前可以用 ESTIMATE_ONLY=YES 参数,让工具先别真导,只是估算一下导出的文件大概会有多大。
  • 交互式命令:Data Pump一个很酷的功能是,导出或导入任务启动后,你可以按 Ctrl+C 把它切到后台运行,然后通过一个特殊的命令(expdp/impdp ... ATTACH)连回去,查看进度、暂停、继续甚至修改并行度,非常灵活。

总结一下

Oracle的Data Pump导入导出就像是一个功能强大的“数据库搬家工具”。expdp 负责打包,impdp 负责拆包安放,你通过指定不同的参数,可以控制是搬整个库、搬整户人家(用户)还是只搬几件家具(表),关键是准备好Oracle认识的目录(Directory),然后在操作系统命令行下执行相应的命令就行了,对于日常备份和迁移,按用户模式(SCHEMAS)是最常用、最省心的方式。

Oracle数据库导入导出那些命令和步骤大概是怎么回事儿,简单说说