oracle数据库导入导出(windows之间)

什么是表空间?

我们在导入数据库文件时,通常会创建表空间以及用户,其实不是必须的,只是为了方便查询使用而建立不同的空间来分别存储。那我们就简单来介绍一下表空间。
在这里插入图片描述
ORACLE数据库被划分成称作为表空间的逻辑区域——形成ORACLE数据库的逻辑结构。一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件。表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等。
大体分为四类:

  • 用户表空间
  • 临时表空间
  • 系统表空间
  • 回滚表空间

如何创建表空间以及删除表空间

其中datafile目录是你存储表空间的目录,我这里放在的是数据库安装目录下D:\app\adm\oradata,然后名字是SPACE.DBF;删除表空间是连同表空间下的物理文件一起删除。

--创建表空间
create tablespace SPACE
logging 
datafile 'D:\app\adm\oradata\SPACE.DBF' 
size 50m 
autoextend on 
next 50m maxsize 20480m 
extent management local;
--删除非空表空间,包含物理文件
drop tablespace SPACE including contents and datafiles cascade constraint;

查看表空间

--查看所有用户表空间
select username,default_tablespace from dba_users;
--查看当前用户表空间
select username,default_tablespace from user_users;  

创建用户

--创建用户
CREATE USER admin PROFILE DEFAULT IDENTIFIED BY admin123 DEFAULT TABLESPACE SPACE;
--用户授权(管理员,连接,资源)
grant dba,connect,resource  to admin;
--回收源表空间,imp导入指定表空间
revoke unlimited tablespace from admin ;
alter user admin quota 0 on 原表空间;
alter user admin quota unlimited on SPACE;

删除用户

以system用户登录,查找需要删除的用户

drop user admin cascade;

exp导出数据库文件

用户名为导出对象用户密码

//本机全库导出
exp 用户名/密码@orcl file=D:\temp.dmp full=y
//导出用户
exp 用户名/密码@orcl owner = 用户名 file=D:\temp.dmp
//远程全库导出(但必须遵循向下兼容原则)
exp 数据库用户名/密码@服务器ip:1521/实例(sid) file=D:\temp.dmp  full=y

C:\Users\adm>exp text/text@xx.xx.xx.:1521/orcl file=D:\temp.dmp

Export: Release 11.2.0.1.0 - Production on 星期三 11月 6 14:05:05 2019

Copyright © 1982, 2009, Oracle and/or its affiliates. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的用户…
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 HL_RISKCTRL 的外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出用户 HL_RISKCTRL 的对象类型定义
即将导出 text 的对象…
. 正在导出数据库链接
. 正在导出序号
. 正在导出簇定义
. 即将导出 HL_RISKCTRL 的表通过常规路径…
EXP-00008: 遇到 ORACLE 错误 904
ORA-00904: “POLTYP”: 标识符无效
EXP-00000: 导出终止失败
以上错误就是没有循序向下兼容原则导致

imp导入表空间

用户名为导入对象用户密码,打开dos窗口,输入以下命令

imp 用户名/密码@orcl file=C:\Users\adm\Desktop\temp.dmp full=y

1、orcl为Oracle的服务名,查询服务名:select global_name from global_name;
2、full=y为全库导入、导出,默认则为只导出该用户下的对象。file参数指定文件位置,owner=用户,指定导出的用户
3、若命令后添加 tables=(table1,table2…)为导出特定的表。
4、一个数据库实例可以有N个表空间(tablespace),一个表空间下可以有N张表(table), tablespaces=(tablespace1,tablespace2,…)为导出特定表空间。
5、owner(username1,username2);为用户名对象导出。

补充

Oracle的imp/exp组件的一个操作原则就是向下兼容。具体表现为:

  1. 低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,但高版本的exp/imp不能连接到低版本的数据库服务器。
  2. 高版本exp出的dmp文件,低版本无法imp(无法识别dmp文件);低版本exp出的dmp文件,高版本可以imp(向下兼容)。
  3. 从Oracle 低版本Export的数据可以Import到Oracle高版本中,但限于Oracle的相邻版本,如从Oracle 7 到 Oracle 8。对于两个不相邻版本间进行转换,如从Oracle 6 到 Oracle 8。

