第五章 数据的导入导出

数据的导入和导出

一、备份:
oracle常见的备份方案有:
逻辑物理文件系统备份(IMP&EXP 命令进行备份);
物理文件备份(脱机及联机备份);
利用 RMAN(Recovery Manager)的增量[增量:数据的新增更新部分信息
全量
增全量:是总称];
ORACLE 数据库的逻辑备份分为四种模式:
1、表空间备份(tablespace)
2、表备份(table)
3、用户备份(user)
4、完全备份(full)。
Oracle 的逻辑备份是使用 IMP&EXP 命令进行数据导入导出的操作。
权限:
使用 EXP 命令导出 或者使用 IMP 命令导入 时,需要 Create Session 系统权限,但是如果要导出其他的表,必须拥有权限:exp_full_database

调用导入导出命令时,首先要估计所需的空间。同时EXP 命令导出的文件是二进制文件 (*.dmp),只能由对应的 IMP 命令进行读取恢复。

导入导出的用途是:
1、备份与恢复
2、Oracle平台更换:可以在相同版本之间进行备份与恢复,Oracle较低版本的export 数据文件可以 import 到高版本的 Oracle 数据库中,但是 Oracle 的版本只能是相邻的,或者是相同的版本,但是不能跨版本。

二、EXP导出:是二进制的文件(*.dmp)
EXP 命令可以在交互环境下导出数据库中的数据,也可以在非交互环境下执行命令。
交互环境下的命令执行,是一步一步执行的过程。

A.*exp直接在 dos或cmd 运行窗口下执行,不是用 SQLPlus 登录后执行
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
代码演示:exp 的交互环境
1.D:>exp scott/tiger@orcl 用户名/密码@服务器名
2.输入数组 取缓冲区大小:4096> 默认值 4096B[缓冲区越大,导出速度越快。]
3.导出文件:EXPDAT.DMP>scott.dmp 自定义文件名
4.(2)U(用户),或(3)T(表):(2)U>2 默认导出整个用户
5.导出权限(yes/no):yes>yes 默认导出访问权限
6.导出表数据(yes/no):yes>yes 默认导出数据库表中的数据
7.压缩区(yes/no):yes>no 默认导出时会把所有的数据压缩在一个数据块上
Oracle表中的数据可能来自不同的分区中的数据块,默认导出时会把所有的数据压缩在一个数据块上,IMP 导入时,如果不存在连续一个大数据块,则会导入失败。

B.也可以使用 Exp 命令时,设置各种参数,使准备就绪的 Exp 命令不需要与用户交互,按照参数的要求,Exp 命令会一次性执行导出工作。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
代码演示:exp 的非交互环境
D:>exp scott/tiger@orcl file=D:\scott.dmp tables=(emp,dept)

要指定参数,您可以使用关键字:
EXP KEYWORD=value 或 KEYWORD=(value1,value2,…,valueN)
参数名  说明 
userid  表示“用户名/密码”。 
buffer  数据缓冲区大小。以字节为单位,一般在 64000 以上。 
file  指定输出文件的路径和文件名。一般以.dmp 为后缀名,注意该文件包括完整路径,但是路径必须存在,导出命令不能自动创建路径。 
compress  是否压缩导出,默认 yes。 
grants  是否导出权限,默认 yes 
indexes  是否导出索引,默认 yes 
direct  是否直接导出,默认情况,数据先经过 oracle 的数据缓冲区,然后再导出数据。 
log  指定导出命令的日志所在的日志文件的位置。 记录导出的操作信息
rows  是否导出数据行,默认导出所有数据。 
constraints  是否导出表的约束条件,默认 yes 
parfile  可以把各种参数配置为一个文本键值形式的文件,该参数可以指定参数文件的位置。 
triggers  是否导出触发器,默认值是 yes。 
tables  表的名称列表,导出多个表可以使用逗号隔开。 
tablespaces  导出某一个表空间的数据。 
owner  导出某一用户的数据。 
full  导出数据库的所有数据。默认值是 no。 
query  把查询的结果导出。 

