Oracle导出程序Exp的使用
Oracle导出程序Exp的使⽤
Oracle导出程序Exp的使⽤
Oracle的导出实⽤程序(Export utility)允许从数据库提取数据,并且将数据写⼊操作系统⽂件。exp使⽤的基本格式:
exp[username[/password[@service]]],以下例举exp常⽤⽤法。
1. 获取帮助
exp help=y
2. 导出⼀个完整数据库
exp system/manager file=bible_db log=dible_db full=y
3. 导出数据库定义⽽不导出数据
exp system/manager file=bible_db log=dible_db full=y rows=n
4. 导出⼀个或⼀组指定⽤户所属的全部表、索引和其他对象
exp system/manager file=seapark log=seapark owner=seapark exp system/manager file=seapark log=seapark owner= (seapark,amy,amyc,harold)
注意:在导出⽤户时,尽管已经得到了这个⽤户的所有对象,但是还是不能得到这些对象引⽤的任何同义词。解决⽅法是⽤以下的SQL*Plus命令创建⼀个脚本⽂件,运⾏这个脚本⽂件可以获得⼀个重建seapark所属对象的全部公共同义词的可执⾏脚本,然后在⽬标数据库上运⾏该脚本就可重建同义词了。
SET LINESIZE 132 SET PAGESIZE 0 SET TRIMSPOOL ON SPOOL c:\seapark.syn SELECT 'Create public synonym
'||synonym_name ||' for '||table_owner||'.'||table_name||';' FROM dba_synonyms WHERE table_owner = 'SEAPARK' AND owner = 'PUBLIC'; SPOOL OFF
5. 导出⼀个或多个指定表
exp seapark/seapark file=tank log=tank tables=tank exp system/manager file=tank log=tank tables=seapark.tank exp system/manager file=tank log=tank tables=(seapark.tank,amy.artist)
6. 估计导出⽂件的⼤⼩
全部表总字节数:
SELECT sum(bytes)
笔记本home键在哪
FROM dba_segments
WHERE segment_type = 'TABLE';
seapark⽤户所属表的总字节数:
SELECT sum(bytes)
FROM dba_segments
WHERE owner = 'SEAPARK'
AND segment_type = 'TABLE';
seapark⽤户下的aquatic_animal表的字节数:
SELECT sum(bytes)
FROM dba_segments
WHERE owner = 'SEAPARK'
AND segment_type = 'TABLE'
AND segment_name = 'AQUATIC_ANIMAL';
7. 导出表数据的⼦集(oracle8i以上)
NT系统:
exp system/manager query='Where salad_type=''FRUIT''' tables=amy.salad_type file=fruit log=fruit
UNIX系统:
exp system/manager query=\"Where salad_type=\'FRUIT\'\" tables=amy.salad_type file=fruit log=fruit
8. ⽤多个⽂件分割⼀个导出⽂件
exp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4) log=paycheck, filesize=1G tables=hr.paycheck 9. 使⽤参数⽂件
exp system/manager parfile=bible_tables.par
bible_tables.par参数⽂件:
#Export the sample tables used for the Oracle8i Database Administrator's Bible. file=bible_tables log=bible_tables tables=( amy.artist amy.books seapark.checkup seapark.items )
10. 增量导出
"完全"增量导出(complete),即备份整个数据库
exp system/manager inctype=complete file=990702.dmp
"增量型"增量导出(incremental),即备份上⼀次备份后改变的数据
exp system/manager inctype=incremental file=990702.dmp
"累计型"增量导出(cumulative),即备份上⼀次"完全"导出之后改变的数据财务会计管理
exp system/manager inctype=cumulative file=990702.dmp
附:常⽤参数说明
参数说明系统维护
file
指定导出⽂件名。默认值是file=expdat.dmp。默认的⽂件扩展名是.dmp
filesize
允许使⽤多个⽂件分布式导出数据。默认值为filesize=0,表⽰所有的数据被写⼊⼀个⽂件。可以选filesize=1024(1K,1M,1G) full
full=y时,表⽰整个数据库将被导出。默认值为full=n
help
控制帮助屏幕的显⽰。它的参数是help=y;没有help=n选项
inctype
指定增量导出选项
1. complete:完全小学后勤工作计划
只羡鸳鸯不羡仙歌词2. incremental:增量(导出上次任何导出后改变的所有数据库对象)
3. cumulative:累计(导出上次cumulative,complete导出后改变的所有数据库对象)
公司绩效考核制度
indexes
指定索引是否被导出。默认值为indexes=y。如果不希望索引被导出,⽤indexes=n
log
指定收集导出信息(包括任何错误信息)的逻辑⽂件名。默认的⽂件扩展名是.log
owner
允许为指定⽤户或⼀列⽤户导出数据和对象
parfile
允许从⼀个⽂件读取导出参数
query
指定从⼀个或更多的表中导出⾏的⼀个⼦集。它的参数值在where语句中,并且被应⽤于select语句,在这⾥export不导出每⼀个表
rows
控制表数据是否被导出。默认值为rows=y,表⽰数据被导出。rows=n表⽰只想导出表定义,⽽不想导出表的数据
tables
允许导⼊⼀个指定的表或⼀列表
++++++++++++++++++++++++++++++例⼦+++++++++++++++++++++++++++++++++++++++
连接普通连接conn username/password@dbname
控制lisenter的⼯具:listener control
lsnrctl命令进⼊listener操作
stop命令停⽌
start 启动
导出数据库exp help-y帮助
exp username/pass@dbname tables="tablename" File=c:\name.DMP
通过参数⽂件导出
exp PARFILE=C:\NAME.TXT -----------userid=username/pass
file=c:\exp.dmp
tables="tablename"
exp username/pass file=c:\expdmp tables="tablename" query='id like ''4%''' ....................................................query='id =0010'
把⽤户下的表导出
exp username/pass owner='username' file=c:\exp.dmp
如何将EXP出来的数据IMP到不同表空间
前⼏天部门经理在IMP数据时想将数据导⼊到不同于原系统的表空间去,却发现怎么也不成功,数据还是导⼊到原来的表空间。
我看了⼀下,他在新系统上创建的这个⽤户授予了CONNECT,RESOURCE,DBA等⾓⾊,⽽且这个⽤户有UNLIMITED TABLESPACE这个系统权限。
总的来说,Oracle并没有提供什么参数让你将数据导⼊到指定的表空间中,数据默认还是导⼊到它原来所在的表空间。你可以⽤IMP 的SHOW参数可以看到其创建脚本中会指定TABLESPACE参数,⽽这个值是原系统该对象所在的表空间,跟你⽤户默认的表空间是没有关系的,如下:
"CREATE TABLE "EMPLOYEES" ("EMPLOYEE_ID" NUMBER(6, 0), "FIRST_NAME" VARCHAR2" "(20), "LAST_NAME" VARCHAR2(25) NOT NULL ENABLE, "EMAIL" VARCHAR2(25) NOT NU" "LL ENABLE, "PHONE_NUMBER"
VARCHAR2(20), "HIRE_DATE" DATE NOT NULL ENABLE, "" "JOB_ID" VARCHAR2(10) NOT NULL ENABLE, "SALARY" NUMBER(8, 2), "COMMISSION_PC" "T" NUMBER(2, 2), "MANAGER_I
D" NUMBER(6, 0), "DEPARTMENT_ID" NUMBER(4, 0)) " "PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELIS" "TS 1 FREELIST GROUPS 1) TABLESPACE "EXAMPLE" LOGGING NOCOMPRESS"
. . 正在跳过表"EMPLOYEES"
"CREATE TABLE "JOBS" ("JOB_ID" VARCHAR2(10), "JOB_TITLE" VARCHAR2(35) NOT NU"
"LL ENABLE, "MIN_SALARY" NUMBER(6, 0), "MAX_SALARY" NUMBER(6, 0)) PCTFREE 1"
"0 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREE" "LIST GROUPS 1) TABLESPACE "EXAMPLE" LOGGING NOCOMPRESS"
. . 正在跳过表"JOBS"
看其中的红⾊部分,如果在原系统中你创建EMPLOYEES指定的表空间是EXAMPLE,⽽此时该⽤户的默认表空间是USERS,那么EXP的DMP⽂件⾥是EXAMPLE,⽽不是USERS,当然如果你建表时没特意指定表空间,那么默认的就会是⽤户的默认表空间。
所以对于这个问题的解决⽅法是:
1.如果⽬标系统中不存在跟原系统⼀样的表空间,这个⼀样,是指存储你要导⼊的数据的
表空间
如:你要导⼊的数据在原系统中是存放在USERS表空间的,⽽在⽬标系统并不存在这个表空间,那么你在导⼊数据时数据就会导⼊到⽬标系统中该⽤户的默认表空间
2.如果存在⼀样的表空间,则在⽬标系统中:
a) REVOKE UNLIMITED TABLESPACE FROM 该USER
b) 取消该⽤户在原系统导出数据所在表空间的配额:
SQL>ALTER USER XXX QUOTA 0 ON OLD_TABLESPACE
c) 将你要存储导⼊数据的表空间设为该⽤户默认的表空间
d) 添加该⽤户在其默认表空间中的配额:
SQL>ALTER USER XXX QUOTA UNLIMITED ON NEW_TABLESPACE
3.其他⽅法:
a) 可以⽤IMP的SHOW=Y将创建脚本SPOOL出来,然后修改其创建脚本中的TABLESPACE,将其修改成你所需要的表空间。
b) ⽤第三⽅⼯具,⽐如TOAD,产⽣其创建脚本,然后修改TABLESPACE值,然后导⼊的时候加IGNORE=Y进⾏导⼊。
c) 可以先导⼊数据,然后⽤TOAD的Rebuild Multi Objects,进⾏数据转移。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。