oracle没有执行导出程序,oracle 导入导出

转载:

expdp使用

使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录。因此使用EXPDP工具时,,必须首先建立DIRECTORY对象,并且需要为数据库用户授予使用DIRECTORY对象权限。

使用EXPDP和IMPDP时应该注意的事项:

EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。

EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。

IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。

expdp或impdp命令时,可暂不指出用户名密码@实例名 as 身份,然后根据提示再输入,如:

expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;

首先得建DIRECTORY:

SQL> conn /as sysdba

SQL> CREATE OR REPLACE DIRECTORY directory_nameAS 'directory_path';

同样可以更改directory的os路径

SQL> GRANT read,write ON DIRECTORY directory_nameTOusername;

查询directory目录

SQL> select * from dba_directories;

SQL> select * from all_directories;

删除directory目录

SQL> drop directory directory_name;

expdp选项

1. ATTACH

该选项用于在客户会话与已存在导出作用之间建立关联.语法如下:

ATTACH=[schema_name.]job_name

schema_name用于指定方案名,job_name用于指定导出作业名.注意,如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他选项,示例如下:

expdp username/password ATTACH=username.job_name

2. CONTENT

该选项用于指定要导出的内容.默认值为ALL.语法如下:

CONTENT={ALL | DATA_ONLY | METADATA_ONLY}

当设置CONTENT为ALL 时,将导出对象定义及其所有数据; 为DATA_ONLY时,只导出对象数据; 为METADATA_ONLY时,只导出对象定义,示例如下:

expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name CONTENT=METADATA_ONLY

3. DIRECTORY

指定转储文件和日志文件所在的目录.语法如下:

DIRECTORY=directory_object

directory_object用于指定目录对象名称.需要注意,目录对象是使用CREATE DIRECTORY语句建立的对象,而不是OS 目录,示例如下:

expdp username/passwordDIRECTORY=directory_name DUMPFILE=dumpfile_name

建立目录:

CREATE DIRECTORY directory_nameas '/Oracle/dump';

查询创建了那些子目录:

SELECT * FROM dba_directories;

4. DUMPFILE

用于指定转储文件的名称,默认名称为expdat.dmp.语法如下:

DUMPFILE=[directory_object:]file_name[,….]

directory_object用于指定目录对象名,file_name用于指定转储文件名.需要注意,如果不指定directory_object,导出工具会自动使用DIRECTORY选项指定的目录对象,示例如下:

expdp username/password DIRECTORY=directory_name DUMPFILE=directory_name:dumpfile_name

5. ESTIMATE

指定估算被导出表所占用磁盘空间的方法.默认值是BLOCKS.语法如下:

EXTIMATE={BLOCKS | STATISTICS}

设置为BLOCKS时,oracle会按照目标对象所占用的数据块个数乘以数据块尺寸估算对象占用的空间,设置为STATISTICS时,根据最近统计值估算对象占用空间,示例如下:

expdp scott/tiger TABLES=emp ESTIMATE=STATISTICS DIRECTORY=dumpDUMPFILE=a.dump

一般情况下, 当用默认值(blocks)时, 日志中估计的文件大小会比实际expdp出来的文件大, 用statistics时会跟实际大小差不多.

6. EXTIMATE_ONLY

指定是否只估算导出作业所占用的磁盘空间,默认值为N.语法如下:

EXTIMATE_ONLY={Y | N}

设置为Y时,导出作用只估算对象所占用的磁盘空间,而不会执行导出作业,为N时,不仅估算对象所占用的磁盘空间,还会执行导出操作,示例如下:

expdp username/password ESTIMATE_ONLY=y NOLOGFILE=y

7. EXCLUDE

该选项用于指定执行操作时要排除的对象类型或相关对象.语法如下:

EXCLUDE=object_type[:name_clause][,….]

object_type用于指定要排除的对象类型,name_clause用于指定要排除的具体对象.EXCLUDE和INCLUDE不能同时使用,示例如下:

expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dup EXCLUDE=VIEW

在EXPDP的帮助文件中, 可以看到存在EXCLUDE和INCLUDE参数, 这两个参数文档中介绍的命令格式存在问题, 正确用法是:

EXCLUDE=OBJECT_TYPE[:name_clause][,...]

INCLUDE=OBJECT_TYPE[:name_clause][,...]

