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
next50m 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 0on原表空间;
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/: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 的对象…
. 正在导出数据库链接
. 正在导出序号
安装oracle10g. 正在导出簇定义
. 即将导出 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的话可以参
考这篇⽂章
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.l og 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,然后再插⼊数据
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论