什么是数据库导入导出?
Oracle数据库的导入/导出,就是我们通常所说的Oracle数据的还原/备份。
-
数据库导入:把.dmp 格式文件从本地导入到数据库服务器中。
-
数据库导出:把数据库服务器中的数据,导出到本地生成.dmp格式文件。
Oracle数据导入导出方式与优缺点
- 传统方式:exp(导出)和imp(导入)。
- 数据泵方式:expdp(导出)和impdp(导入)。
- 第三方工具:略
优缺点描述
-
exp/imp
- 优点:简单易懂,从本地即可直接导入,不用在服务器中操作,降低难度,减少服务器上的操作也就保证了服务器上数据文件的安全性。
- 缺点:这种导入导出的速度相对较慢,合适数据库数据较少的时候。如果文件超过几个G,大众性能的电脑,至少需要4~5个小时左右。
-
expdp/impdp
- 优点:导入导出速度相对较快,几个G的数据文件一般在1~2小时左右。
- 缺点:代码相对不易理解,要想实现导入导出的操作,必须在服务器上创建逻辑目录(不是真正的目录)。我们都知道数据库服务器的重要性,所以在上面的操作必须慎重。
-
第三方工具
- 优点:封装了导入导出命令,无需每次都手动输入命令。方便快捷,提高效率。
- 缺点:长时间应用会对其产生依赖,降低对代码执行原理的理解。
特别强调
目标数据库:数据即将导入的数据库。
源数据库:数据导出的数据库。
- 确定操作者的账号权限。
- 目标数据库要与源数据库有着名称相同的表空间。
- 目标数据库每次在进行数据导入前,应做好数据备份,以防数据丢失。
- 确定目标数据库磁盘空间是否足够容纳新数据,是否需要扩充表空间。
- 目标数据导入前,弄清楚是数据覆盖,还是仅插入新数据或替换部分数据表。
- 弄清是导入导出到相同版本还是不同版本(oracle10g版本与oracle11g版本)。
- 导入导出时注意字符集是否相同,一般Oracle数据库的字符集只有一个,并且固定,一般不改变。
- 使用数据泵时,一定要现在服务器端建立可用的逻辑目录,并检查是否可用。
- 导出格式介绍
- Dmp格式:.dmp是二进制文件,可跨平台,还能包含权限,效率好。
- Sql格式:.sql格式的文件,可用文本编辑器查看,通用性比较好,效率不如第一种,适合小数据量导入导出。尤其注意的是表中不能有大字段 (blob,clob,long),如果有,会报错。
实操导入导出
注意
-
EXP和IMP是客户段工具程序,它们既可以在可以客户端使用,也可以在服务端使用.
-
EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用
传统方式
模板:exp(imp) 用户名\密码@地址:端口 file="导出文件的存放地址\文件名.dmp"
导出全部实例:exp system/[email protected]:1521/orcl file="G:\下载\temp.dmp" full=y
导出指定DATA_CL用户的表:exp system/[email protected]:1521/orcl file="G:\下载\temp.dmp" owner=(DATA_CL)
导入实例:imp system/[email protected]:1521/orcl file="G:\下载\temp.dmp" full=y
exp常用命令参数
- full :是否全库导出或导入。默认为no,只导出用户下的对象。
- buffer:数据缓冲区的大小,设置可以提高exp的速度。
- owner:导出指定用户的表。
- file:输出的文件。
- tables:导出指定表名的表。
- compress:是否压缩导出的文件。
- query:选定导出表子集的子句。
数据泵方式
步骤
-
远程登录数据库所在服务器(DBA权限用户)
sqlplus system
-
目录路径
-
创建目录路径
create directory data_path as 'G:\下载';
注意
- data_path为路径名称,可自定义。
- 路径是导出的dmp文件存放的路径必须存在。
- 上面命令只是指定了导出文件存放的路径,但是这个路径需要自己手动创建。
- Linux需要修改这个路径隶属用户组,修改权限。
-
查询用户创建目录
select * from dba_directories;
-
删除创建的目录
drop directory data_path;
注意:如果需要更换目录需要先删除在创建,不需要更换不用删除
-
-
创建用户并赋权限
#创建dbuser用户 create user dbuser identified by 1234; #赋予dbuser用户dba权限 grant dba to dbuser;
-
修改权限
-
为oracle用户授予访问数据目录的权限。
Grant read,write on directory data_path to dbuser;
注意:dbuser为Oracle用户名
-
为oracle用户授予导入导出操作授权。
grant exp_full_database,imp_full_database to dbuser;
-
-
退出
exit;
-
导出dmp文件
导出模板: expdp 用户名/密码@sid schemas=用户名 directory=目录名 dumpfile=导出数据库文件(可自定义) logfile=日志文件文件名(可自定义) 导出案例:expdp dbuser/1234@orcl schemas=dbuser dumpfile=expdp.dmp directory=data_path logfile=expdp.log
问题:ORA-39213:元数据处理不可用
解决方法:
登录数据库:sqlplus system 执行:execute dbms_metadata_util.load_stylesheets;
-
数据导入
把需要导入的dmp文件上传到主机的(G:\下载)目录下
导入模板:用户名/密码@sid REMAP_SCHEMA=源用户名:目标用户名 table_exists_action = replace directory=目录名 dumpfile=导出数据库文件(可自定义) logfile=日志文件文件名(可自定义) 导入案例:impdp dbuser/1234@orcl REMAP_SCHEMA = dbuser:dbuser table_exists_action = replace directory=data_path dumpfile=expdp.dmp logfile=expdp.log