oracle 中导出数据时 exp system/123@orcl file=d:\aa.dmp full=y

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 中导出数据时 exp system/123@orcl file=d:\aa.dmp full=y相关的知识,希望对你有一定的参考价值。

oracle 中导出数据时 exp system/123@orcl file=d:\aa.dmp full=y 具体导出那些,不可能数据库又只有一个 ,导出了那没有了,下次登录就没得了啊
导出 表? 还是别的

4. EXPORT/IMPORT过程 (DUMP文件包含的数据对象)
EXPORT导出的DUMP文件包含两种基本类型的数据 :
 DDL (Data Dictionary Language)
 Data
DUMP文件包含所有重新创建Data Dictionary的DDL语句,基本上是可以读的格式 ;但是应该注意的是,千万不要用文本编辑器编辑之,oracle说不支持这样做的。
下面列出的是DUMP文件中包括的ORACLE对象,分为TABLE/USER/FULL方式,有些对象只是在FULL方式下才有(比如public synonyms, users, roles, rollback segments等)
Table mode User Mode Full Database Mode
---------------------- ---------------------- ----------------------
Table definitions Table definitions Table definitions
Table data Table data Table data
Owner's table grants Owner's grants Grants
Owner's table indexes Owner's indexes Indexes
Table constraints Table constraints Table constraints
Table triggers Table triggers All triggers
Clusters Clusters
Database links Database links
Job queues Job queues
Refresh groups Refresh groups
Sequences Sequences
Snapshots Snapshots
Snapshot logs Snapshot logs
Stored procedures Stored procedures
Private synonyms All synonyms
Views Views
Profiles
Replication catalog
Resource cost
Roles
Rollback segments
System audit options
System privileges
Tablespace definitions
Tablespace quotas
User definitions

10. EXP常用选项
1) FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。例如:
exp sys file=test.dmp log=test.log full=y rows=n compress=y direct=y
2) BUFFER和FEEDBACK,在导出比较多的数据时,考虑设置这两个参数。例如:
exp new file=test.dmp log=test.log feedback=10000 buffer=100000000 tables=test1,test2
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=trst rows=n
6) QUERY参数后面跟的是where条件,值得注意的是,整个where子句需要使用""括起来,where子句的写法和SELECT中相同;
 如果是UNIX平台所有"和'都需要使用\u26469屏蔽它们的特殊含义:
exp test/test file=1.dmp log=1.log tables=testtable query="where c1=20 and c2=test"
注意:>,<,单引号等特殊字符需要转译
exp test/test file=1.dmp log=1.log tables=testtable query="where c1\>20 and c2=to_date\(\'20090506\',\'yyyymmdd\'\)"
 如果是windows平台,则使用下面的格式:
exp c/c@ncn file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'"""(使用unix下格式也是可以的,具体情况测试一下即可)

exp导出时,加where条件:
exp scott/tiger TABLES=(emp,bonus) QUERY="WHERE job='SALESMAN' and sal<1600"
限制:
1.The parameter QUERY cannot be specified for full, user, or tablespace mode exports.
参数query不能使用在完全导出,用户导出和表空间导出方式
2.The parameter QUERY must be applicable to all specified tables.
参数query指定的内容必须对所有指定的表都有效
3.The parameter QUERY cannot be specified in a direct path export (DIRECT=y)
参数query不能与direct路径导出同时使用
4.The parameter QUERY cannot be specified for tables with inner nested tables.
参数query不能导出内嵌表
5.You cannot determine from the contents of the export file whether the data is the result of a QUERY export.
用query参数导出的数据与同其他方式导出的数据是一样的,无法根据导出文件进行分辨
参考技术A 导出数据的时候,指定full=y,可以把该用户具有导出权限的数据全部导出。system的级别应该包括自己和其它的一些用户。从导出过程提示看,数据包括表、视图、对象等等。本回答被提问者采纳