示例:

Expdp schema=username exclude=sequence,table:"in('TB','DTP')"

impdp schema=username include = function,package, procedure, table:"='TB'"

有了这些还不够, 由于命令中包含了多个特殊字符, 在不同的操作系统下需要通过转义字符才能使上面的命令顺利执行,

如:

EXCLUDE=TABLE:"IN('BIGTALE')"

8. FILESIZE

指定导出文件的最大尺寸,默认为0(表示文件尺寸没有限制).

9. FLASHBACK_SCN

指定导出特定SCN时刻的表数据.语法如下:

FLASHBACK_SCN=scn_value

scn_value用于标识SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同时使用,示例如下:

expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name FLASHBACK_SCN=scn_value

10. FLASHBACK_TIME

指定导出特定时间点的表数据.语法如下:

FLASHBACK_TIME="TO_TIMESTAMP(time_value)"

示例如下:

expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name FLASHBACK_TIME = "TO_TIMESTAMP('18-04-201412:05:00','DD-MM-YYYY HH24:MI:SS')"

11. FULL

指定数据库模式导出,默认为N.语法如下:

FULL={Y | N}

为Y时,标识执行数据库导出.

12. HELP

指定是否显示EXPDP命令行选项的帮助信息,默认为N.当设置为Y时,会显示导出选项的帮助信息,示例如下:

expdp help=y

13. INCLUDE

指定导出时要包含的对象类型及相关对象.语法如下:

INCLUDE=object_type[:name_clause][,… ]

示例如下:

expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name INCLUDE=object_type

1.1.2 expdp选项

14. JOB_NAME

指定要导出作用的名称,默认为SYS_XXX.语法如下:

JOB_NAME=jobname_string

示例如下:

expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name INCLUDE=triggerJOB_NAME=exp_trigger

后面想临时停止expdp任务时可以按Ctrl+C组合键,退出当前交互模式,退出之后导出操作不会停止,这不同于Oracle以前的EXP. 以前的EXP,如果退出交互式模式,就会出错终止导出任务. 在Oracle10g中,由于EXPDP是数据库内部定义的任务,已经与客户端无关. 退出交互之后,会进入export的命令行模式,此时支持status等查看命令:

Export> status

如果想停止改任务,可以发出stop_job命令:

Export> stop_job

如果有命令行提示: "是否确实要停止此作业([Y]/N):" 或 "Are you sure you wish to stop this job ([yes]/no):", 回答应是yes或者no, 回答是YES以后会退出当前的export界面.

接下来可以通过命令行再次连接到这个任务:

expdp test/test@acf attach=expfull

通过start_job命令重新启动导出:

Export> start_job

Export> status

15.LOGFILE

指定导出日志文件文件的名称,默认名称为export.log.语法如下:

LOGFILE=[directory_object:]file_name

directory_object用于指定目录对象名称,file_name用于指定导出日志文件名.如果不指定directory_object.导出作用会自动使用DIRECTORY的相应选项值

16. NETWORK_LINK

指定数据库链名,如果要将远程数据库对象导出到本地例程的转储文件中,必须设置该选项.

expdp中使用连接字符串和network_link的区别:

expdp属于服务端工具,而exp属于客户端工具,expdp生成的文件默认是存放在服务端的,而exp生成的文件是存放在客户端.

expdp username/password@connect_string //对于使用这种格式来说,directory使用源数据库创建的,生成的文件存放在服务端。

如何将生成的文件放在目标数据库而不放在源数据库呢,在expdp中使用network_link.比如在本机expdp远程服务器的数据库,先在本机创建到服务端的dblink,然后创建directory及授权,然后expdp.

a.创建到服务端的dblink

conn aa/aacc

create database link connect to identified by using '' ;//username和password是server端的

b.创建directory

conn / assysdba

create or replace directory dir as '/home/oracle/dbbackup';

grant read,write on directory dir to ;

c.导出

expdpusername2/password2 directory=dirnetwork_link=link_name ... //这里的username2用创建dblink的那个用户aa,directory也是目标数据库创建的

比如在本机expdp远程服务器的数据库,先在本机创建到服务端的dblink,然后创建directory及授权,然后expdp useranme2/password2.....