C.用PL/SQL Developer备份和还原表
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^登陆用户scott/tiger->Tools→Export Tables →Oracle Export→Export Import中导进product\11.2.0\dbhome_1\BIN\exp.exe运行程序→Output file中填写导出文件后所在位置 →Export (注:选中导出的表);

三、IMP导入:
IMP 程序导入 就是把 Exp 导出的文件重新导入到数据库的过程。
导入时也有一些重要的参数:
Fromuser:指出导出时dmp文件中记载的用户信息。
Touser:dmp文件要导入到什么目标用户中。
Commit:默认是N,在缓冲区满时是否需要commit,如果设为N,需要较大的回滚段。
Ignore: Oracle在恢复数据的过程中,当恢复某个表时,该表已经存在,就要根据ignore参数的设置来决定如何操作。
若 ignore=y,Oracle 不执行 create table 语句,直接将数据插入到表中,如果插入的记录违背了约束条件,比如主键约束,则出错的记录不会插入,但合法的记录会添加到表中。
若 ignore=n,Oracle 不执行 create table 语句,同时也不会将数据插入到表中,而是忽略该表的错误,继续恢复下一个表。

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
A.代码演示:Imp 导入

扫描二维码关注公众号,回复: 2604610 查看本文章

D:>imp system/root123@orcl file=D:\scott.dmp fromuser=scott touser=system commit=y

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
B.用PL/SQL Developer备份和还原表
速度比较慢,故 一般通过命令来执行
登陆用户scott/tiger->Tools→Import Tables →From User中填写导入文件的用户名→To User 中填写被导入文件的用户名 →Import Import中导进product\11.2.0\dbhome_1\BIN\imp.exe运行程序 →Output file中填写需要导入的文件
四种导入方式:
1、删掉表(Drop tables)
          勾选之后,自动默认选择创建表(Create tables),并且截断表(Truncate tables)和删除记录(Delete tables)变为灰色不可用;这个选项在恢复前首先删除表,然后创建表,再恢复表数据;
2、创建表(Create tables)
          在导入数据前,表还未创建时可勾选;
3、截断表(Truncate tables)
          在导入数据前首先清空表数据,然后再导入数据。此项和删除记录(Delete tables)互斥;
4、删除记录(Delete tables)
          和截断表的功能基本相同,单和截断表互斥,且速度较慢,一般不使用;

四、数据泵的导入导出:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
A.数据泵导入导出与传统导入导出的区别
   1、EXP和IMP是客户端工具程序,它们既可以在可以客户端使用,也可以在服务端使用。
    2、EXPDP和IMPDP是服务端cmd的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
    3、IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。
数据泵导出包括导出表,导出方案,导出表空间,导出数据库4种方式.
 
B.数据泵的原理及好处:
  随着Oracle10g版本的更新,引入了一个新的机制:Data Pump,数据泵。是IMPDP/EXPDP的简称。
  单从名称上看这种技术可描述为IMP/EXP的扩展,泵是将全部用户表占用数据库数据文件空间按照从大到小的排序展示出来,方便用户筛选出不需要进行备份的表。
数据泵的使用不如传统备份灵活,主要受限于以下几个因素:
    1、ORACLE版本限制:数据泵是在10G版本中第一次推出的,故要使用数据泵方式备份,导入导出端的数据库版本需要都升级至10G以后.
    2、备份兼容限制:EXPDP/IMPDP不能与既有的EXP/IMP备份文件互通,导入导出各成体系;
    3、服务器端限制:数据泵使用ORACLE DIRECTORY路径,它会将导出的文件放在本地服务器上,如不指定目录,则默认存放在$Oracle_home/db_name/dpdump路径下面。

查询有哪些directory
select * from dba_directories
删除
drop directory dump_dir

