Oracle工具使用(export,import,sqlldr中文帮助及实例)

1.1      EXPORT

1.1.1  帮助

exp是Oracle的一个可执行程序,存放目录$ORACLE_HOME/bin

exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移

它有三种模式:

用户模式:导出用户所有对象以及对象中的数据;

表模式:导出用户所有表或者指定的表;

整个数据库:导出数据库中所有对象。



exp help=y



通过输入 EXP 命令和用户名/口令,您可以

在用户 / 口令之后的命令:

  

实例: EXP SCOTT/TIGER

  

或者,您也可以通过输入跟有各种参数的 EXP 命令来控制“导出”的运行方式。

要指定参数,您可以使用关键字:

  

格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)

实例: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)

或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表

  

USERID 必须是命令行中的第一个参数。

  

关键字      说明(默认)

---------------------------------------------------

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    将传输的表空间列表

1.1.2  实例

exp parfile=exp.par



--exp.par 内容:

userid=aicbs/shyz2002@bakflcp

buffer=40960000

file=expdat.dmp

log=exp.log

grants=n

indexes=y

rows=n

compress=n

direct=y

tables=

(

ID_MAP,

CUSTOMER

)

1.2      IMPORT

1.2.1  帮助

imp是Oracle下的一个可执行的文件 存放目录/ORACLE_HOME/bin

imp导入工具将EXP形成的二进制系统文件导入到数据库中.

它有三种模式:

用户模式:导出用户所有对象以及对象中的数据;

表模式:导出用户所有表或者指定的表;

整个数据库:导出数据库中所有对象。

只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入



imp help=y



可以通过输入 IMP 命令和您的用户名/口令

跟有您的用户名 / 口令的命令:

  

实例: IMP SCOTT/TIGER

  

或者, 可以通过输入 IMP 命令和各种自变量来控制“导入”按照不同参数。

要指定参数,您可以使用关键字:

  

格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)

实例: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N

或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表

  

USERID 必须是命令行中的第一个参数。

  

关键字      说明(默认)   

----------------------------------------------

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)

ANALYZE      执行转储文件中的 ANALYZE 语句 (Y)

FEEDBACK      显示每 x 行 (0) 的进度

TOID_NOVALIDATE    跳过指定类型 id 的校验

FILESIZE      各转储文件的最大尺寸

RECALCULATE_STATISTICS  重新计算统计值 (N)

  

下列关键字仅用于可传输的表空间

TRANSPORT_TABLESPACE    导入可传输的表空间元数据 (N)

TABLESPACES    将要传输到数据库的表空间

DATAFILES      将要传输到数据库的数据文件

TTS_OWNERS      拥有可传输表空间集中数据的用户

1.2.2  实例

imp parfile=imp.par



--imp.par文件内容:

userid=aicbs/shyz2005@testdb2

buffer=40960000

file=expdat.dmp

log=imp.log

ignore=n

grants=n

rows=n

fromuser=aicbs

touser=aicbs

full=y



1.2.3  IMPORT可能出现的问题

(1) 数据库对象已经存在

一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;数据库对象已经存在, 按缺省的imp参数, 则会导入失败,如果用了参数ignore=y, 会把exp文件内的数据内容导入,如果表有唯一关键字的约束条件, 不合条件将不被导入,如果表没有唯一关键字的约束条件, 将引起记录重复

(2) 数据库对象有主外键约束

不符合主外键约束时, 数据会导入失败  

解决办法: 先导入主表, 再导入依存表

disable目标导入对象的主外键约束, 导入数据后, 再enable它们

(3) 权限不够

如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限     

(4) 导入大表(大于80M )时,存储分配失败,默认的EXP时,compress=Y,也就是把所有的数据压缩在一个数据块上.导入时,如果不存在连续一个大数据块,则会导入失败.导出80M以上的大表时, 记得compress= N, 则不会引起这种错误.

(5) imp和exp使用的字符集不同

如果字符集不同,导入会失败,可以改变unix环境变量或者NT注册表里NLS_LANG相关信息.导入完成后再改回来.

(6) imp和exp版本不能往上兼容

imp可以成功导入低版本exp生成的文件, 不能导入高版本exp生成的文件,根据情况我们可以用

用9i的exp不能导出8i的数据库对象!

$imp username/password@connect_string

说明: connect_string 是在/ORACLE_HOME/network/admin/tnsnames.ora定义的本地或者远端数据库的名称.



1.3      SQLLDR

1.3.1实例

sqlldr userid=aicbs/shyz2005@testdb2 control=sqlldr.ctl direct=true



--sqlldr.ctl文件内容:

load data infile 'exp_in.txt'

truncate into table user_alarm_intf

FIELDS TERMINATED BY ','

OPTIONALLY ENCLOSED BY '"'

trailing nullcols

(alarm_type,

alarm_date date 'yyyy-mm-dd',

acc_id,

sub_id,

bill_id,

alarm_desc

)