第三章 装载和卸载数据
目标
完成本课,您将会:
*在不同的平台传输表空间
*理解数据泵的总体结构
*监控数据泵作业
*使用数据泵来进行导入和导出
*为数据的population创建外部表
*定义外表属性
跨平台可传输的表空间
在数据仓库和数据超市之间简化数据的分发.
容许数据库从一个平台移植到另一个平台
支持的平台(略)
跨平台的可传输表空间
在Oracle以前的版本中,可传输的表空间的特性可以让表空间在相同的体系结构和操作系统之间迁移.
oracle 10g进一步的让你使用可传输的表空间的特性,在平台之间进行传输.这样简化了从数据仓库到数据超市之间的分发,超市通常是运行在较小的平台上的.它也容许数据库通过重新建立数据字典和传输用户表空间来从一个平台移植到另外一个平台.
为了能够从一个平台到另外一个平台传输数据文件,你需要保证源系统和目标系统运行在支持的平台上.另外支持平台的数目不是很多...
需要相同的字符集.
最小兼容性
源和目标数据库都必须设置compatible为10.0.0或更高
数据文件头是平台相关的
在传输之前,确信所有的只读和脱机文件是平台相关的
两个必须是10g数据库;只读和脱机的意思是文件头无log号和checkpoint号
传输表空间的过程
要从一个平台传输表空间到另外一个平台,这个表空间的数据文件必须转换到源和目标数据库都能认的格式.尽管在10g,磁盘结构都符合公共格式,但是在源和目标数据库用不同的高低位也是可以的.当要传输到不同的高低位的平台的时候,你需要使用rman的convert命令来转换高低位.这个操作既可以在源也可以在目标数据库做.
假如平台的高低位是相同的,那就没有必要做转换了.基本上过程更以前的一致,除非平台使用不同的高低位.
查看平台的高低位
select tp.endian_format
from v$transportable_platform tp,
v$database d
where tp.platform_name = d.platform_name;
数据文件转换:例(略)
CLOB的例外
在转换高低位的时候,clob列是跳过的.
当你select的时候,才转换.
你可以使用create table as select 来进行转换.
动态性能视图的改变
v$database------- PLATFORM_ID
PLATFORM_NAME
ENDIAN_FORMAT
v$transportable_platform
数据泵概览
高速数据和元数据谦虚的服务器端工具
通过dbms_datapumb调用的结构
提供新一带的eXPort和import工具:expdb,impdb,web页面的接口
包含了原来的exp/imp的全功能
数据泵通用体系结构
DIRECT PATH API(DPAPI) :10g支持直接的path api接口,这样就小化数据转换和在转载和卸载的解析时间.
外表服务:数据泵使用新的ORACLE_DATAPUMP访问驱动这样就让外表了读写包含二进制流文件
DBMS_METADATA包被工作进程用来在所有的元数据的装载和卸载.数据库对象的定义存储是用XML而不是sql.
DBMS_DATAPUMP包包含了为批数据和元数据迁移高速导入和导出工具的api.
Sql*loader客户端已经集成到外表中,这样为外表访问参数提供了自动迁移loader控制文件.
expdp和impdp客户端是瘦客户端,通过调用dbms_datapump包来初始化和监控数据泵操作.今天他们引入了新的功能,
他们依然跟以前的exp和imp兼容.
像db control,复制,传输表空间和用户应用程序都能从这样的体系结构中受益.sqlplus也许可以为了对正在进行的操作进行简单的状态查询提供了dbms_datapump客户端
数据泵导出导入概览
作为后台作业提交,失败了可以继续,每个用户只有一个进程,数据写入master表.
数据泵导出导入工具是10g的新工具.尽管他们跟以前的exp/imp很像,但是他们是单独的产品.
data pump export是为卸载数据和元数据到一套操作系统文件叫做dump文件集的工具.数据泵导入是用来把dump文件集的元数据和数据导入要目标系统中.
数据泵api在服务器端访问它的文件而不是在客户端.
这些工具也可以用来在远程数据库导出数据,或直接从源数据库导入到目标数据库.这就是网络模式,这种模式一般在导入数据到只读数据库非凡的有用.
在每个数据泵操作的核心是主表(master table),用户运行数据泵作业的时候创建的表.主表维护作业的所有的方便.
在基于文件的导出作业中,主表建立了,在最后一步写到dump文件集中.相反的,把主表导入到当前用户的schema中是基于文件导入操作的第一步,也用在顺序创建所有要导入的对象.
当数据泵作业正常的完成的时候,主表被删.
数据泵导入导出的益处
数据访问方法
直接路径
外表
分离和重新连接到运行长时间的作业
重新启动数据泵作业
细度对象选择
显示的指定版本
并行操作(企业版)
估算导出作业空间消耗
在分步式环境中的网络模式
在导入的时候重新计算承受力
数据泵自动决定数据访问的方式.这些可以是直接路径也可以是外表.
不影响作业可以分离或重新连接到长运行的作业可以让你从多个地方来监控作业.所有停止的数据泵作业可以在不丢失数据的情况下重新启动,尽管足够的原信息仍然没有受到影响.不管这个作业是自愿的还是由于错误不情意的停止都没有关系.
exclude,include,content参数用在细度对象筛选上.
你可以为你要移动的对象知道版本参数来创建dump文件集,这样就会更以前的oracle版本兼容来支持数据泵.这个参数用来保留在以后的版本中.
你也可以使用parallel参数在指定活动执行用来代表这个export的作业服务器进程的最大数.
你也可以使用estimate_only参数来估计导出作业将消耗多少空间.
网络模式可以让你从远程数据库中直接导出为dump文件集.这可以通过数据库连接到源数据库来完成.
在导入的适合,你可以改变目标数据文件的名称,schema,和表空间.
总体实现概览
客户端进程对数据泵api进行调用.一旦作业启动了,客户端就不需要了.多个客户端为了监控或公主作业可以连接或断开这个作业.
当客户端登录到oracle数据库的适合,就创建了shadow进程.它为数据泵api的请求服务.当受到dbms_datapump.open请求的适合,shadow创建作业,这个作业主要包括创建master表,创建为各种进程通讯的aq对象,创建主控制进程.一旦作业运行了,shadow的主要任务通常包括为客户接受get_status请求.假如客户端断开,shadow也就没有了.
主控制进程控制数据泵的执行和顺序.它维护作业的状态,作业的描述,主表的重新启动和dump文件的信息.这个进程名称为DMnn.
接受到start_job的请求之后,主进程就根据parallel参数的值来创建许多工作进程.工作进程执行mcp受到请求的工作,主页是装载和卸载元数据和数据.工作进程的名称是DWnn.
假如外表的路径是作为装载和卸载数据的访问方法,工作进程根据装载和卸载的作业协调许多并行服务器进程.这样使得分区内的装载和卸载成为可能.
数据泵直接路径需要考虑的事项
细度访问控制的表在插入和选择模式是可以用的
lob类有域索引
现在有clustered的表
分区表的全局索引有单一分区的装载
bfile或不透明类型的列
引用完整性约束
有嵌入透明类型的varray列
数据泵支持对表的行数据的两种访问访问
使用直接路径api的直接路径
外表
数据泵自动的为每个表选择最合适的访问方法
当一个表的结构容许它和期望最大的单流性能的时候数据泵就使用直接路径装载和卸载数据.
然后假如上面的条件出现了,或者表含有加密列,或导入的表在装载和卸载的时候分区不一样,数据泵就使用外表而不是直接路径去移动数据.
数据泵文件位置
数据泵文件有三种类型
dump文件
日志文件
sql文件
绝对路径是不支持的
必须使用oracle路径对象
文件优先级
per-file路径
Directory参数
data_pump_dir环境变量
dump文件包含要迁移的数据和元数据
log文件记录这个操作相关的信息
sql文件记录sqlfile操作的输出
因为数据泵是基于服务器的而不是客户端的,
数据泵文件访问的是oracle的相对路径.为了安全的考虑,是不支持绝对路径的.
per-file路径对象必须为每个dump文件,log文件,sql文件指定.他们是通过冒号分隔的.
数据泵导入导出客户端通过directory参数来指定目录对象.这些路径对象描述了要访问的文件的位置.
你可以定义环境变量data_pump_dir,指定目录对象名而不用directory参数.数据泵