【IT168 服务器学院】第三章 装载和卸载数据
目标
完成本课,您将会:
*在不同的平台传输表空间
*理解数据泵的总体结构
*监控数据泵作业
*使用数据泵来进行导入和导出
*为数据的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参数.数据泵客户端如果没有指定显示的路径对象就会去查找这个环境变量.
数据泵文件命名和大小
一个dump文件集可以包含多个文件
dumpfile指定dump 文件的列表
comma分隔的列表
%U模板
dump文件的初始个数依赖于
parallel参数
dumpfile参数
filesize参数决定每个dump文件的大小
已经存在相同的文件名的文件不会覆盖
dumpfile参数指定基于磁盘的dump文件的名称和路径(可选).如果是多个文件,就要用comma分开来列,或不同的dumpfile参数来指定.
文件名称可以包含%U变量来替代,这个表示要产生多个文件.%U变量在结构文件的名称解释成两位的,固长的从01单调递增的整数.如果没有指定dumpfile,默认名称就是expdat.dmp.默认的,dump文件的自动扩展的.
如果指定了filesize,每个文件的都是filesize那么多大,并且是不可以扩展的.如果指定了%U变量,或者需要更多的dump空间,filesize大小的文件自动创建.否则,客户端就说到要添加新文件的信息.
如果模板中指定了%U参数,一开始创建的文件的个数等于parallel参数.
如果跟生成的文件同名文件已经存在,它不会被覆盖.会产生一个错误,导致作业取消.
数据泵工具:接口和模式
数据泵导入导出接口
命令行
参数文件
交互式命令行
db control
数据泵导入导出模式
完全
schema
表
表空间
传输表空间
命令行可以让你直接在命令行下指定大多数导出参数.
参数文件接口可以在参数文件中让你指定大多数的命令行参数.例外是parfile参数.
交互行会显示导入导出提示,这样你可以输入各种命令.
你也可以在web页面来调用.
数据泵和过滤
细粒度对象选择
数据选择
和以前的exp/imp工具那样,你可以选择包含或忽略索引,触发器,授权和约束.数据泵作业可以包括或排除实际上是任何类型的对象.
exclude参数容许在导入或导出操作中排除任何数据库对象.
include参数容许在操作中只包含指定的对象类型.
content参数容许你请求当前的操作仅仅是元数据,或仅仅是数据,或都有.
query参数跟以前的export工具的方式相同,但有两个地方的改进:可以加表名,也可以在导入的时候使用.
数据泵导入的传输
你可以创建重映射
数据文件使用remap_datafile
表空间使用remap_tablespace
schema使用remap_schema
remap_datefile=''c:\oradata\tbs6.f'':''/u01/tbs6.f''
使用transform,你可以排除表和索引
storage和tablespalce子句
只有storage子句
因为对象原数据是作为xml存在dump文件集中的,这样在导入的时候形成ddl的时候就也容许去应用传输.数据泵的导入支持下面几种传输.
remap_datafile在不同文件系统的时候跨平台移动数据库非常有用.
remap_tablespace容许对象从一个表空间移到另外的表空间
remap_schema提供改变对象属主,就像以前的fromuser,touser
监控数据泵作业的视图
V$session_longops;
dba_datapump_jobs;
dba_datapump_sessions;
v$session;
超过六秒的事务就会放入到v$session_longops中.
你可以使用数据字典视图来查看数据泵的信息.
dba_datapump_jobs视图有一个实例或rac多个实例中的活动的数据泵作业.它也显示了所有还没有更活动作业联系的数据泵主表.
你也使用作业信息来连接上活动作业去停止它,改变它的并行度,或监控它的进程.你可以使用从job_name得到的主表信息,去重新启动一个停止的作业,或删除不需要的主表.
dba_datapump_session显示了连接到一个作业的会话信息.v$session_longops中有数据泵作业的入口,指示这个作业的进程,已经有多少m的数据传送了.这个入口包含归结的传输大学,它的定期的更新,反应了数据传送的实际数量.
你也可以访问db control主页维护标签的工具部分来启动数据泵工具.
每个连接,你都有向导帮助你定义数据泵作业的参数.
并行完全导入导出的例子
expdp system/manager full =y
parallel = 4
dumpfile = datadir1: full1%u.dat,
datafir2: full2%u.dat,
datadir3: full3%u.dat,
datadir4: full4%u.dat
filesize = 2g
impdp system/manager
directory = NET_STORAGE_1
parallel = 4
dumpfile = full1%u.dat,full2%u.dat,
full3%u.dat,full4%u.dat
限制的schema导出的例子(略)
网络模式导入的例子(略)
联系到已经存在的作业的例子
注意我们不必指定job名称,因为这样只有一个活动的job.
exp_ts1是默认的作业名称.
每个用户只有有一个作业.
重新启动停止的作业例子
只有数据的unload的例子
外表的population 概览
把数据卸载到外部平滑文件中
处理复杂的etl
在以前的版本中,外表是只读的.然后在10g中,外表也可以被写入.进程不可以对外表进行dml操作也不可以创建索引.但是你可以使用create table as select来populate外表到os无关的文件.
外表的population操作
使用oracle_datapump访问驱动
数据不能被修改
使用oracle_datapump访问驱动,结果文件是只读的.
你可以联合几个文件来导入.
为外表创建的数据文件可以移动或者作为这个数据库或别的数据库的另外一个外表的数据文件使用.然而他们只能由oracle_datapump访问驱动来访问.同样,不同的外表产生的数据文件也可以在另外的外表中指定location子句.这样提供了从多个来源汇集数据的简单方式.唯一的限制就是每个外表的元数据必须相同.
外表并行操作
可以创建多个文件
每个文件只有一个并行进程.
parallel和location影响了并行度.
因为外表可以很大,你可以使用并行操作来卸载数据到外表.当外表操作声明为parallel的时候,就开始并行执行了.
并行度也受到由访问驱动写的并发文件个数限制.
这样,在指定的时间点,决不会有一个以上的进程写一个文件.
location指定的文件的个数应该匹配并行度因为每个i/o服务进程需要它自己的文件.
.....
略.
第四章 自动管理
完成本章,你就会
使用自动数据库诊断监控器
使用自动共享内存管理
使用自动优化统计收集
使用阻挡undo retention调整
使用自动checkpoint调整
oracle10g自动通知你性能和资源分配的问题.另外还给你提供解决问题的建议,oracle10g还能自动为您解决问题.
自动数据库诊断监控概览
数据库中的性能诊断引擎
自动诊断性能问题
提供根本的分析以及推荐的解决方案
确定哪些地方没有问题
集成了所有的组件为各种类型的数据使用.
ADDM是自我诊断的引擎,直接在oracle数据库中,使用医学中的类比,我们可以把addm描述成您的全科医生.
它看你的正个系统,给出诊断,要么要么给出建议的治疗或给你去参考专家.
addm是由oracle数据库自动调用的,执行分析来看系统的主要问题.在许多情况下,addm推荐解决方案一般都得到期待的收益.
addm下钻到问题原因的根本原因,二不是症状,并且报告特定问题对整个系统的影响.如果有推荐,它就会报告期望的收益.
addm
也会把系统没有问题的地方进行文档.这样可以让你很快就可以看到那些地方没有问题,节省了你分析性能的时间.
因为addm使用的方法,它可以用在任何类型的数据库中,oltp,数据仓库,或混合型的.
addm性能监控
默认的,oracle数据库每个小时自动的从sga中捕捉统计信息,然后以快照的形式把它存在awr中.这些存在磁盘上的快照跟statspack快照很相似.然而,他们包含比statspack快照更精确的信息.
另外,addm通过新的mmon进程在每个数据库实例上计划的自动运行,提前的发现问题.每次进行快照的时候,addm触发去对这个时间段,根据最近两次快照进行分析.这样在问题还没有严重的时候就提前监控和发现了瓶颈.
每个addm分析的结果存在awr中,可以通过db control进行访问.
ADDM方法学
addm分析使用从顶向下的分析,集中在识别资源的瓶颈.这主要是通过新的时间统计模式来作的,这个大大的帮助了查看oracle把时间花在哪里.时间是真正的共同流通,在所有的调整组件中.(Time is indeed the common currency used across all tuning components.)
流通時間實際上是用在所有協調組件部分上。 (翻译好难)
这种方法使得addm首先确定最大影响的问题.addm使用树结构来代表所有可能的调整问题.这个树是基于oracle数据库使用的新的等待模型统计.这个分类树是基于几十年的oracle性能调整专家的意见.树的始节点代表症状,往下走到叶子,addm识别主要的性能问题.addm通过使用基于时间的基线(threshold)来遍厉每个节点.如果基于时间的基线(threshold)没有超过特定的节点,addm会剪去响应的子树.这就让addm发现了没有问题的区域.这个树的结构让addm有先的剪去快速识别问题的搜索空间.运行addm分析对系统的影响很小,而且不用三秒就可以完成.
一个很好的例子就是一个系统经历很高的登录率.单凭经验的方法也许是每秒超过10个登录率就是要修理的问题了.然而,许多系统可以运行很高的登录率,而对性能没有显著的影响.使用新的时间模型数据,addm可以报告数量上,登录花了oracle数据库的20%的时间.这些定量的数据可以让你更容易让你确信要处理这个问题.
发现的最头等的性能问题
头等(top)
在以前的oracle数据库版本中,statspacke是不能识别这个表中的以西问题,因为统计中没有粒度.随着10g数据库引入了新的等待时间统计模型,addm可以识别图中列出的头等性能问题.addm比statspack好的另外一点是addm关注于分析头等的性能问题,最影响系统的问题.
数据库control和addm的发现物
通过看你数据库的db control主页,你可以看到诊断总计部分,这会让你看到addm上次自动运行的发现物的数量.
通过点击性能发现物链接,你就链接到了addm页,这里你可以访问最近一次addm运行的详细.
addm分析结果
在addm页,你可以看到最近一次自动运行的详细发现物.数据库时间代表分析时间内这个数据库会话的非空闲时间.每个发现物都有特定的影响百分比.这个影响代表了分析时间过程中,相应的问题消耗的时间跟数据库时间的比.
1.图形显示了平台活动用户的数量在这个点急剧增长了.主要的问题就是等待.
2.这个图标显示了addm输出显示在对于这个时间点,在这个月的底部.你可以点其它的图标看以前的分析结果.
3.这个发现物给你一个你的addm发现的要调节的性能区的简单的总结.通过点击特定的问题,你可以直接进行性能发现详细页.
你也可以点查看报告按钮来得到文本个数的性能详细分析.
Addm推荐
在性能发现物详细页,你可以得到解决相应问题的推荐.
推荐按schema,sql调整,db配置和其它来分类.benefit%列给出如果推荐应用了,你可以在数据库时间上得到最大的降低.
addm考虑系统的许多的变化,它的推荐包括:
硬件的改变.添加cpu或i/o子系统的配置
数据库配置:改变初始化参数
schema改变:表或索引的哈希分区,或只有自动段空间管理.
应用程序改变:为序列或绑定变量使用cache选项
使用其它的建议:对紧迫的对象运行sql调节建议或高负载建议或断建议.
数据库control和addm任务
摩尔的,addm运行的每个oracle数据库快照都存在awr中.然后,你可以创建自己定义的addm任务去分析你指明的启始快照和终止快照这段时间.
要创建addm任务,到database主页,在相关链接部分,点advisor central链接,在advisor central也下面,点addm链接.
选择period start 时间选项,然后点在你要使用作为开始时间点的那个筷子,然后选择终止时间点的快照.
点ok,这就让你进入了addm页,在这里你可以看到新的任务要创建的确定.
在这页的性能分析部分,你可以得到你手工创建任务的结果.
改变addm属性
1.确定statistics_level设置为typical和all
2.addm一定i/o子系统期待的速度来分析i/o性能
a.计算你的i/o子系统的速度
b.设置期待的速度
addm默认的由statistics_level初始化参数控制的.要让addm自动运行,你不能把它设置成basic.默认的设置是typical.
addm依靠dbio_expected addm参数部分的分析i/o性能.
这个dbio_expected代表读一个数据库块的平均时间,单位是微秒.addm默认是10毫秒.对大多现代硬件是个合适的值.如果你的硬件不太一样,考虑不同的值.要决定dbio_expected值,执行下面的步骤.
1.测量你硬件单一数据块的读平均时间.注意这个是随机的i/o,包括你使用标准硬件的查找时间.典型值在5000到2万微秒之间.
2.接下来,设置你的dbio_expected值.例如,你测试的是8000微秒,你影响执行图中的第一个命令,用sys用户.上面的查询告诉你当前的参数.
使用sql得到addm报告
上面的例子显示了使用sql命令的查看最近的addm报告.
要诊断数据库性能问题,如果下面两个条件满足了,addm分析可以在两个awr快照之间进行.
*如果两个快照在创建的时候都没有错误,而且都没有被清除.
*在两个快照之间没有关闭和启动的操作.
第二个例子使用addmrpt.sql脚本.这个脚本可以用来在提供的任意两个awr之间运行addm.这两个快照必须是从同一个实例得到的.
这个脚本识别你的dbid,列出最近三天的快照标识符.这帮助你决定你要分析的快照对.
自动共享内存管理概览
自动适应工作负载变化
最大内存使用
帮助减少内出溢出错误
自动共享内存管理是oracle10g的另外一个自我管理的重要增强.这个功能自动的进行oracle数据库实例共享内存结构的管理,减轻了你手工配置那些组件.除了最大效率的使用内存,这样减少需要额外硬件内存资源的成本,asmm特性通过引进更动态的,弹性的和适应性的内存管理方案大大的简化了数据库管理.
例如,系统在白天运行大的oltp作业(需要大的缓冲),在晚上运行并行批作业(需要大的大池),你也许同时需要配置buffer cache和large pool来容纳你的顶峰需求.
有了asmm,运行oltp的时候,你的buffer cache就会抢到很多的内存为了很高的性能.后来运行dss批作业的时候,内存自动的移动到大池,这样就可以用来进行平行查询超载,而不会减少内存溢出错误.
sga调整原则
基于工作负载,mman在后台间断性的捕捉统计
mman使用不同的内存参考
内存移动到最需要它的地方
推荐使用spfile
-在关数据库的时候组件的大小保存了
-保留的值用来是启动时候的大小
-避免重新去得到这个优化的值
sga_max_size可以改变
初始值都是零,如果设定了,那么就是该值的下限.
asmm使用新的后台进程叫作mman.mman作为sga内存的经济人协调内存组件的大小.sga内存经纪人跟踪组件的大小和进行未完成的调整大小的操作.
sga内存经纪人为了决定内存的分配,观察系统和工作负载.它从不会满足,每格不到几分钟就执行这个检测,这样内存总是分配给它需要的地方.如果没有自动共享内存管理,组件的大小就是预期的他们的单一worst-case的内存需要.
基于工作负载信息,自动共享内存管理:
在后台间断性的捕捉统计
使用不同的内存参考
执行假定分析来决定内存的最好的分配
把内存移动到最需要它的地方
如果使用spfile就会保存组件大小
使用自动共享内存管理的优点
SGA_TARGET为总大小,如果不为零,表示打开自动管理.
SGA_MAX_SIZE最大的sga
SGA_TARGE当前用到的sga