详解数据库导入导出命令语句
比较常用的一些参数:
exp:导出(imp导入)常用的参数
icdmain/icd:当前用户名和密码(如:oracle默认用户scott/tiger)
rows=y:具体的行
indexes=n:索引数
compress=n:压缩数
buffer=65536 :缓存数
file=exp_icdmain_csd_yyyymmdd.dmp:导出数存放地址和文件名(你自己定义导出的文件叫什么名字,随意)
log:exp_icdmain_csd_yyyymmdd.log:导出日志文件名(也是自己定义)
tables:你要导出的表(如:emp,dept可以导一张表,也可以同时导出多表)
注意:这些关键词不是说要全部写,比如要导出表,不需要写索引数等其他东东了。
exp参数详解:
以下表中为全部参数:
关键字 | 备注 |
USERID | 用户名/口令 |
FULL | 导出整个文件 (N) |
BUFFER | 数据缓冲区的大小 |
OWNER | 所有者用户名列表 |
FILE | 输出文件 (EXPDAT.DMP) |
TABLES | 表名列表 |
COMPRESS | 导入一个范围 (Y) |
RECORDLENGTH | IO 记录的长度 |
GRANTS | 导出权限 (Y) |
INCTYPE | 增量导出类型 |
INDEXES | 导出索引 (Y) |
RECORD | 跟踪增量导出 (Y) |
ROWS | 导出数据行 (Y) |
PARFILE | 参数文件名 |
CONSTRAINTS | 导出限制 (Y) |
CONSISTENT | 交叉表一致性 |
LOG | 屏幕输出的日志文件 |
STATISTICS | 分析对象 (ESTIMATE) |
DIRECT | 直接路径 (N) |
TRIGGERS | 导出触发器 (Y) |
FEEDBACK | 显示每 x 行 (0) 的进度 |
FILESIZE | 各转储文件的最大尺寸 |
QUERY | 选定导出表子集的子句 |
下列关键字仅用于可传输的表空间 | |
TRANSPORT_TABLESPACE | 导出可传输的表空间元数据 (N) |
TABLESPACES | 将传输的表空间列表 |
IMP参数详解:
使用的格式是:IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
其中USERID是必须的且为第一个参数
关键字 | 备注 |
USERID | 用户名/口令 |
FULL | 导入整个文件(N) |
BUFFER | 数据缓冲区大小 |
FROMUSER | 所有者用户名列表 |
TOUSER | 用户名列表 |
FILE | 输入文件 (EXPDAT.DMP) |
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) |
下列关键字仅用于可传输的表空间 | |
TRANSPORT_TABLESPACE | 导入可传输的表空间元数据 (N) |
TABLESPACES | 将要传输到数据库的表空间 |
DATAFILES | 将要传输到数据库的数据文件 |
TTS_OWNERS | 拥有可传输表空间集中数据的用户 |
以上内容为表格描述,可以让人一目了然,接下来用文字描述:
一、导出模式(三种模式)及命令格式
1、 全库模式
exp 用户名/密码@网络服务名 full=y file=路径\文件名.dmp log=路径\文件名.log
2、 用户模式(一般情况下采用此模式)
exp 用户名/密码@网络服务名 owners=(用户1,用户2,用户3,…) file=路径\文件名.dmp log=路径\文件名.log
3、 表模式
exp 用户名/密码@网络服务名 tables=(表名1,表名2,表名3,…)file=路径\文件名.dmp log=路径\文件名.log
4、 另外,还可以只导出某个表空间
exp 用户名/密码@网络服务名 tablespaces=(表空间1,表空间2,表空间3,…) file=路径\文件名.dmp log=路径\文件名.log
二、导入模式(三种模式)及命令格式
1、 全库模式
imp 用户名/密码@网络服务名 full=y file=路径\文件名.dmp log=路径\ds110.log
2、 用户模式(一般情况下采用此模式)
imp 用户名/密码@网络服务名 file=路径\文件名.dmp fromuser=导出的用户名 touser=导入的用户名 log=路径\ds110.log
3、 表模式
imp 用户名/密码@网络服务名 tables=(表名1,表名2,表名3,…)file=路径\文件名.dmp fromuser=导出的用户名 touser=导入的用户名 log=路径\ds110.log
4、 另外,还可以只导入某个表空间
imp 用户名/密码@网络服务名 tablespaces=(表空间1,表空间2,表空间3,…) file=路径\文件名.dmp fromuser=导出的用户名 touser=导入的用户名 log=路径\ds110.log
三、导入的命令参数说明
USERID 用户名/密码
FULL 是否全库导入 (Y 或 N),默认为 N
BUFFER 数据缓冲的大小
FROMUSER 导出的用户列表,即导入文件是从哪个用户导出的
TOUSER 导入的用户列表,即要到哪个用户中
FILE 导入文件,是dmp文件
SHOW 只列出文件内容 (Y 或 N) ,默认为 N
TABLES 要导入的表名列表
IGNORE 在导入过程中是否忽略错误 , 默认为 N
RECORDLENGTH 记录的长度,默认为operating system-dependent
GRANTS 导入权限 (Y 或 N),默认为Y
INCTYPE 导入的类型是否为递增(Y 或 N),默认为 N
INDEXES 导入索引 (Y 或 N) ,默认为Y
COMMIT 在导入过程中,是否导入一行数据,提交一行 (Y 或 N)默认为N,即在每个表导入后,进行提交
ROWS 导入行数据 (Y 或 N) ,默认为 Y
PARFILE 参数文件名
LOG 输出的日志文件
DESTROY 是否覆盖表空间上的数据文件 (Y 或 N) 默认为N
INDEXFILE 将表或索引信息写到指定的文件中
CHARSET 导出文件的字符集,默认为 NLS_LANG
ANALYZE 在导入时执行ANALYZE语句 (Y 或 N) 默认为 Y
FEEDBACK 在导入时每个几行显示进度,默认为0
四、导出的命令参数说明
USERID 用户名/密码
FULL 是否全库导入 (Y 或 N),默认为 N
BUFFER 数据缓冲的大小
OWNER 导出的用户列表
FILE 导出文件,是dmp文件
TABLES 要导出的表名列表
COMPRESS 是否压缩(Y 或 N), 默认为Y
RECORDLENGTH 输入输出记录的长度,默认为operating system-dependent
GRANTS 导出权限 (Y 或 N),默认为Y
INCTYPE 导出的类型是否为递增(Y 或 N),默认为 N
INDEXES 导出索引 (Y 或 N) ,默认为Y
RECORD 是否在系统SYS.INCEXP, SYS.INCFIL中记录一个递增或累计的导出(Y 或 N) , 默认为Y
ROWS 导出行数据 (Y 或 N) ,默认为 Y
PARFILE 参数文件名
CONSTRAINTS 是否导出约束,(Y 或 N) ,默认为 Y
CONSISTENT 在执行导出操作时是否加事务(Y 或 N),默认为 N
LOG 输出的日志文件
STATISTICS 在导出时执行ANALYZE语句 (Y 或 N) 默认为 Y
DIRECT direct path (N)
FEEDBACK 在导出时每个几行显示进度,默认为0
五、导出的对象
1、 全库模块
可以导出除sys用户拥有的所有数据库对象,包括:表空间的定义、配置文件、用户定义、角色、系统权限授权、角色授权、默认角色、resource costs、会滚段的定义、数据库链接、虚列、所有目录别名、所有外部函数库、所有对象类型、所有簇定义;对于每个表,还可导出表使用的对象类型定义、表定义、表数据、嵌套表数据、表索引、表约束、表授权、分析表、列和表注释、审核信息、所有引用的完整性约束、所有同义词、所有视图、所有存储过程、包、函数、所有触发器、分析簇、快照、job、all refresh groups and children
2、 用户模块
对象类型、数据库链路、序列、簇定义,对于每个表,还可导出表使用的对象类型定义、表定义、表数据、嵌套表数据、表索引、表约束、表授权、分析表、列和表注释、审核信息、属于当前用户的表所引用的完整性约束、同义词、视图、存储过程、包、函数、触发器、分析簇、快照、job、refresh groups
3、 表模式
可导出表使用的对象类型定义、表定义、表数据、嵌套表数据、表索引、表约束、表授权、分析表、列和表注释、审核信息、表引用的完整性约束、触发器,还可导出其他用户拥有的触发器、其他用户用户的索引
六、导入时的顺序
1、 字符集
2、 表定义
3、 表数据
4、 表索引
5、 完整性约束、触发器、bitmap索引
6、 视图、函数、过程
7、 包
七、给你举几个栗子:
数据导出:
1、 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2、 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3、 将数据库中的表table1 、table2导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4、 将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。
不过在上面命令后面 加上 compress=y 就可以了
数据的导入
1、将D:\daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:\daochu.dmp
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
2 将d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
基本上上面的导入导出够用了。不少情况我是将表彻底删除,然后导入。
八、对于备份数据库而言:
备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式。
若备份到本地文件,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_yyyymmdd.dmp
log=exp_icdmain_yyyymmdd.log
若直接备份到磁带设备,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_yyyymmdd.log
注:如果磁盘有空间,建议备份到磁盘,然后再拷贝到磁带。如果数据库数据量较小,可采用这种办法备份。
导入时会出现的问题:
九、导入工具imp可能出现的问题
1、数据库对象已经存在
一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;数据库对象已经存在, 按缺省的imp参数, 则会导入失败;如果用了参数ignore=y, 会把exp文件内的数据内容导入;如果表有唯一关键字的约束条件, 不合条件将不被导入,如果表没有唯一关键字的约束条件, 将引起记录重复
2、 数据库对象有主外键约束
这发生在将几个包含表的DMP文件分别导入数据库时,不符合主外键约束, 数据便会导入失败;解决办法: 先导入主表, 再导入依存表;disable目标
导入对象的主外键约束, 导入数据后, 再enable它们
3、 权限不够
如果要把A用户的数据导入B用户下, 做导入操作的用户需要有imp_full_database权限
4、 导入大表( 大于80M ) 时, 存储分配失败
默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上,导入时, 如果不存在连续一个大数据块, 则会导入失败,导出80M以上的大
表时, 记得compress= N, 则不会引起这种错误.
5、 imp和exp使用的字符集不同
如果字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息,导入完成后再改回来.
6、 imp和exp版本不能往上兼容
imp可以成功导入低版本exp生成的文件, 不能导入高版本exp生成的文件
以下链接还有详解,部分出自以下链接: https://www.cnblogs.com/iampkm/archive/2013/02/27/2934927.html