如果想不生成dmp文件而直接导入一个数据库,原理和上面类似,直接使用impdp带network_link ,这样可以直接impdp,而绕过了expdp的步骤

impdp network_link=tolink schemas=link remap_schema=link:link2

17.NOLOGFILE

该选项用于指定禁止生成导出日志文件,默认值为N.

18. PARALLEL

指定执行导出操作的并行进程个数,默认值为1

19. PARFILE

指定导出参数文件的名称.语法如下:

PARFILE=[directory_path:]file_name

20. QUERY

用于指定过滤导出数据的where条件.语法如下:

QUERY=[schema.][table_name:]query_clause

schema 用于指定方案名,table_name用于指定表名,query_clause用于指定条件限制子句.QUERY选项不能 与 CONNECT = METADATA_ONLY, EXTIMATE_ONLY, TRANSPORT_TABLESPACES等选项同时使用,示例如下:

expdp username/password directory=directory_name dumpfiel=dumpfile_name Tables=empquery='WHERE deptno=20'

21. SCHEMAS

该方案用于指定执行方案模式导出,默认为当前用户方案.

22. STATUS

指定显示导出作用进程的详细状态,默认值为0.

23. TABLES

指定表模式导出.语法如下:

TABLES=[schema_name.]table_name[:partition_name][,…]

schema_name用于指定方案名,table_name用于指定导出的表名,partition_name用于指定要导出的分区名.

24. TABLESPACES

指定要导出表空间列表.

25. TRANSPORT_FULL_CHECK

该选项用于指定被搬移表空间和未搬移表空间关联关系的检查方式,默认为N.

当设置为Y时,导出作用会检查表空间直接的完整关联关系,如果表所在表空间或其索引所在的表空间只有一个表空间被搬移,将显示错误信息.

当设置为N时,导出作用只检查单端依赖,如果搬移索引所在表空间,但未搬移表所在表空间,将显示出错信息,如果搬移表所在表空间,未搬移索引所在表空间,则不会显示错误信息.

26. TRANSPORT_TABLESPACES

指定执行表空间模式导出.

27. VERSION

指定被导出对象的数据库版本,默认值为COMPATIBLE.语法如下:

VERSION={COMPATIBLE | LATEST | version_string}

为COMPATIBLE时,会根据初始化参数COMPATIBLE生成对象元数据;为LATEST时,会根据数据库的实际版本生成对象元数据.version_string用于指定数据库版本字符串.

1) 导出用户整个schema

--默认导出登陆账号的schema

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name

--其他账号登陆, 在参数中指定schemas

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name SCHEMAS=username1,username2

2) 导出用户下指定的表

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name TABLES=table_name1,table_name2

3) 导出用户下除tb表之外的表

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name EXCLUDE=TABLE:"='tb'"

4) 导出用户下的存储过程

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name INCLUDE=PROCEDURE

5) 导出用户下以'E'开头的表

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name INCLUDE=TABLE:"LIKE 'E%'"

6) 带QUERY导出

$ expdp username/password@oracle_sid DIRECTORY=directory_name DUMPFILE=dumpfile_name LOGFILE=logfile_name QUERY=查询语句

注: 处理这样带查询的多表导出, 如果多表之间有外健关联, 可能需要注意查询条件所筛选的数据是否符合这样的外健约束, 比如TB中有一栏位是 deptno, 是关联dept中的主键, 如果"whereempno>=8000"中得出的deptno=50的话, 那么, 你的dept的条件"where deptno>=10 and deptno<=40"就不包含deptno=50的数据, 那么在导入的时候就会出现错误.

附加:

1)按用户导

expdp username/password schemas=scott dumpfile=dumpfile_name DIRECTORY=directory_name;

2)并行进程parallel

expdp username/password directory=directory_name dumpfile=dumpfile_name parallel=20 job_name=job_name

3)按表名导

expdp username/password TABLES=TB1,TB2 dumpfile=dumpfile_name DIRECTORY=directory_name;

4)按查询条件导

expdp username/password directory=directory_name dumpfile=dumpfile_name Tables=TB query='WHERE deptno=20';

5)按表空间导

expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name TABLESPACES=TABLESPACE_NAME;

6)导整个数据库

expdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name FULL=y;

使用IMPDP

IMPDP命令行选项与EXPDP有很多相同的,不同的有:

1、REMAP_DATAFILE