有必要讲一下提供另一种方法来导出,即IMPDP/EXPDP

  1. 在oracle9g以后引入数据泵命令IMPDP/EXPDP,oracle11g中exp命令是无法 导出数据库中的空表的。如果一定要用exp的话可以参考这篇文章exp方法导出空表解决
  2. Oracle11g通过exp导出的数据是无法通过imp导入到oracle10g中的,但是通过数据泵可以。
  3. IMPDP/EMPDP是服务器端是命令,无法在客户端使用。

这里简单介绍下如何用IMPDP/EXPDP从高版本导入到低版本。

expdp导出

登录

打开dos窗口,用管理员账户登录oracle,回车后让输入口令,不用输,再回车就登陆。
//orcl为oracle服务名
sql>sqlplus 用户名@orcl as sysdba

创建逻辑目录

创建目录。这个目录oracle是不会真实创建的,需要你自己手动去创建,用来给导出来的文件指定位置。没有特殊要求,建议使用默认的目录也可。
sql>create directory dpdata as 'D:\text\temp.dmp';
授权目录public指所有用户,也可单独某个用户名。
sql>grant write,read on directory dpdata to public;
通过下面查询命令,可以看到默认目录(即DATA_PUMP_DIR)
sql>select * from dba_directories;
directory=DATA_PUMP_DIR 这个是一个oracle下的默认文件目录,可以直接这样用或者按以上做法。然后在oracle的默认文件目录下(或者你自己创建的目录)去找到temp.dmp文件及日志文件;再复制到对应要导入的10g数据库的默认目录下。如果自己指定文件位置,目标数据库也要创建同样的文件位置(包括逻辑路径及手动创建的路径)。

//version--指定版本号  logfile--指定日志
EXPDP 源数据库用户/源数据库密码@orcl schemas=源数据库用户 directory=DATA_PUMP_DIR dumpfile=temp.dmp logfile=test.log version=10.2.0.3.0

注意:如果导出失败,仔细检查逻辑路径与你创建的路径是否一致,或者用户权限是否足够,可登录oracle在dos窗口中查看是否创建成功,路径是否正确
在这里插入图片描述

impdp导入

  • 创建表空间,及用户,授权用户,具体参考exp/imp
  • 登录dos窗口,登录目标数据库,创建源数据库同样的逻辑目录即手动路径,如果使用默认路径可不必创建。
  • 将从源数据库导出的dmp文件及日志放入创建的目录下或者默认目录。
  • 退出目标数据库,执行导入命令
//导入(版本号可不写)
IMPDP 目标数据库用户/目标数据库密码@orcl schemas=源数据库用户名 DIRECTORY=DATA_PUMP_DIR DUMPFILE=risk20190308_10g.dmp logfile=test.log version=10.2.0.3.0 table_exists_action=replace
//用户不同时需要指定,用户名相同时,REMAP_SCHEMA可省略表空间相同时,REMAP_TABLESPACE也可省略
IMPDP 目标数据库用户/目标数据库密码@orcl DIRECTORY=DATA_PUMP_DIR DUMPFILE=risk20190308_10g.dmp logfile=test.log REMAP_SCHEMA=源数据库导出用户名:目标数据库要导入的用户名 REMAP_TABLESPACE=源数据库表空间:目标数据库表空间
总结

注:schemas为源数据库用户名,这里目标数据库中创建的用户名和源数据库用户名相同,新建用户时最好和原来用户名保持一样,当然不一样也可以,就必须指定源数据库和目标数据库的用户名了。
–logfile日志存放路径
–dumpfile导入文件
–remap_schema 替换对象 旧:新
–remap_tablespace 替换表空间 旧:新
–table_exists_action 表存在参数说明
使用imp进行数据导入时,若表已经存在,要先drop掉表,再进行导入。
而使用impdp完成数据库导入时,若表已经存在,有四种的处理方式:

  1. skip:默认操作
  2. replace:先drop表,然后创建表,最后插入数据
  3. append:在原来数据的基础上增加数据
  4. truncate:先truncate,然后再插入数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值