一、导入和导出
Oracle的备份是oracle操作中常见的工作,常见的备份方案包括有:
1、逻辑备份(IMP&EXP命令进行备份)
有如下四种模式:
(1)表空间备份(tablespace)
(2)表备份(table)
(3)用户备份(user)
(4)完全备份(full)
2、物理文件备份(脱机及联机备份
3、利用RMAN(Recovery Manager)的增量物理文件系统备份
oracle的逻辑备份是使用IMP&EXP命令进行数据导入导出操作。使用EXP命令导出或者使用IMP命令导入时,需要Create Session系统权限,但是如果要导出其他的表,必须拥有权限:EXP_FULL_DATABASE.
调用导入导出命令时,首先要估计所需的空间。EXP命令导出的文件时二进制文件(*.dmp)只能由对应的IMP命令进行读取恢复。导入导出的用途是:
·备份与恢复
·Oracle平台更换:可以在相同版本之间进行备份与恢复,Oracle较低版本的export数据文件可以import到高版本的Oracle数据库中,但是Oracle的版本只能是相邻的,不能跨版本。
·重组表
·在不同数据库用户间移动数据
·在不同数据库之间移动数据表空间
·将表的定义存入二进制的操作系统文件以防止用户操作失误造成数据丢失。
需要指出的是逻辑备份是不能对数据库进行完全恢复的,即数据的丢失时在所难免的。那么逻辑备份会丢失多少数据呢?从导出开始到导入为止,这段时间之内的数据将全部丢失,这对银行、证券交易所和电信等行业的数据库是绝对不能接受的。所以对于绝大多数真正的生产或商业数据库,逻辑备份永远是不能作为备份和恢复策略的基石,它们必须要有物理备份以保证全恢复,而逻辑备份只能作为辅助手段。
二、EXP导出数据
EXP命令可以在交互环境下导出数据库中的数据,也可以在非交互环境下执行命令。交互环境下的命令执行,是一步一步执行的过程。
1.交互式导出
图中一些代码的解析:(1)Exp是导出命令,该命令后面紧跟“用户名/密码@服务器网络连接”
(2)Exp程序导出时使用的缓冲区大小,缓冲区越大,导出速度越快。直接回车代表使用默认值4096B。
(3)Exp命令会把所有要导出的数据导出到一个Dmp文件中,该步骤是Exp询问导出的数据文件名称。
(4)Exp程序询问导出整个用户还是导出某个表。默认导出整个用户。
(5)Exp程序询问是否导出每张表的访问权限。默认导出访问权限。
(6)Exp程序询问是否导出表中的数据。默认导出数据库表中的数据。
(7)Oracle表中的数据可能来自不同的分区中的数据块,默认导出时会把所有的数据压缩在一个数据块上,IMP导入时,如果不存在连续一个大数据块,则会导入失败。
2.非交互式导出
也可以在使用Exp命令时,一次性设置好各种参数,是准备就绪的Exp命令不需要与用户交互,按照参数的要求,Exp命令会一次性执行导出工作。要指定参数,您可以使用关键字
EXP KEYWORD=value 或 KEYWORD=(value1,value2,...valueN)
例如:EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
参数名 说明
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 把查询的结果导出
三、导入数据
IMP程序导入就是把exp导出的文件重新导入到数据库的过程。导入时也有一些重要的参数。
>>>Fromuser:指出导出时dmp文件中记载的用户信息。
>>>Touser:dmp文件导入到什么目标用户中。
>>>Commit:默认是N,在缓冲区满时是否需要commit,如果设为N,需要较大的回滚段。
>>>Ignore:Oracle在恢复数据的过程中,当恢复某个表时,该表已经存在,就要根据ignore参数的设置来觉得如何操作。若ignore=y,Oracle不执行CREATE TABLE语句,直接将数据插入到表中,如果插入的记录违背了约束条件,比如主键约束,则出错的记录不会插入,但合法记录会添加到表中。如ignore=n,Oracle不执行CREATE TABLE语句,同时也不会将数据插入到表中,而是忽略该表的错误,继续回复下一个表。
D:\>imp system/manager file=employee.dmp fromuser=scott touser=employee commit=y
四、常见问题
·数据对象已经存在
一般情况,导入数据前应该彻底删除目标数据下的表,序列,函数/过程,触发器等。
数据库对象已经存在,按缺省的imp参数,则会导入失败。
如果用了参数ignore=y,会把exp文件内的数据内容导入。
如果表没有唯一关键字的约束条件,将引起记录重复。
·数据库对象有主外键约束
不符合主外键约束时,数据会导入失败。
解决办法:先导入主表,再导入依存表。
disable目标导入对象的主外键约束,导入数据后,再enable他们。
·权限不够
如果要把A用户的数据导入B用户下,A用户需要由imp_full_datebase权限。
·导入大表(大于80M)时,存储分配失败
默认的EXP时,compress=Y,也就是把所有的数据压缩在一个数据块上。
导入时,如果不存在连续一个大数据块,则会导入失败。
导出80M以上的大表时,记得compress=N,则不会引起这种错误。
·imp和exp使用的字符集不同
如果字符集不同,导入会失败,可以改变unix环境变量或者NT注册表里NLS_LANG相关信息。
·imp和exp版本上不能往上兼容
imp可以成功导入低版本exp生成的文件,不能导入高版本exp生成的文件根据情况我们使用。
五、导入和导出实例