该选项用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时可能需要该选项.

REMAP_DATAFIEL=source_datafie:target_datafile

2、REMAP_SCHEMA

该选项用于将源方案的所有对象装载到目标方案中.

REMAP_SCHEMA=source_schema:target_schema

3、REMAP_TABLESPACE

将源表空间的所有对象导入到目标表空间中

REMAP_TABLESPACE=source_tablespace:target_tablespace

4、REUSE_DATAFILES

该选项指定建立表空间时是否覆盖已存在的数据文件.默认为N

REUSE_DATAFIELS={Y | N}

5、SKIP_UNUSABLE_INDEXES

指定导入是是否跳过不可使用的索引,默认为N

6、SQLFILE

指定将导入要指定的索引DDL操作写入到SQL脚本中

SQLFILE=[directory_object:]file_name

Impdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name SQLFILE=sqlfile_name

7、STREAMS_CONFIGURATION

指定是否导入流元数据(Stream Matadata),默认值为Y.

8、TABLE_EXISTS_ACTION

该选项用于指定当表已经存在时导入作业要执行的操作,默认为SKIP

TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | FRPLACE }

当设置该选项为SKIP时,导入作业会跳过已存在表处理下一个对象;当设置为APPEND时,会追加数据,为TRUNCATE时,导入作业会截断表,然后为其追加新数据;当设置为REPLACE时,导入作业会删除已存在表,重建表病追加数据,注意,TRUNCATE选项不适用与簇表和NETWORK_LINK选项

9、TRANSFORM

该选项用于指定是否修改建立对象的DDL语句

TRANSFORM=transform_name:value[bject_type]

Transform_name用于指定转换名,其中SEGMENT_ATTRIBUTES用于标识段属性(物理属性,存储属性,表空间,日志等信息),STORAGE用于标识段存储属性,VALUE用于指定是否包含段属性或段存储属性,object_type用于指定对象类型.

Impdp username/password directory=directory_name dumpfile=dumpfile_name Transform = segment_attributes:n:table

10、TRANSPORT_DATAFILES

该选项用于指定搬移空间时要被导入到目标数据库的数据文件

TRANSPORT_DATAFILE=datafile_name

Datafile_name用于指定被复制到目标数据库的数据文件

Impdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name TRANSPORT_DATAFILES = '/Oracle/oradata/tbs1.f'

调用IMPDP

1、导入表

Impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmpTABLES=dept,emp

Impdp system/password DIRECTORY=directory_name DUMPFILE=dumpfile_name TABLES=scott.dept,scott.emp  REMAP_SCHEMA=SCOTT:SYSTEM

第一种方法表示将DEPT和EMP表导入到SCOTT方案中,第二种方法表示将DEPT和EMP表导入的SYSTEM

注意,如果要将表导入到其他方案中,必须指定REMAPSCHEMA选项.

2、导入方案

Impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schema.dmpSCHEMAS=scott

Impdp system/manager DIRECTORY=directory_name DUMPFILE=dumpfile_name SCHEMAS=scott REMAP_SCHEMA=scott:system

3、导入表空间

Impdpsystem/manager DIRECTORY=directory_name DUMPFILE=dumpfile_name TABLESPACES=tablespace_name

4、导入数据库

Impdp system/manager DIRECTORY=directory_name DUMPFILE=dumpfile_name FULL=y

--赋予expdp,impdp的权限

SQL> grant exp_full_database,imp_full_database to username;

附加:

1)导到指定用户下

impdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name SCHEMAS= username;

2)改变表的owner

impdp system/manager DIRECTORY=directory_name DUMPFILE=dumpfile_name TABLES=scott.dept REMAP_SCHEMA=scott:system;

3)导入表空间

impdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name TABLESPACES=TABLESPACE_NAME;

4)导入数据库

impdb username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name FULL=y;

5)追加数据

impdp username/password DIRECTORY=directory_name DUMPFILE=dumpfile_name SCHEMAS=username TABLE_EXISTS_ACTION=append;

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

一.说明

oracle 的exp/imp命令用于实现对数据库的导出/导入操作;

exp命令用于把数据从远程数据库服务器导出至本地,生成dmp文件;

imp命令用于把本地的数据库dmp文件从本地导入到远程的Oracle数据库中。

二.语法

