Oracle导入实用程序(Import utility)同意从数据库中提取数据,和写入数据到一个操作系统文件
项目。imp所用的基本格式:imp[username[/password[@service]]],下面的例子imp经常使用
法。
1. 获取帮助
imp help=y
2. 导入一个完整数据库
imp system/manager file=bible_db log=dible_db full=y ignore=y
3. 导入一个或一组指定用户所属的所有表、索引和其它对象
imp system/manager file=seapark log=seapark fromuser=seapark
imp system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)
4. 将一个用户所属的数据导入还有一个用户
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)
5. 导入一个表
imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)
6. 从多个文件导入
imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4) 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=seapark touser=seapark_copy file=seapark log=seapark_import
8. 增量导入(9i中已经取消)
imp system./manager inctype= RECTORE FULL=Y FILE=A
Oracle imp/exp帮助说明
C:Documents and Settingsadministrator>exp help=y
Export: Release 9.2.0.1.0 - Production on 星期三 7月 28 17:04:43 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
通过输入 EXP 命令和username/口令。您能够
后接username/口令的命令:
例程: EXP SCOTT/TIGER
或者。您也能够通过输入跟有各种參数的 EXP 命令来控制“导出”
依照不同參数。
要指定參数,您能够使用keyword:
格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
或 TABLES=(T1: P1,T1: P2)。假设 T1 是分区表
USERID 必须是命令行中的第一个參数。
keyword 说明(默认) keyword 说明(默认)
--------------------------------------------------------------------------
USERID username/口令 FULL 导出整个文件 (N)
BUFFER 数据缓冲区大小 OWNER 全部者username列表
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 交叉表的一致性 (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 模式导出的模板名
在没有警告的情况下成功终止导出。
==================================================
C:Documents and Settingsadministrator>imp help=y
Import: Release 9.2.0.1.0 - Production on 星期三 7月 28 17:06:54 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
能够通过输入 IMP 命令和您的username/口令
后接username/口令的命令:
例程: IMP SCOTT/TIGER
或者, 能够通过输入 IMP 命令和各种參数来控制“导入”
依照不同參数。要指定參数。您能够使用keyword:
格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)
例程: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
或 TABLES=(T1: P1,T1: P2),假设 T1 是分区表
USERID 必须是命令行中的第一个參数。
keyword 说明(默认) keyword 说明(默认)
--------------------------------------------------------------------------
USERID username/口令 FULL 导入整个文件 (N)
BUFFER 数据缓冲区大小 FROMUSER 全部人username列表
FILE 输入文件 (EXPDAT.DMP) TOUSER username列表
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)
STREAMS_CONFIGURATION 导入 Streams 的一般元数据 (Y)
STREAMS_INSTANITATION 导入 Streams 的实例化元数据 (N)
下列keyword仅用于可传输的表空间
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户
成功终止导入,但出现警告。
Oracle8i/9i EXP/IMP使用经验
一、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/[email protected] file=c.dmp log=c.log tables=t query="""where id=1 and name=‘gototop‘"""
二、8i IMP经常使用选项
1、FROMUSER和TOUSER,使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。
2、IGNORE、GRANTS和INDEXES,当中IGNORE參数将忽略表的存在。继续导入,这个对于需
要调整表的存储參数时非常实用,我们能够先依据实际情况用合理的存储參数建好表,然后直
接导入数据。
而GRANTS和INDEXES则表示是否导入授权和索引,假设想使用新的存储參数重
建索引,或者为了加快到入速度。我们能够考虑将INDEXES设为N。而GRANTS一般都是Y。
另外一个EXP/IMP都有的參数是PARFILE,它是用来定义EXP/IMP的參数文件。也就是说,上
面的參数都能够写在一个參数文件里。但我们一般非常少使用。
三、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.
六.对于有跨schema的index,imp时可能会报
“Segmentation fault”错误。
比如schema A中建有基于schema B表的索引。在导入A时会报上述错误,此时通过
indexes=n来屏蔽导入索引以防止错误,事后能够用下面语句查出这种索引,最好将
索引放在和基表在同一个schema。
SQL>select index_name,owner,table_name,table_owner
from dba_indexes
where owner!=table_owner;
七.导入到不同于原表空间的表空间
原来的数据在USERS表空间里面,我想把它IMP进APP表空间,我已经改动了目的
用户的默认表空间。为什么结果还是IMP到USERS表空间中了呢?
Solution:Oracle并没有提供什么參数来指定要导入哪个表空间,数据默认将导入到原
本导出时数据所在的表空间中。可是我们能够通过下面的方法来实现导入到不同的表空
间。
1.在IMP时候使用INDEXFILE參数
当给此參数指定了某一文件名称,IMP的时候全部的index将不会直接导入到表空间中。
而是在指定的文件里生成创建index的脚本。
然后用文本编辑器打开此文件,直接编辑脚本中的storage參数,改动为想要导入的表
空间名称。
然后又一次运行IMP。使用INDEXS=n參数将除Index之外的Objects导入。
最后进入SQL*PLUS。直接执行刚才编辑的脚本,生成索引。
该方法适用于将index以及constraints导入指定的表空间。
2.改变目的用户的默认表空间
这就是上面说的常常有人提问的方法。可是上述的问题之所以没有成功,是由于缺少了
以下的几步。
首先,收回目的用户的"UNLIMITED TABLESPACE"权限:
revoke unlimited tablespace from username;
其次。取消目的用户在原数据导出表空间中的配额,这样才干迫使IMP把数据导入到
用户的默认表空间中去。
然后,将希望导入的表空间设为目的用户的默认表空间,并加入配额。
最后。运行IMP。
3.使用TOAD
TOAD是强大的Oracle数据库管理软件,是Quest出品的第三方软件。我们能够使用其
中的Rebuild Multi Objects工具来实现将多个Object转移到指定的表空间。
于是我们能够无论三七二十一,先IMP,然后再用TOAD作事后的改动。
关于TOAD的使用,此处不作详解。
八.导入工具imp可能出现的问题
(1) 数据库对象已经存在
普通情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;
数据库对象已经存在, 按缺省的imp參数, 则会导入失败
假设用了參数ignore=y, 会把exp文件内的数据内容导入
假设表有唯一keyword的约束条件, 不合条件将不被导入
假设表没有唯一keyword的约束条件, 将引起记录反复
(2) 数据库对象有主外键约束
不符合主外键约束时, 数据会导入失败
解决的方法: 先导入主表, 再导入依存表
disable目标导入对象的主外键约束, 导入数据后, 再enable它们
(3) 权限不够
假设要把A用户的数据导入B用户下, A用户须要有imp_full_database权限
(4) 导入大表( 大于80M ) 时, 存储分配失败
默认的EXP时, compress = Y, 也就是把全部的数据压缩在一个数据块上.
导入时, 假设不存在连续一个大数据块, 则会导入失败.
导出80M以上的大表时, 记得compress= N, 则不会引起这样的错误.
(5) imp和exp使用的字符集不同
假设字符集不同, 导入会失败, 能够改变unix环境变量或者NT注冊表里
NLS_LANG相关信息.导入完毕后再改回来.
(6) imp和exp版本号不能往上兼容
imp能够成功导入低版本号exp生成的文件, 不能导入高版本号exp生成的文件
依据情况我们能够用低版本号的oracleclient的exp导出数据库。然后进行导入操作。
(7)ROLLBACK段不够
Export/Import使用过程中, 假设数据量非常大会出现‘ROLLBACK段不够‘的错误.
这时要建一个足够大的ROLLBACK段, 使它ONLINE而其它ROLLBACK段
OFFLINE. 这样, Export/Import使用这个大ROLLBACK段, 从而避免上述现象.
(8)EXPORT/IMPORT对SQUENCE的影响
在两种情况下。EXPORT/IMPORT会对SEQUENCE。
a. 假设在EXPORT时,用户正在取SEQUENCE的值,可能造成SEQUENCE的不
一致。
b. 另外假设SEQUENCE使用CACHE。在EXPORT时,那些在CACHE中的值就
会被忽略 的,仅仅是从数据字典里面取当前值EXPORT。
假设在进行FULL方式的
EXPORT/IMPORT时,恰好在用sequence更新表中某列数据, 并且不是上面两种
情况。则导出的是更新前的数据。
假设採用常规路径方式。每一行数据都是用
INSERT语句,一致性检查和INSERT TRIGGER 假设採用DIRECT方式,某些约
束和trigger可能不触发,假设在trigger中使用sequence.nextval,将会对sequence
有影响。
九.ORACLE获取DDL的几种经常使用的方法
大体的分为三种方法:
1.能够通过toad、plsql develop等第三方工具进行导出DLL操作。用这样的办法的好
处在于操作简单方便,但须要安装,以下简介一下用这两个工具获得DLL语句
的操作。
2.直接通过EXP/IMP工具
Oracle提供的最原始最有用的导入导出工具,我们大体上能够分为三种办法实现导
出DDL。
a. 通过imp指定indexfile參数,但这样的办法不爽在于有每行前会有REM
语法大体例如以下:
exp userid=... tables=emp rows=n file=emp.dmp
imp userid=... file=emp.dmp indexfile=emp.sql
b. 通过imp指定show=y,同一时候指定log參数,格式上也不是非常爽,在格式上非常美
观的还是通过工具导出的比較美观
语法大体例如以下:
exp userid=... tables=emp rows=n file= emp.dmp
imp userid=... file= emp.dmp show=y log=emp.sql
c. 利用unix下有strings命令,语法大体例如以下。这样的方法比較野蛮:
exp userid=... tables=tab1 rows=n file=tab1.dmp
strings emp.dmp >emp.sql
emp.sql中就有DLL语句了
3.通过9i的DBMS_METADATA包得到DLL语句
基本上用到的语法例如以下:
a. 获取单个的建表和建索引的语法
set heading off;
set echo off;
Set pages 999;
set long 90000;
spool DEPT.sql
select dbms_metadata.get_ddl(‘TABLE‘,‘DEPT‘,‘SCOTT‘) from dual;
select dbms_metadata.get_ddl(‘INDEX‘,‘DEPT_IDX‘,‘SCOTT‘) from dual;
spool off;
b.获取一个SCHEMA下的全部建表和建索引的语法,以scott为例:
set pagesize 0
set long 90000
set feedback off
set echo off
spool scott_schema.sql
connect scott/tiger;
SELECT DBMS_METADATA.GET_DDL(‘TABLE‘,u.table_name)
FROM USER_TABLES u;
SELECT DBMS_METADATA.GET_DDL(‘INDEX‘,u.index_name)
FROM USER_INDEXES u;
spool off;
c. 获取某个SCHEMA的建所有存储过程的语法
connect brucelau /brucelau;
spool procedures.sql
select
DBMS_METADATA.GET_DDL(‘PROCEDURE‘,u.object_name)
from
user_objects u
where
object_type = ‘PROCEDURE‘;
spool off;
另:dbms_metadata.get_ddl(‘TABLE‘,‘TAB1‘,‘USER1‘)
三个參数中。第一个指定导出DDL定义的对象类型(此例中为表类型),第二个是
对象名(此例中即表名),第三个是对象所在的username。
十.优化exp和imp的性能
exp /imp 可配置一些參数,以改进Export和Import的性能。至于性能详细能提升多
高,则取决于要导出或导入的数据,以及数据量的大小。
导出性能:用下面通用參数改进Export的性能:
DIRECT:对一个Export,将DIRECT參数设为DIRECT=Y。将数据直接转移
到Exportclient。
这种转移绕过SQL命令处理层(估值缓冲区),从而避免了
无谓的数据转换。
RECORDLENGTH:增大RECORDLENGTH參数值。来改进性能。为该參数
推荐的值是DB_BLOCK_SIZE的一个整数倍。或者是文件系统I/O块大小的一个
整数倍。
更改这个參数的值会影响写入磁盘前积累的数据量。
该參数的最大值为
64千字节(64 KB)。
导入性能:用下面通用參数改进Import的性能:
BUFFER:BUFFER參数指定了缓冲区的大小,数据行将通过这个缓冲区进行转
移。由此便决定了由Import导入的每个阵列插入中的行数。如配合COMMIT=Y
參数指定BUFFER參数,则Import会在每个阵列插入之后进行提交。而不是在
加载完整的表之后再默认地提交。一个较大的BUFFER參数值有助于改善性能。
但假如BUFFER值过高。会造成OS分页和换行。反而影响性能。
INDEXES。
INDEXES參数指定是否导入用户生成的索引。
如指定
INDEXES=N,则将提高Import的性能,由于在一个无索引的表中导入数据要快得
多。注意。假设首先用INDEXFILE=返回Import。来在请求的Import模式下提取
索引创建命令。再将其写入指定的文件,那么以后仍可重建索引。
使用INDEXFILE选项时,不会导入数据对象。
可对输出文件()进行编辑,
并将其作为一个SQL脚本使用。以便在Import之后创建索引。
另外还能够通过调整一下參数提高exp和imp的性能
. 改动sqlnet.ora在里面添加trace_level_client=off
. 运行dbmspool.sql然后SQL>begin
SQL> dbms_shared_pool.sizes(300);
SQL> end;
SQL> /
. sql>ALTER SYSTEM FLUSH SHARED_POOL
. sql>alter system set LOG_CHECKPOINT_INTERVAL =
redologfilesizebytes/512bytes=1000
也能够改动log_checkpoint_timeout=24000
. sql>alter system set fast_start_mttr_target =24000
. sql>alter system set pga_aggregate_target=100M
没有下commit=y所以仅仅有通过
A.select undtsn,undoblks from v$undostat;的变化来看资料又没有进去了
B. 在imp时通过设定 FEEDBACK=N笔资料来显示Imp的进度
重整的时候假设要drop 掉table重建的话,一定要注意该table上有没有FK等
在EXP /IMP的时候为了加速须要将index=n參数加进exp/imp运行脚本,这种话在
做完imp后须要recreate index 事实上资料量大的话recreate也非常花时间,故能够通过在
create index 的脚本里面增加parallel 5;来提速
另I/O能够在Windows 的效能的地方看到
十一.IMPORT时的对象倒入顺序
在倒入数据时,ORACLE有一个特定的顺序,可能随数据库版本号不同而有所变化。
可是如今是这种。
1. Tablespaces 14. Snapshot Logs
2. Profiles 15. Job Queues
3. Users 16. Refresh Groups
4. Roles 17. Cluster Definitions
5. System Privilege Grants 18. Tables (also grants,comments,
6. Role Grants indexes, constraints, auditing)
7. Default Roles 19. Referential Integrity
8. Tablespace Quotas 20. POSTTABLES actions
9. Resource Costs 21. Synonyms
10. Rollback Segments 22. Views
11. Database Links 23. Stored Procedures
12. Sequences 24. Triggers, Defaults and Auditing
13. Snapshots
按这个顺序主要是解决对象之间依赖关系可能产生的问题。
TRIGGER最后导入。所以在
INSERT数据到数据库时不会激发TRIGGER。
在导入后可能会有一些状态是INVALID的
PROCEDURE,主要是IMPORT时会影响一些数据库对象,而IMPORT并不又一次编译
PROCEDURE。从而造成这样的情况。能够又一次编译之,就能解决问题。
十二. Imp/exp的模糊导入导出
前段时间在网上看到一篇关于imp/exp模糊导入导出的文章,甚感兴趣,今
天中午做了一个測试,感觉Oracle实在是博大,有非常多东西不用的话,对
我们来说永远是一个陌生的地带。揭去面纱,也就那么回事!
说明:使用通配符导出的最大长处,就是当你的库中有非常多表,但你又不想
全导。仅仅导当中一部分的时候。你能够尽可能的少写部分代码,提供工作效
率!
我一般喜欢以演示样例的方式展现或表达一些东西。这样大家可能了解/掌握的
更快下面!
毕竟非常多东西我们大部分同志知其然就能够了!嘿嘿。^|^
备注:该项特性在9i以后新增
測试步骤例如以下:
SQL> conn study/study
已连接。
SQL>
SQL> create table toms_test_1 (no int);
表已创建。
SQL> create table toms_test_2 (no int);
表已创建。
SQL> create table toms_test_3 (no int);
表已创建。
SQL> insert into toms_test_1 values(1);
已创建 1 行。
SQL> insert into toms_test_2 values(2);
已创建 1 行。
SQL> insert into toms_test_3 values(3);
已创建 1 行。
SQL> commit;
提交完毕。
Microsoft Windows XP [版本号 5.1.2600]
(C) 版权全部 1985-2001 Microsoft Corp.
C:Documents and Settings>e:
E:>exp study/study tables=(study.toms_test%) file=toms_test.dmp
rows=y
Export: Release 9.2.0.1.0 - Production on 星期三 6月 7 12:42:32 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径 ...
. . 正在导出表 TOMS_TEST_1 1 行被导出
. . 正在导出表 TOMS_TEST_2 1 行被导出
. . 正在导出表 TOMS_TEST_3 1 行被导出
在没有警告的情况下成功终止导出。
SQL>
SQL> drop table toms_test_1;
表已丢弃。
SQL> drop table toms_test_2;
表已丢弃。
SQL> drop table toms_test_3;
表已丢弃。
SQL>
SQL> select table_name from tabs where table_name like ‘TOMS_TEST%‘;
未选定行
SQL>
E:>imp study/study file=toms_test.dmp fromuser=study touser=study
Import: Release 9.2.0.1.0 - Production on 星期三 6月 7 12:44:01 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
经由常规路径导出由EXPORT:V09.02.00创建的文件
已经完毕ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
. . 正在导入表 "TOMS_TEST_1" 1行被导入
. . 正在导入表 "TOMS_TEST_2" 1行被导入
. . 正在导入表 "TOMS_TEST_3" 1行被导入
成功终止导入。但出现警告。
E:>
SQL> select table_name from tabs where table_name like ‘TOMS_TEST%‘;
TABLE_NAME
------------------------------
TOMS_TEST_1
TOMS_TEST_2
TOMS_TEST_3
SQL> select * from toms_test_1;
NO
----------
1
SQL> select * from toms_test_2;
NO
----------
2
SQL> select * from toms_test_3;
NO
----------
3
SQL>
SQL> select table_name from tabs where table_name like ‘%TEST%‘;
TABLE_NAME
------------------------------
TOMS_TEST_1
TOMS_TEST_2
TOMS_TEST_3
SQL>
E:>exp study/study tables=(study.%test%) file=test.dmp rows=y
Export: Release 9.2.0.1.0 - Production on 星期三 6月 7 12:51:56 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径 ...
. . 正在导出表 TOMS_TEST_1 1 行被导出
. . 正在导出表 TOMS_TEST_2 1 行被导出
. . 正在导出表 TOMS_TEST_3 1 行被导出
在没有警告的情况下成功终止导出。
E:>
SQL> drop table toms_test_1;
表已丢弃。
SQL> drop table toms_test_2;
表已丢弃。
SQL> drop table toms_test_3;
表已丢弃。
SQL>
E:>imp study/study file=test.dmp fromuser=study touser=study
Import: Release 9.2.0.1.0 - Production on 星期三 6月 7 12:53:11 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
经由常规路径导出由EXPORT:V09.02.00创建的文件
已经完毕ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
. . 正在导入表 "TOMS_TEST_1" 1行被导入
. . 正在导入表 "TOMS_TEST_2" 1行被导入
. . 正在导入表 "TOMS_TEST_3" 1行被导入
成功终止导入。但出现警告。
E:>
SQL> select table_name from tabs where table_name like ‘%TEST%‘;
TABLE_NAME
------------------------------
TOMS_TEST_1
TOMS_TEST_2
TOMS_TEST_3
SQL>
E:>exp study/study tables=(%test%) file=test.dmp rows=y
Export: Release 9.2.0.1.0 - Production on 星期三 6月 7 13:08:56 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径 ...
. . 正在导出表 TOMS_TEST_1 1 行被导出
. . 正在导出表 TOMS_TEST_2 1 行被导出
. . 正在导出表 TOMS_TEST_3 1 行被导出
在没有警告的情况下成功终止导出。
E:>
SQL> conn toms/toms
已连接。
SQL> create table stu_1 (no int);
表已创建。
SQL> create table stu_2 (no int);
表已创建。
SQL> insert into stu_1 values(1);
已创建 1 行。
SQL> insert into stu_2 values(2);
已创建 1 行。
SQL> commit;
提交完毕。
E:>exp study/study tables=(%test%,toms.stu%) file=test.dmp rows=y
Export: Release 9.2.0.1.0 - Production on 星期三 6月 7 13:11:05 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径 ...
. . 正在导出表 TOMS_TEST_1 1 行被导出
. . 正在导出表 TOMS_TEST_2 1 行被导出
. . 正在导出表 TOMS_TEST_3 1 行被导出
当前的用户已更改为 TOMS
. . 正在导出表 STU_1 1 行被导出
. . 正在导出表 STU_2 1 行被导出
在没有警告的情况下成功终止导出。
SQL> conn study/study
已连接。
SQL> drop table toms_test_1;
表已丢弃。
SQL> drop table toms_test_2;
表已丢弃。
SQL> drop table toms_test_3;
表已丢弃。
SQL> select table_name from tabs where table_name like ‘%TEST%‘;
未选定行
SQL> conn toms/toms
已连接。
SQL> drop table stu_1;
表已丢弃。
SQL> drop table stu_2;
表已丢弃。
SQL> select table_name from tabs where table_name like ‘%STU%‘;
未选定行
SQL>
E:>imp study/study file=test.dmp fromuser=study touser=study
tables=(%test%)
Import: Release 9.2.0.1.0 - Production on 星期三 6月 7 13:15:22 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
经由常规路径导出由EXPORT:V09.02.00创建的文件
已经完毕ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
. . 正在导入表 "TOMS_TEST_1" 1行被导入
. . 正在导入表 "TOMS_TEST_2" 1行被导入
. . 正在导入表 "TOMS_TEST_3" 1行被导入
成功终止导入,但出现警告。
SQL> conn study/study
已连接。
SQL> select table_name from tabs where table_name like ‘%TEST%‘;
TABLE_NAME
------------------------------
TOMS_TEST_1
TOMS_TEST_2
TOMS_TEST_3
SQL> select * from toms_test_1;
NO
----------
1
SQL> select * from toms_test_2;
NO
----------
2
SQL> select * from toms_test_3;
NO
----------
3
SQL>
E:>imp study/study fromuser=toms touser=toms file=test.dmp
tables=(stu%)
Import: Release 9.2.0.1.0 - Production on 星期三 6月 7 13:23:49 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
经由常规路径导出由EXPORT:V09.02.00创建的文件
已经完毕ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
. 正在将TOMS的对象导入到 TOMS
. . 正在导入表 "STU_1" 1行被导入
. . 正在导入表 "STU_2" 1行被导入
成功终止导入。但出现警告。
E:>
SQL> conn toms/toms
已连接。
SQL> select table_name from tabs where table_name like ‘%STU%‘;
TABLE_NAME
------------------------------
STU_1
STU_2
SQL> select * from stu_1;
NO
----------
1
SQL> select * from stu_2;
NO
----------
2
SQL>
本文来源于CSDN博客,转载请注明出处:http://blog.csdn.net/yjq8116/archive/2009/03/26/4025847.aspx