数据泵(一)-基本概念

来源:互联网 发布:ncbi蛋白质数据库 编辑:程序博客网 时间:2024/05/01 15:45

使用数据泵导出和导入

几乎所有DBA都熟悉oracle的导出和导入实用程序,它们将数据装载进或卸载出数据库,在oracle database10g和11g中,你必须使用更通用更强大的数据泵导出和导入(Data Pump Export andImport)实用程序导出和导入数据。

以前的导出和导入实用程序在oracle database 11g中仍然可以使用,但是Oracle强烈建议使用数据泵(DataPump)技术,因为它提供了更多的高级特性。
例如,
你可以中断导出/导入作业,然后恢复它们;
可以重新启动已失败的导出和导入作业;
可以重映射对象属性以修改对象;
可以容易地从另一个会话中监控数据泵的作业,甚至可以在作业过程中修改其属性;
使用并行技术很容易快速移动大量的数据;
因为oracle提供了针对数据泵技术的API,所以可以容易地在PL/SQL程序中包含导出/导入作业;
可以使用更强大的可移植表空间特性来快速移植大量的数据,甚至可在不同操作系统平台之间移动。

与旧的导出和导入实用程序不同,数据泵程序有一组可以在命令行中使用的参数以及一组只能以交互方式使用的特殊命令,你可以通过在命令行中输入expdphelp = y 或者 impdp help = y快速获取所有数据泵参数及命令的概述。
   
数据泵技术的优点

原有的导出和导入技术基于客户机,而数据泵技术基于服务器。默认所有的转储,日志和其他文件都建立在服务器上。以下是数据泵技术的主要优点:
改进了性能
重新启动作业的能力
并行执行的能力
关联运行作业的能力
估算空间需求的能力
操作的网格方式
细粒度数据导入功能
重映射能力

数据泵导出和导入的用途

将数据从开发环境转到测试环境或产品环境
在不同的操作系统平台上的oracle数据库直接的传递数据
在修改重要表之前进行备份
备份数据库
把数据库对象从一个表空间移动到另一个表空间
在数据库直接移植表空间
提取表或其他对象的DDL
注意:数据库不建立完备的备份,因为在导出文件中没有灾难发生时的最新数据。但是对于较小的数据库和个别的表空间的导出,数据导出仍然是一个可行的备份工具。

数据泵的组成部分

数据泵技术主要有三个以下部件组成
   
DBMS_DATAPUMP程序包。这是驱动数据字段元数据装载和卸载的主要引擎。DBMS_DATAPUMP程序包包括数据泵技术的核心部分,此核心部分以过程的形式出现,实际驱动数据装载和卸载。

DBMS_METADATA。 为了提取并修改元数据,Oracle提供了DBMS_METADATA程序包。

命令行客户机。两个实用程序-------expdp和impdp进行导出和导入工作。

数据泵文件
对于数据泵操作,可以使用三种类型的文件:
转储文件:此文件存储表数据已经被装载或卸载的原数据
日志文件:记录数据泵操作的消息和结果
SQL文件:数据泵使用一种特殊的参数sqlfile,把导入作业中要执行的所有DDL语句写入一个文件中。数据泵并不实际执行SQL,它仅仅是将DDL语句写入由SQLFILE参数指定的文件中。

使用目录对象

数据泵作业在服务器上(而不是启动作业的客户机上)创建其所有的转储文件。Oracle后台进程代表Oracle的拥有者,负责为所有转储文件设置I/O。这意味着从安全角度讲,你不能让用户在服务器上指定绝对路径,除此之外还存在安全措施等问题。为了避免这些类型的问题,数据泵使用目录对象。

目录对象(directoryobject)被称为是数据泵映射到一个特定操作系统目录的对象,例如,一个目录对象dump_dir可以指向服务器上/u01/app/oracle/admin/export目录。
然后通过简单的dump_dir目录对象名,访问该目录。
Oracle会创建一个默认的目录对象DATA_PUMP_DIR。该默认的对象目录由oracle在以下位置自动创建:
ORACLE_BASE/admin/sid
ORACLE_HOME/admin/sid
如果未建立自己的目录对象,oracle将使用默认的目录对象DATA_PUMP_DIR,并将转储文件,日志文件,SQL文件写到里面。要想了解默认的DATA_PUMP_DIR,可以使用DBA_DIRECTORIES视图查询。
   SELECT * FROM DBA_DIRECTORIES
   只有拥有SYS和SYSTEM权限的用户才能够使用默认目录对象DATA_PUMP_DIR。因此,SYSTEM用户可以启动数据泵作业,而不用提供目录名。其他未授权的用户能够使用数据泵导出或导入前,DBA(或者有CREATEANY DIRECTORY权限的用户)必须创建一个目录对象并授予相应的权限。
   CREATE OR REPLACE DIRECTORY directoy_name as‘/u/test/oradata’
   授予权限:
   GRANT READ, WRITE ON DIRECTORY directoy_name TO user_name
   之后所有的数据泵导出或导入作业均可使用DIRECTORY参数指定目录
   如:DIRECTORY = directoy_name,如果用户试图使用expdp或impdp而没有指定目录对象将报错。
 