可以通过在命令行输入 imp help=y 获取imp的语法信息:

==========================================================

C:\Documents and Settings\auduser>imp help=y

Import: Release 9.0.1.1.1 - Production on 星期二 5月 20 18:21:57 2008

(c) Copyright 2001 Oracle Corporation. All rights reserved.

可以通过输入 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)

FEEDBACK               每 x 行显示进度 (0)

TOID_NOVALIDATE        跳过指定类型 ID 的验证

FILESIZE               每个转储文件的最大大小

STATISTICS             始终导入预计算的统计信息

RESUMABLE              遇到与空格有关的错误时挂起 (N)

RESUMABLE_NAME         用来标识可恢复语句的文本字符串

RESUMABLE_TIMEOUT      RESUMABLE 的等待时间

COMPILE                编译过程, 程序包和函数 (Y)

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

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

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

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

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

==============================================

同样可以通过输入 exp help=y 获取exp的语法信息

Microsoft Windows XP [版本 5.1.2600]

(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\auduser>exp help=y

Export: Release 9.0.1.1.1 - Production on 星期二 5月 20 18:26:34 2008

(c) Copyright 2001 Oracle Corporation. All rights reserved.

通过输入 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)

DIRECT     直接路径 (N)            TRIGGERS     导出触发器 (Y)

LOG        屏幕输出的日志文件 STATISTICS   分析对象 (ESTIMATE)

ROWS    导出数据行 (Y)        PARFILE      参数文件名

CONSISTENT 交叉表一致性    CONSTRAINTS 导出约束条件 (Y)

FEEDBACK             每 x 行显示进度 (0)

FILESIZE             每个转储文件的最大大小

FLASHBACK_SCN        用于回调会话快照的 SCN

FLASHBACK_TIME       用来获得最接近于指定时间的 SCN 的时间

QUERY                用来导出表的子集的选择子句

RESUMABLE            遇到与空格有关的错误时挂起 (N)

RESUMABLE_NAME       用来标识可恢复语句的文本字符串

RESUMABLE_TIMEOUT    RESUMABLE 的等待时间

TTS_FULL_CHECK       对 TTS 执行完全或部分相关性检查

TABLESPACES          要导出的表空间列表

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

TEMPLATE 调用 iAS 模式导出的模板名称

三.使用示例

3.1 数据导出:

1 将数据库SampleDB完全导出,用户名system 密码manager 导出到E:\SampleDB.dmp中

exp system/manager@TestDB file=E:\sampleDB.dmp full=y

2 将数据库中system用户与sys用户的表导出

exp system/manager@TestDB file=E:\sampleDB.dmp owner=(system,sys)

3 将数据库中的表 TableA,TableB 导出

exp system/manager@TestDB file=E:\sampleDB.dmp tables=(TableA,TableB)

4 将数据库中的表tableA中的字段filed1 值为 "王五" 的数据导出

exp system/manager@TestDB file=E:\sampleDB.dmp tables=(tableA) query=' where filed1='王五'

如果想对dmp文件进行压缩,可以在上面命令后面 加上 compress=y 来实现。

3.2 数据的导入

1 将备份数据库文件中的数据导入指定的数据库SampleDB 中,如果 SampleDB 已存在该表,则不再导入;

imp system/manager@TEST file=E:\sampleDB.dmp full=y ignore=y

2 将d:\daochu.dmp中的表table1 导入

imp system/manager@TEST file=E:\sampleDB.dmp tables=(table1)

3. 导入一个完整数据库

imp system/manager file=bible_db log=dible_db full=y ignore=y

4. 导入一个或一组指定用户所属的全部表、索引和其他对象

imp system/manager file=seapark log=seapark fromuser=seapark imp

system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)

5. 将一个用户所属的数据导入另一个用户

imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy

imp system/manager file=tank log=tank fromuser=(seapark,amy)

touser=(seapark1, amy1)

6. 导入一个表

imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)

7. 从多个文件导入

imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)

log=paycheck, filesize=1G full=y

8. 使用参数文件

imp system/manager parfile=bible_tables.par

bible_tables.par参数文件:

#Import the sample tables used for the Oracle8i Database Administrator's

Bible. fromuser=seapark touser=seapark_copy file=seapark log=seapark_import

参数文件示例见附录

9. 增量导入

