共计 9027 个字符,预计需要花费 23 分钟才能阅读完成。
这篇文章主要介绍 Oracle 数据库导入导出逻辑备份方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
【EXP 常用参数】
USERID 即用户名 / 密码该参数就必须且为第一个;
FILE 指定数据输出文件路径;
LOG 指定日志输出文件路径;
TABLES 导出指定表数据;
FULL 完全导出整个文件 (N);
ROWS 导出数据行 (Y);
QUERY 用于导出表的子集的 select 子句;
【示例】
1、【全库模式】将数据库 orcl 完全导出, 用户名 scott 密码 scott 数据文件导出到 D:/orcl/scott.dmp,日志文件到出到 D:/orcl/scott.log
exp scott/scott@orcl file = D:/orcl/scott.dmp log =D:/orcl/scott.log full = y
2、【表模式】将数据库中的表 emp、dept 导出到 D:/orcl/scott_empdept.dmp
exp scott/scott@orcl file = D:/orcl/scott_empdept.dmptables = (emp,dept)
3、【用户模式】将 243 数据库中用户 ng_lxj1 和 ng_lxj2 的所有数据导出到 D:/orcltest/ ng_lxj_user.dmp
exp system/manager@243 file = D:/orcltest/ng_lxj_user.dmpowner = (ng_lxj1, ng_lxj2)
4、将数据库中的表 emp 中 SAL 字段大于 1000 的记录导出到 D:/orcl/scott_emp.dmp
exp scott/scott@orcl file = D:/orcl/sys_scott.dmptables = (emp) query = \”where sal 1000\”
5、将数据库中的表 emp 仅导出建表语句不导出数据行到 D:/orcl/scott_empddl.dmp
exp scott/scott@orcl file = D:/orcl/scott_empddl.dmptables = emp rows = n
【全部参数】
USERID 用户名 / 口令 FULL 导出整个文件 (N)
BUFFER 数据缓冲区大小 OWNER 所有者用户名列表
FILE 输出文件 TABLES 表名列表
COMPRESS 导入到一个区 (Y) RECORDLENGTH IO 记录的长度
GRANTS 导出权限 (Y) INCTYPE 增量导出类型
INDEXES 导出索引 (Y) RECORD 跟踪增量导出 (Y)
DIRECT 直接路径 (N) TRIGGERS 导出触发器 (Y)
LOG 屏幕输出的日志文件 STATISTICS 分析对象 (ESTIMATE)
ROWS 导出数据行 (Y) PARFILE 参数文件名
CONSISTENT 交叉表的一致性 (N) CONSTRAINTS 导出的约束条件 (Y)
OBJECT_CONSISTENT 只在对象导出期间设置为只读的事务处理 (N)
FEEDBACK 每 x 行显示进度 (0)
FILESIZE 每个转储文件的最大大小
FLASHBACK_SCN 用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME 用于获取最接近指定时间的 SCN 的时间
QUERY 用于导出表的子集的 select 子句
RESUMABLE 遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME 用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
TTS_FULL_CHECK 对 TTS 执行完整或部分相关性检查
TABLESPACES 要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE 调用 iAS 模式导出的模板名
【IMP 常用参数】
USERID 即用户名 / 密码该参数就必须且为第一个;
FILE 指定数据输出文件路径;
LOG 指定日志输出文件路径;
IGNORE 忽略创建错误 (N),当要导入的表已存在时若该参数为 Y 则不报错仅导入数据,否则将报错;若导入的表不存在,则将自动新建该表,需要注意的是,该表所建的表空间一般是导出时表所在表空间,若导入的库中无此表空间则会报错;
FROMUSER 所有者用户名列表;
TOUSER 用户名列表;
TABLES 导出指定表数据;
FULL 完全导出整个文件 (N);
ROWS 导出数据行 (Y);
【示例】
1、【全库模式】将备份数据库文件中的数据导入数据库 orcl 中, 用户名 scott 密码 scott,数据文件路径 D:/orcl/scott.dmp,日志文件路径 D:/orcl/scott.log
imp scott/scott@orcl file = D:/orcl/scott.dmp log =D:/orcl/scott.log full = y ignore = y
2、【表模式】将备份数据库文件中的表 emp、dept 数据导入数据库 orcl 中, 用户名 scott 密码 scott,数据文件路径 D:/orcl/scott.dmp
imp scott/scott@orcl file = D:/orcl/scott.dmp log =D:/orcl/scott.log ignore = y tables = (emp,dept)
另外,如果导出时使用了表模式,导入时要导入所有表数据,则也可以使用 full = y,如:
imp scott/scott@orcl file = D:/orcl/scott_empdept.dmp ignore= y full = y
3、【用户模式】备份数据文件中存在 ng_lxj1、ng_lxj2 两用户数据,数据文件路径 D:/orcltest/ng_lxj_user.dmp
将 ng_lxj1 的数据导入到 ng_lxj 中:
imp system/manager@243 file = D:/orcltest/ng_lxj_user.dmpfromuser = ng_lxj1 touser = ng_lxj
将 ng_lxj1 和 ng_lxj2 的数据均导入到 ng_lxj 中:
imp system/manager@243 file = D:/orcltest/ng_lxj_user.dmpfromuser = (ng_lxj1,ng_lxj2) touser = (ng_lxj,ng_lxj)
注意 ng_lxj 要写两遍与之前的对应,若仅写一个,Oracle 会默认没得到对应的将导入到本用户下,如:
imp system/manager@243 file = D:/orcltest/ng_lxj_user.dmpfromuser = (ng_lxj1,ng_lxj2)
该命令将从 ng_lxj1 导入 ng_lxj1,ng_lxj2 导入 ng_lxj2
将 ng_lxj1 的数据分别导入 ng_lxj1 和 ng_lxj2 两个用户:
不能写成 imp system/manager@243 file = D:/orcltest/ng_lxj_user.dmpfromuser = (ng_lxj1,ng_lxj1) touser = (ng_lxj1,ng_lxj2)
否则会报错:
IMP-00034: 警告: 在导出文件中未找到 FromUser NG_LXJ1
猜测:Oracle 将数据文件抽取到缓存区,一旦使用过就会进行清除。
所以,一个用户导向两个用户需要分开写两条命令语句。
将 ng_lxj1 用户下的 t1 表的数据导入 ng_lxj2 用户中:
imp system/manager@243 file = D:/orcltest/ng_lxj_user.dmpfromuser = ng_lxj1 touser = ng_lxj2 tables = t1
4、从备份数据文件中,仅导入建表语句而不导入数据记录,文件路径 D:/orcl/scott.dmp
imp scott/scott@orcl file = D:/orcl/scott.dmp full = yignore = y rows = n
5、使用参数文件
imp system/manager@243 parfile=bible_tables.par
bible_tables.par 参数文件:
file = D:/orcltest/ng_lxj_user.dmp fromuser = ng_lxj1touser = ng_lxj
【全部参数】
USERID 用户名 / 口令 FULL 导入整个文件 (N)
BUFFER 数据缓冲区大小 FROMUSER 所有者用户名列表
FILE 输入文件 (EXPDAT.DMP) TOUSER 用户名列表
SHOW 只列出文件内容 (N) TABLES 表名列表
IGNORE 忽略创建错误 (N) RECORDLENGTH IO 记录的长度
GRANTS 导入权限 (Y) INCTYPE 增量导入类型
INDEXES 导入索引 (Y) COMMIT 提交数组插入 (N)
ROWS 导入数据行 (Y) PARFILE 参数文件名
LOG 屏幕输出的日志文件 CONSTRAINTS 导入限制 (Y)
DESTROY 覆盖表空间数据文件 (N)
INDEXFILE 将表 / 索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES 跳过不可用索引的维护 (N)
FEEDBACK 每 x 行显示进度 (0)
TOID_NOVALIDATE 跳过指定类型 ID 的验证
FILESIZE 每个转储文件的最大大小
STATISTICS 始终导入预计算的统计信息
RESUMABLE 在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME 用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
COMPILE 编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION 导入流的一般元数据 (Y)
STREAMS_INSTANTIATION 导入流实例化元数据 (N)
DATA_ONLY 仅导入数据 (N)
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户
【P.S.】
1、高版本的 Export 导出来的转储文件,低版本的 Import 读不了;低版本的 Export 导出来的转储文件,高版本的 Import 可以进行读取。
2、从 Oracle 低版本的 Export 数据可以 Import 到 Oracle 高版本中,但限于 Oracle 的相邻版本,两个不相邻版本间进行转换应借助中间版本。
3、Oracle 10g export 的文件且包含大字段通过 Oracle 11g 客户端 Import 到 Oracle10g 数据库时会报“IMP-00058”、“ORA-00942”表不存在的错误,且含几个大字段会报几次,但最终数据会成功导入且无错误。想不报错就换个 10g 客户端或用 11g 客户端导入 11g 服务器数据库。
4、exp/imp 可以做到在不同版本 Oracle、不同数据库上的迁移,在进行不同数据库上迁移时很可能会出现表空间不存在的报错。解决方法:首先,我们可以尝试先建表且指定新的表空间,然后使用 imp 且 ignore= y 仅导入数据;若仍报表空间不存在则最佳方法是改变 exp,将需要备份的表的表空间指定为 USERS(系统默认表空间);也可以在要导入的数据库上建一个极小的与导出数据库表空间同名的表空间。
5、在有主外键关键时,若主外键表均存在于备份文件,则 imp 会自动识别并在导入数据后建立约束,若仅导入外键表而不导入主键表则数据成功导入但会报错且外键约束丢失。
6、多表多条件导出,tables 指定多表,而 query 不能针对不同表做不同条件限制,可以写多条语句分别导出各表,也可以使用 expdp 来多表多条件导出。
7、导入大表时存储分配失败,默认的 EXP 时,compress = Y,也就是把所有的数据压缩在一个数据块上。导入时, 如果不存在连续一个大数据块,则会导入失败。导出 80M 以上的大表时,记得 compress= N,则不会引起这种错误。
8、导入导出时有三种可选模式(全库、用户、表),exp/imp 使用时必须选用其中一种模式且全文件模式时不能出现其他模式;
9、使用用户模式导入导出时,USERID 需要使用高权限用户如 system/manager;
10、借助 PL/SQL,在表中不存在大字段时,我们还可以借助 PL/SQL 的导出工具来导入导出;需要注意的是,从一个库中导出的文件可能默认的时间格式与另一个库不同而产生出错,且导出的纯 SQL insert 语句有时间不能直接用于 DB2,里面对于空、大字段等的定义是不同的。
11、从 Oracle 10g 开始提供了称为数据泵新的工具 expdp/impdp,它为 Oracle 数据提供高速并行及大数据的迁移。imp/exp 可以在客户端调用,但是 expdp/impdp 只能在服务端,因为在使用 expdp/impdp 以前需要在数据库中创建一个 Directory。
数据泵的特点与传统导出导入的区别
1. EXP 和 IMP 是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用;EXPDP 和 IMPDP 是服务端的工具程序,他们只能在 ORACLE 服务端使用,不能在客户端使用。
2.EXP 和 IMP 效率比较低.EXPDP 和 IMPDP 效率高
3. 数据泵功能强大并行、过滤、转换、压缩、加密、交互等等
4. 数据泵不支持 9i 以前版本,EXP/IMP 短期内还是比较适用
5. 数据泵导出包括导出表, 导出方案, 导出表空间, 导出数据库 4 种方式,而 imp/exp 是 3 种
6.IMP 只适用于 EXP 导出的文件,不适用于 EXPDP 导出文件;IMPDP 只适用于 EXPDP 导出的文件,而不适用于 EXP 导出文件
【expdp/impdp】
该命令仅能在服务端使用!也就是说必须在数据库导入或导出的服务器上使用该命令!
使用该命令需要逻辑目录与物理目录均存在!
如,导出本地 orcl 数据库中 soctt 用户的 emp,dept 两表步骤:
1) 创建逻辑目录
该命令不会在操作系统创建真正的目录,最好以 system 等管理员创建
登录 SQLPLUS:
sqlplus system/manager@orcl as sysdba
创建逻辑目录:
create directory dptest as‘d:\dptest’;
2) 给导出用户授权
grant read,write on directory dptest to scott;
3) 建立物理目录
在 D 盘新建目录 dptest
4) 导出 emp、dept 表
expdp scott/scott@orcl tables = emp,dept dumpfile =empdept_dp.dmp directory = dptest
【expdp 常用参数】
DIRECTORY 供转储文件和日志文件使用的目录对象,需要在导出前创建;
DUMPFILE 指定导出数据文件名,不填写目录路径则默认为 direcory 指定的目录,也可指定已创建的目录对象;
CONTENT 指定要导出的内容,可选参数有 all、data_only 和 metadata_only,默认为 all,当参数为 all 时将导出 DDL 及其数据,data_only 只导出数据,metadata_only 只导出 DDL;
EXCLUDE 排除特定的对象类型,例如 EXCLUDE=TABLE:EMP;
INCLUDE 包括特定的对象类型,例如 INCLUDE=TABLE_DATA;
JOB_NAME 要创建的导出任务的名称,若不指定则会默认会创建一个类似于 SYS_EXPORT_SCHEMA_01 的对象作为 JOB 名;
LOGFILE 指定日志文件名 (export.log);
NOLOGFILE 不写入日志文件 (N);
FULL 导出整个数据库 (N);
SCHEMAS 要导出的方案的列表 (登录方案);
TABLES 指定要导出的表的列表;
TABLESPACES 指定要导出的表空间的列表;
QUERY 用于导出表的子集的谓词子句;
【示例】
1、【全库模式】将本地数据库全库导出到已创建的目录对象 dptest 中
expdp system/manager@orcl dumpfile = orcl_dp.dmp directory= dptest full = y
2、【表模式】将本地数据库 scott 中的表 emp、dept 导出到已创建的目录对象 dptest 中
expdp scott/scott@orcl tables = emp,dept dumpfile =empdept_dp.dmp directory = dptest
3、【用户模式】将本地数据库 scott 用户数据导出到已创建的目录对象 dptest 中
expdp scott/scott@orcl schemas = scott dumpfile = scott_dp.dmpdirectory = dptest
4、【表空间模式】将本地数据库中 USERS 和 TEMP 表空间下数据导出到已创建的目录对象 dptest 中
expdp system/manager@orcl dumpfile = users_temp_dp.dmpdirectory = dptest tablespace = users,temp
5、按表导出且指定条件(可实现多表多条件),将表 emp 中 SAL 字段大于 1000 的记录导出
expdp scott/scott@orcl directory= dptest dumpfile=expdp.dmp tables=empquery= where sal 1000
6、并行进程 parallel
expdp scott/scott@orcl directory= dptest dumpfile=scott1.dmp parallel=40 job_name=scott1
【impdp 常用参数】
DIRECTORY 供转储文件和日志文件使用的目录对象,需要在导入前创建;
DUMPFILE 指定导入数据文件名,不填写目录路径则默认为 direcory 指定的目录,也可指定已创建的目录对象;
CONTENT 指定要导入的内容,可选参数有 all、data_only 和 metadata_only,默认为 all,当参数为 all 时将导入 DDL 及其数据,data_only 只导入数据,metadata_only 只导入 DDL;
EXCLUDE 排除特定的对象类型,例如 EXCLUDE=TABLE:EMP;
INCLUDE 包括特定的对象类型,例如 INCLUDE=TABLE_DATA;
JOB_NAME 要创建的导入任务的名称;
LOGFILE 指定日志文件名 (import.log);
NOLOGFILE 不写入日志文件 (N);
FULL 导出整个数据库 (N);
SCHEMAS 要导出的方案的列表 (登录方案);
TABLES 指定要导出的表的列表;
TABLESPACES 指定要导出的表空间的列表;
QUERY 用于导出表的子集的谓词子句;
REMAP_SCHEMA 将一个方案中的对象加载到另一个方案;
REMAP_TABLESPACE 将表空间对象重新映射到另一个表空间,在不同数据库导入导出时用于更改表空间;
【示例】
1、【全库模式】将数据文件全库导入本地数据库,数据文件存放于到已创建的目录对象 dptest 中
impdp system/manager@orcl dumpfile = orcl_dp.dmpdirectory = dptest full = y
2、【表模式】将数据文件中表 emp、dept 导入本地数据库 scott 用户下
impdp scott/scott@orcl tables = emp,dept dumpfile =empdept_dp.dmp directory = dptest
将数据文件中表 emp 导入本地数据库且将其拥有者改为 system
impdp system/manager dumpfile = empdept_dp.dmpdirectory = dptest tables=scott.dept remap_schema=scott:system
3、【用户模式】将数据文件导入本地数据库 scott 用户下
impdp scott/scott@orcldumpfile = scott_dp.dmp directory = dptest SCHEMAS=scott;
4、更换表空间
impdp scott/scott@orcl dumpfile = scott_dp.dmpdirectory = dptest remap_tablespace=users:temp
【大例子】
从一个用户 expdp 导出再 impdp 导入到另一个用户
如:Windows 为 A 服务器,Linux 为 B 服务器, 数据库用户为 test,把 A 服务器的数据迁移到 B 服务器中
在 A 服务器操作:
1、
SQL create directory expdp_dir as D:\mzl\backup
SQL grant read,write on directory expdp_dir totest;
2、在 windows 目录创建目录 D:\mzl\backup
3、在 DOS 命令窗口导出:
expdp test/test DIRECTORY=expdp_dir DUMPFILE=test.dmplogfile=testexpdp.log
在 B 服务器中操作:
4、SQL create directory impdp_diras /home/oracle/impdp_dir
SQL grantread,write on directory impdp_dir to test;
1、在系统中需要有 /home/oracle/impdp_dir 目录,在 impdp_dir 目录下必须有读写权限
(chmod 777 impdp_dir)
5、用 ftp 把 A 服务器导出的数据上传到 B 服务器的 /home/oracle/impdp_dir 目录中
在 A 服务器中配置好 B 服务器的服务器名, 在 A 服务器导入数据
6、在 DOS 命令窗口导出:
imppdp test/test@B_database DIRECTORY=impdp_dirDUMPFILE=test.dmp logfile=testimpdp.log
(这里注意大小写,如果 test.dmp 在 linux 中为大写,必须更改为大写。Linux 区分大小写)
以上是“Oracle 数据库导入导出逻辑备份方法有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!