移动数据:一般体系结构
- DBMS_DATAPUMP:该程序包中包括高速导出与导入实用程序的API,可用于成批地移动数据和元数据。
- 直接路径 API (DPAPI):Oracle Database 10g 支持直接路径 API 接口
- DBMS_METADATA:工作进程使用这个程序包卸载或加载所有元数据
- 外部表 API:使用 ORACLE_DATAPUMP 和 ORACLE_LOADER 访问驱动程序,可将数据存储在外部表中(即与平台无关的文件中)。
- SQL*Loader:为外部表访问数提供自动移植的加载程序控制文件
- expdp和 impdp:通过调用DBMS_DATAPUMP 程序包可启动并监视数据泵操作
- 其它客户端
目录对象
- 概览
- 目录对象是一些逻辑结构,代表服务器文件系统中的一个物理目录。
- 目录对象由 SYS 用户拥有。
- 目录名在数据库中是唯一的
- 创建目录对象
SQL*Loader( 可将外部文件中的数据加载到Oracle 数据库表中)
- 概览
- 输入数据文件:SQL*Loader 从控制文件中指定的一个或多个文件读取数据。
- 固定记录格式
- 可变记录格式
- 流记录格式(默认)
- 控制文件:一个文本文件。
- 要加载数据的位置
- 数据格式
- 配置详细资料
- 内存管理
- 记录拒绝
- 中断的加载处理详细资料
- 数据操纵详细资料
- 日志文件:SQL*Loader 开始执行时,它会创建一个日志文件。日志文件包含加载操作的详细概要。
- 坏文件:坏文件包含被SQL*Loader 或 Oracle 数据库拒绝的记录。
- 放弃文件:包含因不符合控制文件中指定的任一记录选择标准而被过滤掉的记录
- 使用 SQL*Loader 加载数据
- 维护 > 数据移动 > 移动行数据 > 从用户文件加载数据
- 加载方法
数据泵
- 概览
- 可以使用dbms_datapump调用
- 直接路径,外部表访问
- 优点
- 选择细粒度级对象和数据
- execlude 排除类型
- execlude=view
- EXCLUDE=PACKAGE
- EXCLUDE=INDEX:"LIKE 'EMP%'"
- include 包含类型
- INCLUDE = object_type[:"name_expr"]
- content 只请求元数据,请求数据
- content=ALL|metadata_only|data_only
- 显式指定数据库版本
- 并行执行
- parallel指定最大线程
- 估计到处作业占用的空间
- estimate_only
- 分布式环境中的网络模式
- 导入过程中的重新映射
- 可更改文件名,方案和表空间
- 数据取样和元数据压缩
- compression参数
- 数据泵导出和导入实用程序
- 接口
- 命令行
- 参数文件
- 交互式命令行
- Database Control
- 模式
- 完整
- 方案
- 表
- 表空间
- 可移动表空间
- 取样率(指定要从源数据库取样和卸载的数据百分比)
- 语法:SAMPLE=[[schema_name.]table_name:]sample_percent ( sample_percent 的范围:.000001 至 100 )
- 示例:SAMPLE="HR"."EMPLOYEES":44
- 导出文件
- 数据和元数据要移动的转储文件
- 存储信息的日志文件
- 存储SQLFILE操作输出的SQL文件
- 文件位置的优先级
- 每个文件的目录
- DIRECTORY 参数
- DATA_PUMP_DIR 环境变量
- DATA_PUMP_DIR 目录对象(默认为expdat.dmp)
- 转换
- REMAP_DATAFILE 重新映射数据文件
- REMAP_DATAFILE = 'C:\oradata\tbs6.f ':'/u1/tbs6.f '
- REMAP_TABLESPACE 重新映射表空间
- REMAP_SCHEMA 重新映射方案
- TRANSFORM = SEGMENT_ATTRIBUTES|STORAGE|OID|PCTSPACE:{y|n|v}[:object type]
- SEGMENT_ATTRIBUTES:如果将该值指定为 Y,则包含段属性
- STORAGE:如果将该值指定为Y,则包含 STORAGE子句
- OID:可确定是重用还是重新创建抽象数据类型ID
- PCTSPACE:必须大于0
- 性能注意事项
- 使用 PARALLEL 参数最大化作业性能。
- 示例:
-
expdp hr/hr FULL=y
DUMPFILE=dp_dir1:full1%U.dmp, dp_dir2:full2%U.dmp
FILESIZE=2G PARALLEL=3
LOGFILE=dp_dir1:expfull.log JOB_NAME=expfull - 性能初始化参数
- 影响数据泵性能
- DISK_ASYNCH_IO=TRUE
- DB_BLOCK_CHECKING=FALSE
- DB_BLOCK_CHECKSUM=FALSE
- 设置得较高,才能实现最大并行度
- PROCESSES
- SESSIONS
- PARALLEL_MAX_SERVERS
- 应大幅度调整以下参数的大小
- SHARED_POOL_SIZE
- UNDO_TABLESPACE
- 数据泵访问路径:注意事项
- 直接路径
- 外部表
- 加密列
- 集群表
- 卸载和加载时的不同分区,以及其它项
外部表
- 外部表填充
- 使用 ORACLE_DATAPUMP 访问驱动程序将数据卸载到外部文件
- 不修改外部表
- 使用外部表
- 可直接使用外部文件中的数据或将数据加载到另一个数据库。
- 只能使用 ORACLE_DATAPUMP 访问驱动程序读取生成的文件。
- 可将从不同源生成的文件组合在一起以进行加载。
- 使用 ORACLE_DATAPUMP 填充外部表
-
CREATE TABLE emp_ext
(first_name, last_name, department_name)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY ext_dir
LOCATION ('emp1.exp','emp2.exp','emp3.exp')
)
PARALLEL
AS
SELECT e.first_name,e.last_name,d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id AND
d.department_name in
('Marketing', 'Purchasing'); - 使用 ORACLE_LOADER 填充外部表
-
CREATE TABLE extab_employees
(employee_id NUMBER(4),
first_name VARCHAR2(20),
last_name VARCHAR2(25),
hire_date DATE)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER DEFAULT DIRECTORY extab_dat_dir
ACCESS PARAMETERS
( records delimited by newline
badfile extab_bad_dir:'empxt%a_%p.bad'
logfile extab_log_dir:'empxt%a_%p.log'
fields terminated by ','
missing field values are null
( employee_id, first_name, last_name,
hire_date char date_format date mask "dd-mon-yyyy“))
LOCATION ('empxt1.dat', 'empxt2.dat') )
PARALLEL REJECT LIMIT UNLIMITED;
数据字典
- [DBA| ALL| USER]_EXTERNAL_TABLES 列出了数据库中外部表的特定属性。
- [DBA| ALL| USER]_EXTERNAL_LOCATIONS 列出了外部表的数据源。
- [DBA| ALL| USER]_TABLES 描述了数据库中的关系表。
- [DBA| ALL| USER]_TAB_COLUMNS 描述了数据库中的表列、视图和集群。