#元数据文件导出
# 命令格式
exp username/password@ip:port [KEYWORD[=value1,value2,...,valueN]]
username/password
执行导出命令的数据库用户(登录用户)、密码、地址(默认为本机),对其权限要求见不同导出模式具体描述。
KEYWORD
命令选项:
- FULL:整库导出模式命令,Value为单值Y或N。
- FILE:导出文件的名称,对名称已存在的文件进行覆盖,必须输入。
- OWNER:用户导出模式命令,Value为用户名称。
- TABLES:表导出模式命令,Value为表名称。
# 导出模式
在上述导出命令中,KEYWORD导出模式可以省略,则默认为FULL=N的模式。
元数据文件导出有如下限制:
- 单机部署与分布式部署的文件不支持串用。
- 对于引用TYPE的表,仅支持导出表的定义,无法导出表中的数据。
- 被导出的表使用TYPE的同义词作为列时,会导出为具体类型。
- OWNER和TABLES模式下,不支持导出间接使用和其他用户下的TYPE。
- 仅支持在FULL模式下导出PROFILE。
- 表/列的
COMPRESSION=UNCOMPRESSED
时,压缩属性不会导出,压缩属性具体见CREATE TABLE章节描述。 - 仅支持在FULL模式下导出审计策略及使能,审计日志无法导出。
# FULL模式
FULL模式用于导出整库的数据,包括:
- 用户元数据
- 用户下的所有对象元数据
- 用户下的表数据
- 所有的系统权限
- 所有的对象权限
- 所有的角色
- 所有的审计策略/使能
- 所有的OUTLINE
- 所有的PROFILE
- 所有的SQLMAP
- 所有的定时任务
执行本模式导出的数据库用户必须拥有DBA角色权限。其中,Value值的含义为:
- Y:导出所有用户下的数据。
- N:导出登录用户下的数据。
示例
--SALES为拥有DBA权限的用户
--统计导出之前对象信息
SELECT COUNT(1) ts_count FROM DBA_TABLESPACES;
TS_COUNT
---------------------
6
SELECT COUNT(1) user_count FROM DBA_USERS;
USER_COUNT
---------------------
3
SELECT COUNT(1) table_count FROM DBA_TABLES;
TABLE_COUNT
---------------------
89
SELECT COUNT(1) index_count FROM DBA_INDEXES;
INDEX_COUNT
---------------------
134
--统计SALES用户下的area表数据
SELECT COUNT(1) sales_data FROM sales.area;
SALES_DATA
---------------------
5
--统计SALES0用户下的area表数据
SELECT COUNT(1) sales0_data FROM sales0.area;
SALES0_DATA
---------------------
5
--执行整库导出
$ exp sales/sales file=export.full.dump full=y
# OWNER模式
OWNER模式用于导出指定用户下的对象及数据,包括:
- 用户下的所有对象元数据
- 用户下的表数据
- 用户下对象的对象权限
本模式命令的Value值为用户名称,可以为多个,输入重复用户名时将只导出一次。 最多可以输入1024个不同用户。
对于执行本模式导出的数据库用户,如Value值与此用户相同,即导出本用户下的数据,则对其权限无要求;如Value值中存在非本用户,即导出其他用户下的数据,则要求其必须拥有DBA角色权限。
对于跨用户的对象之间的依赖关系,假设用户A,B的对象存在依赖关系,若仅导出用户A的数据,且在导入时库中B用户对象不存在,将会导致导入操作失败。
示例
--以SALES用户登录,统计相关数据
SELECT COUNT(1) table_count FROM USER_OBJECTS;
COUNT(1)
---------------------
30
SELECT COUNT(1) data_count FROM sales_info;
DATA_COUNT
---------------------
6
--执行导出
$ exp sales/sales file=export.owner.export owner=sales
# TABLES模式
TABLES模式用于导出指定的表数据,包括:
- 表的元数据
- 基于表的索引,注释,约束,列属性等信息
- 表数据
- 表的对象权限
本模式命令的Value值为表名称,可以为多个,输入重复表名时将只导出一次。最多可以输入1024个不同的表。
对于执行本模式导出的数据库用户,如其为导出表的OWNER,则对其无权限要求;否则,要求其拥有DBA角色权限。
示例
--以SALES用户登录,统计sales_info表相关数据
SELECT COUNT(1) constriant_count
FROM USER_CONSTRAINTS
WHERE table_name='SALES_INFO';
CONSTRIANT_COUNT
---------------------
4
SELECT COUNT(1) index_count
FROM USER_INDEXES
WHERE table_name='SALES_INFO';
INDEX_COUNT
---------------------
1
SELECT COUNT(1) part_count
FROM USER_TAB_PARTITIONS
WHERE table_name='SALES_INFO';
PART_COUNT
---------------------
3
SELECT COUNT(1) data_count FROM sales_info;
DATA_COUNT
---------------------
6
--执行导出
$ exp sales/sales file=export.table.export tables=sales_info