在实际的作业中,可以通过以下方式指定目录对象:
DIRECTORY参数:在一个数据泵导出作业中,可以使用DIRECOTY参数指定对象名;
$ expdp hr/hr DIRECOTY=dump_dir……

DIRECOTY:FILE表示法:为替代使用DIRECTORY参数,可以将目录对象包含在一个特定的数据泵文件中(转储,日志,SQLFILE)。使用冒号(:)隔开文件说明中的目录和个别文件名;
$ expdp hr/hr LOGFILE=dump_dir:test.log……

DATA_PUMP_DIR环境变量:可以使用环境变量DATA_PUMP_DIR指向服务器的目录对象。使用export命令,
$ EXPORT DATA_PUMP_DIR= dump_dir
指定之后,就不需要在作业中再指定DIRECTORY参数了。

文件位置的优先次序

由于存在几种指定目录的方法,则究竟使用哪种,有一定的优先次序
Oracle首先检查是否将目录包含在一个与文件有关的参数内
第二个检查是否存在DIRECTORY参数
第三个检查是否使用环境变量
最后检查默认的DATA_PUMP_DIR目录对象

数据泵的权限
所有的oracle用户都可以在默认情况下使用数据泵实用程序,若使用某些高级任务,还必须拥有以下的权限
EXP_FULL_DATABASE,IMP_FULL_DATABASE

数据泵的作业结构
数据泵导出和导入实用程序使用几个进程来执行其作业,其中包括关键的主进程和工进程,以及客户机进程和影子进程,下面我们具体来看看各个进程:

主进程
主进程,更精确地说,MCP(Master ControlProcess),有一个进程名为DMnn,全主进程名用_DMnn_格式,每个作业只有一个主进程。
主进程控制整个数据泵作业的执行和顺序。具体来说,主进程执行一下任务:
创建并控制作业
创建并管理工进程(worker process)
监控作业并记录进程
维护作业状态并重新启动主表中的信息
管理必要的文件,包括转储文件集

主进程使用一个特殊的表,即主表。记录导出转储文件中的各数据对象的位置。主表很像oracle的其他表,它位于每个数据泵导出和导入作业的中心。主进程维护作业状态并启动主表中的信息。Oracle在每个导出任务作业开始的时候,在正在运行数据泵作业的用户模式中创建主表。主表包括了关于当前作业的各类信息,如导出/导入作业中的对象状态,转储文件集的位置,作业的参数以及所有工进程的状态,主表与导出作业的名字相同。
主进程只对导出过程使用主表,在导出结束时,在导出作业的最后一步,主进程将主表的内容写入导出转储文件并自动从数据库中删除主表。
主要导出作业成功完成或者发布了KILL_JOB的命令主表都将自动删除,但是如果使用STOP_JOB命令停止作业,或者导出作业由于某种原因失败,主表不会被删除,表中包含了要重新启动中断作业的全部必要信息。

工进程
工进程名为_DWnn_。它是实际执行繁重的装载和卸载数据工作的进程。主进程创建工进程,并行度决定主进程将创建几个工进程,工进程维护主表的行,在导出和导入各种对象时,他们根据作业状态信息更新主表,完成,未决或失败

影子进程
当客户机登陆Oracle服务器时,数据库创建了一个Oracle进程为数据泵API的请求服务。
此影子进程(shadow process)创建由主表和主进程组成的作业,一旦客户机崩溃,影子进程自动消失

客户机进程
客户机进程调用数据泵API。可使用两个客户机expdp和impdp,执行导出和导入。

转自:http://wenku.baidu.com/view/1359cd3843323968011c92bd.html

0 0
原创粉丝点击