imp system./manager inctype= RECTORE FULL=Y FILE=A

不少情况下要先将表彻底删除,然后导入。

四.参数说明

4.1、8i EXP常用选项

1、FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。例如:

exp sys file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y

2、BUFFER和FEEDBACK,在导出比较多的数据时,我会考虑设置这两个参数。例如:

exp new file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT

3、FILL和LOG,这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录,例子见上面。

需要说明的是,EXP可以直接备份到磁带中,即使用FILE=/dev/rmt0(磁带设备名),但是一般我们都不这么做,原因有

二:一、这样做的速度会慢很多,二、现在一般都是使用磁带库的,不建议直接对磁带进行操作。至于没有使用磁带库

的朋友可以考虑和UNIX的TAR结合使用。

如果你真想使用EXP直接到磁带,你可以参考Metalink文章“EXPORTING TO TAPE ON UNIX SYSTEMS”(文档号:

30428.1),该文中有详细解释。

4、COMPRESS参数将在导出的同时合并碎块,尽量把数据压缩到initial的EXTENT里,默认是N,一般建议使用。DIRECT

参数将告诉 EXP直接读取数据,而不像传统的EXP那样,使用SELECT来读取表中的数据,这样就减少了SQL语句处理过程

。一般也建议使用。不过有些情况下 DIRECT参数是无法使用的。

5、如何使用SYSDBA执行EXP/IMP?

这是一个很现实的问题,有时候我们需要使用SYSDBA来执行EXP/IMP,如进行传输表空间的EXP/IMP,以及在9i下用SYS

用户来执行EXP/IMP时,都需要使用SYSDBA才可。

我们可以使用下面方式连入EXP/IMP:

exp "'sys/sys as sysdba'" file=1.dmp tables=gototop.t rows=n

6、QUERY参数后面跟的是where条件,值得注意的是,整个where子句需要使用""括起来,where子句的写法和SELECT中

相同,如果是UNIX平台所有"和'都需要使用\u26469屏蔽它们的特殊含义:

exp gototop/gototop file=1.dmp log=1.log tables=cyx.t query="where c1=20 and c2=gototop"

如果是windows平台,则使用下面的格式:

exp c/c@ncn file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'"""

4.2、8i IMP常用选项

1、FROMUSER和TOUSER,使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。

2、IGNORE、GRANTS和INDEXES,其中IGNORE参数将忽略表的存在,继续导入,这个对于需要调整表的存储参数时很有用

,我们可以先根据实际情况用合理的存储参数建好表,然后直接导入数据。而GRANTS和INDEXES则表示是否导入授权和

索引,如果想使用新的存储参数重建索引,或者为了加快到入速度,我们可以考虑将INDEXES设为N,而GRANTS一般都是

Y。

另外一个EXP/IMP都有的参数是PARFILE,它是用来定义EXP/IMP的参数文件,也就是说,上面的参数都可以写在一个参

数文件中,但我们一般很少使用。

4.4、Oracle9i EXP功能描述

Oracle9i EXP在原有的基础上新增了部分新的参数,按功能主要分为以下几个部分:

1、OBJECT_CONSISTENT - 用于设置EXP对象为只读以保持对象的一致性。默认是N。

2、FLASHBACK_SCN和FLASHBACK_TIME - 用于支持FLASHBACK功能而新增。

3、RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用于支持RESUMABLE空间分配而新增。

4、TTS_FULL_CHECK - 用于在传输表空间时使用依赖性检查。

5、TEMPLATE - 用于支持iAS。

6、TABLESPACES - 设置表空间导出模式。个人觉得对于一般用户而言,这个才是新增参数中最实用的一个,可以让用

户在原来的FULL、OWNER、TABLES的基础上多了一种选择,使得EXP更加灵活。

五、不同版本的EXP/IMP问题?

一般来说,从低版本导入到高版本问题不大,麻烦的是将高版本的数据导入到低版本中,在Oracle9i之前,不同版本

Oracle之间的EXP/IMP可以通过下面的方法来解决:

1、在高版本数据库上运行低版本的catexp.sql;

2、使用低版本的EXP来导出高版本的数据;

3、使用低版本的IMP将数据库导入到底版本数据库中;

4、在高版本数据库上重新运行高版本的catexp.sql脚本。

