导出实用程序提供了一种简单方法,在Oracle 数据库之间传送数据对象,即使这些数据库位于具有不同硬件和软件配置的平台上。对Oracle 数据库运行导出实用程序时,该实用程序将提取对象(如表),如果这些对象还存在相关对象,则继续提取这些相关对象(如索引、注释和授权)。提取出的数据写入一个导出文件中,该文件是一个Oracle 二进制格式的转储文件,且通常位于磁盘或磁带上。导入实用程序从导出转储文件中读取对象定义和表数据。它用于将数据对象插入Oracle数据库。您可以使用这两个实用程序来执行以下任务:
• 归档历史数据
• 保存表定义以防止出现用户错误故障
• 在计算机和数据库之间,或在不同版本的Oracle服务器之间移动数据
• 在数据库之间传输表空间
要使用导出实用程序,必须对Oracle 数据库拥有CREATE SESSION 权限。要导出由另一个用户拥有的表,必须已启用了EXP_FULL_DATABASE 角色。该角色授予所有DBA。
如果您不具有EXP_FULL_DATABASE 角色中所包含的系统权限,则无法导出包含在另一个用户的方案中的对象。要使用导入实用程序,需要具有CREATE SESSION 权限以便登录到Oracle 数据库服务器。此权限属于在创建数据库期间建立的CONNECT 角色。即使您没有创建导出文件,也可以执行导入。但是,如果导出文件是由其他人而不是您创建的,则只当您具有IMP_FULL_DATABASE 角色的权限时,才可以导入该文件
2.1表模式
表模式可以导出用户方案中的指定的表,而不是导出所有表。已授权的用户可以导出其他用户所拥有的指定的表。
2.2用户模式
用户模式可以导出某个用户方案的所有对象。已授权的用户可以导出一组指定用户的方案中的所有对象。此模式可用于执行完全数据库导出。
2.3表空间模式
表空间模式可用于导出指定表空间中的所有表。使用可移动的表空间功能,可以将一组表空间从一个Oracle 数据库移动到另一个Oracle数据库。利用可移动的表空间来移动数据,其速度比对相同数据执行导入/导出要快得多,原因是传输表空间只需要复制数据文件,然后并入表空间结构信息即可。您还可以使用可移动的表空间来移动索引数据,从而避免在导入表数据时必须重建索引。
2.4完全数据库模式
完全数据库模式可以导出所有数据库对象,SYS 方案中的对象除外。只有已授权的用户才能在此模式中执行导出。调用导出实用程序命令行导出
可以使用导出实用程序的命令行模式将数据库数据复制到某个操作系统文件中。只有导入实用程序才能读取该文件。
示例
创建名为exp1.dmp 的导出文件,其中包含HR 方案中的表EMPLOYEES 和DEPARTMENTS(包括表行):
exp hr/hr tables=employees,departments rows=y file=exp1.dmp
注:表名称中可包含任意数量的'%' 模式匹配字符,其中每个字符可将表名称中的零或多个字符与数据库中的表对象相匹配。
创建一个名为expdat.dmp 的快速导出文件,其中包含HR 方案的所有对象:
exp system/manager owner=hr direct=y
注:缺省的导出文件名为expdat.dmp。
创建一个名为expdat.dmp 的导出文件,该文件中包含属于TS_EMPLOYEES 表空间的所有的对象定义,并生成一个名为ts_employees.log 的日志文件:
exp \'username/password AS SYSDBA\' TRANSPORT_TABLESPACE=y\
TABLESPACES=ts_employees LOG=ts_employees.log
查看exp的参数:imp help=y
2.5 导出导入参数
参数
| 说明 | 缺省值 |
BUFFER | 指定用于提取行的缓冲区的大小 (以字节为单位) | 取决于操作 系统
|
FILE | 指定导出文件的名称 | expdat.dmp |
FULL | 指示以完全数据库模式导出 | N |
HELP | 显示参数的说明 | N |
INDEXES | 指定是否导出索引 | Y |
LOG | 指定接收信息性消息和错误消息的文件名 | 无 |
OWNER | 指示以用户模式导出,并列出要导出的对象所属的用户 | 无 |
PARFILE | 指定包含有导出参数列表的文件 | 无 |
RECORDLENGTH | 定文件记录长度(以字节为单位) | 取决于操作 系统 |
ROWS | 指定是否导出表数据的行 | Y |
TABLES | 指定以表模式导出,并列出要导出的表名称、分区和子分区名称 | 无 |
TABLESPACES | 指定导出表空间中的所有表 | 无 |
TRANSPORT_ TABLESPACE | 启用导出可移动的表空间元数据 | N |
USERID | 指定执行导出操作的用户的用户名/口令 | 无 |
COMPRESS | 指定导出实用程序如何管理表数据 的初始区 | Y |
DIRECT | 指定使用直接路径 | N |
FEEDBACK | 指定为已导出的n 行显示时间段形式的进度表。 | 0 |
3.1导出工具exp交互式命令方式
交互式导出scott用户的数据库表emp
在此我们顺便说一下交互式导入imp工具的使用,在scott用户下用一张test表作为测试,
使用交互式将test表导出到当前目录下,名称为tt.dmp 即E:\tt.dmp
这时我们可以将导出的数据集导入某个用户下,如导入hsiufo用户下:
查看结果:
3.2导出工具exp非交互式命令行方式
这个用于导出整个数据库,例如:
exp system/oracle file=/exp/db_global.dmp log=/exp/db_global.log full=y rows=y compress=y direct=y
如果以sysdba的身份执行exp/imp操作,用下面的方式:
exp "'sys/oracle as sysdba'" file=/exp/db_global.dmp log=/exp/db_global.log full=y rows=y compress=y direct=y
这两个选项用于定义EXP的对象。OWNER定义导出指定用户的对象;TABLE指定EXP的table名称。例如:
exp system/oracle file=/exp/db_hsiufo.dmp owner=hsiufo;
exp system/oracle file=/exp/db_hsiufo.dmp tables=hsiufo.emp;
如果使用的用户没有权限,将不能导出。
我们可以给scott用户exp_full_database权限,以使他能够导出其他用户的数表。
这时使用scott可以导出其他schema中的表
3.2.3 BUFFER和FEEDBACK
在exp/imp比较多的数据时,我会考虑设置这两个参数。
例如:
imp system/oracle file=c:\hsnc50090406000.dmp log=c:\hs.log fromuser=hsnc50 touser=hsiufo;
没有显式的添加参数,buffer取默认值。以下的错误只要增大buffer的值即可解决。
这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录,这里需要主要的是在unix操作系统上,设置的目录对oracle用户必须是可读写权限的,如:
查看/exp的读写权限:
更改/exp的权限:chown –R oracle:dba /exp ,问题即可解决。
QUERY参数后面跟的是where条件,值得注意的是,整个where子句需要使用""括起来,where子句的写法和SELECT中相同,我们以hsiufo用户的test作试验。
exp scott/tiger file=/exp/test.dmp tables=hsiufo.test query="'where sal=3000'"
该选项在8i中可用。如果导出的dmp文件过大时,最好使用FILESIZE参数,限制文件大小不要超过2G。如
exp userid=duanl/duanl file=f1,f2,f3,f4,f5 filesize=2G owner=scott
4.1 FROMUSER和TOUSER
使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。例如我们做exp时导出的test表中sal=3000的对象导入到用户scott中。
查看scott用户的表:
4.2 导入一个完整数据库
imp system/oracle file=/exp/db.dmp log=/exp/imp.log full=y ignore=y
4.3导入一个或一组指定用户所属的对象
imp system/oracle file=/exp/db.dmp log=/exp/imp.log ignore=y fromuser=scott
4.4 导入一个表
imp system/oracle file=/exp/db.dmp log=/exp/imp.log ignore=y tables=dept fromuser=scott