Chinaunix首页 | 论坛 | 博客
  • 博客访问: 711231
  • 博文数量: 160
  • 博客积分: 8847
  • 博客等级: 中将
  • 技术积分: 1656
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-25 16:46
个人简介

。。。。。。。。。。。。。。。。。。。。。。

文章分类

全部博文(160)

文章存档

2015年(1)

2013年(1)

2012年(4)

2011年(26)

2010年(14)

2009年(36)

2008年(38)

2007年(39)

2006年(1)

分类: Oracle

2007-04-09 17:14:59

Oracle 9i R2 EXPORT
一:运行export的前提:
1:执行catexp.sql脚本或者catalog.sql脚本;
当数据库建立以后,运行catalog.sql脚本,这个脚本会做如下工作:
# Creates the necessary export views in the data dictionary
# Creates the EXP_FULL_DATABASE role
# Assigns all necessary privileges to the EXP_FULL_DATABASE role
# Assigns EXP_FULL_DATABASE to the DBA role
# Records the version of catexp.sql that has been installed
2:确认磁盘空间是否足够;
SQL> SELECT SUM(BYTES) FROM USER_SEGMENTS WHERE SEGMENT_TYPE='TABLE' and SEGMENT_NAME='XXX_PRODUCT';
SUM(BYTES)
----------
     65536
