#元数据文件导出

# 命令格式

exp username/password@ip:port [KEYWORD[=value1,value2,...,valueN]]

username/password@ip:port

执行导出命令的数据库用户(登录用户)密码、服务端地址,对其权限要求见不同导出模式具体描述。

KEYWORD

命令选项:

  • FILE:导出文件的名称,对名称已存在的文件进行覆盖,必须输入。
  • 导出模式如下,每次导出只能选择下列一种模式,若命令中未指定导出模式,则默认为FULL=N。
    • FULL:整库导出模式命令,Value为单值Y或N。
    • OWNER:用户导出模式命令,Value为用户名称。
    • TABLES:表导出模式命令,Value为表名称。
  • ROWS:用于指定是否导出表数据,Value为单值Y或N,可省略,省略则默认为Y。
  • LOG_PATH:用于指定导出日志的路径,Value为路径名,可省略,省略则不生成日志文件。
  • LOG_LEVEL:用于指定导出日志的日志级别,Value为[ERROR, WARN, INFO, DEBUG, TRACE],可省略,省略则默认为INFO。

示例

$ exp sales/sales@127.0.0.1:1688 FILE=export.full.dump FULL=Y

# 命令选项

导出的元数据文件中包含了部署形态以及表类型相关信息。导入此文件时,除单机HEAP表和共享集群HEAP表的文件可互用外,待导入数据库的部署形态和default_table_type必须与文件中信息一致。

# FULL模式

FULL模式用于导出整库的数据,包括:

  • 用户元数据
  • 用户下的所有对象元数据
  • 用户下的表数据
  • 所有的系统权限
  • 所有的对象权限
  • 所有的角色
  • 所有的审计策略/使能
  • 所有的OUTLINE
  • 所有的PROFILE
  • 所有的SQLMAP
  • 所有的定时任务
  • 所有的LBAC相关信息

执行本模式导出的数据库用户必须拥有DBA角色权限。其中,Value值的含义为:

  • Y:导出所有用户下的数据。
  • N:导出登录用户下的数据。

YashanDB仅支持在FULL=Y模式下导出PROFILE。

YashanDB仅支持在FULL=Y模式下导出LBAC相关信息。

示例

-- 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

# ROWS模式

本选项用于指定是否导出表数据,为Y时表示同时导出元数据和表数据,为N时表示仅导出元数据,可省略,省略则默认为Y。

示例

# 同时导出表数据和元数据
$ exp sales/sales@127.0.0.1:1688 FILE=export.full.dump FULL=Y ROWS=Y

# 仅导出元数据
$ exp sales/sales@127.0.0.1:1688 FILE=export.full.dump FULL=Y ROWS=N

Note

导出索引数据时,若索引owner与索引所在表的owner不一致,导出后索引的owner将自动变为表的owner,确保采用fromuser模式导入时能正常导入该索引,不对数据库性能造成影响。