但在9i中,上面的方法并不能解决问题。如果直接使用低版本EXP/IMP会出现如下错误:

EXP-00008: ORACLE error %lu encountered

ORA-00904: invalid column name

这已经是一个公布的BUG,需要等到Oracle10.0才能解决,BUG号为2261,你可以到METALINK上去查看有关此BUG的详细

信息。

BUG归BUG,我们的工作还是要做,在没有Oracle的支持之前,我们就自己解决。在Oracle9i中执行下面的SQL重建

exu81rls视图即可。

CREATE OR REPLACE view exu81rls

(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)

AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,

decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')

|| decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')

|| decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')

|| decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),

r.check_opt, r.enable_flag,

DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)

from user$ u, obj$ o, rls$ r

where u.user# = o.owner#

and r.obj# = o.obj#

and (uid = 0 or

uid = o.owner# or

exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')

)

/

grant select on sys.exu81rls to public;

/

六、其他问题

本文只讨论了Oracle8i和9i中的EXP/IMP的一些情况,对于之前的版本,在8.0.X 中,除了QUERY参数不能用外,其它差

别不大。针对没有QUERY的情况,我们可以先在数据库中使用查询条件建立临时中间表,然后使用EXP导出这个中间表即

可。至于Oracle7因为目前使用的人较少,gototop不打算在此做详细解释了,如果读者朋友有需求,你可以参考

Metalink文档:“Overview of Export and Import in Oracle7”(文档号:61949.1)。关于EXP/IMP的详细参数信息

你可以通过EXP/IMP HELP=Y来获得。

另外关于传输表空间的更多信息可以参考下面的Metelink文档,本文不再详述。

[NOTE:77523.1] Transportable Tablespaces -- An Example to setup and use.

[NOTE:100698.1] Perform tablespace point-in-time recovery using Transportable Tablespace.

在进行并行EXP/IMP的时候,如果IMP过程建索引的话不建议同时运行5个以上的IMP,如果你想加快速度,可以在IMP的

时候不建索引,这样只要内存允许,可以多跑几个,然后是SQL脚本创建需要的索引。

注意:

操作者要有足够的权限,权限不够它会提示。

数据库是否可以连上, 可以用tnsping TestDB 来获得数据库 TestDB 能否连上。

附录一:

给用户增加导入数据权限的操作

第一, 启动sql*puls

第二,以system/manager登陆

第三,create user 用户名 IDENTIFIED BY 密码 (如果已经创建过用户,这步可以省略)

第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,

DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,

DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字

第五, 运行-cmd-进入dmp文件所在的目录,

imp userid=system/manager full=y file=*.dmp

或者 imp userid=system/manager full=y file=filename.dmp

附录二:

Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.

先建立import9.par,

然后,使用时命令如下:imp parfile=/filepath/import9.par

例 import9.par 内容如下:

FROMUSER=TGPMS

TOUSER=TGPMS2     (注:把表的拥有者由FROMUSER改为TOUSER,FROMUSER和TOUSER的用户可以不同)

ROWS=Y

INDEXES=Y

GRANTS=Y

CONSTRAINTS=Y

BUFFER=409600

file==/backup/ctgpc_20030623.dmp

log==/backup/import_20030623.log

++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++

exp/imp与expdp/impdp的用法区别

1:把用户usera的对象导到用户userb,用法区别在于fromuser=usera touser=userb ,remap_schema='usera':'usera' 。例如

imp system/passwd fromuser=usera touser=userbfile=/oracle/exp.dmp log=/oracle/exp.log;

impdp system/passwd directory=expdp dumpfile=expdp.dmpremap_schema='usera':'userb' logfile=/oracle/exp.log;

2:更换表空间,用exp/imp的时候,要想更改表所在的表空间,需要手工去处理一下,

如alter table xxx move tablespace_new之类的操作。

用impdp只要用remap_tablespace='tabspace_old':'tablespace_new'

3:当指定一些表的时候,使用exp/imp 时,tables的用法是 tables=('table1','table2','table3')。

expdp/impdp的用法是tables='table1','table2','table3'

4:是否要导出数据行

exp (ROWS=Y 导出数据行,ROWS=N 不导出数据行)

expdp content(ALL:对象+导出数据行,DATA_ONLY:只导出对象,METADATA_ONLY:只导出数据的记录)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值