分类: Oracle
2009-05-18 14:31:05
如果在本地创建一个,想把服务器上的数据库导入到本地,可以这样做:
首先创建一个“导出导入.bat” ,然后编辑内容:
exp file=c:\aaa.dmp
sqlplus system/yyyy @1.txt
imp /password full=y file=c:\aaa.dmp
再创建一个“1.txt”文件,内容为:
drop user cascade
/
create user identified by password default tablespace tablespace_name
/
grant resource,connect to
/
quit
/
这样就可以实现自动导出服务器上的数据然后导入到本地了。我以前因为1.txt文件里的退出命令使用exit而不是quit老不成功。
如果要导入其中的一个或多个表,可以用imp username/pwd full=n table=(ta,tb) file=xxx.dmp
==================exp imp expdp impdp==================
exp:
1. 获取帮助
exp help=y
2. 将数据库TEST,test也可以是“ip:port/dbname”形式完全导出,用户名system 密码manager 导出到D:\xxx.dmp中
expfile=d:\xxx.dmp full=y
3. 将数据库中system用户与sys用户的表导出
expfile=d:\xxx.dmp wner=(system,sys)
4. 将数据库中的表a、b导出
expfile= d:\xxx.dmp tables=(a,b)
5. 将数据库中的表table1中的字段filed1以"00"打头的数据导出
expfile=d:\xxx.dmp tables=(table1) query=" where filed1 like '00%'"
6. 如果数据库过大,可以导出多个文件
exp file=d:\exp01.dmp,d:\exp02.dmp,d:\exp03.dmp filesize=2g buffer=10240000 log=a.log
7.导出表结构,不要数据、索引和统计信息等
expfile= d:\xxx.dmp rows=n triggers=n index=n STATISTICS=none
注意在导出前请先查看要导出的数据所占的空间,如下:
select sum(bytes)/1024/1024 from user_extents; 一般查看的值和要导出的dmp文件的大小大致相当,可以据此来确定导出几个dmp文件。
可以设置BUFFER大小来加快导出速度,一般可以设置为10m,即102400000,如
加上log参数可以把导出信息存放到日志文件里。
关键字 说明 (默认值)
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 分析对象 (ESTIMAT
ROWS 导出数据行 (Y)
PARFILE 参数文件名
CONSISTENT 交叉表的一致性 (N)
CONSTRAINTS 导出的约束条件 (Y
OBJECT_CONSISTENT 只在对象导出期间设置为只读的事务处理 (N)
FEEDBACK 每 x 行显示进度 (0)
FILESIZE 每个转储文件的最大大小
FLASHBACK_SCN 用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME 用于获取最接近指定时间的 SCN 的时间
QUERY 用于导出表的子集的 select 子句
RESUMABLE 遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME 用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
TTS_FULL_CHECK 对 TTS 执行完整或部分相关性检查
TABLESPACES 要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE 调用 iAS 模式导出的模板名
imp:
1. 获取帮助
imp help=y
2. 导入一个完整数据库
imp system/manager file=bible_db log=dible_db full=y ignore=y
3. 导入一个或一组指定用户所属的全部表、索引和其他对象
imp system/manager file=c:\xxx.dmp log=c:\a.log fromuser=username
或 impfile=username log=username
4. 将一个用户所属的数据导入另一个用户
imp system/manager file=c:\xxx.dmp log=c:\a.log fromuser=u1 touser=u2
imp system/manager file=c:\xxx.dmp log=c:\a.log fromuser=(u1,u2) touser=(u3,u4)
5. 导入一个表
imp system/manager file=c:\xxx.dmp log=c:\a.log fromuser=username TABLES=(a,b)
6. 从多个文件导入
imp system/manager file=(c:\exp01.dmp,c:\exp02.dmp,c:\exp03.dmp,c:\exp04.dmp)
log=paycheck, filesize=1G full=y
7. 使用参数文件
imp system/manager parfile=bible_tables.par
bible_tables.par参数文件:
#Import the sample tables used for the Oracle8i Database Administrator's
Bible. fromuser=username touser=username_copy file=username log=username_import
在数据量比较大的情况下需要设定buffer和commit参数,buffer一般为10m左右,即10240000.
设置ignore可以忽略导入的错误,避免出现错误终止继续导入操作
导入时有时候会出现如下错误:
IMP-00003: error 20001 encountered
ORA-20001: Invalid or inconsistent input values
ORA-06512: at "SYS.DBMS_STATS", line 6053
ORA-06512: at line 1
IMP-00017: following statement failed with ORACLE error 20001:
"BEGIN DBMS_STATS.SET_TABLE_STATS(NULL,'"HCL"','"SYS_SUBP5290"'"
",NULL,NULL,-1,-1,-1,0); END;"
可能是在导入数据后再导入统计信息时出错误,经过发现导出数据量比较小的情况下不会出现该过错,具体原因待查。避免该类错误在导入时加上statistics=none,说明不再导入统计信息:
imp c/c full=n file=H.dmp tables=(hcl) buffer=12800000 statistics=none log=a.log commit=y
对于导入数据很大的情况,如果buffer设置的过小则会出现导入错误:IMP-00032: SQL 语句超过缓冲区长度
这样导入的用户中的表或索引没有做统计分析。
imp参数如下:
关键字 说明 (默认值)
USERID 用户名/口令
FULL 导入整个文件 (N)
BUFFER 数据缓冲区大小
FROMUSER 所有者用户名列表
FILE 输入文件 (EXPDAT.DMP)
TOUSER 用户名列表
SHOW 只列出文件内容 (N)
TABLES 表名列表
IGNORE 忽略创建错误 (N)
RECORDLENGTH IO 记录的长度
GRANTS 导入权限 (Y)
INCTYPE 增量导入类型
INDEXES 导入索引 (Y)
COMMIT 提交数组插入 (
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)
STREAMS_CONFIGURATION 导入流的一般元数据 (Y)
STREAMS_INSTANTIATION 导入流实例化元数据 (N)
Oracle Database 10g引入了最新的数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中.
数据泵导出导入(EXPDP和IMPDP)的作用
1,实现逻辑和逻辑恢复.
2,在数据库用户之间移动对象.
3,在数据库之间移动对象
4,实现表空间搬移.
数据泵导出导入与传统导出导入的区别
在10g之前,传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP.使用EXPDP和IMPDP时应该注意的事项;
EXP和IMP是客户段工具程序,它们既可以在可以客户端使用,也可以在服务端使用.
EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用
IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件.
数据泵导出包括导出表,导出方案,导出表空间,导出数据库4种方式.
expdp:
使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录.因此,使用EXPDP工具时,必须首先建立DIRECTORY对象.并且需要为数据库用户授予使用DIRECTORY对象权限.
sql>conn / as sysdba
sql>CREATE DIRECTORY dump dir AS ‘D:DUMP’;
sql>GRANT READ, WIRTE ON DIRECTORY dump_dir TO test;
1,导出表
Expdp test/test DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=dept,emp
2,导出方案
Expdp test/test DIRECTORY=dump_dir DUMPFILE=schema.dmp
SCHEMAS=system,test
3.导出表空间
Expdp system/manager DIRECTORY=dump_dir DUMPFILE=tablespace.dmp
TABLESPACES=user01,user02
4,导出数据库
Expdp system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=Y
impdp:
Impdp test/test DIRECTORY=dump_dir DUMPFILE=tab.dmp
TABLES=dept,emp
Impdp system/manage DIRECTORY=dump_dir DUMPFILE=tab.dmp
TABLES=test.dept,test.emp REMAP_SCHEMA=test:SYSTEM
第一种方法表示将DEPT和EMP表导入到test方案中,第二种方法表示将DEPT和EMP表导入的SYSTEM方案中.
注意,如果要将表导入到其他方案中,必须指定REMAP SCHEMA选项.
2,导入方案
Impdp test/test DIRECTORY=dump_dir DUMPFILE=schema.dmp
SCHEMAS=test
Impdp system/manager DIRECTORY=dump_dir DUMPFILE=schema.dmp
SCHEMAS=test REMAP_SCHEMA=test:system
3,导入表空间
Impdp system/manager DIRECTORY=dump_dir DUMPFILE=tablespace.dmp
TABLESPACES=user01
4,导入数据库
Impdp system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y