这个可以大体确定用多大的空间容纳你的导出文件。上例大约需要:65KB,留出100KB来就可以了。
3:确保你有足够的权限;
为了使用export,你必须拥有CREATE SESSION权限;导出其他用户的表,必须拥有EXP_FULL_DATABASE权限。这个权限被赋予了所有的DBAs。下面的用户是保留用户,不能进行export:
# ORDSYS
# MDSYS
# CTXSYS
# ORDPLUGINS
# LBACSYS
4:Export的执行:
有三种方式:命令行方式、交互方式和参数文件方式。
常用的有命令行方式和参数文件方式。
1):命令行方式
exp username/password PARAMETER=values
exp username/password PARAMETER=(values1,values2,values3...)
2):参数方式(推荐)
exp PARFILE=filename
exp username/password PARFILE=filename,PARAMETER=values
这里,通过读参数文件来确定导出时的参数;不过,后面还是可以跟“参数=值”
的,这样参数文件的指定参数就失效了。
参数说明:
BUFFER:
buffer_size = rows_in_array * maximum_row_size
估算buffer_size的大小:
例如:CREATE TABLE sample (name varchar(30), weight number);
maximum_row_size=[(30+2) + (22+2)]=56
假如表中有100行,那么buffsize_size=100 * 56 =5600
COMPRESS:
默认值:y
指定是EXPORT和IMPORT怎样管理表中数据的初始化范围。
默认值COMPRESS=y,这样会导致标记的表数据合并到一个初始化范围以便导入。
COMPRESS用来改变STORAGE参数INITIAL的值。
比如:
CREATE TABLE ... STORAGE(INITIAL 10K NEXT 10K...)
现在数据已经扩展到100个EXTENT,如果采用COMPRESS=y来EXPORT数据,则产生
的导出语句为:
CREATE TABLE ... STORAGE(INITIAL 1000K NEXT 10K...)
这个时候初始化分配的空间为1000K,而NEXT的值并没有改变。
假如现在有一个表A,有4个100M的EXTENT,执行:
DELETE FROM A;
二、export的执行:
1:exp \'sys/bestwiz@instance AS SYSDBA\'
2:exp \'sys/bestwiz as sysdba\' parfile=/tmp/parfile
create table customers(
customer_id integer
constraint customers_pk primary key,
first_name varchar2(10) not null,
last_name varchar2(10) not null,
dob date,
phone varchar2(12)
) storage (initial 10k next 10k);
如果这个表有4个10M的EXTENT,执行DELETE FROM CUSTOMERS;
然后再用COMPRESS=y导出数据,产生的CRETE TABLE语句就会有
400M的INITIAL。即使这个表里没有数据,dmp文件很小,但是产
生的IMPORT表会很大。
如果这个表有15个10M的EXTENT,然后再用COMPRESS=y导出数据,
就会有150M的INITIAL,导入时,因为单个EXTENT不能跨越多个
文件,就会报错。
所以,最好不要使用COMPRESS=y。
CONSISTENT:
默认值:n
指定是否在exprot时使用SET TRANSACATION READ ONLY 语句确保
导出的数据在单个时间点上保持一致并且保证在exp命令执行期间
其他应用程序不会对目标数据进行更新。
如果设置CONSISTENT=n,每一个表通常在一个单独的事务里导出。然而,如果表中包含嵌套表,
外层表和每一个内层表都使用各自的事务。如果表时分区表,每一个分区作为单独的事务进行
导出。
所以,如果有嵌套表或者分区表被其他应用程序实时更新,那么数据就会产生不一致。为了降低
这种可能,当他们不被更新的时候再进行导出操作。
CONSTRAINTS:
默认值:y
指定是否导出表的约束。
DIRECT:
默认:n
指定使用直接路径导出或者通常路径导出。
指定DIRECT=y,这种方法科研直接读取数据导出,绕过SQL命令处理层。这种方法比通常路径导出快很多。
FEEDBACK:
默认:0
指定是否以“.”显示进度条。例如:你指定:FEEDBACK=10,每导出10行记录显示一个“.”。
FILE:
default:expdat.dmp
指定使用导出文件。export支持任何扩展名和多个导出文件。
exp scott/tiger FILE = dat1.dmp,dat2.dmp,dat3.dmp FILESIZE=2048
当导出文件dat1.dmp的大小达到2048以后,写dat2.dmp,依此类推。如果给出的文件太少,会提示继续输入一个文件名。
文件的大小是有限制的,一般不要超过2GB。超过2GB的需要通过管道来进行。
支持:KB、MB等写法。
FULL:
默认:n
表示export是整个数据库模式导出。你需要有EXP_FULL_DATABASE权限。
GRANTS:
默认:y
指定是否导出对象的权限。对象的权限被导出取决于你使用full database 模式还是user 模式。
在全局数据库模式中,所有的权限都会被导出。
在用户模式中,只有表拥有的权限会被导出。System权限总是会被导出的。
HELP
默认:n
显示export的参数及其描述。
exp help=y
INDEXS
默认:y
指定是否导出索引。
LOG
默认:none
指定一个接收export过程中的信息。
例如:
exp SYSTEM/password LOG=export.log
OWNER:
默认:none
表示是在用户模式下导出,并且列出该用户的导出对象。如果是DBA用户,多个用户会被列出。
PARFILE
默认:none
指定一个包含export参数列表的文件。
QUERY
Default: none
这个参数容许你通过一个查询语句来过滤导出的记录。
exp scott/tiger TABLES=emp,bonus QUERY=\"WHERE job=\'SALESMAN\' and sal\<1600\"当执行query时,就会对所有列出的表(由TABLES指定)的执行:
SELECT * FROM emp WHERE job='SALESMAN' and sal <1600;
SELECT * FROM bonus WHERE job='SALESMAN' and sal <1600;
如果包含QUERY语句中的条件在某一个表中无法查询到,那么就会显示一条错误信息,不会导出。
例如:
[oracle@oratest ~]$ cat /tmp/parfile
TABLES=(
CUSTOMERS
liujun
)
ROWS=Y
FEEDBACK=100
FILE=/tmp/emp.sql
GRANTS=y
QUERY="WHERE CUSTOMER_ID =6"
LOG=/tmp/emp.log
因为liujun这个表中没有CUSTOMER_ID这个字段,执行:
[oracle@oratest ~]$ exp info/bestwiz parfile=/tmp/parfile
Export: Release 9.2.0.4.0 - Production on 嬥 Apr 6 18:28:47 2007
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
Export done in JA16SJIS character set and AL16UTF16 NCHAR character set
About to export specified tables via Conventional Path ...
EXP-00011: INFO.CUSTOMERS does not exist
. . exporting table                         LIUJUN
EXP-00056: ORACLE error 904 encountered
ORA-00904: "CUSTOMER_ID": invalid identifier
Export terminated successfully with warnings.
# The parameter QUERY cannot be specified for full, user, or tablespace mode exports.
# The parameter QUERY must be applicable to all specified tables.
# The parameter QUERY cannot be specified in a direct path export (DIRECT=y)
# The parameter QUERY cannot be specified for tables with inner nested tables.
# You cannot determine from the contents of the export file whether the data is the result of a QUERY export.
RECORDLENGTH:
默认:系统值
指定导出文件的字节数长度。当你想把导出文件从一个系统迁移到另一个系统时,RECORDLENGTH参数的值是必须的。
RESUMABLE:
默认:n
这个参数被用来启用或者禁用可恢复配置。如果你想在导出出错时将现有操作挂起,然后当错误修正以后在继续执行操作,可以选择:RESUMABLE=y
RESUMABLE_NAME:
Default: 'User USERNAME (USERID), Session SESSIONID, Instance INSTANCEID'
RESUMABLE_TIMEOUT:
Default: 7200 seconds (2 hours)
ROW:
默认:y
指定是否导出表中的数据。
STATISTICS:
默认:ESTIMATE
导出是否使导入时生成统计图。
TABLES:
默认:none
指定导出的是表模式,并且列出需要导出的表名、分区和子分区。
schemaname.tablename:partition_name
schemaname.tablename:subpartition_name
TABLES=\(emp,dept\)
Table Name Restrictions:
默认情况下,数据库中的表名是以“大写”的形式来存储的。如果有大小写或者小写的
表名,那么可以使用双引号。
例如:
TABLES='"Emp"'
因为“#”表示对后面的内容进行注释,如果表名中包含“#”,那么也可以使用双引号。
例如:
TABLES=(emp#, dept, mydata)
export只会导出emp,不会处理后面的两个表;
TABLES=("emp#", dept, mydata)
那么export就会处理所有的3个表。
TABLESPACES
默认:none
指定表空间的所有表被导出到dump文件中。包括:所有包含在表空间中的表、表空间中的分区表列表。索引文件也会被随着表导出,不论索引放在哪个位置。
当使用TABLESPACE和TRANSPORT_TABLESPACE=y参数时,可以指定要限制的表空间的列表。
TRANSPORT_TABLESPACE
默认值:n
如果指定y,这个参数科研导出表空间的元数据。
TRIGGERS:
默认:y
指定是否导出触发器。
TTS_FULL_CHECK
默认:false
当设置为:true时,export去检查恢复在对象的外层的恢复装置是否依赖目前的装置。
USERID (username/password)
username/password AS SYSDBA
or
AS SYSDBA
下面举例说明:
1)用exp导出全局数据库
exp SYSTEM/password PARFILE=params.dat
cat params.dat
FILE=dba.dmp
GRANTS=y
FULL=y
ROWS=y
命令行方式:
exp SYSTEM/password FULL=y FILE=dba.dmp GRANTS=y ROWS=y
2)用exp导出用户模式数据:
exp scott/tiger PARFILE=params.dat
cat params.dat
FILE=scott.dmp
OWNER=scott
GRANTS=y
ROWS=y
COMPRESS=y
命令行方式:
exp scott/tiger FILE=scott.dmp OWNER=scott GRANTS=y ROWS=y COMPRESS=y
3)用exp导出表模式的数据:
1:DBA导出两个用户的表的数据:
exp SYSTEM/password PARFILE=params.dat
FILE=expdat.dmp
TABLES=(scott.emp,blake.dept)
GRANTS=y
INDEXES=y
命令行方式:
exp SYSTEM/password FILE=expdat.dmp TABLES=(scott.emp,blake.dept) GRANTS=y- INDEXES=y
2:用户导出自己的表:
exp blake/paper PARFILE=params.dat
FILE=blake.dmp
TABLES=(dept,manager)
ROWS=y
COMPRESS=y
命令行:
exp blake/paper FILE=blake.dmp TABLES=(dept, manager) ROWS=y COMPRESS=y
3:使用通配符导出匹配的表:
exp SYSTEM/password PARFILE=params.dat
FILE=misc.dmp
TABLES=(scott.%P%,blake.%,scott.%S%)
命令行:
exp SYSTEM/password FILE=misc.dmp TABLES=(scott.%P%,blake.%,scott.%S%)

导出结束后:
Export terminated successfully without warnings
表示没有错误,并且完成了导出。
Export terminated successfully with warnings
表示在导出时遇到了可以恢复的错误,并且完成了导出。
Export terminated unsuccessfully
导出遇到了无法恢复的错误,export终止了。
阅读(3022) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~