Oracle 11G在用EXP 导出时,空表不能导出解决

  • 一、问题原因:
    11G中有个新特性,当表无数据时,不分配segment,以节省空间

    1、insert一行,再rollback就产生segment了。 该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。

    2、设置deferred_segment_creation 参数

    SQL> show parameter deferred_segment_creation

    NAME TYPE VALUE
    ------------------------------------ ----------- ----------
    deferred_segment_creation boolean TRUE

    SQL> alter system set deferred_segment_creation=false;

    系统已更改。

    SQL> show parameter deferred_segment_creation

    NAME TYPE VALUE

    ------------------------------------ ----------- ----------
    deferred_segment_creation boolean FALSE

    该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。

    需注意的是:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。如需导出之前的空表,只能用第1种方法或者下面的解决方法。

  • 二、解决方法:

    1、先查询一下当前用户下的所有空表

    select table_name from user_tables where NUM_ROWS=0;

    2、用以下这句查找空表

    select ‘alter table ‘||table_name||‘ allocate extent;‘ from user_tables where num_rows = 0 and table_name like ‘UFLO_%‘;

    把查询结果导出,执行导出的语句

    ‘ALTERTABLE‘||TABLE_NAME||‘ALLOCATEEXTENT;‘

    -----------------------------------------------------------
    1 alter table UFLO_CALENDAR allocate extent;
    2 alter table UFLO_CALENDAR_DATE allocate extent;
    3 alter table UFLO_D_NODE_ATTRIBUTE allocate extent;
    4 alter table UFLO_D_NODE_ENTRY allocate extent;
    5 alter table UFLO_D_PROCESS_ATTRIBUTE allocate extent;
    6 alter table UFLO_D_PROCESS_ENTRY allocate extent;
    7 alter table UFLO_D_PROCESS_ENTRY_ASSIGNEE allocate extent;
    8 alter table UFLO_FORM allocate extent;
    9 alter table UFLO_TABLE_COLUMN allocate extent;
    10 alter table UFLO_TABLE_DEFINITION allocate extent;
    11 alter table UFLO_TASK_APPOINTOR allocate extent;
    12 alter table UFLO_TASK_REMINDER allocate extent;

    3、然后再执行

    exp 用户名/密码@数据库名 file=/home/oracle/exp.dmp log=/home/oracle/exp_smsrun.log 成功!

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

注:

1、使用ALLOCATE EXTENT的说明

使用ALLOCATE EXTENT可以为数据库对象分配Extent。其语法如下:

-----------
ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE ‘filename‘ | INSTANCE integer }
-----------

可以针对数据表、索引、物化视图等手工分配Extent。

ALLOCATE EXTENT使用样例:

ALLOCATE EXTENT
ALLOCATE EXTENT(SIZE integer [K | M])
ALLOCATE EXTENT(DATAFILE ‘filename‘)
ALLOCATE EXTENT(INSTANCE integer)
ALLOCATE EXTENT(SIZE integer [K | M] DATAFILE ‘filename‘)
ALLOCATE EXTENT(SIZE integer [K | M] INSTANCE integer)

针对数据表操作的完整语法如下:
-----------
ALTER TABLE [schema.]table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE ‘filename‘ | INSTANCE integer})]
-----------

故,需要构建如下样子简单的SQL命令:

-----------
alter table aTabelName allocate extent
-----------

 

 

 

 

 

  • 采用expdp和impdp 就不会存在改问题

create directory expdp_dir as   ‘/data/app1/dp‘; 
grant read,write on directory expdp_dir to DRGN_OWNER; 


expdp DRGN_OWNER/DRGN_OWNER DIRECTORY=expdp_dir DUMPFILE=DRGN_OWNER.dmp SCHEMAS=DRGN_OWNER logfile=DRGN_OWNERexpdp.log 

create directory impdp_dir as ‘/data/app1/dp‘; 
grant read,write on directory impdp_dir to DRGN_OWNER; 

impdp DRGN_OWNER/DRGN_OWNER DIRECTORY=impdp_dir DUMPFILE=DRGN_OWNER.dmp logfile=DRGN_OWNER.dmpimpdp.log 

空表果然已经导入了 

我个人建议,建立了空的数据库后,马上执行 
alter system set deferred_segment_creation=flase sscope=spfile; 
shutdowm immediate 
startup 





















































以上是关于oracle 中导出数据时 exp system/123@orcl file=d:\aa.dmp full=y的主要内容,如果未能解决你的问题,请参考以下文章

从oracle数据库中导出大量数据到excel中为啥自动分成了好几个excel文件

Oracle 数据库导入导出

如何在oracle中导入导出dmp文件

Oracle 导出:表不存在

Oracle数据库导入导出命令总结

oracle中导出sql的几个常见词语的意思