C.操作顺序:
-1-直接创建数据导出的目录名字
-2-登录系统管理员用户密码
-3-创建
create or replace directory dump_dir as ‘F:\xb’;
-4-授予用户对文件夹的读写权限
grant read,write on directory dump_dir to scott;
-5-切换至cmd运行窗口执行命令
expdp scott/tiger@orcl directory=dump_dir dumpfile=scottpd.dmp schemas=scott logfile=ncdatabak.log

导入
1、执行导入命令
impdp scott/tiger@orcl directory= expnc_dir dumpfile=ncdatabak.dmp
tables=dept,emp
2、导入用户
impdp scott/tiger@orcl directory= expnc_dir dumpfile=ncdatabak.dmp schemas=scott
3、改变表的所有者 owner
impdp system/manager directory= expnc_dir dumpfile= ncdatabak.dmp tables=scott.dept remap_schema=scott:system
4、直接更改导出文件中的内容的所属用户
impdp xiaomei/xiaomei directory= expnc_dir dumpfile=ncdatabak.dmp remap_schema=scott:xiaomei

五、SQL LOADER的应用:
SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中。
SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径。
SQL*LOADER的命令:在NT下,SQL*LOADER的命令为SQLLDR,在UNIX下一般为sqlldr/sqlload。
在命令行下执行 Oracle  的 sqlldr 命令,可以看到它的详细参数说明,要着重关注以下几个参数:
userid – Oracle 的 username/password[@servicename]
control – 控制文件,可能包含表的数据  
log – 记录导入时的日志文件,默认为 控制文件(去除扩展名).log
bad – 坏数据文件,默认为 控制文件(去除扩展名).bad 用来装没有加载成功的文件
data – 数据文件,一般在控制文件中指定。用参数控制文件中不指定数据文件更适于自动操作
errors – 允许的错误记录数,可以用他来控制一条记录都不能错
rows – 多少条记录提交一次,默认为64
skip – 跳过的行数,比如导出的数据文件前面几行是表头或其他描述信息

sqlldr 的使用,有两种使用方法:
1. 只使用一个控制文件,在这个控制文件中包含数据
2. 使用一个控制文件(作为模板) 和一个数据文件

建立一个控制文件 dept.ctl,内容如下:
options(skip=1,rows=128)
 – sqlldr 命令显示的选项可以写到这里边来,同时也可以写允许的错误数量,skip=1 用来跳过数据中的第一行  
load data infile “数据文件的绝对路径”
–指定外部数据文件,可以写多个 INFILE “another_data_file.csv” 指定多个数据文件
–这里还可以使用 badfile、discardfile 来指定坏数据和丢弃数据–的文件,
truncate   –操作类型,用 truncate table 来清除表中原有记录
into table 表名 – 要插入记录的表
fields terminated by ‘,’ – 默认数据中每行信息用 “,” 分隔
optionally enclosed by ‘”’ – 默认数据中每个字段用 双引号’”’ 框起,比如字段中有 “,” 分隔符时    
trailing nullcols –表的字段信息没有对应的值时允许为空
( virtual_column filler,   –这是一个虚拟字段,用来跳过由 PL/SQL Developer 生成的第一列序号  可以省略不写
deptno,   –字段可以指定类型,否则认为是 CHARACTER 类型, log 文件中有显示  
dname “trim(: dname )”,    
Loc “to_date()” )  

说明:在操作类型 truncate 位置可用以下中的一值:
1) insert     –为默认方式,在数据装载开始时要求表为空
2) append  –在表中基础上追加新记录
3) replace  –删除旧记录(默认用 delete from table 语句),替换成新装载的记录
4) truncate –删除旧记录(用 truncate table 语句),替换成新装载的记录
执行命令:
sqlldr scott/tiger@orcl control=c:\dept.ctl log=c:\dept.log bad=c:\dept.bad

猜你喜欢

转载自blog.csdn.net/weixin_42800008/article/details/81368110